Files
oficial/incoviba/modelos/src/nuevo/Proyecto/Proyecto.php
2021-03-25 21:25:17 -03:00

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;
}
}