<?php
namespace App\Entity\PointsCatalog;
use App\Annotation\SiteAware;
use App\Entity\AbstractBase;
use App\Entity\Interfaces\SiteInterface;
use App\Entity\MiniAbstractBase;
use App\Entity\Traits\NameTrait;
use App\Entity\Traits\PublishedTrait;
use App\Entity\Traits\SiteTrait;
use App\Enum\SiteEnum;
use App\Repository\PointsCatalog\CatalogGiftProviderRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Table(name="vulco_points_catalog_gift_provider", indexes={@ORM\Index(name="catalog_gift_provider_site_idx", columns={"site"})})
* @ORM\Entity(repositoryClass=CatalogGiftProviderRepository::class)
* @Gedmo\SoftDeleteable(fieldName="removedAt", timeAware=false)
* @SiteAware(siteFieldName="site")
*/
class CatalogGiftProvider extends AbstractBase implements SiteInterface
{
use NameTrait;
use PublishedTrait;
use SiteTrait;
public const DELIVERY_BLOCK_ORDER = 0;
public const DELIVERY_MIN_POINTS_RESTRICTION = 1;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
*/
private string $name;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $sapCode = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $address = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $locality = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $zipCode = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $province = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $country = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $phone1 = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $phone2 = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $fax = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\Email()
*/
private ?string $contactEmail = null;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
*/
private string $ordersEmail;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\Url()
*/
private ?string $web = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $legalName = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $cif = null;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $deliveryManagementPoints = null;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $deliveryManagementMinimumPoints = null;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $deliveryManagementMinimumPointsQuestion = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $deliveryManagementMinimumPointsHelpText = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $contactPersonName = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $contactPersonFixPhone = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $contactPersonMobilePhone = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $contactPersonEmail = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $billingPersonName = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $billingPersonFixPhone = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $billingPersonMobilePhone = null;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private ?string $billingPersonEmail = null;
/**
* @ORM\OneToMany(targetEntity="App\Entity\PointsCatalog\CatalogGiftHasProvider", mappedBy="provider", cascade={"persist"}, orphanRemoval=true)
*/
private ?Collection $gifts;
public function __construct()
{
$this->gifts = new ArrayCollection();
}
public function getSapCode(): ?string
{
return $this->sapCode;
}
public function setSapCode(?string $sapCode): self
{
$this->sapCode = $sapCode;
return $this;
}
public function getAddress(): ?string
{
return $this->address;
}
public function setAddress(?string $address): self
{
$this->address = $address;
return $this;
}
public function getLocality(): ?string
{
return $this->locality;
}
public function setLocality(?string $locality): self
{
$this->locality = $locality;
return $this;
}
public function getZipCode(): ?string
{
return $this->zipCode;
}
public function setZipCode(?string $zipCode): self
{
$this->zipCode = $zipCode;
return $this;
}
public function getProvince(): ?string
{
return $this->province;
}
public function setProvince(?string $province): self
{
$this->province = $province;
return $this;
}
public function getCountry(): ?string
{
return $this->country;
}
public function getCountryLanguageTranlatorKey(): string
{
$result = MiniAbstractBase::DEFAULT_EMPTY_STRING;
if ($this->getCountry() && array_key_exists(strtolower($this->getCountry()), SiteEnum::getReversedLanguages())) {
$result = SiteEnum::getReversedLanguages()[strtolower($this->getCountry())];
}
return $result;
}
public function setCountry(?string $country): self
{
$this->country = $country;
return $this;
}
public function getPhone1(): ?string
{
return $this->phone1;
}
public function setPhone1(?string $phone1): self
{
$this->phone1 = $phone1;
return $this;
}
public function getPhone2(): ?string
{
return $this->phone2;
}
public function setPhone2(?string $phone2): self
{
$this->phone2 = $phone2;
return $this;
}
public function getFax(): ?string
{
return $this->fax;
}
public function setFax(?string $fax): self
{
$this->fax = $fax;
return $this;
}
public function getContactEmail(): ?string
{
return $this->contactEmail;
}
public function setContactEmail(?string $email): self
{
$this->contactEmail = $email;
return $this;
}
public function getOrdersEmail(): string
{
return $this->ordersEmail;
}
public function setOrdersEmail(string $email): self
{
$this->ordersEmail = $email;
return $this;
}
public function getWeb(): ?string
{
return $this->web;
}
public function setWeb(?string $web): self
{
$this->web = $web;
return $this;
}
public function getLegalName(): ?string
{
return $this->legalName;
}
public function setLegalName(?string $legalName): self
{
$this->legalName = $legalName;
return $this;
}
public function getCif(): ?string
{
return $this->cif;
}
public function setCif(?string $cif): self
{
$this->cif = $cif;
return $this;
}
public function getDeliveryManagementPoints(): ?int
{
return $this->deliveryManagementPoints;
}
public function setDeliveryManagementPoints(?int $deliveryManagementPoints): self
{
$this->deliveryManagementPoints = $deliveryManagementPoints;
return $this;
}
public function getDeliveryManagementMinimumPoints(): ?int
{
return $this->deliveryManagementMinimumPoints;
}
public function setDeliveryManagementMinimumPoints(?int $deliveryManagementMinimumPoints): self
{
$this->deliveryManagementMinimumPoints = $deliveryManagementMinimumPoints;
return $this;
}
public function getDeliveryManagementMinimumPointsQuestion(): ?int
{
return $this->deliveryManagementMinimumPointsQuestion;
}
public function setDeliveryManagementMinimumPointsQuestion(?int $deliveryManagementMinimumPointsQuestion): self
{
$this->deliveryManagementMinimumPointsQuestion = $deliveryManagementMinimumPointsQuestion;
return $this;
}
public function getDeliveryManagementMinimumPointsHelpText(): ?string
{
return $this->deliveryManagementMinimumPointsHelpText;
}
public function setDeliveryManagementMinimumPointsHelpText(?string $deliveryManagementMinimumPointsHelpText): self
{
$this->deliveryManagementMinimumPointsHelpText = $deliveryManagementMinimumPointsHelpText;
return $this;
}
public function getContactPersonName(): ?string
{
return $this->contactPersonName;
}
public function setContactPersonName(?string $contactPersonName): self
{
$this->contactPersonName = $contactPersonName;
return $this;
}
public function getContactPersonFixPhone(): ?string
{
return $this->contactPersonFixPhone;
}
public function setContactPersonFixPhone(?string $contactPersonFixPhone): self
{
$this->contactPersonFixPhone = $contactPersonFixPhone;
return $this;
}
public function getContactPersonMobilePhone(): ?string
{
return $this->contactPersonMobilePhone;
}
public function setContactPersonMobilePhone(?string $contactPersonMobilePhone): self
{
$this->contactPersonMobilePhone = $contactPersonMobilePhone;
return $this;
}
public function getContactPersonEmail(): ?string
{
return $this->contactPersonEmail;
}
public function setContactPersonEmail(?string $contactPersonEmail): self
{
$this->contactPersonEmail = $contactPersonEmail;
return $this;
}
public function getBillingPersonName(): ?string
{
return $this->billingPersonName;
}
public function setBillingPersonName(?string $billingPersonName): self
{
$this->billingPersonName = $billingPersonName;
return $this;
}
public function getBillingPersonFixPhone(): ?string
{
return $this->billingPersonFixPhone;
}
public function setBillingPersonFixPhone(?string $billingPersonFixPhone): self
{
$this->billingPersonFixPhone = $billingPersonFixPhone;
return $this;
}
public function getBillingPersonMobilePhone(): ?string
{
return $this->billingPersonMobilePhone;
}
public function setBillingPersonMobilePhone(?string $billingPersonMobilePhone): self
{
$this->billingPersonMobilePhone = $billingPersonMobilePhone;
return $this;
}
public function getBillingPersonEmail(): ?string
{
return $this->billingPersonEmail;
}
public function setBillingPersonEmail(?string $billingPersonEmail): self
{
$this->billingPersonEmail = $billingPersonEmail;
return $this;
}
public function getGifts(): ?Collection
{
return $this->gifts;
}
public function setGifts(?Collection $gifts): self
{
$this->gifts = $gifts;
return $this;
}
public function hasDeliveryBlocked(): bool
{
return self::DELIVERY_BLOCK_ORDER === $this->deliveryManagementMinimumPointsQuestion;
}
public function hasMinPointsRestriction(): bool
{
return self::DELIVERY_MIN_POINTS_RESTRICTION === $this->deliveryManagementMinimumPointsQuestion;
}
public function exceedsMinPointsRestriction(int $points): bool
{
return $points >= $this->deliveryManagementMinimumPoints;
}
public function __toString(): string
{
return $this->name ? $this->getName() : MiniAbstractBase::DEFAULT_EMPTY_STRING;
}
}