bundles/mldev-catalog-bundle/src/Entity/ProductItem.php line 18

Open in your IDE?
  1. <?php
  2. namespace MLDev\CatalogBundle\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Common\Collections\Criteria;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use JsonSerializable;
  7. use MLDev\BaseBundle\Contract\SeoSite\SeoSiteInfoInterface;
  8. use MLDev\CatalogBundle\Repository\ProductItemRepository;
  9. use phpDocumentor\Reflection\Types\Iterable_;
  10. /**
  11.  * @ORM\Table(name="MLDev_Product_Item")
  12.  * @ORM\Entity(repositoryClass=ProductItemRepository::class)
  13.  */
  14. class ProductItem implements JsonSerializable
  15. {
  16.     /**
  17.      * @ORM\Id
  18.      * @ORM\Column(name="id", type="integer")
  19.      * @ORM\GeneratedValue(strategy="AUTO")
  20.      */
  21.     private $id;
  22.     /**
  23.      * @ORM\Column(type="string", name="external_id", nullable=true)
  24.      */
  25.     private $externalId;
  26.     /**
  27.      * @ORM\ManyToOne(targetEntity=Product::class, inversedBy="items")
  28.      * @ORM\JoinColumn(name="product_id", referencedColumnName="id", onDelete="CASCADE")
  29.      */
  30.     private $product;
  31.     /**
  32.      * @ORM\Column(type="string", name="name", nullable=true)
  33.      */
  34.     private $name;
  35.     /**
  36.      * @ORM\Column(type="string", name="alterName", nullable=true)
  37.      */
  38.     private $alterName;
  39.     /**
  40.      * @ORM\Column(type="string", name="sku", nullable=true)
  41.      */
  42.     private $sku;
  43.     /**
  44.      * @ORM\Column(type="integer", name="amount", nullable=true)
  45.      */
  46.     private $amount 0;
  47.     /**
  48.      * @ORM\Column(type="boolean", name="is_active",nullable=false)
  49.      */
  50.     private $isActive true;
  51.     /**
  52.      * @ORM\Column(name="is_new", type="boolean", nullable=false)
  53.      */
  54.     private $isNew false;
  55.     /**
  56.      * @ORM\Column(name="is_sale", type="boolean", nullable=false)
  57.      */
  58.     private $isSale false;
  59.     /**
  60.      * @ORM\Column(type="boolean", name="use_on_yandex_market", nullable=false)
  61.      */
  62.     private $useOnYandexMarket false;
  63.     /**
  64.      * @ORM\ManyToOne(targetEntity=ProductImage::class)
  65.      * @ORM\JoinColumn(name="product_image_id", referencedColumnName="id", onDelete="SET NULL")
  66.      */
  67.     private $defaultImage;
  68.     /**
  69.      * @ORM\Column(type="json", name="available_image_list", nullable=true)
  70.      */
  71.     private $availableImageList = [];
  72.     /**
  73.      * @ORM\Column(type="json", name="available_image_list_for_yandex_market", nullable=true)
  74.      */
  75.     private $availableImageListForYandexMarket = [];
  76.     /**
  77.      * @ORM\ManyToOne(targetEntity=Color::class)
  78.      * @ORM\JoinColumn(name="color_id", referencedColumnName="id", onDelete="SET NULL")
  79.      */
  80.     private $color;
  81.     /**
  82.      * @ORM\ManyToMany(targetEntity=SeoSiteInfoInterface::class, cascade={"persist"})
  83.      * @ORM\JoinTable(
  84.      *     name="MLDev_Product_Item_SeoInfo",
  85.      *     joinColumns={
  86.      *          @ORM\JoinColumn(name="product_item_id", referencedColumnName="id", onDelete="CASCADE")
  87.      *     },
  88.      *     inverseJoinColumns={
  89.      *          @ORM\JoinColumn(name="seo_info_id", referencedColumnName="id", onDelete="CASCADE")
  90.      *     }
  91.      * )
  92.      */
  93.     private $seoInfo;
  94.     /**
  95.      * @ORM\OneToMany(targetEntity=ProductItemPrice::class, mappedBy="productItem", cascade={"persist", "remove"})
  96.      */
  97.     private $prices;
  98.     /**
  99.      * @ORM\OneToMany(targetEntity="MLDev\CatalogBundle\Entity\ProductItemStock", mappedBy="productItem", cascade={"persist", "remove"})
  100.      */
  101.     private $stocks;
  102.     /**
  103.      * @ORM\Column(type="string", name="volume", nullable=true)
  104.      */
  105.     private $volume;
  106.     /**
  107.      * @ORM\Column(type="string", name="volume_unit", nullable=true)
  108.      */
  109.     private $volumeUnit;
  110.     /**
  111.      * @ORM\Column(type="text", length="65536", name="marketplace_link_yandex_market", nullable=true)
  112.      */
  113.     private $marketplaceLinkYandexMarket;
  114.     /**
  115.      * @ORM\Column(type="text", length="65536", name="marketplace_link_ozon", nullable=true)
  116.      */
  117.     private $marketplaceLinkOzon;
  118.     /**
  119.      * @ORM\Column(type="text", length="65536", name="marketplace_link_wildberries", nullable=true)
  120.      */
  121.     private $marketplaceLinkWildberries;
  122.     /**
  123.      * ProductItem constructor.
  124.      */
  125.     public function __construct($name null)
  126.     {
  127.         if ($name !== null) {
  128.             $this->setName($name);
  129.         }
  130.         $this->prices = new ArrayCollection();
  131.         $this->stocks = new ArrayCollection();
  132.         $this->seoInfo = new ArrayCollection();
  133.     }
  134.     public function getAvailableImages(): iterable
  135.     {
  136.         $availableImageList $this->availableImageList ?? [];
  137.         return $this->getProduct()->getImages()->filter(function ($value) use ($availableImageList) {
  138.             return in_array($value->getId(), $availableImageList);
  139.         });
  140.     }
  141.     public function getAvailableImagesForYandexMarket(): iterable
  142.     {
  143.         $availableImageListForYandexMarket $this->availableImageListForYandexMarket ?? [];
  144.         return $this->getProduct()->getImages()->filter(function ($value) use ($availableImageListForYandexMarket) {
  145.             return in_array($value->getId(), $availableImageListForYandexMarket);
  146.         });
  147.     }
  148.     public function getAvailableImageList(): ?array
  149.     {
  150.         return $this->availableImageList;
  151.     }
  152.     public function setAvailableImageList(?array $availableImageList): void
  153.     {
  154.         $this->availableImageList $availableImageList;
  155.     }
  156.     public function getAvailableImageListForYandexMarket(): array
  157.     {
  158.         return $this->availableImageListForYandexMarket;
  159.     }
  160.     public function setAvailableImageListForYandexMarket(?array $availableImageListForYandexMarket): self
  161.     {
  162.         $this->availableImageListForYandexMarket $availableImageListForYandexMarket;
  163.         return $this;
  164.     }
  165.     public function getSeoInfo(): iterable
  166.     {
  167.         return $this->seoInfo;
  168.     }
  169.     public function setSeoInfo(iterable $seoInfo): void
  170.     {
  171.         $this->seoInfo $seoInfo;
  172.     }
  173.     public function getId(): ?int
  174.     {
  175.         return $this->id;
  176.     }
  177.     public function getExternalId(): ?string
  178.     {
  179.         return $this->externalId;
  180.     }
  181.     public function setExternalId(?string $externalId): void
  182.     {
  183.         $this->externalId $externalId;
  184.     }
  185.     public function getProduct(): ?Product
  186.     {
  187.         return $this->product;
  188.     }
  189.     public function setProduct(?Product $product): void
  190.     {
  191.         $this->product $product;
  192.     }
  193.     public function getName(): ?string
  194.     {
  195.         return $this->name;
  196.     }
  197.     public function setName(?string $name): void
  198.     {
  199.         $this->name $name;
  200.     }
  201.     public function getAlterName(): ?string
  202.     {
  203.         return $this->alterName;
  204.     }
  205.     public function setAlterName(?string $alterName): void
  206.     {
  207.         $this->alterName $alterName;
  208.     }
  209.     public function getSku(): ?string
  210.     {
  211.         return $this->sku;
  212.     }
  213.     public function setSku(?string $sku): void
  214.     {
  215.         $this->sku $sku;
  216.     }
  217.     public function getAmount(): ?int
  218.     {
  219.         return $this->amount;
  220.     }
  221.     public function setAmount(?int $amount): void
  222.     {
  223.         $this->amount $amount;
  224.     }
  225.     public function isActive(): bool
  226.     {
  227.         return $this->isActive;
  228.     }
  229.     public function setIsActive(bool $isActive): void
  230.     {
  231.         $this->isActive $isActive;
  232.     }
  233.     public function isNew(): bool
  234.     {
  235.         return $this->isNew;
  236.     }
  237.     public function setIsNew(bool $isNew): self
  238.     {
  239.         $this->isNew $isNew;
  240.         return $this;
  241.     }
  242.     public function isSale(): bool
  243.     {
  244.         return $this->isSale;
  245.     }
  246.     public function setIsSale(bool $isSale): self
  247.     {
  248.         $this->isSale $isSale;
  249.         return $this;
  250.     }
  251.     public function isUseOnYandexMarket(): ?bool
  252.     {
  253.         return $this->useOnYandexMarket;
  254.     }
  255.     public function setUseOnYandexMarket(?bool $useOnYandexMarket): void
  256.     {
  257.         $this->useOnYandexMarket $useOnYandexMarket;
  258.     }
  259.     public function getDefaultImage(): ?ProductImage
  260.     {
  261.         if (!$this->defaultImage) {
  262.             if ($this->getProduct() && $this->getProduct()->getImages()->count()) {
  263.                 return $this->getProduct()->getImages()->first();
  264.             }
  265.         }
  266.         return $this->defaultImage;
  267.     }
  268.     public function setDefaultImage(?ProductImage $defaultImage): void
  269.     {
  270.         $this->defaultImage $defaultImage;
  271.     }
  272.     public function getColor(): ?Color
  273.     {
  274.         return $this->color;
  275.     }
  276.     public function setColor(?Color $color): void
  277.     {
  278.         $this->color $color;
  279.     }
  280.     public function getPrices(): iterable
  281.     {
  282.         return $this->prices;
  283.     }
  284.     public function setPrices(iterable $prices): void
  285.     {
  286.         $this->prices $prices;
  287.     }
  288.     public function addPrice(ProductItemPrice $price): void
  289.     {
  290.         $this->prices->add($price);
  291.     }
  292.     public function removePrice(ProductItemPrice $price): void
  293.     {
  294.         $this->prices->removeElement($price);
  295.     }
  296.     public function getPrice(): ?float
  297.     {
  298.         if ($this->prices->count() > 0) {
  299.             if (($prices $this->getPricesIsBasic()) && $prices->count() > 0) {
  300.                 return $prices->first()->getValue();
  301.             }
  302.         }
  303.         return null;
  304.     }
  305.     public function getPriceOld(): ?float
  306.     {
  307.         if ($this->prices->count() > 0) {
  308.             if (($prices $this->getPricesIsBasic()) && $prices->count() > 0) {
  309.                 return $prices->first()->getOldValue();
  310.             }
  311.         }
  312.         return null;
  313.     }
  314.     public function getPriceByAlias(?string $alias): ?float
  315.     {
  316.         if (($prices $this->getPricesByAlias($alias)) && $prices->count() > 0) {
  317.             return $prices->first()->getValue();
  318.         }
  319.         return null;
  320.     }
  321.     public function getPriceOldByAlias(?string $alias): ?float
  322.     {
  323.         if (($prices $this->getPricesByAlias($alias)) && $prices->count() > 0) {
  324.             return $prices->first()->getOldValue();
  325.         }
  326.         return null;
  327.     }
  328.     private function getPricesByAlias(?string $alias): iterable
  329.     {
  330.         return $this->prices->matching(
  331.             new Criteria(
  332.                 Criteria::expr()->eq('priceAlias'$alias)
  333.             )
  334.         );
  335.     }
  336.     private function getPricesIsBasic(): iterable
  337.     {
  338.         return $this->prices->matching(
  339.             new Criteria(
  340.                 Criteria::expr()->eq('priceBasic'true)
  341.             )
  342.         );
  343.     }
  344.     public function getStocks(): iterable
  345.     {
  346.         return $this->stocks;
  347.     }
  348.     public function setStocks(iterable $stocks): void
  349.     {
  350.         $this->stocks $stocks;
  351.     }
  352.     public function addStock(ProductItemStock $stock): void
  353.     {
  354.         $this->stocks->add($stock);
  355.     }
  356.     public function removeStock(ProductItemStock $stock): void
  357.     {
  358.         $this->stocks->removeElement($stock);
  359.     }
  360.     public function getVolume()
  361.     {
  362.         return $this->volume;
  363.     }
  364.     public function setVolume($volume): self
  365.     {
  366.         $this->volume $volume;
  367.         return $this;
  368.     }
  369.     public function getVolumeUnit()
  370.     {
  371.         return $this->volumeUnit;
  372.     }
  373.     public function setVolumeUnit($volumeUnit): self
  374.     {
  375.         $this->volumeUnit $volumeUnit;
  376.         return $this;
  377.     }
  378.     public function getMarketplaceLinkYandexMarket()
  379.     {
  380.         return $this->marketplaceLinkYandexMarket;
  381.     }
  382.     public function setMarketplaceLinkYandexMarket($marketplaceLinkYandexMarket): self
  383.     {
  384.         $this->marketplaceLinkYandexMarket $marketplaceLinkYandexMarket;
  385.         return $this;
  386.     }
  387.     public function getMarketplaceLinkOzon()
  388.     {
  389.         return $this->marketplaceLinkOzon;
  390.     }
  391.     public function setMarketplaceLinkOzon($marketplaceLinkOzon): self
  392.     {
  393.         $this->marketplaceLinkOzon $marketplaceLinkOzon;
  394.         return $this;
  395.     }
  396.     public function getMarketplaceLinkWildberries()
  397.     {
  398.         return $this->marketplaceLinkWildberries;
  399.     }
  400.     public function setMarketplaceLinkWildberries($marketplaceLinkWildberries): self
  401.     {
  402.         $this->marketplaceLinkWildberries $marketplaceLinkWildberries;
  403.         return $this;
  404.     }
  405.     public function jsonSerialize(): array
  406.     {
  407.         return [
  408.             'id' => $this->getId(),
  409.             'sku' => $this->getSku(),
  410.             'name' => $this->getName(),
  411.             'alter_name' => $this->getAlterName(),
  412.             'price' => $this->getPrice(),
  413.             'price_old' => $this->getPriceOld(),
  414.             'prices' => $this->getPrices(),
  415.             'image' => $this->getDefaultImage(),
  416.             'images' => $this->getAvailableImages(),
  417.             'color' => $this->getColor(),
  418.             'stocks' => $this->getStocks(),
  419.             'is_sale' => $this->isSale(),
  420.             'is_new' => $this->isNew(),
  421.             'unit' => $this->getProduct()->getUnit(),
  422.             'external_id' => $this->getExternalId(),
  423.         ];
  424.     }
  425. }