$proyecto->id, 'descripcion' => $proyecto->descripcion];}, $proyectoService->getVendibles()); return $view->render($response, 'ventas.list', compact('proyectos')); } 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; $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'); } }