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)}}
+
+
+@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
{