diff --git a/api/common/Middleware/Consolidar.php b/api/common/Middleware/Consolidar.php index d3e82b3..74cb8f6 100644 --- a/api/common/Middleware/Consolidar.php +++ b/api/common/Middleware/Consolidar.php @@ -13,7 +13,7 @@ class Consolidar { } public function __invoke(Request $request, Handler $handler): Response { if (!$this->service->isConsolidado()) { - $this->service->consolidar(); + $this->service->queue(); } return $handler->handle($request); } diff --git a/api/common/Service/Consolidar.php b/api/common/Service/Consolidar.php index 5be69f1..427eae4 100644 --- a/api/common/Service/Consolidar.php +++ b/api/common/Service/Consolidar.php @@ -2,6 +2,7 @@ namespace Contabilidad\Common\Service; use Carbon\Carbon; +use Contabilidad\Queue; use \Model; use ProVM\Common\Factory\Model as ModelFactory; use Contabilidad\Consolidado; @@ -21,24 +22,30 @@ class Consolidar { return $this->cuentas; } - public function isConsolidado() { - $consolidado = true; + public function isConsolidado(): bool { $cuentas = $this->getCuentas(); if ($cuentas === null) { - return false; + return true; } foreach ($cuentas as $cuenta) { $transacciones = $cuenta->hasTransacciones(); if (!$transacciones) { continue; } - $consolidados = $cuenta->hasConsolidados(); - if (!$consolidados and $transacciones) { - $consolidado = false; - break; + $pendientes = $cuenta->hasConsolidadosPending(); + if ($pendientes) { + return false; } } - return $consolidado; + return true; + } + public function queue() { + $data = [ + 'command' => 'consolidar', + 'created' => Carbon::now()->format('Y-m-d H:i:s') + ]; + $queue = Queue::add($this->factory, $data); + $queue->save(); } public function consolidar() { ini_set('max_execution_time', 60*5); diff --git a/api/setup/middlewares/03_consolidar.php b/api/setup/middlewares/03_consolidar.php new file mode 100644 index 0000000..9bb8d83 --- /dev/null +++ b/api/setup/middlewares/03_consolidar.php @@ -0,0 +1,4 @@ +add(new Consolidar($app->getContainer()->get(\Contabilidad\Common\Service\Consolidar::class))); diff --git a/api/src/Cuenta.php b/api/src/Cuenta.php index 7fa3538..67f32f2 100644 --- a/api/src/Cuenta.php +++ b/api/src/Cuenta.php @@ -60,10 +60,19 @@ class Cuenta extends Model { return $this->consolidados; } public function hasConsolidados(): bool { + $t = Carbon::now(); return (bool) Model::factory(Consolidado::class) ->whereEqual('cuenta_id', $this->id) ->count('id'); } + public function hasConsolidadosPending(): bool { + $t = Carbon::now(); + return !(bool) Model::factory(Consolidado::class) + ->whereEqual('cuenta_id', $this->id) + ->whereGte('fecha', $t->copy()->subMonthNoOverflow()->startOfMonth()->format('Y-m-d')) + ->orderByDesc('fecha') + ->count('id'); + } public function hasTransacciones(): bool { return (bool) Model::factory(Transaccion::class) ->select('transacciones.*') diff --git a/console/common/Command/Consolidar.php b/console/common/Command/Consolidar.php index d9cedb4..3a2e43f 100644 --- a/console/common/Command/Consolidar.php +++ b/console/common/Command/Consolidar.php @@ -22,16 +22,16 @@ class Consolidar extends Command { } public function execute(InputInterface $input, OutputInterface $output) { - error_log('Starting Consolidar'); try { $response = $this->getClient()->get('/consolidar'); if ($response->getStatusCode() === 200) { - return 0; + return Command::SUCCESS; } - return $response->getStatusCode(); + error_log($response->getReasonPhrase()); + return Command::FAILURE; } catch (\Exception $e) { error_log($e); - return $e->getCode(); + return Command::FAILURE; } } }