From ecdb67a9ab04a8f5ef33a44278695123fb94cffa Mon Sep 17 00:00:00 2001 From: Aldarien Date: Wed, 17 Jan 2024 14:31:49 -0300 Subject: [PATCH] FIX: Security en htm --- app/src/Service/Cartola/Security.php | 54 +++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/app/src/Service/Cartola/Security.php b/app/src/Service/Cartola/Security.php index 9df63d0..d89fd6f 100644 --- a/app/src/Service/Cartola/Security.php +++ b/app/src/Service/Cartola/Security.php @@ -1,6 +1,8 @@ getStream(); + $stream->seek(3); + if ($stream->read(strlen('table')) === 'table') { + return $this->processHtm($file); + } + return $this->processXls($file); + } + + private function processXls(UploadedFileInterface $file): array + { $filename = '/tmp/cartola.xls'; $file->moveTo($filename); + $reader = PhpSpreadsheet\IOFactory::createReader('Xls'); $xlsx = $reader->load($filename); $worksheet = $xlsx->getActiveSheet(); $rows = $worksheet->getRowIterator(); @@ -51,4 +63,44 @@ class Security implements Banco unlink($filename); return $data; } + private function processHtm(UploadedFileInterface $file): array + { + $filename = '/tmp/cartola.htm'; + $file->moveTo($filename); + + $domDocument = new DOMDocument(); + $domDocument->loadHTML('' . file_get_contents($filename) . ''); + + $tables = $domDocument->getElementsByTagName('table'); + $table = $tables->item(4); + + $columns = []; + $data = []; + foreach ($table->getElementsByTagName('tr')->getIterator() as $rowIndex => $row) { + if ($rowIndex === 0) { + continue; + } + if (str_contains($row->textContent, 'cargos')) { + foreach ($row->getElementsByTagName('td')->getIterator() as $cell) { + $columns []= trim($cell->textContent); + } + continue; + } + $rowData = []; + foreach ($row->getElementsByTagName('td')->getIterator() as $colIndex => $cell) { + $col = $columns[$colIndex]; + $value = trim($cell->textContent); + if ($col === 'fecha') { + $value = DateTimeImmutable::createFromFormat('d/m/Y', $value)->format('Y-m-d'); + } + if (in_array($col, ['cargos', 'abonos', 'saldos'])) { + $value = (float) str_replace(',', '.', $value); + } + $rowData[$col] = $value; + } + $data []= $rowData; + } + + return $data; + } }