getBody(); $json = json_decode($body->getContents()); $proyecto_id = $json->proyecto_id; $output = [ 'proyecto' => [ 'id' => $proyecto_id ], 'total' => 0 ]; try { $ventas = $service->fetchActivaByProyecto($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) {} return $this->withJson($response, $output); } public function get(ServerRequestInterface $request, ResponseInterface $response, Service\Venta $service, int $venta_id): ResponseInterface { try { $venta = $service->getById($venta_id); $output = compact('venta'); } catch (EmptyResult $exception) { $output = [ 'error' => [ 'code' => $exception->getCode(), 'message' => str_replace([PHP_EOL, "\r"], [' ', ''], $exception->getMessage()) ] ]; } return $this->withJson($response, $output); } public function porFirmar(ServerRequestInterface $request, ResponseInterface $response, Service\Venta $ventaService, Service\Redis $redisService): ResponseInterface { $body = $request->getBody(); $json = json_decode($body->getContents()); $proyecto_id = $json->proyecto_id; $today = new DateTimeImmutable(); $redisKey = "promesas_por_firmar-proyecto-{$proyecto_id}-{$today->format('Y-m-d')}"; $output = [ 'proyecto_id' => $proyecto_id, 'promesas' => 0 ]; try { $output = $this->fetchRedis($redisService, $redisKey); } catch (EmptyRedis) { try { $ventas = $ventaService->getByProyecto($proyecto_id); $promesas = array_filter($ventas, function(Model\Venta $venta) { return $venta->currentEstado()->tipoEstadoVenta->descripcion === 'vigente'; }); $output['promesas'] = count($promesas); $this->saveRedis($redisService, $redisKey, $output); } catch (EmptyResult) {} } return $this->withJson($response, $output); } public function escrituras(ServerRequestInterface $request, ResponseInterface $response, Service\Venta $ventaService, Service\Venta\Pago $pagoService, Service\Redis $redisService): ResponseInterface { $body = $request->getBody(); $json = json_decode($body->getContents()); $proyecto_id = $json->proyecto_id; $today = new DateTimeImmutable(); $redisKey = "escrituras-proyecto-{$proyecto_id}-{$today->format('Y-m-d')}"; $output = [ 'proyecto_id' => $proyecto_id, 'escrituras' => [ 'firmar' => 0, 'pagar' => 0, 'abonar' => 0 ] ]; try { $output = $this->fetchRedis($redisService, $redisKey); } catch (EmptyRedis) { try { $ventas = $ventaService->getEscriturasByProyecto($proyecto_id); $porFirmar = array_filter($ventas, function(Model\Venta $venta) { return $venta->currentEstado()->tipoEstadoVenta->descripcion === 'escriturando'; }); $output['escrituras']['firmar'] = count($porFirmar); unset($porFirmar); $escrituras = array_filter($ventas, function(Model\Venta $venta) { return $venta->currentEstado()->tipoEstadoVenta->descripcion === 'firmado por inmobiliaria'; }); unset($ventas); $porPagar = array_filter($escrituras, function(Model\Venta $venta) use ($pagoService) { $pagos = $pagoService->getByVenta($venta->id); $porPagar = array_filter($pagos, function(Model\Venta\Pago $pago) { return $pago->currentEstado->tipoEstadoPago->descripcion === 'no pagado'; }); return count($porPagar) > 0; }); $output['escrituras']['pagar'] = count($porPagar); unset($porPagar); $porAbonar = array_filter($escrituras, function(Model\Venta $venta) use ($pagoService) { $pagos = $pagoService->getByVenta($venta->id); $porPagar = array_filter($pagos, function(Model\Venta\Pago $pago) { return $pago->currentEstado->tipoEstadoPago->descripcion === 'depositado'; }); return count($porPagar) > 0; }); $output['escrituras']['abonar'] = count($porAbonar); unset($porAbonar); $this->saveRedis($redisService, $redisKey, $output); } catch (EmptyResult) {} } return $this->withJson($response, $output); } 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) {} return $this->withJson($response, $output); } public function add(ServerRequestInterface $request, ResponseInterface $response, Service\Venta $ventaService): ResponseInterface { $data = $request->getParsedBody(); $output = [ 'status' => false, 'errors' => [] ]; try { $ventaService->add($data); $output['status'] = true; } catch (\Exception $exception) { $output['errors'] = $exception; } return $this->withJson($response, $output); } }