<?php
namespace App\Entity;
use App\Enum\SalesHistoryEventType;
use App\Repository\SalesHistoryRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: SalesHistoryRepository::class)]
#[ORM\Table(name: 'sales_history')]
class SalesHistory extends BaseEntity
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private ?int $id = null;
#[ORM\ManyToOne(targetEntity: Sales::class, inversedBy: 'historyEntries')]
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
private ?Sales $sale = null;
#[ORM\ManyToOne(targetEntity: User::class)]
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
private ?User $performedBy = null;
#[ORM\Column(length: 150, nullable: true)]
private ?string $performedByName = null;
#[ORM\Column(length: 180, nullable: true)]
private ?string $performedByEmail = null;
#[ORM\Column(type: 'string', length: 50, enumType: SalesHistoryEventType::class)]
private SalesHistoryEventType $eventType;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $description = null;
#[ORM\Column(type: Types::JSON, nullable: true)]
private ?array $context = null;
#[ORM\Column(type: 'datetime_immutable')]
private \DateTimeImmutable $performedAt;
#[ORM\ManyToOne(targetEntity: EmailMessage::class)]
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
private ?EmailMessage $emailMessage = null;
#[ORM\ManyToOne(targetEntity: EmailRecipient::class)]
#[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')]
private ?EmailRecipient $emailRecipient = null;
public function __construct()
{
$this->performedAt = new \DateTimeImmutable();
$this->eventType = SalesHistoryEventType::CREATED;
}
public function getId(): ?int
{
return $this->id;
}
public function getSale(): ?Sales
{
return $this->sale;
}
public function setSale(Sales $sale): self
{
$this->sale = $sale;
return $this;
}
public function getPerformedBy(): ?User
{
return $this->performedBy;
}
public function setPerformedBy(?User $performedBy): self
{
$this->performedBy = $performedBy;
return $this;
}
public function getPerformedByName(): ?string
{
return $this->performedByName;
}
public function setPerformedByName(?string $performedByName): self
{
$this->performedByName = $performedByName;
return $this;
}
public function getPerformedByEmail(): ?string
{
return $this->performedByEmail;
}
public function setPerformedByEmail(?string $performedByEmail): self
{
$this->performedByEmail = $performedByEmail;
return $this;
}
public function getEventType(): SalesHistoryEventType
{
return $this->eventType;
}
public function setEventType(SalesHistoryEventType $eventType): self
{
$this->eventType = $eventType;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getContext(): ?array
{
return $this->context;
}
public function setContext(?array $context): self
{
$this->context = $context;
return $this;
}
public function getPerformedAt(): \DateTimeImmutable
{
return $this->performedAt;
}
public function setPerformedAt(\DateTimeImmutable $performedAt): self
{
$this->performedAt = $performedAt;
return $this;
}
public function getEmailMessage(): ?EmailMessage
{
return $this->emailMessage;
}
public function setEmailMessage(?EmailMessage $emailMessage): self
{
$this->emailMessage = $emailMessage;
return $this;
}
public function getEmailRecipient(): ?EmailRecipient
{
return $this->emailRecipient;
}
public function setEmailRecipient(?EmailRecipient $emailRecipient): self
{
$this->emailRecipient = $emailRecipient;
return $this;
}
}