<?php
namespace 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 AnalyticalParameter
*
* @package Whater\Domain\Whater\Model
*/
class AnalyticalParameter implements ContainsRecordedEvents
{
use EventRecorderCapabilities;
/**
* @var string
*/
private $uuid;
/**
* @var string
*/
private $parameterCode;
/**
* @var string
*/
private $parameterName;
/**
* @var string
*/
private $parameterMetric;
/**
* @var float
*/
private $referenceMinValue;
/**
* @var float
*/
private $referenceMaxValue;
/**
* @var float
*/
private $limitMinValue;
/**
* @var float
*/
private $limitMaxValue;
/**
* @var \DateTime
*/
private $createdAt;
public function __construct(
string $analyticalParameterId = null,
string $parameterCode,
string $parameterName,
string $parameterMetric,
float $referenceMinValue = null,
float $referenceMaxValue = null,
float $limitMinValue = null,
float $limitMaxValue = null
) {
try {
$this->uuid = Uuid::fromString($analyticalParameterId ?: Uuid::uuid4())->toString();
} catch (\InvalidArgumentException $e) {
throw new InvalidUUIDException();
}
$this->parameterCode = $parameterCode;
$this->parameterName = $parameterName;
$this->parameterMetric = $parameterMetric;
$this->referenceMinValue = $referenceMinValue;
$this->referenceMaxValue = $referenceMaxValue;
$this->limitMinValue = $limitMinValue;
$this->limitMaxValue = $limitMaxValue;
$this->createdAt = new \DateTime();
}
public function updateAnalyticalParameter(
string $parameterName,
string $parameterMetric,
float $referenceMinValue = null,
float $referenceMaxValue = null,
float $limitMinValue = null,
float $limitMaxValue = null
) {
$this->parameterName = $parameterName;
$this->parameterMetric = $parameterMetric;
$this->referenceMinValue = $referenceMinValue;
$this->referenceMaxValue = $referenceMaxValue;
$this->limitMinValue = $limitMinValue;
$this->limitMaxValue = $limitMaxValue;
}
/**
* @return string
*/
public function id(): string
{
return $this->uuid;
}
/**
* @return string
*/
public function parameterCode(): string
{
return $this->parameterCode;
}
/**
* @return string
*/
public function parameterName(): string
{
return $this->parameterName;
}
/**
* @return string
*/
public function parameterMetric(): string
{
return $this->parameterMetric;
}
/**
* @return float
*/
public function referenceMinValue(): ?float
{
return $this->referenceMinValue;
}
/**
* @return float
*/
public function referenceMaxValue(): ?float
{
return $this->referenceMaxValue;
}
/**
* @return float
*/
public function limitMinValue(): ?float
{
return $this->limitMinValue;
}
/**
* @return float
*/
public function limitMaxValue(): ?float
{
return $this->limitMaxValue;
}
/**
* @return \DateTime
*/
public function createdAt(): \DateTime
{
return $this->createdAt;
}
/**
* @return bool
*/
public function equals(AnalyticalParameter $analyticalParameter)
{
return $this->id() === $analyticalParameter->id();
}
}