Files
api/common/Controller/Proyectos/Cierres.php

39 lines
1.5 KiB
PHP
Raw Normal View History

2021-12-25 23:17:15 -03:00
<?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;
2022-06-13 21:36:52 -04:00
use Incoviba\Mapper\Proyecto as ProyectoMapper;
use Incoviba\Mapper\Cierre as CierreMapper;
2021-12-25 23:17:15 -03:00
class Cierres {
use Json;
2022-06-13 21:36:52 -04:00
public function __invoke(Request $request, Response $response, ProyectoMapper $proyectoMapper, CierreMapper $cierreMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
2021-12-25 23:17:15 -03:00
$cierres = [];
2022-06-13 21:36:52 -04:00
function filter_cierres($cierres, $estado) {
return array_filter($cierres, function ($item) use ($estado) {
return $item->estado()->tipo->descripcion === $estado;
});
}
2021-12-25 23:17:15 -03:00
foreach ($proyectos as $proyecto) {
2022-06-13 21:36:52 -04:00
$cs = $cierreMapper->fetchByProyecto($proyecto->id);
if (count($cs) == 0) {
2021-12-25 23:17:15 -03:00
continue;
}
2022-06-13 21:36:52 -04:00
$pendientes = filter_cierres($cs, 'pendiente');
2021-12-25 23:17:15 -03:00
$cierres[$proyecto->descripcion] = [
'proyecto' => $proyecto->descripcion,
2022-06-13 21:36:52 -04:00
'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
2021-12-25 23:17:15 -03:00
];
}
return $this->withJson($response, compact('cierres'));
}
}