src/Admin/Modules/Voucher/Entity/VoucherPackage.php line 20

  1. <?php
  2. namespace App\Admin\Modules\Voucher\Entity;
  3. use App\Admin\Modules\Contract\Entity\ContractLeadConfig;
  4. use App\Admin\Modules\Partner\Entity\UserPartner;
  5. use App\Modules\User\Entity\User;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use Doctrine\DBAL\Types\Types;
  9. use Doctrine\ORM\Mapping as ORM;
  10. use Gedmo\Mapping\Annotation as Gedmo;
  11. use Gedmo\Translatable\Translatable;
  12. /**
  13.  * @ORM\Table(name="voucher_package", uniqueConstraints={@ORM\UniqueConstraint(columns={"prefix_code", "id_added_by_user"})}, indexes={@ORM\Index(columns={"name"}), @ORM\Index(columns={"voucher_type"}), @ORM\Index(columns={"deadline"}), @ORM\Index(columns={"for_sale"})})
  14.  * @ORM\Entity(repositoryClass="App\Admin\Modules\Voucher\Repository\VoucherPackageRepository")
  15.  * @Gedmo\TranslationEntity(class="App\Admin\Modules\Voucher\Entity\VoucherPackageTranslation")
  16.  */
  17. class VoucherPackage implements Translatable
  18. {
  19.     const VOUCHER_TYPE_AMOUNT 1;
  20.     const VOUCHER_TYPE_DISCOUNT 2;
  21.     const VOUCHER_TYPE_CONTRACTS_LEAD 3;
  22.     const VOUCHER_TYPE_LIMITED_INDIVIDUAL_VOUCHERS 4;
  23.     const VOUCHER_TYPE_REUSABLE 5;
  24.     const VOUCHER_TYPE_RECOMMENDATION 6;
  25.     
  26.     const QR_CODE_REDIRECT_TYPE_VOUCHER_REGISTRATION_FORM 1;
  27.     const QR_CODE_REDIRECT_TYPE_MEETING_BOOKING_CART 2;
  28.     const QR_CODE_REDIRECT_TYPE_PACKAGES 3;
  29.     const QR_CODE_REDIRECT_TYPE_CONTRACTS_LEAD 4;
  30.     
  31.     /**
  32.      * @var int
  33.      *
  34.      * @ORM\Id
  35.      * @ORM\Column(type="bigint", options={"unsigned"=true}))
  36.      * @ORM\GeneratedValue(strategy="AUTO")
  37.      */
  38.     protected $id;
  39.     
  40.     /**
  41.      * @var string
  42.      *
  43.      * @ORM\Column(name="name", type="string", length=255, nullable=false, options={"collation"="utf8_unicode_ci"})
  44.      */
  45.     private $name;
  46.     /**
  47.      * @var string
  48.      *
  49.      * @ORM\Column(name="prefix_code", type="string", length=10, nullable=false, options={"collation"="utf8_unicode_ci"})
  50.      */
  51.     private $prefixCode;
  52.     /**
  53.      * @var int
  54.      *
  55.      * @ORM\Column(name="voucher_type", type="smallint", nullable=false)
  56.      */
  57.     private $voucherType;
  58.     
  59.     /**
  60.      * @var int
  61.      *
  62.      * @ORM\Column(name="am_value", type="integer", nullable=true)
  63.      */
  64.     private $amValue;
  65.     
  66.     /**
  67.      * @var float
  68.      *
  69.      * @ORM\Column(name="vat_rate", type="float", nullable=true)
  70.      */
  71.     private $vatRate;
  72.     
  73.     /**
  74.      * @var string
  75.      *
  76.      * @ORM\Column(name="handling_fee", type="decimal", precision=14, scale=2, nullable=true)
  77.      */
  78.     private $handlingFee;
  79.     /**
  80.      * @var string
  81.      *
  82.      * @ORM\Column(name="currency_code", type="string", length=3, nullable=true)
  83.      */
  84.     private $currencyCode;    
  85.     /**
  86.      * @var \DateTime
  87.      *
  88.      * @ORM\Column(name="deadline", type="date", nullable=true)
  89.      */
  90.     private $deadline;
  91.     /**
  92.      * @var string
  93.      *
  94.      * @ORM\Column(name="name_in_cart", type="string", length=255, nullable=true)
  95.      * @Gedmo\Translatable
  96.      */
  97.     private $nameInCart;
  98.     
  99.     /**
  100.      * @var string
  101.      *
  102.      * @ORM\Column(name="description_in_cart", type="string", length=4096, nullable=true)
  103.      * @Gedmo\Translatable
  104.      */
  105.     private $descriptionInCart;
  106.     /**
  107.      * @var string
  108.      *
  109.      * @ORM\Column(name="description", type="text", length=65535, nullable=true)
  110.      * @Gedmo\Translatable
  111.      */
  112.     private $description;
  113.     
  114.     /**
  115.      * @var int
  116.      *
  117.      * @ORM\Column(name="template_name", type="string", length=255, nullable=true)
  118.      */
  119.     private $templateName;
  120.     
  121.     /**
  122.      * @var int
  123.      *
  124.      * @ORM\Column(name="qr_code_redirect_type", type="smallint", nullable=true)
  125.      */
  126.     private $qrCodeRedirectType;
  127.     /**
  128.      * @var bool
  129.      *
  130.      * @ORM\Column(name="for_sale", type="boolean", nullable=true)
  131.      */
  132.     private $forSale;
  133.     
  134.     /**
  135.      * @var string
  136.      *
  137.      * @ORM\Column(name="sale_image", type="string", length=255, nullable=true)
  138.      */
  139.     private $saleImage;    
  140.     /**
  141.      * @var bool
  142.      *
  143.      * @ORM\Column(name="refinement", type="boolean", nullable=true)
  144.      */
  145.     private $refinement;
  146.     /**
  147.      * @var \App\Admin\Modules\Contract\Entity\ContractLeadConfig
  148.      *
  149.      * @ORM\ManyToOne(targetEntity="App\Admin\Modules\Contract\Entity\ContractLeadConfig")
  150.      * @ORM\JoinColumns({
  151.      *   @ORM\JoinColumn(name="id_contract_lead_config", referencedColumnName="id", nullable=true, onDelete="SET NULL")
  152.      * })
  153.      */
  154.     private $contractLeadConfig;
  155.     
  156.     /**
  157.      * @var int
  158.      *
  159.      * @ORM\Column(name="individual_vouchers_limit", type="integer", nullable=true)
  160.      */
  161.     private $individualVouchersLimit;
  162.     /**
  163.      * @var int
  164.      *
  165.      * @ORM\Column(name="reusable_voucher_usage_limit", type="integer", nullable=true)
  166.      */
  167.     private $reusableVoucherUsageLimit;
  168.     /**
  169.      * @var int
  170.      *
  171.      * @ORM\Column(name="recommendation_voucher_recommendations_number", type="integer", nullable=true)
  172.      */
  173.     private $recommendationVoucherRecommendationsNumber;
  174.     /**
  175.      * @var bool
  176.      *
  177.      * @ORM\Column(name="recommendation_voucher_all_recommendations_required", type="boolean", nullable=true)
  178.      */
  179.     private $recommendationVoucherAllRecommendationsRequired;
  180.     /**
  181.      * @var \App\Admin\Modules\Voucher\Entity\VoucherPackage
  182.      *
  183.      * @ORM\ManyToOne(targetEntity="App\Admin\Modules\Voucher\Entity\VoucherPackage")
  184.      * @ORM\JoinColumns({
  185.      *   @ORM\JoinColumn(name="id_target_package", referencedColumnName="id", nullable=true, onDelete="SET NULL")
  186.      * })
  187.      */
  188.     private $targetPackage;
  189.     /**
  190.      * @var string
  191.      *
  192.      * @ORM\Column(name="background_image", type="string", length=255, nullable=true)
  193.      */
  194.     private $backgroundImage;
  195.     /**
  196.      * @var string
  197.      *
  198.      * @ORM\Column(name="front_image", type="string", length=255, nullable=true)
  199.      */
  200.     private $frontImage;
  201.     /**
  202.      * @var string
  203.      *
  204.      * @ORM\Column(name="back_image", type="string", length=255, nullable=true)
  205.      */
  206.     private $backImage;
  207.     /**
  208.      * @var \App\Modules\User\Entity\User
  209.      *
  210.      * @ORM\ManyToOne(targetEntity="App\Modules\User\Entity\User")
  211.      * @ORM\JoinColumns({
  212.      *   @ORM\JoinColumn(name="id_added_by_user", referencedColumnName="id", nullable=false, onDelete="CASCADE")
  213.      * })
  214.      */
  215.     private $addedByUser;    
  216.     /**
  217.      * @var \App\Admin\Modules\Voucher\Entity\VoucherPackageVoucher
  218.      *
  219.      * @ORM\OneToMany(targetEntity="App\Admin\Modules\Voucher\Entity\VoucherPackageVoucher", mappedBy="package", cascade={"persist"}, orphanRemoval=true)
  220.      */
  221.     private $vouchers;
  222.     
  223.     /**
  224.      * @var \App\Admin\Modules\Partner\Entity\UserPartner
  225.      *
  226.      * @ORM\ManyToMany(targetEntity="App\Admin\Modules\Partner\Entity\UserPartner", mappedBy="voucherPackages")
  227.      **/
  228.     private $partners;
  229.     public function __construct()
  230.     {
  231.         $this->vouchers = new ArrayCollection();
  232.         $this->partners = new ArrayCollection();
  233.     }
  234.     
  235.     public function __toString()
  236.     {
  237.         return $this->name;
  238.     }
  239.     public function getId(): ?string
  240.     {
  241.         return $this->id;
  242.     }
  243.     
  244.     public function getNameWithValue()
  245.     {
  246.         $name $this->name;
  247.         
  248.         switch($this->voucherType)
  249.         {
  250.             case self::VOUCHER_TYPE_AMOUNT:
  251.                 $name .= ' (' $this->amValue ' ' $this->currencyCode ')';
  252.                 break;
  253.             case self::VOUCHER_TYPE_DISCOUNT:
  254.                 $name .= ' (' $this->amValue '%)';
  255.                 break;
  256.         }
  257.         
  258.         return $name;
  259.     }
  260.     public function getName(): ?string
  261.     {
  262.         return $this->name;
  263.     }
  264.     public function setName(string $name): self
  265.     {
  266.         $this->name $name;
  267.         return $this;
  268.     }
  269.     public function getPrefixCode(): ?string
  270.     {
  271.         return $this->prefixCode;
  272.     }
  273.     public function setPrefixCode(string $prefixCode): self
  274.     {
  275.         $this->prefixCode $prefixCode;
  276.         return $this;
  277.     }
  278.     public function getDeadline(): ?\DateTimeInterface
  279.     {
  280.         return $this->deadline;
  281.     }
  282.     public function setDeadline(?\DateTimeInterface $deadline): self
  283.     {
  284.         $this->deadline $deadline;
  285.         return $this;
  286.     }
  287.     public function getDescription(): ?string
  288.     {
  289.         return $this->description;
  290.     }
  291.     public function setDescription(?string $description): self
  292.     {
  293.         $this->description $description;
  294.         return $this;
  295.     }
  296.     /**
  297.      * @return Collection<int, VoucherPackageVoucher>
  298.      */
  299.     public function getVouchers(): Collection
  300.     {
  301.         return $this->vouchers;
  302.     }
  303.     public function addVoucher(VoucherPackageVoucher $voucher): self
  304.     {
  305.         if (!$this->vouchers->contains($voucher)) {
  306.             $this->vouchers->add($voucher);
  307.             $voucher->setPackage($this);
  308.         }
  309.         return $this;
  310.     }
  311.     public function removeVoucher(VoucherPackageVoucher $voucher): self
  312.     {
  313.         if ($this->vouchers->removeElement($voucher)) {
  314.             // set the owning side to null (unless already changed)
  315.             if ($voucher->getPackage() === $this) {
  316.                 $voucher->setPackage(null);
  317.             }
  318.         }
  319.         return $this;
  320.     }
  321.     public function getAmValue(): ?int
  322.     {
  323.         return $this->amValue;
  324.     }
  325.     public function setAmValue(?int $amValue): self
  326.     {
  327.         $this->amValue $amValue;
  328.         return $this;
  329.     }
  330.     /**
  331.      * @return Collection<int, UserPartner>
  332.      */
  333.     public function getPartners(): Collection
  334.     {
  335.         return $this->partners;
  336.     }
  337.     public function addPartner(UserPartner $partner): self
  338.     {
  339.         if (!$this->partners->contains($partner)) {
  340.             $this->partners->add($partner);
  341.             $partner->addVoucherPackage($this);
  342.         }
  343.         return $this;
  344.     }
  345.     public function removePartner(UserPartner $partner): self
  346.     {
  347.         if ($this->partners->removeElement($partner)) {
  348.             $partner->removeVoucherPackage($this);
  349.         }
  350.         return $this;
  351.     }
  352.     public function getAddedByUser(): ?User
  353.     {
  354.         return $this->addedByUser;
  355.     }
  356.     public function setAddedByUser(?User $addedByUser): self
  357.     {
  358.         $this->addedByUser $addedByUser;
  359.         return $this;
  360.     }
  361.     public function getVoucherType(): ?int
  362.     {
  363.         return $this->voucherType;
  364.     }
  365.     public function setVoucherType(int $voucherType): self
  366.     {
  367.         $this->voucherType $voucherType;
  368.         return $this;
  369.     }
  370.     public function getCurrencyCode(): ?string
  371.     {
  372.         return $this->currencyCode;
  373.     }
  374.     public function setCurrencyCode(?string $currencyCode): self
  375.     {
  376.         $this->currencyCode $currencyCode;
  377.         return $this;
  378.     }
  379.     public function getTemplateName(): ?string
  380.     {
  381.         return $this->templateName;
  382.     }
  383.     public function setTemplateName(?string $templateName): self
  384.     {
  385.         $this->templateName $templateName;
  386.         return $this;
  387.     }
  388.     public function getForSale(): ?bool
  389.     {
  390.         return $this->forSale;
  391.     }
  392.     public function setForSale(?bool $forSale): self
  393.     {
  394.         $this->forSale $forSale;
  395.         return $this;
  396.     }
  397.     public function getNameInCart(): ?string
  398.     {
  399.         return $this->nameInCart;
  400.     }
  401.     public function setNameInCart(?string $nameInCart): self
  402.     {
  403.         $this->nameInCart $nameInCart;
  404.         return $this;
  405.     }
  406.     public function getDescriptionInCart(): ?string
  407.     {
  408.         return $this->descriptionInCart;
  409.     }
  410.     public function setDescriptionInCart(?string $descriptionInCart): self
  411.     {
  412.         $this->descriptionInCart $descriptionInCart;
  413.         return $this;
  414.     }
  415.     public function isForSale(): ?bool
  416.     {
  417.         return $this->forSale;
  418.     }
  419.     public function getSaleImage(): ?string
  420.     {
  421.         return $this->saleImage;
  422.     }
  423.     public function setSaleImage(?string $saleImage): self
  424.     {
  425.         $this->saleImage $saleImage;
  426.         return $this;
  427.     }
  428.     public function getQRCodeRedirectType(): ?int
  429.     {
  430.         return $this->qrCodeRedirectType;
  431.     }
  432.     public function setQRCodeRedirectType(?int $qrCodeRedirectType): self
  433.     {
  434.         $this->qrCodeRedirectType $qrCodeRedirectType;
  435.         return $this;
  436.     }
  437.     public function getVatRate(): ?float
  438.     {
  439.         return $this->vatRate;
  440.     }
  441.     public function setVatRate(?float $vatRate): self
  442.     {
  443.         $this->vatRate $vatRate;
  444.         return $this;
  445.     }
  446.     public function getHandlingFee(): ?string
  447.     {
  448.         return $this->handlingFee;
  449.     }
  450.     public function setHandlingFee(?string $handlingFee): self
  451.     {
  452.         $this->handlingFee $handlingFee;
  453.         return $this;
  454.     }
  455.     public function getBackgroundImage(): ?string
  456.     {
  457.         return $this->backgroundImage;
  458.     }
  459.     public function setBackgroundImage(?string $backgroundImage): self
  460.     {
  461.         $this->backgroundImage $backgroundImage;
  462.         return $this;
  463.     }
  464.     public function getIndividualVouchersLimit(): ?int
  465.     {
  466.         return $this->individualVouchersLimit;
  467.     }
  468.     public function setIndividualVouchersLimit(?int $individualVouchersLimit): self
  469.     {
  470.         $this->individualVouchersLimit $individualVouchersLimit;
  471.         return $this;
  472.     }
  473.     public function getFrontImage(): ?string
  474.     {
  475.         return $this->frontImage;
  476.     }
  477.     public function setFrontImage(?string $frontImage): self
  478.     {
  479.         $this->frontImage $frontImage;
  480.         return $this;
  481.     }
  482.     public function getBackImage(): ?string
  483.     {
  484.         return $this->backImage;
  485.     }
  486.     public function setBackImage(?string $backImage): self
  487.     {
  488.         $this->backImage $backImage;
  489.         return $this;
  490.     }
  491.     public function getRefinement(): ?bool
  492.     {
  493.         return $this->refinement;
  494.     }
  495.     public function setRefinement(?bool $refinement): self
  496.     {
  497.         $this->refinement $refinement;
  498.         return $this;
  499.     }
  500.     public function getReusableVoucherUsageLimit(): ?int
  501.     {
  502.         return $this->reusableVoucherUsageLimit;
  503.     }
  504.     public function setReusableVoucherUsageLimit(?int $reusableVoucherUsageLimit): self
  505.     {
  506.         $this->reusableVoucherUsageLimit $reusableVoucherUsageLimit;
  507.         return $this;
  508.     }
  509.     public function getContractLeadConfig(): ?ContractLeadConfig
  510.     {
  511.         return $this->contractLeadConfig;
  512.     }
  513.     public function setContractLeadConfig(?ContractLeadConfig $contractLeadConfig): self
  514.     {
  515.         $this->contractLeadConfig $contractLeadConfig;
  516.         return $this;
  517.     }
  518.     public function getTargetPackage(): ?self
  519.     {
  520.         return $this->targetPackage;
  521.     }
  522.     public function setTargetPackage(?self $targetPackage): self
  523.     {
  524.         $this->targetPackage $targetPackage;
  525.         return $this;
  526.     }
  527.     public function getRecommendationVoucherRecommendationsNumber(): ?int
  528.     {
  529.         return $this->recommendationVoucherRecommendationsNumber;
  530.     }
  531.     public function setRecommendationVoucherRecommendationsNumber(?int $recommendationVoucherRecommendationsNumber): self
  532.     {
  533.         $this->recommendationVoucherRecommendationsNumber $recommendationVoucherRecommendationsNumber;
  534.         return $this;
  535.     }
  536.     public function getRecommendationVoucherAllRecommendationsRequired(): ?bool
  537.     {
  538.         return $this->recommendationVoucherAllRecommendationsRequired;
  539.     }
  540.     public function setRecommendationVoucherAllRecommendationsRequired(?bool $recommendationVoucherAllRecommendationsRequired): self
  541.     {
  542.         $this->recommendationVoucherAllRecommendationsRequired $recommendationVoucherAllRecommendationsRequired;
  543.         return $this;
  544.     }
  545. }