<?php
namespace App\Entity;
use App\Repository\SupplierContractRepository;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
#[Vich\Uploadable]
#[ORM\Entity(repositoryClass: SupplierContractRepository::class)]
#[ORM\Table(name: '`supplier_contract`')]
class SupplierContract
{
use TimestampableEntity;
#[ORM\Id]
#[ORM\GeneratedValue(strategy:"AUTO")]
#[ORM\Column(type: "integer")]
protected ?int $id = null;
#[ORM\ManyToOne(targetEntity:"App\Entity\Supplier", inversedBy:"contracts")]
#[ORM\JoinColumn(name: "supplier_id", referencedColumnName: "id", nullable: false)]
protected $supplier;
#[ORM\Column(type: "string", length: 255, nullable: false)]
protected $contract;
#[ORM\Column(type: "string", length: 255, nullable: false, options: ['default' => 'own'])]
protected $contract_type = 'own';
#[ORM\Column(type: "datetime", nullable: true)]
protected $startedAt;
#[ORM\Column(type: "datetime", nullable: true)]
protected $finishedAt;
#[ORM\Column(type: "decimal", precision: 20, scale: 2, nullable: true)]
protected $amount;
#[ORM\Column(type: "string", length: 255, nullable: true)]
protected $moneyType;
#[ORM\ManyToMany(targetEntity:"User")]
#[ORM\JoinTable(name: "supplier_contract_managers")]
protected $managers;
#[ORM\ManyToMany(targetEntity:"User")]
#[ORM\JoinTable(name: "supplier_contract_administrative_managers")]
protected $administrativeManagers;
#[ORM\Column(type: "string", length: 255, nullable: true)]
protected $document = null;
/**
* @var File
*/
#[Vich\UploadableField(mapping: "supplier_contracts", fileNameProperty: "document")]
protected $documentFile;
#[ORM\Column(type: "string", length: 255, nullable: true)]
protected $description;
#[Assert\Length(min: 3, max: 100, minMessage: 'El área debe tener al menos {{ limit }} caracteres', maxMessage: 'El área no puede tener más de {{ limit }} caracteres')]
#[ORM\Column(type: "string", length: 100, nullable: true)]
protected $area;
#[ORM\Column(type: "boolean")]
protected $enabled = true;
public function __construct()
{
$this->managers = new ArrayCollection();
$this->administrativeManagers = new ArrayCollection();
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return Supplier
*/
public function getSupplier()
{
return $this->supplier;
}
/**
* @param Supplier $supplier
*/
public function setSupplier(Supplier $supplier)
{
$this->supplier = $supplier;
}
/**
* @return string
*/
public function getContract()
{
return $this->contract;
}
/**
* @param string $contract
*/
public function setContract(string $contract)
{
$this->contract = $contract;
}
/**
* @return DateTime
*/
public function getStartedAt(): ?DateTime
{
return $this->startedAt;
}
/**
* @param DateTime $startedAt
*/
public function setStartedAt(DateTime $startedAt): void
{
$this->startedAt = $startedAt;
}
/**
* @return DateTime
*/
public function getFinishedAt(): ?DateTime
{
return $this->finishedAt;
}
/**
* @param DateTime $finishedAt
*/
public function setFinishedAt(DateTime $finishedAt): void
{
$this->finishedAt = $finishedAt;
}
/**
* @return mixed
*/
public function getAmount()
{
return $this->amount;
}
/**
* @param mixed $amount
*/
public function setAmount($amount): void
{
$this->amount = $amount;
}
/**
* @return Collection
*/
public function getManagers(): Collection
{
return $this->managers;
}
/**
* @param Collection $managers
*/
public function setManagers(Collection $managers): void
{
$this->managers = $managers;
}
public function addManager(User $manager)
{
if (!$this->managers->contains($manager)) {
$this->managers->add($manager);
}
}
public function removeManager(User $manager)
{
if ($this->managers->contains($manager)) {
$this->managers->removeElement($manager);
}
}
/**
* @return Collection
*/
public function getAdministrativeManagers(): Collection
{
return $this->administrativeManagers;
}
/**
* @param Collection $administrativeManagers
*/
public function setAdministrativeManagers(Collection $administrativeManagers): void
{
$this->administrativeManagers = $administrativeManagers;
}
public function addAdministrativeManager(User $manager)
{
if (!$this->administrativeManagers->contains($manager)) {
$this->administrativeManagers->add($manager);
}
}
public function removeAdministrativeManager(User $manager)
{
if ($this->administrativeManagers->contains($manager)) {
$this->administrativeManagers->removeElement($manager);
}
}
/**
* @return string
*/
public function getDocument()
{
return $this->document;
}
/**
* @param string $document
*/
public function setDocument(string $document = null)
{
$this->document = $document;
}
/**
* @return File
*/
public function getDocumentFile()
{
return $this->documentFile;
}
/**
* @param File $documentFile
*/
public function setDocumentFile(File $documentFile)
{
$this->documentFile = $documentFile;
if ($this->documentFile instanceof UploadedFile) {
$this->document = $documentFile->getClientOriginalExtension();
$this->updatedAt = new \DateTime('now');
}
}
/**
* @return bool
*/
public function isEnabled()
{
return $this->enabled;
}
/**
* @param bool $enabled
*/
public function setEnabled(bool $enabled)
{
$this->enabled = $enabled;
}
/**
* @return string
*/
public function getMoneyType(): ?string
{
return $this->moneyType;
}
/**
* @param string|null $moneyType
*/
public function setMoneyType(?string $moneyType): void
{
$this->moneyType = $moneyType;
}
/**
* @return string
*/
public function getDescription(): ?string
{
return $this->description;
}
/**
* @param string|null $description
*/
public function setDescription(?string $description): void
{
$this->description = $description;
}
/**
* @return string
*/
public function getArea(): ?string
{
return $this->area;
}
/**
* @param string|null $area
*/
public function setArea(?string $area): void
{
$this->area = $area;
}
/**
* @return mixed
*/
public function getContractType()
{
return $this->contract_type;
}
/**
* @param mixed $contract_type
*/
public function setContractType($contract_type): void
{
$this->contract_type = $contract_type;
}
/**
* @return string|null
*/
public function getDocumentUrl(): ?string
{
if (!$this->document) {
return null;
}
return '/download/supplier/contract/' . $this->document;
}
public function __toString()
{
return sprintf('%s', $this->contract);
}
}