Agregar Cartolas al importar, y chequeo de Cartolas faltantes

This commit is contained in:
Juan Pablo Vial
2024-08-27 14:44:40 -04:00
parent 8f682f7f13
commit f3d9b58ffb

View File

@ -57,13 +57,13 @@ class Cartola extends Service
$cartolaData = [
'cargos' => 0,
'abonos' => 0,
'saldo' => end($movimientos)->saldo
'saldo' => last($movimientos)->saldo
];
foreach ($movimientos as $movimiento) {
$cartolaData['cargos'] += $movimiento->cargo;
$cartolaData['abonos'] += $movimiento->abono;
}
$this->buildCartola($cuenta, end($movimientos)->fecha, $cartolaData);
$this->buildCartola($cuenta, last($movimientos)->fecha, $cartolaData);
}
$cartola = $this->cartolaRepository->fetchByCuentaAndFecha($cuenta->id, $fecha);
return compact('cartola', 'movimientos');
@ -109,6 +109,31 @@ class Cartola extends Service
}
$this->movimientoService->add($dataMovimiento);
}
$fechas = array_unique(array_map(function($movimiento) {
return $movimiento['fecha']->format('Y-m-d');
}, $movimientos));
foreach ($fechas as $dia) {
try {
$this->cartolaRepository->fetchByCuentaAndFecha($cuenta->id, new DateTimeImmutable($dia));
continue;
} catch (Exception\EmptyResult) {}
$movs = array_filter($movimientos, function($movimiento) use ($dia) {
return $movimiento['fecha']->format('Y-m-d') === $dia;
});
$cargos = array_sum(array_map(function($movimiento) {
return $movimiento['cargo'];
}, $movs));
$abonos = array_sum(array_map(function($movimiento) {
return $movimiento['abono'];
}, $movs));
$saldo = last($movs)['saldo'];
$cartolaData = [
'cargos' => $cargos,
'abonos' => $abonos,
'saldo' => $saldo
];
$this->buildCartola($cuenta, new DateTimeImmutable($dia), $cartolaData);
}
$inmobiliaria = $cuenta->inmobiliaria;
return array_map(function($movimiento) use ($inmobiliaria) {
@ -116,6 +141,66 @@ class Cartola extends Service
return $movimiento;
}, $movimientos);
}
public function check(): array
{
try {
$cuentas = $this->cuentaRepository->fetchAll();
$fechas = [];
foreach ($cuentas as $cuenta) {
$fechas[$cuenta->id] = $this->checkForCuenta($cuenta);
}
return $fechas;
} catch (Exception\EmptyResult) {
return [];
}
}
public function checkForCuenta(Model\Inmobiliaria\Cuenta $cuenta): array
{
$cartolas = $this->cartolaRepository->fetchByCuenta($cuenta->id);
$movimientos = $this->movimientoRepository->fetchByCuenta($cuenta->id);
$fechasMovimientos = array_unique(array_map(function(Model\Contabilidad\Movimiento $movimiento) {
return $movimiento->fecha->format('Y-m-d');
}, $movimientos));
$fechasCartolas = array_map(function(Model\Contabilidad\Cartola $cartola) {
return $cartola->fecha->format('Y-m-d');
}, $cartolas);
$fechas = array_diff($fechasMovimientos, $fechasCartolas);
return array_values($fechas);
}
public function update(array $cuentas): array
{
$cartolas = [];
foreach ($cuentas as $cuenta_id => $fechas) {
$cuenta = $this->cuentaRepository->fetchById($cuenta_id);
$cartolas[$cuenta_id] = $this->updateForCuenta($cuenta, $fechas);
}
return $cartolas;
}
public function updateForCuenta(Model\Inmobiliaria\Cuenta $cuenta, array $fechas): array
{
$cartolas = [];
foreach ($fechas as $fecha) {
$cartolas []= $this->updateForCuentaAndFecha($cuenta, new DateTimeImmutable($fecha));
}
return $cartolas;
}
public function updateForCuentaAndFecha(Model\Inmobiliaria\Cuenta $cuenta, DateTimeInterface $fecha): Model\Contabilidad\Cartola
{
try {
return $this->cartolaRepository->fetchByCuentaAndFecha($cuenta->id, $fecha);
} catch (Exception\EmptyResult) {}
$movimientos = $this->movimientoRepository->fetchByCuentaAndFecha($cuenta->id, $fecha);
$cartolaData = [
'cargos' => array_sum(array_map(function(Model\Contabilidad\Movimiento $movimiento) {
return $movimiento->cargo;
}, $movimientos)),
'abonos' => array_sum(array_map(function(Model\Contabilidad\Movimiento $movimiento) {
return $movimiento->abono;
}, $movimientos)),
'saldo' => last($movimientos)->saldo
];
return $this->buildCartola($cuenta, $fecha, $cartolaData);
}
protected function getMovimientosDiarios(Model\Contabilidad\Banco $banco, UploadedFileInterface $file): array
{