95 lines
2.2 KiB
PHP
95 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Entity;
|
|
|
|
use App\Enum\ResourceType;
|
|
use App\Repository\ResourceRepository;
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
|
use Symfony\Component\Validator\Constraints as Assert;
|
|
|
|
/**
|
|
* A bookable thing: a desk, a parking spot or a portable device.
|
|
*/
|
|
#[ORM\Entity(repositoryClass: ResourceRepository::class)]
|
|
#[ORM\UniqueConstraint(name: 'uniq_resource_label', columns: ['type', 'label'])]
|
|
#[UniqueEntity(fields: ['type', 'label'], message: 'Diese Bezeichnung ist bereits vergeben.', errorPath: 'label')]
|
|
class Resource
|
|
{
|
|
#[ORM\Id]
|
|
#[ORM\GeneratedValue]
|
|
#[ORM\Column]
|
|
private ?int $id = null;
|
|
|
|
#[ORM\Column(enumType: ResourceType::class)]
|
|
private ResourceType $type;
|
|
|
|
#[ORM\Column(length: 50)]
|
|
#[Assert\NotBlank]
|
|
#[Assert\Length(max: 50)]
|
|
private string $label;
|
|
|
|
/**
|
|
* Where it physically is. Nullable because a group is optional: a kind of resource that is
|
|
* not split across rooms simply has none, and the plan lists it without a room heading.
|
|
*/
|
|
#[ORM\ManyToOne]
|
|
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
|
|
private ?ResourceGroup $group = null;
|
|
|
|
/**
|
|
* Retired resources stay in the table so historical bookings keep resolving; they are just
|
|
* not offered any more.
|
|
*/
|
|
#[ORM\Column]
|
|
private bool $active = true;
|
|
|
|
public function __construct(ResourceType $type, string $label)
|
|
{
|
|
$this->type = $type;
|
|
$this->label = $label;
|
|
}
|
|
|
|
public function getId(): ?int
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function getType(): ResourceType
|
|
{
|
|
return $this->type;
|
|
}
|
|
|
|
public function getLabel(): string
|
|
{
|
|
return $this->label;
|
|
}
|
|
|
|
public function setLabel(string $label): void
|
|
{
|
|
$this->label = $label;
|
|
}
|
|
|
|
public function getGroup(): ?ResourceGroup
|
|
{
|
|
return $this->group;
|
|
}
|
|
|
|
public function setGroup(?ResourceGroup $group): void
|
|
{
|
|
$this->group = $group;
|
|
}
|
|
|
|
public function isActive(): bool
|
|
{
|
|
return $this->active;
|
|
}
|
|
|
|
public function setActive(bool $active): void
|
|
{
|
|
$this->active = $active;
|
|
}
|
|
}
|