Files
api/common/Controller/Inmobiliarias.php
2021-11-30 18:04:41 -03:00

167 lines
6.9 KiB
PHP

<?php
namespace Incoviba\API\Common\Controller;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Incoviba\API\Common\Define\Controller\Json;
use Incoviba\API\Common\Factory\Model as Factory;
use Incoviba\Inmobiliaria\Inmobiliaria;
class Inmobiliarias {
use Json;
public function __invoke(Request $request, Response $response, Factory $factory): Response {
$inmobiliarias = $factory->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);
}
}