Mappers
This commit is contained in:
26
src/Mapper/Agente.php
Normal file
26
src/Mapper/Agente.php
Normal 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.
|
||||
}
|
||||
}
|
@ -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
25
src/Mapper/Comuna.php
Normal 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.
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
55
src/Mapper/EstadoProyecto.php
Normal file
55
src/Mapper/EstadoProyecto.php
Normal 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
25
src/Mapper/Etapa.php
Normal 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.
|
||||
}
|
||||
}
|
@ -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
24
src/Mapper/TipoAgente.php
Normal 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.
|
||||
}
|
||||
}
|
26
src/Mapper/TipoEstadoProyecto.php
Normal file
26
src/Mapper/TipoEstadoProyecto.php
Normal 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.
|
||||
}
|
||||
}
|
@ -4,5 +4,7 @@ namespace Incoviba\Model\Common;
|
||||
|
||||
class Comuna extends \Incoviba\Model\Model
|
||||
{
|
||||
|
||||
public int $id;
|
||||
public string $descripcion;
|
||||
// public bool|Provincia $provincia;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
12
src/Model/Proyecto/Agente.php
Normal file
12
src/Model/Proyecto/Agente.php
Normal 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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
11
src/Model/Proyecto/EstadoProyecto.php
Normal file
11
src/Model/Proyecto/EstadoProyecto.php
Normal 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;
|
||||
}
|
10
src/Model/Proyecto/Etapa.php
Normal file
10
src/Model/Proyecto/Etapa.php
Normal 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;
|
||||
}
|
@ -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;
|
||||
|
9
src/Model/Proyecto/TipoAgente.php
Normal file
9
src/Model/Proyecto/TipoAgente.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Incoviba\Model\Proyecto;
|
||||
|
||||
class TipoAgente extends \Incoviba\Model\Model
|
||||
{
|
||||
public int $id;
|
||||
public string $descripcion;
|
||||
}
|
11
src/Model/Proyecto/TipoEstadoProyecto.php
Normal file
11
src/Model/Proyecto/TipoEstadoProyecto.php
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user