Dependencies
This commit is contained in:
132
incoviba/modelos/src/nuevo/Proyecto/Proyecto.php
Normal file
132
incoviba/modelos/src/nuevo/Proyecto/Proyecto.php
Normal file
@ -0,0 +1,132 @@
|
||||
<?php
|
||||
namespace Incoviba\nuevo\Proyecto;
|
||||
|
||||
use Incoviba\Common\Alias\NewModel;
|
||||
use Incoviba\nuevo\Inmobiliaria\Inmobiliaria;
|
||||
use Incoviba\nuevo\Common\Direccion;
|
||||
use Incoviba\Common\Definition\hasEstado;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Aldarien
|
||||
* @property int id
|
||||
* @property string nombre
|
||||
* @property string nombre_completo
|
||||
* @property Inmobiliaria inmobiliaria_rut
|
||||
* @property Direccion direccion_id
|
||||
* @property boolean portal
|
||||
* @property string descripcion
|
||||
*
|
||||
*/
|
||||
class Proyecto extends NewModel
|
||||
{
|
||||
use hasEstado;
|
||||
|
||||
protected static $_table = 'proyectos';
|
||||
|
||||
public function inmobiliaria()
|
||||
{
|
||||
return $this->belongsTo(Inmobiliaria::class, 'inmobiliaria_rut', 'rut')->findOne();
|
||||
}
|
||||
public function direccion()
|
||||
{
|
||||
return $this->belongsTo(Direccion::class, 'direccion_id')->findOne();
|
||||
}
|
||||
|
||||
public function participaciones()
|
||||
{
|
||||
return $this->hasMany(ProyectoParticipe::class, 'proyecto_id')->findMany();
|
||||
}
|
||||
public function participes()
|
||||
{
|
||||
return $this->hasManyThrough(Participe::class, ProyectoParticipe::class, 'proyecto_id', 'participe_rut', 'rut')->findMany();
|
||||
}
|
||||
public function unidades()
|
||||
{
|
||||
return $this->hasMany(UnidadProyecto::class, 'proyecto_id')->findMany();
|
||||
}
|
||||
public function cantidad($tipo = 'departamento')
|
||||
{
|
||||
$total = 0;
|
||||
$unidades = $this->unidades;
|
||||
foreach ($unidades as $unidad) {
|
||||
if ($unidad->tipo->descripcion == $tipo) {
|
||||
$total += $unidad->unidades->count();
|
||||
}
|
||||
}
|
||||
return $total;
|
||||
}
|
||||
public function unidadesPrincipales()
|
||||
{
|
||||
if ($this->tipoUnidades()) {
|
||||
return $this->cantidad('departamento');
|
||||
} else {
|
||||
return $this->cantidad('casa');
|
||||
}
|
||||
}
|
||||
public function pisos()
|
||||
{
|
||||
$max_piso = 0;
|
||||
$unidades = $this->unidades;
|
||||
foreach ($unidades as $unidad) {
|
||||
$piso = $unidad->unidades->max('piso');
|
||||
if ($max_piso < $piso) {
|
||||
$max_piso = $piso;
|
||||
}
|
||||
}
|
||||
return $max_piso;
|
||||
}
|
||||
public function m2Construidos()
|
||||
{
|
||||
$total = 0;
|
||||
$unidades = $this->unidades;
|
||||
foreach ($unidades as $unidad) {
|
||||
$total += $unidad->m2->total() * $unidad->unidades->count();
|
||||
}
|
||||
return $total;
|
||||
}
|
||||
public function tipoUnidades()
|
||||
{
|
||||
return (!$this->unidades->isEmpty() and $this->unidades[0]->tipo->descripcion == 'departamento');
|
||||
}
|
||||
public function ventas()
|
||||
{
|
||||
$ventas = [];
|
||||
foreach ($this->unidades as $up) {
|
||||
foreach ($up->unidades as $u) {
|
||||
if (isset($u->propiedad)) {
|
||||
$ventas->add($u->propiedad->venta);
|
||||
}
|
||||
}
|
||||
}
|
||||
$ventas = sort($ventas, function($a, $b) {
|
||||
return $a->propiedad->unidadPrincipal->numeracion - $b->propiedad->unidadPrincipal->numeracion;
|
||||
});
|
||||
return $ventas;
|
||||
}
|
||||
public function ventasActivas()
|
||||
{
|
||||
$ventas = $this->ventas();
|
||||
$output = [];
|
||||
foreach ($ventas as $venta) {
|
||||
$estado = $venta->ultimoEstado()->estado->descripcion;
|
||||
if ($estado == 'promesado' or $estado == 'escriturado' or $estado == 'entregado') {
|
||||
$output []= $venta;
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
public function pVendido()
|
||||
{
|
||||
return $this->ventasActivas()->count() / $this->unidadesPrincipales();
|
||||
}
|
||||
public function m2Vendidos()
|
||||
{
|
||||
$ventas = $this->ventasActivas();
|
||||
$sum = 0;
|
||||
foreach ($ventas as $venta) {
|
||||
$sum += $venta->propiedad->unidadPrincipal->unidadProyecto->m2->vendibles();
|
||||
}
|
||||
return $sum;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user