Simplificacion de Cartola diaria

This commit is contained in:
Juan Pablo Vial
2024-02-08 00:06:29 -03:00
parent 38962cb9cf
commit 1078f4c188
4 changed files with 57 additions and 77 deletions

View File

@ -33,14 +33,7 @@ return [
Incoviba\Service\Cartola::class => function(ContainerInterface $container) {
return (new Incoviba\Service\Cartola(
$container->get(Psr\Http\Message\StreamFactoryInterface::class),
$container->get(Incoviba\Common\Define\Contabilidad\Exporter::class)
))
->register('security', $container->get(Incoviba\Service\Cartola\Security::class))
->register('itau', $container->get(Incoviba\Service\Cartola\Itau::class))
->register('santander', $container->get(Incoviba\Service\Cartola\Santander::class));
},
Incoviba\Service\Cartola\Diaria::class => function(ContainerInterface $container) {
return (new Incoviba\Service\Cartola\Diaria(
$container->get(Incoviba\Common\Define\Contabilidad\Exporter::class),
$container->get(Incoviba\Repository\Inmobiliaria\Cuenta::class),
$container->get(Incoviba\Repository\Movimiento::class),
$container->get(Incoviba\Repository\Cartola::class)
@ -58,6 +51,7 @@ return [
},
Incoviba\Service\Contabilidad\Nubox::class => function(ContainerInterface $container) {
return new Incoviba\Service\Contabilidad\Nubox(
$container->get(Psr\Log\LoggerInterface::class),
$container->get(Incoviba\Repository\Nubox::class),
$container->get(Incoviba\Service\Redis::class),
new GuzzleHttp\Client(),

View File

@ -53,7 +53,7 @@ class Contabilidad extends Controller
public function procesarCartolaDiaria(ServerRequestInterface $request, ResponseInterface $response,
Repository\Inmobiliaria $inmobiliariaRepository,
Repository\Banco $bancoRepository,
Service\Cartola\Diaria $cartolaService): ResponseInterface
Service\Cartola $cartolaService): ResponseInterface
{
$body = $request->getParsedBody();
$output = [
@ -65,7 +65,7 @@ class Contabilidad extends Controller
$banco = $bancoRepository->fetchById($body['banco_id']);
$fecha = new DateTimeImmutable($body['fecha']);
$file = $request->getUploadedFiles()['file'];
$output['cartola'] = $cartolaService->process($inmobiliaria, $banco, $fecha, $file);
$output['cartola'] = $cartolaService->diaria($inmobiliaria, $banco, $fecha, $file);
} catch (EmptyResult $exception) {
$this->logger->debug($exception);
}

View File

@ -2,15 +2,21 @@
namespace Incoviba\Service;
use DateTimeInterface;
use DateTimeImmutable;
use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Message\UploadedFileInterface;
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
{
public function __construct(protected StreamFactoryInterface $streamFactory, protected Exporter $exporter) {}
public function __construct(protected StreamFactoryInterface $streamFactory, protected Exporter $exporter,
protected Repository\Inmobiliaria\Cuenta $cuentaRepository,
protected Repository\Movimiento $movimientoRepository,
protected Repository\Cartola $cartolaRepository) {}
protected array $bancos;
public function register(string $name, Banco $banco): Cartola
@ -26,4 +32,50 @@ class Cartola
{
return $this->exporter->export($inmobiliaria, $banco, $mes, $movimientos);
}
public function diaria(Model\Inmobiliaria $inmobiliaria, Model\Banco $banco, DateTimeInterface $fecha, UploadedFileInterface $file): array
{
$cuenta = $this->cuentaRepository->fetchByInmobiliariaAndBanco($inmobiliaria->rut, $banco->id);
$ms = $this->bancos[strtolower($banco->nombre)]->process($file);
$ms = array_reverse($ms);
$c = array_shift($ms);
$cargos = 0;
$abonos = 0;
$saldo = $c['saldo'];
$movimientos = [];
foreach ($ms as $m) {
$m['cuenta_id'] = $cuenta->id;
try {
$movimiento = $this->movimientoRepository
->fetchByCuentaAndFechaAndMonto(
$cuenta->id,
new DateTimeImmutable($m['fecha']),
$m['cargo'] ?? $m['abono']
);
} catch (Exception\EmptyResult) {
$movimiento = $this->movimientoRepository->create($m);
$movimiento = $this->movimientoRepository->save($movimiento);
}
$movimientos []= $movimiento;
if ($movimiento->fecha === $fecha) {
$cargos += $movimiento->cargo;
$abonos += $movimiento->abono;
}
$saldo = $m['saldo'];
}
try {
$cartola = $this->cartolaRepository->fetchByCuentaAndFecha($cuenta->id, $fecha);
} catch (Exception\EmptyResult) {
$cartola = $this->cartolaRepository->create([
'cuenta_id' => $cuenta->id,
'fecha' => $fecha->format('Y-m-d'),
'cargos' => $cargos,
'abonos' => $abonos,
'saldo' => $saldo
]);
$cartola = $this->cartolaRepository->save($cartola);
}
return compact('cartola', 'movimientos');
}
}

View File

@ -1,66 +0,0 @@
<?php
namespace Incoviba\Service\Cartola;
use DateTimeInterface;
use DateTimeImmutable;
use Psr\Http\Message\UploadedFileInterface;
use Incoviba\Common\Implement\Exception\EmptyResult;
use Incoviba\Common\Define;
use Incoviba\Model;
use Incoviba\Repository;
class Diaria
{
public function __construct(protected Repository\Inmobiliaria\Cuenta $cuentaRepository,
protected Repository\Movimiento $movimientoRepository,
protected Repository\Cartola $cartolaRepository) {}
protected array $bancos;
public function register(string $name, Define\Cartola\Banco $banco): Diaria
{
$this->bancos[$name] = $banco;
return $this;
}
public function process(Model\Inmobiliaria $inmobiliaria, Model\Banco $banco, DateTimeInterface $fecha, UploadedFileInterface $file): array
{
$cuenta = $this->cuentaRepository->fetchByInmobiliariaAndBanco($inmobiliaria->rut, $banco->id);
$ms = $this->bancos[strtolower($banco->nombre)]->process($file);
$ms = array_reverse($ms);
$c = array_shift($ms);
$cargos = 0;
$abonos = 0;
$saldo = $c['saldo'];
$movimientos = [];
foreach ($ms as $m) {
$m['cuenta_id'] = $cuenta->id;
try {
$movimiento = $this->movimientoRepository->fetchByCuentaAndFechaAndMonto($cuenta->id, new DateTimeImmutable($m['fecha']), $m['cargo'] ?? $m['abono']);
} catch (EmptyResult) {
$movimiento = $this->movimientoRepository->create($m);
$movimiento = $this->movimientoRepository->save($movimiento);
}
$movimientos []= $movimiento;
if ($movimiento->fecha === $fecha) {
$cargos += $movimiento->cargo;
$abonos += $movimiento->abono;
}
$saldo = $m['saldo'];
}
try {
$cartola = $this->cartolaRepository->fetchByCuentaAndFecha($cuenta->id, $fecha);
} catch (EmptyResult) {
$cartola = $this->cartolaRepository->create([
'cuenta_id' => $cuenta->id,
'fecha' => $fecha->format('Y-m-d'),
'cargos' => $cargos,
'abonos' => $abonos,
'saldo' => $saldo
]);
$cartola = $this->cartolaRepository->save($cartola);
}
return compact('cartola', 'movimientos');
}
}