91 lines
3.5 KiB
PHP
91 lines
3.5 KiB
PHP
![]() |
<?php
|
||
|
namespace Incoviba\Controller;
|
||
|
|
||
|
use DateTimeImmutable;
|
||
|
use DateInterval;
|
||
|
use Psr\Http\Message\ResponseInterface;
|
||
|
use Psr\Http\Message\ServerRequestInterface;
|
||
|
use Incoviba\Common\Alias\View;
|
||
|
use Incoviba\Service;
|
||
|
use Incoviba\Repository;
|
||
|
|
||
|
class Base
|
||
|
{
|
||
|
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Login $service, Repository\Venta\Cuota $cuotaRepository, Repository\Venta\Cierre $cierreRepository): ResponseInterface
|
||
|
{
|
||
|
if ($service->isIn()) {
|
||
|
return $this->home($response, $view, $cuotaRepository, $cierreRepository);
|
||
|
}
|
||
|
return $this->login($response, $view);
|
||
|
}
|
||
|
|
||
|
protected function home(ResponseInterface $response, View $view, Repository\Venta\Cuota $cuotaRepository, Repository\Venta\Cierre $cierreRepository): ResponseInterface
|
||
|
{
|
||
|
$cuotas_hoy = count($cuotaRepository->fetchHoy()) ?? 0;
|
||
|
$cuotas_pendientes = count($cuotaRepository->fetchPendientes()) ?? 0;
|
||
|
$cuotas_por_vencer = $this->getCuotasPorVencer($cuotaRepository);
|
||
|
$cierres_vigentes = $this->getCierresVigentes($cierreRepository);
|
||
|
return $view->render($response, 'home', compact('cuotas_hoy', 'cuotas_pendientes', 'cuotas_por_vencer', 'cierres_vigentes'));
|
||
|
}
|
||
|
protected function login(ResponseInterface $response, View $view): ResponseInterface
|
||
|
{
|
||
|
return $view->render($response, 'guest');
|
||
|
}
|
||
|
protected function getCuotasPorVencer(Repository\Venta\Cuota $cuotaRepository): array
|
||
|
{
|
||
|
$cuotas = $cuotaRepository->fetchDatosPorVencer();
|
||
|
$output = [];
|
||
|
foreach ($cuotas as $row) {
|
||
|
$fecha = $row['Fecha'];
|
||
|
$date = new DateTimeImmutable($fecha);
|
||
|
if (($weekday = $date->format('N')) > 5) {
|
||
|
$day_diff = 7 - $weekday + 1;
|
||
|
$date = $date->add(new DateInterval("P{$day_diff}D"));
|
||
|
$fecha = $date->format('Y-m-d');
|
||
|
}
|
||
|
if (!isset($output[$fecha])) {
|
||
|
$output[$fecha] = [];
|
||
|
}
|
||
|
if (!isset($output[$fecha][$row['Proyecto']])) {
|
||
|
$output[$fecha][$row['Proyecto']] = 0;
|
||
|
}
|
||
|
$output[$fecha][$row['Proyecto']] += $row['Cantidad'];
|
||
|
}
|
||
|
foreach ($output as $fecha => $day) {
|
||
|
uksort($day, function($a, $b) {
|
||
|
return strcmp($a, $b);
|
||
|
});
|
||
|
$output[$fecha] = $day;
|
||
|
}
|
||
|
return $output;
|
||
|
}
|
||
|
protected function getCierresVigentes(Repository\Venta\Cierre $cierreRepository): array
|
||
|
{
|
||
|
$cierres = $cierreRepository->fetchDatosVigentes();
|
||
|
$output = [];
|
||
|
$estados = [
|
||
|
'revisado' => 'pendientes',
|
||
|
'rechazado' => 'rechazados',
|
||
|
'aprobado' => 'pendientes',
|
||
|
'vendido' => 'promesados',
|
||
|
'abandonado' => 'rechazados',
|
||
|
'promesado' => 'promesados',
|
||
|
'resciliado' => 'rechazados'
|
||
|
];
|
||
|
foreach ($cierres as $row) {
|
||
|
if (!isset($output[$row['Proyecto']])) {
|
||
|
$output[$row['Proyecto']] = [
|
||
|
'promesados' => 0,
|
||
|
'pendientes' => 0,
|
||
|
'rechazados' => 0,
|
||
|
'total' => 0
|
||
|
];
|
||
|
}
|
||
|
$estado = $estados[$row['Estado']];
|
||
|
$output[$row['Proyecto']][$estado] += $row['Cantidad'];
|
||
|
$output[$row['Proyecto']]['total'] += $row['Cantidad'];
|
||
|
}
|
||
|
return $output;
|
||
|
}
|
||
|
}
|