<?php
/**
* @license SILK SOFTWARE HOUSE SP Z O O
*/
namespace App\Entity;
use App\Entity\Admin\Traits\AssignDeviceToCustomerTrait;
use App\Entity\Traits\IdTrait;
use App\Entity\Traits\TimePreUpdateTrait;
use App\Entity\Traits\TimeTrait;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use DateTime;
use Symfony\Component\Validator\Constraints as Assert;
use App\Validator\Constraints as AppAssert;
/**
* Class Licence.
*
* @ORM\Entity(repositoryClass="App\Repository\LicenseRepository")
* @ORM\Table(name="licences")
* @ORM\HasLifecycleCallbacks()
*
* @Gedmo\SoftDeleteable()
*
* @UniqueEntity({"customer", "device"})
* @UniqueEntity({"licenseNumber"})
*/
class License
{
use IdTrait;
use TimeTrait;
use TimePreUpdateTrait;
use AssignDeviceToCustomerTrait;
/**
* License number.
*
* @var string|null
*
* @ORM\Column(name="license_number", nullable=true, type="text", options={"comment": "License number."})
*
* @Assert\NotBlank()
*/
private $licenseNumber;
/**
* Device.
*
* @var Device
*
* @Assert\NotBlank()
*
* @AppAssert\NewUnique("serialNumber", message="Instrument with serial number #{{fieldValue}} already exists. Please select it from list.")
*
* @ORM\ManyToOne(targetEntity="App\Entity\Device", cascade={"persist"})
* @ORM\JoinColumn(name="device_id", nullable=false)
*/
private $device;
/**
* Customer.
*
* @var Customer
*
* @Assert\NotBlank()
*
* @AppAssert\NewUnique("name", message="Customer named {{fieldValue}} already exists. Please select him from list.")
*
* @ORM\ManyToOne(targetEntity="App\Entity\Customer", cascade={"persist"})
* @ORM\JoinColumn(name="customer_id", nullable=false)
*/
private $customer;
/**
* Licensed from.
*
* @var DateTime|null
*
* @ORM\Column(name="licensed_from", nullable=true, type="datetime", options={"comment": "When this license starts."})
*/
private $licensedFrom;
/**
* Licensed to.
*
* @var DateTime|null
*
* @ORM\Column(name="licensed_to", nullable=true, type="datetime", options={"comment": "When this license ends."})
*/
private $licensedTo;
/**
* @var string|null
*
* @ORM\Column(name="note", nullable=true, type="text", options={"comment": "Note about customer."})
*/
private $note;
/**
* Get device.
*
* @return Device
*/
public function getDevice(): ?Device
{
return $this->device;
}
/**
* Set device.
*
* @param Device $device
*
* @return License
*/
public function setDevice(Device $device): License
{
$this->device = $device;
return $this;
}
/**
* Get customer.
*
* @return Customer
*/
public function getCustomer(): ?Customer
{
return $this->customer;
}
/**
* Set customer.
*
* @param Customer $customer
*
* @return License
*/
public function setCustomer(Customer $customer): License
{
$this->customer = $customer;
return $this;
}
/**
* Get licensed from.
*
* @return DateTime|null
*/
public function getLicensedFrom(): ?DateTime
{
return $this->licensedFrom;
}
/**
* Set licensed from.
*
* @param DateTime|null $licensedFrom
*
* @return License
*/
public function setLicensedFrom(?DateTime $licensedFrom): License
{
$this->licensedFrom = $licensedFrom;
return $this;
}
/**
* Get licensed to.
*
* @return DateTime|null
*/
public function getLicensedTo(): ?DateTime
{
return $this->licensedTo;
}
/**
* Set licensed to.
*
* @param DateTime|null $licensedTo
*
* @return License
*/
public function setLicensedTo(?DateTime $licensedTo): License
{
$this->licensedTo = $licensedTo;
return $this;
}
/**
* Get note.
*
* @return string|null
*/
public function getNote(): ?string
{
return $this->note;
}
/**
* Set note.
*
* @param string|null $note
*
* @return License
*/
public function setNote(?string $note): License
{
$this->note = $note;
return $this;
}
/**
* Get license number.
*
* @return string|null
*/
public function getLicenseNumber(): ?string
{
return $this->licenseNumber;
}
/**
* Set license number.
*
* @param string|null $licenseNumber
*
* @return License
*/
public function setLicenseNumber(?string $licenseNumber): License
{
$this->licenseNumber = $licenseNumber;
return $this;
}
}