src/Entity/Product.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\File\File;
  4. use App\Entity\File\Photo;
  5. use App\Entity\File\ProductFile;
  6. use App\Entity\File\Template;
  7. use App\Entity\File\ValuableFile;
  8. use App\Entity\File\ValuableProtocolFile;
  9. use App\Helper\EnumsHelper;
  10. use App\Repository\ProductRepository;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Doctrine\Common\Collections\Collection;
  13. use Doctrine\DBAL\Types\Types;
  14. use Doctrine\ORM\Mapping as ORM;
  15. /**
  16.  * @ORM\Entity(repositoryClass=ProductRepository::class)
  17.  * @ORM\HasLifecycleCallbacks
  18.  */
  19. class Product extends AbstractEntity
  20. {
  21.     const MASK_GENERATOR_SIGNI 1;
  22.     const MASK_GENERATOR_PDF 2;
  23.     const MASK_GENERATOR_RAYNET 4;
  24.     /**
  25.      * @ORM\Id
  26.      * @ORM\GeneratedValue
  27.      * @ORM\Column(type="integer")
  28.      */
  29.     private $id;
  30.     /**
  31.      * @ORM\Column(type="string", length=255, nullable=true)
  32.      */
  33.     private $code;
  34.     /**
  35.      * @ORM\Column(type="string", length=255)
  36.      */
  37.     private $name;
  38.     /**
  39.      * @ORM\Column(type="float")
  40.      */
  41.     private $price;
  42.     /**
  43.      * @ORM\Column(type="float", nullable=true)
  44.      */
  45.     private $tax;
  46.     /**
  47.      * @ORM\Column(type="text", nullable=true)
  48.      */
  49.     private $notes;
  50.     /**
  51.      * @ORM\OneToMany(targetEntity=Order::class, mappedBy="company")
  52.      */
  53.     private $orders;
  54.     /**
  55.      * @ORM\ManyToOne(targetEntity=Company::class, inversedBy="products")
  56.      */
  57.     private $company;
  58.     /**
  59.      * @ORM\Column(type="float", nullable=true)
  60.      */
  61.     private $interest;
  62.     /**
  63.      * @ORM\OneToOne(targetEntity=File::class)
  64.      */
  65.     private $template;
  66.     /**
  67.      * @ORM\Column(type="string", length=255)
  68.      */
  69.     private $token;
  70.     /**
  71.      * @ORM\Column(type="string", length=255, nullable=true)
  72.      */
  73.     private $xApiToken;
  74.     /**
  75.      * @ORM\Column(type="boolean")
  76.      */
  77.     private $deleted false;
  78.     /**
  79.      * @ORM\Column(type="boolean", name="generatorSigni")
  80.      */
  81.     private $generatorSigni false;
  82.     /**
  83.      * @ORM\Column(type="string", length=2, nullable=true)
  84.      */
  85.     private $signiLocale;
  86.     /**
  87.      * @ORM\Column(type="string", length=255, nullable=true)
  88.      */
  89.     private $signiEmail;
  90.     /**
  91.      * @ORM\Column(type="string", length=32, nullable=true)
  92.      */
  93.     private $signiContractRole;
  94.     /**
  95.      * @ORM\Column(type="string", length=32, nullable=true)
  96.      */
  97.     private $signiProposers;
  98.     /**
  99.      * @ORM\Column(type="string", length=64, nullable=true)
  100.      */
  101.     private $signiSigningOrder;
  102.     /**
  103.      * @ORM\Column(type="string", length=16)
  104.      */
  105.     private $productType EnumsHelper::PRODUCT_TYPE_BOND;
  106.     /**
  107.      * @ORM\Column(type="datetime", nullable=true)
  108.      */
  109.     private $dueDate;
  110.     /**
  111.      * @ORM\Column(type="boolean")
  112.      */
  113.     private $generatorPdf false;
  114.     /**
  115.      * @ORM\Column(type="boolean", nullable=true)
  116.      */
  117.     private $allowNotificationChange false;
  118.     /**
  119.      * @ORM\Column(type="text", nullable=true)
  120.      */
  121.     private $allowNotificationChangeEmails;
  122.     /**
  123.      * @ORM\Column(type="boolean")
  124.      */
  125.     private $generatorRaynet false;
  126.     /**
  127.      * @ORM\Column(type="string", length=255, nullable=true)
  128.      */
  129.     private $raynetInstance;
  130.     /**
  131.      * @ORM\Column(type="string", length=255, nullable=true)
  132.      */
  133.     private $raynetUsername;
  134.     /**
  135.      * @ORM\Column(type="string", length=255, nullable=true)
  136.      */
  137.     private $raynetPassword;
  138.     /**
  139.      * @ORM\Column(type="string", length=255, nullable=true)
  140.      */
  141.     private $webHeader;
  142.     /**
  143.      * @ORM\Column(type="string", length=500, nullable=true)
  144.      */
  145.     private $webDesc;
  146.     /**
  147.      * @ORM\Column(type="text", nullable=true)
  148.      */
  149.     private $webParams;
  150.     /**
  151.      * @ORM\Column(type="string", length=255, nullable=true)
  152.      */
  153.     private $webCompany;
  154.     /**
  155.      * @ORM\Column(type="text", nullable=true)
  156.      */
  157.     private $webFiles;
  158.     /**
  159.      * @ORM\Column(type="string", length=255, nullable=true)
  160.      */
  161.     private $webLink;
  162.     /**
  163.      * @ORM\Column(type="integer", nullable=true)
  164.      */
  165.     private $webOrder 0;
  166.     /**
  167.      * @ORM\Column(type="boolean", nullable=true)
  168.      */
  169.     private $active;
  170.     /**
  171.      * @ORM\Column(type="integer")
  172.      */
  173.     private $minCount 1;
  174.     /**
  175.      * @ORM\Column(type="string", length=32, nullable=true)
  176.      */
  177.     private $currency;
  178.     /**
  179.      * @ORM\Column(type="float", nullable=true)
  180.      */
  181.     private $priceSecondary;
  182.     /**
  183.      * @ORM\Column(type="string", length=255, nullable=true)
  184.      */
  185.     private $digiSignAccessKey;
  186.     /**
  187.      * @ORM\Column(type="string", length=255, nullable=true)
  188.      */
  189.     private $digiSignSecretKey;
  190.     /**
  191.      * @ORM\Column(type="boolean", nullable=true)
  192.      */
  193.     private $generatorDigiSign;
  194.     /**
  195.      * @ORM\Column(type="string", length=255, nullable=true)
  196.      */
  197.     private $digiSignBranding;
  198.     /**
  199.      * @ORM\Column(type="float", nullable=true)
  200.      */
  201.     private $reward;
  202.     /**
  203.      * @ORM\OneToMany(targetEntity=ProductParameter::class, mappedBy="product", cascade={"persist", "remove"})
  204.      */
  205.     private $productParameters;
  206.     /**
  207.      * @ORM\Column(type="float", nullable=true)
  208.      */
  209.     private $vat;
  210.     /**
  211.      * @ORM\Column(type="string", length=255, nullable=true)
  212.      */
  213.     private $material;
  214.     /**
  215.      * @ORM\Column(type="float", nullable=true)
  216.      */
  217.     private $margin;
  218.     /**
  219.      * @ORM\ManyToMany(targetEntity=Product::class)
  220.      */
  221.     private $related;
  222.     /**
  223.      * @ORM\Column(type="string", length=500, nullable=true)
  224.      */
  225.     private $shortDesc;
  226.     /**
  227.      * @ORM\Column(type="text", nullable=true)
  228.      */
  229.     private $longDesc;
  230.     /**
  231.      * Dynamicke parametry produktu
  232.      *
  233.      * @var array
  234.      */
  235.     private $addsOnParams = [];
  236.     /**
  237.      * @ORM\Column(type="boolean", nullable=true)
  238.      */
  239.     private $useGoldAndSilver;
  240.     /**
  241.      * @ORM\Column(type="string", length=255, nullable=true)
  242.      */
  243.     private $goldAndSilverKey;
  244.     /**
  245.      * @ORM\Column(type="string", length=255, nullable=true)
  246.      */
  247.     private $goldAndSilverProductId;
  248.     /**
  249.      * @ORM\OneToMany(targetEntity=File::class, mappedBy="metal", cascade={"persist"})
  250.      */
  251.     private $photos;
  252.     /**
  253.      * @ORM\OneToOne(targetEntity=Photo::class, cascade={"persist", "remove"})
  254.      */
  255.     private $primaryPhoto;
  256.     /**
  257.      * @ORM\OneToOne(targetEntity=Template::class, inversedBy="product", cascade={"persist", "remove"})
  258.      */
  259.     private $templateValuablePaper;
  260.     /**
  261.      * @ORM\OneToOne(targetEntity=Template::class, inversedBy="product", cascade={"persist", "remove"})
  262.      */
  263.     private $templateValuablePaperMulti;
  264.     /**
  265.      * @ORM\OneToOne(targetEntity=Template::class, inversedBy="product", cascade={"persist", "remove"})
  266.      */
  267.     private $templateValuablePaperProtocol;
  268.     /**
  269.      * @ORM\Column(type="boolean", nullable=true)
  270.      */
  271.     private $vpProtocolNotification;
  272.     /**
  273.      * @ORM\Column(type="integer", nullable=true)
  274.      */
  275.     private $vpProtocolNotificationDelay;
  276.     /**
  277.      * @ORM\OneToMany(targetEntity=InterestPaidoffReport::class, mappedBy="product")
  278.      */
  279.     private $interestPaidoffReports;
  280.     /**
  281.      * @ORM\Column(type="boolean", nullable=true)
  282.      */
  283.     private $useAdamna;
  284.     /**
  285.      * @ORM\Column(type="string", length=255, nullable=true)
  286.      */
  287.     private $adamnaApi;
  288.     /**
  289.      * @ORM\Column(type="string", length=255, nullable=true)
  290.      */
  291.     private $adamnaToken;
  292.     /**
  293.      * @ORM\Column(type="string", length=255, nullable=true)
  294.      */
  295.     private $adamnaIdentifier;
  296.     /**
  297.      * @ORM\Column(type="string", length=255, nullable=true)
  298.      */
  299.     private $adamnaUserId;
  300.     /**
  301.      * @ORM\Column(type="integer", nullable=true)
  302.      */
  303.     private $invoicePaymentsPeriod;
  304.     /**
  305.      * @ORM\Column(type="datetime", nullable=true, name="invoice_payments_pvv")
  306.      */
  307.     private $invoicePaymentsPvv;
  308.     /**
  309.      * @ORM\OneToMany(targetEntity=ProductFile::class, mappedBy="product", cascade={"persist", "remove"})
  310.      * @ORM\OrderBy({"sortOrder" = "ASC"})
  311.      */
  312.     private $productFiles;
  313.     public function __construct()
  314.     {
  315.         $this->orders = new ArrayCollection();
  316.         $this->productParameters = new ArrayCollection();
  317.         $this->related = new ArrayCollection();
  318.         $this->photos = new ArrayCollection();
  319.         $this->interestPaidoffReports = new ArrayCollection();
  320.         $this->productFiles = new ArrayCollection();
  321.     }
  322.     /**
  323.      * @return string (ID:{$this->getId()}) {$this->getName()}
  324.      */
  325.     public function __toString(): string
  326.     {
  327.         return "(ID:{$this->getId()}{$this->getName()}";
  328.     }
  329.     /**
  330.      * Add token
  331.      *
  332.      * @ORM\PrePersist
  333.      * @ORM\PreUpdate
  334.      */
  335.     public function onPrePersist()
  336.     {
  337.         parent::onPrePersist();
  338.         if (is_null($this->token) || $this->token == '') {
  339.             $this->setToken(sha1(md5(rand(09999999).rand(09999999))));
  340.         }
  341.     }
  342.     public function getId(): ?int
  343.     {
  344.         return $this->id;
  345.     }
  346.     public function getCode(): ?string
  347.     {
  348.         return $this->code;
  349.     }
  350.     public function setCode(?string $code): self
  351.     {
  352.         $this->code $code;
  353.         return $this;
  354.     }
  355.     public function getName(): ?string
  356.     {
  357.         return $this->name;
  358.     }
  359.     public function setName(?string $name): self
  360.     {
  361.         $this->name = (string)$name;
  362.         return $this;
  363.     }
  364.     public function getPrice(): ?float
  365.     {
  366.         return $this->price;
  367.     }
  368.     public function setPrice(?float $price): self
  369.     {
  370.         $price str_replace(',''.', (float)$price);
  371.         $this->price $price;
  372.         return $this;
  373.     }
  374.     public function getTax(): ?float
  375.     {
  376.         return $this->tax;
  377.     }
  378.     public function setTax(?float $tax): self
  379.     {
  380.         $tax str_replace(',''.', (float)$tax);
  381.         $this->tax $tax;
  382.         return $this;
  383.     }
  384.     public function getNotes(): ?string
  385.     {
  386.         return $this->notes;
  387.     }
  388.     public function setNotes(?string $notes): self
  389.     {
  390.         $this->notes $notes;
  391.         return $this;
  392.     }
  393.     /**
  394.      * @return Collection<int, Order>
  395.      */
  396.     public function getOrders(): Collection
  397.     {
  398.         return $this->orders;
  399.     }
  400.     public function addOrders(Order $orders): self
  401.     {
  402.         if (!$this->orders->contains($orders)) {
  403.             $this->orders[] = $orders;
  404.             $orders->addProduct($this);
  405.         }
  406.         return $this;
  407.     }
  408.     public function removeOrders(Order $orders): self
  409.     {
  410.         if ($this->orders->removeElement($orders)) {
  411.             $orders->removeProduct($this);
  412.         }
  413.         return $this;
  414.     }
  415.     public function getCompany(): ?Company
  416.     {
  417.         return $this->company;
  418.     }
  419.     public function setCompany(?Company $company): self
  420.     {
  421.         $this->company $company;
  422.         return $this;
  423.     }
  424.     public function getInterest(): ?float
  425.     {
  426.         return $this->interest;
  427.     }
  428.     public function setInterest(float $interest): self
  429.     {
  430.         $interest str_replace(',''.'$interest);
  431.         $this->interest $interest;
  432.         return $this;
  433.     }
  434.     public function getTemplate(): ?Template
  435.     {
  436.         return $this->template;
  437.     }
  438.     public function setTemplate(?Template $template): self
  439.     {
  440.         $this->template $template;
  441.         $template->setProduct($this);
  442.         return $this;
  443.     }
  444.     public function getToken(): ?string
  445.     {
  446.         return $this->token;
  447.     }
  448.     public function setToken(string $token): self
  449.     {
  450.         $this->token $token;
  451.         return $this;
  452.     }
  453.     public function getXApiToken(): ?string
  454.     {
  455.         return $this->xApiToken;
  456.     }
  457.     public function setXApiToken(?string $xApiToken): self
  458.     {
  459.         $this->xApiToken $xApiToken;
  460.         return $this;
  461.     }
  462.     public function isDeleted(): ?bool
  463.     {
  464.         return $this->deleted;
  465.     }
  466.     public function setDeleted(bool $deleted): self
  467.     {
  468.         $this->deleted $deleted;
  469.         return $this;
  470.     }
  471.     public function getSigniLocale(): ?string
  472.     {
  473.         return $this->signiLocale;
  474.     }
  475.     public function setSigniLocale(?string $signiLocale): self
  476.     {
  477.         $this->signiLocale $signiLocale;
  478.         return $this;
  479.     }
  480.     public function getSigniEmail(): ?string
  481.     {
  482.         return $this->signiEmail;
  483.     }
  484.     public function setSigniEmail(?string $signiEmail): self
  485.     {
  486.         $this->signiEmail $signiEmail;
  487.         return $this;
  488.     }
  489.     public function getSigniContractRole(): ?string
  490.     {
  491.         return $this->signiContractRole;
  492.     }
  493.     public function setSigniContractRole(?string $signiContractRole): self
  494.     {
  495.         $this->signiContractRole $signiContractRole;
  496.         return $this;
  497.     }
  498.     public function getSigniProposers(): ?string
  499.     {
  500.         return $this->signiProposers;
  501.     }
  502.     public function setSigniProposers(?string $signiProposers): self
  503.     {
  504.         $this->signiProposers $signiProposers;
  505.         return $this;
  506.     }
  507.     public function getSigniSigningOrder(): ?string
  508.     {
  509.         return $this->signiSigningOrder;
  510.     }
  511.     public function setSigniSigningOrder(?string $signiSigningOrder): self
  512.     {
  513.         $this->signiSigningOrder $signiSigningOrder;
  514.         return $this;
  515.     }
  516.     public function getProductType(): ?string
  517.     {
  518.         return $this->productType;
  519.     }
  520.     public function setProductType(string $productType): self
  521.     {
  522.         $this->productType $productType;
  523.         return $this;
  524.     }
  525.     public function getDueDate(): ?\DateTimeInterface
  526.     {
  527.         return $this->dueDate;
  528.     }
  529.     public function setDueDate(?\DateTimeInterface $dueDate): self
  530.     {
  531.         $this->dueDate $dueDate;
  532.         return $this;
  533.     }
  534.     public function isGeneratorSigni(): ?bool
  535.     {
  536.         return (boolean)$this->generatorSigni;
  537.     }
  538.     public function setGeneratorSigni(bool $generatorSigni): self
  539.     {
  540.         $this->generatorSigni $generatorSigni;
  541.         return $this;
  542.     }
  543.     public function isGeneratorPdf(): ?bool
  544.     {
  545.         return (boolean)$this->generatorPdf;
  546.     }
  547.     public function setGeneratorPdf(bool $generatorPdf): self
  548.     {
  549.         $this->generatorPdf $generatorPdf;
  550.         return $this;
  551.     }
  552.     public function isGeneratorRaynet(): ?bool
  553.     {
  554.         return (boolean)$this->generatorRaynet;
  555.     }
  556.     public function setGeneratorRaynet(bool $generatorRaynet): self
  557.     {
  558.         $this->generatorRaynet $generatorRaynet;
  559.         return $this;
  560.     }
  561.     public function getRaynetInstance(): ?string
  562.     {
  563.         return $this->raynetInstance;
  564.     }
  565.     public function setRaynetInstance(?string $raynetInstance): self
  566.     {
  567.         $this->raynetInstance $raynetInstance;
  568.         return $this;
  569.     }
  570.     public function getRaynetUsername(): ?string
  571.     {
  572.         return $this->raynetUsername;
  573.     }
  574.     public function setRaynetUsername(?string $raynetUsername): self
  575.     {
  576.         $this->raynetUsername $raynetUsername;
  577.         return $this;
  578.     }
  579.     public function getRaynetPassword(): ?string
  580.     {
  581.         return $this->raynetPassword;
  582.     }
  583.     public function setRaynetPassword(?string $raynetPassword): self
  584.     {
  585.         $this->raynetPassword $raynetPassword;
  586.         return $this;
  587.     }
  588.     public function getWebHeader(): ?string
  589.     {
  590.         return $this->webHeader;
  591.     }
  592.     public function setWebHeader(?string $webHeader): self
  593.     {
  594.         $this->webHeader $webHeader;
  595.         return $this;
  596.     }
  597.     public function getWebDesc(): ?string
  598.     {
  599.         return $this->webDesc;
  600.     }
  601.     public function setWebDesc(?string $webDesc): self
  602.     {
  603.         $this->webDesc $webDesc;
  604.         return $this;
  605.     }
  606.     public function getWebParams(): ?string
  607.     {
  608.         return $this->webParams;
  609.     }
  610.     public function setWebParams(?string $webParams): self
  611.     {
  612.         $this->webParams $webParams;
  613.         return $this;
  614.     }
  615.     public function getWebCompany(): ?string
  616.     {
  617.         return $this->webCompany;
  618.     }
  619.     public function setWebCompany(?string $webCompany): self
  620.     {
  621.         $this->webCompany $webCompany;
  622.         return $this;
  623.     }
  624.     public function getWebLink(): ?string
  625.     {
  626.         return $this->webLink;
  627.     }
  628.     public function setWebLink(?string $webLink): self
  629.     {
  630.         $this->webLink $webLink;
  631.         return $this;
  632.     }
  633.     public function getWebFiles(): ?string
  634.     {
  635.         return $this->webFiles;
  636.     }
  637.     public function setWebFiles(?string $webFiles): self
  638.     {
  639.         $this->webFiles $webFiles;
  640.         return $this;
  641.     }
  642.     public function getWebOrder(): ?int
  643.     {
  644.         return $this->webOrder;
  645.     }
  646.     public function setWebOrder(?int $webOrder): self
  647.     {
  648.         $this->webOrder $webOrder;
  649.         return $this;
  650.     }
  651.     public function isActive(): ?bool
  652.     {
  653.         return $this->active;
  654.     }
  655.     public function setActive(?bool $active): self
  656.     {
  657.         $this->active $active;
  658.         return $this;
  659.     }
  660.     public function getMinCount(): ?int
  661.     {
  662.         return (int)$this->minCount;
  663.     }
  664.     public function setMinCount(int $minCount): self
  665.     {
  666.         $this->minCount $minCount;
  667.         return $this;
  668.     }
  669.     public function getCurrency(): ?string
  670.     {
  671.         return $this->currency;
  672.     }
  673.     public function setCurrency(?string $currency): self
  674.     {
  675.         $this->currency $currency;
  676.         return $this;
  677.     }
  678.     public function getPriceSecondary(): ?float
  679.     {
  680.         return $this->priceSecondary;
  681.     }
  682.     public function setPriceSecondary(?float $priceSecondary): self
  683.     {
  684.         $this->priceSecondary $priceSecondary;
  685.         return $this;
  686.     }
  687.     public function isAllowNotificationChange(): ?bool
  688.     {
  689.         return $this->allowNotificationChange;
  690.     }
  691.     public function setAllowNotificationChange(?bool $allowNotificationChange): self
  692.     {
  693.         $this->allowNotificationChange $allowNotificationChange;
  694.         return $this;
  695.     }
  696.     public function getAllowNotificationChangeEmails(): ?string
  697.     {
  698.         return $this->allowNotificationChangeEmails;
  699.     }
  700.     public function setAllowNotificationChangeEmails(?string $allowNotificationChangeEmails): self
  701.     {
  702.         $this->allowNotificationChangeEmails $allowNotificationChangeEmails;
  703.         return $this;
  704.     }
  705.     public function addOrder(Order $order): self
  706.     {
  707.         if (!$this->orders->contains($order)) {
  708.             $this->orders->add($order);
  709.             $order->setCompany($this);
  710.         }
  711.         return $this;
  712.     }
  713.     public function removeOrder(Order $order): self
  714.     {
  715.         if ($this->orders->removeElement($order)) {
  716.             // set the owning side to null (unless already changed)
  717.             if ($order->getCompany() === $this) {
  718.                 $order->setCompany(null);
  719.             }
  720.         }
  721.         return $this;
  722.     }
  723.     public function getDigiSignAccessKey(): ?string
  724.     {
  725.         return $this->digiSignAccessKey;
  726.     }
  727.     public function setDigiSignAccessKey(?string $digiSignAccessKey): self
  728.     {
  729.         $this->digiSignAccessKey $digiSignAccessKey;
  730.         return $this;
  731.     }
  732.     public function getDigiSignSecretKey(): ?string
  733.     {
  734.         return $this->digiSignSecretKey;
  735.     }
  736.     public function setDigiSignSecretKey(?string $digiSignSecretKey): self
  737.     {
  738.         $this->digiSignSecretKey $digiSignSecretKey;
  739.         return $this;
  740.     }
  741.     public function isGeneratorDigiSign(): ?bool
  742.     {
  743.         return $this->generatorDigiSign;
  744.     }
  745.     public function setGeneratorDigiSign(?bool $generatorDigiSign): self
  746.     {
  747.         $this->generatorDigiSign $generatorDigiSign;
  748.         return $this;
  749.     }
  750.     public function getDigiSignBranding(): ?string
  751.     {
  752.         return $this->digiSignBranding;
  753.     }
  754.     public function setDigiSignBranding(?string $digiSignBranding): self
  755.     {
  756.         $this->digiSignBranding $digiSignBranding;
  757.         return $this;
  758.     }
  759.     public function getReward(): ?float
  760.     {
  761.         return $this->reward;
  762.     }
  763.     public function setReward(?float $reward): self
  764.     {
  765.         $this->reward $reward;
  766.         return $this;
  767.     }
  768.     /**
  769.      * @return Collection<int, ProductParameter>
  770.      */
  771.     public function getProductParameters(): Collection
  772.     {
  773.         return $this->productParameters;
  774.     }
  775.     public function addProductParameter(ProductParameter $addProductParameter): self
  776.     {
  777.         $code $addProductParameter->getParameter()->getCode();
  778.         /** @var Collection $productParameterEnt */
  779.         $productParameterEnts $this->productParameters->filter(function(ProductParameter $productParameter) use ($code){
  780.             return $productParameter->getParameter()->getCode() == $code;
  781.         });
  782.         if(count($productParameterEnts) == 0){
  783.             $this->productParameters[] = $addProductParameter;
  784.             $addProductParameter->setProduct($this);
  785.         }
  786.         return $this;
  787.     }
  788.     public function removeProductParameter(ProductParameter $productParameter): self
  789.     {
  790.         if ($this->productParameters->removeElement($productParameter)) {
  791.             // set the owning side to null (unless already changed)
  792.             if ($productParameter->getProduct() === $this) {
  793.                 $productParameter->setProduct(null);
  794.             }
  795.         }
  796.         return $this;
  797.     }
  798.     public function getVat(): ?float
  799.     {
  800.         return $this->vat;
  801.     }
  802.     public function setVat(?float $vat): self
  803.     {
  804.         $this->vat $vat;
  805.         return $this;
  806.     }
  807.     public function getMaterial(): ?string
  808.     {
  809.         return $this->material;
  810.     }
  811.     public function setMaterial(?string $material): self
  812.     {
  813.         $this->material $material;
  814.         return $this;
  815.     }
  816.     public function getMargin(): ?float
  817.     {
  818.         return $this->margin;
  819.     }
  820.     public function setMargin(?float $margin): self
  821.     {
  822.         $this->margin $margin;
  823.         return $this;
  824.     }
  825.     /**
  826.      * @return Collection<int, self>
  827.      */
  828.     public function getRelated(): Collection
  829.     {
  830.         return $this->related;
  831.     }
  832.     public function addRelated(self $related): self
  833.     {
  834.         if (!$this->related->contains($related)) {
  835.             $this->related[] = $related;
  836.         }
  837.         return $this;
  838.     }
  839.     public function removeRelated(self $related): self
  840.     {
  841.         $this->related->removeElement($related);
  842.         return $this;
  843.     }
  844.     public function getShortDesc(): ?string
  845.     {
  846.         return $this->shortDesc;
  847.     }
  848.     public function setShortDesc(?string $shortDesc): self
  849.     {
  850.         $this->shortDesc $shortDesc;
  851.         return $this;
  852.     }
  853.     public function getLongDesc(): ?string
  854.     {
  855.         return $this->longDesc;
  856.     }
  857.     public function setLongDesc(?string $longDesc): self
  858.     {
  859.         $this->longDesc $longDesc;
  860.         return $this;
  861.     }
  862.     /**
  863.      * is triggered when invoking inaccessible methods in an object context.
  864.      *
  865.      * @param string $name
  866.      * @param array $arguments
  867.      * @return mixed
  868.      * @link https://php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods
  869.      */
  870.     public function __call(string $name, array $arguments)
  871.     {
  872.         /** @var Collection $productParameterEnt */
  873.         $productParameterEnts $this->productParameters->filter(function(ProductParameter $productParameter) use ($name){
  874.             return $productParameter->getParameter()->getCode() == $name;
  875.         });
  876.         if(count($productParameterEnts) > 0){
  877.             return $productParameterEnts->first();
  878.         }
  879.         return null;
  880.     }
  881.     public function __get($name) {
  882.         if (!property_exists($this$name) && !method_exists($this$name)) {
  883.             /** @var Collection $productParameterEnt */
  884.             $productParameterEnts $this->productParameters->filter(function(ProductParameter $productParameter) use ($name){
  885.                 return $productParameter->getParameter()->getCode() == $name;
  886.             });
  887.             if(count($productParameterEnts) > 0){
  888.                 return $productParameterEnts->first();
  889.             }
  890.         }
  891.         return null;
  892.     }
  893.     public function __set($name$value) {
  894.         if (!property_exists($this$name) && !method_exists($this$name)) {
  895.             /** @var Collection $productParameterEnt */
  896.             $productParameterEnts $this->productParameters->filter(function(ProductParameter $productParameter) use ($name){
  897.                 return $productParameter->getParameter()->getCode() == $name;
  898.             });
  899.             if(count($productParameterEnts) > 0){
  900.                 /** @var ProductParameter $productParameter */
  901.                 $productParameter $productParameterEnts->first();
  902.                 $productParameter->setValue($value);
  903.                 return $this;
  904.             }
  905.         }
  906.     }
  907.     public function isUseGoldAndSilver(): ?bool
  908.     {
  909.         return (bool)$this->useGoldAndSilver;
  910.     }
  911.     public function setUseGoldAndSilver(?bool $useGoldAndSilver): self
  912.     {
  913.         $this->useGoldAndSilver $useGoldAndSilver;
  914.         return $this;
  915.     }
  916.     public function getGoldAndSilverKey(): ?string
  917.     {
  918.         return $this->goldAndSilverKey;
  919.     }
  920.     public function setGoldAndSilverKey(?string $goldAndSilverKey): self
  921.     {
  922.         $this->goldAndSilverKey $goldAndSilverKey;
  923.         return $this;
  924.     }
  925.     public function getGoldAndSilverProductId(): ?string
  926.     {
  927.         return $this->goldAndSilverProductId;
  928.     }
  929.     public function setGoldAndSilverProductId(?string $goldAndSilverProductId): self
  930.     {
  931.         $this->goldAndSilverProductId $goldAndSilverProductId;
  932.         return $this;
  933.     }
  934.     /**
  935.      * @return Collection<int, File>
  936.      */
  937.     public function getPhotos(): Collection
  938.     {
  939.         return $this->photos;
  940.     }
  941.     public function addPhoto(File $photo): self
  942.     {
  943.         if (!$this->photos->contains($photo)) {
  944.             $this->photos[] = $photo;
  945.             $photo->setMetal($this);
  946.         }
  947.         return $this;
  948.     }
  949.     public function removePhoto(File $photo): self
  950.     {
  951.         if ($this->photos->removeElement($photo)) {
  952.             // set the owning side to null (unless already changed)
  953.             if ($photo->getMetal() === $this) {
  954.                 $photo->setMetal(null);
  955.             }
  956.         }
  957.         return $this;
  958.     }
  959.     /**
  960.      * Vraci hlavni fotku, kdyz neni, tak beru prvni ze vsech fotek v poradi
  961.      *
  962.      * @return Photo|null
  963.      */
  964.     public function getPrimaryPhoto(): ?Photo
  965.     {
  966.         if(isset($this->primaryPhoto)){
  967.             return $this->primaryPhoto;
  968.         }
  969.         if(count($this->photos) > 0){
  970.             return $this->photos->first();
  971.         }
  972.         return $this->primaryPhoto;
  973.     }
  974.     public function setPrimaryPhoto(?Photo $primaryPhoto): self
  975.     {
  976.         $this->primaryPhoto $primaryPhoto;
  977.         return $this;
  978.     }
  979.     public function getTemplateValuablePaper(): ?Template
  980.     {
  981.         return $this->templateValuablePaper;
  982.     }
  983.     public function setTemplateValuablePaper(?Template $templateValuablePaper): self
  984.     {
  985.         $this->templateValuablePaper $templateValuablePaper;
  986.         return $this;
  987.     }
  988.     public function getTemplateValuablePaperMulti(): ?Template
  989.     {
  990.         return $this->templateValuablePaperMulti;
  991.     }
  992.     public function setTemplateValuablePaperMulti(?Template $templateValuablePaperMulti): self
  993.     {
  994.         $this->templateValuablePaperMulti $templateValuablePaperMulti;
  995.         return $this;
  996.     }
  997.     public function getTemplateValuablePaperProtocol(): ?Template
  998.     {
  999.         return $this->templateValuablePaperProtocol;
  1000.     }
  1001.     public function setTemplateValuablePaperProtocol(?Template $templateValuablePaperProtocol): self
  1002.     {
  1003.         $this->templateValuablePaperProtocol $templateValuablePaperProtocol;
  1004.         return $this;
  1005.     }
  1006.     public function isVpProtocolNotification(): ?bool
  1007.     {
  1008.         return $this->vpProtocolNotification;
  1009.     }
  1010.     public function setVpProtocolNotification(?bool $vpProtocolNotification): self
  1011.     {
  1012.         $this->vpProtocolNotification $vpProtocolNotification;
  1013.         return $this;
  1014.     }
  1015.     public function getVpProtocolNotificationDelay(): ?int
  1016.     {
  1017.         return $this->vpProtocolNotificationDelay;
  1018.     }
  1019.     public function setVpProtocolNotificationDelay(?int $vpProtocolNotificationDelay): self
  1020.     {
  1021.         $this->vpProtocolNotificationDelay $vpProtocolNotificationDelay;
  1022.         return $this;
  1023.     }
  1024.     /**
  1025.      * @return Collection<int, InterestPaidoffReport>
  1026.      */
  1027.     public function getInterestPaidoffReports(): Collection
  1028.     {
  1029.         return $this->interestPaidoffReports;
  1030.     }
  1031.     public function addInterestPaidoffReport(InterestPaidoffReport $interestPaidoffReport): self
  1032.     {
  1033.         if (!$this->interestPaidoffReports->contains($interestPaidoffReport)) {
  1034.             $this->interestPaidoffReports[] = $interestPaidoffReport;
  1035.             $interestPaidoffReport->setProduct($this);
  1036.         }
  1037.         return $this;
  1038.     }
  1039.     public function removeInterestPaidoffReport(InterestPaidoffReport $interestPaidoffReport): self
  1040.     {
  1041.         if ($this->interestPaidoffReports->removeElement($interestPaidoffReport)) {
  1042.             // set the owning side to null (unless already changed)
  1043.             if ($interestPaidoffReport->getProduct() === $this) {
  1044.                 $interestPaidoffReport->setProduct(null);
  1045.             }
  1046.         }
  1047.         return $this;
  1048.     }
  1049.     public function isUseAdamna(): ?bool
  1050.     {
  1051.         return (boolean)$this->useAdamna;
  1052.     }
  1053.     public function setUseAdamna(?bool $useAdamna): self
  1054.     {
  1055.         $this->useAdamna $useAdamna;
  1056.         return $this;
  1057.     }
  1058.     public function getAdamnaApi(): ?string
  1059.     {
  1060.         return $this->adamnaApi;
  1061.     }
  1062.     public function setAdamnaApi(?string $adamnaApi): self
  1063.     {
  1064.         $this->adamnaApi $adamnaApi;
  1065.         return $this;
  1066.     }
  1067.     public function getAdamnaToken(): ?string
  1068.     {
  1069.         return $this->adamnaToken;
  1070.     }
  1071.     public function setAdamnaToken(?string $adamnaToken): self
  1072.     {
  1073.         $this->adamnaToken $adamnaToken;
  1074.         return $this;
  1075.     }
  1076.     public function getAdamnaIdentifier(): ?string
  1077.     {
  1078.         return $this->adamnaIdentifier;
  1079.     }
  1080.     public function setAdamnaIdentifier(?string $adamnaIdentifier): self
  1081.     {
  1082.         $this->adamnaIdentifier $adamnaIdentifier;
  1083.         return $this;
  1084.     }
  1085.     public function getAdamnaUserId(): ?string
  1086.     {
  1087.         return $this->adamnaUserId;
  1088.     }
  1089.     public function setAdamnaUserId(?string $adamnaUserId): self
  1090.     {
  1091.         $this->adamnaUserId $adamnaUserId;
  1092.         return $this;
  1093.     }
  1094.     public function getInvoicePaymentsPeriod(): ?int
  1095.     {
  1096.         return $this->invoicePaymentsPeriod;
  1097.     }
  1098.     public function setInvoicePaymentsPeriod(?int $invoicePaymentsPeriod): self
  1099.     {
  1100.         $this->invoicePaymentsPeriod $invoicePaymentsPeriod;
  1101.         return $this;
  1102.     }
  1103.     public function getInvoicePaymentsPvv(): ?\DateTimeInterface
  1104.     {
  1105.         return $this->invoicePaymentsPvv;
  1106.     }
  1107.     public function setInvoicePaymentsPvv(?\DateTimeInterface $invoicePaymentsPvv): self
  1108.     {
  1109.         $this->invoicePaymentsPvv $invoicePaymentsPvv;
  1110.         return $this;
  1111.     }
  1112.     /**
  1113.      * @return Collection<int, ProductFile>
  1114.      */
  1115.     public function getProductFiles(): Collection
  1116.     {
  1117.         return $this->productFiles;
  1118.     }
  1119.     public function addProductFile(ProductFile $productFile): self
  1120.     {
  1121.         if (!$this->productFiles->contains($productFile)) {
  1122.             $this->productFiles[] = $productFile;
  1123.             $productFile->setProduct($this);
  1124.         }
  1125.         return $this;
  1126.     }
  1127.     public function removeProductFile(ProductFile $productFile): self
  1128.     {
  1129.         if ($this->productFiles->removeElement($productFile)) {
  1130.             // set the owning side to null (unless already changed)
  1131.             if ($productFile->getProduct() === $this) {
  1132.                 $productFile->setProduct(null);
  1133.             }
  1134.         }
  1135.         return $this;
  1136.     }
  1137. }