From cb2edb1543c1c36b17d130d23027d623f2e17cbf Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Mon, 18 Nov 2024 23:25:20 -0300 Subject: [PATCH] Agregar Bono Pie --- app/resources/routes/04_ventas.php | 3 + app/resources/routes/api/ventas.php | 3 + app/resources/routes/ventas/pies.php | 7 +++ app/resources/routes/ventas/pies/bonos.php | 6 ++ .../views/ventas/pies/bonos/add.blade.php | 61 +++++++++++++++++++ app/src/Controller/API/Ventas/Bonos.php | 42 +++++++++++++ app/src/Controller/Ventas/Bonos.php | 17 ++++++ app/src/Repository/Venta/BonoPie.php | 2 +- app/src/Service/Venta/BonoPie.php | 19 +++++- 9 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 app/resources/routes/ventas/pies/bonos.php create mode 100644 app/resources/views/ventas/pies/bonos/add.blade.php create mode 100644 app/src/Controller/API/Ventas/Bonos.php create mode 100644 app/src/Controller/Ventas/Bonos.php diff --git a/app/resources/routes/04_ventas.php b/app/resources/routes/04_ventas.php index e094508..625f139 100644 --- a/app/resources/routes/04_ventas.php +++ b/app/resources/routes/04_ventas.php @@ -28,6 +28,9 @@ $app->group('/venta/{venta_id:[0-9]+}', function($app) { }); $app->get('[/]', [Ventas::class, 'pie']); }); + $app->group('/bono_pie', function($app) { + $app->get('/add[/]', [Ventas\Bonos::class, 'add']); + }); $app->group('/escritura', function($app) { $app->get('/add[/]', [Ventas\Escrituras::class, 'add']); }); diff --git a/app/resources/routes/api/ventas.php b/app/resources/routes/api/ventas.php index 1b8b8b8..954eb1c 100644 --- a/app/resources/routes/api/ventas.php +++ b/app/resources/routes/api/ventas.php @@ -31,6 +31,9 @@ $app->group('/venta/{venta_id}', function($app) { $app->post('/add[/]', [Ventas::class, 'addComentario']); $app->get('[/]', [Ventas::class, 'comentarios']); }); + $app->group('/bono_pie', function($app) { + $app->post('/add[/]', [Ventas\Bonos::class, 'add']); + }); $app->group('/escritura', function($app) { $app->post('/add[/]', [Ventas\Escrituras::class, 'add']); }); diff --git a/app/resources/routes/ventas/pies.php b/app/resources/routes/ventas/pies.php index 25bb08a..a0e756d 100644 --- a/app/resources/routes/ventas/pies.php +++ b/app/resources/routes/ventas/pies.php @@ -10,4 +10,11 @@ $app->group('/pie/{pie_id}', function($app) { }); $app->get('[/]', [Pies::class, 'cuotas']); }); + $files = new FilesystemIterator(implode(DIRECTORY_SEPARATOR, [__DIR__, 'pies'])); + foreach ($files as $file) { + if ($file->isDir()) { + continue; + } + include_once $file->getRealPath(); + } }); diff --git a/app/resources/routes/ventas/pies/bonos.php b/app/resources/routes/ventas/pies/bonos.php new file mode 100644 index 0000000..93b0970 --- /dev/null +++ b/app/resources/routes/ventas/pies/bonos.php @@ -0,0 +1,6 @@ +group('/bono_pie', function($app) { + $app->get('/add[/]', [Bonos::class, 'add']); +}); diff --git a/app/resources/views/ventas/pies/bonos/add.blade.php b/app/resources/views/ventas/pies/bonos/add.blade.php new file mode 100644 index 0000000..b2640e9 --- /dev/null +++ b/app/resources/views/ventas/pies/bonos/add.blade.php @@ -0,0 +1,61 @@ +@extends('ventas.base') + +@section('venta_subtitle') + Agregar Bono - Pie +@endsection + +@section('venta_content') +
+

Valor Promesa {{$format->ufs($venta->valor)}}

+ @if (isset($venta->formaPago()->pie)) +

Valor Anticipo {{$format->ufs($venta->formaPago()->pie->valor)}}

+ @endif +

Valor 10% {{$format->ufs($venta->valor * 0.1)}}

+
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
UF
+
+
+ +
+@endsection + +@push('page_scripts') + +@endpush diff --git a/app/src/Controller/API/Ventas/Bonos.php b/app/src/Controller/API/Ventas/Bonos.php new file mode 100644 index 0000000..dce6194 --- /dev/null +++ b/app/src/Controller/API/Ventas/Bonos.php @@ -0,0 +1,42 @@ +getParsedBody(); + $output = [ + 'venta_id' => $venta_id, + 'input' => $input, + 'bono' => null, + 'success' => false + ]; + try { + $venta = $ventaRepository->fetchById($venta_id); + $input['venta_id'] = $venta->id; + $uf = $ufService->get(new DateTimeImmutable($input['fecha'])); + $input['valor'] = $input['valor'] * $uf; + $input['valor'] = $valorService->clean($input['valor']); + $input['uf'] = $uf; + $bono = $bonoPieService->add($input); + $ventaRepository->edit($venta, ['bono_pie' => $bono->id]); + $output['bono'] = $bono; + $output['success'] = true; + } catch (EmptyResult) {} + return $this->withJson($response, $output); + } +} diff --git a/app/src/Controller/Ventas/Bonos.php b/app/src/Controller/Ventas/Bonos.php new file mode 100644 index 0000000..510f31a --- /dev/null +++ b/app/src/Controller/Ventas/Bonos.php @@ -0,0 +1,17 @@ +getById($venta_id); + return $view->render($response, 'ventas.pies.bonos.add', compact('venta')); + } +} diff --git a/app/src/Repository/Venta/BonoPie.php b/app/src/Repository/Venta/BonoPie.php index eb1cb3a..672ff5b 100644 --- a/app/src/Repository/Venta/BonoPie.php +++ b/app/src/Repository/Venta/BonoPie.php @@ -16,7 +16,7 @@ class BonoPie extends Ideal\Repository public function create(?array $data = null): Define\Model { - $map = (new Implement\Repository\MapperParser()) + $map = (new Implement\Repository\MapperParser(['valor'])) ->register('pago', (new Implement\Repository\Mapper()) ->setFunction(function($data) { return $this->pagoRepository->fetchById($data['pago']); diff --git a/app/src/Service/Venta/BonoPie.php b/app/src/Service/Venta/BonoPie.php index 04f2b79..51dd1e5 100644 --- a/app/src/Service/Venta/BonoPie.php +++ b/app/src/Service/Venta/BonoPie.php @@ -1,18 +1,31 @@ bonoPieRepository->filterData($data); - $bono = $this->bonoPieRepository->create($filteredData); - return $this->bonoPieRepository->save($bono); + if (!key_exists('pago', $filteredData)) { + $pago = $this->pagoService->add($filteredData); + $filteredData['pago'] = $pago->id; + } + try { + $bono = $this->bonoPieRepository->fetchByPago($filteredData['pago']); + } catch (EmptyResult) { + $bono = $this->bonoPieRepository->create($filteredData); + $bono = $this->bonoPieRepository->save($bono); + } + return $bono; } public function getByVenta(int $venta_id): Model\Venta\BonoPie {