This commit is contained in:
2023-06-26 10:49:25 -04:00
parent 42a97bb074
commit 4d00f10274
20 changed files with 350 additions and 33 deletions

26
src/Mapper/Agente.php Normal file
View File

@ -0,0 +1,26 @@
<?php
namespace Incoviba\Mapper;
use Incoviba\Model\Model;
use Incoviba\Model\Proyecto\Agente as BaseModel;
class Agente extends Mapper
{
protected string $table = 'agente';
protected function load(bool|array $row, bool $lazy = false): BaseModel|bool
{
$model = new BaseModel();
$model->id = $row['id'];
$model->rut = $row['rut'];
$model->descripcion = $row['descripcion'];
$model->abreviacion = $row['abreviacion'];
return $model;
}
public function save(Model $model): bool
{
// TODO: Implement save() method.
}
}

View File

@ -13,6 +13,8 @@ class AgenteTipo extends Mapper
{
$model = new AgenteModel();
$model->id = $row['id'];
$model->agente = $this->getMapper(Agente::class)->fetchById($row['agente']);
$model->tipo = $this->getMapper(TipoAgente::class)->fetchById($row['tipo']);
return $model;
}

25
src/Mapper/Comuna.php Normal file
View File

@ -0,0 +1,25 @@
<?php
namespace Incoviba\Mapper;
use Incoviba\Model\Model;
use Incoviba\Model\Common\Comuna as BaseModel;
class Comuna extends Mapper
{
protected string $table = 'comuna';
protected function load(bool|array $row, bool $lazy = false): BaseModel|bool
{
$model = new BaseModel();
$model->id = $row['id'];
$model->descripcion = $row['descripcion'];
// $model->provincia = $this->getMapper(Provincia::class)->fetchById($row['provincia']);
return $model;
}
public function save(Model $model): bool
{
// TODO: Implement save() method.
}
}

View File

@ -8,9 +8,6 @@ use Incoviba\Model\Common\Direccion as DireccionModel;
class Direccion extends Mapper
{
protected string $table = 'direccion';
/*protected array $required = [
Comuna::class
];*/
protected function load(bool|array $row, bool $lazy = false): DireccionModel|bool
{
@ -20,6 +17,7 @@ class Direccion extends Mapper
$model->calle = $row['calle'];
$model->numero = $row['numero'];
$model->extra = $row['extra'];
$model->comuna = $this->getMapper(Comuna::class)->fetchById($row['comuna']);
return $model;
}

View File

@ -0,0 +1,55 @@
<?php
namespace Incoviba\Mapper;
use Incoviba\Model\Model;
use Incoviba\Model\Proyecto\EstadoProyecto as BaseModel;
class EstadoProyecto extends Mapper
{
protected string $table = 'estado_proyecto';
protected function load(bool|array $row, bool $lazy = false): BaseModel|bool
{
$model = new BaseModel();
$model->id = $row['id'];
$model->proyecto = $this->getMapper(Proyecto::class)->fetchById($row['proyecto']);
$model->tipo = $this->getMapper(TipoEstadoProyecto::class)->fetchById($row['estado']);
$model->fecha = new \DateTimeImmutable($row['fecha']);
return $model;
}
public function save(Model $model): bool
{
// TODO: Implement save() method.
}
public function fetchByProyecto(int $proyecto_id): array
{
$qb = $this->connection->createQueryBuilder()
->select('*')
->from($this->table)
->where('proyecto = ?');
return array_map([$this, 'load'], $this->connection->executeQuery($qb, [$proyecto_id])->fetchAllAssociative());
}
public function fetchLastByProyecto(int $proyecto_id): BaseModel|bool
{
$qb = $this->connection->createQueryBuilder()
->select('*')
->from($this->table)
->where('proyecto = ?')
->setMaxResults(1)
->orderBy('id', 'desc');
return $this->load($this->connection->executeQuery($qb, [$proyecto_id])->fetchAssociative());
}
public function fetchFirstByProyecto(int $proyecto_id): BaseModel|bool
{
$qb = $this->connection->createQueryBuilder()
->select('*')
->from($this->table)
->where('proyecto = ?')
->setMaxResults(1)
->orderBy('id', 'asc');
return $this->load($this->connection->executeQuery($qb, [$proyecto_id])->fetchAssociative());
}
}

25
src/Mapper/Etapa.php Normal file
View File

@ -0,0 +1,25 @@
<?php
namespace Incoviba\Mapper;
use Incoviba\Model\Model;
use Incoviba\Model\Proyecto\Etapa as BaseModel;
class Etapa extends Mapper
{
protected string $table = 'etapa_proyecto';
protected function load(bool|array $row, bool $lazy = false): BaseModel|bool
{
$model = new BaseModel();
$model->id = $row['id'];
$model->descripcion = $row['descripcion'];
$model->orden = $row['orden'];
return $model;
}
public function save(Model $model): bool
{
// TODO: Implement save() method.
}
}

View File

@ -23,4 +23,19 @@ class ProyectoAgente extends Mapper
{
// TODO: Implement save() method.
}
public function fetchOperadoresVigenteByProyecto(int $proyecto_id): array
{
$qb = $this->connection->createQueryBuilder()
->select('pa.*')
->from($this->table, 'pa')
->innerJoin('pa', 'agente_tipo', 'at', 'at.id = pa.agente')
->innerJoin('at', 'tipo_agente', 'ta', 'ta.id = at.tipo')
->innerJoin('pa', '(SELECT e1.* FROM estado_proyecto_agente e1 JOIN (SELECT MAX(id) AS id, agente FROM estado_proyecto_agente GROUP BY agente) e0 ON e0.id = e1.id)', 'ep', 'ep.agente = pa.id')
->innerJoin('ep', 'tipo_estado_proyecto_agente', 'tep', 'tep.id = ep.tipo')
->where('pa.proyecto = ?')
->andWhere('ta.descripcion = ?')
->andWhere('tep.descripcion = ?');
return array_map([$this, 'load'], $this->connection->executeQuery($qb, [$proyecto_id, 'operador', 'vigente'])->fetchAllAssociative());
}
}

24
src/Mapper/TipoAgente.php Normal file
View File

@ -0,0 +1,24 @@
<?php
namespace Incoviba\Mapper;
use Incoviba\Model\Model;
use Incoviba\Model\Proyecto\TipoAgente as BaseModel;
class TipoAgente extends Mapper
{
protected string $table = 'tipo_agente';
protected function load(bool|array $row, bool $lazy = false): BaseModel|bool
{
$model = new BaseModel();
$model->id = $row['id'];
$model->descripcion = $row['descripcion'];
return $model;
}
public function save(Model $model): bool
{
// TODO: Implement save() method.
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace Incoviba\Mapper;
use Incoviba\Model\Model;
use Incoviba\Model\Proyecto\TipoEstadoProyecto as BaseModel;
class TipoEstadoProyecto extends Mapper
{
protected string $table = 'tipo_estado_proyecto';
protected function load(bool|array $row, bool $lazy = false): BaseModel|bool
{
$model = new BaseModel();
$model->id = $row['id'];
$model->descripcion = $row['descripcion'];
$model->orden = $row['orden'];
$model->etapa = $this->getMapper(Etapa::class)->fetchById($row['etapa']);
return $model;
}
public function save(Model $model): bool
{
// TODO: Implement save() method.
}
}

View File

@ -4,5 +4,7 @@ namespace Incoviba\Model\Common;
class Comuna extends \Incoviba\Model\Model
{
public int $id;
public string $descripcion;
// public bool|Provincia $provincia;
}

View File

@ -7,5 +7,24 @@ class Direccion extends \Incoviba\Model\Model
public string $calle;
public int $numero;
public string $extra;
public Comuna $comuna;
public bool|Comuna $comuna;
public function completa(): string
{
$str = implode(' ', [$this->calle, $this->numero]);
if ($this->extra != '') {
$str .= ' ' . $this->extra;
}
if ($this->comuna) {
$str .= ', ' . $this->comuna->descripcion;
}
return $str;
}
public function jsonSerialize(): mixed
{
$arr = parent::jsonSerialize();
$arr['completa'] = $this->completa();
return $arr;
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace Incoviba\Model\Proyecto;
class Agente extends \Incoviba\Model\Model
{
public int $id;
public ?int $rut;
public string $descripcion;
public string $representante;
public string $abreviacion;
}

View File

@ -4,6 +4,6 @@ namespace Incoviba\Model\Proyecto;
class AgenteTipo extends \Incoviba\Model\Model
{
public int $id;
public Agente $agente;
public TipoAgente $tipo;
public bool|Agente $agente;
public bool|TipoAgente $tipo;
}

View File

@ -0,0 +1,11 @@
<?php
namespace Incoviba\Model\Proyecto;
class EstadoProyecto extends \Incoviba\Model\Model
{
public int $id;
public bool|Proyecto $proyecto;
public bool|TipoEstadoProyecto $tipo;
public \DateTimeInterface $fecha;
}

View File

@ -0,0 +1,10 @@
<?php
namespace Incoviba\Model\Proyecto;
class Etapa extends \Incoviba\Model\Model
{
public int $id;
public string $descripcion;
public int $orden;
}

View File

@ -9,9 +9,9 @@ use Incoviba\Model\Proyecto\Proyecto\Superficie;
class Proyecto extends Model
{
public int $id;
public Inmobiliaria $inmobiliaria;
public bool|Inmobiliaria $inmobiliaria;
public string $descripcion;
public Direccion $direccion;
public bool|Direccion $direccion;
public float $valor_terreno;
public Superficie $superficie;
public float $corredor;

View File

@ -0,0 +1,9 @@
<?php
namespace Incoviba\Model\Proyecto;
class TipoAgente extends \Incoviba\Model\Model
{
public int $id;
public string $descripcion;
}

View File

@ -0,0 +1,11 @@
<?php
namespace Incoviba\Model\Proyecto;
class TipoEstadoProyecto extends \Incoviba\Model\Model
{
public int $id;
public string $descripcion;
public int $orden;
public bool|Etapa $etapa;
}