Consolidar command

This commit is contained in:
2022-03-25 15:04:10 -03:00
parent dbad283e14
commit ee3133da72
5 changed files with 33 additions and 13 deletions

View File

@ -13,7 +13,7 @@ class Consolidar {
} }
public function __invoke(Request $request, Handler $handler): Response { public function __invoke(Request $request, Handler $handler): Response {
if (!$this->service->isConsolidado()) { if (!$this->service->isConsolidado()) {
$this->service->consolidar(); $this->service->queue();
} }
return $handler->handle($request); return $handler->handle($request);
} }

View File

@ -2,6 +2,7 @@
namespace Contabilidad\Common\Service; namespace Contabilidad\Common\Service;
use Carbon\Carbon; use Carbon\Carbon;
use Contabilidad\Queue;
use \Model; use \Model;
use ProVM\Common\Factory\Model as ModelFactory; use ProVM\Common\Factory\Model as ModelFactory;
use Contabilidad\Consolidado; use Contabilidad\Consolidado;
@ -21,24 +22,30 @@ class Consolidar {
return $this->cuentas; return $this->cuentas;
} }
public function isConsolidado() { public function isConsolidado(): bool {
$consolidado = true;
$cuentas = $this->getCuentas(); $cuentas = $this->getCuentas();
if ($cuentas === null) { if ($cuentas === null) {
return false; return true;
} }
foreach ($cuentas as $cuenta) { foreach ($cuentas as $cuenta) {
$transacciones = $cuenta->hasTransacciones(); $transacciones = $cuenta->hasTransacciones();
if (!$transacciones) { if (!$transacciones) {
continue; continue;
} }
$consolidados = $cuenta->hasConsolidados(); $pendientes = $cuenta->hasConsolidadosPending();
if (!$consolidados and $transacciones) { if ($pendientes) {
$consolidado = false; return false;
break;
} }
} }
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() { public function consolidar() {
ini_set('max_execution_time', 60*5); ini_set('max_execution_time', 60*5);

View File

@ -0,0 +1,4 @@
<?php
use Contabilidad\Common\Middleware\Consolidar;
$app->add(new Consolidar($app->getContainer()->get(\Contabilidad\Common\Service\Consolidar::class)));

View File

@ -60,10 +60,19 @@ class Cuenta extends Model {
return $this->consolidados; return $this->consolidados;
} }
public function hasConsolidados(): bool { public function hasConsolidados(): bool {
$t = Carbon::now();
return (bool) Model::factory(Consolidado::class) return (bool) Model::factory(Consolidado::class)
->whereEqual('cuenta_id', $this->id) ->whereEqual('cuenta_id', $this->id)
->count('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 { public function hasTransacciones(): bool {
return (bool) Model::factory(Transaccion::class) return (bool) Model::factory(Transaccion::class)
->select('transacciones.*') ->select('transacciones.*')

View File

@ -22,16 +22,16 @@ class Consolidar extends Command {
} }
public function execute(InputInterface $input, OutputInterface $output) { public function execute(InputInterface $input, OutputInterface $output) {
error_log('Starting Consolidar');
try { try {
$response = $this->getClient()->get('/consolidar'); $response = $this->getClient()->get('/consolidar');
if ($response->getStatusCode() === 200) { if ($response->getStatusCode() === 200) {
return 0; return Command::SUCCESS;
} }
return $response->getStatusCode(); error_log($response->getReasonPhrase());
return Command::FAILURE;
} catch (\Exception $e) { } catch (\Exception $e) {
error_log($e); error_log($e);
return $e->getCode(); return Command::FAILURE;
} }
} }
} }