find(Inmobiliaria::class)->array(); $base_url = str_replace('/inmobiliarias', '{URL}', $request->getUri()); array_walk($inmobiliarias, function (&$item) use ($base_url) { $link = [ 'rel' => 'inmobiliaria', 'title' => $item['abreviacion'], 'href' => str_replace('{URL}',"/inmobiliaria/{$item['rut']}", $base_url) ]; $item['link'] = $link; }); return $this->withJson($response, compact('inmobiliarias')); } protected function getInmobiliaria(Factory $factory, $inmobiliaria_rut): bool|Inmobiliaria { return $factory->find(Inmobiliaria::class)->where([['rut', $inmobiliaria_rut]])->one(); } public function show(Request $request, Response $response, Factory $factory, $inmobiliaria_rut): Response { $inmobiliaria = $this->getInmobiliaria($factory, $inmobiliaria_rut); $output = [ 'input' => $inmobiliaria_rut, 'inmobiliaria' => $inmobiliaria->toArray(), 'link' => [ 'rel' => 'inmobiliarias', 'title' => 'Inmobiliarias', 'href' => str_replace("/inmobiliaria/{$inmobiliaria_rut}", '/inmobiliarias', $request->getUri()) ] ]; $base_url = str_replace("/inmobiliaria/{$inmobiliaria_rut}", "/inmobiliaria/{$inmobiliaria_rut}{URL}", $request->getUri()); $output['inmobiliaria']['links'] = [ [ 'rel' => 'banco', 'title' => $inmobiliaria->banco()->nombre, 'href' => str_replace("/inmobiliaria/{$inmobiliaria_rut}", "/banco/{$inmobiliaria->banco}", $request->getUri()) ], [ 'rel' => 'sociedad', 'title' => $inmobiliaria->sociedad()->descripcion, 'href' => str_replace("/inmobiliaria/{$inmobiliaria_rut}", "/sociedad/{$inmobiliaria->sociedad}", $request->getUri()) ], [ 'rel' => 'proyectos', 'title' => 'Proyectos', 'href' => str_replace('{URL}', '/proyectos', $base_url) ] ]; return $this->withJson($response, $output); } public function add(Request $request, Response $response, Factory $factory): Response { $post = $request->getParsedBody(); $output = [ 'input' => $post ]; if (in_array('inmobiliarias', $post)) { $output['inmobiliarias'] = []; foreach ($post['inmobiliarias'] as $input) { $inmobiliaria = Inmobiliaria::add($factory, $input); $inmobiliarias []= [ 'inmobiliaria' => $inmobiliaria->toArray(), 'created' => $inmobiliaria->is_new() ? $inmobiliaria->save() : false ]; } } elseif (in_array('inmobiliaria', $post)) { $inmobiliaria = Inmobiliaria::add($factory, $post); $output['inmobiliaria'] = $inmobiliaria; $output['created'] = $inmobiliaria->is_new() ? $inmobiliaria->save() : false; } return $this->withJson($response, $output); } public function edit(Request $request, Response $response, Factory $factory, $inmobiliaria_rut): Response { $post = $request->getParsedBody(); $input = compact('inmobiliaria_rut', 'post'); $inmobiliaria = $this->getInmobiliaria($factory, $inmobiliaria_rut); $output = [ 'input' => $input, 'inmobiliaria' => $inmobiliaria->toArray() ]; $output['edited'] = $inmobiliaria->edit($post); $output['changes'] = $inmobiliaria->toArray(); return $this->withJson($response, $output); } public function delete(Request $request, Response $response, Factory $factory, $inmobiliaria_rut): Response { $inmobiliaria = $this->getInmobiliaria($factory, $inmobiliaria_rut); $output = [ 'input' => $inmobiliaria_rut, 'inmobiliaria' => $inmobiliaria->toArray() ]; $output['deleted'] = $inmobiliaria->delete(); return $this->withJson($response, $output); } public function proyectos(Request $request, Response $response, Factory $factory, $inmobiliaria_rut): Response { $inmobiliaria = $this->getInmobiliaria($factory, $inmobiliaria_rut); $proyectos = $inmobiliaria?->proyectos(); $base_url = str_replace("/inmobiliaria/{$inmobiliaria_rut}/proyectos", '{URL}', $request->getUri()); $output = [ 'input' => $inmobiliaria_rut, 'inmobiliaria' => $inmobiliaria->toArray(), 'proyectos' => ($proyectos) ? array_map(function ($item) use ($base_url) { $arr = $item->toArray(); $arr['link'] = [ 'rel' => 'proyecto', 'title' => $item->descripcion, 'href' => str_replace('{URL}', "/proyecto/{$item->id}", $base_url) ]; return $arr; }, $proyectos) : [] ]; $output['inmobiliaria']['link'] = [ 'rel' => 'inmobiliaria', 'title' => $inmobiliaria->abreviacion, 'href' => str_replace('{URL}', "/inmobiliaria/{$inmobiliaria_rut}", $base_url) ]; return $this->withJson($response, $output); } public function sociedad(Request $request, Response $response, Factory $factory, $inmobiliaria_rut): Response { $inmobiliaria = $this->getInmobiliaria($factory, $inmobiliaria_rut); $base_url = str_replace("/inmobiliaria/{$inmobiliaria_rut}/sociedad", '{URL}', $request->getUri()); $output = [ 'input' => $inmobiliaria_rut, 'inmobiliaria' => $inmobiliaria->toArray(), 'sociedad' => $inmobiliaria->sociedad()->toArray() ]; $output['inmobiliaria']['link'] = [ 'rel' => 'inmobiliaria', 'title' => $inmobiliaria->abreviacion, 'href' => str_replace('{URL}', "/inmobiliaria/{$inmobiliaria_rut}", $base_url) ]; $output['sociedad']['link'] = [ 'rel' => 'tipo_sociedad', 'title' => $inmobiliaria->sociedad()->descripcion, 'href' => str_replace('{URL}', "/tipos/sociedad/{$inmobiliaria->sociedad}", $base_url) ]; return $this->withJson($response, $output); } public function banco(Request $request, Response $response, Factory $factory, $inmobiliaria_rut): Response { $inmobiliaria = $this->getInmobiliaria($factory, $inmobiliaria_rut); $base_url = str_replace("/inmobiliaria/{$inmobiliaria_rut}/banco", '{URL}', $request->getUri()); $output = [ 'input' => $inmobiliaria_rut, 'inmobiliaria' => $inmobiliaria->toArray(), 'banco' => $inmobiliaria->banco()->toArray() ]; $output['inmobiliaria']['link'] = [ 'rel' => 'inmobiliaria', 'title' => $inmobiliaria->abreviacion, 'href' => str_replace('{URL}', "/inmobiliaria/{$inmobiliaria_rut}", $base_url) ]; $output['banco']['link'] = [ 'rel' => 'banco', 'title' => $inmobiliaria->banco()->nombre, 'href' => str_replace('{URL}', "/banco/{$inmobiliaria->banco}", $base_url) ]; return $this->withJson($response, $output); } }