Files
api/common/Controller/Proyectos/Cierres.php
2022-06-13 21:36:52 -04:00

39 lines
1.5 KiB
PHP

<?php
namespace Incoviba\API\Common\Controller\Proyectos;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Incoviba\API\Common\Define\Controller\Json;
use Incoviba\Mapper\Proyecto as ProyectoMapper;
use Incoviba\Mapper\Cierre as CierreMapper;
class Cierres {
use Json;
public function __invoke(Request $request, Response $response, ProyectoMapper $proyectoMapper, CierreMapper $cierreMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
$cierres = [];
function filter_cierres($cierres, $estado) {
return array_filter($cierres, function ($item) use ($estado) {
return $item->estado()->tipo->descripcion === $estado;
});
}
foreach ($proyectos as $proyecto) {
$cs = $cierreMapper->fetchByProyecto($proyecto->id);
if (count($cs) == 0) {
continue;
}
$pendientes = filter_cierres($cs, 'pendiente');
$cierres[$proyecto->descripcion] = [
'proyecto' => $proyecto->descripcion,
'total' => count($cs),
'promesados' => count(filter_cierres($cs, 'promesado')),
'rechazados' => count(filter_cierres($cs, 'rechazado')),
'pendientes' => count($pendientes),
'ultimo_pendiente' => (count($pendientes) > 0) ? $pendientes[0]->periodo() : 0
];
}
return $this->withJson($response, compact('cierres'));
}
}