Files
oficial/app/src/Controller/Contabilidad.php

114 lines
5.3 KiB
PHP
Raw Normal View History

2024-02-12 09:52:48 -03:00
<?php
namespace Incoviba\Controller;
2024-02-13 01:16:17 -03:00
use DateInterval;
2024-03-26 09:38:20 -03:00
use DateTimeImmutable;
2024-07-25 12:52:48 -04:00
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
2024-02-12 09:52:48 -03:00
use Incoviba\Common\Alias\View;
2024-03-26 09:38:20 -03:00
use Incoviba\Common\Ideal\Controller;
use Incoviba\Common\Implement\Exception\{EmptyRedis, EmptyResult};
2024-02-13 12:08:25 -03:00
use Incoviba\Model;
2024-02-12 09:52:48 -03:00
use Incoviba\Repository;
use Incoviba\Service;
2024-02-13 01:16:17 -03:00
class Contabilidad extends Controller
2024-02-12 09:52:48 -03:00
{
use withRedis;
2024-03-26 09:38:20 -03:00
public function diaria(ServerRequestInterface $request, ResponseInterface $response, View $view,
Service\Redis $redisService,
Repository\Inmobiliaria $inmobiliariaRepository,
Repository\Contabilidad\CentroCosto $centroCostoRepository): ResponseInterface
2024-02-12 09:52:48 -03:00
{
$redisKey = 'inmobiliarias';
$inmobiliarias = [];
try {
$inmobiliarias = $this->fetchRedis($redisService, $redisKey);
} catch (EmptyRedis) {
try {
2024-03-21 22:09:15 -03:00
$inmobiliarias = $inmobiliariaRepository->fetchAll('razon');
2024-02-12 09:52:48 -03:00
$this->saveRedis($redisService, $redisKey, $inmobiliarias, 30 * 24 * 60 * 60);
} catch (EmptyResult) {}
}
2024-03-04 19:55:49 -03:00
$centrosCostos = $centroCostoRepository->fetchAll();
return $view->render($response, 'contabilidad.cartolas.diaria', compact('inmobiliarias', 'centrosCostos'));
2024-02-12 09:52:48 -03:00
}
2024-07-17 22:33:33 -04:00
public function importar(ServerRequestInterface $request, ResponseInterface $response, View $view,
Repository\Inmobiliaria $inmobiliariaRepository,
Repository\Contabilidad\Banco $bancoRepository): ResponseInterface
{
$inmobiliarias = [];
try {
$inmobiliarias = $inmobiliariaRepository->fetchAll('razon');
} catch (EmptyResult) {}
$bancos = [];
try {
$bancos = $bancoRepository->fetchAll('nombre');
} catch (EmptyResult) {}
return $view->render($response, 'contabilidad.cartolas.import', compact('inmobiliarias', 'bancos'));
}
2024-03-26 09:38:20 -03:00
public function depositos(ServerRequestInterface $request, ResponseInterface $response, View $view,
Service\Redis $redisService,
Repository\Inmobiliaria $inmobiliariaRepository,
Repository\Contabilidad\Deposito $dapRepository): ResponseInterface
2024-02-13 01:16:17 -03:00
{
$redisKey = 'inmobiliarias';
$inmobiliarias = [];
try {
$inmobiliarias = $this->fetchRedis($redisService, $redisKey);
} catch (EmptyRedis) {
try {
$inmobiliarias = $inmobiliariaRepository->fetchAll();
2024-02-13 01:16:17 -03:00
$this->saveRedis($redisService, $redisKey, $inmobiliarias, 30 * 24 * 60 * 60);
} catch (EmptyResult) {}
}
$depositos = [];
try {
$depositos = $dapRepository->fetchAll();
} catch (EmptyResult) {}
2024-02-13 12:08:25 -03:00
$fecha = new DateTimeImmutable('today');
2024-03-26 09:38:20 -03:00
$activos = array_filter($depositos, function(Model\Contabilidad\Deposito $deposito) use ($fecha) {
2024-02-13 12:08:25 -03:00
return $deposito->termino >= $fecha;
});
$mes = $fecha->sub(new DateInterval('P1M'));
2024-03-26 09:38:20 -03:00
$vencidos = array_filter($depositos, function(Model\Contabilidad\Deposito $deposito) use ($fecha, $mes) {
2024-02-13 12:08:25 -03:00
return $deposito->termino < $fecha and $deposito->termino >= $mes;
});
return $view->render($response, 'contabilidad.depositos', compact('inmobiliarias', 'activos', 'vencidos'));
2024-02-13 01:16:17 -03:00
}
public function tesoreria(ServerRequestInterface $request, ResponseInterface $response, View $view,
2024-02-23 22:37:09 -03:00
Service\Contabilidad\Informe\Tesoreria $contabilidadService,
2024-02-13 01:16:17 -03:00
string $fecha = 'today'): ResponseInterface
{
$fecha = new DateTimeImmutable($fecha);
2024-07-17 22:33:33 -04:00
$anterior = $contabilidadService->getOutput()->getAnterior($fecha);
2024-04-05 14:48:17 -03:00
$yesterday = new DateTimeImmutable('yesterday');
$siguiente = null;
2024-04-05 16:35:18 -03:00
if ($yesterday > $fecha) {
2024-04-05 14:48:17 -03:00
$siguiente = $fecha->add(new DateInterval('P1D'));
if ($siguiente->format('N') === '6') {
$siguiente = $fecha->add(new DateInterval('P3D'));
}
}
2024-07-17 22:33:33 -04:00
$informes = $contabilidadService->getOutput()->build($fecha);
2024-02-23 22:37:09 -03:00
$filename = "Informe de Tesorería {$fecha->format('d.m.Y')}";
2024-04-05 14:48:17 -03:00
return $view->render($response, 'contabilidad.informes.tesoreria', compact('fecha', 'anterior', 'siguiente', 'informes', 'filename'));
2024-06-18 22:41:03 -04:00
}
2024-07-17 22:33:33 -04:00
/*public function semanal(ServerRequestInterface $request, ResponseInterface $response, View $view,
2024-06-18 22:41:03 -04:00
Service\Contabilidad\Informe\Semanal $semanalService,
string $fecha = 'today'): ResponseInterface
{
2024-07-17 22:33:33 -04:00
}*/
2024-03-21 22:09:15 -03:00
public function cuadratura(ServerRequestInterface $request, ResponseInterface $response, View $view,
Repository\Inmobiliaria $inmobiliariaRepository): ResponseInterface
{
$inmobiliarias = [];
try {
$inmobiliarias = $inmobiliariaRepository->fetchAll('razon');
} catch (EmptyResult) {}
return $view->render($response, 'contabilidad.cuadratura', compact('inmobiliarias'));
}
2024-02-12 09:52:48 -03:00
}