src/Entity/Ecommerce/Gift.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Ecommerce;
  3. use App\Entity\Ecommerce\Abstracts\AbstractPurchasable;
  4. use App\Entity\Room;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Symfony\Cmf\Component\Routing\RouteReferrersInterface;
  8. use WAM\Bundle\CoreBundle\Entity\Interfaces\SearchableEntityInterface;
  9. use Doctrine\ORM\Mapping as ORM;
  10. use Symfony\Cmf\Bundle\CoreBundle\Translatable\TranslatableInterface;
  11. use WAM\Bundle\CoreBundle\Annotation\SearchableFields;
  12. use WAM\Bundle\CoreBundle\Annotation\AutocompleteFields;
  13. use WAM\Bundle\CoreBundle\Model\Identifiable;
  14. use WAM\Bundle\CoreBundle\Model\Translatable;
  15. use WAM\Bundle\MediaBundle\Entity\Traits\GalleryTrait;
  16. use WAM\Bundle\RoutingBundle\Entity\Interfaces\SeoBehaviourInterface;
  17. use WAM\Bundle\RoutingBundle\Entity\Interfaces\SeoMetaReadInterface;
  18. use WAM\Bundle\RoutingBundle\Entity\Traits\MultiRouteTrait;
  19. use WAM\Bundle\RoutingBundle\Entity\Traits\SeoMetaTrait;
  20. /**
  21.  * Class Gift.
  22.  *
  23.  * @SearchableFields(fields={
  24.  *     "sku",
  25.  *     "title",
  26.  *     })
  27.  * @AutocompleteFields(fields={
  28.  *     "sku",
  29.  *     "title",
  30.  *     })
  31.  *
  32.  * @author David Velasco <dvelasco@wearemarketing.com>
  33.  *
  34.  * @ORM\Entity()
  35.  */
  36. class Gift extends AbstractPurchasable implements TranslatableInterfaceSearchableEntityInterfaceRouteReferrersInterfaceSeoMetaReadInterfaceSeoBehaviourInterface
  37. {
  38.     use Translatable;
  39.     use GalleryTrait;
  40.     use MultiRouteTrait;
  41.     const LIGHT_COLOR 'white';
  42.     const DARK_COLOR 'black';
  43.     /**
  44.      * @ORM\OneToMany(
  45.      *     targetEntity="GiftHasExtra",
  46.      *     mappedBy="gift",
  47.      *     cascade={"persist"},
  48.      *     orphanRemoval=true,
  49.      *     )
  50.      */
  51.     private $giftHasExtras;
  52.     /**
  53.      * @ORM\OneToOne(targetEntity="App\Entity\Hotel")
  54.      * @ORM\JoinColumn(name="hotel_id", referencedColumnName="id", nullable=true)
  55.      */
  56.     private $hotel;
  57.     /**
  58.      * Many Gifts have Many Rooms.
  59.      *
  60.      * @ORM\ManyToMany(targetEntity="App\Entity\Room")
  61.      * @ORM\JoinTable(name="app_gift_rooms",
  62.      *      joinColumns={@ORM\JoinColumn(name="gift_id", referencedColumnName="id")},
  63.      *      inverseJoinColumns={@ORM\JoinColumn(name="room_id", referencedColumnName="id")}
  64.      *      )
  65.      */
  66.     private $rooms;
  67.     /**
  68.      * Many Gifts have Many Categories.
  69.      *
  70.      * @ORM\ManyToMany(targetEntity="App\Entity\Ecommerce\GiftCategory")
  71.      * @ORM\JoinTable(name="app_gift_gift_categories",
  72.      *      joinColumns={@ORM\JoinColumn(name="gift_id", referencedColumnName="id")},
  73.      *      inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
  74.      *      )
  75.      */
  76.     protected $giftCategories;
  77.     /**
  78.      * Many Gifts have Many Categories.
  79.      *
  80.      * @ORM\ManyToMany(targetEntity="App\Entity\Ecommerce\Gift")
  81.      * @ORM\JoinTable(name="app_gift_gift",
  82.      *      joinColumns={@ORM\JoinColumn(name="gift1_id", referencedColumnName="id")},
  83.      *      inverseJoinColumns={@ORM\JoinColumn(name="gift2_id", referencedColumnName="id")}
  84.      *      )
  85.      */
  86.     protected $relatedGifts;
  87.     /**
  88.      * @ORM\Column(type="boolean")
  89.      */
  90.     private $promoted false;
  91.     /**
  92.     * @ORM\Column(type="integer")
  93.     */
  94.     private $sales 0;
  95.     /**
  96.      * @var string
  97.      *
  98.      * @ORM\Column(type="string", nullable=true)
  99.      */
  100.     private $contactEmail;
  101.     /**
  102.      * @var string
  103.      *
  104.      * @ORM\Column(type="string", nullable=true)
  105.      */
  106.     private $contactPhone;
  107.     /**
  108.      * @ORM\ManyToMany(targetEntity="App\Entity\Hotel")
  109.      * @ORM\JoinTable(name="app_gift__hotel")
  110.      */
  111.     private Collection $hotels;
  112.     /**
  113.      * @ORM\Column(type="string", length=255, nullable=true)
  114.      */
  115.     private ?string $titleColor self::LIGHT_COLOR;
  116.     /**
  117.      * @ORM\Column(type="string", length=255, nullable=true)
  118.      */
  119.     private ?string $shortTextColor self::DARK_COLOR;
  120.     public function __construct()
  121.     {
  122.         parent::__construct();
  123.         $this->giftHasExtras = new ArrayCollection();
  124.         $this->rooms = new ArrayCollection();
  125.         $this->giftCategories = new ArrayCollection();
  126.         $this->relatedGifts= new ArrayCollection();
  127.     }
  128.     /**
  129.      * {@inheritdoc}
  130.      */
  131.     public function setGiftHasExtras($giftHasExtras)
  132.     {
  133.         $this->giftHasExtras = new ArrayCollection();
  134.         foreach ($giftHasExtras as $giftHasExtra) {
  135.             $this->addGiftHasExtras($giftHasExtra);
  136.         }
  137.     }
  138.     /**
  139.      * {@inheritdoc}
  140.      */
  141.     public function getGiftHasExtras()
  142.     {
  143.         return $this->giftHasExtras;
  144.     }
  145.     /**
  146.      * {@inheritdoc}
  147.      */
  148.     public function addGiftHasExtras(GiftHasExtra $giftHasExtra)
  149.     {
  150.         $giftHasExtra->setGift($this);
  151.         $this->giftHasExtras[] = $giftHasExtra;
  152.     }
  153.     /**
  154.      * Getter for hotel.
  155.      *
  156.      * @return mixed
  157.      */
  158.     public function getHotel()
  159.     {
  160.         if (!$this->getHotels()->isEmpty()) {
  161.             return $this->getHotels()->first();
  162.         }
  163.     }
  164.     /**
  165.      * Setter for hotel.
  166.      *
  167.      * @param mixed $hotel
  168.      *
  169.      * @return Gift
  170.      */
  171.     public function setHotel($hotel)
  172.     {
  173.         $this->hotel $hotel;
  174.         return $this;
  175.     }
  176.     /**
  177.      * @return string
  178.      */
  179.     public function getContactEmail()
  180.     {
  181.         return $this->contactEmail;
  182.     }
  183.     /**
  184.      * @param string $contactEmail
  185.      */
  186.     public function setContactEmail($contactEmail)
  187.     {
  188.         $this->contactEmail $contactEmail;
  189.     }
  190.     /**
  191.      * @return string
  192.      */
  193.     public function getContactPhone()
  194.     {
  195.         return $this->contactPhone;
  196.     }
  197.     /**
  198.      * @param string $contactPhone
  199.      */
  200.     public function setContactPhone($contactPhone)
  201.     {
  202.         $this->contactPhone $contactPhone;
  203.     }
  204.     public function setDescriptionList($descriptionList)
  205.     {
  206.         $this->translate(nullfalse)->setDescriptionList($descriptionList);
  207.         return $this;
  208.     }
  209.     public function getDescriptionList()
  210.     {
  211.         return $this->translate(nullfalse)->getDescriptionList();
  212.     }
  213.     public function setGiftTerms($giftTerms)
  214.     {
  215.         $this->translate(nullfalse)->setGiftTerms($giftTerms);
  216.         return $this;
  217.     }
  218.     public function getGiftTerms()
  219.     {
  220.         return $this->translate(nullfalse)->getGiftTerms();
  221.     }
  222.     public function setGiftConditions($giftConditions)
  223.     {
  224.         $this->translate(nullfalse)->setGiftConditions($giftConditions);
  225.         return $this;
  226.     }
  227.     public function getGiftConditions()
  228.     {
  229.         return $this->translate(nullfalse)->getGiftConditions();
  230.     }
  231.     public function setSubtitle($subtitle)
  232.     {
  233.         $this->translate(nullfalse)->setSubtitle($subtitle);
  234.         return $this;
  235.     }
  236.     public function getSubtitle()
  237.     {
  238.         return $this->translate(nullfalse)->getSubtitle();
  239.     }
  240.     public function setTitle($title): void
  241.     {
  242.         $this->translate(nullfalse)->setTitle($title);
  243.     }
  244.     public function getTitle(): string
  245.     {
  246.         return $this->translate(nullfalse)->getTitle();
  247.     }
  248.     /**
  249.      * Getter for rooms.
  250.      *
  251.      * @return mixed
  252.      */
  253.     public function getRooms()
  254.     {
  255.         return $this->rooms;
  256.     }
  257.     /**
  258.      * Setter for rooms.
  259.      *
  260.      * @param mixed $rooms
  261.      *
  262.      * @return Gift
  263.      */
  264.     public function setRooms($rooms)
  265.     {
  266.         $this->rooms $rooms;
  267.         return $this;
  268.     }
  269.     /**
  270.      * @param Room $room
  271.      *
  272.      * @return $this Self Object
  273.      */
  274.     public function addRoom(Room $room)
  275.     {
  276.         if (!$this->rooms->contains($room)) {
  277.             $this->rooms->add($room);
  278.         }
  279.         return $this;
  280.     }
  281.     /**
  282.      * @param Room $room
  283.      *
  284.      * @return $this Self Object
  285.      */
  286.     public function removeRoom(Room $room)
  287.     {
  288.         $this->rooms->removeElement($room);
  289.         return $this;
  290.     }
  291.     public function getTranslatableContactEmail($locale null)
  292.     {
  293.         return $this->translate($localefalse)->getContactEmail();
  294.     }
  295.     public function getTranslatableContactPhone($locale null)
  296.     {
  297.         return $this->translate($localefalse)->getContactPhone();
  298.     }
  299.     /**
  300.      * Getter for relatedGifts.
  301.      *
  302.      * @return mixed
  303.      */
  304.     public function getRelatedGifts()
  305.     {
  306.         return $this->relatedGifts;
  307.     }
  308.     /**
  309.      * Setter for relatedGifts.
  310.      *
  311.      * @param mixed $relatedGifts
  312.      *
  313.      * @return Gift
  314.      */
  315.     public function setRelatedGifts($relatedGifts)
  316.     {
  317.         $this->relatedGifts $relatedGifts;
  318.         return $this;
  319.     }
  320.     /**
  321.      * @param Gift $relatedGift
  322.      *
  323.      * @return $this Self Object
  324.      */
  325.     public function addRelatedGift(Gift $relatedGift)
  326.     {
  327.         if (!$this->relatedGifts->contains($relatedGift)) {
  328.             $this->relatedGifts->add($relatedGift);
  329.         }
  330.         return $this;
  331.     }
  332.     /**
  333.      * @param Gift $relatedGift
  334.      *
  335.      * @return $this Self Object
  336.      */
  337.     public function removeRelatedGift(Gift $relatedGift)
  338.     {
  339.         $this->relatedGifts->removeElement($relatedGift);
  340.         return $this;
  341.     }
  342.     /**
  343.      * Getter for categories.
  344.      *
  345.      * @return mixed
  346.      */
  347.     public function getGiftCategories()
  348.     {
  349.         return $this->giftCategories;
  350.     }
  351.     /**
  352.      * Setter for categories.
  353.      *
  354.      * @param mixed $categories
  355.      *
  356.      * @return Gift
  357.      */
  358.     public function setGiftCategories($categories)
  359.     {
  360.         $this->giftCategories $categories;
  361.         return $this;
  362.     }
  363.     /**
  364.      * @param GiftCategory  $category
  365.      *
  366.      * @return $this Self Object
  367.      */
  368.     public function addGiftCategory(GiftCategory $category)
  369.     {
  370.         if (!$this->giftCategories->contains($category)) {
  371.             $this->giftCategories->add($category);
  372.         }
  373.         return $this;
  374.     }
  375.     /**
  376.      * @param GiftCategory  $category
  377.      *
  378.      * @return $this Self Object
  379.      */
  380.     public function removeGiftCategory(GiftCategory $category)
  381.     {
  382.         $this->giftCategories->removeElement($category);
  383.         return $this;
  384.     }
  385.     /**
  386.      * Getter for promoted.
  387.      *
  388.      * @return mixed
  389.      */
  390.     public function getPromoted()
  391.     {
  392.         return $this->promoted;
  393.     }
  394.     /**
  395.      * Setter for promoted.
  396.      *
  397.      * @return Gift
  398.      */
  399.     public function setPromoted($promoted)
  400.     {
  401.         $this->promoted $promoted;
  402.         return $this;
  403.     }
  404.     public function isPromoted()
  405.     {
  406.         return $this->promoted;
  407.     }
  408.     /**
  409.      * @return mixed
  410.      */
  411.     public function getSales()
  412.     {
  413.         return $this->sales;
  414.     }
  415.     /**
  416.      * @param mixed $sales
  417.      */
  418.     public function setSales($sales)
  419.     {
  420.         $this->sales $sales;
  421.     }
  422.     public function addSale()
  423.     {
  424.         $this->setSales($this->getSales() + 1);
  425.     }
  426.     public function setGiftInfo1($giftInfo1)
  427.     {
  428.         $this->translate(nullfalse)->setGiftInfo1($giftInfo1);
  429.         return $this;
  430.     }
  431.     public function getGiftInfo1()
  432.     {
  433.         return $this->translate(nullfalse)->getGiftInfo1();
  434.     }
  435.     public function setGiftInfo2($giftInfo2)
  436.     {
  437.         $this->translate(nullfalse)->setGiftInfo2($giftInfo2);
  438.         return $this;
  439.     }
  440.     public function getGiftInfo2()
  441.     {
  442.         return $this->translate(nullfalse)->getGiftInfo2();
  443.     }
  444.     public function setSlug($slug): self
  445.     {
  446.         $this->translate(nullfalse)->setSlug($slug);
  447.         return $this;
  448.     }
  449.     public function getSlug()
  450.     {
  451.         return $this->translate(nullfalse)->getSlug();
  452.     }
  453.     public function getAutocompleteString()
  454.     {
  455.         return $this->getTitle().' - '.$this->getSku();
  456.     }
  457.     public function getSeoTitle(): ?string
  458.     {
  459.         return $this->getTranslation()->getTitle();
  460.     }
  461.     public function getSeoDescription(): ?string
  462.     {
  463.         return $this->getTranslation()->getDescription();
  464.     }
  465.     /**
  466.      * @return Collection
  467.      */
  468.     public function getHotels(): Collection
  469.     {
  470.         return $this->hotels;
  471.     }
  472.     /**
  473.      * @param Collection $hotels
  474.      */
  475.     public function setHotels(Collection $hotels): void
  476.     {
  477.         $this->hotels $hotels;
  478.     }
  479.     public function __toString()
  480.     {
  481.         return (string) $this->getTitle();
  482.     }
  483.     /**
  484.      * @return string|null
  485.      */
  486.     public function getTitleColor(): ?string
  487.     {
  488.         return $this->titleColor;
  489.     }
  490.     /**
  491.      * @param string|null $titleColor
  492.      */
  493.     public function setTitleColor(?string $titleColor): void
  494.     {
  495.         $this->titleColor $titleColor;
  496.     }
  497.     /**
  498.      * @return string|null
  499.      */
  500.     public function getShortTextColor(): ?string
  501.     {
  502.         return $this->shortTextColor;
  503.     }
  504.     /**
  505.      * @param string|null $shortTextColor
  506.      */
  507.     public function setShortTextColor(?string $shortTextColor): void
  508.     {
  509.         $this->shortTextColor $shortTextColor;
  510.     }
  511.     public static function getStyles(): array
  512.     {
  513.         return [
  514.             self::DARK_COLOR => self::DARK_COLOR,
  515.             self::LIGHT_COLOR => self::LIGHT_COLOR,
  516.         ];
  517.     }
  518. }