diff --git a/app/resources/views/ventas/show.blade.php b/app/resources/views/ventas/show.blade.php
index ff7d258..0260d2e 100644
--- a/app/resources/views/ventas/show.blade.php
+++ b/app/resources/views/ventas/show.blade.php
@@ -32,46 +32,3 @@ $showPropietario = true;
@include('ventas.show.comentarios')
@endsection
-
-{{--@section('page_content')
-
-
-
-
-
- {{$venta->propiedad()->summary()}}
-
-
-
- @include('ventas.show.propietario')
-
-
-
-
-
- @include('ventas.show.propiedad')
- @include('ventas.show.detalle')
- @include('ventas.show.forma_pago', ['formaPago' => $venta->formaPago()])
- @include('ventas.show.escritura')
- @include('ventas.show.entrega')
- @include('ventas.show.comentarios')
-
-
-@endsection--}}
diff --git a/app/resources/views/ventas/show/forma_pago.blade.php b/app/resources/views/ventas/show/forma_pago.blade.php
index 201bff6..2f2a264 100644
--- a/app/resources/views/ventas/show/forma_pago.blade.php
+++ b/app/resources/views/ventas/show/forma_pago.blade.php
@@ -3,14 +3,14 @@
- @include('ventas.show.forma_pago.pie', ['pie' => $formaPago->pie])
- @include('ventas.show.forma_pago.escritura', ['escritura' => $formaPago->escritura])
- @include('ventas.show.forma_pago.anticipo', ['anticipo' => ['uf' => $formaPago->anticipo(), 'pesos' => $formaPago->anticipo('pesos')]])
- @include('ventas.show.forma_pago.bono_pie', ['bonoPie' => $formaPago->bonoPie])
- @include('ventas.show.forma_pago.subsidio', ['subsidio' => $formaPago->subsidio])
- @include('ventas.show.forma_pago.credito', ['credito' => $formaPago->credito])
+ @include('ventas.show.forma_pago.pie', ['pie' => $formaPago?->pie])
+ @include('ventas.show.forma_pago.escritura', ['escritura' => $formaPago?->escritura])
+ @include('ventas.show.forma_pago.anticipo', ['anticipo' => ['uf' => $formaPago?->anticipo(), 'pesos' => $formaPago?->anticipo('pesos')]])
+ @include('ventas.show.forma_pago.bono_pie', ['bonoPie' => $formaPago?->bonoPie])
+ @include('ventas.show.forma_pago.subsidio', ['subsidio' => $formaPago?->subsidio])
+ @include('ventas.show.forma_pago.credito', ['credito' => $formaPago?->credito])
@include('ventas.show.forma_pago.total')
- @include('ventas.show.forma_pago.devolucion', ['devolucion' => $formaPago->devolucion])
+ @include('ventas.show.forma_pago.devolucion', ['devolucion' => $formaPago?->devolucion])
diff --git a/app/src/Controller/Login.php b/app/src/Controller/Login.php
index ed22278..d018605 100644
--- a/app/src/Controller/Login.php
+++ b/app/src/Controller/Login.php
@@ -13,7 +13,7 @@ class Login
public function form(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Login $service): ResponseInterface
{
if ($service->isIn()) {
- return $response->withStatus(301)->withHeader('Location', $view->get('urls')->base);
+ return $response->withStatus(302)->withHeader('Location', $view->get('urls')->base);
}
return $view->render($response, 'login.form');
}
diff --git a/app/src/Controller/Ventas.php b/app/src/Controller/Ventas.php
index 4060dc4..e6a7fda 100644
--- a/app/src/Controller/Ventas.php
+++ b/app/src/Controller/Ventas.php
@@ -32,8 +32,13 @@ class Ventas
public function show(ServerRequestInterface $request, ResponseInterface $response, View $view,
Service\Venta $service, int $venta_id): ResponseInterface
{
- $venta = $service->getById($venta_id);
- return $view->render($response, 'ventas.show', compact('venta'));
+ try {
+ $venta = $service->getById($venta_id);
+ return $view->render($response, 'ventas.show', compact('venta'));
+ } catch (EmptyResult) {
+ $response = $response->withStatus(404);
+ return $view->render($response, 'not_found');
+ }
}
public function showUnidad(ServerRequestInterface $request, ResponseInterface $response, View $view,
Service\Venta $service, string $proyecto_nombre, int $unidad_descripcion): ResponseInterface
diff --git a/app/src/Middleware/Authentication.php b/app/src/Middleware/Authentication.php
index 1c92057..ca1a79b 100644
--- a/app/src/Middleware/Authentication.php
+++ b/app/src/Middleware/Authentication.php
@@ -6,8 +6,8 @@ use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
-use Incoviba\Service;
use Psr\Log\LoggerInterface;
+use Incoviba\Service;
class Authentication
{
@@ -27,7 +27,11 @@ class Authentication
$response = $this->responseFactory->createResponse(301, 'Not logged in')
->withHeader('Referer', (string) $request->getUri())
->withHeader('X-Redirected-URI', (string) $request->getUri());
- return $this->view->render($response, 'login.form', ['redirect_uri' => (string) $request->getUri()]);
+ $url = "{$request->getUri()}";
+ if (str_ends_with($url, '/login')) {
+ $url = str_replace('/login', '', $url);
+ }
+ return $this->view->render($response, 'login.form', ['redirect_uri' => $url]);
}
protected function isValid(ServerRequestInterface $request): bool
diff --git a/app/src/Model/Venta.php b/app/src/Model/Venta.php
index 4eca125..a49d36e 100644
--- a/app/src/Model/Venta.php
+++ b/app/src/Model/Venta.php
@@ -4,13 +4,14 @@ namespace Incoviba\Model;
use DateTimeInterface;
use Incoviba\Common\Ideal;
use Incoviba\Controller\Ventas;
+use Incoviba\Model\Venta\FormaPago;
use Incoviba\Model\Venta\Pago;
class Venta extends Ideal\Model
{
protected Venta\Propietario $propietario;
protected Venta\Propiedad $propiedad;
- protected Venta\FormaPago $formaPago;
+ protected ?Venta\FormaPago $formaPago;
public DateTimeInterface $fecha;
public DateTimeInterface $fechaIngreso;
public float $valor;
@@ -36,7 +37,7 @@ class Venta extends Ideal\Model
}
return $this->propiedad;
}
- public function formaPago(): Venta\FormaPago
+ public function formaPago(): ?Venta\FormaPago
{
if (!isset($this->formaPago)) {
$this->formaPago = $this->runFactory('formaPago');
@@ -104,7 +105,7 @@ class Venta extends Ideal\Model
return array_merge(parent::jsonSerialize(), [
'propietario' => $this->propietario(),
'propiedad' => $this->propiedad(),
- 'forma_pago' => $this->formaPago()->ids(),
+ 'forma_pago' => $this->formaPago()?->ids(),
'fecha' => $this->fecha->format('Y-m-d'),
'fecha_ingreso' => $this->fechaIngreso->format('Y-m-d'),
'valor' => $this->valor,
diff --git a/app/src/Model/Venta/FormaPago.php b/app/src/Model/Venta/FormaPago.php
index fe6d2de..ee06f0d 100644
--- a/app/src/Model/Venta/FormaPago.php
+++ b/app/src/Model/Venta/FormaPago.php
@@ -5,12 +5,12 @@ use JsonSerializable;
class FormaPago implements JsonSerializable
{
- public ?Pie $pie;
- public ?Escritura $escritura;
- public ?BonoPie $bonoPie;
- public ?Subsidio $subsidio;
- public ?Credito $credito;
- public ?Pago $devolucion;
+ public ?Pie $pie = null;
+ public ?Escritura $escritura = null;
+ public ?BonoPie $bonoPie = null;
+ public ?Subsidio $subsidio = null;
+ public ?Credito $credito = null;
+ public ?Pago $devolucion = null;
public function anticipo(string $moneda = Pago::UF): float
{
diff --git a/app/src/Repository/Venta.php b/app/src/Repository/Venta.php
index d1d2f0a..8f0e238 100644
--- a/app/src/Repository/Venta.php
+++ b/app/src/Repository/Venta.php
@@ -38,7 +38,7 @@ class Venta extends Ideal\Repository
->setFactory((new Implement\Repository\Factory())
->setCallable([$this->propiedadRepository, 'fetchById'])
->setArgs([$data['propiedad']])))
- ->register('pie', (new Implement\Repository\Mapper())
+ /*->register('pie', (new Implement\Repository\Mapper())
->setProperty('formaPago')
->setFactory((new Implement\Repository\Factory())
->setCallable(function($repositories, $data) {
@@ -84,7 +84,7 @@ class Venta extends Ideal\Repository
'escrituraRepository' => $this->escrituraRepository,
'subsidioRepository' => $this->subsidioRepository,
'pagoService' => $this->pagoService
- ], $data])))
+ ], $data])))*/
/*->register('escriturado', (new Implement\Repository\Mapper())
->setFunction(function($data) {
return $data['escritura'] !== null;
diff --git a/app/src/Repository/Venta/BonoPie.php b/app/src/Repository/Venta/BonoPie.php
index 25ee837..eb1cb3a 100644
--- a/app/src/Repository/Venta/BonoPie.php
+++ b/app/src/Repository/Venta/BonoPie.php
@@ -52,4 +52,13 @@ class BonoPie extends Ideal\Repository
->where('pago = ?');
return $this->fetchOne($query, [$pago_id]);
}
+ public function fetchByVenta(int $venta_id): Model\Venta\BonoPie
+ {
+ $query = $this->connection->getQueryBuilder()
+ ->select('a.*')
+ ->from("{$this->getTable()} a")
+ ->joined('JOIN venta ON venta.bono_pie = a.id')
+ ->where('venta.id = ?');
+ return $this->fetchOne($query, [$venta_id]);
+ }
}
diff --git a/app/src/Repository/Venta/Credito.php b/app/src/Repository/Venta/Credito.php
index b36ec8d..6abe902 100644
--- a/app/src/Repository/Venta/Credito.php
+++ b/app/src/Repository/Venta/Credito.php
@@ -53,4 +53,13 @@ class Credito extends Ideal\Repository
->where('pago = ?');
return $this->fetchOne($query, [$pago_id]);
}
+ public function fetchByVenta(int $venta_id): Model\Venta\Credito
+ {
+ $query = $this->connection->getQueryBuilder()
+ ->select('a.*')
+ ->from("{$this->getTable()} a")
+ ->joined('JOIN venta ON venta.credito = a.id')
+ ->where('venta.id = ?');
+ return $this->fetchOne($query, [$venta_id]);
+ }
}
diff --git a/app/src/Repository/Venta/Escritura.php b/app/src/Repository/Venta/Escritura.php
index 7c43b8a..0b81440 100644
--- a/app/src/Repository/Venta/Escritura.php
+++ b/app/src/Repository/Venta/Escritura.php
@@ -55,4 +55,13 @@ class Escritura extends Ideal\Repository
->where('pago = ?');
return $this->fetchOne($query, [$pago_id]);
}
+ public function fetchByVenta(int $venta_id): Model\Venta\Escritura
+ {
+ $query = $this->connection->getQueryBuilder()
+ ->select('a.*')
+ ->from("{$this->getTable()} a")
+ ->joined('JOIN venta ON venta.escritura = a.id')
+ ->where('venta.id = ?');
+ return $this->fetchOne($query, [$venta_id]);
+ }
}
diff --git a/app/src/Repository/Venta/Pago.php b/app/src/Repository/Venta/Pago.php
index f8f6fa4..4847037 100644
--- a/app/src/Repository/Venta/Pago.php
+++ b/app/src/Repository/Venta/Pago.php
@@ -108,4 +108,13 @@ WHERE venta_id = ?";
->where('valor = ? OR ROUND(valor/uf, 3) = ?');
return $this->fetchMany($query, [$value, $value]);
}
+ public function fetchDevolucionByVenta(int $venta_id): Model\Venta\Pago
+ {
+ $query = $this->connection->getQueryBuilder()
+ ->select('a.*')
+ ->from("{$this->getTable()} a")
+ ->joined('JOIN venta ON venta.devolucion = a.id')
+ ->where('venta.id = ?');
+ return $this->fetchOne($query, [$venta_id]);
+ }
}
diff --git a/app/src/Repository/Venta/Pie.php b/app/src/Repository/Venta/Pie.php
index d6efa54..7faf91b 100644
--- a/app/src/Repository/Venta/Pie.php
+++ b/app/src/Repository/Venta/Pie.php
@@ -72,4 +72,13 @@ class Pie extends Ideal\Repository
->where('reajuste = ?');
return $this->fetchOne($query, [$reajuste_id]);
}
+ public function fetchByVenta(int $venta_id): Model\Venta\Pie
+ {
+ $query = $this->connection->getQueryBuilder()
+ ->select('a.*')
+ ->from("{$this->getTable()} a")
+ ->joined('JOIN venta ON venta.pie = a.id')
+ ->where('venta.id = ?');
+ return $this->fetchOne($query, [$venta_id]);
+ }
}
diff --git a/app/src/Repository/Venta/Subsidio.php b/app/src/Repository/Venta/Subsidio.php
index 615cca3..7ae4563 100644
--- a/app/src/Repository/Venta/Subsidio.php
+++ b/app/src/Repository/Venta/Subsidio.php
@@ -49,4 +49,13 @@ class Subsidio extends Ideal\Repository
->where('subsidio = ? OR pago = ?');
return $this->fetchOne($query, [$pago_id, $pago_id]);
}
+ public function fetchByVenta(int $venta_id): Model\Venta\Subsidio
+ {
+ $query = $this->connection->getQueryBuilder()
+ ->select('a.*')
+ ->from("{$this->getTable()} a")
+ ->joined('JOIN venta ON venta.subsidio = a.id')
+ ->where('venta.id = ?');
+ return $this->fetchOne($query, [$venta_id]);
+ }
}
diff --git a/app/src/Service/Venta.php b/app/src/Service/Venta.php
index 60a7edd..17de561 100644
--- a/app/src/Service/Venta.php
+++ b/app/src/Service/Venta.php
@@ -6,7 +6,6 @@ use Incoviba\Common\Ideal\Service;
use Incoviba\Common\Implement;
use Incoviba\Repository;
use Incoviba\Model;
-use PhpParser\Node\Expr\AssignOp\Mod;
use Psr\Log\LoggerInterface;
class Venta extends Service
@@ -20,6 +19,7 @@ class Venta extends Service
protected Repository\Venta\Escritura $escrituraRepository,
protected Repository\Venta\Pago $pagoRepository,
protected Repository\Venta\EstadoPago $estadoPagoRepository,
+ protected Venta\FormaPago $formaPagoService,
protected Venta\Propietario $propietarioService,
protected Venta\Propiedad $propiedadService,
protected Venta\Pie $pieService,
@@ -82,6 +82,9 @@ class Venta extends Service
protected function process(Model\Venta $venta): Model\Venta
{
+ $venta->addFactory('formaPago', (new Implement\Repository\Factory())
+ ->setCallable([$this->formaPagoService, 'getByVenta'])
+ ->setArgs(['venta_id' => $venta->id]));
$venta->addFactory('estados', (new Implement\Repository\Factory())
->setCallable([$this->estadoVentaRepository, 'fetchByVenta'])
->setArgs([$venta->id]));
@@ -231,7 +234,8 @@ class Venta extends Service
}
protected function addFormaPago(array $data): Model\Venta\FormaPago
{
- $fields = [
+ return $this->formaPagoService->add($data);
+ /*$fields = [
'pie',
'subsidio',
'credito',
@@ -245,9 +249,9 @@ class Venta extends Service
$forma_pago->{$name} = $obj;
}
}
- return $forma_pago;
+ return $forma_pago;*/
}
- protected function addPie(array $data): Model\Venta\Pie
+ /*protected function addPie(array $data): Model\Venta\Pie
{
$fields = array_fill_keys([
'fecha_venta',
@@ -309,7 +313,7 @@ class Venta extends Service
'valor'
], $filtered_data);
return $this->bonoPieService->add($mapped_data);
- }
+ }*/
protected function addEstado(Model\Venta $venta, Model\Venta\TipoEstadoVenta $tipoEstadoVenta, array $data): void
{
$fecha = new DateTimeImmutable($data['fecha']);
diff --git a/app/src/Service/Venta/BonoPie.php b/app/src/Service/Venta/BonoPie.php
index 1d0663b..2702558 100644
--- a/app/src/Service/Venta/BonoPie.php
+++ b/app/src/Service/Venta/BonoPie.php
@@ -12,4 +12,8 @@ class BonoPie
{
return new Model\Venta\BonoPie();
}
+ public function getByVenta(int $venta_id): Model\Venta\BonoPie
+ {
+ return $this->bonoPieRepository->fetchByVenta($venta_id);
+ }
}
diff --git a/app/src/Service/Venta/Credito.php b/app/src/Service/Venta/Credito.php
index d7ff3fa..cc11a9b 100644
--- a/app/src/Service/Venta/Credito.php
+++ b/app/src/Service/Venta/Credito.php
@@ -22,6 +22,11 @@ class Credito extends Service
parent::__construct($logger);
}
+ public function getByVenta(int $venta_id): Model\Venta\Credito
+ {
+ return $this->creditoRepository->fetchByVenta($venta_id);
+ }
+
public function add(array $data): Model\Venta\Credito
{
$fecha = new DateTimeImmutable($data['fecha']);
diff --git a/app/src/Service/Venta/FormaPago.php b/app/src/Service/Venta/FormaPago.php
new file mode 100644
index 0000000..6a113ef
--- /dev/null
+++ b/app/src/Service/Venta/FormaPago.php
@@ -0,0 +1,143 @@
+pie = $this->pieService->getByVenta($venta_id);
+ } catch (Implement\Exception\EmptyResult) {}
+ try {
+ $formaPago->bonoPie = $this->bonoPieService->getByVenta($venta_id);
+ } catch (Implement\Exception\EmptyResult) {}
+ try {
+ $formaPago->credito = $this->creditoService->getByVenta($venta_id);
+ } catch (Implement\Exception\EmptyResult) {}
+ try {
+ $formaPago->escritura = $this->escrituraRepository->fetchByVenta($venta_id);
+ } catch (Implement\Exception\EmptyResult) {}
+ try {
+ $formaPago->subsidio = $this->subsidioService->getByVenta($venta_id);
+ } catch (Implement\Exception\EmptyResult) {}
+ try {
+ $formaPago->devolucion = $this->pagoService->getDevolucionByVenta($venta_id);
+ } catch (Implement\Exception\EmptyResult) {}
+
+ return $formaPago;
+ }
+
+ public function add(array $data): Model\Venta\FormaPago
+ {
+ $fields = [
+ 'pie',
+ 'subsidio',
+ 'credito',
+ 'bono_pie'
+ ];
+ $forma_pago = new Model\Venta\FormaPago();
+ foreach ($fields as $name) {
+ if (isset($data["has_{$name}"])) {
+ try {
+ $method = 'add' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name)));
+ $obj = $this->{$method}($data);
+ $forma_pago->{$name} = $obj;
+ } catch (\Error $error) {
+ $this->logger->critical($error);
+ }
+ }
+ }
+ return $forma_pago;
+ }
+
+ protected function addPie(array $data): Model\Venta\Pie
+ {
+ $fields = array_fill_keys([
+ 'fecha_venta',
+ 'pie',
+ 'cuotas',
+ 'uf'
+ ], 0);
+ $filtered_data = array_intersect_key($data, $fields);
+ $this->logger->critical(var_export($filtered_data,true));
+ $mapped_data = array_combine([
+ 'fecha',
+ 'valor',
+ 'cuotas',
+ 'uf'
+ ], $filtered_data);
+ $mapped_data['valor'] = $this->cleanValue($mapped_data['valor']);
+ return $this->pieService->add($mapped_data);
+ }
+ protected function addSubsidio(array $data): Model\Venta\Subsidio
+ {
+ $fields = array_fill_keys([
+ 'fecha_venta',
+ 'ahorro',
+ 'subsidio',
+ 'uf'
+ ], 0);
+ $filtered_data = array_intersect_key($data, $fields);
+ $mapped_data = array_combine([
+ 'fecha',
+ 'ahorro',
+ 'subsidio',
+ 'uf'
+ ], $filtered_data);
+ return $this->subsidioService->add($mapped_data);
+ }
+ protected function addCredito(array $data): Model\Venta\Credito
+ {
+ $fields = array_fill_keys([
+ 'fecha_venta',
+ 'credito',
+ 'uf'
+ ], 0);
+ $filtered_data = array_intersect_key($data, $fields);
+ $mapped_data = array_combine([
+ 'fecha',
+ 'valor',
+ 'uf'
+ ], $filtered_data);
+ return $this->creditoService->add($mapped_data);
+ }
+ protected function addBonoPie(array $data): Model\Venta\BonoPie
+ {
+ $fields = array_fill_keys([
+ 'fecha_venta',
+ 'bono_pie'
+ ], 0);
+ $filtered_data = array_intersect_key($data, $fields);
+ $mapped_data = array_combine([
+ 'fecha',
+ 'valor'
+ ], $filtered_data);
+ return $this->bonoPieService->add($mapped_data);
+ }
+
+ protected function cleanValue($value): float
+ {
+ if ((float) $value == $value) {
+ return (float) $value;
+ }
+ return (float) str_replace(['.', ','], ['', '.'], $value);
+ }
+}
diff --git a/app/src/Service/Venta/Pago.php b/app/src/Service/Venta/Pago.php
index 155c713..fe8c8b1 100644
--- a/app/src/Service/Venta/Pago.php
+++ b/app/src/Service/Venta/Pago.php
@@ -109,6 +109,10 @@ class Pago
{
return [];
}
+ public function getDevolucionByVenta(int $venta_id): Model\Venta\Pago
+ {
+ return $this->process($this->pagoRepository->fetchDevolucionByVenta($venta_id));
+ }
public function add(array $data): Model\Venta\Pago
{
diff --git a/app/src/Service/Venta/Pie.php b/app/src/Service/Venta/Pie.php
index ea84377..dfeda57 100644
--- a/app/src/Service/Venta/Pie.php
+++ b/app/src/Service/Venta/Pie.php
@@ -17,6 +17,10 @@ class Pie
{
return $this->process($this->pieRepository->fetchById($pie_id));
}
+ public function getByVenta(int $venta_id): Model\Venta\Pie
+ {
+ return $this->process($this->pieRepository->fetchByVenta($venta_id));
+ }
public function add(array $data): Model\Venta\Pie
{
diff --git a/app/src/Service/Venta/Subsidio.php b/app/src/Service/Venta/Subsidio.php
index 69766e2..bcce88a 100644
--- a/app/src/Service/Venta/Subsidio.php
+++ b/app/src/Service/Venta/Subsidio.php
@@ -17,6 +17,11 @@ class Subsidio
protected Service\Money $moneyService
) {}
+ public function getByVenta(int $venta_id): Model\Venta\Subsidio
+ {
+ return $this->subsidioRepository->fetchByVenta($venta_id);
+ }
+
public function add(array $data): Model\Venta\Subsidio
{
$fecha = new DateTimeImmutable($data['fecha']);