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

@ -11,19 +11,16 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property string nombre * @property string nombre
* *
*/ */
class Banco extends Model class Banco extends Model {
{ public function nombreCompleto() {
public function nombreCompleto() $str = [];
{
$str = '';
switch ($this->nombre) { switch ($this->nombre) {
case 'Estado': case 'Estado':
case 'Chile': case 'Chile':
case 'Edwards': case 'Edwards':
$str .= 'Banco '; $str []= 'Banco ';
} }
$str .= $this->nombre; $str []= $this->nombre;
return $str; return implode('', $str);
} }
} }
?>

View File

@ -12,11 +12,13 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property Provincia provincia * @property Provincia provincia
* *
*/ */
class Comuna extends Model class Comuna extends Model {
{ protected $provincia_obj;
public function provincia() public function provincia() {
{ if ($this->provincia_obj === null) {
return $this->belongs_to(Provincia::class, 'provincia')->findOne(); $this->provincia_obj = $this->setRelationship(Provincia::class, 'id', 'provincia')->one();
//$this->provincia = $this->childOf(Provincia::class, [Model::SELF_KEY => 'provincia'])->one();
}
return $this->provincia_obj;
} }
} }
?>

View File

@ -14,23 +14,26 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property Comuna comuna * @property Comuna comuna
* *
*/ */
class Direccion extends Model class Direccion extends Model {
{ protected $comuna_obj;
public function comuna() public function comuna() {
{ if ($this->comuna_obj === null) {
return $this->belongs_to(Comuna::class, 'comuna')->findOne(); $this->comuna_obj = $this->setRelationship(Comuna::class, 'id', 'comuna')->one();
}
return $this->comuna_obj;
//return $this->belongs_to(Comuna::class, 'comuna')->findOne();
} }
public function completa($comuna = false) public function completa($comuna = false) {
{ $str = [$this->calle, ' ', $this->numero];
$str = $this->calle . ' ' . $this->numero;
if ($this->extra != '') { if ($this->extra != '') {
$str .= ', ' . $this->extra; $str []= ', ';
$str []= $this->extra;
} }
if ($comuna) { if ($comuna) {
$str .= ', ' . $this->comuna()->descripcion; $str []= ', ';
$str []= $this->comuna()->descripcion;
} }
return $str; return implode('', $str);
} }
} }
?>

View File

@ -12,15 +12,21 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property Region region * @property Region region
* *
*/ */
class Provincia extends Model class Provincia extends Model {
{ protected $region_obj;
public function region() public function region() {
{ if ($this->region_obj === null) {
return $this->belongsTo(Region::class, 'region')->findOne(); $this->region_obj = $this->setRelationship(Region::class, 'id', 'region')->one();
}
return $this->region_obj;
//return $this->belongsTo(Region::class, 'region')->findOne();
} }
public function comunas() protected $comunas;
{ public function comunas() {
return $this->hasMany(Comuna::class, 'provincia')->findMany(); if ($this->comunas === null) {
$this->comunas = $this->setRelationship(Comuna::class, 'provincia', 'id')->many();
}
return $this->comunas;
//return $this->hasMany(Comuna::class, 'provincia')->findMany();
} }
} }
?>

View File

@ -13,21 +13,19 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property int numeracion * @property int numeracion
* *
*/ */
class Region extends Model class Region extends Model {
{
private $provincias = null;
private $comunas = null;
public function provincias() protected $provincias;
{ public function provincias() {
if ($this->provincias == null) { if ($this->provincias === null) {
$this->provincias = $this->hasMany(Provincia::class, 'region')->findMany(); $this->provincias = $this->setRelationship(Provincia::class, 'region', 'id')->many();
//$this->provincias = $this->hasMany(Provincia::class, 'region')->findMany();
} }
return $this->provincias; return $this->provincias;
} }
public function comunas() protected $comunas;
{ public function comunas() {
if ($this->comunas == null) { if ($this->comunas === null) {
$provincias = $this->provincias(); $provincias = $this->provincias();
$comunas = []; $comunas = [];
foreach ($provincias as $prov) { foreach ($provincias as $prov) {
@ -41,4 +39,3 @@ class Region extends Model
return $this->comunas; return $this->comunas;
} }
} }
?>

View File

@ -10,14 +10,21 @@ use Incoviba\old\Common\Banco;
* @property Banco $banco * @property Banco $banco
* @property string $cuenta * @property string $cuenta
*/ */
class Cuenta extends Model class Cuenta extends Model {
{ protected $inmobiliaria_obj;
public function inmobiliaria() public function inmobiliaria() {
{ if ($this->inmobiliaria_obj === null) {
return $this->belongsTo(Inmobiliaria::class, 'inmobiliaria', 'rut')->findOne(); $this->inmobiliaria_obj = $this->setRelationship(Inmobiliaria::class, 'rut', 'inmobiliaria')->one();
}
return $this->inmobiliaria_obj;
//return $this->belongsTo(Inmobiliaria::class, 'inmobiliaria', 'rut')->findOne();
} }
public function banco() protected $banco_obj;
{ public function banco() {
return $this->belongsTo(Banco::class, 'banco')->findOne(); if ($this->banco_obj === null) {
$this->banco_obj = $this->setRelationship(Banco::class, 'id', 'banco')->one();
}
return $this->banco_obj;
//return $this->belongsTo(Banco::class, 'banco')->findOne();
} }
} }

View File

@ -18,38 +18,48 @@ use Incoviba\old\Proyecto\Proyecto;
* @property TipoSociedad $sociedad * @property TipoSociedad $sociedad
* *
*/ */
class Inmobiliaria extends Model class Inmobiliaria extends Model {
{
public static $_id_column = 'rut'; public static $_id_column = 'rut';
public function banco() public function banco() {
{
return $this->cuenta()->banco(); return $this->cuenta()->banco();
//return $this->belongsTo(Banco::class, 'banco')->findOne(); //return $this->belongsTo(Banco::class, 'banco')->findOne();
} }
public function proyectos() protected $proyectos;
{ public function proyectos() {
return $this->hasMany(Proyecto::class, 'inmobiliaria', 'rut')->orderByAsc('descripcion')->findMany(); if ($this->proyectos === null) {
$this->proyectos = $this->setRelationship(Proyecto::class, 'inmobiliaria', 'rut')->sort('descripcion')->many();
}
return $this->proyectos;
//return $this->hasMany(Proyecto::class, 'inmobiliaria', 'rut')->orderByAsc('descripcion')->findMany();
} }
public function nombre(bool $tipo = false) public function nombre(bool $tipo = false) {
{ return implode(' ', [
return $this->abreviacion . (($tipo) ? ' ' . $this->sociedad()->abreviacion . '.' : ''); $this->abreviacion,
(($tipo) ? $this->sociedad()->abreviacion . '.' : '')
]);
} }
public function rut() public function rut() {
{
return format('rut', $this->rut) . '-' . $this->dv; return format('rut', $this->rut) . '-' . $this->dv;
} }
protected $sociedad_obj;
public function sociedad() { public function sociedad() {
return $this->belongsTo(TipoSociedad::class, 'sociedad')->findOne(); if ($this->sociedad_obj === null) {
$this->sociedad_obj = $this->setRelationship(TipoSociedad::class, 'id', 'sociedad')->one();
}
return $this->sociedad_obj;
//return $this->belongsTo(TipoSociedad::class, 'sociedad')->findOne();
} }
public function razon(bool $tipo = false, bool $abreviado = false) { public function razon(bool $tipo = false, bool $abreviado = false) {
return $this->razon . (($tipo) ? ' ' . (($abreviado) ? $this->sociedad()->abreviacion . '.' : $this->sociedad()->descripcion) : ''); return implode(' ', [
$this->razon,
(($tipo) ? (($abreviado) ? $this->sociedad()->abreviacion . '.' : $this->sociedad()->descripcion) : '')
]);
} }
/** /**
* $data = ['descripcion', 'calle', 'numero', 'extra', 'comuna'] * $data = ['descripcion', 'calle', 'numero', 'extra', 'comuna']
*/ */
public function addProyecto(array $data) public function addProyecto(array $data) {
{
//$proyecto = model(Proyecto::class)->where('inmobiliaria', $this->rut)->where('descripcion', $data['descripcion'])->findOne(); //$proyecto = model(Proyecto::class)->where('inmobiliaria', $this->rut)->where('descripcion', $data['descripcion'])->findOne();
$data = [ $data = [
'inmobiliaria' => $this->rut, 'inmobiliaria' => $this->rut,
@ -65,8 +75,7 @@ class Inmobiliaria extends Model
$proyecto->save(); $proyecto->save();
} }
} }
public function removeProyecto(array $data) public function removeProyecto(array $data) {
{
$proyecto = (new Factory(Proyecto::class))->where([ $proyecto = (new Factory(Proyecto::class))->where([
'inmobiliaria' => $this->rut, 'inmobiliaria' => $this->rut,
'descripcion' => $data['descripcion'] 'descripcion' => $data['descripcion']
@ -75,19 +84,26 @@ class Inmobiliaria extends Model
$proyecto->delete(); $proyecto->delete();
} }
} }
public function cuenta() protected $cuenta_obj;
{ public function cuenta() {
if (count($this->cuentas()) == 0) { if ($this->cuenta_obj === null) {
$this->cuenta_obj = $this->setRelationship(Cuenta::class, 'inmobiliaria', 'rut')->one();
}
return $this->cuenta_obj;
/*if (count($this->cuentas()) == 0) {
return false; return false;
} }
return $this->cuentas()[0]; return $this->cuentas()[0];*/
} }
public function cuentas() protected $cuentas;
{ public function cuentas() {
return $this->hasMany(Cuenta::class, 'inmobiliaria', 'rut')->findMany(); if ($this->cuentas === null) {
$this->cuentas = $this->setRelationship(Cuenta::class, 'inmobiliaria', 'rut')->many();
}
return $this->cuentas;
//return $this->hasMany(Cuenta::class, 'inmobiliaria', 'rut')->findMany();
} }
public function addCuenta(array $data) public function addCuenta(array $data) {
{
if (!is_numeric($data['banco'])) { if (!is_numeric($data['banco'])) {
$banco = (new Factory(Banco::class))->where(['descripcion' => $data['banco']])->find(); $banco = (new Factory(Banco::class))->where(['descripcion' => $data['banco']])->find();
$data['banco'] = $banco->id; $data['banco'] = $banco->id;
@ -103,8 +119,7 @@ class Inmobiliaria extends Model
$cuenta->save(); $cuenta->save();
} }
} }
public function removeCuenta(array $data) public function removeCuenta(array $data) {
{
$cuenta = (new Factory(Cuenta::class))->where(['inmobiliaria' => $this->rut]); $cuenta = (new Factory(Cuenta::class))->where(['inmobiliaria' => $this->rut]);
if (isset($data['cuenta'])) { if (isset($data['cuenta'])) {
$cuenta = $cuenta->where(['cuenta' => $data['cuenta']]); $cuenta = $cuenta->where(['cuenta' => $data['cuenta']]);
@ -121,8 +136,7 @@ class Inmobiliaria extends Model
$cuenta->delete(); $cuenta->delete();
} }
} }
public function modify(array $data) public function modify(array $data) {
{
$fields = ['rut', 'dv', 'razon', 'abreviacion']; $fields = ['rut', 'dv', 'razon', 'abreviacion'];
foreach ($data as $column => $value) { foreach ($data as $column => $value) {
if (array_search($column, $fields) !== false) { if (array_search($column, $fields) !== false) {
@ -132,4 +146,3 @@ class Inmobiliaria extends Model
$this->cuenta()->modify($data); $this->cuenta()->modify($data);
} }
} }
?>

View File

@ -10,15 +10,21 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property int hijo * @property int hijo
* *
*/ */
class RelacionInmobiliarias extends Model class RelacionInmobiliarias extends Model {
{ protected $padre_obj;
public function padre() public function padre() {
{ if ($this->padre_obj === null) {
return $this->belongsTo(Inmobiliaria::class, 'padre', 'rut')->findOne(); $this->padre_obj = $this->setRelationship(Inmobiliaria::class, 'rut', 'padre')->one();
}
return $this->padre_obj;
//return $this->belongsTo(Inmobiliaria::class, 'padre', 'rut')->findOne();
} }
public function hijo() protected $hijo_obj;
{ public function hijo() {
return $this->belongsTo(Inmobiliaria::class, 'hijo', 'rut')->findOne(); if ($this->hijo_obj === null) {
$this->hijo_obj = $this->setRelationship(Inmobiliaria::class, 'rut', 'hijo')->one();
}
return $this->hijo_obj;
//return $this->belongsTo(Inmobiliaria::class, 'hijo', 'rut')->findOne();
} }
} }
?>

View File

@ -20,22 +20,72 @@ use Incoviba\old\Common\Direccion;
* @property string abreviacion * @property string abreviacion
* *
*/ */
class Agente extends Model class Agente extends Model {
{ protected $direccion_obj;
public function direccion() public function direccion() {
{ if ($this->direccion_obj === null) {
return $this->belongs_to(Direccion::class, 'direccion')->findOne(); $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() protected $tipo_obj;
{ public function tipo() {
return $this->belongs_to(TipoAgente::class, 'tipo')->findOne(); 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) 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')->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 Agente $agente
* @property TipoAgente $tipo * @property TipoAgente $tipo
*/ */
class AgenteTipo extends Model class AgenteTipo extends Model {
{ protected $agente_obj;
public function agente() public function agente() {
{ if ($this->agente_obj === null) {
return $this->belongsTo(Agente::class, 'agente')->findOne(); $this->agente_obj = $this->setRelationship(Agente::class, 'id', 'agente')->one();
} }
public function tipo() return $this->agente_obj;
{ //return $this->belongsTo(Agente::class, 'agente')->findOne();
return $this->belongsTo(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->belongsTo(TipoAgente::class, 'tipo')->findOne();
}
}

View File

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

View File

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

View File

@ -14,12 +14,10 @@ use Incoviba\old\Proyecto\Proyecto;
* @property int $relacionado * @property int $relacionado
* @property Propietario $propietario * @property Propietario $propietario
*/ */
class Cierre extends Model class Cierre extends Model {
{
const VIGENTES = 1; const VIGENTES = 1;
const NO_VIGENTES = -1; const NO_VIGENTES = -1;
public static function find(Proyecto $proyecto, Unidad $unidad, float $precio) public static function find(Proyecto $proyecto, Unidad $unidad, float $precio) {
{
return model(Cierre::class) return model(Cierre::class)
->select('cierre.*') ->select('cierre.*')
->join('unidad_cierre', ['unidad_cierre.cierre', '=', 'cierre.id']) ->join('unidad_cierre', ['unidad_cierre.cierre', '=', 'cierre.id'])
@ -27,8 +25,7 @@ class Cierre extends Model
->where('unidad_cierre.unidad', $unidad->id) ->where('unidad_cierre.unidad', $unidad->id)
->where('cierre.precio', $precio); ->where('cierre.precio', $precio);
} }
public static function vigentes() public static function vigentes() {
{
return model(Cierre::class) return model(Cierre::class)
->select('cierre.*') ->select('cierre.*')
->join('estado_cierre', ['estado_cierre.cierre', '=', 'cierre.id']) ->join('estado_cierre', ['estado_cierre.cierre', '=', 'cierre.id'])
@ -40,8 +37,7 @@ class Cierre extends Model
->groupBy('cierre.id') ->groupBy('cierre.id')
->findMany(); ->findMany();
} }
public static function proyectos() public static function proyectos() {
{
return model(Proyecto::class) return model(Proyecto::class)
->select('proyecto.*') ->select('proyecto.*')
->join('cierre', ['proyecto.id', '=', 'cierre.proyecto']) ->join('cierre', ['proyecto.id', '=', 'cierre.proyecto'])
@ -54,39 +50,52 @@ class Cierre extends Model
->findMany(); ->findMany();
} }
public function proyecto() protected $proyecto_obj;
{ public function proyecto() {
return $this->belongsTo(Proyecto::class, 'proyecto')->findOne(); 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 unidades() protected $unidades;
{ public function unidades() {
return $this->hasMany(UnidadCierre::class, 'cierre')->where('principal', 0)->findMany(); if ($this->unidades === null) {
$this->unidades = $this->setRelationship(UnidadCierre::class, 'cierre', 'id')->where(['principal', 0])->many();
}
return $this->unidades;
//return $this->hasMany(UnidadCierre::class, 'cierre')->where('principal', 0)->findMany();
} }
public function unidadPrincipal() protected $principal;
{ public function unidadPrincipal() {
return $this->hasMany(UnidadCierre::class, 'cierre')->where('principal', 1)->findOne(); if ($this->principal === null) {
$this->principal = $this->setRelationship(UnidadCierre::class, 'cierre', 'id')->where(['principal', 1])->one();
}
return $this->principal;
//return $this->hasMany(UnidadCierre::class, 'cierre')->where('principal', 1)->findOne();
} }
public function fecha(\DateTime $fecha = null) public function fecha(\DateTime $fecha = null) {
{
if ($fecha == null) { if ($fecha == null) {
return Carbon::parse($this->fecha, $this->container->get('settings')->app->timezone); return Carbon::parse($this->fecha, $this->container->get('settings')->app->timezone);
} }
$this->fecha = $fecha->format('Y-m-d'); $this->fecha = $fecha->format('Y-m-d');
} }
public function propietario() protected $propietario_obj;
{ public function propietario() {
$propietario = $this->belongsTo(Propietario::class, 'propietario'); if ($this->propietario_obj === null) {
$this->propietario_obj = $this->setRelationship(Propietario::class, 'rut', 'propietario')->one();
}
return $propietario_obj;
/*$propietario = $this->belongsTo(Propietario::class, 'propietario');
if ($propietario) { if ($propietario) {
return $propietario->findOne(); return $propietario->findOne();
} }
return false; return false;*/
} }
public function uf_m2() public function uf_m2() {
{
return $this->neto() / $this->unidadPrincipal()->unidad()->m2(); return $this->neto() / $this->unidadPrincipal()->unidad()->m2();
} }
public function neto() public function neto() {
{
$valor = $this->precio; $valor = $this->precio;
foreach ($this->unidades() as $unidad) { foreach ($this->unidades() as $unidad) {
$valor -= $unidad->unidad()->precio($this->fecha())->valor; $valor -= $unidad->unidad()->precio($this->fecha())->valor;
@ -99,24 +108,30 @@ class Cierre extends Model
} }
return $valor; return $valor;
} }
public function valores() protected $valores;
{ public function valores() {
return $this->hasMany(ValorCierre::class, 'cierre')->findMany(); if ($this->valores === null) {
$this->valores = $this->setRelationship(ValorCierre::class, 'cierre', 'id')->many();
}
return $this->valores;
//return $this->hasMany(ValorCierre::class, 'cierre')->findMany();
} }
public function valor($tipo = 'pie') public function valor($tipo = 'pie') {
{
return $this->hasMany(ValorCierre::class, 'cierre') return $this->hasMany(ValorCierre::class, 'cierre')
->select('valor_cierre.*') ->select('valor_cierre.*')
->join('tipo_valor_cierre', ['tipo_valor_cierre.id', '=', 'valor_cierre.tipo']) ->join('tipo_valor_cierre', ['tipo_valor_cierre.id', '=', 'valor_cierre.tipo'])
->where('tipo_valor_cierre.descripcion', $tipo) ->where('tipo_valor_cierre.descripcion', $tipo)
->findOne(); ->findOne();
} }
public function estados() protected $estados;
{ public function estados() {
return $this->hasMany(EstadoCierre::class, 'cierre')->findMany(); if ($this->estados === null) {
$this->estados = $this->setRelationship(EstadoCierre::class, 'cierre', 'id')->many();
}
return $this->estados;
//return $this->hasMany(EstadoCierre::class, 'cierre')->findMany();
} }
public function estado(\DateTime $fecha = null) public function estado(\DateTime $fecha = null) {
{
if ($fecha == null) { if ($fecha == null) {
$estado = $this->hasMany(EstadoCierre::class, 'cierre')->orderByDesc('id')->findOne(); $estado = $this->hasMany(EstadoCierre::class, 'cierre')->orderByDesc('id')->findOne();
if ($estado->tipo()->vigente == 1 and $this->oldest()) { if ($estado->tipo()->vigente == 1 and $this->oldest()) {
@ -136,8 +151,7 @@ class Cierre extends Model
} }
return $estado; return $estado;
} }
public function new(\DateTime $fecha) public function new(\DateTime $fecha) {
{
$this->save(); $this->save();
$tipo = model(TipoEstadoCierre::class)->where('descripcion', 'revisado')->findOne(); $tipo = model(TipoEstadoCierre::class)->where('descripcion', 'revisado')->findOne();
$data = [ $data = [
@ -199,22 +213,19 @@ class Cierre extends Model
$estado->save(); $estado->save();
}); });
} }
public function addUnidad(array $data) public function addUnidad(array $data) {
{
$data['cierre'] = $this->id; $data['cierre'] = $this->id;
$unidad = model(UnidadCierre::class)->create($data); $unidad = model(UnidadCierre::class)->create($data);
$unidad->save(); $unidad->save();
} }
public function addValor(array $data) public function addValor(array $data) {
{
$data['cierre'] = $this->id; $data['cierre'] = $this->id;
$tipo = model(TipoValorCierre::class)->where('descripcion', $data['tipo'])->findOne(); $tipo = model(TipoValorCierre::class)->where('descripcion', $data['tipo'])->findOne();
$data['tipo'] = $tipo->id; $data['tipo'] = $tipo->id;
$valor = model(ValorCierre::class)->create($data); $valor = model(ValorCierre::class)->create($data);
$valor->save(); $valor->save();
} }
public static function evaluar($precio_neto, $unidad, $fecha, $relacionado = false) public static function evaluar($precio_neto, $unidad, $fecha, $relacionado = false) {
{
$precio_oferta = round($precio_neto, 2); $precio_oferta = round($precio_neto, 2);
$precio_lista = round($unidad->precio($fecha)->valor * (($relacionado) ? (1 - 0.06) : 1), 2); $precio_lista = round($unidad->precio($fecha)->valor * (($relacionado) ? (1 - 0.06) : 1), 2);
if ($precio_oferta >= $precio_lista) { if ($precio_oferta >= $precio_lista) {
@ -222,8 +233,7 @@ class Cierre extends Model
} }
return false; return false;
} }
public function guardar(object $input) public function guardar(object $input) {
{
$this->proyecto = $input->proyecto->id; $this->proyecto = $input->proyecto->id;
$this->precio = $input->precio; $this->precio = $input->precio;
$this->fecha = $input->fecha->format('Y-m-d'); $this->fecha = $input->fecha->format('Y-m-d');
@ -277,8 +287,7 @@ class Cierre extends Model
$this->addValor($data); $this->addValor($data);
} }
} }
public function aprobar(\DateTime $fecha) public function aprobar(\DateTime $fecha) {
{
$tipo = model(TipoEstadoCierre::class)->where('descripcion', 'aprobado')->findOne(); $tipo = model(TipoEstadoCierre::class)->where('descripcion', 'aprobado')->findOne();
$data = [ $data = [
'cierre' => $this->id, 'cierre' => $this->id,
@ -291,8 +300,7 @@ class Cierre extends Model
$estado->save(); $estado->save();
} }
} }
public function rechazar(\DateTime $fecha) public function rechazar(\DateTime $fecha) {
{
$tipo = model(TipoEstadoCierre::class)->where('descripcion', 'rechazado')->findOne(); $tipo = model(TipoEstadoCierre::class)->where('descripcion', 'rechazado')->findOne();
$data = [ $data = [
'cierre' => $this->id, 'cierre' => $this->id,
@ -320,8 +328,7 @@ class Cierre extends Model
} }
} }
protected $promesa; protected $promesa;
public function promesa() public function promesa() {
{
if (!$this->unidadPrincipal()) { if (!$this->unidadPrincipal()) {
$this->promesa = false; $this->promesa = false;
} }

View File

@ -15,7 +15,5 @@ use Incoviba\Common\Alias\OldModel as Model;
* @property int pago_reserva * @property int pago_reserva
* *
*/ */
class Entrega extends Model class Entrega extends Model {
{
} }
?>

View File

@ -24,23 +24,26 @@ use Incoviba\old\Proyecto\ProyectoTipoUnidad;
* @property float valor * @property float valor
* *
*/ */
class Unidad extends Model class Unidad extends Model {
{ protected $proyecto_obj;
public function proyecto() public function proyecto() {
{ if ($this->proyecto_obj === null) {
$proyecto = $this->belongs_to(Proyecto::class, 'proyecto')->findOne(); $this->proyecto_obj = $this->setRelationship(Proyecto::class, 'id', 'proyecto')->one();
}
return $this->proyecto_obj;
/*$proyecto = $this->belongs_to(Proyecto::class, 'proyecto')->findOne();
$proyecto->setContainer($this->container); $proyecto->setContainer($this->container);
return $proyecto; return $proyecto;*/
} }
protected $propiedad; protected $propiedad;
public function propiedad() public function propiedad() {
{ if ($this->propiedad === null) {
if ($this->propiedad == null) { $this->propiedad = $this->setRelationship(PropiedadUnidad::class, 'unidad', 'id')->one();
$this->propiedad = $this->hasMany(PropiedadUnidad::class, 'unidad')->findOne(); //$this->propiedad = $this->hasMany(PropiedadUnidad::class, 'unidad')->findOne();
} }
return $this->propiedad; return $this->propiedad;
if ($this->tipo()->descripcion == 'departamento') { /*if ($this->tipo()->descripcion == 'departamento') {
$propiedad = $this->has_one(Propiedad::class, 'unidad_principal'); $propiedad = $this->has_one(Propiedad::class, 'unidad_principal');
if ($propiedad) { if ($propiedad) {
return $propiedad->findOne(); return $propiedad->findOne();
@ -86,15 +89,18 @@ class Unidad extends Model
return $propiedad; return $propiedad;
} }
return null; return null;
} }*/
} }
public function tipo() protected $tipo_obj;
{ public function tipo() {
return $this->belongs_to(TipoUnidad::class, 'tipo')->findOne(); if ($this->tipo_obj === null) {
$this->tipo_obj = $this->setRelationship(TipoUnidad::class, 'id', 'tipo')->one();
}
return $this->tipo_obj;
//return $this->belongs_to(TipoUnidad::class, 'tipo')->findOne();
} }
private $venta = null; private $venta = null;
public function venta() public function venta() {
{
if ($this->venta == null) { if ($this->venta == null) {
$propiedad = $this->propiedad(); $propiedad = $this->propiedad();
if ($propiedad) { if ($propiedad) {
@ -107,8 +113,7 @@ class Unidad extends Model
return $this->venta; return $this->venta;
} }
private $m2t = null; private $m2t = null;
public function m2($tipo = 'vendible') public function m2($tipo = 'vendible') {
{
if ($this->m2t == null or !isset($this->m2t->{$tipo})) { if ($this->m2t == null or !isset($this->m2t->{$tipo})) {
if ($this->m2t == null) { if ($this->m2t == null) {
$this->m2t = []; $this->m2t = [];
@ -121,12 +126,15 @@ class Unidad extends Model
} }
return $this->m2t->{$tipo}; return $this->m2t->{$tipo};
} }
public function precios() protected $precios;
{ public function precios() {
return $this->hasMany(Precio::class, 'unidad')->findMany(); if ($this->precios === null) {
$this->precios = $this->setRelationship(Precio::class, 'unidad', 'id')->many();
}
return $this->precios;
//return $this->hasMany(Precio::class, 'unidad')->findMany();
} }
public function precio($fecha = null) public function precio($fecha = null) {
{
if ($fecha == null) { if ($fecha == null) {
return \model(Precio::class) return \model(Precio::class)
->select('precio.*') ->select('precio.*')
@ -145,8 +153,7 @@ class Unidad extends Model
->orderByDesc('ep.id') ->orderByDesc('ep.id')
->findOne(); ->findOne();
} }
public function setPrecio($fecha, $valor) public function setPrecio($fecha, $valor) {
{
$exists = false; $exists = false;
// Dejar valores antiguos reemplazados (estado = 'reemplazado') // Dejar valores antiguos reemplazados (estado = 'reemplazado')
foreach ($this->precios() as $precio) { foreach ($this->precios() as $precio) {
@ -175,9 +182,13 @@ class Unidad extends Model
$precio = model(Precio::class)->create($data); $precio = model(Precio::class)->create($data);
$precio->new($fecha); $precio->new($fecha);
} }
public function tipologia() protected $tipologia;
{ public function tipologia() {
return $this->belongsTo(ProyectoTipoUnidad::class, 'pt')->findOne(); if ($this->tipologia === null) {
$this->tipologia = $this->setRelationship(ProyectoTipoUnidad::class, 'id', 'pt')->one();
}
return $this->tipologia;
//return $this->belongsTo(ProyectoTipoUnidad::class, 'pt')->findOne();
} }
protected $is_vendida; protected $is_vendida;
public function isVendida() { public function isVendida() {
@ -241,4 +252,3 @@ class Unidad extends Model
return $this->linea; return $this->linea;
} }
} }
?>

View File

@ -31,256 +31,297 @@ use Incoviba\old\Proyecto\ProyectoAgente;
* @property Pago resciliacion * @property Pago resciliacion
* *
*/ */
class Venta extends Model class Venta extends Model {
{ protected $saldo;
protected $saldo; protected $uf;
protected $uf; protected $anticipo;
protected $anticipo; protected $pagado;
protected $pagado; protected $comision;
protected $comision; protected $valor_neto;
protected $valor_neto; protected $promociones;
protected $promociones; protected $valor_corredora;
protected $valor_corredora;
public function propietario() protected $propietario_obj;
{ public function propietario() {
return $this->belongs_to(Propietario::class, 'propietario', 'rut')->findOne(); if ($this->propietario_obj === null) {
$this->propietario_obj = $this->setRelationship(Propietario::class, 'rut', 'propietario')->one();
} }
public function propiedad() return $this->propietario_obj;
{ //return $this->belongs_to(Propietario::class, 'propietario', 'rut')->findOne();
$propiedad = $this->belongs_to(Propiedad::class, 'propiedad')->findOne(); }
$propiedad->setContainer($this->container); protected $propiedad_obj;
return $propiedad; public function propiedad() {
if ($this->propiedad_obj === null) {
$this->propiedad_obj = $this->setRelationship(Propiedad::class, 'id', 'propiedad')->one();
} }
public function bonoPie() return $this->propiedad_obj;
{ /*$propiedad = $this->belongs_to(Propiedad::class, 'propiedad')->findOne();
$bono = $this->belongs_to(BonoPie::class, 'bono_pie'); $propiedad->setContainer($this->container);
if ($bono) { return $propiedad;*/
return $bono->findOne(); }
} protected $bono_obj;
return null; public function bonoPie() {
if ($this->bono_obj === null) {
$this->bono_obj = $this->setRelationship(BonoPie::class, 'id', 'bono_pie')->one();
} }
public function pie() return $this->bono_obj;
{ /*$bono = $this->belongs_to(BonoPie::class, 'bono_pie');
$pie = $this->belongs_to(Pie::class, 'pie'); if ($bono) {
if ($pie) { return $bono->findOne();
return $pie->findOne(); }
} return null;*/
return null; }
protected $pie_obj;
public function pie() {
if ($this->pie_obj === null) {
$this->pie_obj = $this->setRelationship(Pie::class, 'id', 'pie')->one();
} }
public function entrega() return $this->pie_obj;
{ /*$pie = $this->belongs_to(Pie::class, 'pie');
if ($this->entrega != '0') { if ($pie) {
return $this->belongs_to(Entrega::class, 'entrega')->findOne(); return $pie->findOne();
} }
return null; return null;*/
}
protected $entrega_obj;
public function entrega() {
if ($this->entrega_obj === null) {
$this->entrega_obj = $this->setRelationship(Entrega::class, 'id', 'entrega')->one();
} }
public function fecha() return $this->entrega_obj;
{ /*if ($this->entrega != '0') {
return Carbon::parse($this->fecha, $this->container->get('settings')->app->timezone); return $this->belongs_to(Entrega::class, 'entrega')->findOne();
}
return null;*/
}
public function fecha(\DateTime $fecha = null) {
if ($fecha == null) {
return Carbon::parse($this->fecha, $this->container->get('settings')->app->timezone);
} }
public function proyecto() $this->fecha = $fecha->format('Y-m-d');
{ }
return $this->propiedad()->unidad()->proyecto(); public function proyecto() {
return $this->propiedad()->unidad()->proyecto();
}
public function unidad() {
return $this->propiedad()->unidad();
}
protected $agente_obj;
public function agente() {
if ($this->agente_obj === null) {
$this->agente_obj = $this->setRelationship(ProyectoAgente::class, 'id', 'agente')->one();
} }
public function unidad() return $this->agente_obj;
{ /*$agente = $this->belongs_to(ProyectoAgente::class, 'agente');
return $this->propiedad()->unidad(); if ($agente) {
} return $agente->findOne();
public function agente() }
{ return null;*/
$agente = $this->belongs_to(ProyectoAgente::class, 'agente'); }
if ($agente) { public function comision() {
return $agente->findOne(); if (!isset($this->comision)) {
} $pa = $this->agente();
return null; if ($pa and $pa->agente()->tipo == 19) {
} $this->comision = $pa->comision / 100;
public function comision() } else {
{ $this->comision = 0;
if (!isset($this->comision)) {
$pa = $this->agente();
if ($pa and $pa->agente()->tipo == 19) {
$this->comision = $pa->comision / 100;
} else {
$this->comision = 0;
}
} }
return $this->comision;
} }
public function valorComision() return $this->comision;
{ }
public function valorComision() {
$bono_pie = $this->bonoPie();
if ($this->bono_pie != 0) {
$bono_pie = $bono_pie->pago()->valor('ufs');
} else {
$bono_pie = 0;
}
return ($this->valor_uf - $bono_pie) * $this->comision();
}
protected $superficie_departamentos;
public function superficie() {
if ($this->superficie_departamentos == null) {
$this->superficie_departamentos = array_reduce($this->propiedad()->departamentos(), function($sum, $item) {
return $sum + $item->m2();
});
}
return $this->superficie_departamentos;
}
protected $valor_departamentos;
public function valorDepartamentos() {
if ($this->valor_departamentos == null) {
$fecha = $this->fecha();
$this->valor_departamentos = array_reduce($this->propiedad()->departamentos(), function($sum, $item) use ($fecha) {
return $sum + $item->precio($fecha)->valor;
});
}
return $this->valor_departamentos;
}
protected $valor_unidades;
public function valorUnidades() {
if ($this->valor_unidades == null) {
$fecha = $this->fecha();
$this->valor_unidades = array_reduce($this->propiedad()->unidades(), function($sum, $item) use ($fecha) {
return $sum + $item->unidad()->precio($fecha)->valor;
});
}
return $this->valor_unidades;
}
public function valorEstacionamientos() {
$estacionamientos = $this->propiedad()->estacionamientos();
$sum = 0;
foreach ($estacionamientos as $estacionamiento) {
$sum += $estacionamiento->precio($this->fecha())->valor;
}
return $sum;
}
public function valorBodegas() {
$bodegas = $this->propiedad()->bodegas();
$sum = 0;
foreach ($bodegas as $bodega) {
$sum += $bodega->precio($this->fecha())->valor;
}
return $sum;
}
public function valorEstacionamientosYBodegas() {
return $this->valorEstacionamientos() + $this->valorBodegas();
}
public function valorCorredora() {
if ($this->valor_corredora == null) {
$bono_pie = $this->bonoPie();
if ($this->bono_pie != 0) {
$bono_pie = $bono_pie->pago()->valor('ufs');
} else {
$bono_pie = 0;
}
$promos = 0;
$ps = $this->promociones();
if (count($ps) > 0) {
foreach ($ps as $promo) {
$promos += $promo->valor;
}
}
$this->valor_corredora = $this->valor_uf - $bono_pie - $promos;
}
return $this->valor_corredora;
}
public function valorFinal() {
if (!isset($this->valor_neto)) {
$comision = $this->valorComision();
$bono_pie = $this->bonoPie(); $bono_pie = $this->bonoPie();
if ($this->bono_pie != 0) { if ($this->bono_pie != 0) {
$bono_pie = $bono_pie->pago()->valor('ufs'); $bono_pie = $bono_pie->pago()->valor('ufs');
} else { } else {
$bono_pie = 0; $bono_pie = 0;
} }
return ($this->valor_uf - $bono_pie) * $this->comision(); $ests = $this->valorEstacionamientos();
} $bods = $this->valorBodegas();
protected $superficie_departamentos; $promos = 0;
public function superficie() { $ps = $this->promociones();
if ($this->superficie_departamentos == null) { if (count($ps) > 0) {
$this->superficie_departamentos = array_reduce($this->propiedad()->departamentos(), function($sum, $item) { foreach ($ps as $promo) {
return $sum + $item->m2(); $promos += $promo->valor;
});
}
return $this->superficie_departamentos;
}
protected $valor_departamentos;
public function valorDepartamentos() {
if ($this->valor_departamentos == null) {
$fecha = $this->fecha();
$this->valor_departamentos = array_reduce($this->propiedad()->departamentos(), function($sum, $item) use ($fecha) {
return $sum + $item->precio($fecha)->valor;
});
}
return $this->valor_departamentos;
}
protected $valor_unidades;
public function valorUnidades() {
if ($this->valor_unidades == null) {
$fecha = $this->fecha();
$this->valor_unidades = array_reduce($this->propiedad()->unidades(), function($sum, $item) use ($fecha) {
return $sum + $item->unidad()->precio($fecha)->valor;
});
}
return $this->valor_unidades;
}
public function valorEstacionamientos()
{
$estacionamientos = $this->propiedad()->estacionamientos();
$sum = 0;
foreach ($estacionamientos as $estacionamiento) {
$sum += $estacionamiento->precio($this->fecha())->valor;
}
return $sum;
}
public function valorBodegas()
{
$bodegas = $this->propiedad()->bodegas();
$sum = 0;
foreach ($bodegas as $bodega) {
$sum += $bodega->precio($this->fecha())->valor;
}
return $sum;
}
public function valorEstacionamientosYBodegas()
{
return $this->valorEstacionamientos() + $this->valorBodegas();
}
public function valorCorredora()
{
if ($this->valor_corredora == null) {
$bono_pie = $this->bonoPie();
if ($this->bono_pie != 0) {
$bono_pie = $bono_pie->pago()->valor('ufs');
} else {
$bono_pie = 0;
}
$promos = 0;
$ps = $this->promociones();
if (count($ps) > 0) {
foreach ($ps as $promo) {
$promos += $promo->valor;
}
}
$this->valor_corredora = $this->valor_uf - $bono_pie - $promos;
}
return $this->valor_corredora;
}
public function valorFinal()
{
if (!isset($this->valor_neto)) {
$comision = $this->valorComision();
$bono_pie = $this->bonoPie();
if ($this->bono_pie != 0) {
$bono_pie = $bono_pie->pago()->valor('ufs');
} else {
$bono_pie = 0;
}
$ests = $this->valorEstacionamientos();
$bods = $this->valorBodegas();
$promos = 0;
$ps = $this->promociones();
if (count($ps) > 0) {
foreach ($ps as $promo) {
$promos += $promo->valor;
}
} }
$this->valor_neto = $this->valor_uf - $bono_pie - $comision - $ests - $bods - $promos;
} }
return $this->valor_neto; $this->valor_neto = $this->valor_uf - $bono_pie - $comision - $ests - $bods - $promos;
}
public function uf_m2()
{
$m2 = array_reduce($this->propiedad()->departamentos(), function($sum, $item) {
return $sum + $item->m2();
});
return $this->valorFinal() / $m2;
}
public function escritura()
{
$escritura = $this->belongs_to(Escritura::class, 'escritura');
if ($escritura) {
return $escritura->findOne();
}
return null;
}
public function credito()
{
$credito = $this->belongs_to(Credito::class, 'credito');
if ($credito) {
return $credito->findOne();
}
return null;
}
public function comentarios()
{
return $this->has_many(Comentario::class, 'venta')->findMany();
} }
public function subsidio() return $this->valor_neto;
{ }
$subsidio = $this->belongs_to(Subsidio::class, 'subsidio'); public function uf_m2() {
$m2 = array_reduce($this->propiedad()->departamentos(), function($sum, $item) {
return $sum + $item->m2();
});
return $this->valorFinal() / $m2;
}
protected $escritura_obj;
public function escritura() {
if ($this->escritura_obj === null) {
$this->escritura_obj = $this->setRelationship(Escritura::class, 'id', 'escritura')->one();
}
return $this->escritura_obj;
/*$escritura = $this->belongs_to(Escritura::class, 'escritura');
if ($escritura) {
return $escritura->findOne();
}
return null;*/
}
protected $credito_obj;
public function credito() {
if ($this->credito_obj === null) {
$this->credito_obj = $this->setRelationship(Credito::class, 'id', 'credito')->one();
}
return $this->credito_obj;
/*$credito = $this->belongs_to(Credito::class, 'credito');
if ($credito) {
return $credito->findOne();
}
return null;*/
}
protected $comentarios;
public function comentarios() {
if ($this->comentarios === null) {
$this->comentarios = $this->setRelationship(Comentario::class, 'venta', 'id')->many();
}
return $this->comentarios;
//return $this->has_many(Comentario::class, 'venta')->findMany();
}
protected $subsidio_obj;
public function subsidio() {
if ($this->subsidio_obj === null) {
$this->subsidio_obj = $this->setRelationship(Subsidio::class, 'id', 'subsidio')->one();
}
return $this->subsidio_obj;
/*$subsidio = $this->belongs_to(Subsidio::class, 'subsidio');
if ($subsidio) { if ($subsidio) {
return $subsidio->findOne(); return $subsidio->findOne();
} }
return null; return null;*/
} }
public function resciliacion() protected $resciliacion_obj;
{ public function resciliacion() {
$res = $this->belongs_to(Pago::class, 'resciliacion'); if ($this->resciliacion_obj === null) {
$this->resciliacion_obj = $this->setRelationship(Pago::class, 'id', 'resciliacion')->one();
}
return $this->resciliacion_obj;
/*$res = $this->belongs_to(Pago::class, 'resciliacion');
if ($res) { if ($res) {
return $res->findOne(); return $res->findOne();
} }
return null; return null;*/
} }
public function postventas() protected $postventas;
{ public function postventas() {
$postventas = $this->has_many(\Incoviba\nuevo\Venta\Postventa::class, 'venta_id'); if ($this->postventas === null) {
$this->postventas = $this->setRelationship(Postventa::class, 'venta_id', 'id')->many();
}
return $this->postventas;
/*$postventas = $this->has_many(\Incoviba\nuevo\Venta\Postventa::class, 'venta_id');
if ($postventas) { if ($postventas) {
return $postventas->findMany(); return $postventas->findMany();
} }
return null; return null;*/
} }
public function promociones() public function promociones() {
{
if ($this->promociones == null) { if ($this->promociones == null) {
$pvs = model(PromocionVenta::class)->where('venta', $this->id)->findMany(); $pvs = model(PromocionVenta::class)->where('venta', $this->id)->findMany();
$this->promociones = $pvs; $this->promociones = $pvs;
} }
return $this->promociones; return $this->promociones;
} }
public function devolucion() protected $devolucion_obj;
{ public function devolucion() {
$devolucion = $this->belongsTo(Pago::class, 'devolucion'); if ($this->devolucion_obj === null) {
$this->devolucion_obj = $this->setRelationship(Pago::class, 'id', 'devolucion')->one();
}
return $this->devolucion_obj;
/*$devolucion = $this->belongsTo(Pago::class, 'devolucion');
if ($devolucion) { if ($devolucion) {
return $devolucion->findOne(); return $devolucion->findOne();
} }
return null; return null;*/
} }
public function anticipo($tipo = 'ufs') public function anticipo($tipo = 'ufs') {
{
if (!isset($this->anticipo[$tipo])) { if (!isset($this->anticipo[$tipo])) {
$anticipo = 0; $anticipo = 0;
if ($this->pie != 0) { if ($this->pie != 0) {
@ -304,8 +345,7 @@ class Venta extends Model
return $this->anticipo[$tipo]; return $this->anticipo[$tipo];
} }
public function saldo($tipo = 'ufs') public function saldo($tipo = 'ufs') {
{
if (!isset($this->saldo[$tipo])) { if (!isset($this->saldo[$tipo])) {
if ($tipo == 'pesos') { if ($tipo == 'pesos') {
$this->saldo[$tipo] = $this->saldo() * $this->uf(); $this->saldo[$tipo] = $this->saldo() * $this->uf();
@ -341,16 +381,14 @@ class Venta extends Model
return $this->saldo[$tipo]; return $this->saldo[$tipo];
} }
public function valor($tipo = 'ufs') public function valor($tipo = 'ufs') {
{
if ($tipo == 'ufs') { if ($tipo == 'ufs') {
return $this->valor_uf; return $this->valor_uf;
} }
return $this->valor_uf * $this->uf(); return $this->valor_uf * $this->uf();
} }
protected $valores; protected $valores;
public function valorPagado($tipo = 'ufs') public function valorPagado($tipo = 'ufs') {
{
if ($this->valores == null or !isset($this->valores->pagado->ufs)) { if ($this->valores == null or !isset($this->valores->pagado->ufs)) {
$valores = []; $valores = [];
if (isset($this->valores)) { if (isset($this->valores)) {
@ -365,8 +403,7 @@ class Venta extends Model
} }
return $this->valores->pagado->{$tipo}; return $this->valores->pagado->{$tipo};
} }
public function valorAbonado($tipo = 'ufs') public function valorAbonado($tipo = 'ufs') {
{
if ($this->valores == null or !isset($this->valores->abonado->{$tipo})) { if ($this->valores == null or !isset($this->valores->abonado->{$tipo})) {
$valores = []; $valores = [];
if (isset($this->valores)) { if (isset($this->valores)) {
@ -381,8 +418,7 @@ class Venta extends Model
} }
return $this->valores->abonado->{$tipo}; return $this->valores->abonado->{$tipo};
} }
public function pagado($tipo = 'ufs') public function pagado($tipo = 'ufs') {
{
if (!isset($this->pagado[$tipo])) { if (!isset($this->pagado[$tipo])) {
if (abs($this->saldo()) / $this->valor() > 0.01 or $tipo == 'pesos') { if (abs($this->saldo()) / $this->valor() > 0.01 or $tipo == 'pesos') {
$total = 0; $total = 0;
@ -408,16 +444,14 @@ class Venta extends Model
} }
return $this->pagado[$tipo]; return $this->pagado[$tipo];
} }
public function pieReajustado($tipo = 'ufs') public function pieReajustado($tipo = 'ufs') {
{
if (abs($this->saldo()) / $this->valor() > 0.01) { if (abs($this->saldo()) / $this->valor() > 0.01) {
return $this->pie()->valorPagado($tipo); return $this->pie()->valorPagado($tipo);
} }
$valor = $this->pie()->valorPagado($tipo) - $this->saldo($tipo); $valor = $this->pie()->valorPagado($tipo) - $this->saldo($tipo);
return $valor; return $valor;
} }
public function uf() public function uf() {
{
if ($this->uf == null) { if ($this->uf == null) {
$f = $this->fecha(); $f = $this->fecha();
$uf = $this->container->get('uf')($f); $uf = $this->container->get('uf')($f);
@ -429,8 +463,7 @@ class Venta extends Model
return $this->uf; return $this->uf;
} }
public function pagos($estado = 0) public function pagos($estado = 0) {
{
$results = []; $results = [];
if ($this->pie != 0) { if ($this->pie != 0) {
$results = array_merge($results, $this->pie()->pagos($estado)); $results = array_merge($results, $this->pie()->pagos($estado));
@ -450,8 +483,7 @@ class Venta extends Model
}); });
return $results; return $results;
} }
public function new() public function new() {
{
parent::save(); parent::save();
$tipo = model(TipoEstadoVenta::class)->where('descripcion', 'vigente')->findOne(); $tipo = model(TipoEstadoVenta::class)->where('descripcion', 'vigente')->findOne();
$data = [ $data = [
@ -462,12 +494,15 @@ class Venta extends Model
$estado = model(EstadoVenta::class)->create($data); $estado = model(EstadoVenta::class)->create($data);
$estado->save(); $estado->save();
} }
public function estados() protected $estados;
{ public function estados() {
return $this->hasMany(EstadoVenta::class, 'venta')->findMany(); if ($this->estados === null) {
$this->estados = $this->setRelationship(EstadoVenta::class, 'venta', 'id')->many();
}
return $this->estados;
//return $this->hasMany(EstadoVenta::class, 'venta')->findMany();
} }
public function estado($estado = null) public function estado($estado = null) {
{
if ($estado == null) { if ($estado == null) {
return model(EstadoVenta::class) return model(EstadoVenta::class)
->select('estado_venta.*') ->select('estado_venta.*')
@ -483,8 +518,7 @@ class Venta extends Model
->orderByDesc('estado_venta.fecha') ->orderByDesc('estado_venta.fecha')
->findOne(); ->findOne();
} }
public function firmar(Carbon $fecha) public function firmar(Carbon $fecha) {
{
$estado = $this->estado(); $estado = $this->estado();
if ($estado->tipo()->descripcion == 'firmado por inmobiliaria') { if ($estado->tipo()->descripcion == 'firmado por inmobiliaria') {
return true; return true;
@ -498,8 +532,7 @@ class Venta extends Model
$estado = model(EstadoVenta::class)->create($data)->save(); $estado = model(EstadoVenta::class)->create($data)->save();
return true; return true;
} }
public function archivar(Carbon $fecha) public function archivar(Carbon $fecha) {
{
$estado = $this->estado(); $estado = $this->estado();
if ($estado->estado()->tipo()->descripcion == 'archivado') { if ($estado->estado()->tipo()->descripcion == 'archivado') {
return true; return true;
@ -514,4 +547,3 @@ class Venta extends Model
return true; return true;
} }
} }
?>