src/Domain/Whater/Model/AnalyticalSample.php line 17

Open in your IDE?
  1. <?php
  2. namespace Whater\Domain\Whater\Model;
  3. use BornFree\TacticianDomainEvent\Recorder\ContainsRecordedEvents;
  4. use BornFree\TacticianDomainEvent\Recorder\EventRecorderCapabilities;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Ramsey\Uuid\Uuid;
  8. use Whater\Domain\Common\Exception\InvalidUUIDException;
  9. /**
  10. * Class AnalyticalSample
  11. *
  12. * @package Whater\Domain\Whater\Model
  13. */
  14. class AnalyticalSample implements ContainsRecordedEvents
  15. {
  16. use EventRecorderCapabilities;
  17. /**
  18. * @var string
  19. */
  20. private $uuid;
  21. /**
  22. * @var Analytical
  23. */
  24. private $analytical;
  25. /**
  26. * @var AnalyticalParameter
  27. */
  28. private $analyticalParameter;
  29. /**
  30. * @var float
  31. */
  32. private $parameterValue;
  33. /**
  34. * @var string
  35. */
  36. private $laboratoryName;
  37. /**
  38. * @var string
  39. */
  40. private $samplePointName;
  41. /**
  42. * @var \DateTime
  43. */
  44. private $analyzedAt;
  45. /**
  46. * @var \DateTime
  47. */
  48. private $createdAt;
  49. /**
  50. * @var string
  51. */
  52. private $sampleHash;
  53. public function __construct(
  54. string $sampleId = null,
  55. Analytical $analytical = null,
  56. AnalyticalParameter $analyticalParameter,
  57. float $parameterValue,
  58. \DateTime $analyzedAt = null,
  59. string $laboratoryName = null,
  60. string $samplePointName = null
  61. ) {
  62. try {
  63. $this->uuid = Uuid::fromString($sampleId ?: Uuid::uuid4())->toString();
  64. } catch (\InvalidArgumentException $e) {
  65. throw new InvalidUUIDException();
  66. }
  67. $this->analytical = $analytical;
  68. $this->analyticalParameter = $analyticalParameter;
  69. $this->parameterValue = $parameterValue;
  70. $this->analyzedAt = $analyzedAt;
  71. $this->laboratoryName = $laboratoryName;
  72. $this->samplePointName = $samplePointName;
  73. $this->createdAt = new \DateTime();
  74. $this->updateSampleHash();
  75. }
  76. public function updateSampleData(
  77. float $parameterValue,
  78. \DateTime $analyzedAt = null,
  79. string $laboratoryName = null,
  80. string $samplePointName = null
  81. ) {
  82. $this->parameterValue = $parameterValue;
  83. $this->analyzedAt = $analyzedAt;
  84. $this->laboratoryName = $laboratoryName;
  85. $this->samplePointName = $samplePointName;
  86. $this->updateSampleHash();
  87. }
  88. public function updateSampleHash()
  89. {
  90. $sampleHash = md5($this->analytical()->id());
  91. $sampleHash = md5($sampleHash . $this->analyticalParameter()->id());
  92. if ($this->analyzedAt() != null) {
  93. $sampleHash = md5($sampleHash . $this->analyzedAt()->format('dmY'));
  94. }
  95. if ($this->laboratoryName() != null) {
  96. $sampleHash = md5($sampleHash . $this->laboratoryName());
  97. }
  98. if ($this->samplePointName() != null) {
  99. $sampleHash = md5($sampleHash . $this->samplePointName());
  100. }
  101. $this->sampleHash = $sampleHash;
  102. }
  103. /**
  104. * @return string
  105. */
  106. public function id(): string
  107. {
  108. return $this->uuid;
  109. }
  110. /**
  111. * @return AnalyticalSample
  112. */
  113. public function analytical(): ?Analytical
  114. {
  115. return $this->analytical;
  116. }
  117. /**
  118. * @return AnalyticalParameter
  119. */
  120. public function analyticalParameter(): AnalyticalParameter
  121. {
  122. return $this->analyticalParameter;
  123. }
  124. /**
  125. * @return float
  126. */
  127. public function parameterValue(): float
  128. {
  129. return $this->parameterValue;
  130. }
  131. /**
  132. * @return string
  133. */
  134. public function laboratoryName(): ?string
  135. {
  136. return $this->laboratoryName;
  137. }
  138. /**
  139. * @return string
  140. */
  141. public function samplePointName(): ?string
  142. {
  143. return $this->samplePointName;
  144. }
  145. /**
  146. * @return \DateTime
  147. */
  148. public function analyzedAt(): ?\DateTime
  149. {
  150. return $this->analyzedAt;
  151. }
  152. /**
  153. * @return \DateTime
  154. */
  155. public function createdAt(): \DateTime
  156. {
  157. return $this->createdAt;
  158. }
  159. /**
  160. * @return bool
  161. */
  162. public function equals(AnalyticalSample $analyticalSample)
  163. {
  164. return $this->id() === $analyticalSample->id();
  165. }
  166. }