setTable('unidad'); } public function create(?array $data = null): Define\Model { $map = (new Implement\Repository\MapperParser(['subtipo', 'piso', 'descripcion', 'orientacion'])) ->register('pt', (new Implement\Repository\Mapper()) ->setProperty('proyectoTipoUnidad') ->setFunction(function($data) { return $this->proyectoTipoUnidadService->getById($data['pt']); })); return $this->parseData(new Model\Venta\Unidad(), $data, $map); } public function save(Define\Model $model): Define\Model { $model->id = $this->saveNew( ['subtipo', 'piso', 'descripcion', 'orientacion', 'pt'], [$model->subtipo, $model->piso, $model->descripcion, $model->orientacion, $model->proyectoTipoUnidad->id] ); return $model; } public function edit(Define\Model $model, array $new_data): Define\Model { return $this->update($model, ['subtipo', 'piso', 'descripcion', 'orientacion', 'pt'], $new_data); } public function fetchByPropiedad(int $propiedad_id): array { $query = "SELECT a.* FROM `{$this->getTable()}` a JOIN `propiedad_unidad` pu ON pu.`unidad` = a.`id` WHERE pu.`propiedad` = ? GROUP BY a.`id`"; return $this->fetchMany($query, [$propiedad_id]); } public function fetchByCierre(int $cierre_id): array { $query = "SELECT a.* FROM `{$this->getTable()}` a JOIN `unidad_cierre` uc ON uc.`unidad` = a.`id` JOIN `proyecto_tipo_unidad` ptu ON ptu.`id` = a.`pt` JOIN `tipo_unidad` tu ON tu.`id` = ptu.`tipo` WHERE uc.`cierre` = ? GROUP BY a.`id` ORDER BY tu.`orden`, LPAD(a.`descripcion`, 4, '0')"; return $this->fetchMany($query, [$cierre_id]); } public function fetchByProyecto(int $proyecto_id): array { $query = "SELECT a.* FROM `{$this->getTable()}` a JOIN `proyecto_tipo_unidad` ptu ON ptu.`id` = a.`pt` JOIN `tipo_unidad` tu ON tu.`id` = ptu.`tipo` WHERE ptu.`proyecto` = ? ORDER BY tu.`orden`"; return $this->fetchMany($query, [$proyecto_id]); } public function fetchDisponiblesByProyecto(int $proyecto_id): array { $query = "SELECT DISTINCT a.* FROM `{$this->getTable()}` a JOIN `proyecto_tipo_unidad` ptu ON ptu.`id` = a.`pt` JOIN `tipo_unidad` tu ON tu.`id` = ptu.`tipo` LEFT OUTER JOIN `propiedad_unidad` pu ON pu.`unidad` = a.`id` LEFT OUTER JOIN `venta` ON `venta`.`propiedad` = `pu`.`propiedad` LEFT OUTER JOIN (SELECT ev1.* FROM `estado_venta` ev1 JOIN (SELECT MAX(`id`) as 'id', `venta` FROM `estado_venta`) ev0 ON ev0.`id` = ev1.`id`) ev ON ev.`venta` = `venta`.`id` LEFT OUTER JOIN `tipo_estado_venta` tev ON tev.`id` = ev.`estado` WHERE ptu.`proyecto` = ? AND (pu.`id` IS NULL OR `venta`.`id` IS NULL OR tev.`activa` = 0) ORDER BY tu.`orden`"; return $this->fetchMany($query, [$proyecto_id]); } }