util, $this->logia, $this->terraza], function($sum, $item) {return $sum + $item;}, 0); } public function vendible(): float { return array_reduce([$this->util, $this->logia, $this->terraza / 2], function($sum, $item) {return $sum + $item;}, 0); } public function tipologia(): string { if (isset($this->tipologias) and count($this->tipologias) > 0) { $temp = [...$this->tipologias]; usort($temp, function(Tipologia $a, Tipologia $b) { $el = $a->elemento->orden - $b->elemento->orden; if ($el === 0) { return strcmp($a->elemento->abreviacion, $b->elemento->abreviacion); } return $el; }); return implode('/', array_map(function(Tipologia $tipologia) { return $tipologia->cantidad . $tipologia->elemento->abreviacion; }, $temp)); } return $this->abreviacion; } protected array $unidades; public function unidades(): array { if (!isset($this->unidades)) { $this->unidades = $this->runFactory('unidades'); } return $this->unidades; } public function jsonSerialize(): mixed { return array_merge(parent::jsonSerialize(), [ 'proyecto' => $this->proyecto, 'tipo_unidad' => $this->tipoUnidad, 'nombre' => $this->nombre, 'abreviacion' => $this->abreviacion, 'util' => $this->util, 'logia' => $this->logia, 'terraza' => $this->terraza, 'superficie' => $this->superficie(), 'vendible' => $this->vendible(), 'descripcion' => $this->descripcion, 'tipologia' => $this->tipologia() ]); } }