<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\CompanyAssociationRepository")
* @ORM\HasLifecycleCallbacks()
*/
class CompanyAssociation
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="datetime")
*/
private $dateCreated;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Image", cascade={"persist", "remove"})
*/
private $logo;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Company", inversedBy="associations", cascade={"persist"})
*/
private $companies;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User", mappedBy="AdminOfCompanyAssociations")
*/
private $adminUsers;
/**
* @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="makeCompanyForAssociation")
*/
private $usersAddingCompanies;
/**
* @ORM\Column(type="string", length=255)
*/
private $urlName;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Image", cascade={"persist", "remove"})
*/
private $banner;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Variable", inversedBy="companyAssociations")
*/
private $variables;
/**
* @ORM\OneToMany(targetEntity="App\Entity\CartProduct", mappedBy="addedWhenBeingInAssociation")
*/
private $cartProducts;
public function __construct()
{
$this->companies = new ArrayCollection();
$this->dateCreated = new \DateTime();
$this->adminUsers = new ArrayCollection();
$this->usersAddingCompanies = new ArrayCollection();
$this->variables = new ArrayCollection();
$this->cartProducts = new ArrayCollection();
}
/**
* @ORM\PrePersist
*/
public function doActionsOnPrePersist(){
}
/**
* @ORM\PreUpdate
*/
public function doActionsOnPreUpdate(){
}
/*
Do what's needed to be a public market
*/
public function doActionsToBeAPublicMarket(){
}
/*
Do what's needed to be a out of a public market
*/
public function doActionsToBeRemovedFromAPublicMarket(){
}
public function getId(): ?int
{
return $this->id;
}
public function getDateCreated(): ?\DateTimeInterface
{
return $this->dateCreated;
}
public function setDateCreated(\DateTimeInterface $dateCreated): self
{
$this->dateCreated = $dateCreated;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getLogo(): ?Image
{
return $this->logo;
}
public function setLogo(?Image $logo): self
{
if(!empty($logo))
$this->logo = $logo;
return $this;
}
/**
* @return Collection|Company[]
*/
public function getCompanies(): Collection
{
return $this->companies;
}
public function addCompany(Company $company): self
{
if (!$this->companies->contains($company)) {
$this->companies[] = $company;
}
//We need to add for the market too
$company->doActionsToBeAPublicMarket();
return $this;
}
public function removeCompany(Company $company): self
{
if ($this->companies->contains($company)) {
$this->companies->removeElement($company);
}
//We need to reset for the market too
$company->doActionsToBeRemovedFromAPublicMarket();
return $this;
}
public function __toString()
{
return $this->getName();
}
/**
* @return Collection|User[]
*/
public function getAdminUsers(): Collection
{
return $this->adminUsers;
}
public function addAdminUser(User $adminUser): self
{
if (!$this->adminUsers->contains($adminUser)) {
$this->adminUsers[] = $adminUser;
$adminUser->addMakeGroupOfAssociation($this);
}
return $this;
}
public function removeAdminUser(User $adminUser): self
{
if ($this->adminUsers->contains($adminUser)) {
$this->adminUsers->removeElement($adminUser);
$adminUser->removeMakeGroupOfAssociation($this);
}
return $this;
}
/**
* @return Collection|User[]
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user)) {
$this->users[] = $user;
$user->addAdminOfCompanyAssociation($this);
}
return $this;
}
public function removeUser(User $user): self
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
$user->removeAdminOfCompanyAssociation($this);
}
return $this;
}
/**
* @return Collection|User[]
*/
public function getUsersAddingCompanies(): Collection
{
return $this->usersAddingCompanies;
}
public function addUsersAddingCompany(User $usersAddingCompany): self
{
if (!$this->usersAddingCompanies->contains($usersAddingCompany)) {
$this->usersAddingCompanies[] = $usersAddingCompany;
$usersAddingCompany->setMakeCompanyForAssociation($this);
}
return $this;
}
public function removeUsersAddingCompany(User $usersAddingCompany): self
{
if ($this->usersAddingCompanies->contains($usersAddingCompany)) {
$this->usersAddingCompanies->removeElement($usersAddingCompany);
// set the owning side to null (unless already changed)
if ($usersAddingCompany->getMakeCompanyForAssociation() === $this) {
$usersAddingCompany->setMakeCompanyForAssociation(null);
}
}
return $this;
}
public function getUrlName(): ?string
{
return $this->urlName;
}
public function setUrlName(string $urlName): self
{
$this->urlName = $urlName;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getBanner(): ?Image
{
return $this->banner;
}
public function setBanner(?Image $banner): self
{
if(!empty($banner))
$this->banner = $banner;
return $this;
}
/**
* @return Collection|Variable[]
*/
public function getVariables(): Collection
{
return $this->variables;
}
public function addVariable(Variable $variable): self
{
if (!$this->variables->contains($variable)) {
$this->variables[] = $variable;
}
return $this;
}
public function removeVariable(Variable $variable): self
{
if ($this->variables->contains($variable)) {
$this->variables->removeElement($variable);
}
return $this;
}
public function getVariableByCodeName($codeName){
foreach($this->getVariables() as $v){
if($v->getCodeName() == $codeName)
return $v;
}
return false;
}
public function getVariableValueByCodeName($codeName){
$test = $this->getVariableByCodeName($codeName);
if($test && !$test->isExpired())
return $test->getValue();
return false;
}
/**
* @return Collection|CartProduct[]
*/
public function getCartProducts(): Collection
{
return $this->cartProducts;
}
public function addCartProduct(CartProduct $cartProduct): self
{
if (!$this->cartProducts->contains($cartProduct)) {
$this->cartProducts[] = $cartProduct;
$cartProduct->setAddedWhenBeingInAssociation($this);
}
return $this;
}
public function removeCartProduct(CartProduct $cartProduct): self
{
if ($this->cartProducts->contains($cartProduct)) {
$this->cartProducts->removeElement($cartProduct);
// set the owning side to null (unless already changed)
if ($cartProduct->getAddedWhenBeingInAssociation() === $this) {
$cartProduct->setAddedWhenBeingInAssociation(null);
}
}
return $this;
}
public function getDefaultDeliveryIsPickup(): bool {
return (bool) $this->getVariableValueByCodeName('orders.canPickUp');
}
public function canPackUp(): int {
return $this->getVariableValueByCodeName('orders.canPackUp');
}
}