<?php
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Scripting/PHPClass.php to edit this template
*/
namespace App\Validator;
use App\Repository\DocumentUploadValueRepository;
use PhpOffice\PhpSpreadsheet\IOFactory;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormError;
use App\Entity\DocumentUpload;
/**
* Description of ColumnValidator
*
* @author programmer
*/
class ColumnValidator extends AbstractExcelValidator
{
private DocumentUploadValueRepository $documentUploadValueRepository;
public function __construct(DocumentUploadValueRepository $documentUploadValueRepository)
{
$this->documentUploadValueRepository = $documentUploadValueRepository;
}
public function validate(FormEvent $evt): void
{
$entity = $evt->getData();
if (!$entity instanceof DocumentUpload) {
return;
}
$headers = $entity->getDocument()->getDocumentHeaders();
$excel = IOFactory::load($entity->getAttachment());
$sheet = $excel->getActiveSheet();
$typeValidate = function (string $type, $value, int $row):bool {
$validate = "is_" . $type;
if (false === call_user_func($validate, $value)) {
throw new \Exception(
sprintf("invalid type: %s, %s expected at row %s", $value, $type, $row)
);
}
return true;
};
for ($i = $entity->getDocument()->getDataStartAt(); $i < $sheet->getHighestDataRow(); $i++) {
foreach ($headers as $header) {
$cell = $header->getColumnName() . $i;
$value = $sheet->getCell($cell)->getValue();
if (null === $value) {
continue;
}
try {
$typeValidate($header->getTypeData(), $value, $i);
$entity->addDocumentUploadValue(
$this->documentUploadValueRepository->findOrCreate(
$value,
$i,
$header,
$entity
)
);
} catch (\Exception $ex) {
$evt->getForm()->get("attachment")
->addError(
new FormError($ex->getMessage())
);
return;
}
}
}
}
}