src/Controller/DashboardController.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\SupplierDocumentsStatusChecker;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Doctrine\DBAL\Connection;
  9. class DashboardController extends AbstractController
  10. {
  11.     public function __construct(
  12.         private readonly SupplierDocumentsStatusChecker $documentsStatusChecker
  13.     ) {
  14.     }
  15.     #[Route('/'name'dashboard')]
  16.     public function index(EntityManagerInterface $manager): Response
  17.     {
  18.         /** @var Connection $conn */
  19.         $conn $manager->getConnection();
  20.         $qb $conn->createQueryBuilder();
  21.         $qb->select("
  22.         wp.id,
  23.         wp.uuid,
  24.         wp.workflow,
  25.         u.code AS office_code,
  26.         u.name AS office_name,
  27.         wa2.value AS estimado_monto,
  28.         wa3.value AS estimado_moneda,
  29.         wa4.value AS total_adjudicado,
  30.         wa6.value AS factura_monto,
  31.         wa7.value AS factura_monto_neto,
  32.         DATE_FORMAT(STR_TO_DATE(ws1.started_at,'%Y-%m-%d %H:%i:%s'),'%d-%m-%Y %H:%i') AS fecha_creacion,
  33.         DATE_FORMAT(STR_TO_DATE(wa5.value,'%d/%m/%Y'),'%d-%m-%Y') AS fecha_adjudicacion,
  34.         '' AS SLA,
  35.         ws2.state AS estado,
  36.         ws2.started_at AS fecha_estado,
  37.         was2.user_id AS selected_supplier
  38.         ")
  39.             ->distinct()
  40.             ->from('workflow_processes''wp')
  41.             ->leftJoin('wp''workflow_attributes''wa1''wp.id = wa1.process_id AND wa1.path = :path1')
  42.             ->leftJoin('wa1''unit''u''u.id = wa1.value')
  43.             ->leftJoin('wp''workflow_attributes''wa2''wp.id = wa2.process_id AND wa2.path = :path2')
  44.             ->leftJoin('wp''workflow_attributes''wa3''wp.id = wa3.process_id AND wa3.path = :path3')
  45.             ->leftJoin('wp''workflow_attributes''wa4''wp.id = wa4.process_id AND wa4.path = :path4')
  46.             ->leftJoin('wp''workflow_attributes''wa6''wp.id = wa6.process_id AND wa6.path = :path6')
  47.             ->leftJoin('wp''workflow_attributes''wa7''wp.id = wa7.process_id AND wa7.path = :path7')
  48.             ->innerJoin('wp''workflow_states''ws1''wp.id = ws1.process_id AND ws1.state = :state_start')
  49.             ->leftJoin('wp''workflow_attributes''wa5''wp.id = wa5.process_id AND wa5.path = :path5')
  50.             ->innerJoin('wp''workflow_states''ws2''wp.id = ws2.process_id AND ws2.current = :true')
  51.             ->innerJoin('ws2''workflow_assignee''was1''ws2.id = was1.state_id AND was1.user_id = :user_id')
  52.             ->leftJoin('ws2''workflow_assignee''was2''ws2.id = was2.state_id AND was2.name = :selected_supplier')
  53.             ->setParameter('path1''info_compra.sucursal')
  54.             ->setParameter('path2''info_compra.valor_estimado.monto')
  55.             ->setParameter('path3''info_compra.valor_estimado.moneda')
  56.             ->setParameter('path4''total_adjudicado')
  57.             ->setParameter('path5''cronograma.fecha_adjudicacion')
  58.             ->setParameter('path6''info_compra.factura_monto')
  59.             ->setParameter('path7''info_compra.factura_monto_neto')
  60.             ->setParameter('state_start''_process_start')
  61.             ->setParameter('true'1)
  62.             ->setParameter('user_id'$this->getUser()->getId())
  63.             ->setParameter('selected_supplier','adjudicado')
  64.             ->orderBy('wp.uuid''DESC')
  65.         ;
  66.         $roles = ['solicitante','apoderado_1','apoderado_2','adquisiciones','jefe_adquisiciones','apoderado_3','apoderado_4','ejecutivo_area_compras'];
  67.         if($this->isGranted('ROLE_SUPPLIER')){
  68.             $roles = ['proveedor'];
  69.         }elseif ($this->isGranted('ROLE_FINANCES')){
  70.             $roles[] = 'finanzas';
  71.         }
  72.         $qbProcess = [];
  73.         $qbProcess['active'] = $qbProcess['process'] = [];
  74.         foreach ($roles as $role) {
  75.             foreach (['active''process'] as $table) {
  76.                 $qbCurrent = clone $qb;
  77.                 $j 0;
  78.                 foreach ($this->getStatesBy($table$role) as $workflow => $dataStates) {
  79.                     $states = [];
  80.                     $i 0;
  81.                     $dataStates array_filter($dataStates);
  82.                     foreach ($dataStates as $state) {
  83.                         $current 'state_' $role '_' $j '_' $i;
  84.                         $qbCurrent->setParameter($current$state);
  85.                         $states[] = ':' $current;
  86.                         $i++;
  87.                     }
  88.                     if ($dataStates) {
  89.                         $qbCurrent->orWhere(
  90.                             $qbCurrent->expr()->andX(
  91.                                 $qbCurrent->expr()->in('ws2.state'$states),
  92.                                 'was1.name = :role_' $role,
  93.                                 "wp.workflow = :workflow_{$table}_$j"
  94.                             )
  95.                         )
  96.                             ->setParameter('role_' $role$role)
  97.                             ->setParameter("workflow_{$table}_$j"$workflow);
  98.                     }
  99.                     $j++;
  100.                 }
  101.                 $currentProcess $qbCurrent->execute()->fetchAll();
  102.                 $qbProcess[$table] = array_merge($qbProcess[$table], $currentProcess);
  103.                 unset($qbCurrent);
  104.             }
  105.         }
  106.         $qbActive $qbProcess['active'];
  107.         $qbInProcess $qbProcess['process'];
  108.         $states = [];
  109.         $i 0;
  110.         $qbHistory $conn->createQueryBuilder();
  111.         $qbHistory->select('count(wp.id) as total_rows')
  112.             ->distinct()
  113.             ->from('workflow_processes''wp')
  114.             ->innerJoin('wp''workflow_states''ws2''wp.id = ws2.process_id AND ws2.current = :true')
  115.             ->innerJoin('ws2''workflow_assignee''was1''ws2.id = was1.state_id AND was1.user_id = :user_id')
  116.             ->leftJoin('ws2''workflow_assignee''was2''ws2.id = was2.state_id AND was2.name = :selected_supplier')
  117.             ->setParameter('true'1)
  118.             ->setParameter('user_id'$this->getUser()->getId())
  119.             ->setParameter('selected_supplier','adjudicado')
  120.             ->orderBy('wp.uuid''DESC')
  121.             ->setMaxResults(1)
  122.         ;
  123.         // Exlude workflows cancelled for suppliers
  124.         if($this->isGranted('ROLE_SUPPLIER')){
  125.             $qbHistory->andWhere(
  126.                 $qbHistory->expr()->orX(
  127.                     $qbHistory->expr()->notIn('ws2.state'':states_anuladas'),
  128.                     'EXISTS (
  129.                         SELECT 1 FROM workflow_states ws_inv 
  130.                         INNER JOIN workflow_assignee wa_inv ON ws_inv.id = wa_inv.state_id 
  131.                         WHERE ws_inv.process_id = wp.id 
  132.                         AND wa_inv.user_id = :user_id 
  133.                         AND wa_inv.name = :proveedor_role
  134.                         AND ws_inv.state NOT IN (:states_anuladas_check)
  135.                     )'
  136.                 )
  137.             )
  138.             ->setParameter('states_anuladas', ['orden_trabajo_anulada''solicitud_anulada'], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  139.             ->setParameter('states_anuladas_check', ['orden_trabajo_anulada''solicitud_anulada'], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  140.             ->setParameter('proveedor_role''proveedor');
  141.         }
  142.         foreach ($this->getStatesBy('history') as $state) {
  143.             $current 'state_' $i;
  144.             $qbHistory->setParameter($current$state);
  145.             $states[] = ':' $current;
  146.             $i++;
  147.         }
  148.         $qbHistory->andWhere(
  149.             $qbHistory->expr()->in('ws2.state'$states)
  150.         );
  151.         $countHistory = (int) $qbHistory->execute()->fetchOne() ?? 0;
  152.         $showPasswordAlert = !$this->getUser()->isPasswordUpdatedForNewPolicy();
  153.         $documentsStatus null;
  154.         if ($this->isGranted('ROLE_SUPPLIER')) {
  155.             $supplier $this->getUser()?->getSupplier();
  156.             if ($supplier) {
  157.                 $documentsStatus $this->documentsStatusChecker->check($supplier);
  158.             }
  159.         }
  160.         return $this->render('Dashboard/index.html.twig', [
  161.             'active' => $qbActive,
  162.             'process' => $qbInProcess,
  163.             'countHistory' => $countHistory,
  164.             'documentsStatus' => $documentsStatus,
  165.             'showPasswordAlert' => $showPasswordAlert,
  166.         ]);
  167.     }
  168.     #[Route('/workflow/compras-se'name'dashboard_legacy'methods: ['GET','POST'])]
  169.     public function legacy()
  170.     {
  171.         return $this->redirectToRoute('dashboard');
  172.     }
  173.     #[Route('/historico'name'history'methods: ['GET','POST'])]
  174.     public function history(EntityManagerInterface $manager)
  175.     {
  176.         /** @var Connection $conn */
  177.         $conn $manager->getConnection();
  178.         $qb $conn->createQueryBuilder();
  179.         $qb->select("
  180.         wp.id,
  181.         wp.uuid,
  182.         wp.workflow,
  183.         u.code AS office_code,
  184.         u.name AS office_name,
  185.         wa2.value AS estimado_monto,
  186.         wa3.value AS estimado_moneda,
  187.         wa4.value AS total_adjudicado,
  188.         wa6.value AS factura_monto,
  189.         DATE_FORMAT(STR_TO_DATE(ws1.started_at,'%Y-%m-%d %H:%i:%s'),'%d-%m-%Y %H:%i') AS fecha_creacion,
  190.         DATE_FORMAT(STR_TO_DATE(wa5.value,'%d/%m/%Y'),'%d-%m-%Y') AS fecha_adjudicacion,
  191.         '' AS SLA,
  192.         ws2.state AS estado,
  193.         ws2.started_at AS fecha_estado,
  194.         was2.user_id AS selected_supplier
  195.         ")
  196.             ->distinct()
  197.             ->from('workflow_processes''wp')
  198.             ->leftJoin('wp''workflow_attributes''wa1''wp.id = wa1.process_id AND wa1.path = :path1')
  199.             ->leftJoin('wa1''unit''u''u.id = wa1.value')
  200.             ->leftJoin('wp''workflow_attributes''wa2''wp.id = wa2.process_id AND wa2.path = :path2')
  201.             ->leftJoin('wp''workflow_attributes''wa3''wp.id = wa3.process_id AND wa3.path = :path3')
  202.             ->leftJoin('wp''workflow_attributes''wa4''wp.id = wa4.process_id AND wa4.path = :path4')
  203.             ->leftJoin('wp''workflow_attributes''wa6''wp.id = wa6.process_id AND wa6.path = :path6')
  204.             ->innerJoin('wp''workflow_states''ws1''wp.id = ws1.process_id AND ws1.state = :state_start')
  205.             ->leftJoin('wp''workflow_attributes''wa5''wp.id = wa5.process_id AND wa5.path = :path5')
  206.             ->innerJoin('wp''workflow_states''ws2''wp.id = ws2.process_id AND ws2.current = :true')
  207.             ->leftJoin('ws2''workflow_assignee''was2''ws2.id = was2.state_id AND was2.name = :selected_supplier')
  208.             ->setParameter('path1''info_compra.sucursal')
  209.             ->setParameter('path2''info_compra.valor_estimado.monto')
  210.             ->setParameter('path3''info_compra.valor_estimado.moneda')
  211.             ->setParameter('path4''total_adjudicado')
  212.             ->setParameter('path5''cronograma.fecha_adjudicacion')
  213.             ->setParameter('path6''info_compra.factura_monto')
  214.             ->setParameter('state_start''_process_start')
  215.             ->setParameter('true'1)
  216.             ->setParameter('selected_supplier','adjudicado')
  217.             ->orderBy('wp.uuid''DESC')
  218.         ;
  219.         if(!$this->isGranted('ROLE_VIEWER')){
  220.             $qb
  221.                 ->innerJoin('ws2''workflow_assignee''was1''ws2.id = was1.state_id AND was1.user_id = :user_id')
  222.                 ->setParameter('user_id'$this->getUser()->getId())
  223.             ;
  224.             // Exlude workflows cancelled for suppliers
  225.             if($this->isGranted('ROLE_SUPPLIER')){
  226.                 $qb->andWhere(
  227.                     $qb->expr()->orX(
  228.                         $qb->expr()->notIn('ws2.state'':states_anuladas'),
  229.                         'EXISTS (
  230.                             SELECT 1 FROM workflow_states ws_inv 
  231.                             INNER JOIN workflow_assignee wa_inv ON ws_inv.id = wa_inv.state_id 
  232.                             WHERE ws_inv.process_id = wp.id 
  233.                             AND wa_inv.user_id = :user_id 
  234.                             AND wa_inv.name = :proveedor_role
  235.                             AND ws_inv.state NOT IN (:states_anuladas_check)
  236.                         )'
  237.                     )
  238.                 )
  239.                 ->setParameter('states_anuladas', ['orden_trabajo_anulada''solicitud_anulada'], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  240.                 ->setParameter('states_anuladas_check', ['orden_trabajo_anulada''solicitud_anulada'], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  241.                 ->setParameter('proveedor_role''proveedor');
  242.             }
  243.         }
  244.         $qbHistory = clone $qb;
  245.         $states = [];
  246.         $i 0;
  247.         foreach ($this->getStatesBy('history') as $state) {
  248.             $current 'state_' $i;
  249.             $qbHistory->setParameter($current$state);
  250.             $states[] = ':' $current;
  251.             $i++;
  252.         }
  253.         $qbHistory->andWhere(
  254.             $qbHistory->expr()->in('ws2.state'$states)
  255.         );
  256.         return $this->render('Dashboard/history.html.twig', [
  257.             'history' => $qbHistory->fetchAllAssociative() ,
  258.         ]);
  259.     }
  260.     /**
  261.      * @param $type
  262.      * @param $role
  263.      * @return array
  264.      */
  265.     private function getStatesBy($type$role null)
  266.     {
  267.         if ($type == 'historico'$type 'history';
  268.         /** @var User $user */
  269.         $user $this->getUser();
  270.         switch ($type) {
  271.             case 'history':
  272.                 return [
  273.                     'orden_trabajo_completa',
  274.                     'orden_trabajo_anulada',
  275.                     'solicitud_cerrada',
  276.                     'solicitud_anulada',
  277.                 ];
  278.             case 'active':
  279.                 if ($role == 'solicitante') {
  280.                     return [
  281.                         'regularizacion-factura' => [
  282.                             'validacion_solicitante',
  283.                             'rechazado_apoderado_1',
  284.                             'rechazado_apoderado_2',
  285.                             'rechazada_adquisiciones',
  286.                             'rechazada_jefatura_adquisiciones',
  287.                             'rechazada_apoderado_3',
  288.                             'rechazada_apoderado_4'
  289.                         ],
  290.                         'compras-se' => [
  291.                             'rechazado_apoderado_1',
  292.                             'rechazado_apoderado_2',
  293.                             'orden_trabajo_certificada',
  294.                             'rechazada_adquisiciones',
  295.                         ],
  296.                         'compras-bex' => [
  297.                             'rechazada_adquisiciones',
  298.                             'validacion_solicitante',
  299.                             'rechazado_apoderado_1',
  300.                             'rechazado_apoderado_2',
  301.                             'evaluacion_tecnica',
  302.                             'orden_trabajo_certificada',
  303.                         ]
  304.                     ];
  305.                 } elseif ($role == 'apoderado_1') {
  306.                     return [
  307.                         'regularizacion-factura' => [
  308.                             'evaluacion_apoderado_1'
  309.                         ],
  310.                         'compras-se' => [
  311.                             'evaluacion_apoderado_1',
  312.                         ],
  313.                         'compras-bex' => [
  314.                             'evaluacion_apoderado_1',
  315.                         ]
  316.                     ];
  317.                 } elseif ($role == 'apoderado_2') {
  318.                     return [
  319.                         'regularizacion-factura' => [
  320.                             'evaluacion_apoderado_2'
  321.                         ],
  322.                         'compras-se' => [
  323.                             'evaluacion_apoderado_2',
  324.                         ],
  325.                         'compras-bex' => [
  326.                             'evaluacion_apoderado_2',
  327.                         ]
  328.                     ];
  329.                 } elseif ($role == 'adquisiciones') {
  330.                     return [
  331.                         'regularizacion-factura' => [
  332.                             'evaluacion_adquisiciones'
  333.                         ],
  334.                         'compras-se' => [
  335.                             'evaluacion_adquisiciones',
  336.                             'revision_ofertas',
  337.                         ],
  338.                         'compras-bex' => [
  339.                             'evaluacion_adquisiciones',
  340.                             'rechazada_jefatura_adquisiciones',
  341.                             'validacion_adquisiciones',
  342.                             'revision_ofertas',
  343.                             'validacion_ofertas'
  344.                         ]
  345.                     ];
  346.                 } elseif ($role == 'jefe_adquisiciones') {
  347.                     return [
  348.                         'regularizacion-factura' => [
  349.                             'evaluacion_jefatura_adquisiciones'
  350.                         ],
  351.                         'compras-se' => [
  352.                             'evaluacion_jefatura_adquisiciones',
  353.                             'rechazada_jefatura_adquisiciones',
  354.                         ],
  355.                         'compras-bex' => [
  356.                             'evaluacion_jefatura_adquisiciones',
  357.                         ]
  358.                     ];
  359.                 } elseif ($role == 'apoderado_3') {
  360.                     return [
  361.                         'regularizacion-factura' => [
  362.                             'evaluacion_apoderado_3'
  363.                         ],
  364.                         'compras-se' => [
  365.                             'evaluacion_apoderado_3',
  366.                         ],
  367.                         'compras-bex' => [
  368.                             'evaluacion_apoderado_3',
  369.                         ]
  370.                     ];
  371.                 } elseif ($role == 'apoderado_4') {
  372.                     return [
  373.                         'regularizacion-factura' => [
  374.                             'evaluacion_apoderado_4'
  375.                         ],
  376.                         'compras-se' => [
  377.                             'evaluacion_apoderado_4',
  378.                         ],
  379.                         'compras-bex' => [
  380.                             'evaluacion_apoderado_4',
  381.                         ]
  382.                     ];
  383.                 } elseif ($role == 'finanzas') {
  384.                     return [
  385.                         'regularizacion-factura' => [
  386.                             'rechazado_solicitante',
  387.                             'rechazado_fondo_apoderado_1',
  388.                             'rechazado_fondo_apoderado_2',
  389.                             'rechazada_fondo_adquisiciones',
  390.                             'rechazada_fondo_jefatura_adquisiciones',
  391.                             'rechazada_fondo_apoderado_3',
  392.                             'rechazada_fondo_apoderado_4'
  393.                         ],
  394.                     ];
  395.                 } elseif ($role == 'ejecutivo_area_compras') {
  396.                     return [
  397.                         'compras-bex' => [
  398.                             'evaluacion_ejecutivo_area_compras',
  399.                         ],
  400.                     ];
  401.                 }
  402.                 break;
  403.             case 'process':
  404.                 if ($role == 'solicitante') {
  405.                     return [
  406.                         'regularizacion-factura' => [
  407.                             'rechazado_solicitante',
  408.                             'evaluacion_apoderado_1',
  409.                             'evaluacion_apoderado_2',
  410.                             'evaluacion_adquisiciones',
  411.                             'evaluacion_jefatura_adquisiciones',
  412.                             'rechazada_jefatura_adquisiciones',
  413.                             'evaluacion_apoderado_3',
  414.                             'evaluacion_apoderado_4',
  415.                             'rechazado_fondo_apoderado_1',
  416.                             'rechazado_fondo_apoderado_2',
  417.                             'rechazada_fondo_adquisiciones',
  418.                             'rechazada_fondo_jefatura_adquisiciones',
  419.                             'rechazada_fondo_apoderado_3',
  420.                             'rechazada_fondo_apoderado_4'
  421.                         ],
  422.                         'compras-se' => [
  423.                             'evaluacion_apoderado_1',
  424.                             'evaluacion_apoderado_2',
  425.                             'evaluacion_adquisiciones',
  426.                             'compra_aprobada',
  427.                             'recepcion_ofertas',
  428.                             'recibiendo_preguntas',
  429.                             'respondiendo_preguntas',
  430.                             'compra_activada',
  431.                             'evaluacion_tecnica',
  432.                             'revision_ofertas',
  433.                             'evaluacion_jefatura_adquisiciones',
  434.                             'rechazada_jefatura_adquisiciones',
  435.                             'evaluacion_apoderado_3',
  436.                             'rechazada_apoderado_3',
  437.                             'evaluacion_apoderado_4',
  438.                             'rechazada_apoderado_4',
  439.                             'compra_adjudicada',
  440.                             'orden_trabajo_aceptada',
  441.                             'orden_trabajo_rechazada',
  442.                             'orden_trabajo_evaluada',
  443.                             'facturacion',
  444.                             'aprobacion_pago',
  445.                             'solicitud_rechazada',
  446.                         ],
  447.                         'compras-bex' => [
  448.                             'evaluacion_adquisiciones',
  449.                             'evaluacion_jefatura_adquisiciones',
  450.                             'rechazada_jefatura_adquisiciones',
  451.                             'evaluacion_apoderado_1',
  452.                             'evaluacion_apoderado_2',
  453.                             'validacion_adquisiciones',
  454.                             'recibiendo_preguntas',
  455.                             'respondiendo_preguntas',
  456.                             'recepcion_ofertas',
  457.                             'validacion_ofertas',
  458.                             'revision_ofertas',
  459.                             'evaluacion_ejecutivo_area_compras',
  460.                             'compra_aprobada',
  461.                             'compra_activada',
  462.                             'evaluacion_apoderado_3',
  463.                             'rechazada_apoderado_3',
  464.                             'evaluacion_apoderado_4',
  465.                             'rechazada_apoderado_4',
  466.                             'compra_adjudicada',
  467.                             'orden_trabajo_aceptada',
  468.                             'orden_trabajo_rechazada',
  469.                             'orden_trabajo_evaluada',
  470.                             'facturacion',
  471.                             'aprobacion_pago',
  472.                             'solicitud_rechazada',
  473.                         ]
  474.                     ];
  475.                 } elseif ($role == 'apoderado_1') {
  476.                     return [
  477.                         'regularizacion-factura' => [
  478.                             'rechazado_apoderado_1',
  479.                             'evaluacion_apoderado_2',
  480.                             'rechazado_apoderado_2',
  481.                             'evaluacion_adquisiciones',
  482.                             'rechazada_adquisiciones',
  483.                             'evaluacion_jefatura_adquisiciones',
  484.                             'rechazada_jefatura_adquisiciones',
  485.                             'evaluacion_apoderado_3',
  486.                             'rechazada_apoderado_3',
  487.                             'evaluacion_apoderado_4',
  488.                             'rechazada_apoderado_4',
  489.                             'rechazado_fondo_apoderado_1',
  490.                             'rechazado_fondo_apoderado_2',
  491.                             'rechazada_fondo_adquisiciones',
  492.                             'rechazada_fondo_jefatura_adquisiciones',
  493.                             'rechazada_fondo_apoderado_3',
  494.                             'rechazada_fondo_apoderado_4'
  495.                         ],
  496.                         'compras-se' => [
  497.                             'rechazado_apoderado_1',
  498.                             'evaluacion_apoderado_2',
  499.                             'rechazado_apoderado_2',
  500.                             'evaluacion_adquisiciones',
  501.                             'compra_aprobada',
  502.                             'recepcion_ofertas',
  503.                             'recibiendo_preguntas',
  504.                             'respondiendo_preguntas',
  505.                             'compra_activada',
  506.                             'evaluacion_tecnica',
  507.                             'revision_ofertas',
  508.                             'evaluacion_jefatura_adquisiciones',
  509.                             'rechazada_jefatura_adquisiciones',
  510.                             'evaluacion_apoderado_3',
  511.                             'rechazada_apoderado_3',
  512.                             'evaluacion_apoderado_4',
  513.                             'rechazada_apoderado_4',
  514.                             'compra_adjudicada',
  515.                             'orden_trabajo_aceptada',
  516.                             'orden_trabajo_certificada',
  517.                             'orden_trabajo_rechazada',
  518.                             'orden_trabajo_evaluada',
  519.                             'facturacion',
  520.                             'aprobacion_pago',
  521.                             'solicitud_rechazada',
  522.                             'rechazada_adquisiciones',
  523.                         ],
  524.                         'compras-bex' => [
  525.                             'rechazado_apoderado_1',
  526.                             'evaluacion_apoderado_2',
  527.                             'rechazado_apoderado_2',
  528.                             'validacion_adquisiciones',
  529.                             'recibiendo_preguntas',
  530.                             'respondiendo_preguntas',
  531.                             'recepcion_ofertas',
  532.                             'validacion_ofertas',
  533.                             'evaluacion_tecnica',
  534.                             'revision_ofertas',
  535.                             'evaluacion_ejecutivo_area_compras',
  536.                             'compra_aprobada',
  537.                             'compra_activada',
  538.                             'evaluacion_apoderado_3',
  539.                             'rechazada_apoderado_3',
  540.                             'evaluacion_apoderado_4',
  541.                             'rechazada_apoderado_4',
  542.                             'compra_adjudicada',
  543.                             'orden_trabajo_aceptada',
  544.                             'orden_trabajo_certificada',
  545.                             'orden_trabajo_rechazada',
  546.                             'orden_trabajo_evaluada',
  547.                             'facturacion',
  548.                             'aprobacion_pago',
  549.                             'solicitud_rechazada',
  550.                         ]
  551.                     ];
  552.                 } elseif ($role == 'apoderado_2') {
  553.                     return [
  554.                         'regularizacion-factura' => [
  555.                             'rechazado_apoderado_2',
  556.                             'evaluacion_adquisiciones',
  557.                             'rechazada_adquisiciones',
  558.                             'evaluacion_jefatura_adquisiciones',
  559.                             'rechazada_jefatura_adquisiciones',
  560.                             'evaluacion_apoderado_3',
  561.                             'rechazada_apoderado_3',
  562.                             'evaluacion_apoderado_4',
  563.                             'rechazada_apoderado_4',
  564.                             'rechazado_fondo_apoderado_2',
  565.                             'rechazada_fondo_adquisiciones',
  566.                             'rechazada_fondo_jefatura_adquisiciones',
  567.                             'rechazada_fondo_apoderado_3',
  568.                             'rechazada_fondo_apoderado_4'
  569.                         ],
  570.                         'compras-se' => [
  571.                             'rechazado_apoderado_2',
  572.                             'evaluacion_adquisiciones',
  573.                             'compra_aprobada',
  574.                             'recepcion_ofertas',
  575.                             'recibiendo_preguntas',
  576.                             'respondiendo_preguntas',
  577.                             'compra_activada',
  578.                             'evaluacion_tecnica',
  579.                             'revision_ofertas',
  580.                             'evaluacion_jefatura_adquisiciones',
  581.                             'rechazada_jefatura_adquisiciones',
  582.                             'evaluacion_apoderado_3',
  583.                             'rechazada_apoderado_3',
  584.                             'evaluacion_apoderado_4',
  585.                             'rechazada_apoderado_4',
  586.                             'compra_adjudicada',
  587.                             'orden_trabajo_aceptada',
  588.                             'orden_trabajo_certificada',
  589.                             'orden_trabajo_rechazada',
  590.                             'orden_trabajo_evaluada',
  591.                             'facturacion',
  592.                             'aprobacion_pago',
  593.                             'solicitud_rechazada',
  594.                             'rechazada_adquisiciones',
  595.                         ],
  596.                         'compras-bex' => [
  597.                             'rechazado_apoderado_2',
  598.                             'validacion_adquisiciones',
  599.                             'recibiendo_preguntas',
  600.                             'respondiendo_preguntas',
  601.                             'recepcion_ofertas',
  602.                             'validacion_ofertas',
  603.                             'evaluacion_tecnica',
  604.                             'revision_ofertas',
  605.                             'evaluacion_ejecutivo_area_compras',
  606.                             'compra_aprobada',
  607.                             'compra_activada',
  608.                             'evaluacion_apoderado_3',
  609.                             'rechazada_apoderado_3',
  610.                             'evaluacion_apoderado_4',
  611.                             'rechazada_apoderado_4',
  612.                             'compra_adjudicada',
  613.                             'orden_trabajo_aceptada',
  614.                             'orden_trabajo_certificada',
  615.                             'orden_trabajo_rechazada',
  616.                             'orden_trabajo_evaluada',
  617.                             'facturacion',
  618.                             'aprobacion_pago',
  619.                             'solicitud_rechazada',
  620.                         ]
  621.                     ];
  622.                 } elseif ($role == 'adquisiciones') {
  623.                     return [
  624.                         'regularizacion-factura' => [
  625.                             'rechazada_adquisiciones',
  626.                             'evaluacion_jefatura_adquisiciones',
  627.                             'rechazada_jefatura_adquisiciones',
  628.                             'evaluacion_apoderado_3',
  629.                             'rechazada_apoderado_3',
  630.                             'evaluacion_apoderado_4',
  631.                             'rechazada_apoderado_4',
  632.                             'rechazada_fondo_adquisiciones',
  633.                             'rechazada_fondo_jefatura_adquisiciones',
  634.                             'rechazada_fondo_apoderado_3',
  635.                             'rechazada_fondo_apoderado_4'
  636.                         ],
  637.                         'compras-se' => [
  638.                             'compra_aprobada',
  639.                             'recepcion_ofertas',
  640.                             'recibiendo_preguntas',
  641.                             'respondiendo_preguntas',
  642.                             'compra_activada',
  643.                             'evaluacion_tecnica',
  644.                             'evaluacion_jefatura_adquisiciones',
  645.                             'rechazada_jefatura_adquisiciones',
  646.                             'evaluacion_apoderado_3',
  647.                             'rechazada_apoderado_3',
  648.                             'evaluacion_apoderado_4',
  649.                             'rechazada_apoderado_4',
  650.                             'compra_adjudicada',
  651.                             'orden_trabajo_aceptada',
  652.                             'orden_trabajo_certificada',
  653.                             'orden_trabajo_rechazada',
  654.                             'orden_trabajo_evaluada',
  655.                             'facturacion',
  656.                             'aprobacion_pago',
  657.                             'solicitud_rechazada',
  658.                             'rechazada_adquisiciones',
  659.                         ],
  660.                         'compras-bex' => [
  661.                             'rechazada_adquisiciones',
  662.                             'evaluacion_jefatura_adquisiciones',
  663.                             'validacion_solicitante',
  664.                             'evaluacion_apoderado_1',
  665.                             'rechazado_apoderado_1',
  666.                             'evaluacion_apoderado_2',
  667.                             'rechazado_apoderado_2',
  668.                             'recibiendo_preguntas',
  669.                             'respondiendo_preguntas',
  670.                             'recepcion_ofertas',
  671.                             'validacion_ofertas',
  672.                             'evaluacion_tecnica',
  673.                             'revision_ofertas',
  674.                             'evaluacion_ejecutivo_area_compras',
  675.                             'compra_aprobada',
  676.                             'compra_activada',
  677.                             'evaluacion_apoderado_3',
  678.                             'rechazada_apoderado_3',
  679.                             'evaluacion_apoderado_4',
  680.                             'rechazada_apoderado_4',
  681.                             'compra_adjudicada',
  682.                             'orden_trabajo_aceptada',
  683.                             'orden_trabajo_certificada',
  684.                             'orden_trabajo_rechazada',
  685.                             'orden_trabajo_evaluada',
  686.                             'facturacion',
  687.                             'aprobacion_pago',
  688.                             'solicitud_rechazada',
  689.                         ]
  690.                     ];
  691.                 } elseif ($role == 'jefe_adquisiciones') {
  692.                     return [
  693.                         'regularizacion-factura' => [
  694.                             'rechazada_jefatura_adquisiciones',
  695.                             'evaluacion_apoderado_3',
  696.                             'rechazada_apoderado_3',
  697.                             'evaluacion_apoderado_4',
  698.                             'rechazada_apoderado_4',
  699.                             'rechazada_fondo_jefatura_adquisiciones',
  700.                             'rechazada_fondo_apoderado_3',
  701.                             'rechazada_fondo_apoderado_4'
  702.                         ],
  703.                         'compras-se' => [
  704.                             'evaluacion_apoderado_3',
  705.                             'rechazada_apoderado_3',
  706.                             'evaluacion_apoderado_4',
  707.                             'rechazada_apoderado_4',
  708.                             'compra_adjudicada',
  709.                             'orden_trabajo_aceptada',
  710.                             'orden_trabajo_certificada',
  711.                             'orden_trabajo_rechazada',
  712.                             'orden_trabajo_evaluada',
  713.                             'facturacion',
  714.                             'aprobacion_pago',
  715.                         ],
  716.                         'compras-bex' => [
  717.                             'rechazada_jefatura_adquisiciones',
  718.                             'validacion_solicitante',
  719.                             'evaluacion_apoderado_1',
  720.                             'rechazado_apoderado_1',
  721.                             'evaluacion_apoderado_2',
  722.                             'rechazado_apoderado_2',
  723.                             'validacion_solicitante',
  724.                             'evaluacion_apoderado_1',
  725.                             'rechazado_apoderado_1',
  726.                             'evaluacion_apoderado_2',
  727.                             'rechazado_apoderado_2',
  728.                             'validacion_adquisiciones',
  729.                             'recibiendo_preguntas',
  730.                             'respondiendo_preguntas',
  731.                             'recepcion_ofertas',
  732.                             'evaluacion_tecnica',
  733.                             'revision_ofertas',
  734.                             'validacion_ofertas',
  735.                             'evaluacion_ejecutivo_area_compras',
  736.                             'evaluacion_apoderado_3',
  737.                             'rechazada_apoderado_3',
  738.                             'evaluacion_apoderado_4',
  739.                             'rechazada_apoderado_4',
  740.                             'compra_adjudicada',
  741.                             'orden_trabajo_aceptada',
  742.                             'orden_trabajo_certificada',
  743.                             'orden_trabajo_rechazada',
  744.                             'orden_trabajo_evaluada',
  745.                             'facturacion',
  746.                             'aprobacion_pago',
  747.                         ]
  748.                     ];
  749.                 } elseif ($role == 'apoderado_3') {
  750.                     return [
  751.                         'regularizacion-factura' => [
  752.                             'rechazada_apoderado_3',
  753.                             'evaluacion_apoderado_4',
  754.                             'rechazada_apoderado_4',
  755.                             'rechazada_fondo_apoderado_3',
  756.                             'rechazada_fondo_apoderado_4'
  757.                         ],
  758.                         'compras-se' => [
  759.                             'rechazada_apoderado_3',
  760.                             'evaluacion_apoderado_4',
  761.                             'rechazada_apoderado_4',
  762.                             'compra_adjudicada',
  763.                             'orden_trabajo_aceptada',
  764.                             'orden_trabajo_certificada',
  765.                             'orden_trabajo_rechazada',
  766.                             'orden_trabajo_evaluada',
  767.                             'facturacion',
  768.                             'aprobacion_pago',
  769.                             'solicitud_rechazada',
  770.                             'rechazada_adquisiciones',
  771.                         ],
  772.                         'compras-bex' => [
  773.                             'rechazada_apoderado_3',
  774.                             'evaluacion_apoderado_4',
  775.                             'rechazada_apoderado_4',
  776.                             'compra_adjudicada',
  777.                             'orden_trabajo_aceptada',
  778.                             'orden_trabajo_certificada',
  779.                             'orden_trabajo_rechazada',
  780.                             'orden_trabajo_evaluada',
  781.                             'facturacion',
  782.                             'aprobacion_pago',
  783.                             'solicitud_rechazada',
  784.                             'rechazada_adquisiciones',
  785.                         ]
  786.                     ];
  787.                 } elseif ($role == 'apoderado_4') {
  788.                     return [
  789.                         'regularizacion-factura' => [
  790.                             'rechazada_apoderado_4',
  791.                             'rechazada_fondo_apoderado_4'
  792.                         ],
  793.                         'compras-se' => [
  794.                             'rechazada_apoderado_4',
  795.                             'compra_adjudicada',
  796.                             'orden_trabajo_aceptada',
  797.                             'orden_trabajo_certificada',
  798.                             'orden_trabajo_rechazada',
  799.                             'orden_trabajo_evaluada',
  800.                             'facturacion',
  801.                             'aprobacion_pago',
  802.                             'solicitud_rechazada',
  803.                             'rechazada_adquisiciones',
  804.                         ],
  805.                         'compras-bex' => [
  806.                             'rechazada_apoderado_4',
  807.                             'compra_adjudicada',
  808.                             'orden_trabajo_aceptada',
  809.                             'orden_trabajo_certificada',
  810.                             'orden_trabajo_rechazada',
  811.                             'orden_trabajo_evaluada',
  812.                             'facturacion',
  813.                             'aprobacion_pago',
  814.                             'solicitud_rechazada',
  815.                             'rechazada_adquisiciones',
  816.                         ]
  817.                     ];
  818.                 }
  819.                 if ($role == 'proveedor') {
  820.                     return [
  821.                         'regularizacion-factura' => [
  822.                             'null'
  823.                         ],
  824.                         'compras-se' => [
  825.                             'recepcion_ofertas',
  826.                             'recibiendo_preguntas',
  827.                             'respondiendo_preguntas',
  828.                             'compra_activada',
  829.                             'evaluacion_tecnica',
  830.                             'revision_ofertas',
  831.                             'evaluacion_jefatura_adquisiciones',
  832.                             'rechazada_jefatura_adquisiciones',
  833.                             'evaluacion_apoderado_3',
  834.                             'rechazada_apoderado_3',
  835.                             'evaluacion_apoderado_4',
  836.                             'rechazada_apoderado_4',
  837.                             'compra_adjudicada',
  838.                             'orden_trabajo_aceptada',
  839.                             'orden_trabajo_certificada',
  840.                             'orden_trabajo_rechazada',
  841.                             'orden_trabajo_evaluada',
  842.                             'facturacion',
  843.                             'aprobacion_pago',
  844.                             'solicitud_rechazada',
  845.                             'rechazada_adquisiciones',
  846.                         ],
  847.                         'compras-bex' => [
  848.                             'recibiendo_preguntas',
  849.                             'respondiendo_preguntas',
  850.                             'recepcion_ofertas',
  851.                             'compra_activada',
  852.                             'evaluacion_tecnica',
  853.                             'revision_ofertas',
  854.                             'validacion_ofertas',
  855.                             'evaluacion_ejecutivo_area_compras',
  856.                             'evaluacion_apoderado_3',
  857.                             'rechazada_apoderado_3',
  858.                             'evaluacion_apoderado_4',
  859.                             'rechazada_apoderado_4',
  860.                             'compra_adjudicada',
  861.                             'orden_trabajo_aceptada',
  862.                             'orden_trabajo_certificada',
  863.                             'orden_trabajo_rechazada',
  864.                             'orden_trabajo_evaluada',
  865.                             'facturacion',
  866.                             'aprobacion_pago',
  867.                             'solicitud_rechazada',
  868.                         ]
  869.                     ];
  870.                 } elseif ($role == 'finanzas') {
  871.                     return [
  872.                         'regularizacion-factura' => [
  873.                             'validacion_solicitante',
  874.                             'evaluacion_apoderado_1',
  875.                             'rechazado_apoderado_1',
  876.                             'evaluacion_apoderado_2',
  877.                             'rechazado_apoderado_2',
  878.                             'evaluacion_adquisiciones',
  879.                             'rechazada_adquisiciones',
  880.                             'evaluacion_jefatura_adquisiciones',
  881.                             'rechazada_jefatura_adquisiciones',
  882.                             'evaluacion_apoderado_3',
  883.                             'rechazada_apoderado_3',
  884.                             'evaluacion_apoderado_4',
  885.                             'rechazada_apoderado_4'
  886.                         ],
  887.                         'compras-se' => [
  888.                             'facturacion',
  889.                             'aprobacion_pago',
  890.                             'orden_trabajo_aceptada',
  891.                             'orden_trabajo_certificada',
  892.                             'orden_trabajo_evaluada',
  893.                             'orden_trabajo_rechazada'
  894.                         ],
  895.                         'compras-bex' => [
  896.                             'facturacion',
  897.                             'aprobacion_pago',
  898.                             'orden_trabajo_aceptada',
  899.                             'orden_trabajo_certificada',
  900.                             'orden_trabajo_evaluada',
  901.                             'orden_trabajo_rechazada'
  902.                         ]
  903.                     ];
  904.                 } elseif ($role == 'ejecutivo_area_compras') {
  905.                     return [
  906.                         'compras-bex' => [
  907.                             'evaluacion_apoderado_3',
  908.                             'rechazada_apoderado_3',
  909.                             'evaluacion_apoderado_4',
  910.                             'rechazada_apoderado_4',
  911.                             'compra_adjudicada',
  912.                             'orden_trabajo_aceptada',
  913.                             'orden_trabajo_certificada',
  914.                             'orden_trabajo_rechazada',
  915.                             'orden_trabajo_evaluada',
  916.                             'facturacion',
  917.                             'aprobacion_pago',
  918.                             'solicitud_rechazada',
  919.                         ],
  920.                     ];
  921.                 }
  922.                 break;
  923.             default:
  924.                 return [
  925.                     'regularizacion-factura' => [
  926.                         'null'
  927.                     ],
  928.                     'compras-se' => [
  929.                         'null'
  930.                     ],
  931.                     'compras-bex' => [
  932.                         'null'
  933.                     ]
  934.                 ];
  935.         }
  936.         return [
  937.             'regularizacion-factura' => [
  938.                 'null'
  939.             ],
  940.             'compras-se' => [
  941.                 'null'
  942.             ],
  943.             'compras-bex' => [
  944.                 'null'
  945.             ]
  946.         ];
  947.     }
  948.     #[Route('/dashboard/viewer'name'dashboard_viewer'methods: ['GET','POST'])]
  949.     public function dashboardViewer()
  950.     {
  951.         /** @var Connection $conn */
  952.         $conn $this->getDoctrine()->getConnection();
  953.         $qb $conn->createQueryBuilder();
  954.         $qb->select("
  955.         wp.id,
  956.         wp.uuid,
  957.         wp.workflow,
  958.         u.code AS office_code,
  959.         u.name AS office_name,
  960.         wa2.value AS estimado_monto,
  961.         wa3.value AS estimado_moneda,
  962.         wa4.value AS total_adjudicado,
  963.         wa6.value AS factura_monto,
  964.         DATE_FORMAT(STR_TO_DATE(ws1.started_at,'%Y-%m-%d %H:%i:%s'),'%d-%m-%Y %H:%i') AS fecha_creacion,
  965.         DATE_FORMAT(STR_TO_DATE(wa5.value,'%d/%m/%Y'),'%d-%m-%Y') AS fecha_adjudicacion,
  966.         '' AS SLA,
  967.         ws2.state AS estado,
  968.         ws2.started_at AS fecha_estado,
  969.         was2.user_id AS selected_supplier
  970.         ")
  971.             ->distinct()
  972.             ->from('workflow_processes''wp')
  973.             ->leftJoin('wp''workflow_attributes''wa1''wp.id = wa1.process_id AND wa1.path = :path1')
  974.             ->leftJoin('wa1''unit''u''u.id = wa1.value')
  975.             ->leftJoin('wp''workflow_attributes''wa2''wp.id = wa2.process_id AND wa2.path = :path2')
  976.             ->leftJoin('wp''workflow_attributes''wa3''wp.id = wa3.process_id AND wa3.path = :path3')
  977.             ->leftJoin('wp''workflow_attributes''wa4''wp.id = wa4.process_id AND wa4.path = :path4')
  978.             ->leftJoin('wp''workflow_attributes''wa6''wp.id = wa6.process_id AND wa6.path = :path6')
  979.             ->innerJoin('wp''workflow_states''ws1''wp.id = ws1.process_id AND ws1.state = :state_start')
  980.             ->leftJoin('wp''workflow_attributes''wa5''wp.id = wa5.process_id AND wa5.path = :path5')
  981.             ->innerJoin('wp''workflow_states''ws2''wp.id = ws2.process_id AND ws2.current = :true')
  982.             ->leftJoin('ws2''workflow_assignee''was2''ws2.id = was2.state_id AND was2.name = :selected_supplier')
  983.             ->setParameter('path1''info_compra.sucursal')
  984.             ->setParameter('path2''info_compra.valor_estimado.monto')
  985.             ->setParameter('path3''info_compra.valor_estimado.moneda')
  986.             ->setParameter('path4''total_adjudicado')
  987.             ->setParameter('path5''cronograma.fecha_adjudicacion')
  988.             ->setParameter('path6''info_compra.factura_monto')
  989.             ->setParameter('state_start''_process_start')
  990.             ->setParameter('true'1)
  991.             ->setParameter('selected_supplier','adjudicado')
  992.             ->orderBy('wp.uuid''DESC')
  993.         ;
  994.         if(!$this->isGranted('ROLE_VIEWER')){
  995.             $qb
  996.                 ->innerJoin('ws2''workflow_assignee''was1''ws2.id = was1.state_id AND was1.user_id = :user_id')
  997.                 ->setParameter('user_id'$this->getUser()->getId())
  998.             ;
  999.             // Exlude workflows cancelled for suppliers
  1000.             if($this->isGranted('ROLE_SUPPLIER')){
  1001.                 $qb->andWhere(
  1002.                     $qb->expr()->orX(
  1003.                         $qb->expr()->notIn('ws2.state'':states_anuladas'),
  1004.                         'EXISTS (
  1005.                             SELECT 1 FROM workflow_states ws_inv 
  1006.                             INNER JOIN workflow_assignee wa_inv ON ws_inv.id = wa_inv.state_id 
  1007.                             WHERE ws_inv.process_id = wp.id 
  1008.                             AND wa_inv.user_id = :user_id 
  1009.                             AND wa_inv.name = :proveedor_role
  1010.                             AND ws_inv.state NOT IN (:states_anuladas_check)
  1011.                         )'
  1012.                     )
  1013.                 )
  1014.                 ->setParameter('states_anuladas', ['orden_trabajo_anulada''solicitud_anulada'], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  1015.                 ->setParameter('states_anuladas_check', ['orden_trabajo_anulada''solicitud_anulada'], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
  1016.                 ->setParameter('proveedor_role''proveedor');
  1017.             }
  1018.         }
  1019.         $roles = ['solicitante','apoderado_1','apoderado_2','adquisiciones','jefe_adquisiciones','apoderado_3','apoderado_4'];
  1020.         if($this->isGranted('ROLE_SUPPLIER')){
  1021.             $roles = ['proveedor'];
  1022.         }elseif ($this->isGranted('ROLE_FINANCES')){
  1023.             $roles = ['finanzas'];
  1024.         }
  1025.         $qbProcess = [];
  1026.         $qbHistory = clone $qb;
  1027.         $qbProcess['active'] = $qbProcess['process'] = [];
  1028.         if(!$this->isGranted('ROLE_VIEWER')) {
  1029.             foreach ($roles as $role) {
  1030.                 foreach (['active''process'] as $table) {
  1031.                     $qbCurrent = clone $qb;
  1032.                     $j 0;
  1033.                     foreach ($this->getStatesBy($table$role) as $workflow => $dataStates) {
  1034.                         $states = [];
  1035.                         $i 0;
  1036.                         $dataStates array_filter($dataStates);
  1037.                         foreach ($dataStates as $state) {
  1038.                             $current 'state_' $role '_' $j '_' $i;
  1039.                             $qbCurrent->setParameter($current$state);
  1040.                             $states[] = ':' $current;
  1041.                             $i++;
  1042.                         }
  1043.                         if ($dataStates) {
  1044.                             $qbCurrent->orWhere(
  1045.                                 $qbCurrent->expr()->andX(
  1046.                                     $qbCurrent->expr()->in('ws2.state'$states),
  1047.                                     'was1.name = :role_' $role,
  1048.                                     "wp.workflow = :workflow_{$table}_$j"
  1049.                                 )
  1050.                             )
  1051.                                 ->setParameter('role_' $role$role)
  1052.                                 ->setParameter("workflow_{$table}_$j"$workflow);
  1053.                         }
  1054.                         $j++;
  1055.                     }
  1056.                     $currentProcess $qbCurrent->execute()->fetchAll();
  1057.                     $qbProcess[$table] = array_merge($qbProcess[$table], $currentProcess);
  1058.                     unset($qbCurrent);
  1059.                 }
  1060.             }
  1061.         } else {
  1062.             $qbCurrent = clone $qb;
  1063.             $currentProcess $qbCurrent->execute()->fetchAll();
  1064.             $qbProcess['process'] = array_merge($qbProcess['process'], $currentProcess);
  1065.             unset($qbCurrent);
  1066.         }
  1067.         $qbActive $qbProcess['active'];
  1068.         $qbInProcess $qbProcess['process'];
  1069.         $states = [];
  1070.         $i 0;
  1071.         foreach ($this->getStatesBy('history') as $state) {
  1072.             $current 'state_' $i;
  1073.             $qbHistory->setParameter($current$state);
  1074.             $states[] = ':' $current;
  1075.             $i++;
  1076.         }
  1077.         $qbHistory->andWhere(
  1078.             $qbHistory->expr()->in('ws2.state'$states)
  1079.         );
  1080.         $showPasswordAlert = !$this->getUser()->isPasswordUpdatedForNewPolicy();
  1081.         return $this->render('Dashboard/index.html.twig', [
  1082.             'active' => $qbActive,
  1083.             'process' => $qbInProcess,
  1084.             'history' => $qbHistory->execute()->fetchAll(),
  1085.             'showPasswordAlert' => $showPasswordAlert,
  1086.         ]);
  1087.     }
  1088.    
  1089. }