<?phpnamespace Whater\Domain\Whater\Model;use BornFree\TacticianDomainEvent\Recorder\ContainsRecordedEvents;use BornFree\TacticianDomainEvent\Recorder\EventRecorderCapabilities;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Ramsey\Uuid\Uuid;use Whater\Domain\Common\Exception\InvalidUUIDException;/** * Class AnalyticalSample * * @package Whater\Domain\Whater\Model */class AnalyticalSample implements ContainsRecordedEvents{ use EventRecorderCapabilities; /** * @var string */ private $uuid; /** * @var Analytical */ private $analytical; /** * @var AnalyticalParameter */ private $analyticalParameter; /** * @var float */ private $parameterValue; /** * @var string */ private $laboratoryName; /** * @var string */ private $samplePointName; /** * @var \DateTime */ private $analyzedAt; /** * @var \DateTime */ private $createdAt; /** * @var string */ private $sampleHash; public function __construct( string $sampleId = null, Analytical $analytical = null, AnalyticalParameter $analyticalParameter, float $parameterValue, \DateTime $analyzedAt = null, string $laboratoryName = null, string $samplePointName = null ) { try { $this->uuid = Uuid::fromString($sampleId ?: Uuid::uuid4())->toString(); } catch (\InvalidArgumentException $e) { throw new InvalidUUIDException(); } $this->analytical = $analytical; $this->analyticalParameter = $analyticalParameter; $this->parameterValue = $parameterValue; $this->analyzedAt = $analyzedAt; $this->laboratoryName = $laboratoryName; $this->samplePointName = $samplePointName; $this->createdAt = new \DateTime(); $this->updateSampleHash(); } public function updateSampleData( float $parameterValue, \DateTime $analyzedAt = null, string $laboratoryName = null, string $samplePointName = null ) { $this->parameterValue = $parameterValue; $this->analyzedAt = $analyzedAt; $this->laboratoryName = $laboratoryName; $this->samplePointName = $samplePointName; $this->updateSampleHash(); } public function updateSampleHash() { $sampleHash = md5($this->analytical()->id()); $sampleHash = md5($sampleHash . $this->analyticalParameter()->id()); if ($this->analyzedAt() != null) { $sampleHash = md5($sampleHash . $this->analyzedAt()->format('dmY')); } if ($this->laboratoryName() != null) { $sampleHash = md5($sampleHash . $this->laboratoryName()); } if ($this->samplePointName() != null) { $sampleHash = md5($sampleHash . $this->samplePointName()); } $this->sampleHash = $sampleHash; } /** * @return string */ public function id(): string { return $this->uuid; } /** * @return AnalyticalSample */ public function analytical(): ?Analytical { return $this->analytical; } /** * @return AnalyticalParameter */ public function analyticalParameter(): AnalyticalParameter { return $this->analyticalParameter; } /** * @return float */ public function parameterValue(): float { return $this->parameterValue; } /** * @return string */ public function laboratoryName(): ?string { return $this->laboratoryName; } /** * @return string */ public function samplePointName(): ?string { return $this->samplePointName; } /** * @return \DateTime */ public function analyzedAt(): ?\DateTime { return $this->analyzedAt; } /** * @return \DateTime */ public function createdAt(): \DateTime { return $this->createdAt; } /** * @return bool */ public function equals(AnalyticalSample $analyticalSample) { return $this->id() === $analyticalSample->id(); }}