<?php
namespace App\Services;
use DateTime;
use App\Entity\User;
use App\Entity\Ticket;
use App\Entity\Chambre;
use App\Entity\Annonce;
use App\Entity\Caution;
use App\Entity\Command;
use App\Entity\Company;
use App\Entity\Product;
use App\Entity\Transporteur;
use App\Repository\AvisRepository;
use App\Repository\UserRepository;
use App\Repository\PhotosRepository;
use App\Repository\TicketRepository;
use App\Repository\CautionRepository;
use App\Repository\CommandRepository;
use App\Repository\CompanyRepository;
use App\Repository\ProductRepository;
use App\Repository\LocationRepository;
use App\Repository\WishListRepository;
use App\Repository\MessagingRepository;
use App\Repository\AbonnementRepository;
use App\Repository\DepartmentRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\SubCategoryRepository;
use App\Repository\TransporteurRepository;
use App\Repository\ProductOptionRepository;
use App\Repository\AnnonceCompanyRepository;
use App\Repository\CommandProductRepository;
use App\Repository\ContactProductRepository;
use App\Repository\TransporteurWeightPriceRepository;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class Filter
{
/**
* @var DepartmentRepository
*/
private $departmentRepository;
/**
* @var SubCategoryRepository
*/
private $subCategoryRepository;
/**
* @var CommandRepository
*/
private $commandRepository;
/**
* @var ProductRepository
*/
private $productRepository;
/**
* @var AvisRepository
*/
private $avisRepository;
/**
* @var CommandProductRepository
*/
private $commandProductRepository;
/**
* @var WishListRepository
*/
private $wishListRepository;
/**
* @var MessagingRepository
*/
private $messagingRepository;
/**
* @var TicketRepository
*/
private $ticketRepository;
/**
* @var ContactProductRepository
*/
private $contactProductRepository;
/**
* @var ProductOptionRepository
*/
private $productOptionRepository;
/**
* @var TransporteurWeightPriceRepository
*/
private $transporteurWeightPriceRepository;
/**
* @var TransporteurRepository
*/
private $transporteurRepository;
/**
* @var PhotosRepository
*/
private $photosRepository;
/**
* @var AbonnementRepository
*/
private $abonnementRepository;
/**
* @var CompanyRepository
*/
private $companyRepository;
/**
* @var UserRepository
*/
private $userRepository;
/**
* @var MangoPayService
*/
private $mangoPayService;
/**
* @var LocationRepository
*/
private $locationRepository;
/**
* @var CautionRepository
*/
private $caution;
/**
* @var StripeConnectService
*/
private $stripeConnectService;
private $em;
private LoggerInterface $logger;
public function __construct(
TicketRepository $ticketRepository,
WishListRepository $wishListRepository,
CommandProductRepository $commandProductRepository,
AvisRepository $avisRepository,
ProductRepository $productRepository,
DepartmentRepository $departmentRepository,
SubCategoryRepository $subCategoryRepository,
CommandRepository $commandRepository,
MessagingRepository $messagingRepository,
ContactProductRepository $contactProductRepository,
ProductOptionRepository $productOptionRepository,
TransporteurRepository $transporteurRepository,
TransporteurWeightPriceRepository $transporteurWeightPriceRepository,
PhotosRepository $photosRepository,
AbonnementRepository $abonnementRepository,
CompanyRepository $companyRepository,
UserRepository $userRepository,
MangoPayService $mangoPayService,
LocationRepository $locationRepository,
CautionRepository $caution,
EntityManagerInterface $em,
StripeConnectService $stripeConnectService,
LoggerInterface $logger
) {
$this->departmentRepository = $departmentRepository;
$this->subCategoryRepository = $subCategoryRepository;
$this->commandRepository = $commandRepository;
$this->productRepository = $productRepository;
$this->avisRepository = $avisRepository;
$this->commandProductRepository = $commandProductRepository;
$this->wishListRepository = $wishListRepository;
$this->messagingRepository = $messagingRepository;
$this->ticketRepository = $ticketRepository;
$this->contactProductRepository = $contactProductRepository;
$this->productOptionRepository = $productOptionRepository;
$this->transporteurWeightPriceRepository = $transporteurWeightPriceRepository;
$this->transporteurRepository = $transporteurRepository;
$this->photosRepository = $photosRepository;
$this->abonnementRepository = $abonnementRepository;
$this->companyRepository = $companyRepository;
$this->userRepository = $userRepository;
$this->mangoPayService = $mangoPayService;
$this->locationRepository = $locationRepository;
$this->caution = $caution;
$this->stripeConnectService = $stripeConnectService;
$this->em = $em;
$this->logger = $logger;
}
public function getDepartments()
{
return $this->departmentRepository->getDepartmentsIfProduct();
}
public function getSubcategories()
{
return $this->subCategoryRepository->findBy([], ['id' => 'DESC']);
}
public function filterActiveProducts($products)
{
return $products->filter(function ($product) {
// Check if the product and its related entities meet all the conditions
$company = $product->getCompany();
$subCategories = $product->getSubCategories();
// Apply the same conditions as in the findAllServices method
return
$product->getIsActivated() &&
!$product->getIsDesactivatedByAdmin() &&
$company && $company->getIsConfirmed() &&
$company->getIsValidDocument() &&
$subCategories->exists(function ($key, $subCategory) {
return $subCategory->getIsService() || !$subCategory->getIsService();
});
})->count();
}
public function getCommandsByCompany(Company $company)
{
return $this->commandRepository->getCommandsByCompany($company);
}
public function getOtherProducts(Product $product)
{
return $this->productRepository->getOtherProductsCompany($product);
}
public function getOtherProductsCompany(Company $company)
{
return $this->productRepository->getOtherProductsByCompany($company);
}
public function getAvisUserExist(User $user, Product $product)
{
$isExist = $this->avisRepository->findOneBy(['client' => $user, 'product' => $product]);
if (!$isExist) {
return false;
}
return true;
}
public function getIfCommandNotFinish(Command $command, Company $company)
{
$commandProducts = $this->commandProductRepository->getCommandCompanyNotFinish($command, $company);
return count($commandProducts);
}
public function getIfIsWish(User $user, Product $product)
{
$isWish = $this->wishListRepository->findOneBy(['user' => $user, 'product' => $product]);
if ($isWish) {
return true;
}
return false;
}
public function getMessagingByTicket(Ticket $ticket)
{
return $this->messagingRepository->findBy(['ticket' => $ticket]);
}
public function getTicketIsNew(Company $company)
{
$tickets = $this->ticketRepository->getTicketsByProductsIsNew($company);
if (empty($tickets)) {
return false;
}
return true;
}
public function getTicketIsNewForClient(User $user)
{
$tickets = $this->ticketRepository->getTicketsByProductsIsNewForClient($user);
if (empty($tickets)) {
return false;
}
return true;
}
public function getTicketIsNewByTicket(Ticket $ticket)
{
$tickets = $this->ticketRepository->getTicketsIsNewByTicket($ticket);
if (!$tickets) {
return false;
}
return true;
}
public function getTicketIsNewByTicketForClient(Ticket $ticket)
{
$tickets = $this->ticketRepository->getTicketsIsNewByTicketForClient($ticket);
if (!$tickets) {
return false;
}
return true;
}
public function getNotifsContactProduct(Company $company)
{
$contactsProduct = $this->contactProductRepository->getNotifContactsProduct($company);
if (!$contactsProduct) {
return false;
}
return true;
}
public function getProductOption(int $id)
{
return $this->productOptionRepository->find($id);
}
public function getProductOptionByProduit(Product $product)
{
return $this->productOptionRepository->findProduitOptionByProduit($product);
}
public function getTransporteurWeightByWeight(?string $weight)
{
if ($weight === null) {
return null;
}
return $this->transporteurWeightPriceRepository->getTransporteursPriceByWeight($weight);
}
public function getTransporteurWeightById(int $id)
{
return $this->transporteurWeightPriceRepository->getTransporteurWeightById($id);
}
public function getByTransporteurAndWeight(Transporteur $transporteur, string $weight, int $quantity)
{
$weightInInt = str_replace('g', '', $weight);
$weightInInt = (int) str_replace('kg', '', $weightInInt);
$totalWeight = $weightInInt * $quantity;
$totalWeightString = $this->calculWeightQuantity($totalWeight, $quantity);
$transporteurObject = $this->transporteurWeightPriceRepository->getByTransporteurAndWeight($transporteur, $totalWeightString);
if (!$transporteurObject) {
$transporteurObject = null;
for ($i = $totalWeight; $i <= 30; $i++) {
$totalWeightString = $this->calculWeightQuantity($i, $quantity);
$transporteurObject = $this->transporteurWeightPriceRepository->getByTransporteurAndWeight($transporteur, $totalWeightString);
if ($transporteurObject) {
break;
}
}
}
return $transporteurObject;
}
public function calculWeightQuantity(string $totalWeight, int $quantity)
{
if ($totalWeight == 250 || $totalWeight == 500) {
$totalWeight = $totalWeight . 'g';
} elseif ($totalWeight >= 1000) {
$totalWeight = ($totalWeight / 1000) . 'kg';
} else {
$totalWeight = $totalWeight . 'kg';
}
return $totalWeight;
}
public function limite_motsafficher(string $texte, int $longeur_max)
{
if (strlen($texte) > $longeur_max) {
$texte = substr($texte, 0, $longeur_max);
$dernier_espace = strrpos($texte, " ");
$texte = substr($texte, 0, $dernier_espace) . "...";
}
return $texte;
}
public function getphotoProduit(Product $product)
{
$image = $this->photosRepository->findOneBy(['product' => $product]);
return $image->getUrl();
}
public function getCompanyAbonnee(Company $company)
{
$companyAbonne = $this->abonnementRepository->findBy(['company' => $company]);
return $companyAbonne;
}
public function getCompany()
{
$company = $this->companyRepository->findBy(['isConfirmed' => true, 'isValidDocument' => true]);
return $company;
}
public function getPhotounProductsCompany(Company $company)
{
return $this->productRepository->getPhotoProductsByCompany($company);
}
public function getCompanyAvoirProduit(Product $product)
{
return $this->companyRepository->CompanyAvoirProduit($product);
}
public function getProducttous(Company $company)
{
$produits = $this->productRepository->getAllProductsByCompany($company);
return $produits;
}
public function getproductById($id)
{
return $this->productRepository->findOneBy(['id' => $id]);
}
public function recuperUrlMercure()
{
return ['mercureHubUrl' => $_ENV['MERCURE_PUBLISH_URL'], 'mercureClientUrl' => $_ENV['MERCURE_DISC_PUBLISH_URL_TWO']];
}
public function conterNewMessage($tickets, $nbrmessage)
{
foreach ($tickets as $ticket) {
$nb = 0;
foreach ($nbrmessage as $nbrsms) {
$nb = $ticket->getId() == $nbrsms['id'] ? $nbrsms['nbmessage'] : $nb;
$ticket->setNbMessage($nb);
}
}
return $tickets;
}
public function diferenceetredate($network)
{
$datej = new DateTime('now');
$difd = $network->diff($datej);
return $res = $difd->i < 5 ? true : false;
}
public function voirDestinataire(Ticket $ticket, $utilisateur)
{
$destinataire = "";
if ($ticket->getProduct()) {
if ($ticket->getCreatedBy()->getId() == $utilisateur->getId()) {
$destinataire = $ticket->getProduct()->getCompany();
} else {
$destinataire = $ticket->getCreatedBy();
}
} else {
$resultats = $this->ticketRepository->getDestinataire($ticket)[0];
if ($resultats['DestinataireId'] == $utilisateur->getId()) {
if ($ticket->getTypeExpeditaire() == 'client') {
$destinataire = $this->userRepository->findOneById($resultats['expeditaireId']);
} else {
$destinataire = $this->companyRepository->findOneById($resultats['expeditaireId']);
}
} else {
if ($ticket->getTypeDestinataire() == 'client') {
$destinataire = $this->userRepository->findOneById($resultats['DestinataireId']);
} else {
$destinataire = $this->companyRepository->findOneById($resultats['DestinataireId']);
}
}
}
return $destinataire;
}
public function getLocationUse(User $user, Product $produit)
{
$location = $this->locationRepository->getLocationByClientProduit($user, $produit) ?? null;
return $location[0] ?? null;
}
public function retour_caution()
{
$dateDuJour = new DateTime();
$cautions = $this->caution->findBy(['isTrancefert' => null, 'isReturn' => null]);
foreach ($cautions as $key => $caution) {
$datedif = date_diff($dateDuJour, $caution->getLocation()->getEndAt())->format('%a') + 1;
if ($datedif >= 15) {
$checkout_session = $this->stripeConnectService->retrieveCheckoutSession($caution->getLocation()->getPayinId());
$payment_intent = $this->stripeConnectService->retrievePaymentIntent($checkout_session->payment_intent);
$charge = $this->stripeConnectService->retrieveLatestCharge($payment_intent->latest_charge);
$montant = $caution->getMontant();
try {
$this->stripeConnectService->createChargeReversal($charge->id, $montant * 100);
$caution->setIsReturn(true);
} catch (\Throwable $th) {
$this->logger->error('Erreur lors du remboursement de la caution ID ' . $caution->getId() . ' : ' . $th->getMessage());
continue; // Passer à la caution suivante en cas d'erreur
}
$this->em->persist($caution);
$this->em->flush();
}
}
}
function getParticipantByRoom(Chambre $chambre)
{
$participant = $chambre->getParticipant()->toArray();
// $participantByRoom = [];
// foreach ($participant as $key => $value) {
// if ($value->getUserClient() == $user) {
// $participantByRoom[] = $value;
// }
// }
// return $participantByRoom;
return $participant;
}
public function geolocation($department)
{
$lat = null;
$lng = null;
if ($department) {
$address = $department;
$prepAddr = str_replace(' ', '+', $address);
$url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $prepAddr . '&key=AIzaSyDEvz8MLiFhskwnuRnoZ-OR_ZOUS9ol3Bg';
$source = file_get_contents($url);
$obj = json_decode($source);
if ($obj->status == 'OK') {
$status = $obj->status;
$lat = $obj->results[0]->geometry->location->lat;
$lng = $obj->results[0]->geometry->location->lng;
} else {
$lat = 48.856614;
$lng = 2.3522219;
$status = $obj->status;
}
} else {
$address = 'France';
$prepAddr = str_replace(' ', '+', $address);
$url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $prepAddr . '&key=AIzaSyDEvz8MLiFhskwnuRnoZ-OR_ZOUS9ol3Bg';
$source = file_get_contents($url);
$obj = json_decode($source);
if ($obj->status == 'OK') {
$status = $obj->status;
$lat = $obj->results[0]->geometry->location->lat;
$lng = $obj->results[0]->geometry->location->lng;
} else {
$lat = 48.856614;
$lng = 2.3522219;
$status = $obj->status;
}
}
$coordinates = [$lat, $lng, $status];
return $coordinates;
}
public function listecouleurs()
{
return $listes =
[
[
"name" => "Abricot"
],
[
"name" => "Acajou"
],
[
"name" => "Aigue-marine"
],
[
"name" => "Alezan (chevaux)"
],
[
"name" => "Amande"
],
[
"name" => "Amarante"
],
[
"name" => "Ambre"
],
[
"name" => "Améthyste"
],
[
"name" => "Anthracite"
],
[
"name" => "Aquilain (chevaux)"
],
[
"name" => "Ardoise"
],
[
"name" => "Argent (héraldique)"
],
[
"name" => "Aubergine"
],
[
"name" => "Auburn (cheveux)"
],
[
"name" => "Aurore"
],
[
"name" => "Avocat"
],
[
"name" => "Azur"
],
[
"name" => "Azur (héraldique)"
],
[
"name" => "Baillet (chevaux, vieilli)"
],
[
"name" => "Basané (teint)"
],
[
"name" => "Beige ou Bureau"
],
[
"name" => "Beurre"
],
[
"name" => "Bis"
],
[
"name" => "Bisque"
],
[
"name" => "Bistre"
],
[
"name" => "Bitume (pigment)"
],
[
"name" => "Blanc"
],
[
"name" => "Blanc cassé"
],
[
"name" => "Blanc lunaire"
],
[
"name" => "Blé"
],
[
"name" => "Bleu"
],
[
"name" => "Bleu acier"
],
[
"name" => "Bleu barbeau ou bleuet"
],
[
"name" => "Bleu canard"
],
[
"name" => "Bleu céleste"
],
[
"name" => "Bleu charrette"
],
[
"name" => "Bleu ciel"
],
[
"name" => "Bleu de cobalt (pigment)"
],
[
"name" => "Bleu de Prusse (pigment), de Berlin ou bleu hussard"
],
[
"name" => "Bleu électrique"
],
[
"name" => "Bleu givré"
],
[
"name" => "Bleu Klein"
],
[
"name" => "Bleu Majorelle"
],
[
"name" => "Bleu marine"
],
[
"name" => "Bleu nuit"
],
[
"name" => "Bleu outremer"
],
[
"name" => "Bleu paon"
],
[
"name" => "Bleu Persan"
],
[
"name" => "Bleu pétrole"
],
[
"name" => "Bleu roi ou de France"
],
[
"name" => "Bleu turquin"
],
[
"name" => "Blond (cheveux)"
],
[
"name" => "Blond vénitien (cheveux)"
],
[
"name" => "Bordeaux"
],
[
"name" => "Bouton d'or"
],
[
"name" => "Brique"
],
[
"name" => "Bronze"
],
[
"name" => "Brou de noix"
],
[
"name" => "Brun"
],
[
"name" => "Caca d'oie"
],
[
"name" => "Cacao"
],
[
"name" => "Cachou (pigments)"
],
[
"name" => "Cæruleum"
],
[
"name" => "Café"
],
[
"name" => "Café au lait"
],
[
"name" => "Cannelle"
],
[
"name" => "Capucine"
],
[
"name" => "Caramel (pigments)"
],
[
"name" => "Carmin (pigment)"
],
[
"name" => "Carmin d'alizarine (pigment PR83)"
],
[
"name" => "Carotte"
],
[
"name" => "Chamois"
],
[
"name" => "Chartreuse"
],
[
"name" => "Châtain (cheveux)"
],
[
"name" => "Chaudron"
],
[
"name" => "Chocolat"
],
[
"name" => "Cinabre (pigment)"
],
[
"name" => "Citrouille"
],
[
"name" => "Coquille d'œuf"
],
[
"name" => "Corail"
],
[
"name" => "Cramoisi"
],
[
"name" => "Crème"
],
[
"name" => "Cuisse de nymphe"
],
[
"name" => "Cuivre"
],
[
"name" => "Cyan"
],
[
"name" => "Écarlate"
],
[
"name" => "Écru"
],
[
"name" => "Émeraude"
],
[
"name" => "Fauve"
],
[
"name" => "Flave"
],
[
"name" => "Fraise"
],
[
"name" => "Fraise écrasée"
],
[
"name" => "Framboise"
],
[
"name" => "Fuchsia"
],
[
"name" => "Fumée"
],
[
"name" => "Garance (pigment)"
],
[
"name" => "Glauque"
],
[
"name" => "Glycine"
],
[
"name" => "Grège"
],
[
"name" => "Grenadine"
],
[
"name" => "Grenat"
],
[
"name" => "Gris"
],
[
"name" => "Gris acier"
],
[
"name" => "Gris de Payne (mélange de pigments)"
],
[
"name" => "Gris fer"
],
[
"name" => "Gris perle"
],
[
"name" => "Groseille"
],
[
"name" => "Guède ou Pastel des teinturiers (pigment)"
],
[
"name" => "Gueules (héraldique)"
],
[
"name" => "Héliotrope"
],
[
"name" => "Incarnat"
],
[
"name" => "Indigo"
],
[
"name" => "Indigo (teinture)"
],
[
"name" => "Isabelle"
],
[
"name" => "Ivoire"
],
[
"name" => "Jaune"
],
[
"name" => "Jaune canari"
],
[
"name" => "Jaune citron"
],
[
"name" => "Jaune d'or"
],
[
"name" => "Jaune de cobalt ou auréolin (pigment)"
],
[
"name" => "Jaune de Mars (pigment)"
],
[
"name" => "Jaune de Naples (pigment)"
],
[
"name" => "Jaune impérial"
],
[
"name" => "Jaune mimosa"
],
[
"name" => "Kaki"
],
[
"name" => "Lapis-lazuli"
],
[
"name" => "Lavallière (reliure)"
],
[
"name" => "Lavande"
],
[
"name" => "Lie de vin"
],
[
"name" => "Lilas"
],
[
"name" => "Lime ou vert citron"
],
[
"name" => "Lin"
],
[
"name" => "Magenta"
],
[
"name" => "Maïs"
],
[
"name" => "Malachite"
],
[
"name" => "Mandarine"
],
[
"name" => "Marron"
],
[
"name" => "Mastic"
],
[
"name" => "Mauve (couleur)"
],
[
"name" => "Menthe"
],
[
"name" => "Moutarde"
],
[
"name" => "Nacarat"
],
[
"name" => "Nankin"
],
[
"name" => "Noir"
],
[
"name" => "Noir animal (pigment)"
],
[
"name" => "Noir d'aniline (pigment)"
],
[
"name" => "Noir d'ivoire (pigment)"
],
[
"name" => "Noir de carbone (pigment)"
],
[
"name" => "Noir de fumée (pigment)"
],
[
"name" => "Noisette"
],
[
"name" => "Ocre (pigment)"
],
[
"name" => "Ocre rouge (pigment)"
],
[
"name" => "Olive"
],
[
"name" => "Or"
],
[
"name" => "Orange"
],
[
"name" => "Orange brûlé"
],
[
"name" => "Orchidée"
],
[
"name" => "Orpiment (pigment)"
],
[
"name" => "Paille"
],
[
"name" => "Parme"
],
[
"name" => "Pelure d'oignon (œnologie)"
],
[
"name" => "Pervenche"
],
[
"name" => "Pistache"
],
[
"name" => "Poil de chameau"
],
[
"name" => "Ponceau ou Coquelicot"
],
[
"name" => "Pourpre (héraldique)"
],
[
"name" => "Prasin"
],
[
"name" => "Prune"
],
[
"name" => "Puce"
],
[
"name" => "Rose"
],
[
"name" => "Rose Mountbatten"
],
[
"name" => "Rouge"
],
[
"name" => "Rouge anglais"
],
[
"name" => "Rouge cardinal"
],
[
"name" => "Rouge cerise"
],
[
"name" => "Rouge d'Andrinople"
],
[
"name" => "Rouge de Falun (pigment)"
],
[
"name" => "Rouge feu"
],
[
"name" => "Rouge feu"
],
[
"name" => "Rouge sang"
],
[
"name" => "Rouge tomette"
],
[
"name" => "Rouille"
],
[
"name" => "Roux"
],
[
"name" => "Rubis"
],
[
"name" => "Sable"
],
[
"name" => "Sable (héraldique)"
],
[
"name" => "Safre"
],
[
"name" => "Sang de bœuf"
],
[
"name" => "Sanguine"
],
[
"name" => "Saphir"
],
[
"name" => "Sarcelle"
],
[
"name" => "Saumon"
],
[
"name" => "Sépia (pigment)"
],
[
"name" => "Sinople (héraldique)"
],
[
"name" => "Smalt (pigment)"
],
[
"name" => "Smaragdin (pigment)"
],
[
"name" => "Soufre"
],
[
"name" => "Souris"
],
[
"name" => "Tabac"
],
[
"name" => "Taupe"
],
[
"name" => "Terre d'ombre"
],
[
"name" => "Terre de Sienne (pigment)"
],
[
"name" => "Terre de Sienne brûlée (pigment)"
],
[
"name" => "Tomate"
],
[
"name" => "Topaze"
],
[
"name" => "Tourterelle ou Colombin"
],
[
"name" => "Turquoise"
],
[
"name" => "Vanille"
],
[
"name" => "Vermeil"
],
[
"name" => "Vermillon"
],
[
"name" => "Vert"
],
[
"name" => "Vert bouteille"
],
[
"name" => "Vert céladon"
],
[
"name" => "Vert d'eau"
],
[
"name" => "Vert de chrome"
],
[
"name" => "Vert de Hooker"
],
[
"name" => "Vert de vessie"
],
[
"name" => "Vert épinard"
],
[
"name" => "Vert impérial"
],
[
"name" => "Vert lichen"
],
[
"name" => "Vert perroquet"
],
[
"name" => "Vert poireau"
],
[
"name" => "Vert pomme"
],
[
"name" => "Vert prairie"
],
[
"name" => "Vert printemps"
],
[
"name" => "Vert sapin"
],
[
"name" => "Vert sauge"
],
[
"name" => "Vert tilleul"
],
[
"name" => "Vert Véronèse (pigment)"
],
[
"name" => "Vert-de-gris (pigment)"
],
[
"name" => "Vert-jaune"
],
[
"name" => "Violet"
],
[
"name" => "Violet d'évêque"
],
[
"name" => "Violine (pigment)"
],
[
"name" => "Viride (pigment)"
],
[
"name" => "Zinzolin"
]
];
}
}