diff --git a/app/src/Controller/Ventas/Cuotas.php b/app/src/Controller/Ventas/Cuotas.php index 3d7e11f..419aca8 100644 --- a/app/src/Controller/Ventas/Cuotas.php +++ b/app/src/Controller/Ventas/Cuotas.php @@ -6,6 +6,7 @@ use Psr\Http\Message\ServerRequestInterface; use DateTimeImmutable; use Incoviba\Common\Alias\View; use Incoviba\Common\Implement\Exception\EmptyResult; +use Incoviba\Exception\ServiceAction\Create; use Incoviba\Model; use Incoviba\Repository; use Incoviba\Service; @@ -84,13 +85,15 @@ class Cuotas return $view->render($response, 'ventas.pies.cuotas.add', compact('pie', 'venta', 'bancos')); } public function doAdd(ServerRequestInterface $request, ResponseInterface $response, Service\Venta\Pie $pieService, - Repository\Venta $ventaRepository, Service\Valor $valorService, int $pie_id): ResponseInterface + Repository\Venta $ventaRepository, Service\Valor $valorService, + Service\Queue $queueService, int $pie_id): ResponseInterface { $body = $request->getParsedBody(); $pie = $pieService->getById($pie_id); $venta = $ventaRepository->fetchByPie($pie_id); $start = count($pie->cuotas(vigentes: true)); $total = $pie->cuotas; + $cuotas = []; for ($i = $start; $i < $total; $i ++) { if ($body["banco{$i}"] === '') { continue; @@ -103,7 +106,17 @@ class Cuotas 'valor' => $valorService->clean(str_replace('.', '', $body["valor{$i}"])), 'numero' => $i + 1, ]; - $pieService->addCuota($data); + try { + $cuotas []= $pieService->addCuota($data)->id; + } catch (Create) {} + } + if (count($cuotas) > 0) { + $data = [ + 'type' => 'request', + 'action' => "/api/external/toku/cuotas/{$venta->id}", + 'body' => compact('cuotas') + ]; + $queueService->enqueue($data); } return $response->withHeader('Location', "/venta/{$venta->id}"); } diff --git a/app/src/Repository/Venta/TipoPago.php b/app/src/Repository/Venta/TipoPago.php index 0b2f365..54f2998 100644 --- a/app/src/Repository/Venta/TipoPago.php +++ b/app/src/Repository/Venta/TipoPago.php @@ -32,6 +32,11 @@ class TipoPago extends Ideal\Repository return $this->update($model, ['descripcion'], $new_data); } + /** + * @param string $descripcion + * @return Model\Venta\TipoPago + * @throws Implement\Exception\EmptyResult + */ public function fetchByDescripcion(string $descripcion): Model\Venta\TipoPago { $query = "SELECT * FROM `{$this->getTable()}` WHERE `descripcion` = ?"; diff --git a/app/src/Service/Venta/Cuota.php b/app/src/Service/Venta/Cuota.php index cfc9b28..5647c70 100644 --- a/app/src/Service/Venta/Cuota.php +++ b/app/src/Service/Venta/Cuota.php @@ -1,12 +1,14 @@ cuotaRepository->fetchVigenteByPie($pie_id); } + /** + * @param array $data + * @return Model\Venta\Cuota + * @throws Create + */ public function add(array $data): Model\Venta\Cuota { - $tipoPago = $this->tipoPagoRepository->fetchByDescripcion('cheque'); + try { + $tipoPago = $this->tipoPagoRepository->fetchByDescripcion('cheque'); + } catch (EmptyResult $exception) { + throw new Create(__CLASS__, $exception); + } $fields = array_flip([ 'fecha', 'banco', @@ -112,8 +123,11 @@ class Cuota extends Ideal\Service $mapped_data = $filtered_data; $mapped_data['valor_$'] = $mapped_data['valor']; unset($mapped_data['valor']); - $cuota = $this->cuotaRepository->create($mapped_data); - $this->cuotaRepository->save($cuota); - return $cuota; + try { + $cuota = $this->cuotaRepository->create($mapped_data); + return $this->cuotaRepository->save($cuota); + } catch (PDOException $exception) { + throw new Create(__CLASS__, $exception); + } } } diff --git a/app/src/Service/Venta/Pago.php b/app/src/Service/Venta/Pago.php index 8d83b29..d1e18db 100644 --- a/app/src/Service/Venta/Pago.php +++ b/app/src/Service/Venta/Pago.php @@ -4,6 +4,7 @@ namespace Incoviba\Service\Venta; use DateTimeInterface; use DateTimeImmutable; use DateMalformedStringException; +use Incoviba\Exception\ServiceAction\Create; use Incoviba\Exception\ServiceAction\Read; use Incoviba\Exception\ServiceAction\Update; use PDOException; @@ -129,6 +130,11 @@ class Pago } } + /** + * @param array $data + * @return Model\Venta\Pago + * @throws Create + */ public function add(array $data): Model\Venta\Pago { if (array_key_exists('fecha', $data)) { @@ -146,16 +152,24 @@ class Pago $filtered_data = $this->pagoRepository->filterData($data); - $pago = $this->pagoRepository->create($filtered_data); - $pago = $this->pagoRepository->save($pago); + try { + $pago = $this->pagoRepository->create($filtered_data); + $pago = $this->pagoRepository->save($pago); + } catch (PDOException $exception) { + throw new Create(__CLASS__, $exception); + } $tipoEstado = $this->tipoEstadoPagoRepository->fetchByDescripcion('no pagado'); - $estado = $this->estadoPagoRepository->create([ - 'pago' => $pago->id, - 'fecha' => $pago->fecha->format('Y-m-d'), - 'estado' => $tipoEstado->id - ]); - $estado = $this->estadoPagoRepository->save($estado); + try { + $estado = $this->estadoPagoRepository->create([ + 'pago' => $pago->id, + 'fecha' => $pago->fecha->format('Y-m-d'), + 'estado' => $tipoEstado->id + ]); + $estado = $this->estadoPagoRepository->save($estado); + } catch (PDOException $exception) { + throw new Create(__CLASS__, $exception); + } $pago->currentEstado = $estado; return $pago; } diff --git a/app/src/Service/Venta/Pie.php b/app/src/Service/Venta/Pie.php index 954de9b..f0339ad 100644 --- a/app/src/Service/Venta/Pie.php +++ b/app/src/Service/Venta/Pie.php @@ -53,6 +53,12 @@ class Pie throw new Create(__CLASS__, $exception); } } + + /** + * @param array $data + * @return Model\Venta\Cuota + * @throws Create + */ public function addCuota(array $data): Model\Venta\Cuota { return $this->cuotaService->add($data);