<?php
namespace App\Entity\System;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\System\AddressRepository")
*
* @ORM\Table(name="ps_address")
*/
class Address
{
public const ISO_COUNTRY_SPAIN = 'ES';
public const ACTIVE = 1;
public const DEFAULT_ADDRESS = 1;
public const INACTIVE = 0;
public const TYPE_INDIVIDUAL = 1;
public const TYPE_SELF_EMPLOYED = 2;
public const TYPE_COMPANY = 3;
public const CUSTOMER_TYPE_IDS_INDEXED_BY_TYPE_VALUES = [
'INDIVIDUAL' => self::TYPE_INDIVIDUAL,
'SELF_EMPLOYED' => self::TYPE_SELF_EMPLOYED,
'COMPANY' => self::TYPE_COMPANY,
];
/**
* @var int
*
* @ORM\Id
*
* @ORM\GeneratedValue(strategy="AUTO")
*
* @ORM\Column(type="integer", name="id_address")
*/
private $id;
/**
* @var Country
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\Country", inversedBy="addresses")
*
* @ORM\JoinColumn(referencedColumnName="id_country", name="id_country")
*/
private $country;
/**
* @var State
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\State")
*
* @ORM\JoinColumn(referencedColumnName="id_state", name="id_state", nullable=true)
*/
private $state;
/**
* @var string|null
*
* @ORM\Column(type="string", length=50, name="state_name", nullable=true)
*/
private $stateName;
/**
* @var int|null
*
* @ORM\Column(type="integer", name="id_manufacturer", length=10, options={"default" : 0})
*/
private $manufacturer;
/**
* @var string|null
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $alias;
/**
* @var string|null
*
* @ORM\Column(type="string", length=64, nullable=true)
*/
private $company;
/**
* @var string|null
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $name;
/**
* @var string
*
* @ORM\Column(type="string", length=128)
*/
private $email;
/**
* @var string|null
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $surnames;
/**
* @var string
*
* @ORM\Column(type="string", length=128)
*/
private $address1;
/**
* @var string|null
*
* @ORM\Column(type="string", length=128, nullable=true)
*/
private $address2;
/**
* @var string|null
*
* @ORM\Column(type="string", length=12, nullable=true)
*/
private $postcode;
/**
* @var string
*
* @ORM\Column(type="string", length=64)
*/
private $city;
/**
* @var string|null
*
* @ORM\Column(type="text", nullable=true)
*/
private $other;
/**
* @var string|null
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $phone;
/**
* @var string|null
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $phoneMobile;
/**
* @var string|null
*
* @ORM\Column(type="string", length=32, nullable=true)
*/
private $vatNumber;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $dateAdd;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $dateUpd;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 1})
*/
private $active;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private $invoiceAddress;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private $defaultInvoiceAddress;
/**
* @var bool
*
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private $defaultShippingAddress;
/**
* @ORM\Column(type="boolean", nullable=true, options={"default" : 0})
*/
private bool $vise;
/**
* @var bool|null
*
* @ORM\Column(type="boolean", length=4, nullable=true, options={"default" : 0})
*/
private $re;
/**
* @var string|null
*
* @ORM\Column(type="string", length=3, nullable=true)
*/
private $isoCode;
/**
* @var string|null
*
* @ORM\Column(type="string", length=128, nullable=true)
*/
private $comercialName;
/**
* @var int|null
*
* @ORM\Column(type="integer",length=1, nullable=true, options={"default" : 1}))
*/
private $typeCustomer;
/**
* @var string|null
*
* @ORM\Column(type="string", length=50, nullable=true, options={"default" : "1"})
*/
private $contactName;
/**
* @var string|null
*
* @ORM\Column(type="string", length=50, nullable=true, options={"default" : "1"})
*/
private $url;
/**
* @var int
*
* @ORM\Column(type="integer", length=10, options={"default" : 0})
*/
private $phonePrefix;
/**
* @var int
*
* @ORM\Column(type="integer", length=10, options={"default" : 0})
*/
private $phoneMobilePrefix;
/**
* @var int|null
*
* @ORM\Column(type="integer", length=4, nullable=true)
*/
private $favorite;
/**
* @var string|null
*
* @ORM\Column(type="string", length=64, nullable=true)
*/
private $companyName;
/**
* @var string|null
*
* @ORM\Column(type="string", length=3, nullable=true)
*/
private $isoVatNumber;
/**
* @var Customer
*
* @ORM\ManyToOne(targetEntity="App\Entity\System\Customer", inversedBy="addresses")
*
* @ORM\JoinColumn(name="id_customer", referencedColumnName="id_customer")
*/
private $customer;
/**
* @ORM\Column(type="boolean", nullable=true, options={"default" : 0})
*/
private bool $companyVerified = false;
public function __construct()
{
$this->dateUpd = new \DateTime();
$this->active = true;
$this->invoiceAddress = true;
$this->defaultInvoiceAddress = false;
$this->defaultShippingAddress = false;
$this->vise = false;
$this->re = false;
$this->typeCustomer = true;
$this->contactName = '1';
$this->phonePrefix = 0;
$this->phoneMobilePrefix = 0;
$this->favorite = 0;
$this->manufacturer = 0;
}
public static function createEmptyInvoiceAddress(string $customerEmail, \DateTime $dateTime, State $state): Address
{
$address = new self();
$address->email = $customerEmail;
$address->address1 = '';
$address->city = '';
$address->dateAdd = $dateTime;
$address->state = $state;
$address->defaultInvoiceAddress = true;
$address->invoiceAddress = true;
return $address;
}
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param int $id
*
* @return Address
*/
public function setId(int $id): Address
{
$this->id = $id;
return $this;
}
/**
* @return Country
*/
public function getCountry(): Country
{
return $this->country;
}
/**
* @param Country $country
*
* @return Address
*/
public function setCountry(Country $country): Address
{
$this->country = $country;
return $this;
}
/**
* @return State
*/
public function getState(): State
{
return $this->state;
}
/**
* @param State $state
*
* @return Address
*/
public function setState(State $state): Address
{
$this->state = $state;
return $this;
}
/**
* @return string|null
*/
public function getStateName(): ?string
{
return $this->stateName;
}
/**
* @param string|null $stateName
*
* @return Address
*/
public function setStateName(?string $stateName): Address
{
$this->stateName = $stateName;
return $this;
}
/**
* @return string|null
*/
public function getAlias(): ?string
{
return $this->alias;
}
/**
* @param string|null $alias
*
* @return Address
*/
public function setAlias(?string $alias): Address
{
$this->alias = $alias;
return $this;
}
/**
* @return string|null
*/
public function getCompany(): ?string
{
return $this->company;
}
/**
* @param string|null $company
*
* @return Address
*/
public function setCompany(?string $company): Address
{
$this->company = $company;
return $this;
}
/**
* @return string|null
*/
public function getName(): ?string
{
return $this->name;
}
/**
* @param string|null $name
*
* @return Address
*/
public function setName(?string $name): Address
{
$this->name = $name;
return $this;
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
/**
* @param string $email
*
* @return Address
*/
public function setEmail(string $email): Address
{
$this->email = $email;
return $this;
}
/**
* @return string|null
*/
public function getSurnames(): ?string
{
return $this->surnames;
}
/**
* @param string|null $surnames
*
* @return Address
*/
public function setSurnames(?string $surnames): Address
{
$this->surnames = $surnames;
return $this;
}
/**
* @return string
*/
public function getAddress1(): string
{
return $this->address1;
}
/**
* @param string $address1
*
* @return Address
*/
public function setAddress1(string $address1): Address
{
$this->address1 = $address1;
return $this;
}
/**
* @return string|null
*/
public function getAddress2(): ?string
{
return $this->address2;
}
/**
* @param string|null $address2
*
* @return Address
*/
public function setAddress2(?string $address2): Address
{
$this->address2 = $address2;
return $this;
}
/**
* @return string|null
*/
public function getPostcode(): ?string
{
return $this->postcode;
}
/**
* @param string|null $postcode
*
* @return Address
*/
public function setPostcode(?string $postcode): Address
{
$this->postcode = $postcode;
return $this;
}
/**
* @return string
*/
public function getCity(): string
{
return $this->city;
}
/**
* @param string $city
*
* @return Address
*/
public function setCity(string $city): Address
{
$this->city = $city;
return $this;
}
/**
* @return string|null
*/
public function getOther(): ?string
{
return $this->other;
}
/**
* @param string|null $other
*
* @return Address
*/
public function setOther(?string $other): Address
{
$this->other = $other;
return $this;
}
/**
* @return string|null
*/
public function getPhone(): ?string
{
return $this->phone;
}
/**
* @param string|null $phone
*
* @return Address
*/
public function setPhone(?string $phone): Address
{
$this->phone = $phone;
return $this;
}
/**
* @return string|null
*/
public function getPhoneMobile(): ?string
{
return $this->phoneMobile;
}
/**
* @param string|null $phoneMobile
*
* @return Address
*/
public function setPhoneMobile(?string $phoneMobile): Address
{
$this->phoneMobile = $phoneMobile;
return $this;
}
/**
* @return string|null
*/
public function getVatNumber(): ?string
{
return $this->vatNumber;
}
/**
* @param string|null $vatNumber
*
* @return Address
*/
public function setVatNumber(?string $vatNumber): Address
{
$this->vatNumber = preg_replace('/[^A-Za-z0-9]/i', '', $vatNumber);
return $this;
}
/**
* @return \DateTime
*/
public function getDateAdd(): \DateTime
{
return $this->dateAdd;
}
/**
* @param \DateTime $dateAdd
*
* @return Address
*/
public function setDateAdd(\DateTime $dateAdd): Address
{
$this->dateAdd = $dateAdd;
return $this;
}
/**
* @return \DateTime
*/
public function getDateUpd(): \DateTime
{
return $this->dateUpd;
}
/**
* @param \DateTime $dateUpd
*
* @return Address
*/
public function setDateUpd(\DateTime $dateUpd): Address
{
$this->dateUpd = $dateUpd;
return $this;
}
/**
* @return bool
*/
public function isActive(): bool
{
return $this->active;
}
/**
* @param bool $active
*
* @return Address
*/
public function setActive(bool $active): Address
{
$this->active = $active;
return $this;
}
/**
* @return bool
*/
public function isInvoiceAddress(): bool
{
return $this->invoiceAddress;
}
/**
* @param bool $invoiceAddress
*
* @return Address
*/
public function setInvoiceAddress(bool $invoiceAddress): Address
{
$this->invoiceAddress = $invoiceAddress;
return $this;
}
/**
* @return bool
*/
public function isDefaultInvoiceAddress(): bool
{
return $this->defaultInvoiceAddress;
}
/**
* @param bool $defaultInvoiceAddress
*
* @return Address
*/
public function setDefaultInvoiceAddress(bool $defaultInvoiceAddress): Address
{
$this->defaultInvoiceAddress = $defaultInvoiceAddress;
return $this;
}
/**
* @return bool
*/
public function isDefaultShippingAddress(): bool
{
return $this->defaultShippingAddress;
}
/**
* @param bool $defaultShippingAddress
*
* @return Address
*/
public function setDefaultShippingAddress(bool $defaultShippingAddress): Address
{
$this->defaultShippingAddress = $defaultShippingAddress;
return $this;
}
/**
* @return bool|null
*/
public function getVise(): ?bool
{
return $this->vise;
}
/**
* @param bool|null $vise
*
* @return Address
*/
public function setVise(?bool $vise): Address
{
$this->vise = $vise;
return $this;
}
public function getRe(): ?bool
{
return $this->re;
}
public function setRe(?bool $re): Address
{
$this->re = $re;
return $this;
}
/**
* @return string|null
*/
public function getIsoCode(): ?string
{
return $this->isoCode;
}
/**
* @param string|null $isoCode
*
* @return Address
*/
public function setIsoCode(?string $isoCode): Address
{
$this->isoCode = $isoCode;
return $this;
}
/**
* @return string|null
*/
public function getComercialName(): ?string
{
return $this->comercialName;
}
/**
* @param string|null $comercialName
*
* @return Address
*/
public function setComercialName(?string $comercialName): Address
{
$this->comercialName = $comercialName;
return $this;
}
/**
* @return int|null
*/
public function getTypeCustomer(): ?int
{
return $this->typeCustomer;
}
/**
* @param int $typeCustomer
*
* @return Address
*/
public function setTypeCustomer(int $typeCustomer): Address
{
$this->typeCustomer = $typeCustomer;
return $this;
}
/**
* @return string|null
*/
public function getContactName(): ?string
{
return $this->contactName;
}
/**
* @param string|null $contactName
*
* @return Address
*/
public function setContactName(?string $contactName): Address
{
$this->contactName = $contactName;
return $this;
}
/**
* @return string|null
*/
public function getUrl(): ?string
{
return $this->url;
}
/**
* @param string|null $url
*
* @return Address
*/
public function setUrl(?string $url): Address
{
$this->url = $url;
return $this;
}
/**
* @return int
*/
public function getPhonePrefix(): int
{
return $this->phonePrefix;
}
/**
* @param int $phonePrefix
*
* @return Address
*/
public function setPhonePrefix(int $phonePrefix): Address
{
$this->phonePrefix = $phonePrefix;
return $this;
}
/**
* @return int
*/
public function getPhoneMobilePrefix(): int
{
return $this->phoneMobilePrefix;
}
/**
* @param int $phoneMobilePrefix
*
* @return Address
*/
public function setPhoneMobilePrefix(int $phoneMobilePrefix): Address
{
$this->phoneMobilePrefix = $phoneMobilePrefix;
return $this;
}
/**
* @return int|null
*/
public function getFavorite(): ?int
{
return $this->favorite;
}
/**
* @param int|null $favorite
*
* @return Address
*/
public function setFavorite(?int $favorite): Address
{
$this->favorite = $favorite;
return $this;
}
/**
* @return string|null
*/
public function getCompanyName(): ?string
{
return $this->companyName;
}
/**
* @param string|null $companyName
*
* @return Address
*/
public function setCompanyName(?string $companyName): Address
{
$this->companyName = $companyName;
return $this;
}
public function getCustomer(): ?Customer
{
return $this->customer;
}
public function setCustomer(?Customer $customer): self
{
$this->customer = $customer;
return $this;
}
/**
* @return int|null
*/
public function getManufacturer(): ?int
{
return $this->manufacturer;
}
/**
* @param int|null $manufacturer
*
* @return Address
*/
public function setManufacturer(?int $manufacturer): self
{
$this->manufacturer = $manufacturer;
return $this;
}
/**
* @return string|null
*/
public function getIsoVatNumber(): ?string
{
return $this->isoVatNumber;
}
/**
* @param string|null $isoVatNumber
*
* @return Address
*/
public function setIsoVatNumber(?string $isoVatNumber): self
{
$this->isoVatNumber = $isoVatNumber;
return $this;
}
public function setAccountCreationStep3(
string $address,
string $city,
string $postCode,
State $state,
?string $stateName,
Country $country,
string $vat,
?string $companyName,
?string $socialName,
?bool $equivalenceSurcharge,
string $userType
): Address {
$this->address1 = $address;
$this->city = $city;
$this->postcode = $postCode;
$this->state = $state;
$this->stateName = $stateName;
$this->isoVatNumber = $country->getIsoCode();
$this->vatNumber = $vat;
$typeCustomerId = self::CUSTOMER_TYPE_IDS_INDEXED_BY_TYPE_VALUES[$userType];
$this->typeCustomer = $typeCustomerId;
if (self::TYPE_COMPANY === $typeCustomerId) {
$this->company = $socialName;
$this->companyName = $companyName;
}
if (self::TYPE_SELF_EMPLOYED === $typeCustomerId) {
$this->company = $socialName;
$this->re = $equivalenceSurcharge;
}
return $this;
}
public function isCompanyVerified(): bool
{
return $this->companyVerified;
}
public function setCompanyVerified(bool $companyVerified): Address
{
$this->companyVerified = $companyVerified;
return $this;
}
public function getFullName(): ?string
{
return $this->name.' '.$this->surnames;
}
}