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

58 lines
2.6 KiB
PHP

<?php
namespace Incoviba\API\Common\Controller\Proyectos;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Carbon\Carbon;
use Incoviba\Proyecto\Proyecto;
use Incoviba\API\Common\Define\Controller\Json;
use Incoviba\API\Common\Factory\Model as Factory;
use Incoviba\Mapper\Proyecto as ProyectoMapper;
use Incoviba\Mapper\Cuota as CuotaMapper;
class Cuotas {
use Json;
public function mes(Request $request, Response $response, ProyectoMapper $proyectoMapper, CuotaMapper $cuotaMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
$dias = [];
foreach ($proyectos as $proyecto) {
$cuotas = $cuotaMapper->fetchByProyectoAndMes($proyecto->id, new \DateTimeImmutable());
foreach ($cuotas as $cuota) {
$f = Carbon::createFromTimestamp($cuota->pago->fecha->getTimestamp());
if ($f->isoWeekday() == 6 or $f->isoWeekDay() == 7) {
$f = $f->copy()->addDays(2)->startOfWeek();
}
$dia = $f->format('Y-m-d');
if (!isset($dias[$dia])) {
$dias[$dia] = ['dia' => $dia, 'proyectos' => [$proyecto->descripcion => ['proyecto' => $proyecto->descripcion, 'cantidad' => 0]]];
}
if (!isset($dias[$dia]['proyectos'][$proyecto->descripcion])) {
$dias[$dia]['proyectos'][$proyecto->descripcion] = ['proyecto' => $proyecto->descripcion, 'cantidad' => 0];
}
$dias[$dia]['proyectos'][$proyecto->descripcion]['cantidad'] ++;
}
}
uksort($dias, function($a, $b) {
return strcmp($a, $b);
});
return $this->withJson($response, ['dias' => $dias]);
}
public function hoy(Request $request, Response $response, ProyectoMapper $proyectoMapper, CuotaMapper $cuotaMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
$hoy = 0;
foreach ($proyectos as $proyecto) {
$hoy += count($cuotaMapper->fetchByProyectoAndFecha($proyecto->id, new \DateTimeImmutable()));
}
return $this->withJson($response, ['hoy' => $hoy]);
}
public function pendientes(Request $request, Response $response, ProyectoMapper $proyectoMapper, CuotaMapper $cuotaMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
$pendientes = 0;
foreach ($proyectos as $proyecto) {
$pendientes += count($cuotaMapper->fetchByProyectoAndPendiente($proyecto->id));
}
return $this->withJson($response, ['pendientes' => $pendientes]);
}
}