currentPrecio !== null and $dateTime > $this->currentPrecio->current->fecha) { return $this->currentPrecio; } $precio = array_reduce(array_filter($this->precios, function(Precio $precio) use ($dateTime) { return $dateTime > $precio->current->fecha; }), function(?Precio $max, Precio $precio) { if ($max === null) { return $precio; } return $max->current->fecha > $precio->current->fecha ? $max : $precio; }); if ($precio === null) { $precio = array_reduce(array_filter($this->precios, function(Precio $precio) use ($dateTime) { return $dateTime < $precio->current->fecha; }), function(?Precio $min, Precio $precio) { if ($min === null) { return $precio; } return $min->current->fecha < $precio->current->fecha ? $min : $precio; }); } return $precio; } protected bool $sold; public function sold(): bool { if (!isset($this->sold)) { $this->sold = false; try { $this->sold = $this->runFactory('sold') ?? false; } catch (EmptyResult) {} } return $this->sold; } public function jsonSerialize(): mixed { $output = array_merge(parent::jsonSerialize(), [ 'subtipo' => $this->subtipo, 'piso' => $this->piso, 'descripcion' => $this->descripcion, 'orientacion' => $this->orientacion, 'proyecto_tipo_unidad' => $this->proyectoTipoUnidad, 'prorrateo' => $this->prorrateo ]); if (isset($this->precios)) { $output['precios'] = $this->precios; $output['current_precio'] = $this->currentPrecio; } $output['sold'] = $this->sold() ?? false; return $output; } }