diff --git a/app/src/Controller/API/Ventas/MediosPago/Toku.php b/app/src/Controller/API/Ventas/MediosPago/Toku.php index 4c7fcad..1c45f0e 100644 --- a/app/src/Controller/API/Ventas/MediosPago/Toku.php +++ b/app/src/Controller/API/Ventas/MediosPago/Toku.php @@ -31,9 +31,9 @@ class Toku extends Controller ]; try { $venta = $ventaService->getById($venta_id); - $cuotas = $tokuService->sendCuotas($venta, $input['cuotas']); + $cuotas = $tokuService->sendCuotas($venta, $input['cuotas'] ?? []); $output['cuotas'] = array_map(function($row) { return $row['cuota_id']; }, $cuotas); - if (count($cuotas) < count($input['cuotas'])) { + if (count($cuotas) < count($input['cuotas'] ?? [])) { $output['partial'] = true; } else { $output['success'] = true; @@ -111,4 +111,21 @@ class Toku extends Controller $output = $tokuService->reset(); return $this->withJson($response, $output); } + public function enqueue(ServerRequestInterface $request, ResponseInterface $response, + Service\Queue $queueService, Service\Venta\MediosPago\Toku $tokuService): ResponseInterface + { + $input = $request->getParsedBody(); + $output = [ + 'input' => $input, + 'success' => false + ]; + $queue = $tokuService->queue($input['venta_ids'] ?? []); + if (count($queue) > 0) { + foreach ($queue as $job) { + $queueService->enqueue($job); + } + $output['success'] = true; + } + return $this->withJson($response, $output); + } } diff --git a/app/src/Service/Venta/MediosPago/Toku.php b/app/src/Service/Venta/MediosPago/Toku.php index 75e90fa..67f243d 100644 --- a/app/src/Service/Venta/MediosPago/Toku.php +++ b/app/src/Service/Venta/MediosPago/Toku.php @@ -261,6 +261,21 @@ class Toku extends Ideal\Service } return $output; } + public function queue(array $venta_ids): array + { + $queues = []; + foreach ($venta_ids as $venta_id) { + if ($this->subscription->queue($venta_id)) { + $queues []= [ + 'type' => 'request', + 'url' => "/api/external/toku/cuotas/{$venta_id}", + 'method' => 'post', + 'body' => [] + ]; + } + } + return $queues; + } /** * @param array $request diff --git a/app/src/Service/Venta/MediosPago/Toku/Subscription.php b/app/src/Service/Venta/MediosPago/Toku/Subscription.php index 101b624..a7edf8d 100644 --- a/app/src/Service/Venta/MediosPago/Toku/Subscription.php +++ b/app/src/Service/Venta/MediosPago/Toku/Subscription.php @@ -94,6 +94,21 @@ class Subscription extends AbstractEndPoint } return compact('existingSubscriptions', 'missingVentas'); } + public function queue(int $venta_id): bool + { + try { + $venta = $this->ventaService->getById($venta_id); + } catch (Read $exception) { + $this->logger->warning($exception); + return false; + } + try { + $subscription = $this->subscriptionRepsitory->fetchByVenta($venta_id); + return false; + } catch (EmptyResult) { + return true; + } + } public function save(array $data): bool { diff --git a/cli/setup/settings/commands.php b/cli/setup/settings/commands.php index 944e416..dd77bf5 100644 --- a/cli/setup/settings/commands.php +++ b/cli/setup/settings/commands.php @@ -17,6 +17,7 @@ return [ 'queue' => Incoviba\Command\Queue::class, 'external:services' => Incoviba\Command\ExternalServices::class, 'external:toku:reset' => Incoviba\Command\Ventas\MedioPagos\Toku\Reset::class, + 'external:toku:enqueue' => Incoviba\Command\Ventas\MedioPagos\Toku\Enqueue::class ]; } ]; diff --git a/cli/src/Command/Ventas/MedioPagos/Toku/Enqueue.php b/cli/src/Command/Ventas/MedioPagos/Toku/Enqueue.php new file mode 100644 index 0000000..02ea6e8 --- /dev/null +++ b/cli/src/Command/Ventas/MedioPagos/Toku/Enqueue.php @@ -0,0 +1,24 @@ +addArgument('venta_ids', Console\Input\InputArgument::REQUIRED, 'Venta IDs separated by |'); + } + protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output): int + { + $this->logger->debug("Running {$this->getName()}"); + $uri = '/api/external/toku/enqueue'; + $output->writeln("POST {$uri}"); + $body = ['venta_ids' => explode('|', $input->getArgument('venta_ids'))]; + $response = $this->client->post($uri, ['json' => $body]); + $output->writeln("Response Code: {$response->getStatusCode()}"); + return Console\Command\Command::SUCCESS; + } +}