This commit is contained in:
2022-06-13 21:36:52 -04:00
parent 3580738273
commit 42a97bb074
100 changed files with 2574 additions and 313 deletions

View File

@ -3,27 +3,34 @@ namespace Incoviba\API\Common\Controller\Proyectos;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Incoviba\API\Common\Factory\Model as Factory;
use Incoviba\API\Common\Define\Controller\Json;
use Incoviba\Proyecto\Proyecto;
use Incoviba\Mapper\Proyecto as ProyectoMapper;
use Incoviba\Mapper\Cierre as CierreMapper;
class Cierres {
use Json;
public function __invoke(Request $request, Response $response, Factory $factory): Response {
$proyectos = $factory->find(Proyecto::class)->many();
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) {
if (count($proyecto->cierres()) == 0) {
$cs = $cierreMapper->fetchByProyecto($proyecto->id);
if (count($cs) == 0) {
continue;
}
$pendientes = filter_cierres($cs, 'pendiente');
$cierres[$proyecto->descripcion] = [
'proyecto' => $proyecto->descripcion,
'total' => count($proyecto->cierres()),
'promesados' => count($proyecto->cierres(3)),
'rechazados' => count($proyecto->cierres(-1)),
'pendientes' => count($proyecto->cierres(2)),
'ultimo_pendiente' => (count($proyecto->cierres(2)) > 0) ? $proyecto->cierres(2)[0]->periodo() : 0
'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'));

View File

@ -1,31 +1,25 @@
<?php
namespace Incoviba\API\Common\Controller\Proyectos;
use Incoviba\Proyecto\Proyecto;
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 __invoke(Request $request, Response $response, Factory $factory): Response {
$proyectos = $factory->find(Proyecto::class)->many();
$cuotas = [];
foreach ($proyectos as $proyecto) {
foreach ($proyecto->cuotas() as $cuota) {
$cuotas []= $cuota->toArray();
}
}
return $this->withJson($response, ['cuotas' => $cuotas]);
}
public function mes(Request $request, Response $response, Factory $factory): Response {
$proyectos = $factory->find(Proyecto::class)->many();
public function mes(Request $request, Response $response, ProyectoMapper $proyectoMapper, CuotaMapper $cuotaMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
$dias = [];
foreach ($proyectos as $proyecto) {
foreach ($proyecto->cuotasMes() as $cuota) {
$f = $cuota->pago()->fecha();
$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();
}
@ -42,21 +36,21 @@ class Cuotas {
uksort($dias, function($a, $b) {
return strcmp($a, $b);
});
return $this->withJson($response, ['proyecto' => $proyecto->toArray(), 'dias' => $dias]);
return $this->withJson($response, ['dias' => $dias]);
}
public function hoy(Request $request, Response $response, Factory $factory): Response {
$proyectos = $factory->find(Proyecto::class)->many();
public function hoy(Request $request, Response $response, ProyectoMapper $proyectoMapper, CuotaMapper $cuotaMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
$hoy = 0;
foreach ($proyectos as $proyecto) {
$hoy += count($proyecto->cuotasHoy());
$hoy += count($cuotaMapper->fetchByProyectoAndFecha($proyecto->id, new \DateTimeImmutable()));
}
return $this->withJson($response, ['hoy' => $hoy]);
}
public function pendientes(Request $request, Response $response, Factory $factory): Response {
$proyectos = $factory->find(Proyecto::class)->many();
public function pendientes(Request $request, Response $response, ProyectoMapper $proyectoMapper, CuotaMapper $cuotaMapper): Response {
$proyectos = $proyectoMapper->fetchAll();
$pendientes = 0;
foreach ($proyectos as $proyecto) {
$pendientes += count($proyecto->cuotasPendientes());
$pendientes += count($cuotaMapper->fetchByProyectoAndPendiente($proyecto->id));
}
return $this->withJson($response, ['pendientes' => $pendientes]);
}