diff --git a/app/src/Service/Contabilidad/Cartola.php b/app/src/Service/Contabilidad/Cartola.php index f733f00..9601f61 100644 --- a/app/src/Service/Contabilidad/Cartola.php +++ b/app/src/Service/Contabilidad/Cartola.php @@ -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 {