Files
oficial/app/src/Service/Proyecto.php
2025-04-03 17:22:38 -03:00

65 lines
2.0 KiB
PHP

<?php
namespace Incoviba\Service;
use Incoviba\Common\Implement;
use Incoviba\Repository;
use Incoviba\Model;
class Proyecto
{
public function __construct(
protected Repository\Proyecto $proyectoRepository,
protected Repository\Proyecto\EstadoProyecto $estadoProyecto
) {}
/**
* @param string|array|null $orderBy
* @return array
*/
public function getAll(null|string|array $orderBy = null): array
{
try {
return array_map([$this, 'process'], $this->proyectoRepository->fetchAll($orderBy));
} catch (Implement\Exception\EmptyResult) {
return [];
}
}
public function getVendibles(null|string|array $orderBy = null): array
{
return $this->proyectoRepository->fetchAllActive($orderBy);
}
public function getEscriturando(): array
{
return $this->proyectoRepository->fetchAllEscriturando();
}
/**
* @param int $proyecto_id
* @return Model\Proyecto
* @throws Implement\Exception\EmptyResult
*/
public function getById(int $proyecto_id): Model\Proyecto
{
return $this->process($this->proyectoRepository->fetchById($proyecto_id));
}
public function getByName(string $name): Model\Proyecto
{
return $this->process($this->proyectoRepository->fetchByName($name));
}
public function getByInmobiliaria(int $inmobiliaria_rut): array
{
return array_map([$this, 'process'], $this->proyectoRepository->fetchByInmobiliaria($inmobiliaria_rut));
}
protected function process(Model\Proyecto $proyecto): Model\Proyecto
{
$proyecto->addFactory('estados', (new Implement\Repository\Factory())
->setCallable([$this->estadoProyecto, 'fetchByProyecto'])
->setArgs([$proyecto->id]));
$proyecto->addFactory('currentEstado', (new Implement\Repository\Factory())
->setCallable([$this->estadoProyecto, 'fetchCurrentByProyecto'])
->setArgs([$proyecto->id]));
return $proyecto;
}
}