setTable('proyecto'); } public function create(?array $data = null): Define\Model { $map = [ 'inmobiliaria' => [ 'function' => function($data) { return $this->inmobiliariaRepository->fetchById($data['inmobiliaria']); } ], 'descripcion' => [], 'direccion' => [ 'function' => function($data) { return $this->direccionRepository->fetchById($data['direccion']); } ], 'superficie_terreno' => [ 'property' => 'terreno', 'function' => function($data) { $terreno = new Model\Proyecto\Terreno(); $terreno->superficie = $data['superficie_terreno']; $terreno->valor = $data['valor_terreno']; return $terreno; } ], 'superficie_sobre_nivel' => [ 'property' => 'superficie', 'function' => function($data) { $superficie = new Model\Proyecto\Superficie(); $superficie->sobre_nivel = $data['superficie_sobre_nivel']; $superficie->bajo_nivel = $data['superficie_bajo_nivel']; return $superficie; } ], 'corredor' => [], 'pisos' => [], 'subterraneos' => [] ]; return $this->parseData(new Model\Proyecto(), $data, $map); } public function save(Define\Model $model): Define\Model { $model->id = $this->saveNew( ['inmobiliaria', 'descripcion', 'direccion', 'superficie_terreno', 'valor_terreno', 'corredor', 'superficie_sobre_nivel', 'superficie_bajo_nivel', 'pisos', 'subterraneos'], [$model->inmobiliaria->rut, $model->descripcion, $model->direccion->id, $model->terreno->superficie, $model->terreno->valor, $model->corredor, $model->superficie->sobre_nivel, $model->superficie->bajo_nivel, $model->pisos, $model->subterraneos] ); return $model; } public function edit(Define\Model $model, array $new_data): Define\Model { return $this->update($model, ['inmobiliaria', 'descripcion', 'direccion', 'superficie_terreno', 'valor_terreno', 'corredor', 'superficie_sobre_nivel', 'superficie_bajo_nivel', 'pisos', 'subterraneos'], $new_data); } public function fetchByName(string $name): Define\Model { $query = "SELECT * FROM `{$this->getTable()}` WHERE `name` = ?"; return $this->fetchOne($query, [$name]); } public function fetchAllActive(): array { $query = "SELECT a.* FROM `{$this->getTable()}` a JOIN (SELECT e1.* FROM `estado_proyecto` e1 JOIN (SELECT MAX(`id`) AS 'id', `proyecto` FROM `estado_proyecto` GROUP BY `proyecto`) e0 ON e0.`id` = e1.`id`) ep ON ep.`proyecto` = a.`id` JOIN `tipo_estado_proyecto` tep ON tep.`id` = ep.`estado` JOIN `etapa_proyecto` et ON et.`id` = tep.`etapa` WHERE et.`orden` BETWEEN 4 AND 8 ORDER BY a.`descripcion`"; return $this->fetchMany($query); } }