Simplificacion de Cartola diaria
This commit is contained in:
@ -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(),
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
@ -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');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user