src/Entity/Product/ProductVariant.php line 410

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Entity\Product;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Sylius\Component\Core\Model\ProductVariant as BaseProductVariant;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Webmozart\Assert\Assert;
  9. use Sylius\Component\Attribute\Model\AttributeValueInterface;
  10. use App\Entity\Order\OrderItem;
  11. class ProductVariant extends BaseProductVariant implements ProductVariantInterface
  12. {
  13.     
  14.     public const COATING_TYPE_VALUES = [
  15.         'coating_mat',
  16.         'coating_brillant',
  17.         'coating_inner',
  18.         'fabric_heat_sealed'
  19.     ];
  20.     public const GIFT_FOR_VALUES = [
  21.         // 'him',
  22.         // 'her'
  23.         '7cce7202-a23b-11ed-ab1e-bae0dddde718',
  24.         '7cce7cb6-a23b-11ed-9292-bae0dddde718'
  25.     ];
  26.     public const MAIN_MATERIAL_VALUES = [
  27.         'linen',
  28.         'cotton',
  29.         'gauze',
  30.         'velvet',
  31.         'coated_cotton',
  32.         'cotton_voile',
  33.         'jersey',
  34.         'pleather',
  35.         'suede_fabric',
  36.         'hand_painted'
  37.     ];
  38.     // Selectionne les produits de base (en dur)
  39.     // Grande besace : BASE.BES.CAR.G
  40.     // Petite besace : BASE.BES.P
  41.     // Sac compagnon : BASE.SAC.COM
  42.     // --
  43.     // Rabat grande besace : RABA.BES.CAR.G
  44.     // Rabat petite besace : RABA.BES.P
  45.     // Rabat besace petit nuage : RABA.BES.PET.
  46.     // Rabat sac compagnon : RABA.SAC.COM
  47.     // --
  48.     // Petite Lanière : LANI.P
  49.     // Grande lanière : LANI.G
  50.     public const SACZIP_FORMES = [
  51.         'base' => [
  52.             'grand_besace' => 'BASE.BES.CAR.G',
  53.             'petite_besace' => 'BASE.BES.P',
  54.             'sac_compagnon' => 'BASE.SAC.COM'
  55.         ],
  56.         'rabat' => [
  57.             'rabat_grande_besace' => 'RABA.BES.CAR.G',
  58.             'rabat_petite_besace' => 'RABA.BES.P',
  59.             'rabat_besace_petite_nuage' => 'RABA.BES.PET.',
  60.             'rabat_sac_compagnon' => 'RABA.SAC.COM'
  61.         ],
  62.         'laniere' => [
  63.             'petite_laniere' => 'LANI.P',
  64.             'grande_laniere' => 'LANI.G'
  65.         ]
  66.     ];
  67.     protected $id;
  68.     protected $incomingStock;
  69.     protected $dateIncomingStock;
  70.     protected $attributes;
  71.     protected $coatingType;
  72.     protected $coatingVegetal;
  73.     protected $mainMaterial;
  74.     protected $giftFor;
  75.     protected $badge;
  76.     protected $tags;
  77.     protected $pricePerTwo;
  78.     protected $oldUrl;
  79.     protected $itemMin=5;
  80.     protected $isBlocked;
  81.     protected $taxons;
  82.     public function __construct()
  83.     {
  84.         parent::__construct();
  85.         
  86.         $this->attributes = new ArrayCollection();
  87.     }
  88.     public function setId(int $id): void
  89.     {
  90.         $this->id $id;
  91.     }
  92.     public function getIncomingStock(): ?int
  93.     {
  94.         return $this->incomingStock;
  95.     }
  96.     public function setIncomingStock(?int $incomingStock): void
  97.     {
  98.         $this->incomingStock $incomingStock;
  99.     }
  100.     public function getDateIncomingStock()
  101.     {
  102.         return $this->dateIncomingStock;
  103.     }
  104.     public function setDateIncomingStock($dateIncomingStock): void
  105.     {
  106.         $this->dateIncomingStock $dateIncomingStock;
  107.     }
  108.     public function getCoatingType(): ?string
  109.     {
  110.         return $this->coatingType;
  111.     }
  112.     public function setCoatingType(?string $coatingType): void
  113.     {
  114.         $this->coatingType $coatingType;
  115.     }
  116.     public function getCoatingVegetal(): ?bool
  117.     {
  118.         return $this->coatingVegetal;
  119.     }
  120.     public function setCoatingVegetal(?bool $coatingVegetal): void
  121.     {
  122.         $this->coatingVegetal $coatingVegetal;
  123.     }
  124.     public function getMainMaterial(): ?string
  125.     {
  126.         return $this->mainMaterial;
  127.     }
  128.     public function setMainMaterial(?string $mainMaterial): void
  129.     {
  130.         $this->mainMaterial $mainMaterial;
  131.     }
  132.     public function getGiftFor(): ?string
  133.     {
  134.         return $this->giftFor;
  135.     }
  136.     public function setGiftFor(?string $giftFor): void
  137.     {
  138.         $this->giftFor $giftFor;
  139.     }
  140.     public function getBadge(): ?string
  141.     {
  142.         return $this->badge;
  143.     }
  144.     public function setBadge(?string $badge): void
  145.     {
  146.         $this->badge $badge;
  147.     }
  148.     public function getPricePerTwo(): ?string
  149.     {
  150.         return $this->pricePerTwo;
  151.     }
  152.     public function setPricePerTwo(?string $pricePerTwo): void
  153.     {
  154.         $this->pricePerTwo $pricePerTwo;
  155.     }
  156.     public function getOldUrl(): ?string
  157.     {
  158.         return $this->oldUrl;
  159.     }
  160.     public function setOldUrl(?string $oldUrl): void
  161.     {
  162.         $this->oldUrl $oldUrl;
  163.     }
  164.     public function getIsBlocked(): ?bool
  165.     {
  166.         return $this->isBlocked;
  167.     }
  168.     public function setIsBlocked(?bool $isBlocked): void
  169.     {
  170.         $this->isBlocked $isBlocked;
  171.     }
  172.     public function getSlug(): ?string
  173.     {
  174.         return $this->getTranslation()->getSlug();
  175.     }
  176.     public function setSlug(?string $slug): void
  177.     {
  178.         $this->getTranslation()->setSlug($slug);
  179.     }
  180.     public function getDescription(): ?string
  181.     {
  182.         return $this->getTranslation()->getDescription();
  183.     }
  184.     public function setDescription(?string $description): void
  185.     {
  186.         $this->getTranslation()->setDescription($description);
  187.     }
  188.     public function getAdvantages(): ?string
  189.     {
  190.         return $this->getTranslation()->getAdvantages();
  191.     }
  192.     public function setAdvantages(?string $advantages): void
  193.     {
  194.         $this->getTranslation()->setAdvantages($advantages);
  195.     }
  196.     public function getMaintenance(): ?string
  197.     {
  198.         return $this->getTranslation()->getMaintenance();
  199.     }
  200.     public function setMaintenance(?string $maintenance): void
  201.     {
  202.         $this->getTranslation()->setMaintenance($maintenance);
  203.     }
  204.     
  205.     public function getAttributes(): Collection
  206.     {
  207.         
  208.         // dump('coucou');
  209.         // dump($this->attributes);
  210.         // exit();
  211.         return $this->attributes;
  212.     }
  213.     public function getAttributesByLocale(
  214.         string $localeCode,
  215.         string $fallbackLocaleCode,
  216.         ?string $baseLocaleCode null
  217.     ): Collection {
  218.        
  219.         if (null === $baseLocaleCode || $baseLocaleCode === $fallbackLocaleCode) {
  220.             $baseLocaleCode $fallbackLocaleCode;
  221.             $fallbackLocaleCode null;
  222.         }
  223.         $attributes $this->attributes->filter(
  224.             function (ProductVariantAttributeValueInterface $attribute) use ($baseLocaleCode) {
  225.                 return $attribute->getLocaleCode() === $baseLocaleCode || null === $attribute->getLocaleCode();
  226.             }
  227.         );
  228.         $attributesWithFallback = [];
  229.         foreach ($attributes as $attribute) {
  230.             $attributesWithFallback[] = $this->getAttributeInDifferentLocale($attribute$localeCode$fallbackLocaleCode);
  231.         }
  232.         return new ArrayCollection($attributesWithFallback);
  233.     }
  234.     protected function getAttributeInDifferentLocale(
  235.         ProductVariantAttributeValueInterface $attributeValue,
  236.         string $localeCode,
  237.         ?string $fallbackLocaleCode null
  238.     ) {
  239.         if (!$this->hasNotEmptyAttributeByCodeAndLocale($attributeValue->getCode(), $localeCode)) {
  240.             if (
  241.                 null !== $fallbackLocaleCode &&
  242.                 $this->hasNotEmptyAttributeByCodeAndLocale($attributeValue->getCode(), $fallbackLocaleCode)
  243.             ) {
  244.                 return $this->getAttributeByCodeAndLocale($attributeValue->getCode(), $fallbackLocaleCode);
  245.             }
  246.             return $attributeValue;
  247.         }
  248.         return $this->getAttributeByCodeAndLocale($attributeValue->getCode(), $localeCode);
  249.     }
  250.     protected function hasNotEmptyAttributeByCodeAndLocale(string $attributeCodestring $localeCode): bool
  251.     {
  252.         $attributeValue $this->getAttributeByCodeAndLocale($attributeCode$localeCode);
  253.         if (null === $attributeValue) {
  254.             return false;
  255.         }
  256.         $value $attributeValue->getValue();
  257.         if ('' === $value || null === $value || [] === $value) {
  258.             return false;
  259.         }
  260.         return true;
  261.     }
  262.     public function addAttribute(?ProductVariantAttributeValueInterface  $attribute): void
  263.     {
  264.         /** @var ProductVariantAttributeValueInterface $attribute */
  265.         Assert::isInstanceOf(
  266.             $attribute,
  267.             ProductVariantAttributeValueInterface::class,
  268.             'Attribute objects added to a Product object have to implement ProductVariantAttributeValueInterface'
  269.         );
  270.         if (!$this->hasAttribute($attribute)) {
  271.             $attribute->setProductVariant($this);
  272.             // dump( $attribute);
  273.             // exit();
  274.             $this->attributes->add($attribute);
  275.         }
  276.     }
  277.     public function removeAttribute(?ProductVariantAttributeValueInterface $attribute): void
  278.     {
  279.         /** @var ProductVariantAttributeValueInterface $attribute */
  280.         Assert::isInstanceOf(
  281.             $attribute,
  282.             ProductVariantAttributeValueInterface::class,
  283.             'Attribute objects removed from a Product object have to implement ProductVariantAttributeValueInterface'
  284.         );
  285.         if ($this->hasAttribute($attribute)) {
  286.             $this->attributes->removeElement($attribute);
  287.             $attribute->setProductVariant(null);
  288.         }
  289.     }
  290.     public function hasAttribute(ProductVariantAttributeValueInterface $attribute): bool
  291.     {
  292.         return $this->attributes->contains($attribute);
  293.     }
  294.     public function hasAttributeByCodeAndLocale(string $attributeCode, ?string $localeCode null): bool
  295.     {
  296.         $localeCode $localeCode ?: $this->getTranslation()->getLocale();
  297.         foreach ($this->attributes as $attribute) {
  298.             if ($attribute->getAttribute()->getCode() === $attributeCode
  299.                 && ($attribute->getLocaleCode() === $localeCode || null === $attribute->getLocaleCode())) {
  300.                 return true;
  301.             }
  302.         }
  303.         return false;
  304.     }
  305.     public function getAttributeByCodeAndLocale(string $attributeCode, ?string $localeCode null): ?ProductVariantAttributeValueInterface
  306.     {
  307.         if (null === $localeCode) {
  308.             $localeCode $this->getTranslation()->getLocale();
  309.         }
  310.         foreach ($this->attributes as $attribute) {
  311.             if ($attribute->getAttribute()->getCode() === $attributeCode &&
  312.                 ($attribute->getLocaleCode() === $localeCode || null === $attribute->getLocaleCode())) {
  313.                 return $attribute;
  314.             }
  315.         }
  316.         return null;
  317.     }
  318.     public function setItemMin(int $itemMin)
  319.     {
  320.         $this->itemMin $itemMin;
  321.     }
  322.     public function getItemMin(): int
  323.     {
  324.         return $this->itemMin;
  325.     }
  326.     public function canAddItem(): bool
  327.     {
  328.         // echo 'canAddItem - '.OrderItem::itemMin.' -- '.$this->itemMin;
  329.         // if( ($this->getOnHand() - $this->getOnHold() - OrderItem::itemMin /*- $this->getQuantity()*/ ) > 0 && $this->hasImages()){
  330.         //     return true;
  331.         // }
  332.         if($this->getIsBlocked()) {
  333.             return false;
  334.         }
  335.         if($this->getId() == 41360) {
  336.             dump($this);
  337.         }
  338.         
  339.         if( ($this->getOnHand() - $this->getOnHold() - $this->itemMin /*- $this->getQuantity()*/ ) > && $this->hasImages()){
  340.             return true;
  341.         }
  342.     
  343.         return false;
  344.     }
  345.     public function countItemStock(): int
  346.     {
  347.         
  348.           
  349.         // return $this->getOnHand() - $this->getOnHold() - OrderItem::itemMin ;
  350.         return $this->getOnHand() - $this->getOnHold() - $this->itemMin ;
  351.     }
  352.     public function countItemStockTissu(): int
  353.     {
  354.         
  355.           
  356.         // return $this->getOnHand() - $this->getOnHold() - OrderItem::itemMin ;
  357.         return $this->getOnHand() - $this->getOnHold() - $this->itemMin ;
  358.     }
  359.     public function getTaxons()
  360.     {
  361.         $taxons = [];
  362.         foreach($this->taxons as $productVariantTaxon) {
  363.             $taxons[] = $productVariantTaxon->getTaxon();
  364.         }
  365.         return $taxons;
  366.     }
  367.     public function setTaxons($taxons): void
  368.     {
  369.         $this->taxons $taxons;
  370.     }
  371.     public function getTags()
  372.     {
  373.         if(empty($this->tags)) {
  374.             return [];
  375.         }
  376.         return explode(','$this->tags);
  377.     }
  378.     public function setTags($tags): void
  379.     {
  380.         $this->tags implode(','$tags);
  381.     }
  382. }