Simplificacion de Cartola diaria
This commit is contained in:
@ -33,14 +33,7 @@ return [
|
|||||||
Incoviba\Service\Cartola::class => function(ContainerInterface $container) {
|
Incoviba\Service\Cartola::class => function(ContainerInterface $container) {
|
||||||
return (new Incoviba\Service\Cartola(
|
return (new Incoviba\Service\Cartola(
|
||||||
$container->get(Psr\Http\Message\StreamFactoryInterface::class),
|
$container->get(Psr\Http\Message\StreamFactoryInterface::class),
|
||||||
$container->get(Incoviba\Common\Define\Contabilidad\Exporter::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\Repository\Inmobiliaria\Cuenta::class),
|
$container->get(Incoviba\Repository\Inmobiliaria\Cuenta::class),
|
||||||
$container->get(Incoviba\Repository\Movimiento::class),
|
$container->get(Incoviba\Repository\Movimiento::class),
|
||||||
$container->get(Incoviba\Repository\Cartola::class)
|
$container->get(Incoviba\Repository\Cartola::class)
|
||||||
@ -58,6 +51,7 @@ return [
|
|||||||
},
|
},
|
||||||
Incoviba\Service\Contabilidad\Nubox::class => function(ContainerInterface $container) {
|
Incoviba\Service\Contabilidad\Nubox::class => function(ContainerInterface $container) {
|
||||||
return new Incoviba\Service\Contabilidad\Nubox(
|
return new Incoviba\Service\Contabilidad\Nubox(
|
||||||
|
$container->get(Psr\Log\LoggerInterface::class),
|
||||||
$container->get(Incoviba\Repository\Nubox::class),
|
$container->get(Incoviba\Repository\Nubox::class),
|
||||||
$container->get(Incoviba\Service\Redis::class),
|
$container->get(Incoviba\Service\Redis::class),
|
||||||
new GuzzleHttp\Client(),
|
new GuzzleHttp\Client(),
|
||||||
|
@ -53,7 +53,7 @@ class Contabilidad extends Controller
|
|||||||
public function procesarCartolaDiaria(ServerRequestInterface $request, ResponseInterface $response,
|
public function procesarCartolaDiaria(ServerRequestInterface $request, ResponseInterface $response,
|
||||||
Repository\Inmobiliaria $inmobiliariaRepository,
|
Repository\Inmobiliaria $inmobiliariaRepository,
|
||||||
Repository\Banco $bancoRepository,
|
Repository\Banco $bancoRepository,
|
||||||
Service\Cartola\Diaria $cartolaService): ResponseInterface
|
Service\Cartola $cartolaService): ResponseInterface
|
||||||
{
|
{
|
||||||
$body = $request->getParsedBody();
|
$body = $request->getParsedBody();
|
||||||
$output = [
|
$output = [
|
||||||
@ -65,7 +65,7 @@ class Contabilidad extends Controller
|
|||||||
$banco = $bancoRepository->fetchById($body['banco_id']);
|
$banco = $bancoRepository->fetchById($body['banco_id']);
|
||||||
$fecha = new DateTimeImmutable($body['fecha']);
|
$fecha = new DateTimeImmutable($body['fecha']);
|
||||||
$file = $request->getUploadedFiles()['file'];
|
$file = $request->getUploadedFiles()['file'];
|
||||||
$output['cartola'] = $cartolaService->process($inmobiliaria, $banco, $fecha, $file);
|
$output['cartola'] = $cartolaService->diaria($inmobiliaria, $banco, $fecha, $file);
|
||||||
} catch (EmptyResult $exception) {
|
} catch (EmptyResult $exception) {
|
||||||
$this->logger->debug($exception);
|
$this->logger->debug($exception);
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,21 @@
|
|||||||
namespace Incoviba\Service;
|
namespace Incoviba\Service;
|
||||||
|
|
||||||
use DateTimeInterface;
|
use DateTimeInterface;
|
||||||
|
use DateTimeImmutable;
|
||||||
use Psr\Http\Message\StreamFactoryInterface;
|
use Psr\Http\Message\StreamFactoryInterface;
|
||||||
use Psr\Http\Message\UploadedFileInterface;
|
use Psr\Http\Message\UploadedFileInterface;
|
||||||
use Incoviba\Common\Define\Cartola\Banco;
|
use Incoviba\Common\Define\Cartola\Banco;
|
||||||
use Incoviba\Common\Define\Contabilidad\Exporter;
|
use Incoviba\Common\Define\Contabilidad\Exporter;
|
||||||
|
use Incoviba\Common\Implement\Exception;
|
||||||
use Incoviba\Model;
|
use Incoviba\Model;
|
||||||
|
use Incoviba\Repository;
|
||||||
|
|
||||||
class Cartola
|
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;
|
protected array $bancos;
|
||||||
public function register(string $name, Banco $banco): Cartola
|
public function register(string $name, Banco $banco): Cartola
|
||||||
@ -26,4 +32,50 @@ class Cartola
|
|||||||
{
|
{
|
||||||
return $this->exporter->export($inmobiliaria, $banco, $mes, $movimientos);
|
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