src/Controller/TicketController.php line 1576

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Product;
  4. use App\Entity\Supportcase;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. use App\Service\TrafficTracker;
  11. use App\Service\Translation;
  12. use App\Entity\User;
  13. use App\Entity\Ticket;
  14. use App\Entity\TicketComercial;
  15. use App\Entity\Tickettecnico;
  16. use App\Entity\Tipoticket;
  17. use App\Service\ReportingColors;
  18. use App\Service\ProductlineJsonTree;
  19. use App\Form\Type\TicketEditType;
  20. use App\Service\ServiceNotification;
  21. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  22. use App\Form\Ticket\MessageSupport;
  23. use Psr\Log\LoggerInterface;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use App\Service\ExtensionFileService;
  26. use PhpOffice\PhpSpreadsheet\Calculation\Web\Service;
  27. class TicketController extends AbstractController
  28. {
  29.     protected static $level 1;
  30.     /**
  31.      * @Route("/ticket/default/index", name="ticket_index")
  32.      */
  33.     public function index(TrafficTracker $trafficTrackerTranslation $translationReportingColors $reportingColorsRequest $requestLoggerInterface $logger): Response
  34.     {
  35.         $trafficTracker->registerTraffic();
  36.         $entityManager $this->getDoctrine()->getManager();
  37.         $locale $request->getLocale();
  38.         $user $this->getUser();
  39.         $dataM = array();
  40.         $userRepository $this->getDoctrine()->getRepository(User::class);
  41.         $ticketmonthpreview[1] = 0;
  42.         $tickettotalYearPrev[1] = 0;
  43.         $ticketmonth[1] = 0;
  44.         $tickettotalYear[1] = 0;
  45.         /* datos de mis incidencia */
  46.         $incidencias $entityManager->createQuery('SELECT sc'
  47.             ' FROM App\Entity\Supportcase sc'
  48.             ' WHERE sc.createdby = :user')
  49.             ->setParameter('user'$user)
  50.             ->getResult();
  51.         foreach ($incidencias as $incidencia) {
  52.             $ticketRepository $this->getDoctrine()->getRepository(Ticket::class);
  53.             $supportcaseRepository $this->getDoctrine()->getRepository(\App\Entity\Supportcase::class);
  54.             $userLevel $userRepository->getUserLevel($request$user);
  55.             $logger->info('>>>> Ticket Logs <<<< Case: ' $incidencia->getId() . ' user: ' $user->getId() . ' level: ' $userLevel);
  56.             $myTicket $entityManager->createQuery('SELECT t'
  57.                 ' FROM App\Entity\Ticket t'
  58.                 ' WHERE t.supportcase = :incidencia'
  59.                 ' AND t.level = :level')
  60.                 ->setParameter('incidencia'$incidencia)
  61.                 ->setParameter('level'$userLevel)
  62.                 ->getOneOrNullResult();
  63.             $logger->info('>>>> End Ticket Logs <<<< Case: ' $incidencia->getId() . ' user: ' $user->getId() . ' level: ' $userLevel);
  64.             $dataM[] = array(
  65.                 'id' => $incidencia->getId(),
  66.                 'tipo' => $translation->getTranslationBy($incidencia->getTipoTicket(), $locale'nombretipo'),
  67.                 'creationDate' => $incidencia->getCreationdate(),
  68.                 'orderDate' => $incidencia->getCreationdate()->format('Ymdhms'),
  69.                 'status' => $myTicket $myTicket->getStatus() : '',
  70.                 'subject' => $incidencia->getSubject(),
  71.                 'supportCaseId' => $supportcaseRepository->getSupportCaseId10Digits($incidencia),
  72.                 'myTicket' => $myTicket,
  73.                 'statusTicket' => $myTicket $ticketRepository->getStatusTicket($user$myTicket) : '',
  74.             );
  75.         }
  76.         $ticketTipesToShow = array();
  77.         if ($userRepository->hasSupportRole($user)) {
  78.             $ticketTipesToShow[] = 1;
  79.         }
  80.         if ($userRepository->hasAdminRole($user)) {
  81.             $ticketTipesToShow[] = 2;
  82.         }
  83.         if ($userRepository->hasSeminarRole($user)) {
  84.             $ticketTipesToShow[] = 3;
  85.         }
  86.         if ($userRepository->hasCommercialRole($user)) {
  87.             $ticketTipesToShow[] = 4;
  88.         }
  89.         //Informacion de ticket segun Rol
  90.         //si el user es vendor
  91.         if ($user->getVendor()) {
  92.             $ticketmonth $entityManager->createQuery('SELECT SUM(dv.ticket)'
  93.                 ' FROM App\Entity\Dwvendor dv'
  94.                 ' WHERE dv.vendor = :vendor'
  95.                 ' AND dv.year = :year'
  96.                 ' AND dv.month = :month')
  97.                 ->setParameter('vendor'$user->getVendor())
  98.                 ->setParameter('year'date('Y'))
  99.                 ->setParameter('month'date('n'))
  100.                 ->getOneOrNullResult();
  101.             $ticketmonthpreview $entityManager->createQuery('SELECT SUM(dv.ticket)'
  102.                 ' FROM App\Entity\Dwvendor dv'
  103.                 ' WHERE dv.vendor = :vendor'
  104.                 ' AND dv.year = :year'
  105.                 ' AND dv.month = :month')
  106.                 ->setParameter('vendor'$user->getVendor())
  107.                 ->setParameter('year'date('Y'))
  108.                 ->setParameter('month'date('n') - 1)
  109.                 ->getOneOrNullResult();
  110.             $tickettotalYear $entityManager->createQuery('SELECT SUM(dv.ticket)'
  111.                 ' FROM App\Entity\Dwvendor dv'
  112.                 ' WHERE dv.vendor = :vendor'
  113.                 ' AND dv.year = :year')
  114.                 ->setParameter('vendor'$user->getVendor())
  115.                 ->setParameter('year'date('Y'))
  116.                 ->getOneOrNullResult();
  117.             $tickettotalYearPrev $entityManager->createQuery('SELECT SUM(dv.ticket)'
  118.                 ' FROM App\Entity\Dwvendor dv'
  119.                 ' WHERE dv.vendor = :vendor'
  120.                 ' AND dv.year = :year')
  121.                 ->setParameter('vendor'$user->getVendor())
  122.                 ->setParameter('year'date('Y') - 1)
  123.                 ->getOneOrNullResult();
  124.         } else
  125.             //si el user logueado es wholesaler
  126.             if ($user->getWholesaler()) {
  127.                 $fecha = new \DateTime();
  128.                 $month $fecha->format('n');
  129.                 $year $fecha->format('Y');
  130.                 if ($month == 1) {
  131.                     $monthp 12;
  132.                     $yearp $year 1;
  133.                 } else {
  134.                     $monthp $month 1;
  135.                     $yearp $year;
  136.                 }
  137.                 $ticketmonth $entityManager->createQuery('SELECT SUM(dw.ticket)'
  138.                     ' FROM App\Entity\Dwwholesaler dw'
  139.                     ' WHERE dw.wholesaler = :wholesaler'
  140.                     ' AND dw.year = :year'
  141.                     ' AND dw.month = :month')
  142.                     ->setParameter('wholesaler'$user->getWholesaler())
  143.                     ->setParameter('year'$year)
  144.                     ->setParameter('month'$month)
  145.                     ->getOneOrNullResult();
  146.                 $ticketmonthpreview $entityManager->createQuery('SELECT SUM(dw.ticket)'
  147.                     ' FROM App\Entity\Dwwholesaler dw'
  148.                     ' WHERE dw.wholesaler = :wholesaler'
  149.                     ' AND dw.year = :year'
  150.                     ' AND dw.month = :month')
  151.                     ->setParameter('wholesaler'$user->getWholesaler())
  152.                     ->setParameter('year'$yearp)
  153.                     ->setParameter('month'$monthp)
  154.                     ->getOneOrNullResult();
  155.                 $tickettotalYear $entityManager->createQuery('SELECT SUM(dw.ticket)'
  156.                     ' FROM App\Entity\Dwwholesaler dw'
  157.                     ' WHERE dw.wholesaler = :wholesaler'
  158.                     ' AND dw.year = :year')
  159.                     ->setParameter('wholesaler'$user->getWholesaler())
  160.                     ->setParameter('year'$year)
  161.                     ->getOneOrNullResult();
  162.                 $tickettotalYearPrev $entityManager->createQuery('SELECT SUM(dw.ticket)'
  163.                     ' FROM App\Entity\Dwwholesaler dw'
  164.                     ' WHERE dw.wholesaler = :wholesaler'
  165.                     ' AND dw.year = :year')
  166.                     ->setParameter('wholesaler'$user->getWholesaler())
  167.                     ->setParameter('year'$yearp)
  168.                     ->getOneOrNullResult();
  169.             } else
  170.                 //si el user logueado es Partner
  171.                 if ($user->getPartner()) {
  172.                     $ticketmonth $entityManager->createQuery('SELECT SUM(dp.ticket)'
  173.                         ' FROM App\Entity\Dwpartner dp'
  174.                         ' WHERE dp.partner = :partner'
  175.                         ' AND dp.year = :year'
  176.                         ' AND dp.month = :month')
  177.                         ->setParameter('partner'$user->getPartner())
  178.                         ->setParameter('year'date('Y'))
  179.                         ->setParameter('month'date('n'))
  180.                         ->getOneOrNullResult();
  181.                     $ticketmonthpreview $entityManager->createQuery('SELECT SUM(dp.ticket)'
  182.                         ' FROM App\Entity\Dwpartner dp'
  183.                         ' WHERE dp.partner = :partner'
  184.                         ' AND dp.year = :year'
  185.                         ' AND dp.month = :month')
  186.                         ->setParameter('partner'$user->getPartner())
  187.                         ->setParameter('year'date('Y'))
  188.                         ->setParameter('month'date('n') - 1)
  189.                         ->getOneOrNullResult();
  190.                     $tickettotalYear $entityManager->createQuery('SELECT SUM(dp.ticket)'
  191.                         ' FROM App\Entity\Dwpartner dp'
  192.                         ' WHERE dp.partner = :partner'
  193.                         ' AND dp.year = :year')
  194.                         ->setParameter('partner'$user->getPartner())
  195.                         ->setParameter('year'date('Y'))
  196.                         ->getOneOrNullResult();
  197.                     $tickettotalYearPrev $entityManager->createQuery('SELECT SUM(dp.ticket)'
  198.                         ' FROM App\Entity\Dwpartner dp'
  199.                         ' WHERE dp.partner = :partner'
  200.                         ' AND dp.year = :year')
  201.                         ->setParameter('partner'$user->getPartner())
  202.                         ->setParameter('year'date('Y') - 1)
  203.                         ->getOneOrNullResult();
  204.                 } else
  205.                     //si el user logueado es Customer
  206.                     if ($user->getCustomer()) {
  207.                         $ticketmonth $entityManager->createQuery('SELECT SUM(dc.ticket)'
  208.                             ' FROM App\Entity\Dwcustomer dc'
  209.                             ' WHERE dc.customer = :customer'
  210.                             ' AND dc.year = :year'
  211.                             ' AND dc.month = :month')
  212.                             ->setParameter('customer'$user->getCustomer())
  213.                             ->setParameter('year'date('Y'))
  214.                             ->setParameter('month'date('n'))
  215.                             ->getOneOrNullResult();
  216.                         $ticketmonthpreview $entityManager->createQuery('SELECT SUM(dc.ticket)'
  217.                             ' FROM App\Entity\Dwcustomer dc'
  218.                             ' WHERE dc.customer = :customer'
  219.                             ' AND dc.year = :year'
  220.                             ' AND dc.month = :month')
  221.                             ->setParameter('customer'$user->getCustomer())
  222.                             ->setParameter('year'date('Y'))
  223.                             ->setParameter('month'date('n') - 1)
  224.                             ->getOneOrNullResult();
  225.                         $tickettotalYear $entityManager->createQuery('SELECT SUM(dc.ticket)'
  226.                             ' FROM App\Entity\Dwcustomer dc'
  227.                             ' WHERE dc.customer = :customer'
  228.                             ' AND dc.year = :year')
  229.                             ->setParameter('customer'$user->getCustomer())
  230.                             ->setParameter('year'date('Y'))
  231.                             ->getOneOrNullResult();
  232.                         $tickettotalYearPrev $entityManager->createQuery('SELECT SUM(dc.ticket)'
  233.                             ' FROM App\Entity\Dwcustomer dc'
  234.                             ' WHERE dc.customer = :customer'
  235.                             ' AND dc.year = :year')
  236.                             ->setParameter('customer'$user->getCustomer())
  237.                             ->setParameter('year'date('Y') - 1)
  238.                             ->getOneOrNullResult();
  239.                     }
  240.         $ticketmonthporcent $ticketmonthpreview[1] ? (100 * ($ticketmonth[1] - $ticketmonthpreview[1]) / $ticketmonthpreview[1]) : 0;
  241.         $ticketyearporcentprev $tickettotalYearPrev[1] ? (100 * ($tickettotalYear[1] - $tickettotalYearPrev[1]) / $tickettotalYearPrev[1]) : 0;
  242.         return $this->render('ticket/index.html.twig', [
  243.             'dataM' => $dataM,
  244.             'ticketmonth' => $ticketmonth[1] ? $ticketmonth[1] : 0,
  245.             'ticketmonthporcent' => $ticketmonthporcent,
  246.             'ticketyears' => $tickettotalYear[1] ? $tickettotalYear[1] : 0,
  247.             'ticketyearporcent' => $ticketyearporcentprev,
  248.             'estadosticket' => json_encode($this->SupportTicketByStatus($reportingColors$user)),
  249.         ]);
  250.     }
  251.     /**
  252.      * @Route("/ticket/default/indexclient", name="ticket_indexclient")
  253.      */
  254.     public function indexclient(TrafficTracker $trafficTrackerTranslation $translationReportingColors $reportingColorsRequest $request): Response
  255.     {
  256.         $trafficTracker->registerTraffic();
  257.         $entityManager $this->getDoctrine()->getManager();
  258.         $userRepository $this->getDoctrine()->getRepository(User::class);
  259.         $supportcaseRepository $this->getDoctrine()->getRepository(\App\Entity\Supportcase::class);
  260.         $locale $request->getLocale();
  261.         $user $this->getUser();
  262.         $dataC = array();
  263.         $incidencias = array();
  264.         $katy false;
  265.         $ticketTipesToShow = array();
  266.         if ($userRepository->hasSupportRole($user) || $userRepository->hasRole($user"ROLE_SUPPORT_TECHNICAL")) {
  267.             $ticketTipesToShow[] = 1;
  268.         }
  269.         if ($userRepository->hasAdminRole($user) || $userRepository->hasRole($user"ROLE_SUPPORT_ADMINISTRATIVE")) {
  270.             $ticketTipesToShow[] = 2;
  271.         }
  272.         $katySupportUser $entityManager->createQuery('SELECT distinct u'
  273.             ' FROM App\Entity\User u'
  274.             ' WHERE u.id = :user'
  275.             ' AND u.roles like :role_one')
  276.             ->setParameter('user'$user)
  277.             ->setParameter('role_one''%ROLE_SUPPORT_KATY%')
  278.             ->getOneOrNullResult();
  279.         $katySupportManagementUser $entityManager->createQuery('SELECT distinct u'
  280.             ' FROM App\Entity\User u'
  281.             ' WHERE u.id = :user'
  282.             ' AND u.roles like :role_one')
  283.             ->setParameter('user'$user)
  284.             ->setParameter('role_one''%ROLE_SUPPORT_MANAGEMENT_KATY%')
  285.             ->getOneOrNullResult();
  286.         $katySupportBIUser $entityManager->createQuery('SELECT distinct u'
  287.             ' FROM App\Entity\User u'
  288.             ' WHERE u.id = :user'
  289.             ' AND u.roles like :role_one')
  290.             ->setParameter('user'$user)
  291.             ->setParameter('role_one''%ROLE_BI_MANAGER%')
  292.             ->getOneOrNullResult();
  293.         $katySupportAdminUser $entityManager->createQuery('SELECT distinct u'
  294.             ' FROM App\Entity\User u'
  295.             ' WHERE u.id = :user'
  296.             ' AND u.roles like :role_one')
  297.             ->setParameter('user'$user)
  298.             ->setParameter('role_one''%ROLE_SUPPORT_ADMIN_KATY%')
  299.             ->getOneOrNullResult();
  300.         //search the katy support type roles to show
  301.         $ticketKatyTypesToShow = array();
  302.         if ($katySupportUser) {
  303.             $ticketKatyTypesToShow[] = 4;
  304.         }
  305.         if ($katySupportBIUser) {
  306.             $ticketKatyTypesToShow[] = 5;
  307.         }
  308.         if ($katySupportManagementUser) {
  309.             $ticketKatyTypesToShow[] = 6;
  310.         }
  311.         //incidencias de canal                
  312.         if ($user->getVendor() && $user->getVendor()->getisMiniVendor()) {
  313.             $supportcaseQ $supportcaseRepository->MySupportCaseQuery($user);
  314.             $supportcaseQ->andWhere('s.createdby != :user');
  315.             $supportcaseQ->setParameter('user'$user);
  316.             $supportcaseQ->andwhere('s.tipoticket in (:tipo)');
  317.             $supportcaseQ->setParameter('tipo'$ticketTipesToShow);
  318.         } elseif ($katySupportUser || $katySupportManagementUser || $katySupportBIUser) {
  319.             //show platform technical tickets and/or platform management tickets and/or bi tickets
  320.             $supportcaseQ $supportcaseRepository->MySupportCaseQuery($user);
  321.             $supportcaseQ->andwhere('s.tipoticket in (:tipo)');
  322.             $supportcaseQ->andWhere('s.createdby != :user');
  323.             $supportcaseQ->innerJoin('\App\Entity\Ticket''t''WITH''t.supportcase = s.id');
  324.             $supportcaseQ->andWhere('t.status != :closed OR t.creationdate >= :limitDate');
  325.             $supportcaseQ->setParameter('closed''closed');
  326.             $supportcaseQ->setParameter('limitDate', (new \DateTime())->modify('-3 months'));
  327.             $supportcaseQ->setParameter('tipo'$ticketKatyTypesToShow);
  328.             $supportcaseQ->setParameter('user'$user);
  329.         } else {
  330.             $supportcaseQ $supportcaseRepository->MySupportCaseQuery($user);
  331.             $supportcaseQ->andWhere('s.createdby != :user');
  332.             $supportcaseQ->setParameter('user'$user);
  333.             $supportcaseQ->andWhere('s.tipoticket in (:tipo)');
  334.             $supportcaseQ->setParameter('tipo'$ticketTipesToShow);
  335.             $supportcaseQ->innerJoin('\App\Entity\Ticket''t''WITH''t.supportcase = s.id');
  336.             $supportcaseQ->andWhere('t.level = :level');
  337.             $supportcaseQ->setParameter('level'$userRepository->getUserLevel($request$user) + 1);
  338.             $supportcaseQ->andWhere('t.status != :closed OR t.creationdate >= :limitDate');
  339.             $supportcaseQ->setParameter('closed''closed');
  340.             $supportcaseQ->setParameter('limitDate', (new \DateTime())->modify('-3 months'));
  341.             $supportcaseQ->orderBy('s.creationdate''DESC');
  342.         }
  343.         $incidencias $supportcaseQ->getQuery()->execute();
  344.         if ($katySupportAdminUser) {
  345.             //show administrative vendor tickets
  346.             $supportcaseQ $supportcaseRepository->MySupportCaseQuery($user);
  347.             $supportcaseQ->innerJoin('\App\Entity\Ticket''t''WITH'' t.supportcase = s.id');
  348.             $supportcaseQ->andwhere('s.tipoticket = :tipo');
  349.             $supportcaseQ->andwhere('t.level = 1');
  350.             $supportcaseQ->setParameter('tipo'2);
  351.             $incidencias2 $supportcaseQ->getQuery()->execute();
  352.             $incidencias array_merge($incidencias$incidencias2);
  353.         }
  354.         if (($userRepository->hasCommercialRole($user) || $user->getMaster() || $userRepository->hasRole($user"ROLE_SUPPORT_COMMERCIAL")) && !$katySupportUser
  355.             && !$katySupportManagementUser && !$katySupportAdminUser && !$katySupportBIUser
  356.         ) {
  357.             $ticketTipesToShow[] = 3;
  358.             if ($user->getMaster()) {
  359.                 $supportcaseQ->setParameter('tipo''3');
  360.             } elseif ($user->getPartner()) {
  361.                 $supportcaseQ->andWhere('c.idcommercialagent = :user2');
  362.                 $supportcaseQ->setParameter('user2'$user);
  363.                 $supportcaseQ->setParameter('tipo''3');
  364.             } elseif ($user->getWholesaler()) {
  365.                 $supportcaseQ->andWhere('pu.idcommercialagent = :user2');
  366.                 $supportcaseQ->setParameter('user2'$user->getId());
  367.                 $supportcaseQ->setParameter('tipo''3');
  368.             }
  369.             $incidencias2 $supportcaseQ->getQuery()->execute();
  370.             $incidencias array_merge($incidencias$incidencias2);
  371.         }
  372.         foreach ($incidencias as $incidencia) {
  373.             if ($user->getVendor() && $user->getVendor()->getisMiniVendor()) {
  374.                 $ticketToMe $entityManager->createQuery('SELECT t'
  375.                     ' FROM App\Entity\Ticket t'
  376.                     ' WHERE t.supportcase = :supportcase')
  377.                     ->setParameter('supportcase'$incidencia)
  378.                     ->getOneOrNullResult();
  379.                 $myTicket $entityManager->createQuery('SELECT t'
  380.                     ' FROM App\Entity\Ticket t'
  381.                     ' WHERE t.supportcase = :supportcase')
  382.                     ->setParameter('supportcase'$incidencia)
  383.                     ->getOneOrNullResult();
  384.             } else {
  385.                 if ($katySupportUser || $katySupportManagementUser || $katySupportAdminUser || $katySupportBIUser) { //if user katy
  386.                     $ticketToMe $entityManager->createQuery('SELECT t'
  387.                         ' FROM App\Entity\Ticket t'
  388.                         ' WHERE t.supportcase = :supportcase')
  389.                         ->setParameter('supportcase'$incidencia)
  390.                         ->getOneOrNullResult();
  391.                 } else {
  392.                     $ticketToMe $entityManager->createQuery('SELECT t'
  393.                         ' FROM App\Entity\Ticket t'
  394.                         ' WHERE t.supportcase = :supportcase'
  395.                         ' AND t.level = :level')
  396.                         ->setParameter('supportcase'$incidencia)
  397.                         ->setParameter('level'$userRepository->getUserLevel($request$user) + 1)
  398.                         ->getOneOrNullResult();
  399.                 }
  400.                 $myTicket $entityManager->createQuery('SELECT t'
  401.                     ' FROM App\Entity\Ticket t'
  402.                     ' WHERE t.supportcase = :supportcase'
  403.                     ' AND t.level = :level')
  404.                     ->setParameter('supportcase'$incidencia)
  405.                     ->setParameter('level'$userRepository->getUserLevel($request$user))
  406.                     ->getOneOrNullResult();
  407.             }
  408.             $companyName 'KATY';
  409.             $level 0;
  410.             if ($incidencia->getCreatedby()->getCustomer()) {
  411.                 $customerName $userRepository->getCompanyName($incidencia->getCreatedby());
  412.                 $companyName $customerName;
  413.                 $level 4;
  414.                 $partnerName $incidencia->getCreatedby()->getCustomer()->getPartner()->getName();
  415.             } else {
  416.                 $customerName null;
  417.             }
  418.             if ($incidencia->getCreatedby()->getPartner()) {
  419.                 $partnerName $userRepository->getCompanyName($incidencia->getCreatedby());
  420.                 $companyName $partnerName;
  421.                 $level 3;
  422.                 if ($incidencia->getTipoTicket()->getId() === 1) {
  423.                     $TicketTecnico =  $entityManager->getRepository(\App\Entity\Tickettecnico::class)->find($incidencia);
  424.                     if ($TicketTecnico) {
  425.                         $customerName $TicketTecnico->getCustomer() ? $TicketTecnico->getCustomer()->getCompany() : '';
  426.                     }
  427.                 }
  428.             } else {
  429.                 $partnerName null;
  430.             }
  431.             if ($incidencia->getCreatedby()->getWholesaler()) {
  432.                 $companyName $incidencia->getCreatedby()->getWholesaler()->getName();
  433.                 $level 2;
  434.             }
  435.             if ($incidencia->getCreatedby()->getVendor()) {
  436.                 $companyName $incidencia->getCreatedby()->getVendor()->getName();
  437.                 $level 1;
  438.             }
  439.             $ticketRepository $entityManager->getRepository(\App\Entity\Ticket::class);
  440.             $supportcaseRepository $entityManager->getRepository(\App\Entity\Supportcase::class);
  441.             $supportCaseId $supportcaseRepository->getSupportCaseId10Digits($incidencia);
  442.             if (!$user->getVendor() && !$user->getWholesaler() && !$user->getPartner() && !$user->getCustomer()) {
  443.                 $katy true;
  444.             }
  445.             if (!$user->getVendor() && !$supportcaseRepository->isToMinivendor($incidencia)) {
  446.                 $dataC[] = array(
  447.                     'id' => $incidencia->getId(),
  448.                     'number' => $ticketToMe $ticketToMe->getSupportCase()->getId() : 'N/A',
  449.                     'tipo' => $translation->getTranslationBy($incidencia->getTipoticket(), $locale'nombretipo'),
  450.                     'creationDate' => $ticketToMe $ticketToMe->getCreationdate() : $incidencia->getCreationdate(),
  451.                     'orderDate' => $ticketToMe $ticketToMe->getCreationdate()->format('Ymdhms') : $incidencia->getCreationdate()->format('Ymdhms'),
  452.                     'status' => $ticketToMe $ticketToMe->getStatus() : '',
  453.                     'subject' => $incidencia->getSubject(),
  454.                     'userlevel' => $userRepository->getUserLevel($request$user),
  455.                     'companyName' => $companyName,
  456.                     'level' => $level,
  457.                     'Partnername' => $partnerName,
  458.                     'supportCaseId' => $supportCaseId,
  459.                     'ClientName' => $customerName,
  460.                     'myTicket' => $myTicket $ticketRepository->getStatusTicket($user$myTicket) : '-',
  461.                     'ticketToMe' => $ticketToMe $ticketRepository->getStatusTicket($user$ticketToMe) : '-',
  462.                 );
  463.             } else {
  464.                 if ($user->getVendor()) {
  465.                     $dataC[] = array(
  466.                         'id' => $incidencia->getId(),
  467.                         'number' => $ticketToMe $ticketToMe->getSupportCase()->getId() : 'N/A',
  468.                         'tipo' => $translation->getTranslationBy($incidencia->getTipoticket(), $locale'nombretipo'),
  469.                         'creationDate' => $incidencia->getCreationdate(),
  470.                         'orderDate' => $incidencia->getCreationdate()->format('Ymdhms'),
  471.                         'status' => $ticketToMe $ticketToMe->getStatus() : '',
  472.                         'subject' => $incidencia->getSubject(),
  473.                         'userlevel' => $userRepository->getUserLevel($request$user),
  474.                         'Partnername' => $partnerName,
  475.                         'supportCaseId' => $supportCaseId,
  476.                         'ClientName' => $customerName,
  477.                         'myTicket' => $myTicket $ticketRepository->getStatusTicket($user$myTicket) : '-',
  478.                         'ticketToMe' => $ticketToMe $ticketRepository->getStatusTicket($user$ticketToMe) : '-',
  479.                     );
  480.                 }
  481.             }
  482.         }
  483.         return $this->render('ticket/indexclient.html.twig', [
  484.             'dataC' => $dataC,
  485.             'isKatyUser' => $katy,
  486.             //'estadosticket' => json_encode($this->SupportTicketByStatus($reportingColors, $user)),
  487.         ]);
  488.     }
  489.     /**
  490.      * @Route("/ticket/default/new/{product}", defaults={"product"=null}, name="ticket_new")
  491.      */
  492.     public function new($productTrafficTracker $trafficTrackerTranslatorInterface $translatorServiceNotification $serviceNotificationProductlineJsonTree $jsonTreeServiceTranslation $translationRequest $request): Response
  493.     {
  494.         $trafficTracker->registerTraffic();
  495.         $entityManager $this->getDoctrine()->getManager();
  496.         $locale $request->getLocale();
  497.         $user $this->getUser();
  498.         $licenses = array();
  499.         $session $this->get('session');
  500.         $jsonData $jsonTreeService->getJsonTree(null$locale$usertruetrue);
  501.         $ticket = new Ticket();
  502.         // Create form
  503.         if ($user->getCustomer()) {
  504.             $licenses $entityManager->createQuery('SELECT l'
  505.                 ' FROM App\Entity\License l'
  506.                 ' WHERE l.customer = :customer')
  507.                 ->setParameter('customer'$user->getCustomer())
  508.                 ->getResult();
  509.         }
  510.         $form $this->createForm(TicketEditType::class, $ticket, array(
  511.             'licenses' => $licenses,
  512.             'user' => $user,
  513.             'locale' => $locale,
  514.             'translator' => $translator,
  515.             'entityManager' => $entityManager,
  516.             'translation' => $translation,
  517.             'product' => $product
  518.         ));
  519.         // If submitted
  520.         $form->handleRequest($request);
  521.         // If cancelled
  522.         if ($form->getClickedButton() && 'cancel' === $form->getClickedButton()->getName()) {
  523.             $session->getFlashBag()->add('warning'$translator->trans('app.General.SystemMessages.NotCreated'));
  524.             return $this->redirectToRoute('ticket_index');
  525.         }
  526.         if ($form->isSubmitted()) {
  527.             if ($form->isValid()) {
  528.                 $tipoTicket =  $this->getDoctrine()->getRepository(Tipoticket::class)->find($_POST['ticket_edit']['tipoincidencia']);
  529.                 if ($tipoTicket->getId() == && $user->getWholesaler()) {
  530.                     if (!isset($_POST['ticket_edit']['idproductline']) || $_POST['ticket_edit']['idproductline'] == '') {
  531.                         $session->getFlashBag()->add('danger'$translator->trans('app.Support.System.VendorNotSelected'));
  532.                         return $this->redirectToRoute('ticket_new');
  533.                     }
  534.                 }
  535.                 $this->createNewSupportCase($request$_POST['ticket_edit'], $translator$serviceNotification$form);
  536.                 // Redirect and show result
  537.                 $session->getFlashBag()->add('success'$translator->trans('app.General.SystemMessages.Created'));
  538.                 return $this->redirectToRoute('ticket_index');
  539.             } else {
  540.                 //If form is not valid return flahsbag with errors
  541.                 $string $this->getErrorMessages($form);
  542.                 foreach ($string as $clave => $valor) {
  543.                     $session->getFlashBag()->add('danger'$valor[0]);
  544.                 }
  545.                 return $this->redirectToRoute('ticket_index');
  546.             }
  547.         }
  548.         return $this->render('ticket/new.html.twig', [
  549.             'form' => $form->createView(),
  550.             'treedata' => $jsonData,
  551.             'product' => $product
  552.         ]);
  553.     }
  554.     /**
  555.      * @Route("/ticket/default/reply/{id}", name="ticket_reply", requirements={"id"="\d+"})
  556.      */
  557.     public function reply(TrafficTracker $trafficTrackerTranslatorInterface $translatorServiceNotification $serviceNotificationTranslation $translationRequest $request$id 0)
  558.     {
  559.         $trafficTracker->registerTraffic();
  560.         $session $this->get('session');
  561.         $entityManager $this->getDoctrine()->getManager();
  562.         $locale $request->getLocale();
  563.         $user $this->getUser();
  564.         $userRepository $entityManager->getRepository(\App\Entity\User::class);
  565.         $selfUserLevel $userRepository->getUserLevel($request$user);
  566.         // Find ticket               
  567.         $supportCaseRepository $entityManager->getRepository(\App\Entity\Supportcase::class);
  568.         $case $supportCaseRepository->find($id);
  569.         $companiesData = ['partner' => 'N/A''customer' => 'N/A'];
  570.         $ticketRepository $entityManager->getRepository(\App\Entity\Ticket::class);
  571.         $ticketQ $ticketRepository->MyTicketQuery($user);
  572.         $ticketQ->andWhere('t.supportcase = :supportCase');
  573.         $ticketQ->setParameter('supportCase'$id);
  574.         $ticketQ->andwhere('t.level = :level');
  575.         $ticketQ->setParameter('level'$selfUserLevel);
  576.         $ticketR $ticketQ->getQuery()->execute();
  577.         $myTicket $ticketR[0];
  578.         if (!$myTicket) {
  579.             throw new AccessDeniedHttpException();
  580.         }
  581.         if (!$case) {
  582.             $session->getFlashBag()->add('danger'$translator->trans('app.General.SystemMessages.TicketNotFound'));
  583.             return $this->redirectToRoute('ticket_index');
  584.         }
  585.         $userlist = array();
  586.         // notificar user mayorista
  587.         if ($user->getWholesaler()) {
  588.             $userlist $entityManager->createQuery('SELECT u'
  589.                 ' FROM App\Entity\User u'
  590.                 ' WHERE u.wholesaler = :wholesaler'
  591.                 ' AND u.id != :id')
  592.                 ->setParameter('wholesaler'$user->getWholesaler())
  593.                 ->setParameter('id'$user->getId())
  594.                 ->getResult();
  595.         }
  596.         if ($user->getPartner()) {
  597.             $userlist $entityManager->createQuery('SELECT u'
  598.                 ' FROM App\Entity\User u'
  599.                 ' WHERE u.partner = :partner'
  600.                 ' AND u.id != :id')
  601.                 ->setParameter('partner'$user->getPartner())
  602.                 ->setParameter('id'$user->getId())
  603.                 ->getResult();
  604.         }
  605.         if ($user->getCustomer()) {
  606.             $userlist $entityManager->createQuery('SELECT u'
  607.                 ' FROM App\Entity\User u'
  608.                 ' WHERE u.customer = :customer'
  609.                 ' AND u.id != :id')
  610.                 ->setParameter('customer'$user->getCustomer())
  611.                 ->setParameter('id'$user->getId())
  612.                 ->getResult();
  613.         }
  614.         $ticketTecnico $entityManager->createQuery('SELECT tt'
  615.             ' FROM App\Entity\Tickettecnico tt'
  616.             ' WHERE tt.supportcase = :supportcase')
  617.             ->setParameter('supportcase'$id)
  618.             ->getOneOrNullResult();
  619.         $producto $entityManager->createQuery('SELECT p'
  620.             ' FROM App\Entity\Product p'
  621.             ' JOIN App\Entity\License l'
  622.             ' JOIN App\Entity\Tickettecnico tt'
  623.             ' WITH p.id = l.product'
  624.             ' AND l.id = tt.license'
  625.             ' WHERE tt.supportcase = :supportcase')
  626.             ->setParameter('supportcase'$id)
  627.             ->getOneOrNullResult();
  628.         $ticketmessage2 = new \App\Entity\Ticketmessage();
  629.         $form2 $this->get('form.factory')->createNamed('formLeft'MessageSupport::class, $ticketmessage2, array(
  630.             //'level' => $selfUserLevel,
  631.             'user' => $user,
  632.             //'myTicket' => $myTicket,
  633.             'listuser' => $userlist,
  634.             'translator' => $translator,
  635.             'em' => $entityManager,
  636.         ));
  637.         $ticketmessage = new \App\Entity\Ticketmessage();
  638.         $form $this->get('form.factory')->createNamed('formRight'MessageSupport::class, $ticketmessage, array(
  639.             //'level' => $selfUserLevel,
  640.             'user' => $user,
  641.             'listuser' => $userlist,
  642.             //'myTicket' => $myTicket,
  643.             'translator' => $translator,
  644.             'em' => $entityManager,
  645.         ));
  646.         //Si se ha hecho submit en el formulario de la izquierda
  647.         if ($request->request->has('formLeft')) {
  648.             $form2->handleRequest($request);
  649.             if ($form2->isValid()) {
  650.                 $this->createTicketMessage($translator$serviceNotification$request$form2$myTicket$case);
  651.                 // Redirect and show result
  652.                 return $this->redirectToRoute('ticket_reply', array('id' => $id));
  653.             }
  654.         }
  655.         //Si se ha hecho submit en el formulario de la derecha
  656.         if ($request->request->has('formRight')) {
  657.             $form->handleRequest($this->getRequest());
  658.             if ($form->isValid()) {
  659.                 $this->createTicketMessage($translator$serviceNotification$request$form$ticketRight$case);
  660.                 // Redirect and show result
  661.                 return $this->redirectToRoute('ticket_reply', array('id' => $id));
  662.             }
  663.         }
  664.         if ($case->getCreatedBy()->getPartner()) {
  665.             $companiesData['partner'] = $case->getCreatedBy()->getPartner()->getName();
  666.             $companiesData['customer'] = 'N/A';
  667.         }
  668.         if ($case->getCreatedBy()->getCustomer()) {
  669.             $companiesData['partner'] = $case->getCreatedBy()->getCustomer()->getPartner()->getName();
  670.             $companiesData['customer'] = $case->getCreatedBy()->getCustomer()->getCompany();
  671.         }
  672.         if ($ticketTecnico) {
  673.             if ($ticketTecnico->getCustomer()) {
  674.                 $companiesData['partner'] = $ticketTecnico->getCustomer()->getPartner()->getName();
  675.                 $companiesData['customer'] = $ticketTecnico->getCustomer()->getCompany();
  676.             }
  677.         }
  678.         if ($ticketTecnico && $selfUserLevel == 2) {
  679.             $vendorData $userRepository->getVendorByProduct($ticketTecnico$user);
  680.             if ($vendorData) {
  681.                 $vendorName $vendorData->getName();
  682.             } else {
  683.                 $vendorName '';
  684.             }
  685.         } else {
  686.             $vendorName '';
  687.         }
  688.         if (
  689.             $case->getTipoTicket()->getId() == || $user->getVendor()
  690.             || $case->getTipoTicket()->getId() == || $case->getTipoTicket()->getId() == 6
  691.         ) {
  692.             //platform tickets and administrative vendor tickets and bi tickets to katy user
  693.             $profileUp 'KATY';
  694.         } else {
  695.             $profileUp $selfUserLevel == $vendorName $userRepository->getLevelUpCompany($user)->getName();
  696.         }
  697.         return $this->render('ticket/reply.html.twig', [
  698.             'ticket' => $myTicket,
  699.             'case' => $case,
  700.             'caseId' => $supportCaseRepository->getSupportCaseId10Digits($case),
  701.             'tecnico' => $ticketTecnico $ticketTecnico null,
  702.             'producto' => $producto $producto->getName() : null,
  703.             'files' => $this->getFiles($myTicket $myTicket->getId() : ''),
  704.             'messages' => $myTicket $ticketRepository->getTicketmessages($myTicket) : null,
  705.             'selfUserLevel' => $selfUserLevel,
  706.             'form' => $form->createView(),
  707.             'form2' => $form2->createView(),
  708.             'escalado' => false,
  709.             'escalable' => false,
  710.             'profileUp' => $profileUp,
  711.             'tipo' => $translation->getTranslationBy($case->getTipoTicket(), $locale'nombretipo'),
  712.             'isKatyUser' => false,
  713.             'companiesData' => $companiesData,
  714.         ]);
  715.     }
  716.     /**
  717.      * @Route("/ticket/default/replyclient/{id}", name="ticket_replyclient", requirements={"id"="\d+"})
  718.      */
  719.     public function replyclient(TrafficTracker $trafficTrackerTranslatorInterface $translatorServiceNotification $serviceNotificationTranslation $translationRequest $request$id 0)
  720.     {
  721.         $trafficTracker->registerTraffic();
  722.         $entityManager $this->getDoctrine()->getManager();
  723.         $locale $request->getLocale();
  724.         $user $this->getUser();
  725.         $userRepository $entityManager->getRepository(\App\Entity\User::class);
  726.         $ticketRepository $this->getDoctrine()->getRepository(Ticket::class);
  727.         $supportcaseRepository $entityManager->getRepository(\App\Entity\Supportcase::class);
  728.         $selfUserLevel $userRepository->getUserLevel($request$user);
  729.         $tecnico null;
  730.         $session $this->get('session');
  731.         $katy false;
  732.         $companiesData = ['partner' => 'N/A''customer' => 'N/A'];
  733.         $case $supportcaseRepository->find($id);
  734.         $ticketQ $ticketRepository->MyTicketClientQuery($user);
  735.         $ticketQ->andWhere('t.supportcase = :supportcase');
  736.         $ticketQ->setParameter('supportcase'$id);
  737.         $ticketQ->andwhere('t.level = :level');
  738.         $ticketQ->setParameter('level'$selfUserLevel);
  739.         $ticketR $ticketQ->getQuery()->execute();
  740.         $myTicket $ticketR $ticketR[0] : null;
  741.         $ticketQ2 $ticketRepository->MyTicketClientQuery($user);
  742.         $ticketQ2->andWhere('t.supportcase = :supportcase');
  743.         $ticketQ2->setParameter('supportcase'$id);
  744.         $ticketQ2->andwhere('t.level = :level');
  745.         $ticketQ2->setParameter('level'$selfUserLevel  1);
  746.         $ticketR2 $ticketQ2->getQuery()->execute();
  747.         $ticketToMe $ticketR2 $ticketR2[0] : null;
  748.         if ($user->getVendor() && $user->getVendor()->getisMiniVendor()) {
  749.             $ticketQ3 $ticketRepository->MyTicketClientQuery($user);
  750.             $ticketQ3->andWhere('t.supportcase = :supportcase');
  751.             $ticketQ3->setParameter('supportcase'$id);
  752.             $ticketR3 $ticketQ3->getQuery()->execute();
  753.             $ticketToMe $ticketR3[0];
  754.         }
  755.         if ($ticketToMe && $ticketToMe->getSupportcase()->getTipoTicket()->getId() == 3) {
  756.             if ($user->getMaster()) {
  757.             } elseif ($ticketToMe->getUser()->getPartner()) {
  758.                 if ($ticketToMe->getUser()->getPartner()->getIdcommercialagent() != $user->getId()) {
  759.                     $session->getFlashBag()->add('danger'$translator->trans('app.General.SystemMessages.TicketNotFound'));
  760.                     return $this->redirectToRoute('ticket_index');
  761.                 }
  762.             } elseif ($ticketToMe->getUser()->getCustomer()) {
  763.                 if ($ticketToMe->getUser()->getCustomer()->getIdcommercialagent() != $user->getId()) {
  764.                     $session->getFlashBag()->add('danger'$translator->trans('app.General.SystemMessages.TicketNotFound'));
  765.                     return $this->redirectToRoute('ticket_index');
  766.                 }
  767.             }
  768.         }
  769.         if (!$case) {
  770.             $session->getFlashBag()->add('danger'$translator->trans('app.General.SystemMessages.TicketNotFound'));
  771.             return $this->redirectToRoute('ticket_index');
  772.         }
  773.         if (
  774.             $case->getTipoTicket()->getId() == || $case->getTipoTicket()->getId() == 5
  775.             || $case->getTipoTicket()->getId() == 6
  776.         ) { //platform ticket or bi ticket
  777.             $ticketQ3 $ticketRepository->MyTicketClientQuery($user);
  778.             $ticketQ3->andWhere('t.supportcase = :supportcase');
  779.             $ticketQ3->setParameter('supportcase'$id);
  780.             $ticketR3 $ticketQ3->getQuery()->execute();
  781.             $ticketToMe $ticketR3[0];
  782.             $myTicket null;
  783.         }
  784.         if ($user->getVendor()) {
  785.             if (!$ticketToMe)
  786.                 throw new AccessDeniedHttpException();
  787.         } else {
  788.             if (!$myTicket && !$ticketToMe)
  789.                 throw new AccessDeniedHttpException();
  790.         }
  791.         $userlist = array();
  792.         //TO DO
  793.         // notificar user mayorista
  794.         if ($user->getWholesaler()) {
  795.             $userlist $entityManager->createQuery('SELECT u'
  796.                 ' FROM App\Entity\User u'
  797.                 ' WHERE u.wholesaler = :wholesaler'
  798.                 ' AND u.id != :id')
  799.                 ->setParameter('wholesaler'$user->getWholesaler())
  800.                 ->setParameter('id'$user->getId())
  801.                 ->getResult();
  802.         }
  803.         if ($user->getPartner()) {
  804.             $userlist $entityManager->createQuery('SELECT u'
  805.                 ' FROM App\Entity\User u'
  806.                 ' WHERE u.partner = :partner'
  807.                 ' AND u.id != :id')
  808.                 ->setParameter('partner'$user->getPartner())
  809.                 ->setParameter('id'$user->getId())
  810.                 ->getResult();
  811.         }
  812.         if ($user->getCustomer()) {
  813.             $userlist $entityManager->createQuery('SELECT u'
  814.                 ' FROM App\Entity\User u'
  815.                 ' WHERE u.customer = :customer'
  816.                 ' AND u.id != :id')
  817.                 ->setParameter('customer'$user->getCustomer())
  818.                 ->setParameter('id'$user->getId())
  819.                 ->getResult();
  820.         }
  821.         $ticketTecnico $entityManager->createQuery('SELECT tt'
  822.             ' FROM App\Entity\Tickettecnico tt'
  823.             ' WHERE tt.supportcase = :supportcase')
  824.             ->setParameter('supportcase'$id)
  825.             ->setMaxResults(1)
  826.             ->getOneOrNullResult();
  827.         $producto $entityManager->createQuery('SELECT p'
  828.             ' FROM App\Entity\Product p'
  829.             ' JOIN App\Entity\License l'
  830.             ' JOIN App\Entity\Tickettecnico tt'
  831.             ' WITH p.id = l.product'
  832.             ' AND l.id = tt.license'
  833.             ' WHERE tt.supportcase = :supportcase')
  834.             ->setParameter('supportcase'$id)
  835.             ->setMaxResults(1)
  836.             ->getOneOrNullResult();
  837.         $ticketmessage = new \App\Entity\Ticketmessage();
  838.         $form $this->get('form.factory')->createNamed('formRight'MessageSupport::class, $ticketmessage, array(
  839.             //'level' => $selfUserLevel,
  840.             'user' => $user,
  841.             //'statusticket' => $ticketToMe->getStatus(),
  842.             'listuser' => $userlist,
  843.             //'myTicket' => $myTicket ? $myTicket : null,
  844.             //'ticketToMe' => $ticketToMe,
  845.             'translator' => $translator,
  846.             'em' => $entityManager,
  847.         ));
  848.         $ticketmessage2 = new \App\Entity\Ticketmessage();
  849.         $form2 $this->get('form.factory')->createNamed('formLeft'MessageSupport::class, $ticketmessage2, array(
  850.             //'level' => $selfUserLevel,
  851.             'user' => $user,
  852.             'listuser' => $userlist,
  853.             //'myTicket' => $myTicket ? $myTicket : null,
  854.             'translator' => $translator,
  855.             'em' => $entityManager,
  856.         ));
  857.         // If submitted
  858.         if ($request->request->has('formLeft')) {
  859.             $form2->handleRequest($request);
  860.             if ($form2->isValid()) {
  861.                 $this->createTicketMessage($translator$serviceNotification$request$form2$ticketToMe$case);
  862.                 // Redirect and show result
  863.                 return $this->redirectToRoute('ticket_replyclient', array('id' => $id));
  864.             }
  865.         }
  866.         // If submitted
  867.         if ($request->request->has('formRight')) {
  868.             $form->handleRequest($request);
  869.             if ($form->isValid()) {
  870.                 $this->createTicketMessage($translator$serviceNotification$request$form$myTicket$case);
  871.                 // Redirect and show result
  872.                 return $this->redirectToRoute('ticket_replyclient', array('id' => $id));
  873.             }
  874.         }
  875.         if ($ticketToMe) {
  876.             $ticketTecnico $entityManager->createQuery('SELECT tt'
  877.                 ' FROM App\Entity\Tickettecnico tt'
  878.                 ' WHERE tt.supportcase = :supportcase')
  879.                 ->setParameter('supportcase'$ticketToMe->getSupportcase())
  880.                 ->getOneOrNullResult();
  881.         } else {
  882.             $ticketTecnico null;
  883.         }
  884.         $profileUp null;
  885.         //Poner nombre de la compañia / vendor en el titulo del ticket escalado.
  886.         if ($selfUserLevel == && $case->getTipoTicket()->getId() == 1) {
  887.             $vendor $userRepository->getVendorByProduct($ticketTecnico$user);
  888.             if (!is_null($vendor)) {
  889.                 $profileUp $vendor->getName();
  890.             }
  891.         } elseif (
  892.             $case->getTipoTicket()->getId() == || $case->getTipoTicket()->getId() == 2
  893.             || $case->getTipoTicket()->getId() == || $case->getTipoTicket()->getId() == 6
  894.         ) {
  895.             //platform tickets and administrative vendor tickets and bi tickets to katy user
  896.             $profileUp 'KATY';
  897.         } else {
  898.             $profileUp $userRepository->getLevelUpCompany($user)->getName();
  899.         }
  900.         if ($case->getCreatedBy()->getPartner()) {
  901.             $companiesData['partner'] = $case->getCreatedBy()->getPartner()->getName();
  902.             $companiesData['customer'] = 'N/A';
  903.         }
  904.         if ($case->getCreatedBy()->getCustomer()) {
  905.             $companiesData['partner'] = $case->getCreatedBy()->getCustomer()->getPartner()->getName();
  906.             $companiesData['customer'] = $case->getCreatedBy()->getCustomer()->getCompany();
  907.         }
  908.         //Return Ticket Commercial or Ticket Tecnico 
  909.         $ticketComercial $case->getTicketComercial();
  910.         if (!is_null($ticketTecnico) || !is_null($ticketComercial)) {
  911.             if (isset($ticketTecnico)) {
  912.                 $tecnico $ticketTecnico;
  913.                 if ($ticketTecnico->getCustomer()) {
  914.                     $companiesData['partner'] = $ticketTecnico->getCustomer()->getPartner()->getName();
  915.                     $companiesData['customer'] = $ticketTecnico->getCustomer()->getCompany();
  916.                 }
  917.             }
  918.             if (isset($ticketComercial)) {
  919.                 $tecnico $ticketComercial;
  920.             }
  921.         }
  922.         if (!$user->getVendor() && !$user->getWholesaler() && !$user->getPartner() && !$user->getCustomer()) {
  923.             $katy true;
  924.         }
  925.         return $this->render('ticket/reply.html.twig', [
  926.             'replyclient' => true,
  927.             'ticketToMe' => $ticketToMe,
  928.             'myTicket' => $myTicket,
  929.             'userRepository' => $userRepository,
  930.             'case' => $case,
  931.             'caseId' => $case $supportcaseRepository->getSupportCaseId10Digits($case) : '',
  932.             'tecnico' => $tecnico $tecnico null,
  933.             'producto' => $producto $producto->getName() : null,
  934.             'files' => $ticketToMe $this->getFiles($ticketToMe->getId()) : '',
  935.             'filesUp' => $myTicket $this->getFiles($myTicket->getId()) : '',
  936.             'messages' => $ticketToMe $ticketRepository->getTicketmessages($ticketToMe) : null,
  937.             'messagesScalated' => $myTicket $ticketRepository->getTicketmessages($myTicket) : null,
  938.             'selfUserLevel' => $selfUserLevel,
  939.             'form' => $form->createView(),
  940.             'form2' => $form2->createView(),
  941.             'level' => 1,
  942.             'profileUp' => $profileUp,
  943.             'profileDown' => $ticketToMe $userRepository->getCompanyName($ticketToMe->getUser()) : 'N/A',
  944.             'escalado' => $ticketToMe && $myTicket true false,
  945.             'tipo' => $translation->getTranslationBy($case->getTipoTicket(), $locale'nombretipo'),
  946.             'isKatyUser' => $katy,
  947.             'companiesData' => $companiesData,
  948.         ]);
  949.     }
  950.     /**
  951.      * @Route("/ticket/default/deletefile/{id}", name="ticket_deletefile")
  952.      */
  953.     public function deletefile(TranslatorInterface $translator$id)
  954.     {
  955.         $entityManager $this->getDoctrine()->getManager();
  956.         $path $this->getParameter('private_folder') . 'ticket/';
  957.         $file $entityManager->createQuery('SELECT tmf'
  958.             ' FROM App\Entity\Ticketmessagefile tmf'
  959.             ' WHERE tmf.id = :id')
  960.             ->setParameter('id'$id)
  961.             ->getOneOrNullResult();
  962.         $fileInTickets $entityManager->createQuery('SELECT count(t.id)'
  963.             ' FROM App\Entity\Ticket t'
  964.             ' JOIN App\Entity\Ticketmessage tm'
  965.             ' JOIN App\Entity\Ticketmessagefile tmf'
  966.             ' WITH t.id = tm.ticket'
  967.             ' AND tm.id = tmf.message'
  968.             ' WHERE tmf.deletedby is null'
  969.             ' AND tmf.filename = :filename')
  970.             ->setParameter('filename'$file->getFilename())
  971.             ->getOneOrNullResult();
  972.         $ticket $file->getMessage()->getTicket();
  973.         $ticketMessage = new \App\Entity\Ticketmessage();
  974.         $ticketMessage->setUser($this->getUser());
  975.         $ticketMessage->setTicket($ticket);
  976.         $ticketMessage->setDate(new \DateTime);
  977.         $ticketMessage->setMessage($translator->trans('app.Support.System.FileDeleted') . ' ' $file->getOriginalfilename());
  978.         $ticketMessage->setLocale($this->getUser()->getLocale());
  979.         $ticketMessage->setLevel(0);
  980.         $ticketMessage->setAutomatic(1);
  981.         $entityManager->persist($ticketMessage);
  982.         $entityManager->flush();
  983.         //$ticket->addTicketmessage($ticketMessage);
  984.         if ($fileInTickets == 1) {
  985.             $file->setDeletedBy($this->getUser());
  986.             $entityManager->persist($file);
  987.             $entityManager->flush();
  988.             unlink($path $file->getFilename());
  989.         } else {
  990.             $file->setDeletedBy($this->getUser());
  991.             $entityManager->persist($file);
  992.             $entityManager->flush();
  993.         }
  994.         return $this->redirect($_SERVER['HTTP_REFERER']);
  995.     }
  996.     /**
  997.      * @Route("/ticket/default/file/{name}", name="ticket_file", requirements={"name"="\S+"})
  998.      */
  999.     public function ticketFile($name)
  1000.     {
  1001.         $entityManager $this->getDoctrine()->getManager();
  1002.         $fichero $entityManager->createQuery('SELECT tmf'
  1003.             ' FROM App\Entity\Ticketmessagefile tmf'
  1004.             ' WHERE tmf.filename like :filename')
  1005.             ->setParameter('filename'$name '%')
  1006.             ->setMaxResults(1)
  1007.             ->getOneOrNullResult();
  1008.         $user $this->getUser();
  1009.         // Build internal full path
  1010.         $path $this->getParameter('private_folder') . 'ticket/';
  1011.         $file $path $fichero->getFilename();
  1012.         if ($fichero->getFilename() && file_exists($file)) {
  1013.             $content file_get_contents($file);
  1014.             $response = new Response();
  1015.             $response->headers->set('Content-Type'mime_content_type($file));
  1016.             $response->headers->set('Content-Disposition''attachment;filename="' $fichero->getOriginalfilename());
  1017.             $response->setContent($content);
  1018.             return $response;
  1019.         }
  1020.     }
  1021.     /**
  1022.      * @Route("/ticket/default/pasarfichero/{id}/{to}", name="ticket_pasarfichero")
  1023.      */
  1024.     public function pasarfichero(TranslatorInterface $translatorRequest $request$id$to)
  1025.     {
  1026.         $entityManager $this->getDoctrine()->getManager();
  1027.         $session $this->get('session');
  1028.         $isInArray false;
  1029.         $file $entityManager->createQuery('SELECT tmf'
  1030.             ' FROM App\Entity\Ticketmessagefile tmf'
  1031.             ' WHERE tmf.id = :id')
  1032.             ->setParameter('id'$id)
  1033.             ->getOneOrNullResult();
  1034.         $ticket $file->getMessage()->getTicket();
  1035.         $user $this->getUser();
  1036.         if ($to == 'up') {
  1037.             $level $ticket->getLevel() - 1;
  1038.         } else {
  1039.             $level $ticket->getLevel() + 1;
  1040.         }
  1041.         $ticketReceptor $entityManager->createQuery('SELECT t'
  1042.             ' FROM App\Entity\Ticket t'
  1043.             ' WHERE t.supportcase = :supportcase'
  1044.             ' AND t.level = :level')
  1045.             ->setParameter('supportcase'$ticket->getSupportCase())
  1046.             ->setParameter('level'$level)
  1047.             ->setMaxResults(1)
  1048.             ->getOneOrNullResult();
  1049.         if ($ticketReceptor) {
  1050.             $ficherosTicketReceptor $entityManager->createQuery('SELECT tmf'
  1051.                 ' FROM App\Entity\Ticketmessagefile tmf'
  1052.                 ' JOIN tmf.message tm'
  1053.                 ' JOIN tm.ticket t'
  1054.                 ' WHERE t.supportcase = :supportcase'
  1055.                 ' AND t.id = :id'
  1056.                 ' AND tmf.deletedby is null')
  1057.                 ->setParameter('supportcase'$ticketReceptor->getSupportcase())
  1058.                 ->setParameter('id'$ticketReceptor->getId())
  1059.                 ->getResult();
  1060.             foreach ($ficherosTicketReceptor as $tmpfile) {
  1061.                 if ($tmpfile->getFilename() == $file->getFilename())
  1062.                     $isInArray true;
  1063.             }
  1064.             if ($isInArray || $ticketReceptor->getStatus() == 'CLOSED') {
  1065.                 if ($isInArray)
  1066.                     $session->getFlashBag()->add('danger'$translator->trans('app.Support.System.ExistingFile'));
  1067.                 else
  1068.                     $session->getFlashBag()->add('danger'$translator->trans('app.Support.System.TicketClosed'));
  1069.             } else {
  1070.                 $message = new \App\Entity\Ticketmessage();
  1071.                 $message->setUser($user);
  1072.                 $message->setMessage($translator->trans('app.Support.System.FileMoved') . ' ' $file->getOriginalfilename());
  1073.                 $message->setLocale($request->getLocale());
  1074.                 $message->setAutomatic(1);
  1075.                 $message->setDate(new \DateTime);
  1076.                 $message->setStatus('PENDING');
  1077.                 $message->setTicket($ticketReceptor);
  1078.                 $entityManager->persist($message);
  1079.                 $entityManager->flush();
  1080.                 $newFile = new \App\Entity\Ticketmessagefile();
  1081.                 $newFile->setFilename($file->getFilename());
  1082.                 $newFile->setOriginalfilename($file->getOriginalfilename());
  1083.                 $newFile->setFilename($file->getFilename());
  1084.                 $newFile->setMessage($message);
  1085.                 $entityManager->persist($newFile);
  1086.                 $entityManager->flush();
  1087.             }
  1088.         } else {
  1089.             $userRepository $entityManager->getRepository(\App\Entity\User::class);
  1090.             $selfUserLevel $userRepository->getUserLevel($request$user);
  1091.             $newTicket = new Ticket();
  1092.             $newTicket->setSupportcase($ticket->getSupportcase());
  1093.             $newTicket->setUser($user);
  1094.             $newTicket->setLevel($selfUserLevel);
  1095.             $newTicket->setCreationdate(new \DateTime);
  1096.             $newTicket->setLastmodification(new \DateTime);
  1097.             $entityManager->persist($newTicket);
  1098.             $entityManager->flush();
  1099.             $ticketMessage = new \App\Entity\Ticketmessage();
  1100.             $ticketMessage->setUser($user);
  1101.             $ticketMessage->setMessage($translator->trans('app.Support.MoveFile') . ' ' $file->getOriginalfilename());
  1102.             $ticketMessage->setLocale($request->getLocale());
  1103.             $ticketMessage->setAutomatic(1);
  1104.             $ticketMessage->setDate(new \DateTime);
  1105.             $ticketMessage->setStatus('PENDING');
  1106.             $entityManager->persist($ticketMessage);
  1107.             $entityManager->flush();
  1108.             $nwFile = new \App\Entity\Ticketmessagefile();
  1109.             $nwFile->setFilename($file->getFilename());
  1110.             $nwFile->setOriginalfilename($file->getOriginalfilename());
  1111.             $nwFile->setFilename($file->getFilename());
  1112.             $nwFile->setMessage($ticketMessage);
  1113.             $entityManager->persist($nwFile);
  1114.             $entityManager->flush();
  1115.         }
  1116.         return $this->redirect($_SERVER['HTTP_REFERER']);
  1117.     }
  1118.     /**
  1119.      * @Route("/ticket/default/getlicensesbyclient", name="ticket_getlicensesbyclient")
  1120.      */
  1121.     public function getlicensesbyclient(TranslatorInterface $translatorRequest $request)
  1122.     {
  1123.         $user $this->getUser();
  1124.         $arrayLicencias = array();
  1125.         $id $request->get('id');
  1126.         $userRepository $this->getDoctrine()->getRepository(\App\Entity\User::class)->findOneBy(['customer' => $id]);
  1127.         if (is_null($userRepository)) {
  1128.             return new JsonResponse();
  1129.         }
  1130.         $licenseRepository $this->getDoctrine()->getRepository(\App\Entity\License::class);
  1131.         $licenseQ $licenseRepository->MyLicenseQuery($userRepository);
  1132.         $licencias $licenseQ->getQuery()->execute();
  1133.         $arrayLicencias['0'] = $translator->trans('app.General.Others');
  1134.         foreach ($licencias as $licencia) {
  1135.             $arrayLicencias[$licencia->getId()] = $licencia->getProduct()->getDescriptiveName() . $licenseRepository->getLast4Digits($licencia);
  1136.         }
  1137.         return new JsonResponse($arrayLicencias);
  1138.     }
  1139.     public function SupportTicketByStatus(ReportingColors $reportingColors$user)
  1140.     {
  1141.         $entityManager $this->getDoctrine()->getManager();
  1142.         $json_data = array();
  1143.         $estadosticket $entityManager->createQuery('SELECT t.status, COUNT(t.status) as count'
  1144.             ' FROM App\Entity\Ticket t'
  1145.             ' WHERE t.user = :user'
  1146.             ' GROUP BY t.status')
  1147.             ->setParameter('user'$user)
  1148.             ->getArrayResult();
  1149.         $color $reportingColors->EstadoColor();
  1150.         foreach ($estadosticket as $estado) {
  1151.             $estad['status'] = $estado['status'];
  1152.             $estad['count'] = $estado['count'];
  1153.             if ($estado['status'] == 'PENDING')
  1154.                 $estad['color'] = $color['PENDING'];
  1155.             if ($estado['status'] == 'PROCESS')
  1156.                 $estad['color'] = $color['PROCESS'];
  1157.             if ($estado['status'] == 'RESOLVED')
  1158.                 $estad['color'] = $color['RESOLVED'];
  1159.             if ($estado['status'] == 'CLOSED')
  1160.                 $estad['color'] = $color['CLOSED'];
  1161.             array_push($json_data$estad);
  1162.         }
  1163.         return $json_data;
  1164.     }
  1165.     public function getUsersAndRolesToNotify($case$ticket$translator)
  1166.     {
  1167.         $entityManager $this->getDoctrine()->getManager();
  1168.         $userRepository $entityManager->getRepository(\App\Entity\User::class);
  1169.         $vendorRepository $entityManager->getRepository(\App\Entity\Vendors::class);
  1170.         $ticketTecnico null;
  1171.         switch ($case->getTipoTicket()->getId()) {
  1172.             case 1:
  1173.                 //Técnico                   
  1174.                 $tipoticket = ($translator->trans('app.Support.DropDownTechnical'));
  1175.                 $ticketTecnico $entityManager->createQuery('SELECT tt'
  1176.                     ' FROM App\Entity\Tickettecnico tt'
  1177.                     ' WHERE tt.supportcase = :id')
  1178.                     ->setParameter('id'$case->getId())
  1179.                     ->getOneOrNullResult();
  1180.                 break;
  1181.             case 2:
  1182.                 //Administración
  1183.                 $tipoticket = ($translator->trans('app.Support.DropDownAdministration'));
  1184.                 break;
  1185.             case 3:
  1186.                 //Comercial
  1187.                 $tipoticket = ($translator->trans('app.Support.DropDownCommercial'));
  1188.                 break;
  1189.             case 4:
  1190.                 //Plataforma técnico
  1191.                 $tipoticket = ($translator->trans('app.Support.DropDownPlatform'));
  1192.                 break;
  1193.             case 5:
  1194.                 //BI
  1195.                 $tipoticket = ($translator->trans('BI'));
  1196.                 break;
  1197.             case 6:
  1198.                 //Plataforma gestión
  1199.                 $tipoticket = ($translator->trans('app.Support.DropDownPlatform'));
  1200.                 break;
  1201.         }
  1202.         if ($ticket->getUser()->getWholesaler() && $ticketTecnico && $ticketTecnico->getProductline()) {
  1203.             $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1204.                 ' FROM App\Entity\User u'
  1205.                 ' WHERE u.vendor = :vendor'
  1206.                 ' AND u.roles like :role_one')
  1207.                 ->setParameter('vendor'$ticketTecnico->getProductline()->getVendor())
  1208.                 ->setParameter('role_one''%ROLE_SUPPORT_VENDOR%')
  1209.                 ->getResult();
  1210.         } else {
  1211.             $levelUp $userRepository->getLevelUpCompany($ticket->getUser());
  1212.             $partner $ticket->getUser()->getPartner();
  1213.             if ($case->getTipoTicket()->getId() == 4) {
  1214.                 //tickets platform technical to user katy
  1215.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1216.                     ' FROM App\Entity\User u'
  1217.                     ' WHERE u.roles like :role_one')
  1218.                     ->setParameter('role_one''%ROLE_SUPPORT_KATY%')
  1219.                     ->getResult();
  1220.             } elseif ($case->getTipoTicket()->getId() == 5) {
  1221.                 //tickets bi to user katy
  1222.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1223.                     ' FROM App\Entity\User u'
  1224.                     ' WHERE u.roles like :role_one')
  1225.                     ->setParameter('role_one''%ROLE_BI_MANAGER%')
  1226.                     ->getResult();
  1227.             } elseif ($case->getTipoTicket()->getId() == 6) {
  1228.                 //tickets platform management to user katy
  1229.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1230.                     ' FROM App\Entity\User u'
  1231.                     ' WHERE u.roles like :role_one')
  1232.                     ->setParameter('role_one''%ROLE_SUPPORT_MANAGEMENT_KATY%')
  1233.                     ->getResult();
  1234.             } elseif ($ticket->getUser()->getVendor()) {
  1235.                 //tickets administratives
  1236.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1237.                     ' FROM App\Entity\User u'
  1238.                     ' WHERE u.roles like :role_one')
  1239.                     ->setParameter('role_one''%ROLE_SUPPORT_ADMIN_KATY%')
  1240.                     ->getResult();
  1241.             } elseif ($ticket->getUser()->getWholesaler()) {
  1242.                 if ($case->getTipoTicket()->getId() == 3) { //commercial
  1243.                     $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1244.                         ' FROM App\Entity\User u'
  1245.                         ' WHERE u.wholesaler = :wholesaler'
  1246.                         ' AND u.roles like :role_one')
  1247.                         ->setParameter('wholesaler'$levelUp)
  1248.                         ->setParameter('role_one''%ROLE_COMMERCIAL_AGENT_NEW%')
  1249.                         ->getResult();
  1250.                 } else { //administrative
  1251.                     $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1252.                         ' FROM App\Entity\User u'
  1253.                         ' WHERE u.wholesaler = :wholesaler'
  1254.                         ' AND u.roles like :role_one')
  1255.                         ->setParameter('wholesaler'$levelUp)
  1256.                         ->setParameter('role_one''%ROLE_MANAGE_SUPPORT_TICKETS_NEW%')
  1257.                         ->getResult();
  1258.                 }
  1259.             } elseif ($ticket->getUser()->getPartner()) {
  1260.                 if ($case->getTipoTicket()->getId() == 3) { //commercial
  1261.                     $comercialAgent $userRepository->find($partner->getIdcommercialagent());
  1262.                     $master $userRepository->getMaster($partner->getWholesaler());
  1263.                     if ($comercialAgent->getEmail() != $master[0]->getEmail()) {
  1264.                         $usersToNotify array_merge($master, array($comercialAgent));
  1265.                     } else {
  1266.                         $usersToNotify $master;
  1267.                     }
  1268.                 } else {
  1269.                     $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1270.                         ' FROM App\Entity\User u'
  1271.                         ' WHERE u.wholesaler = :wholesaler'
  1272.                         ' AND u.roles like :role_one')
  1273.                         ->setParameter('wholesaler'$levelUp)
  1274.                         ->setParameter('role_one''%ROLE_MANAGE_SUPPORT_TICKETS_NEW%')
  1275.                         ->getResult();
  1276.                 }
  1277.             } elseif ($ticket->getUser()->getCustomer()) {
  1278.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1279.                     ' FROM App\Entity\User u'
  1280.                     ' WHERE u.partner = :partner'
  1281.                     ' AND u.roles like :role_one')
  1282.                     ->setParameter('partner'$levelUp)
  1283.                     ->setParameter('role_one''%ROLE_SUPPORT_NEW%')
  1284.                     ->getResult();
  1285.             }
  1286.         }
  1287.         return array(
  1288.             'usersToNotify' => $usersToNotify,
  1289.             'tipoTicket' => $tipoticket
  1290.         );
  1291.     }
  1292.     private function getLastMessageToNotify($tmpLast)
  1293.     {
  1294.         $entityManager $this->getDoctrine()->getManager();
  1295.         if ($tmpLast->getLevel() == && $tmpLast->getAutomatic()) {
  1296.             $tmpCount $entityManager->createQuery('SELECT tm'
  1297.                 ' FROM App\Entity\Ticketmessage tm'
  1298.                 ' WHERE tm.date = :date')
  1299.                 ->setParameter('date'$tmpLast->getDate())
  1300.                 ->getResult();
  1301.             if (count($tmpCount) == 2) {
  1302.                 $lastMessage $tmpCount[0]->getMessage();
  1303.             } else {
  1304.                 $lastMessage '';
  1305.             }
  1306.         } else {
  1307.             $ticketRepository $entityManager->getRepository(\App\Entity\Ticket::class);
  1308.             //$lastMessage = $ticketRepository->getTicketmessages($tmpLast->getTicket())->last()->getMessage();
  1309.             $lastMessage array_values(array_slice($ticketRepository->getTicketmessages($tmpLast->getTicket()), -1))[0]->getMessage();
  1310.         }
  1311.         return $lastMessage;
  1312.     }
  1313.     private function uploadFile($path$tm$form$translator)
  1314.     {
  1315.         $entityManager $this->getDoctrine()->getManager();
  1316.         $session $this->get('session');
  1317.         $extensionFileService =  new ExtensionFileService($session$translator);
  1318.         $files $form->get('filename')->getData();
  1319.         $ticket $tm->getTicket();
  1320.         foreach ($files as $file) {
  1321.             $sanitize $extensionFileService->getSanitize('docx+pdf+img+excel+txt+ppt'$file->getClientOriginalName());
  1322.             if ($sanitize) {
  1323.                 if ((strlen($file->getClientOriginalName()) > 100)) {
  1324.                     $session->getFlashBag()->add('danger'$translator->trans('app.ManageUsers&Profiles.Max100Characters'));
  1325.                 } elseif (($file->getSize() > 26214400)) {
  1326.                     $session->getFlashBag()->add('danger'$translator->trans('app.General.Guidelines.FileSize'));
  1327.                 } else {
  1328.                     $tmFile = new \App\Entity\Ticketmessagefile();
  1329.                     $tmFile->setOriginalfilename($file->getClientOriginalName());
  1330.                     $extension $file->guessExtension();
  1331.                     if (!$extension)
  1332.                         $extension 'bin';
  1333.                     $newName $ticket->getId() . '_' time() . '_' rand(1999) . '.' $extension;
  1334.                     $tmFile->setFilename($newName);
  1335.                     // Try to save file
  1336.                     $file->move($path$newName);
  1337.                     $tmFile->setMessage($tm);
  1338.                     $entityManager->persist($tmFile);
  1339.                     $entityManager->flush();
  1340.                 }
  1341.             }
  1342.         }
  1343.     }
  1344.     private function getErrorMessages(\Symfony\Component\Form\Form $form)
  1345.     {
  1346.         $errors = array();
  1347.         foreach ($form->getErrors() as $key => $error) {
  1348.             if ($form->isRoot()) {
  1349.                 $errors['#'][] = $error->getMessage();
  1350.             } else {
  1351.                 $errors[] = $error->getMessage();
  1352.             }
  1353.         }
  1354.         foreach ($form->all() as $child) {
  1355.             if (!$child->isValid()) {
  1356.                 $errors[$child->getName()] = $this->getErrorMessages($child);
  1357.             }
  1358.         }
  1359.         return $errors;
  1360.     }
  1361.     /**
  1362.      * Create a ticket message from post data
  1363.      * 
  1364.      * @param type $post
  1365.      * @param type $ticket
  1366.      */
  1367.     protected function createTicketMessage($translator$serviceNotification$request$form$ticket null$case)
  1368.     {
  1369.         $data = array();
  1370.         $tm = new \App\Entity\Ticketmessage();
  1371.         $bescalado false;
  1372.         $idevento null;
  1373.         $lastMessage '';
  1374.         $session $this->get('session');
  1375.         $entityManager $this->getDoctrine()->getManager();
  1376.         $user $this->getUser();
  1377.         $path $this->getParameter('private_folder') . 'ticket/';
  1378.         $serverName $this->getParameter('server_name');
  1379.         $userRepository $entityManager->getRepository(\App\Entity\User::class);
  1380.         $selfUserLevel $userRepository->getUserLevel($request$user);
  1381.         $ticketRepository $entityManager->getRepository(\App\Entity\Ticket::class);
  1382.         $supportcaseRepository $entityManager->getRepository(\App\Entity\Supportcase::class);
  1383.         //Si existe el ticket creará el mensaje para ese ticket
  1384.         if ($ticket) {
  1385.             if ($form->get('send')->isClicked() && $form->get('message')->getData() == '') {
  1386.                 $session->getFlashBag()->add('danger'$translator->trans('app.Support.System.EmptyMessage'));
  1387.                 if ($user == $ticket->getUser()) {
  1388.                     return $this->redirectToRoute('ticket_reply', array('id' => $case->getId()));
  1389.                 } else {
  1390.                     return $this->redirectToRoute('ticket_replyclient', array('id' => $case->getId()));
  1391.                 }
  1392.             }
  1393.             // SI HA ELEGIDO CERRAR EL TICKET
  1394.             if ($form->get('close')->isClicked()) {
  1395.                 if ($ticket->getStatus() == 'CLOSED') {
  1396.                     $ticket->setMessagerate($form->get('ratingMessage')->getData());
  1397.                     $ticket->setRate($form->get('score')->getData() == '' $form->get('score')->getData());
  1398.                     $entityManager->persist($ticket);
  1399.                     $entityManager->flush();
  1400.                     return;
  1401.                 }
  1402.                 //SI EL CREADOR DEL CASO CIERRA EL TICKET
  1403.                 if ($user == $ticket->getUser() && $user == $ticket->getSupportcase()->getCreatedby()) {
  1404.                     $idevento 74;
  1405.                     $ticket->setRate($form->get('score')->getData() == '' $form->get('score')->getData());
  1406.                     $ticket->setStatus('CLOSED');
  1407.                     $ticket->setCloseddate(new \DateTime);
  1408.                     $entityManager->persist($ticket);
  1409.                     $entityManager->flush();
  1410.                     $automMessage = new \App\Entity\Ticketmessage();
  1411.                     $automMessage->setUser($user);
  1412.                     $automMessage->setMessage($translator->trans('app.Support.System.TicketClosed'));
  1413.                     $automMessage->setAutomatic(1);
  1414.                     $automMessage->setLocale($request->getLocale());
  1415.                     $automMessage->setDate(new \DateTime);
  1416.                     $automMessage->setStatus('CLOSED_BY_CASE_OWNER');
  1417.                     $automMessage->setTicket($ticket);
  1418.                 } else {
  1419.                     //SI EL CREADOR DEL TICKET LO CIERRA
  1420.                     if ($user == $ticket->getUser()) {
  1421.                         $idevento 74;
  1422.                         $ticket->setCloseddate(new \DateTime);
  1423.                         $ticket->setStatus('CLOSED');
  1424.                         $ticket->setRate($form->get('score')->getData() == '' $form->get('score')->getData());
  1425.                         $entityManager->persist($ticket);
  1426.                         $entityManager->flush();
  1427.                         $automMessage = new \App\Entity\Ticketmessage();
  1428.                         $automMessage->setUser($user);
  1429.                         $automMessage->setMessage($translator->trans('app.Support.System.TicketClosed'));
  1430.                         $automMessage->setAutomatic(1);
  1431.                         $automMessage->setLocale($request->getLocale());
  1432.                         $automMessage->setDate(new \DateTime);
  1433.                         $automMessage->setStatus('CLOSED_BY_TICKET_OWNER');
  1434.                         $automMessage->setTicket($ticket);
  1435.                     }
  1436.                     //SI EL USUARIO CON ROL PARA GESTIONAR ESA INCIDENCIA CIERRA EL TICKET
  1437.                     else {
  1438.                         $idevento 75;
  1439.                         $ticket->setCloseddate(new \DateTime);
  1440.                         $ticket->setStatus('CLOSED');
  1441.                         $entityManager->persist($ticket);
  1442.                         $entityManager->flush();
  1443.                         $automMessage = new \App\Entity\Ticketmessage();
  1444.                         $automMessage->setUser($user);
  1445.                         $automMessage->setMessage($translator->trans('app.Support.System.TicketClosed'));
  1446.                         $automMessage->setAutomatic(1);
  1447.                         $automMessage->setLocale($request->getLocale());
  1448.                         $automMessage->setDate(new \DateTime);
  1449.                         $automMessage->setStatus('CLOSED_BY_SUPPORT');
  1450.                         $automMessage->setTicket($ticket);
  1451.                     }
  1452.                 }
  1453.             }
  1454.             //SI HA ELEGIDO REABRIR EL TICKET
  1455.             elseif ($ticket->getStatus() == 'CLOSED') {
  1456.                 $idevento 73;
  1457.                 $ticket->setStatus('PENDING');
  1458.                 $entityManager->persist($ticket);
  1459.                 $entityManager->flush();
  1460.                 $tm->setStatus('REOPENED');
  1461.                 $automMessage = new \App\Entity\Ticketmessage();
  1462.                 $automMessage->setUser($user);
  1463.                 $automMessage->setMessage($translator->trans('app.Support.System.TicketReopened'));
  1464.                 $automMessage->setAutomatic(1);
  1465.                 $automMessage->setLocale($request->getLocale());
  1466.                 $automMessage->setDate(new \DateTime);
  1467.                 $automMessage->setStatus('REOPENED');
  1468.                 $automMessage->setTicket($ticket);
  1469.                 $entityManager->persist($automMessage);
  1470.                 $entityManager->flush();
  1471.             }
  1472.             if ($form->get('message')->getData() != '') {
  1473.                 $tm->setUser($user);
  1474.                 $tm->setDate(new \DateTime);
  1475.                 $tm->setMessage($form->get('message')->getData());
  1476.                 $tm->setLocale($request->getLocale());
  1477.                 $tm->setTicket($ticket);
  1478.                 $tm->setLevel($selfUserLevel);
  1479.                 $entityManager->persist($tm);
  1480.                 $entityManager->flush();
  1481.             }
  1482.             if ($idevento == 75 || $idevento == 74 && $automMessage) {
  1483.                 $entityManager->persist($automMessage);
  1484.                 $entityManager->flush();
  1485.             }
  1486.             if ($form->get('ratingMessage')->getData() != '') {
  1487.                 $ticket->setMessagerate($form->get('ratingMessage')->getData());
  1488.                 $entityManager->persist($ticket);
  1489.                 $entityManager->flush();
  1490.             }
  1491.             if (!empty($form->get('filename')) && $form->get('filename')->getData() != null) {
  1492.                 $this->uploadFile($path$tm$form$translator);
  1493.             }
  1494.         } else {
  1495.             $idevento 14;
  1496.             $bescalado true;
  1497.             //Si el usuario escala el caso, crea un nuevo ticket con el mensaje escrito.
  1498.             $ticket = new Ticket();
  1499.             $ticket->setUser($user);
  1500.             $ticket->setSupportcase($case);
  1501.             $ticket->setCreationdate(new \DateTime);
  1502.             $ticket->setLastmodification(new \DateTime);
  1503.             $ticket->setLevel($selfUserLevel);
  1504.             $entityManager->persist($ticket);
  1505.             $entityManager->flush();
  1506.             $tm->setUser($user);
  1507.             $tm->setDate(new \DateTime);
  1508.             $tm->setMessage($form->get('message')->getData());
  1509.             $tm->setLocale($request->getLocale());
  1510.             $tm->setTicket($ticket);
  1511.             $tm->setLevel($selfUserLevel);
  1512.             $entityManager->persist($tm);
  1513.             $entityManager->flush();
  1514.             //Si hay ficheros adjuntos 
  1515.             if (!empty($form->get('filename')) && $form->get('filename')->getData() != null) {
  1516.                 $this->uploadFile($path$tm$form$translator);
  1517.             }
  1518.             //Notifificaciones        
  1519.             $ticketTecnico $entityManager->createQuery('SELECT tt'
  1520.                 ' FROM App\Entity\Tickettecnico tt'
  1521.                 ' WHERE tt.supportcase = :id')
  1522.                 ->setParameter('id'$case->getId())
  1523.                 ->getOneOrNullResult();
  1524.             $arrayusersandroles $this->getUsersAndRolesToNotify($case$ticket$translator);
  1525.             $ticketuser $ticket->getUser();
  1526.             $serverName $this->getParameter('server_name');
  1527.             if ($ticketuser->getCustomer()) {
  1528.                 $company $userRepository->getCompany($ticketuser);
  1529.                 $customer $userRepository->getCompany($company);
  1530.             } else {
  1531.                 $customer $userRepository->getCompany($ticketuser)->getName();
  1532.             }
  1533.             //datos para envio email
  1534.             $data = [
  1535.                 'ticket' => $ticket,
  1536.                 'tickettecnico' => isset($ticketTecnico) ? $ticketTecnico null,
  1537.                 'tipoticket' => $arrayusersandroles['tipoTicket'],
  1538.                 'ticketLink' => "ticket/default/replyclient/" $case->getId(),
  1539.                 'customerLevel' => $selfUserLevel,
  1540.                 'ticketmessage' => $tm->getMessage(),
  1541.                 'user' => $user,
  1542.                 'messageLevel' => $selfUserLevel,
  1543.                 'route' => 'ticket_replyclient',
  1544.                 'idview' => $case->getId(),
  1545.             ];
  1546.             $serviceNotification->Notify($idevento$arrayusersandroles['usersToNotify'], $data);
  1547.         }
  1548.         //Notifica al que recibela incidencia que tiene una respuesta
  1549.         //eventos 16 - nuevo mensaje y 73 - reabrir ticket
  1550.         $tmessageUsers $entityManager->createQuery('SELECT distinct u'
  1551.             ' FROM App\Entity\User u'
  1552.             ' JOIN App\Entity\Ticketmessage tm'
  1553.             ' WITH u.id = tm.user'
  1554.             ' WHERE tm.ticket = :ticket'
  1555.             ' AND tm.user != :user')
  1556.             ->setParameter('ticket'$ticket)
  1557.             ->setParameter('user'$user)
  1558.             ->getResult();
  1559.         //$tmpLast = $ticketRepository->getTicketmessages($ticket)->last();
  1560.         $tmpLast array_values(array_slice($ticketRepository->getTicketmessages($ticket), -1))[0];
  1561.         if ($idevento == 75) {
  1562.             $tmessageUsers = array($ticket->getUser());
  1563.         }
  1564.         if (!empty($tmessageUsers)) {
  1565.             foreach ($tmessageUsers as $tmessage_user) {
  1566.                 $usersNotyfy_reply $tmessage_user;
  1567.                 $caseId $ticket->getSupportCase()->getId();
  1568.                 $escalado $entityManager->createQuery('SELECT count(t.id)'
  1569.                     ' FROM App\Entity\Ticket t'
  1570.                     ' WHERE t.supportcase = :supportcase'
  1571.                     ' AND (t.level = :level'
  1572.                     ' OR t.level = :level2)')
  1573.                     ->setParameter('supportcase'$ticket->getSupportcase())
  1574.                     ->setParameter('level'$userRepository->getUserLevel($request$tmessage_user))
  1575.                     ->setParameter('level2'$userRepository->getUserLevel($request$tmessage_user) + 1)
  1576.                     ->getSingleScalarResult();
  1577.                 $data = [
  1578.                     'ticket' => $ticket,
  1579.                     'ticketLink' => $user != $ticket->getUser() && $escalado 'ticket/default/reply/' $caseId 'ticket/default/replyclient/' $caseId,
  1580.                     'customerLevel' =>  $userRepository->getUserLevel($request$usersNotyfy_reply),
  1581.                     'ticketmessage' => $this->getLastMessageToNotify($tmpLast),
  1582.                     'user' => $user,
  1583.                     'messageLevel' => $selfUserLevel,
  1584.                     'companyName' => $userRepository->getCompanyName($ticket->getUser()),
  1585.                     'route' => $user != $ticket->getUser() && $escalado "ticket_reply" "ticket_replyclient",
  1586.                     'idview' => $ticket->getSupportCase()->getId(),
  1587.                 ];
  1588.                 $serviceNotification->Notify($idevento $idevento 16, array($usersNotyfy_reply), $data);
  1589.             }
  1590.         }
  1591.         //Si nadie le ha contestado la incidencia todavia, notificará a los usuarios on rol que pertoque
  1592.         else {
  1593.             if ($ticket && !$bescalado) {
  1594.                 $arrayusersandroles $this->getUsersAndRolesToNotify($ticket->getSupportCase(), $ticket$translator);
  1595.                 $ticketTecnico $entityManager->createQuery('SELECT tt'
  1596.                     ' FROM App\Entity\Tickettecnico tt'
  1597.                     ' WHERE tt.supportcase = :id')
  1598.                     ->setParameter('id'$case->getId())
  1599.                     ->getOneOrNullResult();
  1600.                 $escalado $entityManager->createQuery('SELECT count(t.id)'
  1601.                     ' FROM App\Entity\Ticket t'
  1602.                     ' WHERE t.supportcase = :supportcase')
  1603.                     ->setParameter('supportcase'$ticket->getSupportcase())
  1604.                     ->getOneOrNullResult();
  1605.                 $usersToNotify $arrayusersandroles['usersToNotify'];
  1606.                 //$tmpLast = $ticketRepository->getTicketmessages($ticket)->last();
  1607.                 $tmpLast array_values(array_slice($ticketRepository->getTicketmessages($ticket), -1))[0];
  1608.                 $ticketuser $ticket->getUser();
  1609.                 $serverName $this->getParameter('server_name');
  1610.                 //datos para envio email
  1611.                 $data = [
  1612.                     'ticket' => $ticket,
  1613.                     'ticketLink' => $user != $ticket->getUser() && $escalado 'ticket/default/reply/' $ticket->getSupportCase()->getId() : 'ticket/default/replyclient/' $ticket->getSupportCase()->getId(),
  1614.                     'customer' => $usersToNotify,
  1615.                     'customerLevel' => '',
  1616.                     'ticketmessage' => $this->getLastMessageToNotify($tmpLast),
  1617.                     'user' => $user,
  1618.                     'messageLevel' => $selfUserLevel,
  1619.                     'companyName' => $userRepository->getCompanyName($ticket->getUser()),
  1620.                     'route' => $user != $ticket->getUser() && $escalado "ticket_reply" "ticket_replyclient",
  1621.                     'idview' => $ticket->getSupportCase()->getId(),
  1622.                 ];
  1623.                 $myticketTecnico $entityManager->createQuery('SELECT tt'
  1624.                     ' FROM App\Entity\Tickettecnico tt'
  1625.                     ' WHERE tt.supportcase = :supportcase')
  1626.                     ->setParameter('supportcase'$case)
  1627.                     ->getOneOrNullResult();
  1628.                 if ($myticketTecnico && $myticketTecnico->getProductline() && $myticketTecnico->getProductline()->getVendor()->getisminivendor()) {
  1629.                     $vendor $myticketTecnico->getProductline()->getVendor();
  1630.                     $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1631.                         ' FROM App\Entity\User u'
  1632.                         ' WHERE u.vendor = :vendor'
  1633.                         ' AND u.roles like :role_one')
  1634.                         ->setParameter('vendor'$vendor)
  1635.                         ->setParameter('role_one''%ROLE_SUPPORT_VENDOR%')
  1636.                         ->getResult();
  1637.                 }
  1638.                 //if ($idevento) { 
  1639.                 $serviceNotification->Notify($idevento $idevento 16$usersToNotify$data);
  1640.                 //}
  1641.             }
  1642.         }
  1643.         return;
  1644.     }
  1645.     protected function getFiles($id)
  1646.     {
  1647.         $entityManager $this->getDoctrine()->getManager();
  1648.         $files $entityManager->createQuery('SELECT tmf'
  1649.             ' FROM App\Entity\Ticketmessagefile tmf'
  1650.             ' JOIN tmf.message tm'
  1651.             ' WHERE tmf.deletedby is null'
  1652.             ' AND tm.ticket = :ticket')
  1653.             ->setParameter('ticket'$id)
  1654.             ->getResult();
  1655.         return $files;
  1656.     }
  1657.     /**
  1658.      * @Route("/ticket/default/newticketajax", name="new_ticket_ajax")
  1659.      */
  1660.     public function newTicketAjax(Request $requestTranslatorInterface $translatorServiceNotification $serviceNotification)
  1661.     {
  1662.         $success $this->createNewSupportCase($request$_POST$translator$serviceNotification);
  1663.         return new JsonResponse();
  1664.     }
  1665.     private function createNewSupportCase($request$dataTranslatorInterface $translatorServiceNotification $serviceNotification$form null)
  1666.     {
  1667.         $user $this->getUser();
  1668.         $entityManager $this->getDoctrine()->getManager();
  1669.         $userRepository $this->getDoctrine()->getRepository(User::class);
  1670.         $userwholesaler $userRepository->getParentWholesaler($user);
  1671.         $countryCode $userwholesaler $userwholesaler->getCountry()->getAlpha2Code() : '';
  1672.         $wholesalerid $userwholesaler $userwholesaler->getId() : '';
  1673.         $codenumber $countryCode $wholesalerid date('y') . date('m') . date('d');
  1674.         $path $this->getParameter('private_folder') . 'ticket/';
  1675.         $locale $request->getLocale();
  1676.         $ticketTecnico = new \App\Entity\Tickettecnico;
  1677.         $case = new Supportcase();
  1678.         $ticket = new Ticket();
  1679.         $tipoTicket =  $this->getDoctrine()->getRepository(Tipoticket::class)->find($data['tipoincidencia']);
  1680.         // Crear un nuevo caso con los datos de la incidencia
  1681.         $case->setSubject($data['subject']);
  1682.         $case->setTipoTicket($tipoTicket);
  1683.         $case->setCreatedBy($user);
  1684.         $case->setCreationdate(new \DateTime);
  1685.         $entityManager->persist($case);
  1686.         $entityManager->flush();
  1687.         // Crear nuevo ticket al caso creado anteriormente
  1688.         $ticket->setSupportcase($case);
  1689.         $ticket->setUser($user);
  1690.         $ticket->setLevel($userRepository->getUserLevel($request$user));
  1691.         $ticket->setCreationdate(new \DateTime);
  1692.         $ticket->setLastmodification(new \DateTime);
  1693.         $ticket->setStatus('PENDING');
  1694.         $entityManager->persist($ticket);
  1695.         $entityManager->flush();
  1696.         $requestLicense $user->getPartner() ? 'licensesByclient' 'lista';
  1697.         if (isset($data['idproductline'])) {
  1698.             $idproductline $data['idproductline'];
  1699.         } elseif ($data[$requestLicense]) {
  1700.             $licencia $entityManager->createQuery('SELECT l'
  1701.                 ' FROM App\Entity\License l'
  1702.                 ' WHERE l.id = :id')
  1703.                 ->setParameter('id'$data[$requestLicense])
  1704.                 ->getOneOrNullResult();
  1705.             $idproductline $licencia->getProduct()->getProductline()->getId();
  1706.         }
  1707.         // 2- Crear tipo de ticket                                
  1708.         switch ($data['tipoincidencia']) {
  1709.             case 1:
  1710.                 //Técnico
  1711.                 $tipoticket = ($translator->trans('app.Support.DropDownTechnical'));
  1712.                 $ticket_productline null;
  1713.                 if (isset($idproductline)) {
  1714.                     $ticket_productline $entityManager->createQuery('SELECT pl'
  1715.                         ' FROM App\Entity\Productline pl'
  1716.                         ' WHERE pl.id = :id')
  1717.                         ->setParameter('id'$idproductline)
  1718.                         ->getOneOrNullResult();
  1719.                 }
  1720.                 $ticketTecnico->setProductline($ticket_productline);
  1721.                 $licencia null;
  1722.                 if ($form->get($requestLicense)->getData()) {
  1723.                     $licencia $entityManager->createQuery('SELECT l'
  1724.                         ' FROM App\Entity\License l'
  1725.                         ' WHERE l.id = :id')
  1726.                         ->setParameter('id'$form->get($requestLicense)->getData())
  1727.                         ->getOneOrNullResult();
  1728.                 }
  1729.                 $ticketTecnico->setLicense($licencia);
  1730.                 $supportCase $entityManager->createQuery('SELECT sc'
  1731.                     ' FROM App\Entity\Supportcase sc'
  1732.                     ' WHERE sc.id = :id')
  1733.                     ->setParameter('id'$ticket->getSupportCase()->getId())
  1734.                     ->getOneOrNullResult();
  1735.                 if ($user->getPartner()) {
  1736.                     // Por si la lista de clientes / licencnias está vacia
  1737.                     if (isset($form['lista']) && $form['lista']->getData()) {
  1738.                         $customer $this->getDoctrine()->getRepository(\App\Entity\Customer::class)->find($form['lista']->getData());
  1739.                         $ticketTecnico->setCustomer($customer);
  1740.                     }
  1741.                 }
  1742.                 if ($user->getCustomer()) {
  1743.                     $ticketTecnico->setCustomer($user->getCustomer());
  1744.                 }
  1745.                 $ticketTecnico->setSupportCase($supportCase);
  1746.                 $entityManager->persist($ticketTecnico);
  1747.                 $entityManager->flush();
  1748.                 break;
  1749.             case 2:
  1750.                 //Administración
  1751.                 $tipoticket = ($translator->trans('app.Support.DropDownAdministration'));
  1752.                 break;
  1753.             case 3:
  1754.                 //Comercial
  1755.                 $productRepository $entityManager->getRepository(Product::class);
  1756.                 $product = isset($data['product']) ? $productRepository->find($data['product']) : null;
  1757.                 $ticketComercial = new TicketComercial();
  1758.                 $ticketComercial->setSupportCase($case);
  1759.                 if (!is_null($product)) {
  1760.                     $ticketComercial->setProductline($product->getProductline());
  1761.                     $ticketComercial->setProduct($product);
  1762.                 }
  1763.                 $entityManager->persist($ticketComercial);
  1764.                 $entityManager->flush();
  1765.                 $tipoticket = ($translator->trans('app.Support.DropDownCommercial'));
  1766.                 break;
  1767.             case 4:
  1768.                 //Plataforma
  1769.                 $tipoticket = ($translator->trans('app.Support.DropDownPlatform'));
  1770.                 break;
  1771.         }
  1772.         // 3- creo el mensaje del ticket
  1773.         $tm = new \App\Entity\Ticketmessage;
  1774.         $tm->setUser($user);
  1775.         $tm->setDate(new \DateTime);
  1776.         $tm->setMessage($data['message']);
  1777.         $tm->setLocale($locale);
  1778.         $tm->setStatus($ticket->getStatus());
  1779.         $tm->setLevel($ticket->getLevel());
  1780.         $tm->setTicket($ticket);
  1781.         $entityManager->persist($tm);
  1782.         $entityManager->flush();
  1783.         //Si hay ficheros adjuntos 
  1784.         if (!is_null($form)) {
  1785.             if (!empty($form->get('filename')) && $form->get('filename')->getData() != null) {
  1786.                 $this->uploadFile($path$tm$form$translator);
  1787.             }
  1788.         }
  1789.         $entityManager->persist($tm);
  1790.         $entityManager->flush();
  1791.         // Send email to support manager.
  1792.         if ($ticket->getUser()->getWholesaler() && $ticketTecnico->getProductline()) {
  1793.             $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1794.                 ' FROM App\Entity\User u'
  1795.                 ' WHERE u.vendor = :vendor'
  1796.                 ' AND u.roles like :role_one'
  1797.                 ' OR u.roles like :role2)')
  1798.                 ->setParameter('vendor'$ticketTecnico->getProductline()->getVendor())
  1799.                 ->setParameter('role_one''%ROLE_SUPPORT_VENDOR%')
  1800.                 ->setParameter('role2''%ROLE_ADMIN_USER_VENDOR%')
  1801.                 ->getResult();
  1802.         } else {
  1803.             $levelUp $userRepository->getLevelUpCompany($ticket->getUser());
  1804.             $partner $ticket->getUser()->getPartner();
  1805.             if ($case->getTipoTicket()->getId() == 4) {
  1806.                 //tickets platform technical to user katy
  1807.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1808.                     ' FROM App\Entity\User u'
  1809.                     ' WHERE u.roles like :role_one')
  1810.                     ->setParameter('role_one''%ROLE_SUPPORT_KATY%')
  1811.                     ->getResult();
  1812.             } elseif ($case->getTipoTicket()->getId() == 5) {
  1813.                 //tickets bi to user katy
  1814.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1815.                     ' FROM App\Entity\User u'
  1816.                     ' WHERE u.roles like :role_one')
  1817.                     ->setParameter('role_one''%ROLE_BI_MANAGER%')
  1818.                     ->getResult();
  1819.             } elseif ($case->getTipoTicket()->getId() == 6) {
  1820.                 //tickets platform management to user katy
  1821.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1822.                     ' FROM App\Entity\User u'
  1823.                     ' WHERE u.roles like :role_one')
  1824.                     ->setParameter('role_one''%ROLE_SUPPORT_MANAGEMENT_KATY%')
  1825.                     ->getResult();
  1826.             } elseif ($ticket->getUser()->getVendor()) {
  1827.                 //tickets administratives
  1828.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1829.                     ' FROM App\Entity\User u'
  1830.                     ' WHERE u.roles like :role_one')
  1831.                     ->setParameter('role_one''%ROLE_SUPPORT_ADMIN_KATY%')
  1832.                     ->getResult();
  1833.             } elseif ($ticket->getUser()->getWholesaler()) {
  1834.                 if ($case->getTipoTicket()->getId() == 3) { //commercial 
  1835.                     $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1836.                         ' FROM App\Entity\User u'
  1837.                         ' WHERE u.wholesaler = :wholesaler'
  1838.                         ' AND u.roles like :role_one'
  1839.                         ' OR u.roles like :role2)')
  1840.                         ->setParameter('wholesaler'$levelUp)
  1841.                         ->setParameter('role_one''%ROLE_COMMERCIAL_AGENT_NEW%')
  1842.                         ->setParameter('role2''%ROLE_ADMIN_USER_NEW%')
  1843.                         ->getResult();
  1844.                 } else { //administrative
  1845.                     $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1846.                         ' FROM App\Entity\User u'
  1847.                         ' WHERE u.wholesaler = :wholesaler'
  1848.                         ' AND u.roles like :role_one'
  1849.                         ' OR u.roles like :role2)')
  1850.                         ->setParameter('wholesaler'$levelUp)
  1851.                         ->setParameter('role_one''%ROLE_MANAGE_SUPPORT_TICKETS_NEW%')
  1852.                         ->setParameter('role2''%ROLE_ADMIN_USER_NEW%')
  1853.                         ->getResult();
  1854.                 }
  1855.             } elseif ($ticket->getUser()->getPartner()) {
  1856.                 if ($case->getTipoTicket()->getId() == 3) { //commercial
  1857.                     $comercialAgent $userRepository->find($partner->getIdcommercialagent());
  1858.                     $master $userRepository->getMaster($partner->getWholesaler());
  1859.                     if ($comercialAgent->getEmail() != $master[0]->getEmail()) {
  1860.                         $usersToNotify array_merge($master, array($comercialAgent));
  1861.                     } else {
  1862.                         $usersToNotify $master;
  1863.                     }
  1864.                 } else {
  1865.                     $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1866.                         ' FROM App\Entity\User u'
  1867.                         ' WHERE u.wholesaler = :wholesaler'
  1868.                         ' AND (u.roles like :role_one'
  1869.                         ' OR u.roles like :role2)')
  1870.                         ->setParameter('wholesaler'$levelUp)
  1871.                         ->setParameter('role_one''%ROLE_MANAGE_SUPPORT_TICKETS_NEW%')
  1872.                         ->setParameter('role2''%ROLE_ADMIN_USER_NEW%')
  1873.                         ->getResult();
  1874.                 }
  1875.             } elseif ($ticket->getUser()->getCustomer()) {
  1876.                 $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1877.                     ' FROM App\Entity\User u'
  1878.                     ' WHERE u.partner = :partner'
  1879.                     ' AND (u.roles like :role_one'
  1880.                     ' OR u.roles like :role2)')
  1881.                     ->setParameter('partner'$levelUp)
  1882.                     ->setParameter('role_one''%ROLE_SUPPORT_NEW%')
  1883.                     ->setParameter('role2''%ROLE_ADMIN_USER_NEW_PARTNER%')
  1884.                     ->getResult();
  1885.             }
  1886.         }
  1887.         $data = array();
  1888.         $ticketuser $ticket->getUser();
  1889.         $serverName $this->getParameter('server_name');
  1890.         //datos para envio email
  1891.         $data = [
  1892.             'ticket' => $ticket,
  1893.             'customerLevel' => $userRepository->getUserLevel($request$user),
  1894.             'ticketmessage' => $tm->getMessage(),
  1895.             'user' => $user,
  1896.             'messageLevel' => $userRepository->getUserLevel($request$user),
  1897.             'route' => 'ticket_replyclient',
  1898.             'idview' => $case->getId(),
  1899.         ];
  1900.         $existsticketTecnico $entityManager->createQuery('SELECT tt'
  1901.             ' FROM App\Entity\Tickettecnico tt'
  1902.             ' WHERE tt.supportcase = :supportcase')
  1903.             ->setParameter('supportcase'$case)
  1904.             ->getOneOrNullResult();
  1905.         if ($existsticketTecnico && $existsticketTecnico->getProductline() && $existsticketTecnico->getProductline()->getVendor()->getisMiniVendor()) {
  1906.             $vendor $existsticketTecnico->getProductline()->getVendor();
  1907.             $usersToNotify $entityManager->createQuery('SELECT distinct u'
  1908.                 ' FROM App\Entity\User u'
  1909.                 ' WHERE u.vendor = :vendor'
  1910.                 ' AND (u.roles like :role_one'
  1911.                 ' OR u.roles like :role2)')
  1912.                 ->setParameter('role_one''%ROLE_SUPPORT_VENDOR%')
  1913.                 ->setParameter('role2''%ROLE_ADMIN_USER_VENDOR%')
  1914.                 ->setParameter('vendor'$vendor)
  1915.                 ->getResult();
  1916.         }
  1917.         $serviceNotification->Notify(14$usersToNotify$data);
  1918.         return true;
  1919.     }
  1920. }