<?php
namespace App\AtechNet\CoreBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\JoinColumn;
use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\OneToMany;
use Doctrine\ORM\Mapping\OrderBy;
use Doctrine\ORM\Mapping\Table as Table;
/**
* DocumentGroup
*
* @Table(name="document_groups")
* @Entity
*/
class DocumentGroup extends AbstractSignedEntity
{
public const int TYPE_INVOICE_PRE = 1;
public const int TYPE_INVOICE_IN = 2;
public const int TYPE_INVOICE_OUT = 3;
public const int TYPE_INVOICE_CREDIT_NOTE = 4;
public const int TYPE_BILL_OF_DELIVERY = 5;
public const int TYPE_PRICE_OFFER = 6;
public const TYPES = [
self::TYPE_INVOICE_PRE => 'Pre invoice',
self::TYPE_INVOICE_IN => 'In invoice',
self::TYPE_INVOICE_OUT => 'Out invoice',
self::TYPE_INVOICE_CREDIT_NOTE => 'Credit note',
self::TYPE_BILL_OF_DELIVERY => 'Bill of delivery',
self::TYPE_PRICE_OFFER => 'Price offer',
];
/**
* @var DocumentYear
*
* @ManyToOne(targetEntity="DocumentYear", inversedBy="groups")
* @JoinColumn(name="year_id", referencedColumnName="id", nullable=false)
*/
private $year;
/**
* @var Domain
*
* @ManyToOne(targetEntity="Domain", inversedBy="documentGroups")
* @JoinColumn(name="domain_id", referencedColumnName="id", nullable=true)
*/
private $domain;
/**
* @var string
*
* @Column(name="title", type="string", length=32)
*/
private $title;
/**
* @var string
*
* @Column(name="prefix", type="string", length=8)
*/
private $prefix;
/**
* @return array
*/
public static function getTypeChoices()
{
return self::TYPES;
}
/**
* @var int
* @Column(name="type", type="integer")
*/
private $type;
/**
* @var int
*
* @Column(name="next_id", type="integer")
*/
private $nextId = 0;
/**
* @var int
*
* @Column(name="id_length", type="integer")
*/
private $idLength;
/**
* @var int
*
* @Column(name="default_due_days", type="integer")
*/
private $defaultDueDays;
/**
* @var string
*
* @Column(name="default_bank", type="string", length=50)
*/
private $defaultBank;
/**
* @var string
*
* @Column(name="default_bank_account", type="string", length=32, nullable=true)
*/
private $defaultBankAccount;
/**
* @var string
*
* @Column(name="default_iban", type="string", length=34)
*/
private $defaultIban;
/**
* @var string
*
* @Column(name="default_swift", type="string", length=24)
*/
private $defaultSwift;
/**
* @var string
*
* @Column(name="default_note", type="text")
*/
private $defaultNote;
/**
* @var string
*
* @Column(name="footer", type="string", length=255)
*/
private $footer;
/**
* @var string
*
* @Column(name="email", type="string", length=255)
*/
private $email;
/**
* @var string
*
* @Column(name="email_name", type="string", length=255)
*/
private $emailName;
/**
* @var string
*
* @Column(name="email_subject", type="string", length=255)
*/
private $emailSubject;
/**
* @var string
*
* @Column(name="email_body", type="text")
*/
private $emailBody;
/**
* @var string
*
* @Column(name="logo", type="string", length=255)
*/
private $logo;
/**
* @var float
*
* @Column(name="vat", type="decimal", precision=10, scale=2)
*/
private $vat;
/**
* @var string
*
* @Column(name="language", type="string", length=2)
*/
private $language;
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="Document", mappedBy="group", orphanRemoval=true)
* @OrderBy({"created" = "DESC"})
**/
private $documents;
/**
* @var string
*
* @Column(name="country", type="string", length=2, nullable=true)
*/
private string $country;
/**
* @return DocumentYear
*/
public function getYear()
{
return $this->year;
}
/**
* @param DocumentYear $year
*/
public function setYear($year)
{
$this->year = $year;
}
/**
* @return Domain
*/
public function getDomain()
{
return $this->domain;
}
/**
* @param Domain $domain
*/
public function setDomain($domain)
{
$this->domain = $domain;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}
/**
* @return string
*/
public function getPrefix()
{
return $this->prefix;
}
/**
* @param string $prefix
*/
public function setPrefix($prefix)
{
$this->prefix = $prefix;
}
/**
* @return int
*/
public function getType()
{
return $this->type;
}
/**
* @param int $type
*/
public function setType($type)
{
$this->type = $type;
}
/**
* @return int
*/
public function getNextId()
{
return $this->nextId;
}
/**
* @param int $nextId
*/
public function setNextId($nextId)
{
$this->nextId = $nextId;
}
/**
* @return int
*/
public function getIdLength()
{
return $this->idLength;
}
/**
* @param int $idLength
*/
public function setIdLength($idLength)
{
$this->idLength = $idLength;
}
/**
* @return int
*/
public function getDefaultDueDays()
{
return $this->defaultDueDays;
}
/**
* @param int $defaultDueDays
*/
public function setDefaultDueDays($defaultDueDays)
{
$this->defaultDueDays = $defaultDueDays;
}
/**
* @return string
*/
public function getDefaultBank()
{
return $this->defaultBank;
}
/**
* @param string $defaultBank
*/
public function setDefaultBank($defaultBank)
{
$this->defaultBank = $defaultBank;
}
/**
* @return string
*/
public function getDefaultBankAccount()
{
return $this->defaultBankAccount;
}
/**
* @param string $defaultBankAccount
*/
public function setDefaultBankAccount($defaultBankAccount)
{
$this->defaultBankAccount = $defaultBankAccount;
}
/**
* @return string
*/
public function getDefaultIban()
{
return $this->defaultIban;
}
/**
* @param string $defaultIban
*/
public function setDefaultIban($defaultIban)
{
$this->defaultIban = $defaultIban;
}
/**
* @return string
*/
public function getDefaultSwift()
{
return $this->defaultSwift;
}
/**
* @param string $defaultSwift
*/
public function setDefaultSwift($defaultSwift)
{
$this->defaultSwift = $defaultSwift;
}
/**
* @return string
*/
public function getDefaultNote()
{
return $this->defaultNote;
}
/**
* @param string $defaultNote
*/
public function setDefaultNote($defaultNote)
{
$this->defaultNote = $defaultNote;
}
/**
* @return string
*/
public function getFooter()
{
return $this->footer;
}
/**
* @param string $footer
*/
public function setFooter($footer)
{
$this->footer = $footer;
return $this;
}
/**
* @return string
*/
public function getEmailName()
{
return $this->emailName;
}
/**
* @param string $emailName
*/
public function setEmailName($emailName)
{
$this->emailName = $emailName;
return $this;
}
/**
* @return string
*/
public function getEmail()
{
return $this->email;
}
/**
* @param string $email
*/
public function setEmail($email)
{
$this->email = $email;
return $this;
}
/**
* @return string
*/
public function getEmailSubject()
{
return $this->emailSubject;
}
/**
* @param string $emailSubject
*/
public function setEmailSubject($emailSubject)
{
$this->emailSubject = $emailSubject;
return $this;
}
/**
* @return string
*/
public function getEmailBody()
{
return $this->emailBody;
}
/**
* @param string $emailBody
*/
public function setEmailBody($emailBody)
{
$this->emailBody = $emailBody;
return $this;
}
/**
* @return string
*/
public function getLogo()
{
return $this->logo;
}
/**
* @param string $logo
*/
public function setLogo($logo)
{
$this->logo = $logo;
}
/**
* @return ArrayCollection
*/
public function getDocuments()
{
return $this->documents;
}
/**
* @return Company
*/
public function getCompany()
{
return $this->getYear()->getCompany();
}
/**
* @return int
*/
public function increaseNextId()
{
return $this->getNextId() + 1;
}
/**
* @return float
*/
public function getVat()
{
return $this->vat;
}
/**
* @param float $vat
*/
public function setVat($vat)
{
$this->vat = $vat;
}
/**
* @return string
*/
public function getLanguage()
{
return $this->language;
}
/**
* @param string $language
*/
public function setLanguage($language)
{
$this->language = $language;
}
public function getTypeTitle()
{
return self::getTypeChoices()[$this->getType()];
}
public function getCountry(): ?string
{
return $this->country ?? null;
}
public function setCountry(string $country): void
{
$this->country = $country;
}
}