From e133bd36cff72a4713e93c3bb9ad9fd0872c638a Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Mon, 12 Feb 2024 09:52:48 -0300 Subject: [PATCH] Cartola diaria --- .../routes/api/contabilidad/cartolas.php | 9 +- .../routes/contabilidad/cartolas.php | 6 + .../contabilidad/cartolas/diaria.blade.php | 323 ++++++++++++++++++ app/setup/setups/services.php | 1 + app/src/Controller/API/Contabilidad.php | 59 +--- .../Controller/API/Contabilidad/Cartolas.php | 98 ++++++ app/src/Controller/Contabilidad.php | 31 ++ app/src/Service/Cartola.php | 17 +- 8 files changed, 476 insertions(+), 68 deletions(-) create mode 100644 app/resources/routes/contabilidad/cartolas.php create mode 100644 app/resources/views/contabilidad/cartolas/diaria.blade.php create mode 100644 app/src/Controller/API/Contabilidad/Cartolas.php create mode 100644 app/src/Controller/Contabilidad.php diff --git a/app/resources/routes/api/contabilidad/cartolas.php b/app/resources/routes/api/contabilidad/cartolas.php index 9f86632..52cdf3c 100644 --- a/app/resources/routes/api/contabilidad/cartolas.php +++ b/app/resources/routes/api/contabilidad/cartolas.php @@ -1,12 +1,13 @@ group('/cartolas', function($app) { - $app->post('/procesar[/]', [Contabilidad::class, 'procesarCartola']); + $app->post('/procesar[/]', [Cartolas::class, 'procesar']); }); $app->group('/cartola', function($app) { $app->group('/diaria', function($app) { - $app->post('/procesar[/]', [Contabilidad::class, 'procesarCartolaDiaria']); + $app->post('/ayer[/]', [Cartolas::class, 'ayer']); + $app->post('/procesar[/]', [Cartolas::class, 'diaria']); }); - $app->post('/exportar[/]', [Contabilidad::class, 'exportarCartola']); + $app->post('/exportar[/]', [Cartolas::class, 'exportar']); }); diff --git a/app/resources/routes/contabilidad/cartolas.php b/app/resources/routes/contabilidad/cartolas.php new file mode 100644 index 0000000..7bd0058 --- /dev/null +++ b/app/resources/routes/contabilidad/cartolas.php @@ -0,0 +1,6 @@ +group('/cartolas', function($app) { + $app->get('/diaria[/]', [Contabilidad::class, 'diaria']); +}); diff --git a/app/resources/views/contabilidad/cartolas/diaria.blade.php b/app/resources/views/contabilidad/cartolas/diaria.blade.php new file mode 100644 index 0000000..26b4d66 --- /dev/null +++ b/app/resources/views/contabilidad/cartolas/diaria.blade.php @@ -0,0 +1,323 @@ +@extends('layout.base') + +@section('page_content') +
+

+ Cartola Diaria +

+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + + +
+
+
+
+
+ +
+
+
+
+
+ + + + + + + + + + +
HoyĂšltimo SaldoSaldo ActualDiferencia
+
+
+ + + + + + + + + + + + + +
FechaGlosaDocumentoCargoAbonoSaldoOrden
+
+@endsection + +@include('layout.head.styles.datatables') +@include('layout.body.scripts.datatables') + +@push('page_scripts') + +@endpush diff --git a/app/setup/setups/services.php b/app/setup/setups/services.php index fa72cdc..d0e986c 100644 --- a/app/setup/setups/services.php +++ b/app/setup/setups/services.php @@ -32,6 +32,7 @@ return [ }, Incoviba\Service\Cartola::class => function(ContainerInterface $container) { return (new Incoviba\Service\Cartola( + $container->get(Psr\Log\LoggerInterface::class), $container->get(Psr\Http\Message\StreamFactoryInterface::class), $container->get(Incoviba\Common\Define\Contabilidad\Exporter::class), $container->get(Incoviba\Repository\Inmobiliaria\Cuenta::class), diff --git a/app/src/Controller/API/Contabilidad.php b/app/src/Controller/API/Contabilidad.php index 5f8bc56..c99ce31 100644 --- a/app/src/Controller/API/Contabilidad.php +++ b/app/src/Controller/API/Contabilidad.php @@ -13,62 +13,5 @@ class Contabilidad extends Controller { use withJson; - public function procesarCartola(ServerRequestInterface $request, ResponseInterface $response, - Repository\Inmobiliaria $inmobiliariaRepository, - Repository\Banco $bancoRepository, - Service\Cartola $cartolaService): ResponseInterface - { - $body = $request->getParsedBody(); - $output = [ - 'input' => $body, - 'movimientos' => [] - ]; - try { - $inmobiliaria = $inmobiliariaRepository->fetchById($body['inmobiliaria']); - $banco = $bancoRepository->fetchById($body['banco']); - $mes = new DateTimeImmutable($body['mes']); - $file = $request->getUploadedFiles()['file']; - $output['movimientos'] = $cartolaService->process($inmobiliaria, $banco, $mes, $file); - } catch (EmptyResult) {} - return $this->withJson($response, $output); - } - public function exportarCartola(ServerRequestInterface $request, ResponseInterface $response, - Repository\Inmobiliaria $inmobiliariaRepository, - Repository\Banco $bancoRepository, - Service\Cartola $cartolaService): ResponseInterface - { - $body = $request->getParsedBody(); - $output = [ - 'input' => $body, - 'filename' => '' - ]; - try { - $inmobiliaria = $inmobiliariaRepository->fetchById($body['inmobiliaria']); - $banco = $bancoRepository->fetchById($body['banco']); - $mes = new DateTimeImmutable($body['mes']); - $output['filename'] = $cartolaService->export($inmobiliaria, $banco, $mes, json_decode($body['movimientos'])); - } catch (EmptyResult) {} - return $this->withJson($response, $output); - } - public function procesarCartolaDiaria(ServerRequestInterface $request, ResponseInterface $response, - Repository\Inmobiliaria $inmobiliariaRepository, - Repository\Banco $bancoRepository, - Service\Cartola $cartolaService): ResponseInterface - { - $body = $request->getParsedBody(); - $output = [ - 'input' => $body, - 'cartola' => [] - ]; - try { - $inmobiliaria = $inmobiliariaRepository->fetchById($body['inmobiliaria_rut']); - $banco = $bancoRepository->fetchById($body['banco_id']); - $fecha = new DateTimeImmutable($body['fecha']); - $file = $request->getUploadedFiles()['file']; - $output['cartola'] = $cartolaService->diaria($inmobiliaria, $banco, $fecha, $file); - } catch (EmptyResult $exception) { - $this->logger->debug($exception); - } - return $this->withJson($response, $output); - } + } diff --git a/app/src/Controller/API/Contabilidad/Cartolas.php b/app/src/Controller/API/Contabilidad/Cartolas.php new file mode 100644 index 0000000..299c011 --- /dev/null +++ b/app/src/Controller/API/Contabilidad/Cartolas.php @@ -0,0 +1,98 @@ +getParsedBody(); + $output = [ + 'input' => $body, + 'movimientos' => [] + ]; + try { + $inmobiliaria = $inmobiliariaRepository->fetchById($body['inmobiliaria']); + $banco = $bancoRepository->fetchById($body['banco']); + $mes = new DateTimeImmutable($body['mes']); + $file = $request->getUploadedFiles()['file']; + $output['movimientos'] = $cartolaService->process($inmobiliaria, $banco, $mes, $file); + } catch (EmptyResult) {} + return $this->withJson($response, $output); + } + public function exportar(ServerRequestInterface $request, ResponseInterface $response, + Repository\Inmobiliaria $inmobiliariaRepository, + Repository\Banco $bancoRepository, + Service\Cartola $cartolaService): ResponseInterface + { + $body = $request->getParsedBody(); + $output = [ + 'input' => $body, + 'filename' => '' + ]; + try { + $inmobiliaria = $inmobiliariaRepository->fetchById($body['inmobiliaria']); + $banco = $bancoRepository->fetchById($body['banco']); + $mes = new DateTimeImmutable($body['mes']); + $output['filename'] = $cartolaService->export($inmobiliaria, $banco, $mes, json_decode($body['movimientos'])); + } catch (EmptyResult) {} + return $this->withJson($response, $output); + } + public function diaria(ServerRequestInterface $request, ResponseInterface $response, + Repository\Inmobiliaria $inmobiliariaRepository, + Repository\Banco $bancoRepository, + Service\Cartola $cartolaService): ResponseInterface + { + $body = $request->getParsedBody(); + $output = [ + 'input' => $body, + 'cartola' => [] + ]; + try { + $inmobiliaria = $inmobiliariaRepository->fetchById($body['inmobiliaria_rut']); + $banco = $bancoRepository->fetchById($body['banco_id']); + $fecha = new DateTimeImmutable($body['fecha']); + $file = $request->getUploadedFiles()['file']; + $output['cartola'] = $cartolaService->diaria($inmobiliaria, $banco, $fecha, $file); + } catch (EmptyResult $exception) { + $this->logger->debug($exception); + } + return $this->withJson($response, $output); + } + public function ayer(ServerRequestInterface $request, ResponseInterface $response, + Repository\Inmobiliaria $inmobiliariaRepository, + Repository\Banco $bancoRepository, + Repository\Inmobiliaria\Cuenta $cuentaRepository, + Repository\Cartola $cartolaRepository): ResponseInterface + { + $body = $request->getParsedBody(); + $output = [ + 'input' => $body, + 'cartola' => [] + ]; + try { + $inmobiliaria = $inmobiliariaRepository->fetchById($body['inmobiliaria_rut']); + $banco = $bancoRepository->fetchById($body['banco_id']); + $cuenta = $cuentaRepository->fetchByInmobiliariaAndBanco($inmobiliaria->rut, $banco->id); + $fecha = new DateTimeImmutable($body['fecha']); + $output['cartola'] = $cartolaRepository->fetchByCuentaAndFecha($cuenta->id, $fecha); + } catch (EmptyResult $exception) { + $this->logger->critical($exception); + } + return $this->withJson($response, $output); + } +} diff --git a/app/src/Controller/Contabilidad.php b/app/src/Controller/Contabilidad.php new file mode 100644 index 0000000..8653d8c --- /dev/null +++ b/app/src/Controller/Contabilidad.php @@ -0,0 +1,31 @@ +fetchRedis($redisService, $redisKey); + } catch (EmptyRedis) { + try { + $inmobiliarias = $inmobiliariaRepository->fetchAll(); + $this->saveRedis($redisService, $redisKey, $inmobiliarias, 30 * 24 * 60 * 60); + } catch (EmptyResult) {} + } + return $view->render($response, 'contabilidad.cartolas.diaria', compact('inmobiliarias')); + } +} diff --git a/app/src/Service/Cartola.php b/app/src/Service/Cartola.php index e870f53..ae7f927 100644 --- a/app/src/Service/Cartola.php +++ b/app/src/Service/Cartola.php @@ -5,18 +5,23 @@ use DateTimeInterface; use DateTimeImmutable; use Psr\Http\Message\StreamFactoryInterface; use Psr\Http\Message\UploadedFileInterface; +use Psr\Log\LoggerInterface; +use Incoviba\Common\Ideal\Service; use Incoviba\Common\Define\Cartola\Banco; use Incoviba\Common\Define\Contabilidad\Exporter; use Incoviba\Common\Implement\Exception; use Incoviba\Model; use Incoviba\Repository; -class Cartola +class Cartola extends Service { - public function __construct(protected StreamFactoryInterface $streamFactory, protected Exporter $exporter, + public function __construct(LoggerInterface $logger, + protected StreamFactoryInterface $streamFactory, protected Exporter $exporter, protected Repository\Inmobiliaria\Cuenta $cuentaRepository, protected Repository\Movimiento $movimientoRepository, - protected Repository\Cartola $cartolaRepository) {} + protected Repository\Cartola $cartolaRepository) { + parent::__construct($logger); + } protected array $bancos; public function register(string $name, Banco $banco): Cartola @@ -46,9 +51,9 @@ class Cartola $movimientos = []; foreach ($ms as $m) { $movimiento = $this->buildMovimiento($cuenta, $m); - $movimientos []= $movimiento; - if ($movimiento->fecha === $fecha) { + if ($movimiento->fecha->getTimestamp() === $fecha->getTimestamp()) { + $movimientos []= $movimiento; $cartolaData['cargos'] += $movimiento->cargo; $cartolaData['abonos'] += $movimiento->abono; } @@ -61,7 +66,7 @@ class Cartola protected function getMovimientosDiarios(Model\Banco $banco, UploadedFileInterface $file): array { $movimientos = $this->bancos[strtolower($banco->nombre)]->process($file); - switch ($banco->nombre) { + switch (strtolower($banco->nombre)) { case 'security': $movimientos = $this->processMovimientosDiariosSecurity($movimientos); break;