src/Entity/CRM/Product.php line 12

  1. <?php
  2. namespace App\Entity\CRM;
  3. use App\Repository\ProductRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Symfony\Component\Finder\Finder;
  8. #[ORM\Entity(repositoryClassProductRepository::class)]
  9. class Product
  10. {
  11.     #[ORM\Id]
  12.     #[ORM\GeneratedValue]
  13.     #[ORM\Column]
  14.     private ?int $id null;
  15.     #[ORM\Column(length255)]
  16.     private ?string $name null;
  17.     #[ORM\Column]
  18.     private ?float $priceSubtotal null;
  19.     #[ORM\Column]
  20.     private bool $implementation false;
  21.     #[ORM\Column]
  22.     private bool $parent false;
  23.     #[ORM\Column]
  24.     private bool $eumowa false;
  25.     #[ORM\Column]
  26.     private bool $umowa false;
  27.     #[ORM\Column]
  28.     private bool $eumowabiuro false;
  29.     #[ORM\Column]
  30.     private bool $eumowarodobhp false;
  31.     #[ORM\Column]
  32.     private bool $eumowaiod false;
  33.     #[ORM\Column]
  34.     private bool $eumowabdo false;
  35.     #[ORM\Column]
  36.     private bool $eumowabhpstacjonarna false;
  37.     #[ORM\Column]
  38.     private bool $audytbezpieczenstwa false;
  39.     #[ORM\Column]
  40.     private bool $sprawozdanie false;
  41.     #[ORM\Column]
  42.     private bool $doSprawozdania false;
  43.     #[ORM\Column(nullabletrue)]
  44.     private ?int $platformProductId null;
  45.     #[ORM\Column(nullabletrue)]
  46.     private ?int $optimaCodeId null;
  47.     #[ORM\Column(nullabletrue)]
  48.     private int $tax;
  49.     #[ORM\ManyToMany(targetEntityProductCategory::class, inversedBy'products')]
  50.     private Collection $category;
  51.     #[ORM\Column]
  52.     private bool $isActive true;
  53.     #[ORM\OneToMany(mappedBy'product'targetEntityOrderProduct::class)]
  54.     private Collection $orderProducts;
  55.     #[ORM\ManyToOne(inversedBy'products')]
  56.     private ?ContractTemplate $contractTemplate null;
  57.     #[ORM\Column(length1500nullabletrue)]
  58.     private ?string $paragraphOfContract null;
  59.     #[ORM\Column]
  60.     private bool $forBhp false;
  61.   
  62.     #[ORM\ManyToMany(targetEntityself::class, inversedBy'childProducts')]
  63.     private Collection $parentProducts;
  64.     #[ORM\ManyToMany(targetEntityself::class, mappedBy'parentProducts')]
  65.     private Collection $childProducts;
  66.     #[ORM\OneToMany(mappedBy'product'targetEntityImplementerOrderProduct::class)]
  67.     private Collection $implementerOrderProducts;
  68.     #[ORM\Column]
  69.     private bool $forBR false;
  70.     #[ORM\Column]
  71.     private bool $haveMailAttachments false;
  72.     private array $files = [];
  73.     #[ORM\Column]
  74.     private bool $autoMail false;
  75.     #[ORM\OneToMany(mappedBy'product'targetEntityConsultantReward::class)]
  76.     private Collection $consultantRewards;
  77.     #[ORM\OneToMany(mappedBy'product'targetEntityDepartmentTypeProductReward::class, orphanRemovaltrue)]
  78.     private Collection $departmentTypeProductRewards;
  79.     #[ORM\Column]
  80.     private ?bool $additionalCourses null;
  81.     #[ORM\ManyToOne(inversedBy'products')]
  82.     private ?Agreement $agreement null;
  83.     #[ORM\Column]
  84.     private ?bool $eumowaamlrodo null;
  85.     #[ORM\Column]
  86.     private ?bool $eumowaaml null;
  87.     #[ORM\Column]
  88.     private ?bool $transport null;
  89.     #[ORM\Column]
  90.     private bool $automaticallyDoBeforePayment false;
  91.     #[ORM\Column]
  92.     private bool $endWithoutAudit false;
  93.     #[ORM\ManyToMany(targetEntityAdmin::class, inversedBy'products')]
  94.     private Collection $adminToInfo;
  95.     #[ORM\Column]
  96.     private ?bool $auditRemote null;
  97.     #[ORM\Column]
  98.     private bool $eumowalicencyjnawebaml false;
  99.     #[ORM\Column]
  100.     private bool $eumowalicencyjnawebamlpartnerska false;
  101.     #[ORM\Column]
  102.     private ?bool $freeWebinar null;
  103.     #[ORM\Column]
  104.     private bool $eumowalicencyjnawebamlnieruchomosci false;
  105.     #[ORM\Column(length255nullabletrue)]
  106.     private ?string $licenseType null;
  107.     #[ORM\Column]
  108.     private int $administrationFee 0;
  109.     #[ORM\ManyToMany(targetEntityself::class)]
  110.     #[ORM\JoinTable(name'product_similar_products')]
  111.     private Collection $similarProducts;
  112.     #[ORM\Column]
  113.     private ?bool $protocol null;
  114.     #[ORM\Column]
  115.     private ?bool $zoom null;
  116.     public function __construct()
  117.     {
  118.         $this->category = new ArrayCollection();
  119.         $this->orderProducts = new ArrayCollection();
  120.         $this->contracts = new ArrayCollection();
  121.         $this->parentProducts = new ArrayCollection();
  122.         $this->childProducts = new ArrayCollection();
  123.         $this->implementerOrderProducts = new ArrayCollection();
  124.         $this->consultantRewards = new ArrayCollection();
  125.         $this->departmentTypeProductRewards = new ArrayCollection();
  126.         $this->adminToInfo = new ArrayCollection();
  127.         $this->similarProducts = new ArrayCollection();
  128.         $this->optimaCodeId NULL;
  129.     }
  130.     public function __toString(): string
  131.     {
  132.         return $this->id ' ' $this->name;
  133.     }
  134.     public function getId(): ?int
  135.     {
  136.         return $this->id;
  137.     }
  138.     public function getName(): ?string
  139.     {
  140.         return $this->name;
  141.     }
  142.     public function setName(string $name): self
  143.     {
  144.         $this->name $name;
  145.         return $this;
  146.     }
  147.     public function getPriceSubtotal(): ?float
  148.     {
  149.         return $this->priceSubtotal;
  150.     }
  151.     public function setPriceSubtotal(float $priceSubtotal): self
  152.     {
  153.         $this->priceSubtotal $priceSubtotal;
  154.         return $this;
  155.     }
  156.     public function getPriceTotal(): ?float
  157.     {
  158.         return $this->priceSubtotal + ($this->priceSubtotal * ($this->tax 100));
  159.     }
  160.     public function isImplementation(): ?bool
  161.     {
  162.         return $this->implementation;
  163.     }
  164.     public function setImplementation(bool $implementation): self
  165.     {
  166.         $this->implementation $implementation;
  167.         return $this;
  168.     }
  169.     public function isParent(): ?bool
  170.     {
  171.         return $this->parent;
  172.     }
  173.     public function setParent(bool $parent): self
  174.     {
  175.         $this->parent $parent;
  176.         return $this;
  177.     }
  178.     public function isEumowa(): ?bool
  179.     {
  180.         return $this->eumowa;
  181.     }
  182.     public function setEumowa(bool $eumowa): self
  183.     {
  184.         $this->eumowa $eumowa;
  185.         return $this;
  186.     }
  187.     public function isUmowa(): ?bool
  188.     {
  189.         return $this->umowa;
  190.     }
  191.     public function setUmowa(bool $umowa): self
  192.     {
  193.         $this->umowa $umowa;
  194.         return $this;
  195.     }
  196.     public function isEumowabiuro(): ?bool
  197.     {
  198.         return $this->eumowabiuro;
  199.     }
  200.     public function setEumowabiuro(bool $eumowabiuro): self
  201.     {
  202.         $this->eumowabiuro $eumowabiuro;
  203.         return $this;
  204.     }
  205.     public function isEumowarodobhp(): ?bool
  206.     {
  207.         return $this->eumowarodobhp;
  208.     }
  209.     public function setEumowarodobhp(bool $eumowarodobhp): self
  210.     {
  211.         $this->eumowarodobhp $eumowarodobhp;
  212.         return $this;
  213.     }
  214.     public function isEumowaiod(): ?bool
  215.     {
  216.         return $this->eumowaiod;
  217.     }
  218.     public function setEumowaiod(bool $eumowaiod): self
  219.     {
  220.         $this->eumowaiod $eumowaiod;
  221.         return $this;
  222.     }
  223.     public function isEumowabdo(): ?bool
  224.     {
  225.         return $this->eumowabdo;
  226.     }
  227.     public function setEumowabdo(bool $eumowabdo): self
  228.     {
  229.         $this->eumowabdo $eumowabdo;
  230.         return $this;
  231.     }
  232.     public function isEumowabhpstacjonarna(): ?bool
  233.     {
  234.         return $this->eumowabhpstacjonarna;
  235.     }
  236.     public function setEumowabhpstacjonarna(bool $eumowabhpstacjonarna): self
  237.     {
  238.         $this->eumowabhpstacjonarna $eumowabhpstacjonarna;
  239.         return $this;
  240.     }
  241.     public function isAudytbezpieczenstwa(): ?bool
  242.     {
  243.         return $this->audytbezpieczenstwa;
  244.     }
  245.     public function setAudytbezpieczenstwa(bool $audytbezpieczenstwa): self
  246.     {
  247.         $this->audytbezpieczenstwa $audytbezpieczenstwa;
  248.         return $this;
  249.     }
  250.     public function isSprawozdanie(): ?bool
  251.     {
  252.         return $this->sprawozdanie;
  253.     }
  254.     public function setSprawozdanie(bool $sprawozdanie): self
  255.     {
  256.         $this->sprawozdanie $sprawozdanie;
  257.         return $this;
  258.     }
  259.     public function isDoSprawozdania(): ?bool
  260.     {
  261.         return $this->doSprawozdania;
  262.     }
  263.     public function setDoSprawozdania(bool $doSprawozdania): self
  264.     {
  265.         $this->doSprawozdania $doSprawozdania;
  266.         return $this;
  267.     }
  268.     public function getTax(): int
  269.     {
  270.         return $this->tax;
  271.     }
  272.     public function setTax(int $tax): void
  273.     {
  274.         $this->tax $tax;
  275.     }
  276.     public function getPlatformProductId(): ?int
  277.     {
  278.         return $this->platformProductId;
  279.     }
  280.     public function setPlatformProductId(?int $platformProductId): self
  281.     {
  282.         $this->platformProductId $platformProductId;
  283.         return $this;
  284.     }
  285.     public function getOptimaCodeId(): ?int
  286.     {
  287.         return $this->optimaCodeId;
  288.     }
  289.     public function setOptimaCodeId(?int $optimaCodeId): self
  290.     {
  291.         $this->optimaCodeId $optimaCodeId;
  292.         return $this;
  293.     }
  294.     public function getCategory(): Collection
  295.     {
  296.         return $this->category;
  297.     }
  298.     public function addCategory(ProductCategory $category): self
  299.     {
  300.         if (!$this->category->contains($category)) {
  301.             $this->category->add($category);
  302.         }
  303.         return $this;
  304.     }
  305.     public function removeCategory(ProductCategory $category): self
  306.     {
  307.         $this->category->removeElement($category);
  308.         return $this;
  309.     }
  310.     public function isIsActive(): ?bool
  311.     {
  312.         return $this->isActive;
  313.     }
  314.     public function setIsActive(bool $isActive): self
  315.     {
  316.         $this->isActive $isActive;
  317.         return $this;
  318.     }
  319.     public function getOrderProducts(): Collection
  320.     {
  321.         return $this->orderProducts;
  322.     }
  323.     public function addOrderProduct(OrderProduct $orderProduct): self
  324.     {
  325.         if (!$this->orderProducts->contains($orderProduct)) {
  326.             $this->orderProducts->add($orderProduct);
  327.             $orderProduct->setProduct($this);
  328.         }
  329.         return $this;
  330.     }
  331.     public function removeOrderProduct(OrderProduct $orderProduct): self
  332.     {
  333.         if ($this->orderProducts->removeElement($orderProduct)) {
  334.             if ($orderProduct->getProduct() === $this) {
  335.                 $orderProduct->setProduct(null);
  336.             }
  337.         }
  338.         return $this;
  339.     }
  340.     public function getContractTemplate(): ?ContractTemplate
  341.     {
  342.         return $this->contractTemplate;
  343.     }
  344.     public function setContractTemplate(?ContractTemplate $contractTemplate): static
  345.     {
  346.         $this->contractTemplate $contractTemplate;
  347.         return $this;
  348.     }
  349.     /**
  350.      * @param int|null $id
  351.      */
  352.     public function setId(?int $id): void
  353.     {
  354.         $this->id $id;
  355.     }
  356.     public function getParagraphOfContract(): ?string
  357.     {
  358.         return $this->paragraphOfContract;
  359.     }
  360.     public function setParagraphOfContract(?string $paragraphOfContract): static
  361.     {
  362.         $this->paragraphOfContract $paragraphOfContract;
  363.         return $this;
  364.     }
  365.     /**
  366.      * @return Collection<int, self>
  367.      */
  368.     public function getParentProducts(): Collection
  369.     {
  370.         return $this->parentProducts;
  371.     }
  372.     public function addParentProduct(self $parentProduct): static
  373.     {
  374.         if (!$this->parentProducts->contains($parentProduct)) {
  375.             $this->parentProducts->add($parentProduct);
  376.         }
  377.         return $this;
  378.     }
  379.     public function removeParentProduct(self $parentProduct): static
  380.     {
  381.         $this->parentProducts->removeElement($parentProduct);
  382.         return $this;
  383.     }
  384.     /**
  385.      * @return Collection<int, self>
  386.      */
  387.     public function getChildProducts(): Collection
  388.     {
  389.         return $this->childProducts;
  390.     }
  391.     public function addChildProduct(self $childProduct): static
  392.     {
  393.         if (!$this->childProducts->contains($childProduct)) {
  394.             $this->childProducts->add($childProduct);
  395.             $childProduct->addParentProduct($this);
  396.         }
  397.         return $this;
  398.     }
  399.     public function removeChildProduct(self $childProduct): static
  400.     {
  401.         if ($this->childProducts->removeElement($childProduct)) {
  402.             $childProduct->removeParentProduct($this);
  403.         }
  404.         return $this;
  405.     }
  406.     /**
  407.      * @return Collection<int, ImplementerOrderProduct>
  408.      */
  409.     public function getImplementerOrderProducts(): Collection
  410.     {
  411.         return $this->implementerOrderProducts;
  412.     }
  413.     public function addImplementerOrderProduct(ImplementerOrderProduct $implementerOrderProduct): static
  414.     {
  415.         if (!$this->implementerOrderProducts->contains($implementerOrderProduct)) {
  416.             $this->implementerOrderProducts->add($implementerOrderProduct);
  417.             $implementerOrderProduct->setProduct($this);
  418.         }
  419.         return $this;
  420.     }
  421.     public function removeImplementerOrderProduct(ImplementerOrderProduct $implementerOrderProduct): static
  422.     {
  423.         if ($this->implementerOrderProducts->removeElement($implementerOrderProduct)) {
  424.             // set the owning side to null (unless already changed)
  425.             if ($implementerOrderProduct->getProduct() === $this) {
  426.                 $implementerOrderProduct->setProduct(null);
  427.             }
  428.         }
  429.         return $this;
  430.     }
  431.  
  432.     public function isForBhp(): bool
  433.     {
  434.         return $this->forBhp;
  435.     }
  436.     public function setForBhp(?bool $forBhp): self
  437.     {
  438.         if($forBhp===null){
  439.             $this->forBhp false;
  440.         }else{
  441.             $this->forBhp $forBhp;
  442.         }
  443.         return $this;
  444.     }
  445.     public function isForBR(): ?bool
  446.     {
  447.         return $this->forBR;
  448.     }
  449.     public function setForBR(?bool $forBR): static
  450.     {
  451.         if($forBR===null){
  452.             $this->forBR false;
  453.         }else{
  454.             $this->forBR $forBR;
  455.         }
  456.         return $this;
  457.     }
  458.     public function isHaveMailAttachments(): ?bool
  459.     {
  460.         return $this->haveMailAttachments;
  461.     }
  462.     public function setHaveMailAttachments(?bool $haveMailAttachments): static
  463.     {
  464.         if($haveMailAttachments===null){
  465.             $this->haveMailAttachments false;
  466.         }else{
  467.             $this->haveMailAttachments $haveMailAttachments;
  468.         }
  469.         return $this;
  470.     }
  471.     public function getFiles(): array
  472.     {
  473.         $finder = new Finder();
  474.         $files = [];
  475.         $ds          DIRECTORY_SEPARATOR;
  476.         $projectDir getenv('PROJECT_DIR');
  477.         $targetPath 'products' $ds $this->getId() . $ds;
  478.         if (!file_exists($targetPath)) {
  479.             $targetPath $projectDir $ds 'public' $ds $targetPath;
  480.             if (!file_exists($targetPath)) {
  481.                 $targetPath 'public' $ds 'products' $ds $this->getId() . $ds;
  482.             }
  483.         }
  484.         if (file_exists($targetPath)) {
  485.             $finder->in($targetPath);
  486.             $productDir $finder->files();
  487.             foreach ($productDir as $file) {
  488.                 $files[$file->getFilename()] = [
  489.                     'name' => $file->getFilename(),
  490.                     'time' => $file->getMTime(),
  491.                     'path' => $file->getPath(),
  492.                     'pathAll' => $file->getPathname(),
  493.                 ];
  494.             }
  495.         }
  496.         return $files;
  497.     }
  498.     public function isAutoMail(): ?bool
  499.     {
  500.         return $this->autoMail;
  501.     }
  502.     public function setAutoMail(bool $autoMail): static
  503.     {
  504.         $this->autoMail $autoMail;
  505.         return $this;
  506.     }
  507.     /**
  508.      * @return Collection<int, ConsultantReward>
  509.      */
  510.     public function getConsultantRewards(): Collection
  511.     {
  512.         return $this->consultantRewards;
  513.     }
  514.     public function addConsultantReward(ConsultantReward $consultantReward): static
  515.     {
  516.         if (!$this->consultantRewards->contains($consultantReward)) {
  517.             $this->consultantRewards->add($consultantReward);
  518.             $consultantReward->setProduct($this);
  519.         }
  520.         return $this;
  521.     }
  522.     public function removeConsultantReward(ConsultantReward $consultantReward): static
  523.     {
  524.         if ($this->consultantRewards->removeElement($consultantReward)) {
  525.             // set the owning side to null (unless already changed)
  526.             if ($consultantReward->getProduct() === $this) {
  527.                 $consultantReward->setProduct(null);
  528.             }
  529.         }
  530.         return $this;
  531.     }
  532.     /**
  533.      * @return Collection<int, DepartmentTypeProductReward>
  534.      */
  535.     public function getDepartmentTypeProductRewards(): Collection
  536.     {
  537.         return $this->departmentTypeProductRewards;
  538.     }
  539.     public function addDepartmentTypeProductReward(DepartmentTypeProductReward $departmentTypeProductReward): static
  540.     {
  541.         if (!$this->departmentTypeProductRewards->contains($departmentTypeProductReward)) {
  542.             $this->departmentTypeProductRewards->add($departmentTypeProductReward);
  543.             $departmentTypeProductReward->setProduct($this);
  544.         }
  545.         return $this;
  546.     }
  547.     public function removeDepartmentTypeProductReward(DepartmentTypeProductReward $departmentTypeProductReward): static
  548.     {
  549.         if ($this->departmentTypeProductRewards->removeElement($departmentTypeProductReward)) {
  550.             // set the owning side to null (unless already changed)
  551.             if ($departmentTypeProductReward->getProduct() === $this) {
  552.                 $departmentTypeProductReward->setProduct(null);
  553.             }
  554.         }
  555.         return $this;
  556.     }
  557.     public function isAdditionalCourses(): ?bool
  558.     {
  559.         return $this->additionalCourses;
  560.     }
  561.     public function setAdditionalCourses(bool $additionalCourses): static
  562.     {
  563.         $this->additionalCourses $additionalCourses;
  564.         return $this;
  565.     }
  566.     public function getAgreement(): ?Agreement
  567.     {
  568.         return $this->agreement;
  569.     }
  570.     public function setAgreement(?Agreement $agreement): static
  571.     {
  572.         $this->agreement $agreement;
  573.         return $this;
  574.     }
  575.     public function isEumowaamlrodo(): ?bool
  576.     {
  577.         return $this->eumowaamlrodo;
  578.     }
  579.     public function setEumowaamlrodo(bool $eumowaamlrodo): static
  580.     {
  581.         $this->eumowaamlrodo $eumowaamlrodo;
  582.         return $this;
  583.     }
  584.     public function isEumowaaml(): ?bool
  585.     {
  586.         return $this->eumowaaml;
  587.     }
  588.     public function setEumowaaml(bool $eumowaaml): static
  589.     {
  590.         $this->eumowaaml $eumowaaml;
  591.         return $this;
  592.     }
  593.     public function isTransport(): ?bool
  594.     {
  595.         return $this->transport;
  596.     }
  597.     public function setTransport(?bool $transport): static
  598.     {
  599.         if($transport === null) {
  600.             $this->transport false;
  601.         } else {
  602.             $this->transport $transport;
  603.         }
  604.         return $this;
  605.     }
  606.     public function isAutomaticallyDoBeforePayment(): ?bool
  607.     {
  608.         return $this->automaticallyDoBeforePayment;
  609.     }
  610.     public function setAutomaticallyDoBeforePayment(bool $automaticallyDoBeforePayment): static
  611.     {
  612.         $this->automaticallyDoBeforePayment $automaticallyDoBeforePayment;
  613.         return $this;
  614.     }
  615.     public function isEndWithoutAudit(): ?bool
  616.     {
  617.         return $this->endWithoutAudit;
  618.     }
  619.     public function setEndWithoutAudit(bool $endWithoutAudit): static
  620.     {
  621.         $this->endWithoutAudit $endWithoutAudit;
  622.         return $this;
  623.     }
  624.     /**
  625.      * @return Collection<int, Admin>
  626.      */
  627.     public function getAdminToInfo(): Collection
  628.     {
  629.         return $this->adminToInfo;
  630.     }
  631.     public function addAdminToInfo(Admin $adminToInfo): static
  632.     {
  633.         if (!$this->adminToInfo->contains($adminToInfo)) {
  634.             $this->adminToInfo->add($adminToInfo);
  635.         }
  636.         return $this;
  637.     }
  638.     public function removeAdminToInfo(Admin $adminToInfo): static
  639.     {
  640.         $this->adminToInfo->removeElement($adminToInfo);
  641.         return $this;
  642.     }
  643.     public function isAuditRemote(): ?bool
  644.     {
  645.         return $this->auditRemote;
  646.     }
  647.     public function setAuditRemote(bool $auditRemote): static
  648.     {
  649.         $this->auditRemote $auditRemote;
  650.         return $this;
  651.     }
  652.     public function isEumowalicencyjnawebaml(): ?bool
  653.     {
  654.         return $this->eumowalicencyjnawebaml;
  655.     }
  656.     public function setEumowalicencyjnawebaml(bool $eumowalicencyjnawebaml): static
  657.     {
  658.         $this->eumowalicencyjnawebaml $eumowalicencyjnawebaml;
  659.         return $this;
  660.     }
  661.     public function isEumowalicencyjnawebamlpartnerska(): ?bool
  662.     {
  663.         return $this->eumowalicencyjnawebamlpartnerska;
  664.     }
  665.     public function setEumowalicencyjnawebamlpartnerska(bool $eumowalicencyjnawebamlpartnerska): static
  666.     {
  667.         $this->eumowalicencyjnawebamlpartnerska $eumowalicencyjnawebamlpartnerska;
  668.         return $this;
  669.     }
  670.     public function isFreeWebinar(): ?bool
  671.     {
  672.         return $this->freeWebinar;
  673.     }
  674.     public function setFreeWebinar(bool $freeWebinar): static
  675.     {
  676.         $this->freeWebinar $freeWebinar;
  677.         return $this;
  678.     }
  679.     public function isEumowalicencyjnawebamlnieruchomosci(): ?bool
  680.     {
  681.         return $this->eumowalicencyjnawebamlnieruchomosci;
  682.     }
  683.     public function setEumowalicencyjnawebamlnieruchomosci(bool $eumowalicencyjnawebamlnieruchomosci): static
  684.     {
  685.         $this->eumowalicencyjnawebamlnieruchomosci $eumowalicencyjnawebamlnieruchomosci;
  686.         return $this;
  687.     }
  688.     public function getLicenseType(): ?string
  689.     {
  690.         return $this->licenseType;
  691.     }
  692.     public function setLicenseType(?string $licenseType): static
  693.     {
  694.         $this->licenseType $licenseType;
  695.         return $this;
  696.     }
  697.     public function getAdministrationFee(): int
  698.     {
  699.         return $this->administrationFee;
  700.     }
  701.     public function setAdministrationFee(int $administrationFee): void
  702.     {
  703.         $this->administrationFee $administrationFee;
  704.     }
  705.     /**
  706.      * @return Collection<int, self>
  707.      */
  708.     public function getSimilarProducts(): Collection
  709.     {
  710.         return $this->similarProducts;
  711.     }
  712.     public function addSimilarProduct(self $similarProduct): static
  713.     {
  714.         if (!$this->similarProducts->contains($similarProduct)) {
  715.             $this->similarProducts->add($similarProduct);
  716.         }
  717.         return $this;
  718.     }
  719.     public function removeSimilarProduct(self $similarProduct): static
  720.     {
  721.         $this->similarProducts->removeElement($similarProduct);
  722.         return $this;
  723.     }
  724.     public function isProtocol(): ?bool
  725.     {
  726.         return $this->protocol;
  727.     }
  728.     public function setProtocol(bool $protocol): static
  729.     {
  730.         $this->protocol $protocol;
  731.         return $this;
  732.     }
  733.     public function isZoom(): ?bool
  734.     {
  735.         return $this->zoom;
  736.     }
  737.     public function setZoom(bool $zoom): static
  738.     {
  739.         $this->zoom $zoom;
  740.         return $this;
  741.     }
  742. }