Implemented repository mapper, and venta show

This commit is contained in:
Juan Pablo Vial
2023-08-08 23:53:49 -04:00
parent ef30ae67d2
commit 59825259b6
111 changed files with 2766 additions and 612 deletions

View File

@ -1,11 +1,14 @@
<?php
namespace Incoviba\Controller;
use Incoviba\Common\Implement\Exception\EmptyResult;
use MongoDB\Driver\Server;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Incoviba\Common\Alias\View;
use Incoviba\Service;
use Incoviba\Model;
use Incoviba\Repository;
class Ventas
{
@ -14,13 +17,89 @@ class Ventas
$proyectos = array_map(function(Model\Proyecto $proyecto) {return ['id' => $proyecto->id, 'descripcion' => $proyecto->descripcion];}, $proyectoService->getVendibles());
return $view->render($response, 'ventas.list', compact('proyectos'));
}
public function proyecto(ServerRequestInterface $request, ResponseInterface $response, Service\Venta $service): ResponseInterface
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'));
}
public function showUnidad(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Venta $service, string $proyecto_nombre, int $unidad_descripcion): ResponseInterface
{
$proyecto_nombre = urldecode($proyecto_nombre);
$venta = $service->getByProyectoAndUnidad($proyecto_nombre, $unidad_descripcion);
return $view->render($response, 'ventas.show', compact('venta'));
}
public function proyecto(ServerRequestInterface $request, ResponseInterface $response, Repository\Venta $service): ResponseInterface
{
$body = $request->getBody();
$json = json_decode($body->getContents());
$proyecto_id = $json->proyecto_id;
$ventas = $service->getByProyecto($proyecto_id);
$response->getBody()->write(json_encode(['ventas' => $ventas, 'total' => count($ventas)]));
$output = [
'proyecto' => [
'id' => $proyecto_id
],
'total' => 0
];
try {
$ventas = $service->fetchByProyecto($proyecto_id);
$output['ventas'] = array_map(function(Model\Venta $venta) {return $venta->id;}, $ventas);
$output['proyecto']['descripcion'] = $ventas[0]->proyecto()->descripcion;
$output['total'] = count($ventas);
} catch (EmptyResult) {}
$response->getBody()->write(json_encode($output));
return $response->withHeader('Content-Type', 'application/json');
}
public function get(ServerRequestInterface $request, ResponseInterface $response, Service\Venta $service, int $venta_id): ResponseInterface
{
try {
$venta = $service->getById($venta_id);
$response->getBody()->write(json_encode(compact('venta')));
} catch (EmptyResult $exception) {
$response->getBody()->write(json_encode(['error' => [
'code' => $exception->getCode(),
'message' => str_replace([PHP_EOL, "\r"], [' ', ''], $exception->getMessage())
]]));
}
return $response->withHeader('Content-Type', 'application/json');
}
public function edit(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Venta $service, int $venta_id): ResponseInterface
{
$venta = $service->getById($venta_id);
return $view->render($response, 'ventas.edit', compact('venta'));
}
public function propietario(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Venta $service, Repository\Region $regionRepository, int $venta_id): ResponseInterface
{
$venta = $service->getById($venta_id);
$propietario = $venta->propietario();
$regiones = $regionRepository->fetchAll();
usort($regiones, function(Model\Region $a, Model\Region $b) {
return $a->numeracion - $b->numeracion;
});
return $view->render($response, 'ventas.propietarios.edit', compact('propietario', 'venta_id', 'regiones'));
}
public function propiedad(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Venta $service, Service\Venta\Unidad $unidadService, int $venta_id): ResponseInterface
{
$venta = $service->getById($venta_id);
$propiedad = $venta->propiedad();
$proyecto = $venta->proyecto();
$unidades = $unidadService->getDisponiblesByProyecto($proyecto->id);
$tiposUnidades = [];
foreach ($unidades as $unidad) {
if (!in_array($unidad->proyectoTipoUnidad->tipoUnidad, $tiposUnidades)) {
$tiposUnidades []= $unidad->proyectoTipoUnidad->tipoUnidad;
}
}
return $view->render($response, 'ventas.propiedades.edit', compact('propiedad', 'proyecto', 'tiposUnidades', 'unidades', 'venta_id'));
}
public function comentarios(ServerRequestInterface $request, ResponseInterface $response, Service\Venta $service, Repository\Venta\Comentario $comentarioRepository, int $venta_id): ResponseInterface
{
$venta = $service->getById($venta_id);
$output = ['total' => 0];
try {
$comentarios = $comentarioRepository->fetchByVenta($venta->id);
$output['total'] = count($comentarios);
$output['comentarios'] = $comentarios;
} catch (EmptyResult) {}
$response->getBody()->write(json_encode($output));
return $response->withHeader('Content-Type', 'application/json');
}
}