<?phpnamespace Whater\Domain\Whater\Model;use BornFree\TacticianDomainEvent\Recorder\ContainsRecordedEvents;use BornFree\TacticianDomainEvent\Recorder\EventRecorderCapabilities;use Ramsey\Uuid\Uuid;use Whater\Domain\Common\Exception\InvalidUUIDException;use Whater\Domain\User\Model\User;use Whater\Domain\Whater\Exception\InvalidImportDataFileStatusException;use Whater\Domain\Whater\Exception\InvalidImportDataFileTypeException;/** * Class ImportDataFile * * @package Whater\Domain\Whater\Model */class ImportDataFile implements ContainsRecordedEvents{ use EventRecorderCapabilities; const STATUS_PENDING = 'STATUS_PENDING'; const STATUS_PROCESING = 'STATUS_PROCESING'; const STATUS_FINISHED = 'STATUS_FINISHED'; const STATUS_CANCELED = 'STATUS_CANCELED'; const STATUS_FAIL = 'STATUS_FAIL'; const FILE_TYPE_WHATERPOINTS_XLS = 'FT_WHATERPOINTS_XLS'; const FILE_TYPE_DISTRIBUTION_NETWORKS_XLSLS = 'FT_DISTRIBUTION_NETWORKS_XLS'; const FILE_TYPE_ESTABLISHMENTS_XLS = 'FT_ESTABLISHMENTS_XLS'; const FILE_TYPE_UBICATIONS_XLS = 'FT_UBICATIONS_XLS'; const FILE_TYPE_TOWN_LOCATIONS_XLS = 'FT_TOWN_LOCATIONS_XLS'; const FILE_TYPE_TOWNS_XLS = 'FT_TOWNS_XLS'; const FILE_TYPE_AGRUPATIONS_XLS = 'FT_AGRUPATIONS_XLS'; const FILE_TYPE_COUNTRY_AREAS_XLS = 'FT_COUNTRY_AREAS_XLS'; const FILE_TYPE_COUNTRIES_XLS = 'FT_COUNTRIES_XLS'; const FILE_TYPE_WHATER_DEVICES_XLS = 'FT_WHATER_DEVICES_XLS'; const FILE_TYPE_USERS_XLS = 'FT_USERS_XLS'; const FILE_TYPE_PARAMETER_ANALYTICAL_XLS = 'FT_PARAMATER_ANALYTICAL_XLS'; /** * @var string */ private $uuid; /** * @var string */ private $fileType; /** * @var string */ private $filePath; /** * @var string */ private $fileName; /** * @var string */ private $status; /** * @var int */ private $numRows; /** * @var int */ private $numSuccessRows; /** * @var int */ private $numInvalidRows; /** * @var \DateTime */ private $createdAt; /** * @var \DateTime */ private $updatedAt; /** * @var User */ private $uploadedBy; /** * @var array */ private $notesLines; public function __construct( string $importDataFileId = null, string $fileType, string $filePath, string $fileName, int $numRows, User $uploadedBy ) { try { $this->uuid = Uuid::fromString($importDataFileId ?: Uuid::uuid4())->toString(); } catch (\InvalidArgumentException $e) { throw new InvalidUUIDException(); } switch ($fileType) { case ImportDataFile::FILE_TYPE_WHATERPOINTS_XLS; case ImportDataFile::FILE_TYPE_DISTRIBUTION_NETWORKS_XLSLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_UBICATIONS_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_ESTABLISHMENTS_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_TOWN_LOCATIONS_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_TOWNS_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_AGRUPATIONS_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_COUNTRY_AREAS_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_COUNTRIES_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_WHATER_DEVICES_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_USERS_XLS; $this->fileType = $fileType; break; case ImportDataFile::FILE_TYPE_PARAMETER_ANALYTICAL_XLS; $this->fileType = $fileType; break; default: throw new InvalidImportDataFileTypeException(); } $this->uploadedBy = $uploadedBy; $this->filePath = $filePath; $this->fileName = $fileName; $this->status = ImportDataFile::STATUS_PENDING; $this->numRows = $numRows; $this->numSuccessRows = 0; $this->numInvalidRows = 0; $this->notesLines = []; $this->createdAt = new \DateTime(); $this->updatedAt = new \DateTime(); } public function updateStatus( string $status, int $numSuccessRows, int $numInvalidRows, array $notesLines ) { switch ($status) { case ImportDataFile::STATUS_PENDING: case ImportDataFile::STATUS_CANCELED: case ImportDataFile::STATUS_PROCESING: case ImportDataFile::STATUS_FINISHED: case ImportDataFile::STATUS_FAIL: $this->status = $status; break; default: throw new InvalidImportDataFileStatusException(); } $this->numSuccessRows = $numSuccessRows; $this->numInvalidRows = $numInvalidRows; $this->notesLines = $notesLines; $this->updatedAt = new \DateTime(); } /** * @return string */ public function id(): string { return $this->uuid; } /** * @return string */ public function fileType(): string { return $this->fileType; } /** * @return string */ public function fileName(): string { return $this->fileName; } /** * @return string */ public function filePath(): string { return $this->filePath; } /** * @return string */ public function status(): string { return $this->status; } /** * @return int */ public function numRows(): int { return $this->numRows; } /** * @return int */ public function numSuccessRows(): int { return $this->numSuccessRows; } /** * @return int */ public function numInvalidRows(): int { return $this->numInvalidRows; } /** * @return int */ public function numProcessedRows(): int { return $this->numInvalidRows + $this->numSuccessRows; } /** * @return int */ public function uploadedBy(): User { return $this->uploadedBy; } /** * @return array */ public function notesLines(): array { return $this->notesLines; } /** * @return \DateTime */ public function createdAt(): \DateTime { return $this->createdAt; } /** * @return \DateTime */ public function updatedAt(): \DateTime { return $this->updatedAt; } /** * @return bool */ public function equals(ImportDataFile $importDataFile) { return $this->id() === $importDataFile->id(); }}