FIX: Importar cartolas correctamente.
This commit is contained in:
@ -2,17 +2,14 @@
|
||||
namespace Incoviba\Controller\API\Contabilidad;
|
||||
|
||||
use DateTimeImmutable;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Incoviba\Common\Ideal\Controller;
|
||||
use Incoviba\Common\Implement\Exception\EmptyResult;
|
||||
use Incoviba\Controller\API\withJson;
|
||||
use Incoviba\Model\Contabilidad\Banco;
|
||||
use Incoviba\Model\Inmobiliaria;
|
||||
use Incoviba\Repository;
|
||||
use Incoviba\Service;
|
||||
use PhpParser\Node\Stmt\TryCatch;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class Cartolas extends Controller
|
||||
{
|
||||
@ -33,7 +30,7 @@ class Cartolas extends Controller
|
||||
$banco = $bancoRepository->fetchById($body['banco']);
|
||||
$mes = new DateTimeImmutable($body['mes']);
|
||||
$file = $request->getUploadedFiles()['file'];
|
||||
$output['movimientos'] = $cartolaService->process($inmobiliaria, $banco, $mes, $file);
|
||||
$output['movimientos'] = $cartolaService->process($banco, $file);
|
||||
} catch (EmptyResult) {}
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
@ -100,9 +97,6 @@ class Cartolas extends Controller
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
public function importar(ServerRequestInterface $request, ResponseInterface $response,
|
||||
LoggerInterface $logger,
|
||||
Repository\Inmobiliaria $inmobiliariaRepository,
|
||||
Repository\Contabilidad\Banco $bancoRepository,
|
||||
Repository\Inmobiliaria\Cuenta $cuentaRepository,
|
||||
Service\Contabilidad\Cartola $cartolaService,
|
||||
Service\Contabilidad\Movimiento $movimientoService): ResponseInterface
|
||||
@ -120,22 +114,26 @@ class Cartolas extends Controller
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
$inmobiliaria = $inmobiliariaRepository->fetchById($body['sociedad_rut'][$i]);
|
||||
$banco = $bancoRepository->fetchById($body['banco_id'][$i]);
|
||||
$movimientos = $cartolaService->process($inmobiliaria, $banco, new DateTimeImmutable($body['mes'][$i]), $file);
|
||||
$cuenta = $cuentaRepository->fetchByInmobiliariaAndBanco($inmobiliaria->rut, $banco->id);
|
||||
$cuenta = $cuentaRepository->fetchById($body['cuenta_id'][$i]);
|
||||
$movimientos = $cartolaService->process($cuenta->banco, $file);
|
||||
$this->addMovimientos($movimientoService, $cuenta, $movimientos);
|
||||
$output['movimientos'] = array_merge($output['movimientos'], $movimientos);
|
||||
$inmobiliaria = $cuenta->inmobiliaria;
|
||||
$output['movimientos'] = array_merge($output['movimientos'], array_map(function($movimiento) use ($inmobiliaria) {
|
||||
$movimiento['sociedad'] = $inmobiliaria;
|
||||
return $movimiento;
|
||||
}, $movimientos));
|
||||
} catch (EmptyResult) {}
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
$inmobiliaria = $inmobiliariaRepository->fetchById($body['sociedad_rut']);
|
||||
$banco = $bancoRepository->fetchById($body['banco_id']);
|
||||
$movimientos = $cartolaService->process($inmobiliaria, $banco, new DateTimeImmutable($body['mes']), $files['file']);
|
||||
$cuenta = $cuentaRepository->fetchByInmobiliariaAndBanco($inmobiliaria->rut, $banco->id);
|
||||
$cuenta = $cuentaRepository->fetchById($body['cuenta_id']);
|
||||
$movimientos = $cartolaService->process($cuenta->banco, $files['file']);
|
||||
$this->addMovimientos($movimientoService, $cuenta, $movimientos);
|
||||
$output['movimientos'] = $movimientos;
|
||||
$inmobiliaria = $cuenta->inmobiliaria;
|
||||
$output['movimientos'] = array_map(function($movimiento) use ($inmobiliaria) {
|
||||
$movimiento['sociedad'] = $inmobiliaria;
|
||||
return $movimiento;
|
||||
}, $movimientos);
|
||||
} catch (EmptyResult) {}
|
||||
}
|
||||
return $this->withJson($response, $output);
|
||||
@ -145,12 +143,14 @@ class Cartolas extends Controller
|
||||
{
|
||||
foreach ($movimientos as $dataMovimiento) {
|
||||
$dataMovimiento['cuenta_id'] = $cuenta->id;
|
||||
$dataMovimiento['centro_costo_id'] = $dataMovimiento['centro_costo'];
|
||||
if (array_key_exists('centro_costo', $dataMovimiento)) {
|
||||
$dataMovimiento['centro_costo_id'] = $dataMovimiento['centro_costo'];
|
||||
}
|
||||
$dataMovimiento['fecha'] = new DateTimeImmutable($dataMovimiento['fecha']);
|
||||
if (array_key_exists('rut', $dataMovimiento)) {
|
||||
list($rut, $digito) = explode('-', $dataMovimiento['rut']);
|
||||
$dataMovimiento['rut'] = preg_replace('/\D+/', '', $rut);
|
||||
$dataMovimiento['digito'] = $digito;
|
||||
$dataMovimiento['rut'] = trim(preg_replace('/\D+/', '', $rut));
|
||||
$dataMovimiento['digito'] = trim($digito);
|
||||
}
|
||||
$movimientoService->add($dataMovimiento);
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ class Cartola extends Service
|
||||
$this->bancos[$name] = $banco;
|
||||
return $this;
|
||||
}
|
||||
public function process(Model\Inmobiliaria $inmobiliaria, Model\Contabilidad\Banco $banco, DateTimeInterface $mes, UploadedFileInterface $file): array
|
||||
public function process(Model\Contabilidad\Banco $banco, UploadedFileInterface $file): array
|
||||
{
|
||||
return $this->bancos[strtolower($banco->nombre)]->process($file);
|
||||
}
|
||||
|
@ -38,11 +38,13 @@ class Itau extends Banco
|
||||
}
|
||||
protected function getFilename(UploadedFileInterface $uploadedFile): string
|
||||
{
|
||||
return '/tmp/cartola.xls';
|
||||
$ext = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
|
||||
return "/tmp/cartola.{$ext}";
|
||||
}
|
||||
protected function parseFile(string $filename): array
|
||||
{
|
||||
$reader = PhpSpreadsheet\IOFactory::createReader('Xls');
|
||||
$ext = pathinfo($filename, PATHINFO_EXTENSION);
|
||||
$reader = PhpSpreadsheet\IOFactory::createReader(ucwords($ext));
|
||||
$xlsx = $reader->load($filename);
|
||||
$sheet = $xlsx->getActiveSheet();
|
||||
|
||||
@ -145,6 +147,9 @@ class Itau extends Banco
|
||||
$value = $sheet->getCell("{$columnIndex}{$row->getRowIndex()}")->getCalculatedValue();
|
||||
$mapped = $this->columnMap()[$column] ?? $column;
|
||||
if ($mapped === 'fecha') {
|
||||
if ($value === '') {
|
||||
continue;
|
||||
}
|
||||
$value = PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value, 'America/Santiago')->format('Y-m-d');
|
||||
}
|
||||
if (in_array($mapped, ['abono', 'cargo', 'saldo'])) {
|
||||
@ -154,7 +159,16 @@ class Itau extends Banco
|
||||
}
|
||||
$data []= $rowData;
|
||||
}
|
||||
return $data;
|
||||
// Remove empty rows
|
||||
return array_filter($data, function($data) {
|
||||
$empties = 0;
|
||||
foreach ($data as $field) {
|
||||
if ($field === '' or $field === null or $field === 0) {
|
||||
$empties++;
|
||||
}
|
||||
}
|
||||
return $empties < count($data) - 1;
|
||||
});
|
||||
}
|
||||
|
||||
protected function identifySheet(PhpSpreadsheet\Worksheet\Worksheet $sheet): int
|
||||
|
Reference in New Issue
Block a user