From a5125aff74d23d69378338de80e63ba433d8711c Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Mon, 13 May 2024 16:54:59 -0400 Subject: [PATCH] Movimientos filtrados y editables --- .../routes/api/contabilidad/movimientos.php | 1 + .../views/contabilidad/movimientos.blade.php | 501 +++++++++++++----- .../views/layout/body/scripts.blade.php | 27 +- .../API/Contabilidad/Movimientos.php | 54 +- .../Controller/Contabilidad/Movimientos.php | 14 +- .../Repository/Contabilidad/Movimiento.php | 12 + app/src/Service/Contabilidad/Movimiento.php | 7 +- 7 files changed, 456 insertions(+), 160 deletions(-) diff --git a/app/resources/routes/api/contabilidad/movimientos.php b/app/resources/routes/api/contabilidad/movimientos.php index 8d00044..0e85222 100644 --- a/app/resources/routes/api/contabilidad/movimientos.php +++ b/app/resources/routes/api/contabilidad/movimientos.php @@ -2,6 +2,7 @@ use Incoviba\Controller\API\Contabilidad\Movimientos; $app->group('/movimientos', function($app) { + $app->post('/sociedad/mes', [Movimientos::class, 'sociedad']); $app->post('/segment', [Movimientos::class, 'segment']); $app->get('[/]', Movimientos::class); }); diff --git a/app/resources/views/contabilidad/movimientos.blade.php b/app/resources/views/contabilidad/movimientos.blade.php index 6b99ea0..2d83c35 100644 --- a/app/resources/views/contabilidad/movimientos.blade.php +++ b/app/resources/views/contabilidad/movimientos.blade.php @@ -1,160 +1,389 @@ @extends('layout.base') -@section('page_content') -
-

Movimientos Contables

-
- - - - - - - - - - - - - - - -
SociedadBanco - CuentaFechaISO FechaValorValorCentro de CostoGlosaDetalle
-@endsection - @include('layout.head.styles.datatables') @include('layout.head.styles.datatables.searchbuilder') @include('layout.head.styles.datatables.buttons') +@push('page_styles') + +@endpush + +@section('page_content') +
+

Movimientos Contables

+
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
SiglaBancoCuentaFechaISO FechaMesAñoValorValorCentro de CostoGlosaDetalleEditar
+
+ +@endsection + @include('layout.body.scripts.datatables') @include('layout.body.scripts.datatables.searchbuilder') @include('layout.body.scripts.datatables.buttons') @push('page_scripts') @endpush diff --git a/app/resources/views/layout/body/scripts.blade.php b/app/resources/views/layout/body/scripts.blade.php index 64de786..2522dfc 100644 --- a/app/resources/views/layout/body/scripts.blade.php +++ b/app/resources/views/layout/body/scripts.blade.php @@ -21,6 +21,28 @@ console.error(error) }) } + const datatables_defaults = { + language: { + emptyTable: 'No hay datos disponibles', + info: 'Mostrando _START_ a _END_ de _TOTAL_ registros', + infoEmpty: 'Mostrando desde 0 a 0 de 0 registros', + infoFiltered: '(filtrado de _MAX_ registros totales)', + lengthMenu: 'Mostrar _MENU_ registros', + loadingRecords: 'Cargando...', + search: 'Buscar:', + zeroRecords: 'No se encontraron registros', + paginate: { + first: 'Primero', + last: 'Último', + next: 'Siguiente', + previous: 'Anterior', + }, + aria: { + orderable: 'Ordenar por esta columna', + orderableReverse: 'Ordenar por esta columna en orden inverso', + } + } + } const calendar_date_options = { type: 'date', firstDayOfWeek: 1, @@ -28,9 +50,12 @@ monthFirst: false, text: { days: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'], + dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'], + dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'], months: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'], monthsShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], - today: 'Hoy' + today: 'Hoy', + now: 'Ahora', }, formatter: { date: 'DD-MM-YYYY' diff --git a/app/src/Controller/API/Contabilidad/Movimientos.php b/app/src/Controller/API/Contabilidad/Movimientos.php index a6fc07c..3daeb2d 100644 --- a/app/src/Controller/API/Contabilidad/Movimientos.php +++ b/app/src/Controller/API/Contabilidad/Movimientos.php @@ -1,13 +1,14 @@ getById($movimiento_id); - $output['movimiento'] = $movimiento; + $output['movimiento'] = $this->movimientosToArray([$movimiento])[0]; $data = []; if (isset($body['centro_id'])) { $centro = $centroCostoRepository->fetchById($body['centro_id']); @@ -38,6 +39,7 @@ class Movimientos extends Ideal\Controller $data['detalle'] = $body['detalle']; } $movimientoService->setDetalles($movimiento, $data); + $output['movimiento'] = $this->movimientosToArray([$movimientoService->getById($movimiento->id)])[0]; if (isset($body['centro_id'])) { $output['centro'] = $centro; } @@ -54,14 +56,7 @@ class Movimientos extends Ideal\Controller ]; try { $movimientos = $movimientoService->getAll(); - $output['movimientos'] = json_decode(json_encode($movimientos), JSON_OBJECT_AS_ARRAY); - foreach ($output['movimientos'] as $i => &$arrayMovimiento) { - $arrayMovimiento['cuenta'] = json_decode(json_encode($movimientos[$i]->cuenta), JSON_OBJECT_AS_ARRAY); - $arrayMovimiento['cuenta']['inmobiliaria'] = json_decode(json_encode($movimientos[$i]->cuenta->inmobiliaria), JSON_OBJECT_AS_ARRAY); - if ($arrayMovimiento['detalles'] !== null) { - $arrayMovimiento['detalles']['centro_costo'] = $movimientos[$i]->getDetalles()->centroCosto; - } - } + $output['movimientos'] = $this->movimientosToArray($movimientos); } catch (EmptyResult) {} return $this->withJson($response, $output); } @@ -75,15 +70,38 @@ class Movimientos extends Ideal\Controller ]; try { $movimientos = $movimientoService->getAmountStartingFrom($input['from'], $input['amount']); - $output['movimientos'] = json_decode(json_encode($movimientos), JSON_OBJECT_AS_ARRAY); - foreach ($output['movimientos'] as $i => &$arrayMovimiento) { - $arrayMovimiento['cuenta'] = json_decode(json_encode($movimientos[$i]->cuenta), JSON_OBJECT_AS_ARRAY); - $arrayMovimiento['cuenta']['inmobiliaria'] = json_decode(json_encode($movimientos[$i]->cuenta->inmobiliaria), JSON_OBJECT_AS_ARRAY); - if ($arrayMovimiento['detalles'] !== null) { - $arrayMovimiento['detalles']['centro_costo'] = $movimientos[$i]->getDetalles()->centroCosto; - } + $output['movimientos'] = $this->movimientosToArray($movimientos); + } catch (EmptyResult) {} + return $this->withJson($response, $output); + } + public function sociedad(ServerRequestInterface $request, ResponseInterface $response, + Service\Contabilidad\Movimiento $movimientoService): ResponseInterface + { + $input = $request->getParsedBody(); + $output = [ + 'input' => $input, + 'movimientos' => [] + ]; + try { + $sociedades_ruts = $input['sociedades_ruts']; + foreach ($sociedades_ruts as $sociedadRut) { + $movimientos = $movimientoService->getAmountBySociedadAndMes($sociedadRut, new DateTimeImmutable($input['mes']), $input['amount'] ?? null); + $output['movimientos'] = array_merge($output['movimientos'], $this->movimientosToArray($movimientos)); } } catch (EmptyResult) {} return $this->withJson($response, $output); } + + protected function movimientosToArray(array $movimientos): array + { + $output = json_decode(json_encode($movimientos), JSON_OBJECT_AS_ARRAY); + foreach ($output as $i => &$arrayMovimiento) { + $arrayMovimiento['cuenta'] = json_decode(json_encode($movimientos[$i]->cuenta), JSON_OBJECT_AS_ARRAY); + $arrayMovimiento['cuenta']['inmobiliaria'] = json_decode(json_encode($movimientos[$i]->cuenta->inmobiliaria), JSON_OBJECT_AS_ARRAY); + if ($arrayMovimiento['detalles'] !== null) { + $arrayMovimiento['detalles']['centro_costo'] = $movimientos[$i]->getDetalles()->centroCosto; + } + } + return $output; + } } diff --git a/app/src/Controller/Contabilidad/Movimientos.php b/app/src/Controller/Contabilidad/Movimientos.php index fe1cdc1..bd247bd 100644 --- a/app/src/Controller/Contabilidad/Movimientos.php +++ b/app/src/Controller/Contabilidad/Movimientos.php @@ -1,15 +1,21 @@ render($response, 'contabilidad.movimientos'); + $sociedades = $inmobiliariaRepository->fetchAll('razon'); + $centros = $centroCostoRepository->fetchAll('descripcion'); + return $view->render($response, 'contabilidad.movimientos', compact('sociedades', 'centros')); } } diff --git a/app/src/Repository/Contabilidad/Movimiento.php b/app/src/Repository/Contabilidad/Movimiento.php index 536feb2..4f36d3c 100644 --- a/app/src/Repository/Contabilidad/Movimiento.php +++ b/app/src/Repository/Contabilidad/Movimiento.php @@ -78,4 +78,16 @@ class Movimiento extends Ideal\Repository ->limit($amount, $start); return $this->fetchMany($query); } + public function fetchAmountBySociedadAndMes(int $sociedad_rut, DateTimeInterface $mes, ?int $amount): array + { + $query = $this->connection->getQueryBuilder() + ->select('a.*') + ->from("{$this->getTable()} a") + ->joined('JOIN cuenta b ON a.cuenta_id = b.id') + ->where('b.inmobiliaria = ? AND a.fecha BETWEEN ? AND ?'); + if ($amount !== null) { + $query->limit($amount); + } + return $this->fetchMany($query, [$sociedad_rut, $mes->format('Y-m-01'), $mes->format('Y-m-t')]); + } } diff --git a/app/src/Service/Contabilidad/Movimiento.php b/app/src/Service/Contabilidad/Movimiento.php index 4b2bd86..dc18085 100644 --- a/app/src/Service/Contabilidad/Movimiento.php +++ b/app/src/Service/Contabilidad/Movimiento.php @@ -1,11 +1,12 @@ movimientoRepository->fetchAmountStartingFrom($start, $amount)); } + public function getAmountBySociedadAndMes(int $sociedad_rut, DateTimeInterface $mes, ?int $amount): array + { + return array_map([$this, 'process'], $this->movimientoRepository->fetchAmountBySociedadAndMes($sociedad_rut, $mes, $amount)); + } public function setDetalles(Model\Contabilidad\Movimiento $movimiento, array $data): Model\Contabilidad\Movimiento { try {