133 lines
3.4 KiB
PHP
133 lines
3.4 KiB
PHP
<?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;
|
|
}
|
|
}
|