src/Entity/BuyingGroup.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\DBAL\Types\Types;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Gedmo\Blameable\Traits\BlameableEntity;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\Common\Collections\ArrayCollection;
  8. use Gedmo\Timestampable\Traits\TimestampableEntity;
  9. use Symfony\Component\Validator\Constraints as Assert;
  10. use \App\Entity\User;
  11. use \App\Entity\Media;
  12. use \App\Entity\Order;
  13. use \App\Entity\Address;
  14. use \App\Repository\BuyingGroupRepository;
  15. #[ORM\Entity(repositoryClassBuyingGroupRepository::class)]
  16. class BuyingGroup
  17. {
  18.     use BlameableEntity//Hook blameable behaviour. Updates createdBy, updatedBy fields
  19.     use TimestampableEntity//Hook timestampable behaviour. Updates createdAt, updatedAt fields 
  20.     #[ORM\Id]
  21.     #[ORM\GeneratedValue(strategy"IDENTITY")]
  22.     #[ORM\Column]
  23.     private ?int $id null;
  24.     #[ORM\ManyToOne(inversedBy'buyingGroups')]
  25.     #[ORM\JoinColumn(nullablefalse)]
  26.     private ?User $mainUser null;
  27.     
  28.     #[ORM\ManyToMany(targetEntityUser::class, inversedBy'buyingGroups')]
  29.     private Collection $members;
  30.     #[ORM\Column(length100)]
  31.     #[Assert\NotNull()]
  32.     #[Assert\Length(max100)]
  33.     private ?string $name null;
  34.     #[ORM\OneToOne(cascade: ['persist''remove'])]
  35.     #[ORM\JoinColumn(nullabletrue)]
  36.     private ?Media $image null;
  37.     #[ORM\Column(type'boolean'options: ['default' => false])]
  38.     private ?bool $isCorporate null;
  39.     #[ORM\Column(length100nullabletrue)]
  40.     #[Assert\Length(max100)]
  41.     private ?string $corporateContactName null;
  42.     #[ORM\Column(length100nullabletrue)]
  43.     #[Assert\Length(max100)]
  44.     private ?string $corporateContactEmail null;
  45.     #[ORM\Column(length100nullabletrue)]
  46.     #[Assert\Length(max100)]
  47.     private ?string $corporateName null;
  48.     #[ORM\Column(length20nullabletrue)]
  49.     #[Assert\Length(max20)]
  50.     private ?string $corporateVatNumber null;
  51.     #[ORM\ManyToOne(inversedBy'buyingGroups'cascade:["persist"])]
  52.     #[Assert\Valid()]
  53.     // #[Assert\NotNull()]
  54.     private ?Address $address null;
  55.     #[ORM\Column(length255nullabletrue)]
  56.     #[Assert\Length(max255)]
  57.     private ?string $whitelistedDomains null;
  58.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  59.     private ?string $description null;
  60.     #[ORM\Column(type'boolean'options: ['default' => false])]
  61.     private ?bool $membersCanInvite null;
  62.     #[ORM\Column(type'boolean'options: ['default' => false])]
  63.     private ?bool $freeShipping false;
  64.     #[ORM\Column(type'boolean'options: ['default' => false])]
  65.     private ?bool $openGroup false;
  66.     #[ORM\OneToMany(mappedBy'buyingGroupEntity'targetEntityShoppingCart::class)]
  67.     private ?Collection $shoppingCart null;
  68.     #[ORM\OneToMany(mappedBy'buyingGroup'targetEntityOrder::class)]
  69.     private ?Collection $orders null;
  70.     // #[ORM\Column(length: 255)]
  71.     // private ?string $address = null;
  72.     // #[ORM\Column(length: 20)]
  73.     // private ?string $postCode = null;
  74.     // #[ORM\Column(length: 255)]
  75.     // private ?string $city = null;
  76.     // #[ORM\ManyToOne]
  77.     // #[ORM\JoinColumn(nullable: false)]
  78.     // private ?Province $state = null;
  79.     public function __construct()
  80.     {
  81.         $this->members = new ArrayCollection();
  82.         $this->orders  = new ArrayCollection();
  83.     }
  84.     public function getId(): ?int
  85.     {
  86.         return $this->id;
  87.     }
  88.     public function getMainUser(): ?User
  89.     {
  90.         return $this->mainUser;
  91.     }
  92.     public function setMainUser(?User $mainUser): self
  93.     {
  94.         $this->mainUser $mainUser;
  95.         return $this;
  96.     }
  97.     public function getName(): ?string
  98.     {
  99.         return $this->name;
  100.     }
  101.     public function setName(string $name): self
  102.     {
  103.         $this->name $name;
  104.         return $this;
  105.     }
  106.     public function getImage(): ?Media
  107.     {
  108.         return $this->image;
  109.     }
  110.     public function setImage(Media $image): self
  111.     {
  112.         $image->setDirectory('buyingGroup');
  113.         $this->image $image;
  114.         return $this;
  115.     }
  116.     public function isIsCorporate(): ?bool
  117.     {
  118.         return $this->isCorporate;
  119.     }
  120.     public function setIsCorporate(bool $isCorporate): self
  121.     {
  122.         $this->isCorporate $isCorporate;
  123.         return $this;
  124.     }
  125.     public function getCorporateContactName(): ?string
  126.     {
  127.         return $this->corporateContactName;
  128.     }
  129.     public function setCorporateContactName(?string $corporateContactName): self
  130.     {
  131.         $this->corporateContactName $corporateContactName;
  132.         return $this;
  133.     }
  134.     public function getCorporateContactEmail(): ?string
  135.     {
  136.         return $this->corporateContactEmail;
  137.     }
  138.     public function setCorporateContactEmail(?string $corporateContactEmail): self
  139.     {
  140.         $this->corporateContactEmail $corporateContactEmail;
  141.         return $this;
  142.     }
  143.     public function getCorporateName(): ?string
  144.     {
  145.         return $this->corporateName;
  146.     }
  147.     public function setCorporateName(?string $corporateName): self
  148.     {
  149.         $this->corporateName $corporateName;
  150.         return $this;
  151.     }
  152.     public function getCorporateVatNumber(): ?string
  153.     {
  154.         return $this->corporateVatNumber;
  155.     }
  156.     public function setCorporateVatNumber(?string $corporateVatNumber): self
  157.     {
  158.         $this->corporateVatNumber $corporateVatNumber;
  159.         return $this;
  160.     }
  161.     // public function getAddress(): ?string
  162.     // {
  163.     //     return $this->address;
  164.     // }
  165.     // public function setAddress(string $address): self
  166.     // {
  167.     //     $this->address = $address;
  168.     //     return $this;
  169.     // }
  170.     // public function getPostCode(): ?string
  171.     // {
  172.     //     return $this->postCode;
  173.     // }
  174.     // public function setPostCode(string $postCode): self
  175.     // {
  176.     //     $this->postCode = $postCode;
  177.     //     return $this;
  178.     // }
  179.     // public function getCity(): ?string
  180.     // {
  181.     //     return $this->city;
  182.     // }
  183.     // public function setCity(string $city): self
  184.     // {
  185.     //     $this->city = $city;
  186.     //     return $this;
  187.     // }
  188.     // public function getState(): ?Province
  189.     // {
  190.     //     return $this->state;
  191.     // }
  192.     // public function setState(?Province $state): self
  193.     // {
  194.     //     $this->state = $state;
  195.     //     return $this;
  196.     // }
  197.     public function getAddress(): ?Address
  198.     {
  199.         return $this->address;
  200.     }
  201.     public function setAddress(?Address $address): self
  202.     {
  203.         $this->address $address;
  204.         return $this;
  205.     }
  206.     public function getWhitelistedDomains(): ?string
  207.     {
  208.         return $this->whitelistedDomains;
  209.     }
  210.     public function setWhitelistedDomains(?string $whitelistedDomains): self
  211.     {
  212.         $this->whitelistedDomains $whitelistedDomains;
  213.         return $this;
  214.     }
  215.     public function getDescription(): ?string
  216.     {
  217.         return $this->description;
  218.     }
  219.     public function setDescription(?string $description): self
  220.     {
  221.         $this->description $description;
  222.         return $this;
  223.     }
  224.     public function getFreeShipping(): bool
  225.     {
  226.         return $this->freeShipping;
  227.     }
  228.     public function setFreeShipping(bool $freeShipping): self
  229.     {
  230.         $this->freeShipping $freeShipping;
  231.         return $this;
  232.     }
  233.     public function getOpenGroup(): bool
  234.     {
  235.         return $this->openGroup;
  236.     }
  237.     public function setOpenGroup(bool $openGroup): self
  238.     {
  239.         $this->openGroup $openGroup;
  240.         return $this;
  241.     }
  242.     public function isMembersCanInvite(): ?bool
  243.     {
  244.         return $this->membersCanInvite;
  245.     }
  246.     public function setMembersCanInvite(bool $membersCanInvite): self
  247.     {
  248.         $this->membersCanInvite $membersCanInvite;
  249.         return $this;
  250.     }
  251.     public function getMembers(): ?Collection
  252.     {
  253.         return $this->members;
  254.     }
  255.     public function addMember(User $member): self
  256.     {
  257.         if (!$this->members->contains($member)) {
  258.             $this->members->add($member);
  259.         }
  260.         return $this;
  261.     }
  262.     public function removeMember(User $member): self
  263.     {
  264.         if ($this->members->removeElement($member)) {
  265.             $member->removeBuyingGroup($this);
  266.         }
  267.         return $this;
  268.     }
  269.     /**
  270.      * @return Collection<int, Order>
  271.      */
  272.     public function getOrders(): ?Collection
  273.     {
  274.         return $this->orders;
  275.     }
  276.     /**
  277.      * @return Collection<int, Order>
  278.      */
  279.     public function getPendingOrdersForProducts(Collection $productsList): ?Collection
  280.     {
  281.         return $this->orders->filter(function($o) use ($productsList) {
  282.             if (!in_array($o->getStatus()->getKey(), [OrderStatus::MONEY_WITHHELDOrderStatus::BANK_TRANSFER])) {
  283.                 return false;
  284.             }
  285.             return $o->getOrderDetails()->filter(fn($i) => in_array($i->getProduct()->getId(), $productsList->toArray()))->count() > 0;
  286.         });
  287.     }
  288.     /**
  289.      * @return Collection<int, Order>
  290.      */
  291.     public function getPendingOrdersForProduct(Product $product): ?Collection
  292.     {
  293.         return $this->orders->filter(fn($o) =>
  294.             $o->getStatus()->getKey() !== OrderStatus::MONEY_WITHHELD
  295.                 false
  296.                 $o->getOrderDetails()->filter(fn($d) => $d->getProduct()->getId() === $product->getId())->count() > 0
  297.         );
  298.     }
  299.     public function addOrder(Order $order): self
  300.     {
  301.         if (!$this->orders->contains($order)) {
  302.             $this->orders->add($order);
  303.             $order->setBuyingGroup($this);
  304.         }
  305.         return $this;
  306.     }
  307.     public function removeOrder(Order $order): self
  308.     {
  309.         if ($this->orders->removeElement($order)) {
  310.             // set the owning side to null (unless already changed)
  311.             if ($order->getBuyingGroup() === $this) {
  312.                 $order->setBuyingGroup(null);
  313.             }
  314.         }
  315.         return $this;
  316.     }
  317. }