<?php
namespace App\Controller\Admin;
use App\Entity\Cabecera;
use App\Entity\ClienteBitcubo;
use App\Entity\Configuracion;
use App\Entity\Domicilios;
use App\Entity\EcommerceCabecera;
use App\Entity\Sucursal;
use App\Entity\User;
use App\Repository\CabeceraRepository;
use App\Repository\EcommerceCabeceraRepository;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use EasyCorp\Bundle\EasyAdminBundle\Router\CrudUrlGenerator;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DashboardController extends AbstractDashboardController
{
/**
* @var CabeceraRepository
*/
protected CabeceraRepository $cabeceraRepository;
protected EcommerceCabeceraRepository $ecommerceCabeceraRepository;
public function __construct(CabeceraRepository $cabeceraRepository, EcommerceCabeceraRepository $ecommerceCabeceraRepository)
{
$this->cabeceraRepository = $cabeceraRepository;
$this->ecommerceCabeceraRepository = $ecommerceCabeceraRepository;
}
/**
* @Route("/admin", name="admin")
*/
public function index(): Response
{
$cabs = $this->cabeceraRepository->notSend();
$indicators = $this->cabeceraRepository->indicators();
$ecommerceIndicators = $this->ecommerceCabeceraRepository->indicators();
$resultadosConsolidados = $this->consolidarIndicadores($indicators, $ecommerceIndicators);
// dd($resultadosConsolidados);
return $this->render('bundles/EasyAdminBundle/dashboard.html.twig', [
'cabs' => $cabs,
'resultadosConsolidados' => $resultadosConsolidados,
]);
// return parent::index();
// dd($this->cabeceraRepository->indicators());
// dd($this->ecommerceCabeceraRepository->indicators());
// return $this->render('bundles/EasyAdminBundle/dashboard.html.twig', [
// 'cabs' => $this->cabeceraRepository->notSend(),
// 'indicators' => $this->cabeceraRepository->indicators(),
// 'ecommerce_indicators' => $this->ecommerceCabeceraRepository->indicators(),
// ]);
// $routeBuilder = $this->get(CrudUrlGenerator::class)->build();
// $url = $routeBuilder->setController(CabeceraCrudController::class)->generateUrl();
// return $this->redirect($url);
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('CallCenter C&W');
}
public function configureMenuItems(): iterable
{
// yield MenuItem::section('Estadisticas');
if ($this->isGranted('ROLE_USER')) {
yield MenuItem::linktoDashboard('Dashboard', 'fa fa-home');
yield MenuItem::section('PEDIDOS CALLCENTER');
yield MenuItem::linkToCrud('Todos', 'fa fa-tags', Cabecera::class)
->setController(CabeceraCrudController::class);
yield MenuItem::linkToCrud('Programados', 'fa fa-clock', Cabecera::class)
->setController(CabeceraProgramadosCrudController::class);
yield MenuItem::linkToCrud('Link de pagos', 'fa fa-credit-card', Cabecera::class)
->setController(CabeceraLinkCrudController::class);
// yield MenuItem::linkToCrud('Programados', 'fa fa-clock', Cabecera::class)
// ->setQueryParameter('filters[isFinalizada]', 0);
yield MenuItem::section('PEDIDOS ECOMMERCE');
yield MenuItem::linkToCrud('Todos', 'fa fa-cart-shopping', EcommerceCabecera::class);
yield MenuItem::section('DOMICILIOS');
yield MenuItem::linkToCrud('Domicilios', 'fa fa-motorcycle', Domicilios::class);
}
if ($this->isGranted('ROLE_ADMIN')) {
yield MenuItem::section('Administrar');
yield MenuItem::linkToCrud('Clientes', 'fa fa-users', ClienteBitcubo::class);
yield MenuItem::linkToCrud('Usuarios', 'fas fa-user-gear', User::class);
yield MenuItem::linkToCrud('Sucursales', 'fas fa-map', Sucursal::class);
yield MenuItem::linkToCrud('Configuración', 'fas fa-gear', Configuracion::class);
}
yield MenuItem::section('Volver');
yield MenuItem::linktoRoute('Regresar al CallCenter', 'fas fa-arrow-circle-left', 'callcenter');
}
private function consolidarIndicadores($indicators, $ecommerceIndicators): array
{
$resultadosConsolidados = [];
foreach ($indicators as $resultado) {
$this->agregarDatos($resultadosConsolidados, 'callcenter', $resultado);
}
foreach ($ecommerceIndicators as $resultado) {
$this->agregarDatos($resultadosConsolidados, 'ecommerce', $resultado);
}
return $resultadosConsolidados;
}
private function agregarDatos(&$arrayConsolidado, $fuente, $resultado)
{
$sucursal = $resultado['nombre'];
$preparacion = $resultado['preparacion'];
$reparto = $resultado['reparto'];
$objSucursal = $resultado['sucursal'];
if (!isset($arrayConsolidado[$sucursal])) {
$arrayConsolidado[$sucursal] = [
'detalles' => [],
'sucursal' => $objSucursal,
'total' => ['preparacion' => 0, 'reparto' => 0]
];
}
$arrayConsolidado[$sucursal]['detalles'][$fuente][] = [
'preparacion' => $preparacion,
'reparto' => $reparto
];
$arrayConsolidado[$sucursal]['total']['preparacion'] += $preparacion;
$arrayConsolidado[$sucursal]['total']['reparto'] += $reparto;
}
}