null])] private ?\DateTimeImmutable $stateDate = null; #[ORM\Column(type: \Doctrine\DBAL\Types\Types::JSON, nullable: false, options: ['default' => '[]'])] private array $signatureMetadata = []; #[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER, nullable: true, options: ['default' => null])] private ?int $zoneSignatureIndex = null; #[ORM\ManyToOne(targetEntity: EntityWorkflowStep::class, inversedBy: 'signatures')] #[ORM\JoinColumn(nullable: false)] private ?EntityWorkflowStep $step = null; public function __construct( EntityWorkflowStep $step, User|Person $signer, ) { $this->step = $step; $step->addSignature($this); $this->setSigner($signer); } private function setSigner(User|Person $signer): void { if ($signer instanceof User) { $this->userSigner = $signer; } else { $this->personSigner = $signer; } } public function getId(): ?int { return $this->id; } public function getStep(): EntityWorkflowStep { return $this->step; } public function getSigner(): User|Person { if (null !== $this->userSigner) { return $this->userSigner; } return $this->personSigner; } public function getSignatureMetadata(): array { return $this->signatureMetadata; } public function setSignatureMetadata(array $signatureMetadata): EntityWorkflowStepSignature { $this->signatureMetadata = $signatureMetadata; return $this; } public function getState(): EntityWorkflowSignatureStateEnum { return $this->state; } public function setState(EntityWorkflowSignatureStateEnum $state): EntityWorkflowStepSignature { $this->state = $state; return $this; } public function getStateDate(): ?\DateTimeImmutable { return $this->stateDate; } public function setStateDate(?\DateTimeImmutable $stateDate): EntityWorkflowStepSignature { $this->stateDate = $stateDate; return $this; } public function getZoneSignatureIndex(): ?int { return $this->zoneSignatureIndex; } public function setZoneSignatureIndex(?int $zoneSignatureIndex): EntityWorkflowStepSignature { $this->zoneSignatureIndex = $zoneSignatureIndex; return $this; } /** * Detach from the @see{EntityWorkflowStep}. * * @internal used internally to remove the current signature * * @return $this */ public function detachEntityWorkflowStep(): self { $this->step = null; return $this; } }