39 lines
1.5 KiB
PHP
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'));
|
|
}
|
|
}
|