Optimizaciones y funciones

This commit is contained in:
2020-02-18 11:42:49 -03:00
parent 782e79dd30
commit 6b27fa12da
17 changed files with 690 additions and 546 deletions

View File

@ -20,22 +20,72 @@ use Incoviba\old\Common\Direccion;
* @property string abreviacion
*
*/
class Agente extends Model
{
public function direccion()
{
return $this->belongs_to(Direccion::class, 'direccion')->findOne();
class Agente extends Model {
protected $direccion_obj;
public function direccion() {
if ($this->direccion_obj === null) {
$this->direccion_obj = $this->setRelationship(Direccion::class, 'id', 'direccion')->one();
}
return $this->direccion_obj;
//return $this->belongs_to(Direccion::class, 'direccion')->findOne();
}
public function tipo()
{
return $this->belongs_to(TipoAgente::class, 'tipo')->findOne();
protected $tipo_obj;
public function tipo() {
if ($this->tipo_obj === null) {
$this->tipo_obj = $this->setRelationship(TipoAgente::class, 'id', 'tipo')->one();
}
return $this->tipo_obj;
//return $this->belongs_to(TipoAgente::class, 'tipo')->findOne();
}
protected $tipos;
public function tipos(int $tipo = 0)
{
if ($tipo == 0) {
if ($this->tipos === null) {
$this->tipos = [];
}
if (!isset($this->tipos[$tipo])) {
$this->tipos[$tipo] = $this->setRelationship(AgenteTipo::class, 'id', 'agente');
if ($tipo != 0) {
$this->tipos[$tipo] = $this->tipos[$tipo]->where(['tipo', $tipo]);
}
$this->tipos[$tipo];
}
return $this->tipos[$tipo];
/*if ($tipo == 0) {
return $this->hasMany(AgenteTipo::class, 'agente')->findMany();
}
return $this->hasMany(AgenteTipo::class, 'agente')->where('tipo', $tipo)->findOne();
return $this->hasMany(AgenteTipo::class, 'agente')->where('tipo', $tipo)->findOne();*/
}
protected $proyectos;
public function proyectos() {
if ($this->proyectos === null) {
$proyectos = [];
foreach ($this->tipos() as $tipo) {
foreach ($tipo->proyectos() as $proyecto) {
$proyectos []= $proyecto->proyecto();
}
}
usort($proyectos, function($a, $b) {
return strcmp($a->descripcion, $b->descripcion);
});
$this->proyectos = $proyectos;
}
return $this->proyectos;
}
public function hasProyecto(int $id): bool {
$proyectos = $this->proyectos();
foreach ($proyectos as $proyecto) {
if ($proyecto->id == $id) {
return true;
}
return false;
}
}
public function isOperador(): bool {
if ($this->tipos(19)) {
return true;
}
return false;
}
}
?>

View File

@ -7,14 +7,21 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property Agente $agente
* @property TipoAgente $tipo
*/
class AgenteTipo extends Model
{
public function agente()
{
return $this->belongsTo(Agente::class, 'agente')->findOne();
class AgenteTipo extends Model {
protected $agente_obj;
public function agente() {
if ($this->agente_obj === null) {
$this->agente_obj = $this->setRelationship(Agente::class, 'id', 'agente')->one();
}
public function tipo()
{
return $this->belongsTo(TipoAgente::class, 'tipo')->findOne();
return $this->agente_obj;
//return $this->belongsTo(Agente::class, 'agente')->findOne();
}
protected $tipo_obj;
public function tipo() {
if ($this->tipo_obj === null) {
$this->tipo_obj = $this->setRelationship(TipoAgente::class, 'id', 'tipo')->one();
}
}
return $this->tipo_obj;
//return $this->belongsTo(TipoAgente::class, 'tipo')->findOne();
}
}

View File

@ -14,24 +14,25 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property double $uf
* @property \DateTime $fecha_pagado
*/
class AvanceConstruccion extends Model
{
class AvanceConstruccion extends Model {
public static $_table = 'avance_construccion';
public function proyecto()
{
return $this->belongsTo(Proyecto::class, 'proyecto')->findOne();
protected $proyecto_obj;
public function proyecto() {
if ($this->proyecto_obj === null) {
$this->proyecto_obj = $this->setRelationship(Proyecto::class, 'id', 'proyecto')->one();
}
return $this->proyecto_obj;
//return $this->belongsTo(Proyecto::class, 'proyecto')->findOne();
}
public function fecha(\DateTime $fecha = null)
{
public function fecha(\DateTime $fecha = null) {
if ($fecha == null) {
return Carbon::parse($this->fecha, $this->container->get('settings')->app->timezone);
}
$this->fecha = $fecha->format('Y-m-d');
}
protected $pagare;
public function pagare()
{
public function pagare() {
if ($this->pagare == null) {
$this->pagare = $this->hasMany(Pagare::class, 'estado_pago', 'numero')
->where('proyecto', $this->proyecto)
@ -40,8 +41,7 @@ class AvanceConstruccion extends Model
return $this->pagare;
}
protected $pagares;
public function pagares()
{
public function pagares() {
if ($this->pagares == null) {
$this->pagares = $this->hasMany(Pagare::class, 'estado_pago', 'numero')
->where('proyecto', $this->proyecto)
@ -49,8 +49,7 @@ class AvanceConstruccion extends Model
}
return $this->pagares;
}
public function uf()
{
public function uf() {
if ($this->uf == 0) {
$uf = $this->container->get('uf')($this->fecha());
if ($uf->total > 0) {
@ -60,22 +59,19 @@ class AvanceConstruccion extends Model
}
return $this->uf;
}
public function pagado($tipo = 'ufs')
{
public function pagado($tipo = 'ufs') {
if ($tipo == 'ufs') {
return $this->pagado / $this->uf();
}
return $this->pagado;
}
public function fechaPago(\DateTime $fecha = null)
{
public function fechaPago(\DateTime $fecha = null) {
if ($fecha == null) {
return Carbon::parse($this->fecha_pagado, $this->container->get('settings')->app->timezone);
}
$this->fecha_pagado = $fecha->format('Y-m-d');
}
public function edit(array $data)
{
public function edit(array $data) {
foreach ($data as $column => $value) {
if (isset($this->$column) and $this->$column != $value) {
$this->$column = $value;

View File

@ -17,19 +17,29 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property string glosa
*
*/
class Cobro extends Model
{
public function proyecto()
{
return $this->has_one(Proyecto::class);
}
public function agente()
{
return $this->has_one(Agente::class);
}
public function tipo()
{
return $this->has_one(TipoCobro::class);
}
class Cobro extends Model {
protected $proyecto_obj;
public function proyecto() {
if ($this->proyecto_obj === null) {
$this->proyecto_obj = $this->setRelationship(Proyecto::class, 'id', 'proyecto')->one();
}
return $this->proyecto_obj;
//return $this->has_one(Proyecto::class);
}
protected $agente_obj;
public function agente() {
if ($this->agente_obj === null) {
$this->agente_obj = $this->setRelationship(Agente::class, 'id', 'agente')->one();
}
return $this->agente_obj;
//return $this->has_one(Agente::class);
}
protected $tipo_obj;
public function tipo() {
if ($this->tipo_obj === null) {
$this->tipo_obj = $this->setRelationship(TipoCobro::class, 'id', 'tipo')->one();
}
return $this->tipo_obj;
//return $this->has_one(TipoCobro::class);
}
}
?>

View File

@ -29,8 +29,7 @@ use Incoviba\old\Venta\Venta;
* @property int $subterraneos
*
*/
class Proyecto extends Model
{
class Proyecto extends Model {
protected $unidades;
protected $valores;
protected $tipo_unidades;
@ -44,16 +43,23 @@ class Proyecto extends Model
protected $cuotas;
protected $superficies;
public function inmobiliaria()
{
return $this->belongs_to(Inmobiliaria::class, 'inmobiliaria', 'rut')->findOne();
protected $inmobiliaria_obj;
public function inmobiliaria() {
if ($this->inmobiliaria_obj === null) {
$this->inmobiliaria_obj = $this->setRelationship(Inmobiliaria::class, 'rut', 'inmobiliaria')->one();
}
return $this->inmobiliaria_obj;
//return $this->belongs_to(Inmobiliaria::class, 'inmobiliaria', 'rut')->findOne();
}
public function direccion()
{
return $this->belongs_to(Direccion::class, 'direccion')->findOne();
protected $direccion_obj;
public function direccion() {
if ($this->direccion_obj === null) {
$this->direccion_obj = $this->setRelationship(Direccion::class, 'id', 'direccion')->one();
}
return $this->direccion_obj;
//return $this->belongs_to(Direccion::class, 'direccion')->findOne();
}
public function unidades($tipo = null)
{
public function unidades($tipo = null) {
if ($tipo == null) {
if (!isset($this->unidades) or !isset($this->unidades->total)) {
$unidades = [];
@ -97,8 +103,7 @@ class Proyecto extends Model
}
return $this->unidades->{$tipo};
}
public function unidadesDisponibles($tipo = null)
{
public function unidadesDisponibles($tipo = null) {
switch ($tipo) {
case 1:
case 'departamento':
@ -188,12 +193,15 @@ class Proyecto extends Model
}
return $this->unidades->disponibles->{$tipo};
}
public function proyectoTipoUnidades()
{
return $this->hasMany(ProyectoTipoUnidad::class, 'proyecto')->orderByAsc('tipo')->findMany();
protected $ptus;
public function proyectoTipoUnidades() {
if ($this->ptus === null) {
$this->ptus = $this->setRelationship(ProyectoTipoUnidad::class, 'proyecto', 'id')->sort(['tipo', 'asc'])->many();
}
return $this->ptus;
//return $this->hasMany(ProyectoTipoUnidad::class, 'proyecto')->orderByAsc('tipo')->findMany();
}
public function tipoUnidades()
{
public function tipoUnidades() {
if (!isset($this->tipos_unidades)) {
$tipos = \Model::factory(TipoUnidad::class)
->select('tipo_unidad.*')
@ -207,8 +215,7 @@ class Proyecto extends Model
}
return $this->tipos_unidades;
}
public function ventas($order = 'departamento')
{
public function ventas($order = 'departamento') {
if (!isset($this->ventas)) {
$ventas = model(Venta::class)
->select('venta.*')
@ -236,9 +243,8 @@ class Proyecto extends Model
return $this->ventas;
}
protected $resciliaciones;
public function resciliaciones()
{
if ($this->resciliaciones == null) {
public function resciliaciones() {
if ($this->resciliaciones === null) {
$resciliaciones = model(Venta::class)
->select('venta.*')
->join('propiedad', ['propiedad.id', '=', 'venta.propiedad'])
@ -258,8 +264,7 @@ class Proyecto extends Model
}
return $this->resciliaciones;
}
public function escrituras()
{
public function escrituras() {
if (!isset($escrituras)) {
$ventas = model(Venta::class)
->select('venta.*')
@ -279,8 +284,7 @@ class Proyecto extends Model
}
return $this->escrituras;
}
public function entregas()
{
public function entregas() {
if (!isset($this->entregas)) {
$entregas = [];
$escrituras = $this->escrituras();
@ -306,12 +310,15 @@ class Proyecto extends Model
}
return $this->entregas;
}
public function estados()
{
return $this->has_many(EstadoProyecto::class, 'proyecto')->orderByAsc('fecha')->findMany();
protected $estados;
public function estados() {
if ($this->estados === null) {
$this->estados = $this->setRelationship(EstadoProyecto::class, 'proyecto', 'id')->sort(['fecha', 'asc'])->many();
}
return $this->estados;
//return $this->has_many(EstadoProyecto::class, 'proyecto')->orderByAsc('fecha')->findMany();
}
public function estado()
{
public function estado() {
if (!isset($this->estado)) {
$id = $this->has_many(EstadoProyecto::class, 'proyecto')->max('id');
$this->estado = $this->has_many(EstadoProyecto::class, 'proyecto')->findOne($id);
@ -319,13 +326,16 @@ class Proyecto extends Model
}
return $this->estado;
}
public function avances()
{
return $this->hasMany(AvanceConstruccion::class, 'proyecto')->orderByAsc('fecha')->findMany();
protected $avances;
public function avances() {
if ($this->avances === null) {
$this->avances = $this->setRelationship(AvanceConstruccion::class, 'proyecto', 'id')->sort(['fecha', 'asc'])->many();
}
return $this->avances;
//return $this->hasMany(AvanceConstruccion::class, 'proyecto')->orderByAsc('fecha')->findMany();
}
protected $avance;
public function avance()
{
public function avance() {
if ($this->avance == null and $this->avances()) {
$avance = array_reduce($this->avances(), function($carry, $item) {
return ($carry += $item->avance);
@ -335,8 +345,7 @@ class Proyecto extends Model
return $this->avance;
}
protected $inicio;
public function inicio()
{
public function inicio() {
if (!isset($this->inicio) or $this->inicio == null) {
$id = $this->has_many(EstadoProyecto::class, 'proyecto')->min('id');
$this->inicio = $this->has_many(EstadoProyecto::class, 'proyecto')->findOne($id);
@ -344,8 +353,7 @@ class Proyecto extends Model
}
return $this->inicio;
}
public function valores()
{
public function valores() {
if (!isset($this->valores)) {
$ventas = $this->ventas();
@ -473,8 +481,7 @@ class Proyecto extends Model
return $this->valores;
}
public function agentes()
{
public function agentes() {
if (!isset($this->agentes)) {
$this->agentes = \Model::factory(Agente::class)
->select('agente.*')
@ -485,8 +492,7 @@ class Proyecto extends Model
}
return $this->agentes;
}
public function operadores()
{
public function operadores() {
if (!isset($this->operadores)) {
$this->operadores = \Model::factory(Agente::class)
->select('agente.*')
@ -501,8 +507,7 @@ class Proyecto extends Model
}
return $this->operadores;
}
public function operadoresVigentes()
{
public function operadoresVigentes() {
return $this->hasMany(ProyectoAgente::class, 'proyecto')
->select('proyecto_agente.*')
->join('agente_tipo', ['agente_tipo.id', '=', 'proyecto_agente.agente'])
@ -511,8 +516,7 @@ class Proyecto extends Model
->where('ep.tipo', 1)
->findMany();
}
public function promociones()
{
public function promociones() {
if (!isset($this->promociones)) {
$this->promociones = \Model::factory(Promocion::class)
->select('promocion.*')
@ -527,8 +531,7 @@ class Proyecto extends Model
}
return $this->promociones;
}
public function pisos()
{
public function pisos() {
if ($this->pisos == 0) {
$pisos = $this->has_many(Unidad::class, 'proyecto')->where('tipo', 1)->max('piso');
if (!$pisos) {
@ -539,8 +542,7 @@ class Proyecto extends Model
}
return $this->pisos;
}
public function cuotasHoy()
{
public function cuotasHoy() {
if (!isset($this->cuotas) or !isset($this->cuotas->hoy)) {
$cuotas = [];
if (isset($this->cuotas)) {
@ -563,8 +565,7 @@ class Proyecto extends Model
}
return $this->cuotas->hoy;
}
public function cuotasPendientes()
{
public function cuotasPendientes() {
if (!isset($this->cuotas) or !isset($this->cuotas->pendientes)) {
$cuotas = [];
if (isset($this->cuotas)) {
@ -587,8 +588,7 @@ class Proyecto extends Model
}
return $this->cuotas->pendientes;
}
public function cuotasMes()
{
public function cuotasMes() {
if (!isset($this->cuotas) or !isset($this->cuotas->mes)) {
$cuotas = [];
if (isset($this->cuotas)) {
@ -611,16 +611,14 @@ class Proyecto extends Model
}
return $this->cuotas->mes;
}
public function tiposMediciones()
{
public function tiposMediciones() {
$tipos = $this->has_many_through(\Incoviba\nuevo\Venta\TipoMedicion::class, \Incoviba\nuevo\Venta\ProyectoTipoMedicion::class, 'proyecto_id', 'tipo_medicion_id');
if ($tipos) {
return $tipos->orderByAsc('descripcion')->findMany();
}
return null;
}
public function superficie($tipo = 'total')
{
public function superficie($tipo = 'total') {
if (!isset($this->superficies) or !isset($this->superficies->{$tipo})) {
$superficies = [];
if (isset($this->superficies)) {
@ -675,8 +673,7 @@ class Proyecto extends Model
}
return $this->superficies->{$tipo};
}
public function setDireccion(array $data)
{
public function setDireccion(array $data) {
if (!is_numeric($data['comuna'])) {
$comuna = model(Comuna::class)->where('descripcion', $data['comuna'])->findOne();
$data['comuna'] = $comuna->id;
@ -689,16 +686,14 @@ class Proyecto extends Model
->findOne();
$this->direccion = $direccion->id;
}
public function addAgente(array $data)
{
public function addAgente(array $data) {
$data = ['agente' => $data['agente'], 'tipo' => $data['tipo']];
$agente = (new Factory(AgenteTipo::class))->create($data);
$agente->save();
$this->agentes []= $agente;
}
protected $tipologias;
public function tipologias()
{
public function tipologias() {
if ($this->tipologias == null) {
$pts = $this->proyectoTipoUnidades();
$tipologias = [];
@ -715,13 +710,16 @@ class Proyecto extends Model
}
return $this->tipologias;
}
public function pagares()
{
return $this->hasMany(Pagare::class, 'proyecto')->findMany();
protected $pagares;
public function pagares() {
if ($this->pagares === null) {
$this->pagares = $this->setRelationship(Pagare::class, 'proyecto', 'id')->many();
}
return $this->pagares;
//return $this->hasMany(Pagare::class, 'proyecto')->findMany();
}
protected $cierres;
public function cierres(int $vigentes = 0)
{
public function cierres(int $vigentes = 0) {
if (!isset($this->cierres[$vigentes]) or $this->cierres[$vigentes] == null) {
$orm = model(Cierre::class)
->select('cierre.*')
@ -761,8 +759,13 @@ class Proyecto extends Model
}
return $this->cierres[$vigentes];
}
protected $tipos;
public function tipos() {
return $this->hasMany(ProyectoTipoUnidad::class, 'proyecto')->findMany();
if ($this->tipos === null) {
$this->tipos = $this->setRelationship(ProyectoTipoUnidad::class, 'proyecto', 'id')->many();
}
return $this->tipos;
//return $this->hasMany(ProyectoTipoUnidad::class, 'proyecto')->findMany();
}
}