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