Files
oficial/app/src/Model/Venta/Propiedad.php

86 lines
2.8 KiB
PHP
Raw Normal View History

2023-07-28 16:22:20 -04:00
<?php
namespace Incoviba\Model\Venta;
use Incoviba\Common\Ideal;
2023-11-23 23:35:19 -03:00
use Incoviba\Model;
2023-07-28 16:22:20 -04:00
class Propiedad extends Ideal\Model
{
2024-03-13 22:43:37 -03:00
public array $unidades = [];
2025-01-07 20:46:28 -03:00
public bool $estado;
2024-04-30 11:28:18 -04:00
public function principal(): Unidad
{
if (count($this->departamentos()) > 0) {
return $this->departamentos()[0];
}
return $this->unidades[0];
}
2023-11-23 23:35:19 -03:00
protected array $departamentos;
2023-07-28 16:22:20 -04:00
public function departamentos(): array
{
2023-11-23 23:35:19 -03:00
if (!isset($this->departamentos)) {
$this->departamentos = array_values(array_filter($this->unidades, function(Unidad $unidad) {return $unidad->proyectoTipoUnidad->tipoUnidad->descripcion === 'departamento';}));
}
return $this->departamentos;
2023-07-28 16:22:20 -04:00
}
2023-11-23 23:35:19 -03:00
protected array $estacionamientos;
2023-07-28 16:22:20 -04:00
public function estacionamientos(): array
{
2023-11-23 23:35:19 -03:00
if (!isset($this->estacionamientos)) {
$this->estacionamientos = array_values(array_filter($this->unidades, function(Unidad $unidad) {return $unidad->proyectoTipoUnidad->tipoUnidad->descripcion === 'estacionamiento';}));
}
return $this->estacionamientos;
2023-07-28 16:22:20 -04:00
}
2023-11-23 23:35:19 -03:00
protected array $bodegas;
2023-07-28 16:22:20 -04:00
public function bodegas(): array
{
2023-11-23 23:35:19 -03:00
if (!isset($this->bodegas)) {
$this->bodegas = array_values(array_filter($this->unidades, function(Unidad $unidad) {return $unidad->proyectoTipoUnidad->tipoUnidad->descripcion === 'bodega';}));
}
return $this->bodegas;
}
public function proyecto(): Model\Proyecto
{
return $this->unidades[0]->proyectoTipoUnidad->proyecto;
2023-07-28 16:22:20 -04:00
}
protected float $vendible;
public function vendible(): float
{
2024-06-11 18:16:34 -04:00
if (count($this->departamentos()) === 0) {
return $this->principal()->proyectoTipoUnidad->vendible();
}
return array_reduce($this->departamentos(), function(float $sum, Unidad $unidad) {
return $sum + $unidad->proyectoTipoUnidad->vendible();
}, 0);
}
2023-07-28 16:22:20 -04:00
public function summary(): string
{
return implode(' - ', array_merge(
array_map(function(Unidad $unidad) {
return $unidad->descripcion;
}, $this->departamentos()),
array_map(function(Unidad $unidad) {
return "E{$unidad->descripcion}";
}, $this->estacionamientos()),
array_map(function(Unidad $unidad) {
return "B{$unidad->descripcion}";
}, $this->bodegas())
));
}
public function jsonSerialize(): mixed
{
return [
2023-11-23 23:35:19 -03:00
'unidades' => $this->unidades,
2023-07-28 16:22:20 -04:00
'departamentos' => $this->departamentos(),
'estacionamientos' => $this->estacionamientos(),
'bodegas' => $this->bodegas(),
'summary' => $this->summary()
];
}
}