diff --git a/app/setup/setups/services.php b/app/setup/setups/services.php index d998cdd..fa72cdc 100644 --- a/app/setup/setups/services.php +++ b/app/setup/setups/services.php @@ -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(), diff --git a/app/src/Controller/API/Contabilidad.php b/app/src/Controller/API/Contabilidad.php index 47552ff..5f8bc56 100644 --- a/app/src/Controller/API/Contabilidad.php +++ b/app/src/Controller/API/Contabilidad.php @@ -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); } diff --git a/app/src/Service/Cartola.php b/app/src/Service/Cartola.php index 231ba7a..295ca89 100644 --- a/app/src/Service/Cartola.php +++ b/app/src/Service/Cartola.php @@ -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'); + } } diff --git a/app/src/Service/Cartola/Diaria.php b/app/src/Service/Cartola/Diaria.php deleted file mode 100644 index 0bff8ec..0000000 --- a/app/src/Service/Cartola/Diaria.php +++ /dev/null @@ -1,66 +0,0 @@ -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'); - } -}