<?php
/**
* @license SILK SOFTWARE HOUSE SP Z O O
*/
namespace App\Entity;
use App\Entity\Traits\IdTrait;
use App\Entity\Traits\TimePreUpdateTrait;
use App\Entity\Traits\TimeTrait;
use App\Repository\MeasurementSettingRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use DateTime;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Class LineTypeGroup.
*
* @ORM\Table("line_type_groups")
* @ORM\Entity(repositoryClass="App\Repository\LineTypeGroupRepository")
* @ORM\HasLifecycleCallbacks()
*
* @UniqueEntity({"name", "customer"})
*/
class LineTypeGroup
{
use IdTrait;
use TimeTrait;
use TimePreUpdateTrait;
/**
* Line type group.
*
* @var string
*
* @ORM\Column(name="name", type="text", nullable=false, options={"comment": "Group name."})
*
* @Assert\NotBlank()
*/
private string $name = '';
/**
* Customer.
*
* @var Customer|null
*
* @ORM\ManyToOne(targetEntity="App\Entity\Customer")
* @ORM\JoinColumn(name="customer_id", nullable=true)
*/
private ?Customer $customer = null;
/**
* Measurement settings.
*
* @var MeasurementSetting[]|ArrayCollection
*
* @ORM\OneToMany(targetEntity="App\Entity\MeasurementSetting", mappedBy="lineTypeGroup", cascade={"persist"})
*/
private $settings;
/**
* Line types.
*
* @var LineType[]|ArrayCollection
*
* @ORM\OneToMany(targetEntity="App\Entity\LineType", mappedBy="lineTypeGroup", cascade={"persist", "remove"})
* @ORM\OrderBy({"id": "asc"})
*/
private $lineTypes;
/**
* Clone line types from this group.
*
* @var LineTypeGroup|null
*/
private ?self $loadFrom = null;
/**
* LineTypeGroup constructor.
*/
public function __construct()
{
$this->settings = new ArrayCollection();
$this->lineTypes = new ArrayCollection();
}
/**
* Get name.
*
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* Set name.
*
* @param string $name
*
* @return LineTypeGroup
*/
public function setName(string $name): LineTypeGroup
{
$this->name = $name;
return $this;
}
/**
* Get customer.
*
* @return Customer|null
*/
public function getCustomer(): ?Customer
{
return $this->customer;
}
/**
* Set customer.
*
* @param Customer|null $customer
*
* @return LineTypeGroup
*/
public function setCustomer(?Customer $customer): LineTypeGroup
{
$this->customer = $customer;
return $this;
}
/**
* Get settings.
*
* @return MeasurementSetting[]|ArrayCollection
*/
public function getSettings()
{
return $this->settings;
}
/**
* Get line types.
*
* @return LineType[]|ArrayCollection
*/
public function getLineTypes()
{
return $this->lineTypes;
}
/**
* Set line types.
*
* @param LineType[]|ArrayCollection $lineTypes
*
* @return LineTypeGroup
*/
public function setLineTypes($lineTypes): LineTypeGroup
{
$this->lineTypes = $lineTypes;
return $this;
}
/**
* To string.
*
* @return string
*/
public function __toString(): string
{
return $this->name;
}
/**
* Get load from.
*
* @return LineTypeGroup|null
*/
public function getLoadFrom(): ?LineTypeGroup
{
return $this->loadFrom;
}
/**
* Set load from.
*
* @param LineTypeGroup|null $loadFrom
*
* @return LineTypeGroup
*/
public function setLoadFrom(?LineTypeGroup $loadFrom): LineTypeGroup
{
$this->loadFrom = $loadFrom;
return $this;
}
}