diff --git a/app/resources/routes/api/direcciones.php b/app/resources/routes/api/direcciones.php index 61ea957..68f3c18 100644 --- a/app/resources/routes/api/direcciones.php +++ b/app/resources/routes/api/direcciones.php @@ -9,3 +9,7 @@ $app->group('/direcciones', function($app) { $app->post('/find[/]', [Direcciones::class, 'findComunas']); }); }); +$app->group('/direccion/{direccion_id:[0-9]+}', function($app) { + $app->post('/edit[/]', [Direcciones::class, 'edit']); + $app->get('[/]', [Direcciones::class, 'get']); +}); diff --git a/app/resources/routes/api/regiones.php b/app/resources/routes/api/regiones.php index 3f48645..4c5be1c 100644 --- a/app/resources/routes/api/regiones.php +++ b/app/resources/routes/api/regiones.php @@ -2,7 +2,10 @@ use Incoviba\Controller\API\Regiones; -//$app->group('/regiones', function($app) {}); +$app->group('/regiones', function($app) { + $app->get('[/]', Regiones::class); +}); $app->group('/region/{region_id}', function($app) { $app->get('/provincias[/]', [Regiones::class, 'provincias']); + $app->get('/comunas[/]', [Regiones::class, 'comunas']); }); diff --git a/app/resources/views/proyectos/show.blade.php b/app/resources/views/proyectos/show.blade.php index 568c0ca..e853fbc 100644 --- a/app/resources/views/proyectos/show.blade.php +++ b/app/resources/views/proyectos/show.blade.php @@ -15,7 +15,7 @@ - + @@ -137,6 +137,7 @@ @endsection +@include('proyectos.show.edit_direccion') @include('layout.body.scripts.chartjs') @push('page_scripts') @@ -485,6 +486,11 @@ ventas.setup({id_ventas: '#ventas', id_stock: '#stock', id_proyeccion: '#proyeccion', id_chart_general: '#chart_venta_general', id_chart_tipologias: '#chart_venta_tipologia', id_chart_velocidad: '#chart_venta_velocidad'}) + + document.getElementById('edit_direccion_button').addEventListener('click', event => { + event.preventDefault() + $('#edit_direccion_modal').modal('show') + }) }) @endpush diff --git a/app/resources/views/proyectos/show/edit_direccion.blade.php b/app/resources/views/proyectos/show/edit_direccion.blade.php new file mode 100644 index 0000000..ae6fe49 --- /dev/null +++ b/app/resources/views/proyectos/show/edit_direccion.blade.php @@ -0,0 +1,136 @@ + + +@push('page_scripts') + +@endpush diff --git a/app/src/Controller/API/Direcciones.php b/app/src/Controller/API/Direcciones.php index 1f59948..66b2ada 100644 --- a/app/src/Controller/API/Direcciones.php +++ b/app/src/Controller/API/Direcciones.php @@ -14,6 +14,24 @@ class Direcciones { use withRedis, withJson; + public function get(ServerRequestInterface $request, ResponseInterface $response, Service\Redis $redisService, + Repository\Direccion $direccionRepository, int $direccion_id): ResponseInterface + { + $output = ['direccion_id' => $direccion_id, 'direccion' => null]; + $redisKey = "direcciones:{$direccion_id}"; + try { + $direccion = $this->fetchRedis($redisService, $redisKey); + $output['direccion'] = $direccion; + } catch (EmptyRedis) { + try { + $direccion = $direccionRepository->fetchById($direccion_id); + $output['direccion'] = $direccion; + $this->saveRedis($redisService, $redisKey, $direccion, 60 * 60 * 24 * 30); + } catch (EmptyResult) {} + } + + return $this->withJson($response, $output); + } public function comunas(ServerRequestInterface $request, ResponseInterface $response, Service\Redis $redisService, Repository\Region $regionRepository, Repository\Comuna $comunaRepository, int $region_id) : ResponseInterface @@ -64,7 +82,7 @@ class Direcciones $body = $request->getBody(); $json = json_decode($body->getContents()); $output = ['input' => $json, 'total' => 0, 'comunas' => []]; - $redisKey = "comunas:direccion:{$json->direccion}"; + $redisKey = "direcciones:{$json->direccion}:comuna"; try { $output['comunas'] = $this->fetchRedis($redisService, $redisKey); } catch (EmptyRedis) { @@ -77,4 +95,21 @@ class Direcciones } return $this->withJson($response, $output); } + + public function edit(ServerRequestInterface $request, ResponseInterface $response, Service\Redis $redisService, + Repository\Direccion $direccionRepository, int $direccion_id): ResponseInterface + { + $body = $request->getParsedBody(); + $output = ['direccion_id' => $direccion_id, 'input' => $body, 'direccion' => [], 'success' => false]; + $redisKey = "direcciones:{$direccion_id}"; + try { + $direccion = $direccionRepository->fetchById($direccion_id); + $filteredData = $direccionRepository->filterData($body); + $output['direccion'] = $direccionRepository->edit($direccion, $filteredData); + $output['success'] = true; + $this->saveRedis($redisService, $redisKey, $output['direccion'], 60 * 60 * 24 * 30); + } catch (EmptyResult) {} + + return $this->withJson($response, $output); + } } diff --git a/app/src/Controller/API/Regiones.php b/app/src/Controller/API/Regiones.php index 75ac94f..1aeeac0 100644 --- a/app/src/Controller/API/Regiones.php +++ b/app/src/Controller/API/Regiones.php @@ -14,6 +14,21 @@ class Regiones { use withRedis, withJson; + public function __invoke(ServerRequestInterface $request, ResponseInterface $response, Service\Redis $redisService, + Repository\Region $regionRepository): ResponseInterface + { + $regiones = []; + try { + $regiones = $this->fetchRedis($redisService, 'regiones'); + } catch (EmptyRedis) { + try { + $regiones = $regionRepository->fetchAll(); + $this->saveRedis($redisService, 'regiones', $regiones, 60 * 60 * 24 * 30); + } catch (EmptyResult) {} + } + return $this->withJson($response, compact('regiones')); + } + public function provincias(ServerRequestInterface $request, ResponseInterface $response, Service\Redis $redisService, Repository\Provincia $provinciaRepository, int $region_id): ResponseInterface { @@ -36,4 +51,54 @@ class Regiones } return $this->withJson($response, $output); } + public function comunas(ServerRequestInterface $request, ResponseInterface $response, Service\Redis $redisService, + Repository\Provincia $provinciaRepository, + Repository\Comuna $comunaRepository, int $region_id): ResponseInterface + { + $output = [ + 'region_id' => $region_id, + 'comunas' => [] + ]; + $comunas = []; + try { + $redisKey = "provincias:region:{$region_id}"; + $provincias = $this->fetchRedis($redisService, $redisKey); + foreach ($provincias as $provincia) { + $comunas = array_merge($comunas, $this->fetchComunasByProvincia($redisService, $comunaRepository, $provincia->id)); + } + } catch (EmptyRedis) { + try { + $provincias = $provinciaRepository->fetchByRegion($region_id); + usort($provincias, function (Model\Provincia $a, Model\Provincia $b) { + return strcmp($a->descripcion, $b->descripcion); + }); + $this->saveRedis($redisService, $redisKey, $provincias, 60 * 60 * 24 * 30); + foreach ($provincias as $provincia) { + $comunas = array_merge($comunas, $this->fetchComunasByProvincia($redisService, $comunaRepository, $provincia->id)); + } + } catch (EmptyResult) {} + } finally { + usort($comunas, function ($a, $b) { + return strcmp($a->descripcion, $b->descripcion); + }); + $output['comunas'] = $comunas; + } + + return $this->withJson($response, $output); + } + + protected function fetchComunasByProvincia(Service\Redis $redisService, Repository\Comuna $comunaRepository, int $provincia_id): array + { + $redisKey = "comunas:provincia:{$provincia_id}"; + try { + $comunas = $this->fetchRedis($redisService, $redisKey); + } catch (EmptyRedis) { + $comunas = $comunaRepository->fetchByProvincia($provincia_id); + usort($comunas, function (Model\Comuna $a, Model\Comuna $b) { + return strcmp($a->descripcion, $b->descripcion); + }); + $this->saveRedis($redisService, $redisKey, $comunas, 60 * 60 * 24 * 30); + } + return $comunas; + } }
Dirección{{$proyecto->direccion()}}{{$proyecto->direccion()}}
Inmobiliaria