src/MDS/EventsBundle/Controller/ProposalController.php line 1505

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * User: jorge.defreitas@develup.solutions
  5.  * Date: 07/08/2017
  6.  * Time: 10:55
  7.  */
  8. namespace App\MDS\EventsBundle\Controller;
  9. use App\Entity\Client;
  10. use App\Entity\ClientContact;
  11. use App\Entity\PresentationMusic;
  12. use App\Entity\SendMail;
  13. use App\Entity\SettingsOffice;
  14. use App\Entity\SettingsRol;
  15. use App\Entity\SettingsTeam;
  16. use App\Entity\SupplierSettingsType;
  17. use App\Entity\User;
  18. use App\MDS\AvexpressBundle\Entity\AveFiles;
  19. use App\MDS\DevelupBundle\Entity\MdvTelegramUser;
  20. use App\MDS\EventsBundle\Entity\Proposal;
  21. use App\MDS\EventsBundle\Entity\ProposalControl;
  22. use App\MDS\EventsBundle\Entity\ProposalSupplierControl;
  23. use App\MDS\EventsBundle\Entity\ProposalSupplierServices;
  24. use App\MDS\EventsBundle\Entity\ProposalAgents;
  25. use App\MDS\EventsBundle\Entity\ProposalBriefingList;
  26. use App\MDS\EventsBundle\Entity\ProposalTracing;
  27. use App\MDS\EventsBundle\Form\ProposalType;
  28. use DateTime;
  29. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  30. use Symfony\Component\Routing\Annotation\Route;
  31. use Symfony\Component\HttpFoundation\JsonResponse;
  32. use Symfony\Component\HttpFoundation\Request;
  33. use Symfony\Component\Validator\Constraints as Assert;
  34. use Symfony\Component\HttpFoundation\Session\Session;
  35. use Google_Client;
  36. use Google_Service_Calendar;
  37. use Swift_Mailer;
  38. use Swift_Message;
  39. use Swift_SmtpTransport;
  40. use Symfony\Component\Validator\Validator\ValidatorInterface;
  41. use Symfony\Contracts\Translation\TranslatorInterface;
  42. class ProposalController extends AbstractController
  43. {
  44.     private $translator;
  45.     protected $googleCalendar;
  46.     private $validator;
  47.     public function __construct(TranslatorInterface $translatorValidatorInterface $validator)
  48.     {
  49. //        $redirect_uri='urn:ietf:wg:oauth:2.0:oob';
  50.         $redirect_uri 'https://' $_SERVER['HTTP_HOST']. '/calendar/token';
  51.         $googleCalendar = new Google_Client();
  52.         $googleCalendar->setApplicationName('Google Calendar API PHP Quickstart');
  53.         //campos a extraer de la base de datos User
  54.         $googleCalendar->setClientId('2790497987-57qc3vu4pr7vb0s8phpub2me58pe34lb.apps.googleusercontent.com');
  55.         $googleCalendar->setClientSecret('nj2C7unaTO68DRhyORsyipSj');
  56.         //fin campos user
  57. //        $api_key = "AIzaSyBR84cS1IU2BPvk5V3VnbqdkJESlv440Ac";
  58. //        $client->setDeveloperKey($api_key);
  59.         $googleCalendar->setRedirectUri($redirect_uri);
  60.         $googleCalendar->addScope(Google_Service_Calendar::CALENDAR);
  61.         $guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));
  62.         $googleCalendar->setHttpClient($guzzleClient);
  63.         $this->googleCalendar $googleCalendar;
  64.         $this->translator $translator;
  65.         $this->validator $validator;
  66.     }
  67.     /*
  68.      * ATENCION LAS RAIZ DE @Route POR DEFECTO DEL BUNDLE: EventsBundle ES  /events/, NO PONERLO EN LA @Route("")
  69.      *
  70.      * */
  71.     /**
  72.      * @Route("/proposal/add/",  name="proposal_add")
  73.      */
  74.     public function addAction(Request $request)
  75.     {
  76.         $proposal = new Proposal();
  77.         $proposal->setDateProposedAt(new \DateTime("now"));
  78.         $form $this->createProposalCreateForm($proposal);
  79.         $em $this->getDoctrine()->getManager();
  80.         $type_supplier $em->getRepository(SupplierSettingsType::class)->findAll();
  81. //        $userAgents = $em->getRepository(User::class)->findAll();
  82.         /* INICIO Consulta de agente activos MICE */
  83.         $parameters = array(
  84.             'status' => true
  85.         );
  86.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  87.         $dql 'SELECT us
  88.                 FROM App\Entity\User us
  89.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  90.                 ORDER BY us.name ASC';
  91.         $query $em->createQuery($dql)->setParameters($parameters);
  92.         $userAgents $query->getResult();
  93.         /* FIN Consulta de agente activos MICE */
  94.         $nameGeneral $this->translator->trans('SUPPLIER');
  95.         $type = array();
  96.         foreach($type_supplier as $typesupplier){
  97.             $type[$nameGeneral.' '.$typesupplier->getGroupBase()][$typesupplier->getBase()] = array(
  98.                 'typeName' => $typesupplier->getBase()
  99.             );
  100.         }
  101.         $services['AGRUPATION OF SERVICES'] = array(
  102.             'IDEA' => array(
  103.                 'typeName' => 'IDEA'
  104.             ),
  105.             'ACTIVITY' => array(
  106.                 'typeName' => 'ACTIVITY'
  107.             )
  108.         );
  109.         $destinos['DESTINATION'] = array(
  110.             'DESTINATION' => array(
  111.                 'typeName' => 'DESTINATION'
  112.             )
  113.         );
  114.         $type_data array_merge($type$services$destinos);
  115.         return $this->render('MDS/EventsBundle/proposal/add-proposal.html.twig',
  116.             array(
  117.                 'typeSupplier' => $type_data,
  118.                 'userAgents' => $userAgents,
  119.                 'form' => $form->createView()
  120.             )
  121.         );
  122.     }
  123.     private function createProposalCreateForm(Proposal $entity)
  124.     {
  125.         $form $this->createForm(ProposalType::class, $entity, array(
  126.             'action' => $this->generateUrl('proposal_create'),
  127.             'method' => 'POST'
  128.         ));
  129.         return $form;
  130.     }
  131.     //public function createProposalAction(Request $request, LoggerInterface $logger)
  132.     /**
  133.      * @Route("/proposal/create", name="proposal_create")
  134.      */
  135.     public function createProposalAction(Request $request)
  136.     {
  137.         // Se genera la información de la tabla Proposal_Agents (Porcentajes de agentes)
  138.         $propAgents = new ProposalAgents();
  139.         if($request->request->get('agent')['Agent3']['agentId']!=''){
  140.             $propAgents->setAgThree($request->request->get('agent')['Agent3']['agentId']);
  141.             $propAgents->setAgThreePerc($request->request->get('percent')['3']);
  142.             $propAgents->setAgThreeWork($request->request->get('agentWork')['3']);
  143.         } else {
  144.             $propAgents->setAgThree(null);
  145.             $propAgents->setAgThreePerc(0);
  146.             $propAgents->setAgThreeWork(null);
  147.         }
  148.         if($request->request->get('agent')['Agent4']['agentId']!=''){
  149.             $propAgents->setAgFour($request->request->get('agent')['Agent4']['agentId']);
  150.             $propAgents->setAgFourPerc($request->request->get('percent')['4']);
  151.             $propAgents->setAgFourWork($request->request->get('agentWork')['4']);
  152.         } else {
  153.             $propAgents->setAgFour(null);
  154.             $propAgents->setAgFourPerc(0);
  155.             $propAgents->setAgFourWork(null);
  156.         }
  157.         if($request->request->get('agent')['Agent1']['agentId']!=''){
  158.             $propAgents->setAgOne($request->request->get('agent')['Agent1']['agentId']);
  159.             $propAgents->setAgOnePerc($request->request->get('percent')['1']);
  160.             $propAgents->setAgOneWork($request->request->get('agentWork')['1']);
  161.         } else {
  162.             $propAgents->setAgOne(null);
  163.             $propAgents->setAgOnePerc(0);
  164.             $propAgents->setAgOneWork(null);
  165.         }
  166.         if($request->request->get('agent')['Agent2']['agentId']!=''){
  167.             $propAgents->setAgTwo($request->request->get('agent')['Agent2']['agentId']);
  168.             $propAgents->setAgTwoPerc($request->request->get('percent')['2']);
  169.             $propAgents->setAgTwoWork($request->request->get('agentWork')['2']);
  170.         } else {
  171.             $propAgents->setAgTwo(null);
  172.             $propAgents->setAgTwoPerc(0);
  173.             $propAgents->setAgTwoWork(null);
  174.         }
  175.         if ($request->request->get('percent')['1']==''){
  176.             $propAgents->setAgOnePerc(0);
  177.         } else {
  178.             $propAgents->setAgOnePerc($request->request->get('percent')['1']);
  179.         }
  180.         /* prevenir que contacto no este en blanco */
  181.         $proposal = new Proposal();
  182.         $form $this->createProposalCreateForm($proposal);
  183.         $form->handleRequest($request);
  184.         $em $this->getDoctrine()->getManager();
  185. //        $userAgents = $em->getRepository(User::class)->findAll();
  186.         /* INICIO Consulta de agente activos MICE */
  187.         $parameters = array(
  188.             'status' => true
  189.         );
  190.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  191.         $dql 'SELECT us
  192.                 FROM App\Entity\User us
  193.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  194.                 ORDER BY us.name ASC';
  195.         $query $em->createQuery($dql)->setParameters($parameters);
  196.         $userAgents $query->getResult();
  197.         /* FIN Consulta de agente activos MICE */
  198.         $contactId $form->get('contactId')->getData();
  199.         $contactIdConstraint = new Assert\NotBlank();
  200.         $errorList $this->validator->validate($contactId$contactIdConstraint);
  201.         if (!count($errorList) == 0) {
  202.             $errorMessage_contact $this->translator->trans('Check contact field');
  203.         } else {
  204.             $errorMessage_contact "";
  205.         }
  206.         if (!is_null($contactId)){
  207.             /* Consulta el agente comercial asignado */
  208.             $data_contact $em->getRepository(ClientContact::class)->findOneById($contactId);
  209.             $proposal->setAgencommercialId($data_contact->getAssignedAgent());
  210.         }
  211.         $office_proposal $form->get('officeId')->getData();
  212.         if(!is_null($office_proposal)){
  213.             $proposal->setOfficeId($office_proposal->getId());
  214.         }
  215.         $client_proposal $form->get('clientId')->getData();
  216.         if(!is_null($client_proposal)){
  217.             $proposal->setClientId($client_proposal->getId());
  218.         }
  219. //        $agent_proposal = $form->get('agentId')->getData();
  220.         $agent_proposal = ($request->request->get('agent')['Agent1']['agentId']);
  221.         if(!(is_null($agent_proposal) or empty($agent_proposal))){
  222.             $proposal->setAgentId($agent_proposal);
  223.         }
  224.         $team_proposal $form->get('teamId')->getData();
  225.         if(!is_null($team_proposal)){
  226.             $proposal->setTeamId($team_proposal->getId());
  227.         }
  228.         $idmusic_proposal $form->get('idMusic')->getData();
  229.         if(!is_null($idmusic_proposal)){
  230.             $proposal->setIdMusic($idmusic_proposal->getId());
  231.         }
  232.         //$agenttwo_proposal = array(($request->request->get('agent')['Agent2']['agentId']),($request->request->get('agent')['Agent3']['agentId']),($request->request->get('agent')['Agent4']['agentId']));
  233.         $agenttwo_proposal = array();
  234.         if (($request->request->get('agent')['Agent2']['agentId'])!=''){
  235.             //agrego a 2
  236.             $agenttwo_proposal[] = ($request->request->get('agent')['Agent2']['agentId']);
  237.             if (($request->request->get('agent')['Agent3']['agentId'])!=''){
  238.                 //agrego a 3
  239.                 $agenttwo_proposal[] = ($request->request->get('agent')['Agent3']['agentId']);
  240.                 if (($request->request->get('agent')['Agent4']['agentId'])!=''){
  241.                     //agrego a 4
  242.                     $agenttwo_proposal[] = ($request->request->get('agent')['Agent4']['agentId']);
  243.                 }
  244.             } else {
  245.                 // no agrego 3
  246.                 if (($request->request->get('agent')['Agent4']['agentId'])!=''){
  247.                     //agrego a 4
  248.                     $agenttwo_proposal[] = ($request->request->get('agent')['Agent4']['agentId']);
  249.                 }
  250.             }
  251.         } else {
  252.             // no agrego 2
  253.             if (($request->request->get('agent')['Agent3']['agentId'])!=''){
  254.                 //agrego a 3
  255.                 $agenttwo_proposal[] = ($request->request->get('agent')['Agent3']['agentId']);
  256.             } else {
  257.                 // no agrego 3
  258.                 if (($request->request->get('agent')['Agent4']['agentId'])!=''){
  259.                     //agrego a 4
  260.                     $agenttwo_proposal[] = ($request->request->get('agent')['Agent4']['agentId']);
  261.                 }
  262.             }
  263.         }
  264.         $str_array_agents implode(","$agenttwo_proposal);
  265.         $proposal->setAgentTwoId($str_array_agents);
  266.         if(isset($request->request->get('proposal_esp')['type'])){
  267. //            d($request->request->get('proposal')['type']);
  268.             $select_type $request->request->get('proposal_esp')['type'];
  269.             if(!is_null($select_type)){
  270.                 $proposal->setSelectType(implode(","$select_type));
  271.             }
  272.         }
  273.         $type_supplier $em->getRepository(SupplierSettingsType::class)->findAll();
  274.         $type = array();
  275.         foreach($type_supplier as $typesupplier){
  276.             $type[$typesupplier->getBase()] = array(
  277.                 'typeName' => $typesupplier->getBase()
  278.             );
  279.         }
  280.         if($form->isValid() && count($errorList) == 0)
  281.         {
  282.             $proposal->setContactId($contactId);
  283.             $proposal->setStatus('Pending');
  284.             //Access Key para entrar en el proposal
  285.             $accessKey md5('CR-JDEF'rand() * time());
  286.             $proposal->setAccessKey($accessKey);
  287.             $proposal->setViewedAt(new \DateTime("now"));
  288.             /* Obtengo usuario logueado */
  289.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  290.             $user_id $user_logueado->getId();
  291.             $proposal->setCreatedId($user_id);
  292.             $proposal->setUpdatedId($user_id);
  293.             /* Gestión de eventos en Log */
  294.             $user_lastname $user_logueado->getLastname();
  295.             $user_name $user_logueado->getName();
  296.             $user_email $user_logueado->getEmail();
  297.             $user_rol $user_logueado->getRoles();
  298.             $event_url $request->getPathInfo();
  299.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  300.             // -------------- INICIO: Si el usuario logeado es un ROLE_USER (no es ADMIN) no hay asignacion de agentes
  301.             if ($user_logueado->getRole()=='ROLE_USER'){
  302.                 $proposal->setAgentId(null);
  303.                 $proposal->setAgentTwoId(null);
  304.                 $propAgents->setAgOne(null);
  305.                 $propAgents->setAgOnePerc(null);
  306.                 $propAgents->setAgOneWork(null);
  307.                 $propAgents->setAgTwo(null);
  308.                 $propAgents->setAgTwoPerc(null);
  309.                 $propAgents->setAgTwoWork(null);
  310.                 $propAgents->setAgThree(null);
  311.                 $propAgents->setAgThreePerc(null);
  312.                 $propAgents->setAgThreeWork(null);
  313.                 $propAgents->setAgFour(null);
  314.                 $propAgents->setAgFourPerc(null);
  315.                 $propAgents->setAgFourWork(null);
  316.             }
  317.             // -------------- FIN: Si el usuario logeado es un ROLE_USER (no es ADMIN) no hay asignacion de agentes
  318.             if (empty($proposal->getDateProposedAt())){
  319.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  320.             }
  321.                 $em->persist($proposal);
  322.                 $em->flush();
  323.                 $zeroPropAgents $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  324.                 $identificador $proposal->getId();
  325.                 $propAgents->setIdProp($identificador);
  326.                 $em->persist($propAgents);
  327.                 $em->flush();
  328.                 // Se verifica si es la primera asignacion de agente para enviar correo al cliente
  329.                     if (is_null($zeroPropAgents)){
  330.                         // Primera insercion del agente
  331.                         if (($propAgents->getAgOne() != 0) and (!empty($propAgents->getAgOne()))){
  332.                             // y no viene vacio ni en cero -- A L E R T A R
  333.                             // Envio de correo notificacion al CLIENTE asignado
  334.                             $time = new \DateTime("now");
  335.                             $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  336.                             $allAgents '<table width="100%">';
  337.                             if ($propAgents->getAgOne() != 0){
  338.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgOne());
  339.                                 $allAgents $allAgents '<tr>
  340.                                     <td width="10%">'.
  341. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  342.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  343.                                     </td width="90%">
  344.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  345.                             }
  346.                             if (($propAgents->getAgTwo() != 0) and (!empty($propAgents->getAgTwo()))){
  347.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgTwo());
  348.                                 $allAgents $allAgents '<tr height="10px"></tr><tr>
  349.                                     <td width="10%">'.
  350. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  351.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  352.                                     </td width="90%">
  353.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  354.                             }
  355.                             if (($propAgents->getAgThree() != 0) and (!empty($propAgents->getAgThree()))){
  356.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgThree());
  357.                                 $allAgents $allAgents '<tr height="10px"></tr><tr>
  358.                                     <td width="10%">'.
  359. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  360.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  361.                                     </td width="90%">
  362.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  363.                             }
  364.                             if (($propAgents->getAgFour() != 0) and (!empty($propAgents->getAgFour()))){
  365.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgFour());
  366.                                 $allAgents $allAgents '<tr height="10px"></tr><tr>
  367.                                     <td width="10%">'.
  368. //                                    '<img src="https://'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  369.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  370.                                     </td width="90%">
  371.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  372.                             }
  373.                             $allAgents $allAgents .'</table>';
  374.                             $clara $em->getRepository(User::class)->findOneByEmail('clara.pedreno@avexpress.tv');
  375.                             // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  376.                             $tabClara '<table width="100%">';
  377.                             $tabClara $tabClara '<tr>
  378.                                 <td width="10%">'.
  379. //                                    '<img src="https://'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  380.                                 '<img src="https://inout.mante.solutions/'$clara->getPicture(). '" alt="No Image" height="45" width="45">
  381.                                 </td width="90%">
  382.                                 <td>' $clara->getName().' '$clara->getLastName().' <br> Teléfono: '$clara->getMobile() .' <br> Correo electrónico: '$clara->getEmail() .'</td></tr>';
  383.                             $tabClara $tabClara .'</table>';
  384.                             // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  385.                             // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  386.                             if (!(strpos($proposal->getSelectType(),'TECNOLOGÍA')===false)){
  387.                                 // Tecnología estaba seleccionada entre las opciones
  388.                                 $jorge $em->getRepository(User::class)->findOneByEmail('jorge.defreitas@develup.solutions');
  389.                                 $tabJorge '<table width="100%">';
  390.                                 $tabJorge $tabJorge '<tr>
  391.                                 <td width="10%">'.
  392. //                                    '<img src="https://'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  393.                                     '<img src="https://inout.mante.solutions/'$jorge->getPicture(). '" alt="No Image" height="45" width="45">
  394.                                 </td width="90%">
  395.                                 <td>' $jorge->getName().' '$jorge->getLastName().' <br> Teléfono: '$jorge->getMobile() .' <br> Correo electrónico: '$jorge->getEmail() .'</td></tr>';
  396.                                 $tabJorge $tabJorge .'</table>';
  397.                                 $tabClara $tabClara .'</p><p><b>Departamento de Tecnología&nbsp;</b></p><p>'$tabJorge;
  398.                             }
  399.                             // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  400.                             $rafa $em->getRepository(User::class)->findOneByEmail('rafael.guerrero@inout-travel.com');
  401.                             // Tabla de datos RAFA
  402.                             $tabRafa '<table width="100%">';
  403.                             $tabRafa $tabRafa '<tr>
  404.                                 <td width="10%">'.
  405. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  406.                                 '<img src="https://inout.mante.solutions/'$rafa->getPicture(). '" alt="No Image" height="45" width="45">
  407.                                 </td width="90%">
  408.                                 <td>' $rafa->getName().' '$rafa->getLastName().' <br> Teléfono: '$rafa->getMobile() .' <br> Correo electrónico: '$rafa->getEmail() .'</td></tr>';
  409.                             $tabRafa $tabRafa .'</table>';
  410.                             // FIN Tabla de datos RAFA
  411.                             $salva $em->getRepository(User::class)->findOneByEmail('salvador@avexpress.tv');
  412.                             // Tabla de datos SALVA
  413.                             $tabSalva '<table width="100%">';
  414.                             $tabSalva $tabSalva '<tr>
  415.                                 <td width="10%">'.
  416. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $salva->getPicture(). '" alt="No Image" height="45" width="45">
  417.                                 '<img src="https://inout.mante.solutions/'$salva->getPicture(). '" alt="No Image" height="45" width="45">
  418.                                 </td width="90%">
  419.                                 <td>' $salva->getName().' '$salva->getLastName().' <br> Teléfono: '$salva->getMobile() .' <br> Correo electrónico: '$salva->getEmail() .'</td></tr>';
  420.                             $tabSalva $tabSalva .'</table>';
  421.                             // FIN Tabla de datos SALVA
  422.                             $zclient $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  423.                             $mailAgent[] = $agent->getEmail();
  424.                             $agentMail $agent->getEmail();
  425.                             $zagentReplyTo = array(
  426.                                 $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  427.                             );
  428.                             $firmGmail $agent->getFirmGmail();
  429.                             $mailAgentSent = array(
  430.                                 $zclient->getEmail() => $zclient->getName()
  431.                             );
  432.                             $mailAgentFrom = array(
  433.                                 $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  434.                             );
  435.                             $data = array(
  436. //                                'body' => ''. '<p>Estimado cliente,</p><p>Gracias por esta nueva solicitud y por confiar una vez más en nosotros.&nbsp;</p><p>Su petición ha sido dada de alta en nuestro sistema y ya estamos trabajando en su propuesta, en breve recibirá una comunicación de nuestro agente.</p><p>&nbsp;</p><p><b><h2>' . $proposal->getTitle() . '</h2></b></p><p></p><p>Su equipo para esta propuesta estará formado por:</p><p>&nbsp;</p><p></p><b>Project Manager&nbsp;</b></p><p>'. $allAgents .'</p><p></p><b><br>Director de producción audiovisual y escenografía</b></p><p>'. $tabSalva . '</p><p><b>Director de departamento y creatividad&nbsp;</b></p><p>'. $tabRafa . '</p><p><b>Departamento de Eventos&nbsp;</b></p><p>Teléfono: (+34) 911 878 393 - Correo electrónico: events@inout-travel.com</p><p>&nbsp;</p><p>Gracias de nuevo por su amable petición, en breve recibirá nuestra propuesta.&nbsp;</p><p>&nbsp;</p>',
  437.                                 'body' => '''<p>Estimado cliente,</p><p>Gracias por esta nueva solicitud y por confiar una vez más en nosotros.&nbsp;</p><p>Su petición ha sido dada de alta en nuestro sistema y ya estamos trabajando en su propuesta, en breve recibirá una comunicación de nuestro agente.</p><p>&nbsp;</p><p><b><h2>' $proposal->getTitle() . '</h2></b></p><p></p><p>Su equipo para esta propuesta estará formado por:</p><p>&nbsp;</p><p></p><b>Project Manager&nbsp;</b></p><p>'$allAgents .'</p><p><b>Departamento de Renderización y Creatividad&nbsp;</b></p><p>'$tabClara .'</p><p></p><b><br>Director de producción audiovisual y escenografía</b></p><p>'$tabSalva '</p><p><b>Director de departamento y creatividad&nbsp;</b></p><p>'$tabRafa '</p><p><b>Departamento de Eventos&nbsp;</b></p><p>Teléfono: (+34) 911 878 393 - Correo electrónico: events@inout-travel.com</p><p>&nbsp;</p><p>Gracias de nuevo por su amable petición, en breve recibirá nuestra propuesta.&nbsp;</p><p>&nbsp;</p>',
  438.                                 'firm' => ''.'<div dir="ltr" style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 12.8px;"><table border="0" cellpadding="0" style="font-size: 13.3333px; font-family: Verdana, Arial, Helvetica, sans-serif;"><tbody><tr><td width="35%" style="font-family: arial, sans-serif; margin: 0px;"><img src="http://firmas.inout.events/firmas/events/LOGO_INOUT_TRAVEL&EVENTS.png" alt="Logo InOut Travel" class="CToWUd"></td><td width="65%" style="font-family: arial, sans-serif; margin: 0px;"><p style="margin-bottom: 0px;"></p><span style="font-size: small; color: rgb(0, 121, 186);"><b>M.I.C.E Dept.</b>&nbsp;<br></span><span style="font-size: x-small; color: rgb(0, 121, 186);">Phone :&nbsp;<a href="tel:+34%20911%2087%2083%2093" value="+34911878393" target="_blank" style="color: rgb(17, 85, 204);">+34 91 187 83 93</a>&nbsp;/&nbsp;<a href="tel:+34%20917%2058%2007%2020" value="+34917580720" target="_blank" style="color: rgb(17, 85, 204);">+34 91 758 07 20</a>&nbsp;</span><span style="font-size: x-small; color: rgb(0, 121, 186);">Fax :&nbsp;<a href="tel:+34%20911%2087%2083%2090" value="+34911878390" target="_blank" style="color: rgb(17, 85, 204);">+34 91 187 83&nbsp;90</a>&nbsp;<br></span><span style="font-size: x-small; color: rgb(0, 121, 186);"><u></u><a href="mailto:eventos@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);">eventos@inout-travel.com&nbsp;</a><br></span><span style="font-size: small; color: rgb(0, 128, 128);"><a href="http://s.wisestamp.com/links?url=http%3A%2F%2Fs.wisestamp.com%2Flinks%3Furl%3Dhttps%253A%252F%252Furldefense.proofpoint.com%252Fv1%252Furl%253Fu%253Dhttp%253A%252F%252Fs.wisestamp.com%252Flinks%253Furl%25253Dhttp%2525253A%2525252F%2525252Fs.wisestamp.com%2525252Flinks%2525253Furl%2525253Dhttp%252525253A%252525252F%252525252Fwww.inout-travel.com%25252526amp%2525253Bsn%2525253D%252526sn%25253D%2526amp%253Bk%253D2BjihEEf49EEnl2c9cXhDQ%25253D%25253D%25250A%2526amp%253Br%253DoVBgYJTSgqKobIhrxHXwWFa1hslDOFZMhTZjQm3slhE%25253D%25250A%2526amp%253Bm%253DiRaDYfk0sXIZzunVdLJPLTs52u8wk7HMfjdCh290Q5I%25253D%25250A%2526amp%253Bs%253D1a9ff7d8f4f1fb953d74200f6537f77ca64418a966d39f4786e9aed71833d44c%26amp%3Bsn%3D&amp;sn=" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=http://s.wisestamp.com/links?url%3Dhttp%253A%252F%252Fs.wisestamp.com%252Flinks%253Furl%253Dhttps%25253A%25252F%25252Furldefense.proofpoint.com%25252Fv1%25252Furl%25253Fu%25253Dhttp%25253A%25252F%25252Fs.wisestamp.com%25252Flinks%25253Furl%2525253Dhttp%252525253A%252525252F%252525252Fs.wisestamp.com%252525252Flinks%252525253Furl%252525253Dhttp%25252525253A%25252525252F%25252525252Fwww.inout-travel.com%2525252526amp%252525253Bsn%252525253D%25252526sn%2525253D%252526amp%25253Bk%25253D2BjihEEf49EEnl2c9cXhDQ%2525253D%2525253D%2525250A%252526amp%25253Br%25253DoVBgYJTSgqKobIhrxHXwWFa1hslDOFZMhTZjQm3slhE%2525253D%2525250A%252526amp%25253Bm%25253DiRaDYfk0sXIZzunVdLJPLTs52u8wk7HMfjdCh290Q5I%2525253D%2525250A%252526amp%25253Bs%25253D1a9ff7d8f4f1fb953d74200f6537f77ca64418a966d39f4786e9aed71833d44c%2526amp%253Bsn%253D%26sn%3D&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNGFDs4JRUVibUfVQaFSuQ0u9PVwzQ" style="color: rgb(17, 85, 204); font-size: x-small;">http://www.inout-travel.com</a></span><p></p><span style="font-size: small; color: rgb(51, 102, 255);"><a href="https://www.facebook.com/InOutTravel/" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://www.facebook.com/InOutTravel/&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNH3zSTpYN6Jn0ibd4io116DlxPPNg" style="color: rgb(17, 85, 204);"><span style="color: rgb(51, 102, 255);"><img src="https://ci5.googleusercontent.com/proxy/8luozs3Ef6tofaP9YvpFMJfUFEqz1QLUJ4pmjmbiZBmIbtfxbFDGS7mVrEd2y32b_P4vDTb14QmA1gowrSAKvtWxet9R3_02VVFOV4S3mKU=s0-d-e1-ft#https://s3.amazonaws.com/images.wisestamp.com/facebook.png" alt="Facebook" width="16" height="16" border="0" class="CToWUd"></span></a><span lang="ES">&nbsp;</span><a href="https://twitter.com/inout_travel?lang=es" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://twitter.com/inout_travel?lang%3Des&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNEe-ltzYrhEmNPcORkqhPnlInLutw" style="color: rgb(17, 85, 204);"><span style="color: rgb(51, 102, 255);"><img src="https://ci5.googleusercontent.com/proxy/6sqL0BxRRr4QwfAOhK_hNNAXIpUHZNg-gl3CPQKITbX2dpT2jMTzf3zlwMmhB9BgxZehJzFQT_AJzsskN1uQR-SqppTRLIbJIILDeDNjlA=s0-d-e1-ft#https://s3.amazonaws.com/images.wisestamp.com/twitter.png" alt="Twitter" width="16" height="16" border="0" class="CToWUd"></span></a><span lang="ES">&nbsp; &nbsp;</span><span style="color: rgb(255, 102, 0);"><strong><span lang="ES">Visítanos en las redes sociales!!</span></strong></span></span></td></tr></tbody></table><img src="https://ci4.googleusercontent.com/proxy/rDdypMfZKWPkRRuCB3bp8PSQXo0k5aswGQRjFzy71EB2XEQkr4_rbaroShG2FEJbnrmwoEfE3-Z6r_hNFlfRMNPC1X8yjwJ2eOmZ1DagWHkl8sh7Y60=s0-d-e1-ft#http://www.inout-travel.com/inout-travel/img/logo/firma_MICE.png" class="CToWUd"><br><div></div></div><div dir="ltr" style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 12.8px;"><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">De conformidad con lo dispuesto en la Ley Orgánica 15/1999 de Protección de Datos de carácter Personal VIAJES IN OUT TRAVEL, S.L., domiciliado en&nbsp;</span><a href="https://maps.google.com/?q=C/+CRISTOBAL+BORDIU,+53+-+28003+MADRID&amp;entry=gmail&amp;source=g" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://maps.google.com/?q%3DC/%2BCRISTOBAL%2BBORDIU,%2B53%2B-%2B28003%2BMADRID%26entry%3Dgmail%26source%3Dg&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNFHPMBadB0TD0U63EsqPiOZ7TPldg" style="color: rgb(17, 85, 204);"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">C/ CRISTOBAL BORDIU, 53 - 28003 MADRID</span></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">, le informa que los datos que nos ha proporcionado formarán parte de un fichero de datos de carácter personal, responsabilidad de dicha entidad, con la finalidad de gestionar las comunicaciones que pudiera mantener con el personal de la misma.</span></p><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">En el supuesto de que desee ejercitar los derechos que le asisten de acceso, rectificación, cancelación y oposición dirija una comunicación por escrito a VIAJES IN OUT TRAVEL, S.L. a la dirección&nbsp;</span><a href="https://maps.google.com/?q=C/+CRISTOBAL+BORDIU,+53+-+28003+MADRID&amp;entry=gmail&amp;source=g" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://maps.google.com/?q%3DC/%2BCRISTOBAL%2BBORDIU,%2B53%2B-%2B28003%2BMADRID%26entry%3Dgmail%26source%3Dg&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNFHPMBadB0TD0U63EsqPiOZ7TPldg" style="color: rgb(17, 85, 204);"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">C/ CRISTOBAL BORDIU, 53 - 28003 MADRID</span></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;&nbsp;incluyendo copia de su Documento Nacional de Identidad o documento identificativo equivalente, ó a través de un mensaje de correo electrónico a la dirección&nbsp;</span><a href="mailto:info@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">info@inout-travel.com</span></b></a><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">.</span></b></p><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">La información contenida en el presente mensaje de correo electrónico es confidencial y su acceso únicamente está autorizado al destinatario original del mismo, quedando prohibida cualquier comunicación, divulgación, o reenvío, tanto del mensaje como de su contenido. En el supuesto de que usted no sea el destinatario autorizado, le rogamos borre el contenido del mensaje y nos comunique dicha circunstancia a través de un mensaje de correo electrónico a la dirección&nbsp;</span><a href="mailto:info@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">info@inout-travel.com</span></b></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;o al teléfono<b>&nbsp;</b></span><a href="tel:911%2087%2083%2091" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">+34&nbsp;</span></b></a><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;</span></b><a href="tel:917%2058%2007%2085" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">917580785</span></b></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">.</span></p></div>',
  439.                             );
  440.                             if (!empty($zclient->getEmail())) {
  441.                                 // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  442.                                 $transporter = new \Swift_SmtpTransport();
  443.                                 $transporter->setHost('smtp.gmail.com')
  444.                                     ->setEncryption('ssl')//ssl / tls
  445.                                     ->setPort(465)// 465 / 587
  446.                                     ->setUsername($agent->getEmail())
  447.                                     ->setPassword($agent->getPassGmail());
  448.                                 $mailer = new \Swift_Mailer($transporter);
  449.                                 $message = new \Swift_Message();
  450.                                 $message->setSubject('P#' $proposal->getId() . ', Alta de petición')
  451.                                     ->setSender($agentMail)
  452.                                     ->setFrom($mailAgentFrom)
  453.                                     ->setReplyTo($zagentReplyTo)
  454.                                     ->setTo($mailAgentSent)
  455.                                     ->setBody(
  456.                                         $this->renderView(
  457.                                             'mail/structure-mail.html.twig',
  458.                                             array('data' => $data)
  459.                                         ),
  460.                                         'text/html'
  461.                                     );
  462.                                 $mailer->send($message);
  463.                             }
  464.                         }
  465.                     } else {
  466.                         // verificamos si lo que existia en la tabla en agentOne es cero es porque no se le habia asignado a nadie
  467.                         if ($zeroPropAgents->getAgOne() == 0){
  468.                             // A L E R T A R
  469.                             // Envio de correo notificacion al CLIENTE asignado
  470.                             $time = new \DateTime("now");
  471.                             $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  472.                             $allAgents '<table width="100%">';
  473.                             if ($propAgents->getAgOne() != 0){
  474.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgOne());
  475.                                 $allAgents $allAgents '<tr>
  476.                                     <td width="10%">'.
  477. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  478.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  479.                                     </td width="90%">
  480.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  481.                             }
  482.                             if ($propAgents->getAgTwo() != 0){
  483.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgTwo());
  484.                                 $allAgents $allAgents '<tr height="10px"></tr><tr>
  485.                                     <td width="10%">'.
  486. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  487.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  488.                                     </td width="90%">
  489.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  490.                             }
  491.                             if ($propAgents->getAgThree() != 0){
  492.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgThree());
  493.                                 $allAgents $allAgents '<tr height="10px"></tr><tr>
  494.                                     <td width="10%">'.
  495. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  496.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  497.                                     </td width="90%">
  498.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  499.                             }
  500.                             if ($propAgents->getAgFour() != 0){
  501.                                 $age $em->getRepository(User::class)->findOneById($propAgents->getAgFour());
  502.                                 $allAgents $allAgents '<tr height="10px"></tr><tr>
  503.                                     <td width="10%">'.
  504. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  505.                                     '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  506.                                     </td width="90%">
  507.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  508.                             }
  509.                             $allAgents $allAgents .'</table>';
  510.                             $clara $em->getRepository(User::class)->findOneByEmail('clara.pedreno@avexpress.tv');
  511.                             // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  512.                             $tabClara '<table width="100%">';
  513.                             $tabClara $tabClara '<tr>
  514.                                 <td width="10%">'.
  515. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  516.                                 '<img src="https://inout.mante.solutions/'$clara->getPicture(). '" alt="No Image" height="45" width="45">
  517.                                 </td width="90%">
  518.                                 <td>' $clara->getName().' '$clara->getLastName().' <br> Teléfono: '$clara->getMobile() .' <br> Correo electrónico: '$clara->getEmail() .'</td></tr>';
  519.                             $tabClara $tabClara .'</table>';
  520.                             // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  521.                             // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  522.                             if (!(strpos($proposal->getSelectType(),'TECNOLOGÍA')===false)){
  523.                                 // Tecnología estaba seleccionada entre las opciones
  524.                                 $jorge $em->getRepository(User::class)->findOneByEmail('jorge.defreitas@develup.solutions');
  525.                                 $tabJorge '<table width="100%">';
  526.                                 $tabJorge $tabJorge '<tr>
  527.                                 <td width="10%">'.
  528. //                                    '<img src="https://'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  529.                                     '<img src="https://inout.mante.solutions/'$jorge->getPicture(). '" alt="No Image" height="45" width="45">
  530.                                 </td width="90%">
  531.                                 <td>' $jorge->getName().' '$jorge->getLastName().' <br> Teléfono: '$jorge->getMobile() .' <br> Correo electrónico: '$jorge->getEmail() .'</td></tr>';
  532.                                 $tabJorge $tabJorge .'</table>';
  533.                                 $tabClara $tabClara .'</p><p><b>Departamento de Tecnología&nbsp;</b></p><p>'$tabJorge;
  534.                             }
  535.                             // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  536.                             $rafa $em->getRepository(User::class)->findOneByEmail('rafael.guerrero@inout-travel.com');
  537.                             // Tabla de datos RAFA
  538.                             $tabRafa '<table width="100%">';
  539.                             $tabRafa $tabRafa '<tr>
  540.                                 <td width="10%">'.
  541. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  542.                                 '<img src="https://inout.mante.solutions/'$rafa->getPicture(). '" alt="No Image" height="45" width="45">
  543.                                 </td width="90%">
  544.                                 <td>' $rafa->getName().' '$rafa->getLastName().' <br> Teléfono: '$rafa->getMobile() .' <br> Correo electrónico: '$rafa->getEmail() .'</td></tr>';
  545.                             $tabRafa $tabRafa .'</table>';
  546.                             // FIN Tabla de datos RAFA
  547.                             $salva $em->getRepository(User::class)->findOneByEmail('salvador@avexpress.tv');
  548.                             // Tabla de datos SALVA
  549.                             $tabSalva '<table width="100%">';
  550.                             $tabSalva $tabSalva '<tr>
  551.                                 <td width="10%">'.
  552. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $salva->getPicture(). '" alt="No Image" height="45" width="45">
  553.                                 '<img src="https://inout.mante.solutions/'$salva->getPicture(). '" alt="No Image" height="45" width="45">
  554.                                 </td width="90%">
  555.                                 <td>' $salva->getName().' '$salva->getLastName().' <br> Teléfono: '$salva->getMobile() .' <br> Correo electrónico: '$salva->getEmail() .'</td></tr>';
  556.                             $tabSalva $tabSalva .'</table>';
  557.                             // FIN Tabla de datos SALVA
  558.                             $zclient $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  559.                             $mailAgent[] = $agent->getEmail();
  560.                             $agentMail $agent->getEmail();
  561.                             $zagentReplyTo = array(
  562.                                 $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  563.                             );
  564.                             $firmGmail $agent->getFirmGmail();
  565.                             $mailAgentSent = array(
  566.                                 $zclient->getEmail() => $zclient->getName()
  567.                             );
  568.                             $data = array(
  569. //                                'body' => ''. '<p>Estimado cliente,</p><p>Gracias por esta nueva solicitud y por confiar una vez más en nosotros.&nbsp;</p><p>Su petición ha sido dada de alta en nuestro sistema y ya estamos trabajando en su propuesta, en breve recibirá una comunicación de nuestro agente.</p><p>&nbsp;</p><p><b><h2>' . $proposal->getTitle() . '</h2></b></p><p></p><p>Su equipo para esta propuesta estará formado por:</p><p>&nbsp;</p><p></p><b>Project Manager&nbsp;</b></p><p>'. $allAgents .'</p><p></p><b><br>Director de producción audiovisual y escenografía</b></p><p>'. $tabSalva . '</p><p><b>Director de departamento y creatividad&nbsp;</b></p><p>'. $tabRafa . '</p><p><b>Departamento de Eventos&nbsp;</b></p><p>Teléfono: (+34) 911 878 393 - Correo electrónico: events@inout-travel.com</p><p>&nbsp;</p><p>Gracias de nuevo por su amable petición, en breve recibirá nuestra propuesta.&nbsp;</p><p>&nbsp;</p>',
  570.                                 'body' => '''<p>Estimado cliente,</p><p>Gracias por esta nueva solicitud y por confiar una vez más en nosotros.&nbsp;</p><p>Su petición ha sido dada de alta en nuestro sistema y ya estamos trabajando en su propuesta, en breve recibirá una comunicación de nuestro agente.</p><p>&nbsp;</p><p><b><h2>' $proposal->getTitle() . '</h2></b></p><p></p><p>Su equipo para esta propuesta estará formado por:</p><p>&nbsp;</p><p></p><b>Project Manager&nbsp;</b></p><p>'$allAgents .'</p><p><b>Departamento de Renderización y Creatividad&nbsp;</b></p><p>'$tabClara .'</p><p></p><b><br>Director de producción audiovisual y escenografía</b></p><p>'$tabSalva '</p><p><b>Director de departamento y creatividad&nbsp;</b></p><p>'$tabRafa '</p><p><b>Departamento de Eventos&nbsp;</b></p><p>Teléfono: (+34) 911 878 393 - Correo electrónico: events@inout-travel.com</p><p>&nbsp;</p><p>Gracias de nuevo por su amable petición, en breve recibirá nuestra propuesta.&nbsp;</p><p>&nbsp;</p>',
  571.                                 'firm' => ''.'<div dir="ltr" style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 12.8px;"><table border="0" cellpadding="0" style="font-size: 13.3333px; font-family: Verdana, Arial, Helvetica, sans-serif;"><tbody><tr><td width="35%" style="font-family: arial, sans-serif; margin: 0px;"><img src="http://firmas.inout.events/firmas/events/LOGO_INOUT_TRAVEL&EVENTS.png" alt="Logo InOut Travel" class="CToWUd"></td><td width="65%" style="font-family: arial, sans-serif; margin: 0px;"><p style="margin-bottom: 0px;"></p><span style="font-size: small; color: rgb(0, 121, 186);"><b>M.I.C.E Dept.</b>&nbsp;<br></span><span style="font-size: x-small; color: rgb(0, 121, 186);">Phone :&nbsp;<a href="tel:+34%20911%2087%2083%2093" value="+34911878393" target="_blank" style="color: rgb(17, 85, 204);">+34 91 187 83 93</a>&nbsp;/&nbsp;<a href="tel:+34%20917%2058%2007%2020" value="+34917580720" target="_blank" style="color: rgb(17, 85, 204);">+34 91 758 07 20</a>&nbsp;</span><span style="font-size: x-small; color: rgb(0, 121, 186);">Fax :&nbsp;<a href="tel:+34%20911%2087%2083%2090" value="+34911878390" target="_blank" style="color: rgb(17, 85, 204);">+34 91 187 83&nbsp;90</a>&nbsp;<br></span><span style="font-size: x-small; color: rgb(0, 121, 186);"><u></u><a href="mailto:eventos@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);">eventos@inout-travel.com&nbsp;</a><br></span><span style="font-size: small; color: rgb(0, 128, 128);"><a href="http://s.wisestamp.com/links?url=http%3A%2F%2Fs.wisestamp.com%2Flinks%3Furl%3Dhttps%253A%252F%252Furldefense.proofpoint.com%252Fv1%252Furl%253Fu%253Dhttp%253A%252F%252Fs.wisestamp.com%252Flinks%253Furl%25253Dhttp%2525253A%2525252F%2525252Fs.wisestamp.com%2525252Flinks%2525253Furl%2525253Dhttp%252525253A%252525252F%252525252Fwww.inout-travel.com%25252526amp%2525253Bsn%2525253D%252526sn%25253D%2526amp%253Bk%253D2BjihEEf49EEnl2c9cXhDQ%25253D%25253D%25250A%2526amp%253Br%253DoVBgYJTSgqKobIhrxHXwWFa1hslDOFZMhTZjQm3slhE%25253D%25250A%2526amp%253Bm%253DiRaDYfk0sXIZzunVdLJPLTs52u8wk7HMfjdCh290Q5I%25253D%25250A%2526amp%253Bs%253D1a9ff7d8f4f1fb953d74200f6537f77ca64418a966d39f4786e9aed71833d44c%26amp%3Bsn%3D&amp;sn=" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=http://s.wisestamp.com/links?url%3Dhttp%253A%252F%252Fs.wisestamp.com%252Flinks%253Furl%253Dhttps%25253A%25252F%25252Furldefense.proofpoint.com%25252Fv1%25252Furl%25253Fu%25253Dhttp%25253A%25252F%25252Fs.wisestamp.com%25252Flinks%25253Furl%2525253Dhttp%252525253A%252525252F%252525252Fs.wisestamp.com%252525252Flinks%252525253Furl%252525253Dhttp%25252525253A%25252525252F%25252525252Fwww.inout-travel.com%2525252526amp%252525253Bsn%252525253D%25252526sn%2525253D%252526amp%25253Bk%25253D2BjihEEf49EEnl2c9cXhDQ%2525253D%2525253D%2525250A%252526amp%25253Br%25253DoVBgYJTSgqKobIhrxHXwWFa1hslDOFZMhTZjQm3slhE%2525253D%2525250A%252526amp%25253Bm%25253DiRaDYfk0sXIZzunVdLJPLTs52u8wk7HMfjdCh290Q5I%2525253D%2525250A%252526amp%25253Bs%25253D1a9ff7d8f4f1fb953d74200f6537f77ca64418a966d39f4786e9aed71833d44c%2526amp%253Bsn%253D%26sn%3D&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNGFDs4JRUVibUfVQaFSuQ0u9PVwzQ" style="color: rgb(17, 85, 204); font-size: x-small;">http://www.inout-travel.com</a></span><p></p><span style="font-size: small; color: rgb(51, 102, 255);"><a href="https://www.facebook.com/InOutTravel/" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://www.facebook.com/InOutTravel/&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNH3zSTpYN6Jn0ibd4io116DlxPPNg" style="color: rgb(17, 85, 204);"><span style="color: rgb(51, 102, 255);"><img src="https://ci5.googleusercontent.com/proxy/8luozs3Ef6tofaP9YvpFMJfUFEqz1QLUJ4pmjmbiZBmIbtfxbFDGS7mVrEd2y32b_P4vDTb14QmA1gowrSAKvtWxet9R3_02VVFOV4S3mKU=s0-d-e1-ft#https://s3.amazonaws.com/images.wisestamp.com/facebook.png" alt="Facebook" width="16" height="16" border="0" class="CToWUd"></span></a><span lang="ES">&nbsp;</span><a href="https://twitter.com/inout_travel?lang=es" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://twitter.com/inout_travel?lang%3Des&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNEe-ltzYrhEmNPcORkqhPnlInLutw" style="color: rgb(17, 85, 204);"><span style="color: rgb(51, 102, 255);"><img src="https://ci5.googleusercontent.com/proxy/6sqL0BxRRr4QwfAOhK_hNNAXIpUHZNg-gl3CPQKITbX2dpT2jMTzf3zlwMmhB9BgxZehJzFQT_AJzsskN1uQR-SqppTRLIbJIILDeDNjlA=s0-d-e1-ft#https://s3.amazonaws.com/images.wisestamp.com/twitter.png" alt="Twitter" width="16" height="16" border="0" class="CToWUd"></span></a><span lang="ES">&nbsp; &nbsp;</span><span style="color: rgb(255, 102, 0);"><strong><span lang="ES">Visítanos en las redes sociales!!</span></strong></span></span></td></tr></tbody></table><img src="https://ci4.googleusercontent.com/proxy/rDdypMfZKWPkRRuCB3bp8PSQXo0k5aswGQRjFzy71EB2XEQkr4_rbaroShG2FEJbnrmwoEfE3-Z6r_hNFlfRMNPC1X8yjwJ2eOmZ1DagWHkl8sh7Y60=s0-d-e1-ft#http://www.inout-travel.com/inout-travel/img/logo/firma_MICE.png" class="CToWUd"><br><div></div></div><div dir="ltr" style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 12.8px;"><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">De conformidad con lo dispuesto en la Ley Orgánica 15/1999 de Protección de Datos de carácter Personal VIAJES IN OUT TRAVEL, S.L., domiciliado en&nbsp;</span><a href="https://maps.google.com/?q=C/+CRISTOBAL+BORDIU,+53+-+28003+MADRID&amp;entry=gmail&amp;source=g" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://maps.google.com/?q%3DC/%2BCRISTOBAL%2BBORDIU,%2B53%2B-%2B28003%2BMADRID%26entry%3Dgmail%26source%3Dg&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNFHPMBadB0TD0U63EsqPiOZ7TPldg" style="color: rgb(17, 85, 204);"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">C/ CRISTOBAL BORDIU, 53 - 28003 MADRID</span></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">, le informa que los datos que nos ha proporcionado formarán parte de un fichero de datos de carácter personal, responsabilidad de dicha entidad, con la finalidad de gestionar las comunicaciones que pudiera mantener con el personal de la misma.</span></p><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">En el supuesto de que desee ejercitar los derechos que le asisten de acceso, rectificación, cancelación y oposición dirija una comunicación por escrito a VIAJES IN OUT TRAVEL, S.L. a la dirección&nbsp;</span><a href="https://maps.google.com/?q=C/+CRISTOBAL+BORDIU,+53+-+28003+MADRID&amp;entry=gmail&amp;source=g" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://maps.google.com/?q%3DC/%2BCRISTOBAL%2BBORDIU,%2B53%2B-%2B28003%2BMADRID%26entry%3Dgmail%26source%3Dg&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNFHPMBadB0TD0U63EsqPiOZ7TPldg" style="color: rgb(17, 85, 204);"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">C/ CRISTOBAL BORDIU, 53 - 28003 MADRID</span></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;&nbsp;incluyendo copia de su Documento Nacional de Identidad o documento identificativo equivalente, ó a través de un mensaje de correo electrónico a la dirección&nbsp;</span><a href="mailto:info@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">info@inout-travel.com</span></b></a><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">.</span></b></p><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">La información contenida en el presente mensaje de correo electrónico es confidencial y su acceso únicamente está autorizado al destinatario original del mismo, quedando prohibida cualquier comunicación, divulgación, o reenvío, tanto del mensaje como de su contenido. En el supuesto de que usted no sea el destinatario autorizado, le rogamos borre el contenido del mensaje y nos comunique dicha circunstancia a través de un mensaje de correo electrónico a la dirección&nbsp;</span><a href="mailto:info@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">info@inout-travel.com</span></b></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;o al teléfono<b>&nbsp;</b></span><a href="tel:911%2087%2083%2091" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">+34&nbsp;</span></b></a><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;</span></b><a href="tel:917%2058%2007%2085" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">917580785</span></b></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">.</span></p></div>',
  572.                             );
  573.                             // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  574.                             $transporter = new Swift_SmtpTransport();
  575.                             $transporter->setHost('smtp.gmail.com')
  576.                                 ->setEncryption('ssl')//ssl / tls
  577.                                 ->setPort(465)// 465 / 587
  578.                                 ->setUsername($agent->getEmail())
  579.                                 ->setPassword($agent->getPassGmail());
  580.                             $mailer = new Swift_Mailer($transporter);
  581.                             $message = new Swift_Message();
  582.                             $message->setSubject('P#' $proposal->getId() . ', Alta de petición')
  583.                                 ->setSender($agentMail)
  584.                                 ->setFrom($mailAgent)
  585.                                 ->setReplyTo($zagentReplyTo)
  586.                                 ->setTo($mailAgentSent)
  587.                                 ->setBody(
  588.                                     $this->renderView(
  589.                                         'mail/structure-mail.html.twig',
  590.                                         array('data' => $data)
  591.                                     ),
  592.                                     'text/html'
  593.                                 );
  594.                             $mailer->send($message);
  595.                         }
  596.                     }
  597.                 // FIN Se verifica si es la primera asignacion de agente para enviar correo al cliente
  598.                 $event 'The Proposal has been created.';
  599.                 $successMessage $this->translator->trans($event);
  600.                 $this->addFlash('mensajeproposaldestination'$successMessage);
  601.             if(!is_null($proposal->getAgentId()))
  602.             {
  603.                 // Envio de correo notificacion al agente asignado
  604.                 $time = new \DateTime("now");
  605.                 $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  606.                 $mailAgent[] = $agent->getEmail();
  607.                 $agentMail $agent->getEmail();
  608.                 $firmGmail $agent->getFirmGmail();
  609.                 $mailAgentSent = array(
  610.                     $agent->getEmail() => $agent->getName() . ' ' $agent->getLastName()
  611.                 );
  612.                 $data = array(
  613.                     'body' => 'P#' $proposal->getId() . ', ' $proposal->getTitle() . '<br><a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/edit/' $proposal->getId() . '">Ir al Proposal</a><br><br>Alerta de Proposal Asignado: ' $time->format('d/m/Y H:i:s') . '<br><br>',
  614.                     'firm' => $firmGmail,
  615.                 );
  616.                 // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  617.                 $transporter = new Swift_SmtpTransport();
  618.                 $transporter->setHost('smtp.gmail.com')
  619.                     ->setEncryption('ssl')//ssl / tls
  620.                     ->setPort(465)// 465 / 587
  621.                     ->setUsername('desarrollo@develup.solutions')
  622.                     ->setPassword('MeDITeRRANeAN_Develup30102023#');
  623.                 $mailer = new Swift_Mailer($transporter);
  624.                 $message = new Swift_Message();
  625.                 $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Asignado')
  626.                     ->setSender($agentMail)
  627.                     ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  628.                     ->setReplyTo($mailAgentSent)
  629.                     ->setTo($mailAgent)
  630.                     ->setBody(
  631.                         $this->renderView(
  632.                             'mail/structure-mail.html.twig',
  633.                             array('data' => $data)
  634.                         ),
  635.                         'text/html'
  636.                     );
  637.                 $mailer->send($message);
  638.             }
  639.             if (empty($proposal->getDateProposedAt())){
  640.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  641.             }
  642.             try{
  643.                 $em->persist($proposal);
  644.                 $em->flush();
  645.                 $event 'The Client has been created. Now, add some contacts';
  646.                 $successMessage $this->translator->trans($event);
  647.                 $this->addFlash('mensajeclient'$successMessage);
  648.                 // Alertar por Telegram y correo a Rafa y Elena
  649.                 $this->sendTelegramMail(6$proposal->getId(),'Nuevo Proposal: #'.$proposal->getId(). ' - '.$proposal->getTitle(). ' - BRIEFING: ' .$proposal->getBriefing());
  650.                 $this->sendTelegramMail(22$proposal->getId(),'Nuevo Proposal: #'.$proposal->getId(). ' - '.$proposal->getTitle(). ' - BRIEFING: ' .$proposal->getBriefing());
  651.                 $this->sendTelegramMail(20$proposal->getId(),'Nuevo Proposal: #'.$proposal->getId(). ' - '.$proposal->getTitle(). ' - BRIEFING: ' .$proposal->getBriefing());
  652.             } catch (\Exception $e){
  653.                 $event 'An error occurred: '.$e->getMessage();
  654.                 /* Para el usuario */
  655.                 $errorMessage $this->translator->trans($event);
  656.                 $this->addFlash('mensajeclienterror'$errorMessage);
  657.             }
  658.             /* Fin Gestión de eventos en Log */
  659.             $parameterspc = array(
  660.                 'pending' => 'Pending',
  661.                 'confirmed' => 'Confirmed',
  662.             );
  663.             $dqlpc 'SELECT pc FROM EventsBundle:Proposal pc WHERE pc.agentId is null AND (pc.status = :pending or pc.status = :confirmed)';
  664.             $querypc $em->createQuery($dqlpc)->setParameters($parameterspc);
  665.             $cantidadpc $querypc->getResult();
  666.             $request->getSession()->set('_proposal_unassigned'count($cantidadpc));
  667.             return $this->redirectToRoute('proposal_destination_view',
  668.                 array(
  669.                     'id' => $proposal->getId()
  670.                 )
  671.             );
  672.         }else{
  673.             $errorMessagebase $this->translator->trans('Error, some fields are empty');
  674.             $errorMessage $errorMessagebase.' | '.$errorMessage_contact;
  675.             $this->addFlash('mensajeproposalerror'$errorMessage);
  676.         }
  677.         return $this->render('MDS/EventsBundle/proposal/add-proposal.html.twig', array(
  678.                 'typeSupplier' => $type,
  679.                 'userAgents' => $userAgents,
  680.                 'form' => $form->createView()
  681.             )
  682.         );
  683.     }
  684.     /**
  685.      * @Route("/proposal/list", name="proposal_list")
  686.      */
  687.     public function indexListAction(Request $request)
  688.     {
  689.         $em $this->getDoctrine()->getManager();
  690.         $desde = isset($request->request->get('buscarFecha')['desde'])? $request->request->get('buscarFecha')['desde'] : '';
  691.         $hasta = isset($request->request->get('buscarFecha')['hasta'])? $request->request->get('buscarFecha')['hasta'] : '';
  692.         $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  693.         $agentId = isset($request->request->get('data')['agent'])? $request->request->get('data')['agent'] : '';
  694.         $busquedaporagente false;
  695.         if (empty($desde) && empty($hasta))
  696.         {
  697.             if(empty($cliente))
  698.             {
  699.                 if(empty($agentId))
  700.                 {
  701.                     $hoy date('Y-m-01'strtotime('-2 month'));
  702.                     $parameters = array(
  703.                         'hoy' => $hoy,
  704.                         'status' => 'Cancel'
  705.                     );
  706.                     $dql 'SELECT p
  707.                             FROM EventsBundle:Proposal p
  708.                             WHERE p.dateEventStarAt >= :hoy
  709.                             AND p.status != :status AND p.agentId is not null 
  710.                             ORDER BY p.id DESC';
  711.                     $query $em->createQuery($dql)->setParameters($parameters);
  712.                     $proposals $query->getResult();
  713.                 }
  714.                 else
  715.                 {
  716.                     $busquedaporagente true;
  717.                     $hoy date('Y-m-01'strtotime('-2 month'));
  718.                     $parameters = array(
  719.                         'agentId' => $agentId,
  720.                         'hoy' => $hoy,
  721.                         'status' => 'Cancel'
  722.                     );
  723.                     $dql 'SELECT p
  724.                             FROM EventsBundle:Proposal p
  725.                             INNER JOIN EventsBundle:ProposalAgents u with u.idProp = p.id
  726.                             WHERE (p.dateEventStarAt >= :hoy AND p.status != :status) AND ((p.agentId = :agentId) OR (u.agOne= :agentId)) 
  727.                             ORDER BY p.id DESC';
  728.                     $query $em->createQuery($dql)->setParameters($parameters);
  729.                     $proposalsOne $query->getResult();
  730.                     foreach ($proposalsOne as $item){
  731. //                        $item->setAgentTwoId('1'.($item->getDateEventStarAt())->format('Ymd'));
  732.                         $item->setAgentTwoId('1');
  733.                     }
  734.                     $dql 'SELECT p
  735.                             FROM EventsBundle:Proposal p
  736.                             INNER JOIN EventsBundle:ProposalAgents u with u.idProp = p.id
  737.                             WHERE (p.dateEventStarAt >= :hoy AND p.status != :status) AND (u.agTwo= :agentId) 
  738.                             ORDER BY p.id DESC';
  739.                     $query $em->createQuery($dql)->setParameters($parameters);
  740.                     $proposalsTwo $query->getResult();
  741.                     foreach ($proposalsTwo as $item){
  742.                         $item->setAgentTwoId('2');
  743.                     }
  744.                     $dql 'SELECT p
  745.                             FROM EventsBundle:Proposal p
  746.                             INNER JOIN EventsBundle:ProposalAgents u with u.idProp = p.id
  747.                             WHERE (p.dateEventStarAt >= :hoy AND p.status != :status) AND (u.agThree= :agentId) 
  748.                             ORDER BY p.id DESC';
  749.                     $query $em->createQuery($dql)->setParameters($parameters);
  750.                     $proposalsThree $query->getResult();
  751.                     foreach ($proposalsThree as $item){
  752.                         $item->setAgentTwoId('3');
  753.                     }
  754.                     $dql 'SELECT p
  755.                             FROM EventsBundle:Proposal p
  756.                             INNER JOIN EventsBundle:ProposalAgents u with u.idProp = p.id
  757.                             WHERE (p.dateEventStarAt >= :hoy AND p.status != :status) AND (u.agFour= :agentId) 
  758.                             ORDER BY p.id DESC';
  759.                     $query $em->createQuery($dql)->setParameters($parameters);
  760.                     $proposalsFour $query->getResult();
  761.                     foreach ($proposalsFour as $item){
  762.                         $item->setAgentTwoId('4');
  763.                     }
  764.                     $proposals array_merge($proposalsOne,$proposalsTwo,$proposalsThree,$proposalsFour);
  765.                 }
  766.             }
  767.             else
  768.             {   // el cliente no viene vacio
  769.                 if(empty($agentId))
  770.                 {
  771.                     /* Si solo tiene el cliente id lo reenvió a consulta por id cliente */
  772.                     return $this->redirectToRoute('proposal_list_client', array(
  773.                         'id' => $cliente
  774.                     ));
  775.                 }
  776.                 else
  777.                 {           //el cliente no viene vacio y hay agente
  778. //                    $hoy = date('Y') . '-01-01';
  779. //                    $hoy = date('Y-m-01', strtotime('-12 month'));
  780.                     $hoy date('Y-m-01'strtotime('-2 month'));
  781.                     $parameters = array(
  782.                         'agentId' => $agentId,
  783.                         'cliente' => $cliente,
  784.                         'hoy' => $hoy,
  785.                         'status' => 'Cancel'
  786.                     );
  787.                     $dql 'SELECT p
  788.                             FROM EventsBundle:Proposal p
  789.                             WHERE p.dateEventStarAt >= :hoy
  790.                             AND p.status != :status AND p.agentId = :agentId AND p.clientId = :cliente
  791.                             ORDER BY p.id DESC';
  792.                     $query $em->createQuery($dql)->setParameters($parameters);
  793.                     $proposals $query->getResult();
  794.                 }
  795.             }
  796.         } else {
  797.             /* Consulta con fechas desde y hasta con id cliente */
  798.             if(!empty($cliente)){
  799.                 if(!empty($agentId)){
  800.                     $parameters = array(
  801.                         'desde' => $desde,
  802.                         'hasta' => $hasta,
  803.                         'cliente' => $cliente,
  804.                         'agentId' => $agentId,
  805.                         'status' => 'Cancel'
  806.                     );
  807.                     $dql 'SELECT p
  808.                             FROM EventsBundle:Proposal p
  809.                             WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId = :agentId 
  810.                             ORDER BY p.id DESC';
  811.                 } else {
  812.                     $parameters = array(
  813.                         'desde' => $desde,
  814.                         'hasta' => $hasta,
  815.                         'cliente' => $cliente,
  816.                         'status' => 'Cancel'
  817.                     );
  818.                     $dql 'SELECT p
  819.                             FROM EventsBundle:Proposal p
  820.                             WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId is not null 
  821.                             ORDER BY p.id DESC';
  822.                 }
  823.             } else {
  824.                 if(!empty($agentId)){
  825.                     /* Consulta con fechas desde y hasta sin id cliente */
  826.                     $parameters = array(
  827.                         'agentId' => $agentId,
  828.                         'desde' => $desde,
  829.                         'hasta' => $hasta,
  830.                         'status' => 'Cancel'
  831.                     );
  832.                     $dql 'SELECT p
  833.                             FROM EventsBundle:Proposal p
  834.                             WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.status != :status AND p.agentId = :agentId 
  835.                             ORDER BY p.id DESC';
  836.                 } else {
  837.                     /* Consulta con fechas desde y hasta sin id cliente */
  838.                     $parameters = array(
  839.                         'desde' => $desde,
  840.                         'hasta' => $hasta,
  841.                         'status' => 'Cancel'
  842.                     );
  843.                     $dql 'SELECT p
  844.                             FROM EventsBundle:Proposal p
  845.                             WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.status != :status AND p.agentId is not null 
  846.                             ORDER BY p.id DESC';
  847.                 }
  848.             }
  849.             $query $em->createQuery($dql)->setParameters($parameters);
  850.             $proposals $query->getResult();
  851.         }
  852.         $datos_proposal = array();
  853.         foreach($proposals as $proposal){
  854.             /*
  855.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  856.              * */
  857.             switch ($proposal->getStatus()) {
  858.                 case "Pending":
  859. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  860.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  861.                     break;
  862.                 case "Sent":
  863.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  864.                     break;
  865.                 case "Confirmed":
  866. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  867.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  868.                     break;
  869.                 case "Invoiced":
  870. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  871.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  872.                     break;
  873.                 case "Cancel":
  874. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  875.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  876.                     break;
  877.                 case "Blocked":
  878.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>';
  879.                     break;
  880.                 case "Unblocked":
  881.                     $iconstatus ='<i class="icon-unlocked2 text-black"></i>';
  882.                     break;
  883.             }
  884.             if ($proposal->getSent() == "Yes"){
  885.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  886.                 if ($proposal->getStatus() == "Pending"){
  887. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  888.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  889.                 }
  890.             } else {
  891.                 $iconsent ='';
  892.             }
  893.             /* Consultas */
  894.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  895.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  896.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  897.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  898.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  899.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  900.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  901.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  902.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  903.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  904.                 //no Visto
  905.                 $novisto $this->translator->trans('Not seen');
  906.             }else{
  907.                 //visto
  908.                 $novisto $this->translator->trans('Seen by Client');
  909.             }
  910.             //Nombres resumidos de los agentes
  911.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  912.             $agentesResumidos '';
  913.             $nombreOne'';
  914.             if (!empty($allAgentesResumidos)) {
  915.                 if (!empty($allAgentesResumidos->getAgOne())) {
  916.                     if ($allAgentesResumidos->getAgOne() != 0) {
  917.                         // Hay Agente One
  918.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  919.                         if (empty($theOne)){ $theOne $em->getRepository(User::class)->findOneByid(6); }
  920.                         $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  921.                         if (!empty($agentesResumidos)) {
  922.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  923.                         } else {
  924.                             $agentesResumidos $nombreOne;
  925.                         }
  926.                     }
  927.                 }
  928.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  929.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  930.                         // Hay Agente Two
  931.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  932.                         if (empty($theTwo)){ $theTwo $em->getRepository(User::class)->findOneByid(6); }
  933.                         $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  934.                         if (!empty($agentesResumidos)) {
  935.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  936.                         } else {
  937.                             $agentesResumidos $nombreTwo;
  938.                         }
  939.                     }
  940.                 }
  941.                 if (!empty($allAgentesResumidos->getAgThree())) {
  942.                     if ($allAgentesResumidos->getAgThree() != 0) {
  943.                         // Hay Agente Three
  944.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  945.                         if (empty($theThree)){ $theThree $em->getRepository(User::class)->findOneByid(6); }
  946.                         $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  947.                         if (!empty($agentesResumidos)) {
  948.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  949.                         } else {
  950.                             $agentesResumidos $nombreThree;
  951.                         }
  952.                     }
  953.                 }
  954.                 if (!empty($allAgentesResumidos->getAgFour())) {
  955.                     if ($allAgentesResumidos->getAgFour() != 0) {
  956.                         // Hay Agente Four
  957.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  958.                         if (empty($theFour)){ $theFour $em->getRepository(User::class)->findOneByid(6); }
  959.                         $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  960.                         if (!empty($agentesResumidos)) {
  961.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  962.                         } else {
  963.                             $agentesResumidos $nombreFour;
  964.                         }
  965.                     }
  966.                 }
  967.             }
  968.             if (strpos($agentesResumidos,',')===false){
  969.                 //Hay mas de un agente
  970.                 $masdeunagente true;
  971.                 $agentView $agent;
  972.             } else {
  973.                 //No hay mas de un agente
  974.                 $masdeunagente false;
  975.                 $agentView $agentesResumidos;
  976.             }
  977.             //Nombres resumidos de los agentes
  978.             if(empty($proposal->getDateProposedAt())){
  979.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  980.             }
  981.             $name = empty($contact)? '' $contact->getName();
  982.             $lastname = empty($contact)? '' $contact->getLastname();
  983.             $contacto $name .' '$lastname;
  984.             $datos_proposal[] = array(
  985.                 'status'             => $this->translator->trans($proposal->getStatus()),
  986.                 'iconstatus'         => $iconstatus,
  987.                 'iconsent'           => $iconsent,
  988.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  989.                 'novisto'            => $novisto,
  990.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  991.                 'id'                 => $proposal->getId(),
  992.                 'token'              => $proposal->getAccessKey(),
  993.                 'mcp'                => $proposal->getMcp(),
  994.                 'name'               => $proposal->getName(),
  995.                 'client'             => $client == Null'' $client->getName(),
  996.                 'client_id'          => $client == Null'' $client->getId(),
  997.                 'contact'            => $contacto,
  998.                 'contactdepartment'  => empty($contact)? '' $contact->getDepartment(),
  999.                 'contactphone'       => empty($contact)? '' $contact->getPhone(),
  1000.                 'contactmovil'       => empty($contact)? '' $contact->getMobile(),
  1001.                 'contactmail'        => empty($contact)? '' $contact->getEmail(),
  1002.                 'commercial'         => $comercial,
  1003.                 'team'               => $team,
  1004.                 'agent'              => $agentView,
  1005.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  1006.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  1007.                 'list_client'        => 'si',
  1008.                 'send'               => $proposal->getSent(),
  1009.                 'masdeunagente'      => $masdeunagente,
  1010.                 'agentesResumidos'   => $agentesResumidos,
  1011.                 'busquedaporagente'  => $busquedaporagente,
  1012.                 'refagent'           => $agentView
  1013.             );
  1014.         }
  1015.         /* INICIO Consulta de agente activos MICE */
  1016.         $parameters = array(
  1017.             'status' => true
  1018.         );
  1019.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  1020.         $dql 'SELECT us
  1021.                 FROM App\Entity\User us
  1022.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  1023.                 ORDER BY us.name ASC';
  1024.         $query $em->createQuery($dql)->setParameters($parameters);
  1025.         $agent_data $query->getResult();
  1026.         /* FIN Consulta de agente activos MICE */
  1027.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig', array(
  1028.             'proposals' => $datos_proposal,
  1029.             'unassigned' => '',
  1030.             'agents' => $agent_data,
  1031.         ));
  1032.     }
  1033.     /**
  1034.      * @Route("/proposal/cancel/list", name="proposal_cancel_list")
  1035.      */
  1036.     public function indexCancelListAction(Request $request)
  1037.     {
  1038.         $em $this->getDoctrine()->getManager();
  1039.         $desde = isset($request->request->get('buscarFecha')['desde'])? $request->request->get('buscarFecha')['desde'] : '';
  1040.         $hasta = isset($request->request->get('buscarFecha')['hasta'])? $request->request->get('buscarFecha')['hasta'] : '';
  1041.         $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  1042.         if (empty($desde) && empty($hasta))
  1043.         {
  1044.             if(empty($cliente))
  1045.             {
  1046. //                $proposals = $em->getRepository(Proposal::class)->findAll();
  1047. //                $proposals = $em->getRepository(Proposal::class)->findBy(array(), array('dateProposedAt' => 'DESC'));
  1048. //                $proposals = $em->getRepository(Proposal::class)->findBy(array(), array('id' => 'DESC'));
  1049. //                $hoy = new \DateTime("Y");
  1050.                 $hoy date('Y').'-01-01';
  1051. //                $hoy->modify('-3 month');
  1052.                 $parameters = array(
  1053.                     'hoy' => $hoy,
  1054.                     'status' => 'Cancel'
  1055.                 );
  1056.                 $dql 'SELECT p
  1057.                         FROM EventsBundle:Proposal p
  1058.                         WHERE p.dateEventStarAt >= :hoy
  1059.                         AND p.status = :status  
  1060.                         ORDER BY p.id DESC';
  1061.                 $query $em->createQuery($dql)->setParameters($parameters);
  1062.                 $proposals $query->getResult();
  1063.             } else {
  1064.                 /* Si solo tiene el cliente id lo reenvió a consulta por id cliente */
  1065.                 return $this->redirectToRoute('proposal_list_client', array(
  1066.                     'id' => $cliente
  1067.                 ));
  1068.             }
  1069.         } else {
  1070.             /* Consulta con fechas desde y hasta con id cliente */
  1071.             if(!empty($cliente)){
  1072.                 $parameters = array(
  1073.                     'desde' => $desde,
  1074.                     'hasta' => $hasta,
  1075.                     'cliente' => $cliente,
  1076.                      'status' => 'Cancel'
  1077.                 );
  1078.                 $dql 'SELECT p
  1079.                         FROM EventsBundle:Proposal p
  1080.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status = :status  
  1081.                         ORDER BY p.id DESC';
  1082. //                        ORDER BY p.dateProposedAt DESC';
  1083.             } else {
  1084.                 /* Consulta con fechas desde y hasta sin id cliente */
  1085.                 $parameters = array(
  1086.                     'desde' => $desde,
  1087.                     'hasta' => $hasta,
  1088.                     'status' => 'Cancel'
  1089.                 );
  1090.                 $dql 'SELECT p
  1091.                         FROM EventsBundle:Proposal p
  1092.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status = :status
  1093.                         ORDER BY p.id DESC';
  1094. //                        ORDER BY p.dateProposedAt DESC';
  1095.             }
  1096.             $query $em->createQuery($dql)->setParameters($parameters);
  1097.             $proposals $query->getResult();
  1098.         }
  1099.         $datos_proposal = array();
  1100.         foreach($proposals as $proposal){
  1101.             /*
  1102.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  1103.              * */
  1104.             switch ($proposal->getStatus()) {
  1105.                 case "Pending":
  1106. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  1107.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>'// martillo rojo
  1108.                     break;
  1109.                 case "Sent":
  1110.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  1111.                     break;
  1112.                 case "Confirmed":
  1113. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  1114.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>'// pulgar arriba verde
  1115.                     break;
  1116.                 case "Invoiced":
  1117. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  1118.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>'// pulgar arriba dorado
  1119.                     break;
  1120.                 case "Cancel":
  1121. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  1122.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>'// pulgar abajo rojo
  1123.                     break;
  1124.                 case "Blocked":
  1125. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  1126.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>'// candado
  1127.                     break;
  1128.             }
  1129.             if ($proposal->getSent() == "Yes"){
  1130.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  1131.                 if ($proposal->getStatus() == "Pending"){
  1132. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  1133.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  1134.                 }
  1135.             } else {
  1136.                 $iconsent ='';
  1137.             }
  1138.             /* Consultas */
  1139.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  1140.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  1141.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  1142.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  1143.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  1144.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  1145.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  1146.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  1147.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  1148.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  1149.                 //no Visto
  1150.                 $novisto $this->translator->trans('Not seen');
  1151.             } else {
  1152.                 //visto
  1153.                 $novisto $this->translator->trans('Seen by Client');
  1154.             }
  1155.             //Nombres resumidos de los agentes
  1156.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  1157.             $agentesResumidos '';
  1158.             $nombreOne'';
  1159.             if (!empty($allAgentesResumidos)) {
  1160.                 if (!empty($allAgentesResumidos->getAgOne())) {
  1161.                     if ($allAgentesResumidos->getAgOne() != 0) {
  1162.                         // Hay Agente One
  1163.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  1164.                         if (empty($theOne)){ $theOne $em->getRepository(User::class)->findOneByid(6); }
  1165.                         $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  1166.                         if (!empty($agentesResumidos)) {
  1167.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  1168.                         } else {
  1169.                             $agentesResumidos $nombreOne;
  1170.                         }
  1171.                     }
  1172.                 }
  1173.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  1174.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  1175.                         // Hay Agente Two
  1176.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  1177.                         if (empty($theTwo)){ $theTwo $em->getRepository(User::class)->findOneByid(6); }
  1178.                         $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  1179.                         if (!empty($agentesResumidos)) {
  1180.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  1181.                         } else {
  1182.                             $agentesResumidos $nombreTwo;
  1183.                         }
  1184.                     }
  1185.                 }
  1186.                 if (!empty($allAgentesResumidos->getAgThree())) {
  1187.                     if ($allAgentesResumidos->getAgThree() != 0) {
  1188.                         // Hay Agente Three
  1189.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  1190.                         if (empty($theThree)){ $theThree $em->getRepository(User::class)->findOneByid(6); }
  1191.                         $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  1192.                         if (!empty($agentesResumidos)) {
  1193.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  1194.                         } else {
  1195.                             $agentesResumidos $nombreThree;
  1196.                         }
  1197.                     }
  1198.                 }
  1199.                 if (!empty($allAgentesResumidos->getAgFour())) {
  1200.                     if ($allAgentesResumidos->getAgFour() != 0) {
  1201.                         // Hay Agente Four
  1202.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  1203.                         if (empty($theFour)){ $theFour $em->getRepository(User::class)->findOneByid(6); }
  1204.                         $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  1205.                         if (!empty($agentesResumidos)) {
  1206.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  1207.                         } else {
  1208.                             $agentesResumidos $nombreFour;
  1209.                         }
  1210.                     }
  1211.                 }
  1212.             }
  1213.             if (strpos($agentesResumidos,',')===false){
  1214.                 //Hay mas de un agente
  1215.                 $masdeunagente true;
  1216.                 $agentView $agent;
  1217.             } else {
  1218.                 //No hay mas de un agente
  1219.                 $masdeunagente false;
  1220.                 $agentView $agentesResumidos;
  1221.             }
  1222.             //Nombres resumidos de los agentes
  1223.             if(empty($proposal->getDateProposedAt())){
  1224.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  1225.             }
  1226.             $datos_proposal[] = array(
  1227.                 'status'             => $this->translator->trans($proposal->getStatus()),
  1228.                 'iconstatus'         => $iconstatus,
  1229.                 'iconsent'           => $iconsent,
  1230.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  1231.                 'novisto'            => $novisto,
  1232.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  1233.                 'id'                 => $proposal->getId(),
  1234.                 'token'              => $proposal->getAccessKey(),
  1235.                 'mcp'                => $proposal->getMcp(),
  1236.                 'name'               => $proposal->getName(),
  1237.                 'client'             => $client->getName(),
  1238.                 'client_id'          => $client->getId(),
  1239.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  1240.                 'contactdepartment'  => $contact->getDepartment(),
  1241.                 'contactphone'       => $contact->getPhone(),
  1242.                 'contactmovil'       => $contact->getMobile(),
  1243.                 'contactmail'        => $contact->getEmail(),
  1244.                 'commercial'         => $comercial,
  1245.                 'team'               => $team,
  1246.                 'agent'              => $agent,
  1247.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  1248.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  1249.                 'list_client'        => 'si',
  1250.                 'send'        => $proposal->getSent(),
  1251. //                'refagent'           => ''
  1252.                 'refagent'           => $agentView
  1253.             );
  1254.         }
  1255. //        $agent_data = $em->getRepository(User::class)->findAll();
  1256.         /* INICIO Consulta de agente activos MICE */
  1257.         $parameters = array(
  1258.             'status' => true
  1259.         );
  1260.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  1261.         $dql 'SELECT us
  1262.                 FROM App\Entity\User us
  1263.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  1264.                 ORDER BY us.name ASC';
  1265.         $query $em->createQuery($dql)->setParameters($parameters);
  1266.         $agent_data $query->getResult();
  1267.         /* FIN Consulta de agente activos MICE */
  1268.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig', array(
  1269.             'proposals' => $datos_proposal,
  1270.             'unassigned' => '',
  1271.             'agents' => $agent_data,
  1272.         ));
  1273.     }
  1274.     /**
  1275.      * @Route("/proposal/unassigned/list", name="proposal_list_unassigned")
  1276.      */
  1277.     public function indexListUnassignedAction(Request $request)
  1278.     {
  1279.         $em $this->getDoctrine()->getManager();
  1280.         $desde = isset($request->request->get('buscarFecha')['desde'])? $request->request->get('buscarFecha')['desde'] : '';
  1281.         $hasta = isset($request->request->get('buscarFecha')['hasta'])? $request->request->get('buscarFecha')['hasta'] : '';;
  1282.         $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  1283.         if (empty($desde) && empty($hasta))
  1284.         {
  1285.             if(empty($cliente))
  1286.             {
  1287. //                $proposals = $em->getRepository(Proposal::class)->findAll();
  1288. //                $proposals = $em->getRepository(Proposal::class)->findBy(array(), array('dateProposedAt' => 'DESC'));
  1289. //                $proposals = $em->getRepository(Proposal::class)->findBy(array(), array('id' => 'DESC'));
  1290. //                $hoy = new \DateTime("Y");
  1291.                 $hoy date('Y').'-01-01';
  1292. //                $hoy->modify('-3 month');
  1293.                 $parameters = array(
  1294. //                    'hoy' => $hoy
  1295.                     'cancel' => 'Cancel'
  1296.                 );
  1297. //                $dql = 'SELECT p
  1298. //                        FROM EventsBundle:Proposal p
  1299. //                        WHERE p.dateEventStarAt >= :hoy AND p.agentId IS null
  1300. //                        ORDER BY p.id DESC';
  1301.                 $dql 'SELECT p
  1302.                         FROM EventsBundle:Proposal p
  1303.                         WHERE p.agentId IS null AND p.status != :cancel
  1304.                         ORDER BY p.id DESC';
  1305.                 $query $em->createQuery($dql)->setParameters($parameters);
  1306.                 $proposals $query->getResult();
  1307.             } else {
  1308.                 /* Si solo tiene el cliente id lo reenvió a consulta por id cliente */
  1309.                 return $this->redirectToRoute('proposal_list_client', array(
  1310.                     'id' => $cliente
  1311.                 ));
  1312.             }
  1313.         } else {
  1314.             /* Consulta con fechas desde y hasta con id cliente */
  1315.             if(!empty($cliente)){
  1316.                 $parameters = array(
  1317.                     'desde' => $desde,
  1318.                     'hasta' => $hasta,
  1319.                     'cliente' => $cliente
  1320.                 );
  1321.                 $dql 'SELECT p
  1322.                         FROM EventsBundle:Proposal p
  1323.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente and p.agentId IS null
  1324.                         ORDER BY p.id DESC';
  1325. //                        ORDER BY p.dateProposedAt DESC';
  1326.             } else {
  1327.                 /* Consulta con fechas desde y hasta sin id cliente */
  1328.                 $parameters = array(
  1329.                     'desde' => $desde,
  1330.                     'hasta' => $hasta
  1331.                 );
  1332.                 $dql 'SELECT p
  1333.                         FROM EventsBundle:Proposal p
  1334.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta and (p.agentId IS null)
  1335.                         ORDER BY p.id DESC';
  1336. //                        ORDER BY p.dateProposedAt DESC';
  1337.             }
  1338.             $query $em->createQuery($dql)->setParameters($parameters);
  1339.             $proposals $query->getResult();
  1340.         }
  1341.         $datos_proposal = array();
  1342.         foreach($proposals as $proposal){
  1343.             /*
  1344.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  1345.              * */
  1346.             switch ($proposal->getStatus()) {
  1347.                 case "Pending":
  1348. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  1349.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  1350.                     break;
  1351.                 case "Sent":
  1352.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  1353.                     break;
  1354.                 case "Confirmed":
  1355. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  1356.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  1357.                     break;
  1358.                 case "Invoiced":
  1359. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  1360.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  1361.                     break;
  1362.                 case "Cancel":
  1363. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  1364.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  1365.                     break;
  1366.                 case "Blocked":
  1367. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  1368.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>';
  1369.                     break;
  1370.             }
  1371.             if ($proposal->getSent() == "Yes"){
  1372.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  1373.                 if ($proposal->getStatus() == "Pending"){
  1374. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  1375.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  1376.                 }
  1377.             }else{
  1378.                 $iconsent ='';
  1379.             }
  1380.             /* Consultas */
  1381.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  1382.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  1383.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  1384.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  1385.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  1386.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  1387.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  1388.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  1389.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  1390.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  1391.                 //no Visto
  1392.                 $novisto $this->translator->trans('Not seen');
  1393.             }else{
  1394.                 //visto
  1395.                 $novisto $this->translator->trans('Seen by Client');
  1396.             }
  1397.             //Nombres resumidos de los agentes
  1398.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  1399.             $agentesResumidos '';
  1400.             $nombreOne'';
  1401.             if (!empty($allAgentesResumidos)) {
  1402.                 if (!empty($allAgentesResumidos->getAgOne())) {
  1403.                     if ($allAgentesResumidos->getAgOne() != 0) {
  1404.                         // Hay Agente One
  1405.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  1406.                         if (empty($theOne)){ $theOne $em->getRepository(User::class)->findOneByid(6); }
  1407.                         $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  1408.                         if (!empty($agentesResumidos)) {
  1409.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  1410.                         } else {
  1411.                             $agentesResumidos $nombreOne;
  1412.                         }
  1413.                     }
  1414.                 }
  1415.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  1416.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  1417.                         // Hay Agente Two
  1418.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  1419.                         if (empty($theTwo)){ $theTwo $em->getRepository(User::class)->findOneByid(6); }
  1420.                         $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  1421.                         if (!empty($agentesResumidos)) {
  1422.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  1423.                         } else {
  1424.                             $agentesResumidos $nombreTwo;
  1425.                         }
  1426.                     }
  1427.                 }
  1428.                 if (!empty($allAgentesResumidos->getAgThree())) {
  1429.                     if ($allAgentesResumidos->getAgThree() != 0) {
  1430.                         // Hay Agente Three
  1431.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  1432.                         if (empty($theThree)){ $theThree $em->getRepository(User::class)->findOneByid(6); }
  1433.                         $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  1434.                         if (!empty($agentesResumidos)) {
  1435.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  1436.                         } else {
  1437.                             $agentesResumidos $nombreThree;
  1438.                         }
  1439.                     }
  1440.                 }
  1441.                 if (!empty($allAgentesResumidos->getAgFour())) {
  1442.                     if ($allAgentesResumidos->getAgFour() != 0) {
  1443.                         // Hay Agente Four
  1444.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  1445.                         if (empty($theFour)){ $theFour $em->getRepository(User::class)->findOneByid(6); }
  1446.                         $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  1447.                         if (!empty($agentesResumidos)) {
  1448.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  1449.                         } else {
  1450.                             $agentesResumidos $nombreFour;
  1451.                         }
  1452.                     }
  1453.                 }
  1454.             }
  1455.             if (strpos($agentesResumidos,',')===false){
  1456.                 //Hay mas de un agente
  1457.                 $masdeunagente true;
  1458.                 $agentView $agent;
  1459.             } else {
  1460.                 //No hay mas de un agente
  1461.                 $masdeunagente false;
  1462.                 $agentView $agentesResumidos;
  1463.             }
  1464.             //Nombres resumidos de los agentes
  1465.             if(empty($proposal->getDateProposedAt())){
  1466.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  1467.             }
  1468.             $datos_proposal[] = array(
  1469.                 'status'             => $this->translator->trans($proposal->getStatus()),
  1470.                 'iconstatus'         => $iconstatus,
  1471.                 'iconsent'           => $iconsent,
  1472.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  1473.                 'novisto'            => $novisto,
  1474.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  1475.                 'id'                 => $proposal->getId(),
  1476.                 'token'              => $proposal->getAccessKey(),
  1477.                 'mcp'                => $proposal->getMcp(),
  1478.                 'name'               => $proposal->getName(),
  1479.                 'client'             => $client->getName(),
  1480.                 'client_id'          => $client->getId(),
  1481.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  1482.                 'contactdepartment'  => $contact->getDepartment(),
  1483.                 'contactphone'       => $contact->getPhone(),
  1484.                 'contactmovil'       => $contact->getMobile(),
  1485.                 'contactmail'        => $contact->getEmail(),
  1486.                 'commercial'         => $comercial,
  1487.                 'team'               => $team,
  1488.                 'agent'              => $agent,
  1489.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  1490.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  1491.                 'list_client'        => 'si',
  1492.                 'send'        => $proposal->getSent(),
  1493. //                'refagent'           => ''
  1494.                 'refagent'           => $agentView
  1495.             );
  1496.         }
  1497.         /* INICIO Consulta de agente activos MICE */
  1498.         $parameters = array(
  1499.             'status' => true
  1500.         );
  1501.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  1502.         // Agregampos Av 5, develup 2 y Green Patio 16
  1503.         $dql 'SELECT us
  1504.                 FROM App\Entity\User us
  1505.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  1506.                 ORDER BY us.name ASC';
  1507.         $query $em->createQuery($dql)->setParameters($parameters);
  1508.         $agent_data $query->getResult();
  1509.         /* FIN Consulta de agente activos MICE */
  1510.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig', array(
  1511.             'proposals' => $datos_proposal,
  1512.             'unassigned' => 'Unassigned',
  1513.             'agents' => $agent_data,
  1514.         ));
  1515.     }
  1516.     /**
  1517.      * @Route("/proposal/assigned/{id}", name="proposal_update_assigned_agent", methods={"POST"})
  1518.      */
  1519.     public function updateAssignedAction($idRequest $request)
  1520.     {
  1521.         $em $this->getDoctrine()->getManager();
  1522.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  1523.         $propAgents $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  1524.         $agent $request->request->get('agent')['agent'];
  1525.         $historicAgentId $proposal->getAgentId();
  1526.         if(!empty($agent))
  1527.         {
  1528.             /* Obtengo usuario logueado */
  1529.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1530.             $user_id $user_logueado->getId();
  1531.             $proposal->setAgentId($agent);
  1532.             $proposal->setUpdatedId($user_id);
  1533.             // INICIO: Solo un role admin puede asignar los proposal o Miriam Chavez, En reunion de Green Patio se le concedio acceso a Elena y a Yulia tambien. En reunion Rafa indico que solo Miriam puede asignar
  1534.             $agentzz $em->getRepository(User::class)->findOneById($user_id);
  1535. //            if (!($agentzz->getRole() == 'ROLE_ADMIN') and !($agentzz->getUserrol() == 44) and !($agentzz->getId() == 22) and !($agentzz->getId() == 27)){
  1536.             if (!($agentzz->getRole() == 'ROLE_ADMIN') and !($agentzz->getId() == 22)){
  1537.                 $errorMessage $this->translator->trans('Error, usuario NO AUTORIZADO');
  1538.                 $this->addFlash('mensajeproposalerror'$errorMessage);
  1539.                 return $this->redirectToRoute('proposal_list_unassigned');
  1540.             }
  1541.             // INICIO: Solo un role admin puede asignar los proposal o Miriam Chavez
  1542.             if (empty($propAgents)){
  1543.                 $propAgents = new ProposalAgents();
  1544.                 $propAgents->setIdProp($id);
  1545.                 $propAgents->setAgOne(0);
  1546.                 $propAgents->setAgTwo(0);
  1547.                 $propAgents->setAgThree(0);
  1548.                 $propAgents->setAgFour(0);
  1549.                 $propAgents->setAgOnePerc(0);
  1550.                 $propAgents->setAgTwoPerc(0);
  1551.                 $propAgents->setAgThreePerc(0);
  1552.                 $propAgents->setAgFourPerc(0);
  1553.             }
  1554.             $propAgents->setAgOne($agent);
  1555.             $propAgents->setAgOnePerc(100);
  1556.             /* Gestión de eventos en Log */
  1557.             $user_lastname $user_logueado->getLastname();
  1558.             $user_name $user_logueado->getName();
  1559.             $user_email $user_logueado->getEmail();
  1560.             $user_rol $user_logueado->getRoles();
  1561.             $event_url $request->getPathInfo();
  1562.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  1563.             if (empty($proposal->getDateProposedAt())){
  1564.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  1565.             }
  1566.             $em->persist($proposal);
  1567.             $em->flush();
  1568.             $event 'The agent was assigned';
  1569.             $em->persist($propAgents);
  1570.             $em->flush();
  1571.             // Envio de correo notificacion al agente asignado
  1572.             $time = new \DateTime("now");
  1573.             $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  1574.             $mailAgent[] = $agent->getEmail();
  1575.             $agentMail $agent->getEmail();
  1576.             $firmGmail $agent->getFirmGmail();
  1577.             $mailAgentSent = array(
  1578.                 $agent->getEmail() => $agent->getName() . ' ' $agent->getLastName()
  1579.             );
  1580.             $data = array(
  1581.                 'body' => 'P#' $proposal->getId() . ', ' $proposal->getTitle() . '<br><a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/edit/' $proposal->getId() . '">Ir al Proposal</a><br><br>Alerta de Proposal Asignado: ' $time->format('d/m/Y H:i:s') . '<br><br>',
  1582.                 'firm' => $firmGmail,
  1583.             );
  1584.             // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  1585.             $transporter = new Swift_SmtpTransport();
  1586.             $transporter->setHost('smtp.gmail.com')
  1587.                 ->setEncryption('ssl')//ssl / tls
  1588.                 ->setPort(465)// 465 / 587
  1589.                 ->setUsername('desarrollo@develup.solutions')
  1590.                 ->setPassword('MeDITeRRANeAN_Develup30102023#');
  1591.             $mailer = new Swift_Mailer($transporter);
  1592.             $message = new Swift_Message();
  1593.             $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Asignado')
  1594.                 ->setSender($agentMail)
  1595.                 ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  1596.                 ->setReplyTo($mailAgentSent)
  1597.                 ->setTo($mailAgent)
  1598.                 ->setBody(
  1599.                     $this->renderView(
  1600.                         'mail/structure-mail.html.twig',
  1601.                         array('data' => $data)
  1602.                     ),
  1603.                     'text/html'
  1604.                 );
  1605.             $mailer->send($message);
  1606.             $parameterspc = array(
  1607.                 'pending' => 'Pending',
  1608.                 'confirmed' => 'Confirmed',
  1609.             );
  1610.             $dqlpc 'SELECT pc FROM EventsBundle:Proposal pc WHERE pc.agentId is null AND (pc.status = :pending or pc.status = :confirmed)';
  1611.             $querypc $em->createQuery($dqlpc)->setParameters($parameterspc);
  1612.             $cantidadpc $querypc->getResult();
  1613.             $request->getSession()->set('_proposal_unassigned'count($cantidadpc));
  1614.             $successMessage $this->translator->trans($event);
  1615.             $this->addFlash('mensajeproposal'$successMessage);
  1616.         } else {
  1617.             $errorMessage $this->translator->trans('Error, some fields are empty');
  1618.             $this->addFlash('mensajeproposalerror'$errorMessage);
  1619.         }
  1620.         if( !is_null($historicAgentId))
  1621.         {
  1622.             return $this->redirectToRoute('proposal_list');
  1623.         } else {
  1624.             return $this->redirectToRoute('proposal_list_unassigned');
  1625.         }
  1626.     }
  1627.     /**
  1628.      * @Route("/proposal/listclient/{id}", name="proposal_list_client")
  1629.      */
  1630.     public function indexListClientAction($idRequest $request) {
  1631.         $em $this->getDoctrine()->getManager();
  1632.         //$proposals = $em->getRepository(Proposal::class)->findByClientId($id);
  1633.         $proposals $em->getRepository(Proposal::class)->findBy(array('clientId' => $id), array('dateProposedAt' => 'DESC'));
  1634.         $datos_proposal = array();
  1635.         foreach($proposals as $proposal){
  1636.             /*
  1637.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  1638.              * */
  1639.             $iconstatus ='';
  1640.             switch ($proposal->getStatus()) {
  1641.                 case "Pending":
  1642. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  1643.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  1644.                     break;
  1645.                 case "Sent":
  1646.                     $iconstatus ='<i class="icon-paperplane text-orange parpadea"></i>';
  1647.                     break;
  1648.                 case "Confirmed":
  1649. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  1650.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  1651.                     break;
  1652.                 case "Invoiced":
  1653. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  1654.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  1655.                     break;
  1656.                 case "Cancel":
  1657. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  1658.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  1659.                     break;
  1660.                 case "Blocked":
  1661.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>';
  1662. //                    $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  1663.                     break;
  1664.             }
  1665.             if ($proposal->getSent() == "Yes"){
  1666.                 $iconsent ='<i class="icon-paperplane text-orange parpadea"></i>';
  1667.             } else {
  1668.                 $iconsent ='';
  1669.             }
  1670.             /* Consultas */
  1671.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  1672.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  1673.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  1674.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  1675.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  1676.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  1677.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  1678.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  1679.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  1680.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  1681.                 //no Visto
  1682.                 $novisto $this->translator->trans('Not seen');
  1683.             }else{
  1684.                 //visto
  1685.                 $novisto "";
  1686.             }
  1687.             //Nombres resumidos de los agentes
  1688.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  1689.             $agentesResumidos '';
  1690.             $nombreOne'';
  1691.             if (!empty($allAgentesResumidos)) {
  1692.                 if (!empty($allAgentesResumidos->getAgOne())) {
  1693.                     if ($allAgentesResumidos->getAgOne() != 0) {
  1694.                         // Hay Agente One
  1695.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  1696.                         if (empty($theOne)){ $theOne $em->getRepository(User::class)->findOneByid(6); }
  1697.                         $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  1698.                         if (!empty($agentesResumidos)) {
  1699.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  1700.                         } else {
  1701.                             $agentesResumidos $nombreOne;
  1702.                         }
  1703.                     }
  1704.                 }
  1705.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  1706.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  1707.                         // Hay Agente Two
  1708.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  1709.                         if (empty($theTwo)){ $theTwo $em->getRepository(User::class)->findOneByid(6); }
  1710.                         $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  1711.                         if (!empty($agentesResumidos)) {
  1712.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  1713.                         } else {
  1714.                             $agentesResumidos $nombreTwo;
  1715.                         }
  1716.                     }
  1717.                 }
  1718.                 if (!empty($allAgentesResumidos->getAgThree())) {
  1719.                     if ($allAgentesResumidos->getAgThree() != 0) {
  1720.                         // Hay Agente Three
  1721.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  1722.                         if (empty($theThree)){ $theThree $em->getRepository(User::class)->findOneByid(6); }
  1723.                         $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  1724.                         if (!empty($agentesResumidos)) {
  1725.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  1726.                         } else {
  1727.                             $agentesResumidos $nombreThree;
  1728.                         }
  1729.                     }
  1730.                 }
  1731.                 if (!empty($allAgentesResumidos->getAgFour())) {
  1732.                     if ($allAgentesResumidos->getAgFour() != 0) {
  1733.                         // Hay Agente Four
  1734.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  1735.                         if (empty($theFour)){ $theFour $em->getRepository(User::class)->findOneByid(6); }
  1736.                         $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  1737.                         if (!empty($agentesResumidos)) {
  1738.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  1739.                         } else {
  1740.                             $agentesResumidos $nombreFour;
  1741.                         }
  1742.                     }
  1743.                 }
  1744.             }
  1745.             if (strpos($agentesResumidos,',')===false){
  1746.                 //Hay mas de un agente
  1747.                 $masdeunagente true;
  1748.                 $agentView $agent;
  1749.             } else {
  1750.                 //No hay mas de un agente
  1751.                 $masdeunagente false;
  1752.                 $agentView $agentesResumidos;
  1753.             }
  1754.             //Nombres resumidos de los agentes
  1755.             if(empty($proposal->getDateProposedAt())){
  1756.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  1757.             }
  1758.             $datos_proposal[] = array(
  1759.                 'status'             => $this->translator->trans($proposal->getStatus()),
  1760.                 'iconstatus'         => $iconstatus,
  1761.                 'iconsent'           => $iconsent,
  1762.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  1763.                 'novisto'            => $novisto,
  1764.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  1765.                 'id'                 => $proposal->getId(),
  1766.                 'name'               => $proposal->getName(),
  1767.                 'token'              => $proposal->getAccessKey(),
  1768.                 'client'             => $client->getName(),
  1769.                 'client_id'          => $client->getId(),
  1770.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  1771.                 'contactdepartment'  => $contact->getDepartment(),
  1772.                 'contactphone'       => $contact->getPhone(),
  1773.                 'contactmovil'       => $contact->getMobile(),
  1774.                 'contactmail'        => $contact->getEmail(),
  1775.                 'commercial'         => $comercial,
  1776.                 'team'               => $team,
  1777.                 'agent'              => $agent,
  1778.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  1779.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  1780.                 'list_client'        => 'no',
  1781. //                'refagent'           => ''
  1782.                 'refagent'           => $agentView
  1783.             );
  1784.         }
  1785. //        $agent_data = $em->getRepository(User::class)->findAll();
  1786.         /* INICIO Consulta de agente activos MICE */
  1787.         $parameters = array(
  1788.             'status' => true
  1789.         );
  1790.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  1791.         $dql 'SELECT us
  1792.                         FROM App\Entity\User us
  1793.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  1794.                         ORDER BY us.name ASC';
  1795.         $query $em->createQuery($dql)->setParameters($parameters);
  1796.         $agent_data $query->getResult();
  1797.         /* FIN Consulta de agente activos MICE */
  1798.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig',
  1799.             array(
  1800.                 'proposals' => $datos_proposal,
  1801.                 'unassigned' => '',
  1802.                 'agents' => $agent_data
  1803.             )
  1804.         );
  1805.     }
  1806.     /**
  1807.      * @Route("/proposal/edit/{id}",  name="proposal_edit")
  1808.      */
  1809.     public function editAction($id)
  1810.     {
  1811.         $em $this->getDoctrine()->getManager();
  1812.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  1813.         $agentTwoId $proposal->getAgentTwoId();
  1814.         $office $em->getRepository(SettingsOffice::class)->findOneById($proposal->getOfficeId());
  1815.         $proposal->setOfficeId($office);
  1816.         $client $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  1817.         $proposal->setClientId($client);
  1818. //        $contact = $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  1819. //        $proposal->setContactId($contact);
  1820.         $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  1821.         $proposal->setAgentId($agente);
  1822.         $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  1823.         $proposal->setTeamId($teams);
  1824.         $music $em->getRepository(PresentationMusic::class)->findOneById($proposal->getIdMusic());
  1825.         $proposal->setIdMusic($music);
  1826. //        $agentetwo = $em->getRepository(SettingsTeam::class)->findOneById($proposal->getAgentTwoId());
  1827. //        $proposal->setAgentTwoId($agentetwo);
  1828.         $agentetwo explode(","$proposal->getAgentTwoId());
  1829.         $agentetworesultado $em->getRepository(User::class)->findById($agentetwo);
  1830.         $proposal->setAgentTwoId($agentetworesultado);
  1831.         $type_supplier $em->getRepository(SupplierSettingsType::class)->findAll();
  1832.         $nameGeneral $this->translator->trans('SUPPLIER');
  1833.         $type = array();
  1834.         foreach($type_supplier as $typesupplier){
  1835.             $type[$nameGeneral.' '.$typesupplier->getGroupBase()][$typesupplier->getBase()] = array(
  1836.                 'typeName' => $typesupplier->getBase()
  1837.             );
  1838.         }
  1839.         $services['AGRUPATION OF SERVICES'] = array(
  1840.             'IDEA' => array(
  1841.                 'typeName' => 'IDEA'
  1842.             ),
  1843.             'ACTIVITY' => array(
  1844.                 'typeName' => 'ACTIVITY'
  1845.             )
  1846.         );
  1847.         $destinos['DESTINATION'] = array(
  1848.             'DESTINATION' => array(
  1849.                 'typeName' => 'DESTINATION'
  1850.             )
  1851.         );
  1852.         $type_data array_merge($type$services$destinos);
  1853. //        $idea['AGRUPACIÓN DE SERVICIOS']['IDEA'] = array(
  1854. //            'typeName' => 'IDEA'
  1855. //        );
  1856. //        $activity['AGRUPACIÓN DE SERVICIOS']['ACTIVITY'] = array(
  1857. //            'typeName' => 'ACTIVITY'
  1858. //        );
  1859. //        $type_data = array_merge($type, $idea, $activity);
  1860. //        $type = array();
  1861. //        foreach($type_supplier as $typesupplier){
  1862. //            $type[$typesupplier->getBase()] = array(
  1863. //                'typeName' => $typesupplier->getBase()
  1864. //            );
  1865. //        }
  1866. //        $idea['IDEA'] = array(
  1867. //            'typeName' => 'IDEA'
  1868. //        );
  1869. //        $activity['ACTIVITY'] = array(
  1870. //            'typeName' => 'ACTIVITY'
  1871. //        );
  1872. //        $type_data = array_merge($type, $idea, $activity);
  1873.         $selectType explode(","$proposal->getSelectType());
  1874.         if (empty($proposal->getDateProposedAt())){
  1875.             $proposal->setDateProposedAt($proposal->getCreatedAt());
  1876.         }
  1877.         $form $this->createEditProposalForm($proposal$id);
  1878.         $briefing $em->getRepository(ProposalBriefingList::class)->findBy(
  1879.             array(
  1880.                 'proposalId' => $id,
  1881.             )
  1882.         );
  1883.         // INFORMACION DE TRACKING
  1884.         $tracinglists_fin = array();
  1885.         if(!is_null($proposal->getAgentId())){
  1886.             $tracing= new ProposalTracing();
  1887.             $tracing->setDateAt(new \DateTime("now"));
  1888.             $tracing->setProposalId($id);
  1889.             $em $this->getDoctrine()->getManager();
  1890.             $proposal $em->getRepository(Proposal::class)->findOneById($id);
  1891.             $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  1892.             $proposal->setAgentId($user->getUsername());
  1893.             $tracingLists $em->getRepository(ProposalTracing::class)->findByProposalId($id);
  1894.             $tracinglists_fin = array();
  1895.             foreach($tracingLists as $tracingList){
  1896.                 if ($tracingList->getAgentId() == "0"){
  1897.                     $tracingList->setAgentId('Client');
  1898.                     $tracingList->setCreatedId('Client');
  1899.                 }else{
  1900.                     $agent $em->getRepository(User::class)->findOneById($tracingList->getAgentId());
  1901.                     $user $em->getRepository(User::class)->findOneById($tracingList->getCreatedId());
  1902.                     if(!is_null($agent)){
  1903.                         $tracingList->setAgentId($agent->getName());  
  1904.                     }
  1905.                     if(!is_null($user)){
  1906.                         $tracingList->setCreatedId($user->getName());
  1907.                     }
  1908.                 }
  1909.                 $tracinglists_fin[] = $tracingList;
  1910.             }
  1911.         }
  1912. //        $userAgents = $em->getRepository(User::class)->findAll();
  1913.         /* INICIO Consulta de agente activos MICE */
  1914.         $parameters = array(
  1915.             'status' => true
  1916.         );
  1917.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  1918.         $dql 'SELECT us
  1919.                         FROM App\Entity\User us
  1920.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  1921.                         ORDER BY us.name ASC';
  1922.         $query $em->createQuery($dql)->setParameters($parameters);
  1923.         $userAgents $query->getResult();
  1924.         /* FIN Consulta de agente activos MICE */
  1925.         $agentsPercentage=$em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  1926.         return $this->render('MDS/EventsBundle/proposal/edit-proposal.html.twig',
  1927.             array(
  1928.                 'id' => $id,
  1929.                 'token' => $proposal->getAccessKey(),
  1930.                 'mcp' => $proposal->getMcp(),
  1931.                 'agentTwoId' => $agentTwoId,
  1932.                 'selectType' => $selectType,
  1933.                 'typeSupplier' => $type_data,
  1934.                 'proposal' => $proposal,
  1935.                 'form' => $form->createView(),
  1936.                 'briefing' => $briefing,
  1937.                 'tracings' => $tracinglists_fin,
  1938.                 'userAgents' => $userAgents,
  1939.                 'agentsPercentage'=>$agentsPercentage
  1940.             )
  1941.         );
  1942.     }
  1943.     private function createEditProposalForm(Proposal $entity$id)
  1944.     {
  1945.         $form $this->createForm(ProposalType::class, $entity,
  1946.             array(
  1947.                 'action' => $this->generateUrl('proposal_update',
  1948.                     array(
  1949.                         'id' => $id
  1950.                     )
  1951.                 ), 'method' => 'PUT'));
  1952.         return $form;
  1953.     }
  1954.     /**
  1955.      * @Route("/proposal/update/{id}", name="proposal_update", methods={"POST", "PUT"})
  1956.      */
  1957.     public function updateAction($idRequest $request)
  1958.     {
  1959.         $em $this->getDoctrine()->getManager();
  1960.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  1961.         $originPrpDateStart $proposal->getDateEventStarAt();
  1962.         $originPrpDateEnd $proposal->getDateEventEndAt();
  1963.         $originPrpStatus $proposal->getStatus();
  1964.         // -------------- INICIO 1/2: Solo un admin hace la primera asignacion de agentes
  1965.         $zero_old_pp_agt $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  1966.         $zero_old_agents = (empty($zero_old_pp_agt->getAgOne()) and empty($zero_old_pp_agt->getAgTwo()) and empty($zero_old_pp_agt->getAgThree()) and empty($zero_old_pp_agt->getAgFour()));
  1967.         // -------------- FIN 1/2: Solo un admin hace la primera asignacion de agentes
  1968.         $created_at $proposal->getCreatedAt();
  1969.         $fechaFin =  $proposal->getDateEventEndAt();
  1970.         $fechaInicio =  $proposal->getDateEventStarAt();
  1971.         $previusStatus $proposal->getStatus();
  1972.         $previusAgentId $proposal->getAgentId();
  1973.         $previusAgentTwoId $proposal->getAgentTwoId();
  1974. //        if(!isset($request->request->get('proposal')['agentTwoId'])){
  1975. //            $proposal->setAgentTwoId(null);
  1976. //        }
  1977.         $proposal->setAgentTwoId(null);
  1978.         if (empty($proposal->getDateProposedAt())){
  1979.             $proposal->setDateProposedAt($proposal->getCreatedAt());
  1980.         }
  1981.         $form $this->createEditProposalForm($proposal$id);
  1982.         $form->handleRequest($request);
  1983.         $contactId $form->get('contactId')->getData();
  1984.         /* Consulta el agente comercial asignado */
  1985.         $data_contact $em->getRepository(ClientContact::class)->findOneById($contactId);
  1986.         $proposal->setAgencommercialId($data_contact->getAssignedAgent());
  1987.         $office_proposal $form->get('officeId')->getData();
  1988.         if(!is_null($office_proposal)){
  1989.             $proposal->setOfficeId($office_proposal->getId());
  1990.         }
  1991.         $client_proposal $form->get('clientId')->getData();
  1992.         if(!is_null($client_proposal)){
  1993.             $proposal->setClientId($client_proposal->getId());
  1994.         }
  1995.         $idmusic_proposal $form->get('idMusic')->getData();
  1996.         if(!is_null($idmusic_proposal)){
  1997.             $proposal->setIdMusic($idmusic_proposal->getId());
  1998.         }
  1999.         $agent_proposal $em->getRepository(User::class)->findOneById($request->request->get('agent')['Agent1']['agentId']);
  2000.         $agentToNotify = array();
  2001.         $logicoNotificarCliente false;
  2002.         if(!is_null($agent_proposal)){
  2003.                                                                         //-- Inicio: Verifico si se cambio de Agente
  2004.             if ($previusAgentId != $agent_proposal->getId()){
  2005.                 $agentToNotify[] = $agent_proposal;
  2006.             }
  2007.                                                                         //-- Fin: Verifico si se cambio de Agente
  2008.             if (($previusAgentId == 0) or (is_null($previusAgentId))) {
  2009.                 $logicoNotificarCliente true;
  2010.             } else {
  2011.                 $logicoNotificarCliente false;
  2012.             }
  2013.             $proposal->setAgentId($agent_proposal->getId());
  2014.         }else{
  2015.             $proposal->setAgentId(null);
  2016.         }
  2017.         $team_proposal $form->get('teamId')->getData();
  2018.         if(!is_null($team_proposal)){
  2019.             $proposal->setTeamId($team_proposal->getId());
  2020.         }
  2021.         //$agenttwo_proposal = array(($request->request->get('agent')['Agent2']['agentId']),($request->request->get('agent')['Agent3']['agentId']),($request->request->get('agent')['Agent4']['agentId']));
  2022.         $prpAg $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  2023.         $agentTwoPreviusArray = array();
  2024.         if ($prpAg->getAgTwo()!=''){
  2025.             //agrego a 2
  2026.             $agentTwoPreviusArray[] = $prpAg->getAgTwo();
  2027.             if ($prpAg->getAgThree()!=''){
  2028.                 //agrego a 3
  2029.                 $agentTwoPreviusArray[] = $prpAg->getAgThree();
  2030.                 if ($prpAg->getAgFour()!=''){
  2031.                     //agrego a 4
  2032.                     $agentTwoPreviusArray[] = $prpAg->getAgFour();
  2033.                 }
  2034.             } else {
  2035.                 // no agrego 3
  2036.                 if ($prpAg->getAgFour()!=''){
  2037.                     //agrego a 4
  2038.                     $agentTwoPreviusArray[] = $prpAg->getAgFour();
  2039.                 }
  2040.             }
  2041.         } else {
  2042.             // no agrego 2
  2043.             if ($prpAg->getAgThree()!=''){
  2044.                 //agrego a 3
  2045.                 $agentTwoPreviusArray[] = $prpAg->getAgThree();
  2046.             } else {
  2047.                 // no agrego 3
  2048.                 if ($prpAg->getAgFour()!=''){
  2049.                     //agrego a 4
  2050.                     $agentTwoPreviusArray[] = $prpAg->getAgFour();
  2051.                 }
  2052.             }
  2053.         }
  2054.         $agenttwo_proposal = array();
  2055.         if (($request->request->get('agent')['Agent2']['agentId'])!=''){
  2056.             //agrego a 2
  2057.             $agenttwo_proposal[] = ($request->request->get('agent')['Agent2']['agentId']);
  2058.             if (($request->request->get('agent')['Agent3']['agentId'])!=''){
  2059.                 //agrego a 3
  2060.                 $agenttwo_proposal[] = ($request->request->get('agent')['Agent3']['agentId']);
  2061.                 if (($request->request->get('agent')['Agent4']['agentId'])!=''){
  2062.                     //agrego a 4
  2063.                     $agenttwo_proposal[] = ($request->request->get('agent')['Agent4']['agentId']);
  2064.                 }
  2065.             } else {
  2066.                 // no agrego 3
  2067.                 if (($request->request->get('agent')['Agent4']['agentId'])!=''){
  2068.                     //agrego a 4
  2069.                     $agenttwo_proposal[] = ($request->request->get('agent')['Agent4']['agentId']);
  2070.                 }
  2071.             }
  2072.         } else {
  2073.             // no agrego 2
  2074.             if (($request->request->get('agent')['Agent3']['agentId'])!=''){
  2075.                 //agrego a 3
  2076.                 $agenttwo_proposal[] = ($request->request->get('agent')['Agent3']['agentId']);
  2077.             } else {
  2078.                 // no agrego 3
  2079.                 if (($request->request->get('agent')['Agent4']['agentId'])!=''){
  2080.                     //agrego a 4
  2081.                     $agenttwo_proposal[] = ($request->request->get('agent')['Agent4']['agentId']);
  2082.                 }
  2083.             }
  2084.         }
  2085.         $str_array_agents implode(","$agentTwoPreviusArray);
  2086.         if(isset($str_array_agents)){
  2087.                                                                                                 //-- Inicio: Verifico si se cambio de AgenteTwo
  2088.             //$agentTwoPreviusArray = explode(",",$previusAgentTwoId);                            //-- convierto en array el string de los agentTwo
  2089.             foreach ($agenttwo_proposal as $item){
  2090.                 if(!(in_array($item,$agentTwoPreviusArray)))                                    //-- Si el elemento no esta en los antiguos agentTwo se debe notificar
  2091.                 {$agentToNotify[] = $em->getRepository(User::class)->findOneById($item);}
  2092.             }
  2093.                                                                                                  //-- Fin: Verifico si se cambio de AgenteTwo
  2094.             $proposal->setAgentTwoId(implode(","$agenttwo_proposal));
  2095.         }else{
  2096.             $proposal->setAgentTwoId(null);
  2097.         }
  2098.         if(isset($request->request->get('proposal_esp')['type'])){
  2099.             $select_type $request->request->get('proposal_esp')['type'];
  2100.             $proposal->setSelectType(implode(","$select_type));
  2101.         }else{
  2102.             $proposal->setSelectType(null);
  2103.         }
  2104.         $type_supplier $em->getRepository(SupplierSettingsType::class)->findAll();
  2105.         $type = array();
  2106.         foreach($type_supplier as $typesupplier){
  2107.             $type[$typesupplier->getBase()] = array(
  2108.                 'typeName' => $typesupplier->getBase()
  2109.             );
  2110.         }
  2111.         if($form->isValid())
  2112.         {
  2113.             $boolAsignacionPorDefectoPerc false;
  2114.             $propAgents $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  2115.             if($request->request->get('agent')['Agent2']['agentId']!=''){
  2116.                 $propAgents->setAgTwo($request->request->get('agent')['Agent2']['agentId']);
  2117.                 if ( $this->AsignacionPorcentajeAgente() ){
  2118.                     if ($request->request->get('percent')['2'] != 0) {
  2119.                         $propAgents->setAgTwoPerc($request->request->get('percent')['2']);
  2120.                     } else {
  2121.                         //Asignacion de valor por defecto
  2122.                         $boolAsignacionPorDefectoPerc true;
  2123.                     }
  2124.                 }
  2125.                 $propAgents->setAgTwoWork($request->request->get('agentWork')['2']);
  2126.             } else {
  2127.                 $propAgents->setAgTwo(0);
  2128.                 if ( $this->AsignacionPorcentajeAgente() ){ $propAgents->setAgTwoPerc(0); }
  2129.                 $propAgents->setAgTwoWork(null);
  2130.             }
  2131.             if($request->request->get('agent')['Agent3']['agentId']!=''){
  2132.                 $propAgents->setAgThree($request->request->get('agent')['Agent3']['agentId']);
  2133.                 if ( $this->AsignacionPorcentajeAgente() ){
  2134.                     if ($request->request->get('percent')['3'] != 0) {
  2135.                         $propAgents->setAgThreePerc($request->request->get('percent')['3']);
  2136.                     } else {
  2137.                         //Asignacion de valor por defecto
  2138.                         $boolAsignacionPorDefectoPerc true;
  2139.                     }
  2140.                 }
  2141.                 $propAgents->setAgThreeWork($request->request->get('agentWork')['3']);
  2142.             } else {
  2143.                 $propAgents->setAgThree(0);
  2144.                 if ( $this->AsignacionPorcentajeAgente() ){ $propAgents->setAgThreePerc(0); }
  2145.                 $propAgents->setAgThreeWork(null);
  2146.             }
  2147.             if($request->request->get('agent')['Agent4']['agentId']!=''){
  2148.                 $propAgents->setAgFour($request->request->get('agent')['Agent4']['agentId']);
  2149.                 if ( $this->AsignacionPorcentajeAgente() ){
  2150.                     if ($request->request->get('percent')['4'] != 0) {
  2151.                         $propAgents->setAgFourPerc($request->request->get('percent')['4']);
  2152.                     } else {
  2153.                         //Asignacion de valor por defecto
  2154.                         $boolAsignacionPorDefectoPerc true;
  2155.                     }
  2156.                 }
  2157.                 $propAgents->setAgFourWork($request->request->get('agentWork')['4']);
  2158.             } else {
  2159.                 $propAgents->setAgFour(0);
  2160.                 if ( $this->AsignacionPorcentajeAgente() ){ $propAgents->setAgFourPerc(0); }
  2161.                 $propAgents->setAgFourWork(null);
  2162.             }
  2163.             if($request->request->get('agent')['Agent1']['agentId']!=''){
  2164.                 $propAgents->setAgOne($request->request->get('agent')['Agent1']['agentId']);
  2165.                 if ( $this->AsignacionPorcentajeAgente() ){
  2166.                     if ($request->request->get('percent')['1'] != 0) {
  2167.                         $propAgents->setAgOnePerc($request->request->get('percent')['1']);
  2168.                     } else {
  2169.                         //Asignacion de valor por defecto
  2170.                         $boolAsignacionPorDefectoPerc true;
  2171.                     }
  2172.                 }
  2173.                 $propAgents->setAgOneWork($request->request->get('agentWork')['1']);
  2174.             } else {
  2175.                 $propAgents->setAgOne(0);
  2176.                 if ( $this->AsignacionPorcentajeAgente() ){ $propAgents->setAgOnePerc(0); }
  2177.                 $propAgents->setAgOneWork(null);
  2178.             }
  2179.             if ($boolAsignacionPorDefectoPerc){
  2180.                 $arrayRequestAgents = array( $request->request->get('agent')['Agent1']['agentId'], $request->request->get('agent')['Agent2']['agentId'], $request->request->get('agent')['Agent3']['agentId'], $request->request->get('agent')['Agent4']['agentId'] );
  2181.                 $valorParaAgente $this->MontoPorcentajeAgente(1$arrayRequestAgents);
  2182.                 $propAgents->setAgOnePerc($valorParaAgente);
  2183.                 $valorParaAgente $this->MontoPorcentajeAgente(2$arrayRequestAgents);
  2184.                 $propAgents->setAgTwoPerc($valorParaAgente);
  2185.                 $valorParaAgente $this->MontoPorcentajeAgente(3$arrayRequestAgents);
  2186.                 $propAgents->setAgThreePerc($valorParaAgente);
  2187.                 $valorParaAgente $this->MontoPorcentajeAgente(4$arrayRequestAgents);
  2188.                 $propAgents->setAgFourPerc($valorParaAgente);
  2189.             }
  2190. //            if (!empty($request->request->get('agent')['Agent1']['agentId'])){
  2191. //                $propAgents->setAgOne($request->request->get('agent')['Agent1']['agentId']);
  2192. //                $propAgents->setAgOneWork($request->request->get('agentWork')['1']);
  2193. //                if (sizeof($request->request->get('percent')['1']) == 0){
  2194. //                    $propAgents->setAgOnePerc(100);
  2195. //                } else {
  2196. //                    if ( $this->AsignacionPorcentajeAgente() ){ $propAgents->setAgOnePerc($request->request->get('percent')['1']); }
  2197. //                    if (empty($propAgents->getAgOnePerc())){
  2198. //                        $propAgents->setAgOnePerc(0);
  2199. //                        }
  2200. //                }
  2201. //            } else {
  2202. //                $propAgents->setAgOne(0);
  2203. //                $propAgents->setAgOnePerc(0);
  2204. //                $propAgents->setAgOneWork(null);
  2205. //            }
  2206.             // -------------- INICIO 2/2: Solo un admin hace la primera asignacion de agentes
  2207.             /* Obtengo usuario logueado */
  2208.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2209.             // Elena Paret y Yulia Akmethova pueden asignar porcentajes y agentes
  2210.             // if (($zero_old_agents) and ($user_logueado->getRole()=='ROLE_USER') and !($user_logueado->getId()==22) and !($user_logueado->getId()==27)){
  2211.             if (($zero_old_agents) and ($user_logueado->getRole()=='ROLE_USER') and !($user_logueado->getId()==57)){
  2212.                 $propAgents->setAgOne(null);
  2213.                 $propAgents->setAgTwo(null);
  2214.                 $propAgents->setAgThree(null);
  2215.                 $propAgents->setAgFour(null);
  2216.                 $proposal->setAgentId(null);
  2217.                 $proposal->setAgentTwoId(null);
  2218.             }
  2219.             // -------------- FIN 2/2: Solo un admin hace la primera asignacion de agentes
  2220.             $em->persist($propAgents);
  2221.             $em->flush();
  2222.             // Envio correo a administracion en caso que de cambie el estatus y este como no enviado
  2223.             if($request->request->get('proposal')['status'] == "Confirmed" and $proposal->getSendAdmin() != "yes"){
  2224.                 $time = new \DateTime("now");
  2225.                 $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2226.                 if (!empty($agent)){
  2227.                     $mailAgent[] = $agent->getEmail();
  2228.                     $agentMail $agent->getEmail();
  2229.                     $passGmail $agent->getPassGmail();
  2230.                     $firmGmail $agent->getFirmGmail();
  2231.                     $mailAgentSent = array(
  2232.                         $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  2233.                     );
  2234.                     $setting_rol $em->getRepository(SettingsRol::class)->findBy(
  2235.                         array(
  2236.                             'weight' => array('2','3'),
  2237.                             'madmin' => '1',
  2238.                         )
  2239.                     );
  2240.                     foreach($setting_rol as $settingRol){
  2241.                         $administration $em->getRepository(User::class)->findByUserrol($settingRol->getId());
  2242.                         foreach($administration as $admin){
  2243.                             $mailAdmin[] = $admin->getEmail();
  2244.                         }
  2245.                     }
  2246.                     $data = array(
  2247.                         'body' => 'P#'.$proposal->getId().', '.$proposal->getTitle().'<br><a href="http://'.$request->server->get('HTTP_HOST').'/events/proposal/edit/'.$proposal->getId().'">Ir al Proposal</a> - <a href="http://'.$request->server->get('HTTP_HOST').'/events/proposal/summary/prices/'.$proposal->getId().'">Ver Resumen</a><br><br>Alerta de Proposal Confirmado: '.$time->format('d/m/Y H:i:s').'<br><br>',
  2248.                         'firm' => $firmGmail,
  2249.                     );
  2250.                     $mailTodos array_merge($mailAgent$mailAdmin);
  2251.                     if (!is_null($passGmail) and (!empty($passGmail))) {
  2252.                         // EJECUTAR ENVIO DE ALERTA DE VISTO POR CLIENTE
  2253.                         $transporter = new Swift_SmtpTransport();
  2254.                         $transporter->setHost('smtp.gmail.com')
  2255.                             ->setEncryption('ssl')//ssl / tls
  2256.                             ->setPort(465)// 465 / 587
  2257.                             ->setUsername($agentMail)
  2258.                             ->setPassword($passGmail);
  2259.                         //                        ->setUsername('desarrollo@develup.solutions')
  2260.                         //                        ->setPassword('MeDITeRRANeAN_Develup30102023#');
  2261.                         $mailer = new Swift_Mailer($transporter);
  2262.                         $message = new Swift_Message();
  2263.                         $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Confirmado')
  2264.                             ->setSender($agentMail)
  2265.                             ->setFrom($mailAgentSent)
  2266.                             ->setReplyTo($mailAgentSent)
  2267.                             ->setTo($mailTodos)
  2268.                             ->setBody(
  2269.                                 $this->renderView(
  2270.                                     'mail/structure-mail.html.twig',
  2271.                                     array('data' => $data)
  2272.                                 ),
  2273.                                 'text/html'
  2274.                             );
  2275.                         $mailer->send($message);
  2276.                         $proposal->setSendAdmin('yes');
  2277.                     }
  2278.                 }else{
  2279.                     $errorMessage $this->translator->trans('Attention: Confirmed Proposal, without assigned agent');
  2280.                     $this->addFlash('mensajeproposaldestinationerror'$errorMessage);
  2281.                 }
  2282.             }
  2283.             //-- Envio correo a los agentes que hayan sido modificados
  2284.             if(sizeof($agentToNotify)>0){
  2285.                 $time = new \DateTime("now");
  2286. //                $agent = $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2287.                 foreach ($agentToNotify as $agent) {
  2288. //                if (!empty($agent)){
  2289.                     $mailAgent[] = $agent->getEmail();
  2290.                     $agentMail $agent->getEmail();
  2291. //                    $passGmail = $agent->getPassGmail();
  2292.                     $firmGmail $agent->getFirmGmail();
  2293.                     $mailAgentSent = array(
  2294.                         $agent->getEmail() => $agent->getName() . ' ' $agent->getLastName()
  2295.                     );
  2296.                     $data = array(
  2297.                         'body' => 'P#' $proposal->getId() . ', ' $proposal->getTitle() . '<br><a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/edit/' $proposal->getId() . '">Ir al Proposal</a><br><br>Alerta de Proposal Asignado: ' $time->format('d/m/Y H:i:s') . '<br><br>',
  2298.                         'firm' => $firmGmail,
  2299.                     );
  2300. //                    $mailTodos = $mailAgent;
  2301.                     // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  2302.                     $transporter = new Swift_SmtpTransport();
  2303.                     $transporter->setHost('smtp.gmail.com')
  2304.                         ->setEncryption('ssl')//ssl / tls
  2305.                         ->setPort(465)// 465 / 587
  2306. //                        ->setUsername($agentMail)
  2307. //                        ->setPassword($passGmail)//;
  2308.                         ->setUsername('desarrollo@develup.solutions')
  2309.                         ->setPassword('MeDITeRRANeAN_Develup30102023#');
  2310.                     $mailer = new Swift_Mailer($transporter);
  2311.                     $message = new Swift_Message();
  2312.                     $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Asignado')
  2313.                         ->setSender($agentMail)
  2314.                         ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  2315.                         ->setReplyTo($agentMail)
  2316.                         ->setTo($mailAgent)
  2317.                         ->setBody(
  2318.                             $this->renderView(
  2319.                                 'mail/structure-mail.html.twig',
  2320.                                 array('data' => $data)
  2321.                             ),
  2322.                             'text/html'
  2323.                         );
  2324.                     $mailer->send($message);
  2325.                 }
  2326.             }
  2327.             /* Obtengo usuario logueado */
  2328.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2329.             $user_id $user_logueado->getId();
  2330.             $proposal->setUpdatedId($user_id);
  2331.             $proposal->setDateProposedAt($created_at);
  2332.             if (empty($proposal->getDateProposedAt())){
  2333.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  2334.             }
  2335.             $em $this->getDoctrine()->getManager();
  2336. //            $em->persist($client);
  2337. //            $em->flush();
  2338.             /* Gestión de eventos en Log */
  2339.             $user_lastname $user_logueado->getLastname();
  2340.             $user_name $user_logueado->getName();
  2341.             $user_email $user_logueado->getEmail();
  2342.             $user_rol $user_logueado->getRoles();
  2343.             $event_url $request->getPathInfo();
  2344.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  2345.             if(!is_null($form->get('briefing')->getData())){
  2346.                 $reg_exp = array('<p>','<br></p>');
  2347.                 $briefing str_ireplace($reg_exp''$form->get('briefing')->getData());
  2348.                 $addBriefing = new ProposalBriefingList();
  2349.                 $addBriefing->setBriefing($briefing);
  2350.                 $addBriefing->setProposalId($id);
  2351.                 $addBriefing->setUserId($user_id);
  2352.                 $addBriefing->setUserName($user_name);
  2353.                 $addBriefing->setActualTime();
  2354.                 $proposal->setBriefing(null);
  2355.                 $em->persist($addBriefing);
  2356.                 $em->flush();
  2357.             }
  2358.             $hoy date('Y-m-d'strtotime('-31 day'));
  2359.             $fechaFinSt $fechaFin->format('Y-m-d');
  2360.             $expiredTime $fechaFinSt $hoy;
  2361.             // Si ponen el estado en desbloqueado y no es un administrador se debe deshacer el cambio
  2362.             if (($proposal->getStatus() == 'Unblocked') and ($user_rol[0] != 'ROLE_ADMIN')){
  2363.                 $proposal->setStatus($previusStatus);
  2364.             }
  2365.             // Si el Proposal ha expirado y no es un administrador los cambios en Fechas o cifras de servicios no se deben modificar ni tampoco el Status
  2366.             if ($expiredTime and ($user_rol[0] != 'ROLE_ADMIN')){
  2367.                 $proposal->setDateEventStarAt($fechaInicio);
  2368.                 $proposal->setDateEventEndAt($fechaFin);
  2369.                 $proposal->setStatus($previusStatus);
  2370.             }
  2371.             if (empty($proposal->getDateProposedAt())){
  2372.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  2373.             }
  2374.             $em->persist($proposal);
  2375.             $em->flush();
  2376.             $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2377.             if ($logicoNotificarCliente and !empty($agent)){
  2378.                 // Envio de correo notificacion al CLIENTE asignado
  2379.                 $time = new \DateTime("now");
  2380.                 $allAgents '<table width="100%">';
  2381.                 if ($propAgents->getAgOne() != 0){
  2382.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgOne());
  2383.                     $allAgents $allAgents '<tr>
  2384.                                     <td width="10%">'.
  2385. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2386.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2387.                                     </td width="90%">
  2388.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2389.                 }
  2390.                 if ($propAgents->getAgTwo() != 0){
  2391.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgTwo());
  2392.                     $allAgents $allAgents '<tr height="10px"></tr><tr>
  2393.                                     <td width="10%">'.
  2394. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2395.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2396.                                     </td width="90%">
  2397.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2398.                 }
  2399.                 if ($propAgents->getAgThree() != 0){
  2400.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgThree());
  2401.                     $allAgents $allAgents '<tr height="10px"></tr><tr>
  2402.                                     <td width="10%">'.
  2403. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2404.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2405.                                     </td width="90%">
  2406.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2407.                 }
  2408.                 if ($propAgents->getAgFour() != 0){
  2409.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgFour());
  2410.                     $allAgents $allAgents '<tr height="10px"></tr><tr>
  2411.                                     <td width="10%">'.
  2412. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2413.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2414.                                     </td width="90%">
  2415.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2416.                 }
  2417.                 $allAgents $allAgents .'</table>';
  2418.                 $clara $em->getRepository(User::class)->findOneByEmail('clara.pedreno@avexpress.tv');
  2419.                 // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  2420.                 $tabClara '<table width="100%">';
  2421.                 $tabClara $tabClara '<tr>
  2422.                                 <td width="10%">'.
  2423. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2424.                     '<img src="https://inout.mante.solutions/'$clara->getPicture(). '" alt="No Image" height="45" width="45">
  2425.                                 </td width="90%">
  2426.                                 <td>' $clara->getName().' '$clara->getLastName().' <br> Teléfono: '$clara->getMobile() .' <br> Correo electrónico: '$clara->getEmail() .'</td></tr>';
  2427.                 $tabClara $tabClara .'</table>';
  2428.                 // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  2429.                 // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  2430.                 if (!(strpos($proposal->getSelectType(),'TECNOLOGÍA')===false)){
  2431.                     // Tecnología estaba seleccionada entre las opciones
  2432.                     $jorge $em->getRepository(User::class)->findOneByEmail('jorge.defreitas@develup.solutions');
  2433.                     $tabJorge '<table width="100%">';
  2434.                     $tabJorge $tabJorge '<tr>
  2435.                                 <td width="10%">'.
  2436. //                                    '<img src="https://'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2437.                         '<img src="https://inout.mante.solutions/'$jorge->getPicture(). '" alt="No Image" height="45" width="45">
  2438.                                 </td width="90%">
  2439.                                 <td>' $jorge->getName().' '$jorge->getLastName().' <br> Teléfono: '$jorge->getMobile() .' <br> Correo electrónico: '$jorge->getEmail() .'</td></tr>';
  2440.                     $tabJorge $tabJorge .'</table>';
  2441.                     $tabClara $tabClara .'</p><p><b>Departamento de Tecnología&nbsp;</b></p><p>'$tabJorge;
  2442.                 }
  2443.                 // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  2444.                 $rafa $em->getRepository(User::class)->findOneByEmail('rafael.guerrero@inout-travel.com');
  2445.                 // Tabla de datos RAFA
  2446.                 $tabRafa '<table width="100%">';
  2447.                 $tabRafa $tabRafa '<tr>
  2448.                                 <td width="10%">'.
  2449. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2450.                     '<img src="https://inout.mante.solutions/'$rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2451.                                 </td width="90%">
  2452.                                 <td>' $rafa->getName().' '$rafa->getLastName().' <br> Teléfono: '$rafa->getMobile() .' <br> Correo electrónico: '$rafa->getEmail() .'</td></tr>';
  2453.                 $tabRafa $tabRafa .'</table>';
  2454.                 // FIN Tabla de datos RAFA
  2455.                 $salva $em->getRepository(User::class)->findOneByEmail('salvador@avexpress.tv');
  2456.                 // Tabla de datos SALVA
  2457.                 $tabSalva '<table width="100%">';
  2458.                 $tabSalva $tabSalva '<tr>
  2459.                                 <td width="10%">'.
  2460. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $salva->getPicture(). '" alt="No Image" height="45" width="45">
  2461.                     '<img src="https://inout.mante.solutions/'$salva->getPicture(). '" alt="No Image" height="45" width="45">
  2462.                                 </td width="90%">
  2463.                                 <td>' $salva->getName().' '$salva->getLastName().' <br> Teléfono: '$salva->getMobile() .' <br> Correo electrónico: '$salva->getEmail() .'</td></tr>';
  2464.                 $tabSalva $tabSalva .'</table>';
  2465.                 // FIN Tabla de datos SALVA
  2466.                 $zclient $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  2467.                 $mailAgent[] = $agent->getEmail();
  2468.                 $agentMail $agent->getEmail();
  2469.                 $zagentReplyTo = array(
  2470.                     $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  2471.                 );
  2472.                 $firmGmail $agent->getFirmGmail();
  2473.                 $mailAgentSent = array(
  2474.                     $zclient->getEmail() => $zclient->getName()
  2475.                 );
  2476.                 $mailAgentFrom = array(
  2477.                     $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  2478.                 );
  2479.                 $data = array(
  2480.                     'body' => '''<p>Estimado cliente,</p><p>Gracias por esta nueva solicitud y por confiar una vez más en nosotros.&nbsp;</p><p>Su petición ha sido dada de alta en nuestro sistema y ya estamos trabajando en su propuesta, en breve recibirá una comunicación de nuestro agente.</p><p>&nbsp;</p><p><b><h2>' $proposal->getTitle() . '</h2></b></p><p></p><p>Su equipo para esta propuesta estará formado por:</p><p>&nbsp;</p><p></p><b>Project Manager&nbsp;</b></p><p>'$allAgents .'</p><p><b>Departamento de Renderización y Creatividad&nbsp;</b></p><p>'$tabClara .'</p><p></p><b><br>Director de producción audiovisual y escenografía</b></p><p>'$tabSalva '</p><p><b>Director de departamento y creatividad&nbsp;</b></p><p>'$tabRafa '</p><p><b>Departamento de Eventos&nbsp;</b></p><p>Teléfono: (+34) 911 878 393 - Correo electrónico: events@inout-travel.com</p><p>&nbsp;</p><p>Gracias de nuevo por su amable petición, en breve recibirá nuestra propuesta.&nbsp;</p><p>&nbsp;</p>',
  2481.                     'firm' => ''.'<div dir="ltr" style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 12.8px;"><table border="0" cellpadding="0" style="font-size: 13.3333px; font-family: Verdana, Arial, Helvetica, sans-serif;"><tbody><tr><td width="35%" style="font-family: arial, sans-serif; margin: 0px;"><img src="http://firmas.inout.events/firmas/events/LOGO_INOUT_TRAVEL&EVENTS.png" alt="Logo InOut Travel" class="CToWUd"></td><td width="65%" style="font-family: arial, sans-serif; margin: 0px;"><p style="margin-bottom: 0px;"></p><span style="font-size: small; color: rgb(0, 121, 186);"><b>M.I.C.E Dept.</b>&nbsp;<br></span><span style="font-size: x-small; color: rgb(0, 121, 186);">Phone :&nbsp;<a href="tel:+34%20911%2087%2083%2093" value="+34911878393" target="_blank" style="color: rgb(17, 85, 204);">+34 91 187 83 93</a>&nbsp;/&nbsp;<a href="tel:+34%20917%2058%2007%2020" value="+34917580720" target="_blank" style="color: rgb(17, 85, 204);">+34 91 758 07 20</a>&nbsp;</span><span style="font-size: x-small; color: rgb(0, 121, 186);">Fax :&nbsp;<a href="tel:+34%20911%2087%2083%2090" value="+34911878390" target="_blank" style="color: rgb(17, 85, 204);">+34 91 187 83&nbsp;90</a>&nbsp;<br></span><span style="font-size: x-small; color: rgb(0, 121, 186);"><u></u><a href="mailto:eventos@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);">eventos@inout-travel.com&nbsp;</a><br></span><span style="font-size: small; color: rgb(0, 128, 128);"><a href="http://s.wisestamp.com/links?url=http%3A%2F%2Fs.wisestamp.com%2Flinks%3Furl%3Dhttps%253A%252F%252Furldefense.proofpoint.com%252Fv1%252Furl%253Fu%253Dhttp%253A%252F%252Fs.wisestamp.com%252Flinks%253Furl%25253Dhttp%2525253A%2525252F%2525252Fs.wisestamp.com%2525252Flinks%2525253Furl%2525253Dhttp%252525253A%252525252F%252525252Fwww.inout-travel.com%25252526amp%2525253Bsn%2525253D%252526sn%25253D%2526amp%253Bk%253D2BjihEEf49EEnl2c9cXhDQ%25253D%25253D%25250A%2526amp%253Br%253DoVBgYJTSgqKobIhrxHXwWFa1hslDOFZMhTZjQm3slhE%25253D%25250A%2526amp%253Bm%253DiRaDYfk0sXIZzunVdLJPLTs52u8wk7HMfjdCh290Q5I%25253D%25250A%2526amp%253Bs%253D1a9ff7d8f4f1fb953d74200f6537f77ca64418a966d39f4786e9aed71833d44c%26amp%3Bsn%3D&amp;sn=" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=http://s.wisestamp.com/links?url%3Dhttp%253A%252F%252Fs.wisestamp.com%252Flinks%253Furl%253Dhttps%25253A%25252F%25252Furldefense.proofpoint.com%25252Fv1%25252Furl%25253Fu%25253Dhttp%25253A%25252F%25252Fs.wisestamp.com%25252Flinks%25253Furl%2525253Dhttp%252525253A%252525252F%252525252Fs.wisestamp.com%252525252Flinks%252525253Furl%252525253Dhttp%25252525253A%25252525252F%25252525252Fwww.inout-travel.com%2525252526amp%252525253Bsn%252525253D%25252526sn%2525253D%252526amp%25253Bk%25253D2BjihEEf49EEnl2c9cXhDQ%2525253D%2525253D%2525250A%252526amp%25253Br%25253DoVBgYJTSgqKobIhrxHXwWFa1hslDOFZMhTZjQm3slhE%2525253D%2525250A%252526amp%25253Bm%25253DiRaDYfk0sXIZzunVdLJPLTs52u8wk7HMfjdCh290Q5I%2525253D%2525250A%252526amp%25253Bs%25253D1a9ff7d8f4f1fb953d74200f6537f77ca64418a966d39f4786e9aed71833d44c%2526amp%253Bsn%253D%26sn%3D&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNGFDs4JRUVibUfVQaFSuQ0u9PVwzQ" style="color: rgb(17, 85, 204); font-size: x-small;">http://www.inout-travel.com</a></span><p></p><span style="font-size: small; color: rgb(51, 102, 255);"><a href="https://www.facebook.com/InOutTravel/" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://www.facebook.com/InOutTravel/&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNH3zSTpYN6Jn0ibd4io116DlxPPNg" style="color: rgb(17, 85, 204);"><span style="color: rgb(51, 102, 255);"><img src="https://ci5.googleusercontent.com/proxy/8luozs3Ef6tofaP9YvpFMJfUFEqz1QLUJ4pmjmbiZBmIbtfxbFDGS7mVrEd2y32b_P4vDTb14QmA1gowrSAKvtWxet9R3_02VVFOV4S3mKU=s0-d-e1-ft#https://s3.amazonaws.com/images.wisestamp.com/facebook.png" alt="Facebook" width="16" height="16" border="0" class="CToWUd"></span></a><span lang="ES">&nbsp;</span><a href="https://twitter.com/inout_travel?lang=es" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://twitter.com/inout_travel?lang%3Des&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNEe-ltzYrhEmNPcORkqhPnlInLutw" style="color: rgb(17, 85, 204);"><span style="color: rgb(51, 102, 255);"><img src="https://ci5.googleusercontent.com/proxy/6sqL0BxRRr4QwfAOhK_hNNAXIpUHZNg-gl3CPQKITbX2dpT2jMTzf3zlwMmhB9BgxZehJzFQT_AJzsskN1uQR-SqppTRLIbJIILDeDNjlA=s0-d-e1-ft#https://s3.amazonaws.com/images.wisestamp.com/twitter.png" alt="Twitter" width="16" height="16" border="0" class="CToWUd"></span></a><span lang="ES">&nbsp; &nbsp;</span><span style="color: rgb(255, 102, 0);"><strong><span lang="ES">Visítanos en las redes sociales!!</span></strong></span></span></td></tr></tbody></table><img src="https://ci4.googleusercontent.com/proxy/rDdypMfZKWPkRRuCB3bp8PSQXo0k5aswGQRjFzy71EB2XEQkr4_rbaroShG2FEJbnrmwoEfE3-Z6r_hNFlfRMNPC1X8yjwJ2eOmZ1DagWHkl8sh7Y60=s0-d-e1-ft#http://www.inout-travel.com/inout-travel/img/logo/firma_MICE.png" class="CToWUd"><br><div></div></div><div dir="ltr" style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 12.8px;"><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">De conformidad con lo dispuesto en la Ley Orgánica 15/1999 de Protección de Datos de carácter Personal VIAJES IN OUT TRAVEL, S.L., domiciliado en&nbsp;</span><a href="https://maps.google.com/?q=C/+CRISTOBAL+BORDIU,+53+-+28003+MADRID&amp;entry=gmail&amp;source=g" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://maps.google.com/?q%3DC/%2BCRISTOBAL%2BBORDIU,%2B53%2B-%2B28003%2BMADRID%26entry%3Dgmail%26source%3Dg&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNFHPMBadB0TD0U63EsqPiOZ7TPldg" style="color: rgb(17, 85, 204);"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">C/ CRISTOBAL BORDIU, 53 - 28003 MADRID</span></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">, le informa que los datos que nos ha proporcionado formarán parte de un fichero de datos de carácter personal, responsabilidad de dicha entidad, con la finalidad de gestionar las comunicaciones que pudiera mantener con el personal de la misma.</span></p><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">En el supuesto de que desee ejercitar los derechos que le asisten de acceso, rectificación, cancelación y oposición dirija una comunicación por escrito a VIAJES IN OUT TRAVEL, S.L. a la dirección&nbsp;</span><a href="https://maps.google.com/?q=C/+CRISTOBAL+BORDIU,+53+-+28003+MADRID&amp;entry=gmail&amp;source=g" target="_blank" data-saferedirecturl="https://www.google.com/url?hl=es&amp;q=https://maps.google.com/?q%3DC/%2BCRISTOBAL%2BBORDIU,%2B53%2B-%2B28003%2BMADRID%26entry%3Dgmail%26source%3Dg&amp;source=gmail&amp;ust=1516881697636000&amp;usg=AFQjCNFHPMBadB0TD0U63EsqPiOZ7TPldg" style="color: rgb(17, 85, 204);"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">C/ CRISTOBAL BORDIU, 53 - 28003 MADRID</span></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;&nbsp;incluyendo copia de su Documento Nacional de Identidad o documento identificativo equivalente, ó a través de un mensaje de correo electrónico a la dirección&nbsp;</span><a href="mailto:info@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">info@inout-travel.com</span></b></a><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">.</span></b></p><p style="text-align: justify; text-indent: 7.1pt; line-height: 14.72px;"><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">La información contenida en el presente mensaje de correo electrónico es confidencial y su acceso únicamente está autorizado al destinatario original del mismo, quedando prohibida cualquier comunicación, divulgación, o reenvío, tanto del mensaje como de su contenido. En el supuesto de que usted no sea el destinatario autorizado, le rogamos borre el contenido del mensaje y nos comunique dicha circunstancia a través de un mensaje de correo electrónico a la dirección&nbsp;</span><a href="mailto:info@inout-travel.com" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">info@inout-travel.com</span></b></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;o al teléfono<b>&nbsp;</b></span><a href="tel:911%2087%2083%2091" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">+34&nbsp;</span></b></a><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">&nbsp;</span></b><a href="tel:917%2058%2007%2085" target="_blank" style="color: rgb(17, 85, 204);"><b><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">917580785</span></b></a><span style="font-size: 10pt; line-height: 15.3333px; font-family: Arial, sans-serif;">.</span></p></div>',
  2482.                 );
  2483.                 // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  2484.                 $transporter = new Swift_SmtpTransport();
  2485.                 $transporter->setHost('smtp.gmail.com')
  2486.                     ->setEncryption('ssl')//ssl / tls
  2487.                     ->setPort(465)// 465 / 587
  2488.                     ->setUsername($agent->getEmail())
  2489.                     ->setPassword($agent->getPassGmail());
  2490.                 $mailer = new Swift_Mailer($transporter);
  2491.                 $message = new Swift_Message();
  2492.                 $message->setSubject('P#' $proposal->getId() . ', Alta de petición')
  2493.                     ->setSender($agentMail)
  2494.                     ->setFrom($mailAgentFrom)
  2495.                     ->setReplyTo($zagentReplyTo)
  2496.                     ->setTo($mailAgentSent)
  2497.                     ->setBody(
  2498.                         $this->renderView(
  2499.                             'mail/structure-mail.html.twig',
  2500.                             array('data' => $data)
  2501.                         ),
  2502.                         'text/html'
  2503.                     );
  2504.                 $mailer->send($message);
  2505.             }
  2506.             $event 'The Proposal has been Updated. Now';
  2507.             $successMessage $this->translator->trans($event);
  2508.             $this->addFlash('mensajeproposaldestination'$successMessage);
  2509. //            try{
  2510. //                $em->persist($client);
  2511. //                $em->flush();
  2512. //                $event = 'The Client has been Updated. Now';
  2513. //
  2514. //                $successMessage = $this->translator->trans($event);
  2515. //                $this->addFlash('mensajeclient', $successMessage);
  2516. //
  2517. //                $logger->info($event_complete.' | '.$event);
  2518. //
  2519. //            } catch (\Exception $e){
  2520. //
  2521. //                $event = 'An error occurred: '.$e->getMessage();
  2522. //
  2523. //                /* Para el log */
  2524. //                $logger->error($event_complete.' | '.$event);
  2525. //                /* Para el usuario */
  2526. //                $errorMessage = $this->translator->trans($event);
  2527. //                $this->addFlash('mensajeclienterror', $errorMessage);
  2528. //            }
  2529. //            /* Fin Gestión de eventos en Log */
  2530.             // ALL LO QUE HAY -- PROPOSAL NO ASIGNADOS
  2531. //            $parameterspc = array();
  2532. //            $dqlpc = 'SELECT COUNT (pc.id) FROM EventsBundle:Proposal pc WHERE pc.agentId is null';
  2533. //            $querypc = $em->createQuery($dqlpc)->setParameters($parameterspc);
  2534. //            $cantidadpc = $querypc->getResult();
  2535. //            $request->getSession()->set('_proposal_unassigned', $cantidadpc[0][1]);
  2536.             $parameterspc = array(
  2537.                 'pending' => 'Pending',
  2538.                 'confirmed' => 'Confirmed',
  2539.             );
  2540.             $dqlpc 'SELECT pc FROM EventsBundle:Proposal pc WHERE pc.agentId is null AND (pc.status = :pending or pc.status = :confirmed)';
  2541.             $querypc $em->createQuery($dqlpc)->setParameters($parameterspc);
  2542.             $cantidadpc $querypc->getResult();
  2543.             $request->getSession()->set('_proposal_unassigned'count($cantidadpc));
  2544.             // Notificar a AV Express si se cambia a estado de Confirmado/Cancelado o se cambia la fecha del evento
  2545.             $avFile $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal->getId());
  2546.             if (!empty($avFile)){
  2547.                 if ((!($originPrpStatus == 'Confirmed') and ($proposal->getStatus() == 'Confirmed')) or
  2548.                     (!($originPrpStatus == 'Cancel') and ($proposal->getStatus() == 'Cancel')) or
  2549.                     (!($originPrpDateStart->format('d/m/Y') == $proposal->getDateEventStarAt()->format('d/m/Y'))) or
  2550.                     (!($originPrpDateEnd->format('d/m/Y') == $proposal->getDateEventEndAt()->format('d/m/Y')))){
  2551.                     $this->NotifyAvExpress($proposal$avFile$originPrpDateStart$originPrpDateEnd$originPrpStatus);
  2552.                 }
  2553.             }
  2554.             return $this->redirectToRoute('proposal_destination_view',
  2555.                 array(
  2556.                     'id' => $id
  2557.                 )
  2558.             );
  2559.         }else{
  2560.             $errorMessage $this->translator->trans('Error, some fields are empty');
  2561.             $this->addFlash('mensajeproposaldestinationerror'$errorMessage);
  2562.         }
  2563. //        $userAgents = $em->getRepository(User::class)->findAll();
  2564.         /* INICIO Consulta de agente activos MICE */
  2565.         $parameters = array(
  2566.             'status' => true
  2567.         );
  2568.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  2569.         $dql 'SELECT us
  2570.                 FROM App\Entity\User us
  2571.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  2572.                 ORDER BY us.name ASC';
  2573.         $query $em->createQuery($dql)->setParameters($parameters);
  2574.         $userAgents $query->getResult();
  2575.         /* FIN Consulta de agente activos MICE */
  2576.         return $this->render('MDS/EventsBundle/proposal/add-proposal.html.twig', array(
  2577.                 'typeSupplier' => $type,
  2578.                 'userAgents' => $userAgents,
  2579.                 'form' => $form->createView()
  2580.             )
  2581.         );
  2582.     }
  2583.     /**
  2584.      * @Route("/proposals/events", name="get_proposal_select")
  2585.      */
  2586.     public function proposalSelectAction(Request $request) {
  2587.         $session = new Session();
  2588.         $token=$session->get('tokenGoogleCalendar');
  2589.         if (!is_null($token)) {
  2590.             $this->googleCalendar->setAccessToken($token);
  2591.             $connectGoogle "1";
  2592.         }else{
  2593.             $connectGoogle "0";
  2594.         }
  2595.         $em $this->getDoctrine()->getManager();
  2596.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2597.         $team_id $user_logueado->getTeam();
  2598.         $user_role $user_logueado->getRole();
  2599.         if ($user_role == 'ROLE_ADMIN'){ $team_id 1; }
  2600.         // Cargar los proposals que sean depués de un año atras desde el día de la búsqueda
  2601.         $dql "SELECT p
  2602.             FROM App\MDS\EventsBundle\Entity\Proposal p
  2603.             WHERE p.teamId = :teamId
  2604.             AND p.status in (:status)
  2605.             AND p.dateEventStarAt > :dateEventStarAt";
  2606.         $parameters = [
  2607.             'teamId' => $team_id,
  2608.             'status' => array('Confirmed''Invoiced'),
  2609.             'dateEventStarAt' => new DateTime('now -365 days'),
  2610.         ];
  2611.         $query $em->createQuery($dql)->setParameters($parameters);
  2612.         $proposals $query->getResult();
  2613.         $datos = array();
  2614.         if (!empty($proposals)){
  2615.             //Buscamos de una vez, todos los clientes y usuarios relacionados con los proposals
  2616.             $clientsIds array_map(function($proposal) { return $proposal->getClientId(); }, $proposals);
  2617.             $usersIds array_map(function($proposal) { return $proposal->getAgentId(); }, $proposals);
  2618.             $clients $em->getRepository(Client::class)->findById($clientsIds);
  2619.             $users $em->getRepository(User::class)->findById($usersIds);
  2620.             //Creamos arrays referenciados para encontrar los clientes y usuarios por su id.
  2621.             $clientsMapped array_reduce($clients, function($carry$client) {
  2622.                 $carry[$client->getId()] = $client;
  2623.                 return $carry;
  2624.             }, []);
  2625.             
  2626.             $usersMapped array_reduce($users, function($carry$user) {
  2627.                 $carry[$user->getId()] = $user;
  2628.                 return $carry;
  2629.             }, []);
  2630.             //Recorremos los proposals
  2631.             foreach($proposals as $proposal){
  2632.                 if ($connectGoogle == 1){
  2633.                     $egcuno '<a href="/calendar/addEvent/ep/'.$proposal->getId().'" class="text-white"><i class="icon-google-plus2"></i></a> ';
  2634.                 }else{
  2635.                     $egcuno '';
  2636.                 }
  2637.                 $clientId $proposal->getClientId();
  2638.                 $agentId $proposal->getAgentId();
  2639.                 $client $clientsMapped[$clientId] ?? null;
  2640.                 $user $usersMapped[$agentId] ?? null;
  2641.                 if(empty($user) || is_null($user)){
  2642.                     if(!is_null($proposal->getTeamId())){
  2643.                         $userAsignar $em->getRepository(User::class)->findOneBy(array('team'=>$proposal->getTeamId(),'teamleader'=>1));
  2644.                         if(!empty($userAsignar)){
  2645.                             $id=$userAsignar->getId();
  2646.                         }else{
  2647.                             $id null;
  2648.                         }
  2649.                     }else{
  2650.                         $id null;
  2651.                     }
  2652.                     if (!is_null($id)){
  2653.                         $proposal->setAgentId($id);
  2654.                         $em->persist($proposal);
  2655.                         $em->flush();
  2656.                         $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2657.                         $userColor $user->getColor();
  2658.                         $userPicture $user->getPicture();
  2659.                         $userLastname $user->getLastname();
  2660.                         $userName $user->getName();
  2661.                     }else{
  2662.                         $userColor "#ff0000";
  2663.                         $userPicture null;
  2664.                         $userLastname "Not Assigned";
  2665.                         $userName "Not Assigned";
  2666.                     }
  2667.                 }else{
  2668.                     $userColor $user->getColor();
  2669.                     $userPicture $user->getPicture();
  2670.                     $userLastname $user->getLastname();
  2671.                     $userName $user->getName();
  2672.                 }
  2673.                 $colorHay $userColor;
  2674.                 if (empty($colorHay)){
  2675.                     $color "#ff0000";
  2676.                 }else{
  2677.                     $color $userColor;
  2678.                 }
  2679.                 if (is_null($userPicture)){
  2680.                     $picture "";
  2681.                 }else{
  2682.                     $picture "<img src='".$userPicture."' class='img-circle img-lg'><br>";
  2683.                 }
  2684.                 $tooltip $picture." ".
  2685.                     $userName." ".$userLastname."<br>".
  2686.                     $client->getName()."<br>".
  2687.                     $proposal->getName()."</b><br>";
  2688.                 $datos[] = array(
  2689.                     "id" => $proposal->getId(),
  2690.                     "title" => $egcuno.$userName." ".$userLastname." | ".$client->getName().": ".$proposal->getName(),
  2691.                     "tooltip" => $tooltip,
  2692.                     "start" => $proposal->getDateEventStarAt(),
  2693.                     "end" => $proposal->getDateEventEndAt(),
  2694.                     "color" => $color,
  2695.                     "url" => "/events/proposal/destination/add/".$proposal->getId()
  2696.                 );
  2697.             }
  2698.         }
  2699.         $return = array(
  2700.             'proposal' => $datos,
  2701.         );
  2702.         $response = new JsonResponse($return);
  2703.         return $response;
  2704.     }
  2705.     /**
  2706.      * @Route("/proposals/events-admin", name="get_proposal_select-admin")
  2707.      */
  2708.     public function proposalAdminSelectAction(Request $request) {
  2709.         $session = new Session();
  2710.         $token=$session->get('tokenGoogleCalendar');
  2711.         if (!is_null($token)) {
  2712.             $this->googleCalendar->setAccessToken($token);
  2713.             $connectGoogle "1";
  2714.         }else{
  2715.             $connectGoogle "0";
  2716.         }
  2717.         $em $this->getDoctrine()->getManager();
  2718.         $proposals $em->getRepository(Proposal::class)->findBy(
  2719.             array(
  2720.                 'status' => array('Confirmed''Invoiced'),
  2721.                 ),
  2722.             array('dateEventStarAt' => 'ASC')
  2723.         );
  2724.         $datos = array();
  2725.         if (!empty($proposals)){
  2726.             foreach($proposals as $proposal){
  2727.                 if ($connectGoogle == 1){
  2728.                     $egcuno '<a href="/calendar/addEvent/ep/'.$proposal->getId().'" class="text-white"><i class="icon-google-plus2"></i></a> ';
  2729.                 }else{
  2730.                     $egcuno '';
  2731.                 }
  2732.                 $client $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  2733.                 $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2734.                 if(empty($user) || is_null($user)){
  2735. //                    d($proposal->getAgentTwoId());
  2736.                     if(!is_null($proposal->getTeamId())){
  2737.                         $userAsignar $em->getRepository(User::class)->findOneBy(array('team'=>$proposal->getTeamId(),'teamleader'=>1));
  2738.                         if(!empty($userAsignar)){
  2739.                             $id=$userAsignar->getId();
  2740.                         }else{
  2741.                             $id null;
  2742.                         }
  2743.                     }else{
  2744.                         $id null;
  2745.                     }
  2746. //                    d($id);
  2747.                     if (!is_null($id)){
  2748.                         $proposal->setAgentId($id);
  2749.                         $em->persist($proposal);
  2750.                         $em->flush();
  2751.                         $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2752.                         $userColor $user->getColor();
  2753.                         $userPicture $user->getPicture();
  2754.                         $userLastname $user->getLastname();
  2755.                         $userName $user->getName();
  2756.                     }else{
  2757.                         $userColor "#ff0000";
  2758.                         $userPicture null;
  2759.                         $userLastname "Not Assigned";
  2760.                         $userName "Not Assigned";
  2761.                     }
  2762.                 }else{
  2763.                     $userColor $user->getColor();
  2764.                     $userPicture $user->getPicture();
  2765.                     $userLastname $user->getLastname();
  2766.                     $userName $user->getName();
  2767.                 }
  2768.                 $colorHay $userColor;
  2769.                 if (empty($colorHay)){
  2770.                     $color "#ff0000";
  2771.                 }else{
  2772.                     $color $userColor;
  2773.                 }
  2774.                 if (is_null($userPicture)){
  2775.                     $picture "";
  2776.                 }else{
  2777.                     $picture "<img src='".$userPicture."' class='img-circle img-lg'><br>";
  2778.                 }
  2779.                 $tooltip $picture." ".
  2780.                     $userName." ".$userLastname."<br>".
  2781.                     $client->getName()."<br>".
  2782.                     $proposal->getName()."</b><br>";
  2783.                 $datos[] = array(
  2784.                     "id" => $proposal->getId(),
  2785.                     "title" => $egcuno.$userName." ".$userLastname." | ".$client->getName().": ".$proposal->getName(),
  2786.                     "tooltip" => $tooltip,
  2787.                     "start" => $proposal->getDateEventStarAt(),
  2788.                     "end" => $proposal->getDateEventEndAt(),
  2789.                     "color" => $color,
  2790.                     "url" => "/events/proposal/destination/add/".$proposal->getId()
  2791.                 );
  2792.             }
  2793.         }
  2794.         else
  2795.         {
  2796.             $datos = [];
  2797.         }
  2798.         $return = array(
  2799.             'proposal' => $datos,
  2800.         );
  2801.         $response = new JsonResponse($return);
  2802.         return $response;
  2803.     }
  2804.     /**
  2805.      * @Route("/proposal/sentmail/{id}", name="list_SentMail_Proposal")
  2806.      */
  2807.     public function listSentMailAction($idRequest $request)
  2808.     {
  2809.         $em $this->getDoctrine()->getManager();
  2810.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  2811.         $sentMaillist $em->getRepository(SendMail::class)->findByProposalId($id);
  2812.         return $this->render('MDS/EventsBundle/mail/list-mail.html.twig', array(
  2813.             'id' => $id,
  2814.             'token' => $proposal->getAccessKey(),
  2815.             'mcp' => $proposal->getMcp(),
  2816.             'mailsent' => $sentMaillist
  2817.         ));
  2818.     }
  2819.     /**
  2820.      * @Route("/proposal/detailsmail/{idm}/{id}", name="list_DeatilsMail_Proposal")
  2821.      */
  2822.     public function listDetailsMailAction($idm$idRequest $request)
  2823.     {
  2824.         $em $this->getDoctrine()->getManager();
  2825.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  2826.         $sentMaillist $em->getRepository(SendMail::class)->findOneById($idm);
  2827.         return $this->render('MDS/EventsBundle/mail/details-mail.html.twig', array(
  2828.             'id' => $id,
  2829.             'idm' => $idm,
  2830.             'token' => $proposal->getAccessKey(),
  2831.             'mcp' => $proposal->getMcp(),
  2832.             'mailsent' => $sentMaillist
  2833.         ));
  2834.     }
  2835.     /**
  2836.      * @Route("/proposal/cancel/{id}",  name="proposal_cancel")
  2837.      */
  2838.     public function cancelAction($idRequest $request)
  2839.     {
  2840.         $em $this->getDoctrine()->getManager();
  2841.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  2842.         if($proposal->getAgentId() == null){
  2843.             $proposal->setAgentId(999999);
  2844.             $proposal->setAgentTwoId('999999');
  2845.         }
  2846.         $proposal->setStatus('Cancel');
  2847.         $em->persist($proposal);
  2848.         $em->flush();
  2849.         $event 'The Proposal has been canceled.';
  2850.         $successMessage $this->translator->trans($event);
  2851.         $this->addFlash('mensajeproposaldestination'$successMessage);
  2852.         $parameterspc = array();
  2853.         $dqlpc 'SELECT COUNT (pc.id) FROM EventsBundle:Proposal pc WHERE pc.agentId is null';
  2854.         $querypc $em->createQuery($dqlpc)->setParameters($parameterspc);
  2855.         $cantidadpc $querypc->getResult();
  2856.         $request->getSession()->set('_proposal_unassigned'$cantidadpc[0][1]);
  2857.         
  2858.         if ( is_null(($proposal->getAgentId())) and is_null(($proposal->getAgentTwoId()))){
  2859.             //No tiene agente asignado, el controlador fue llamado desde Unassigned Porposals
  2860.             return $this->redirectToRoute('proposal_list_unassigned');
  2861.         } else {
  2862.             return $this->redirectToRoute('proposal_list');
  2863.         }
  2864.     }
  2865.     /**
  2866.      * @Route("/proposal/blocked/list", name="proposal_list_blocked")
  2867.      */
  2868.     public function indexListBlockedAction(Request $request)
  2869.     {
  2870.         $em $this->getDoctrine()->getManager();
  2871.         $props $em->getRepository(Proposal::class)->findAll();
  2872.         $proposals = array();
  2873.         foreach ($props as $prop){
  2874.             if ($prop->getStatus() == 'Blocked'){
  2875.                 $proposals[] = $prop;
  2876.             }
  2877.         }
  2878. //        $proposals = $em->getRepository(Proposal::class)->findBy(
  2879. //            array(
  2880. //                'status' =>  $status
  2881. //            )
  2882. //        );
  2883. //        $proposals = $em->getRepository(Proposal::class)->findByStatus($status);
  2884. //        $desde = $request->request->get('buscarFecha')['desde'];
  2885. //        $hasta = $request->request->get('buscarFecha')['hasta'];
  2886. //        $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  2887. //
  2888. //        if (empty($desde) && empty($hasta))
  2889. //        {
  2890. //            if(empty($cliente))
  2891. //            {
  2892. //                $hoy = date('Y').'-01-01';
  2893. ////                $hoy->modify('-3 month');
  2894. //                $parameters = array(
  2895. //                    'hoy' => $hoy,
  2896. //                    'status' => 'Blocked'
  2897. //                );
  2898. //                $dql = 'SELECT p
  2899. //                        FROM EventsBundle:Proposal p
  2900. //                        WHERE p.dateEventStarAt >= :hoy AND p.status = :status
  2901. //                        ORDER BY p.id DESC';
  2902. //
  2903. //                $query = $em->createQuery($dql)->setParameters($parameters);
  2904. //              //  $proposals = $query->getResult();
  2905. //
  2906. //            }
  2907. //            else
  2908. //            {
  2909. //                /* Si solo tiene el cliente id lo reenvió a consulta por id cliente */
  2910. //                return $this->redirectToRoute('proposal_list_client', array(
  2911. //                    'id' => $cliente
  2912. //                ));
  2913. //            }
  2914. //
  2915. //        }
  2916. //        else
  2917. //        {
  2918. //            /* Consulta con fechas desde y hasta con id cliente */
  2919. //            if(!empty($cliente)){
  2920. //                $parameters = array(
  2921. //                    'desde' => $desde,
  2922. //                    'hasta' => $hasta,
  2923. //                    'cliente' => $cliente,
  2924. //                    'status' => 'Blocked'
  2925. //                );
  2926. //
  2927. //                $dql = 'SELECT p
  2928. //                        FROM EventsBundle:Proposal p
  2929. //                        WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente and p.agentId IS null and p.status = :status
  2930. //                        ORDER BY p.id DESC';
  2931. ////                        ORDER BY p.dateProposedAt DESC';
  2932. //            }
  2933. //            else
  2934. //            {
  2935. //                /* Consulta con fechas desde y hasta sin id cliente */
  2936. //                $parameters = array(
  2937. //                    'desde' => $desde,
  2938. //                    'hasta' => $hasta,
  2939. //                    'status' => 'Blocked'
  2940. //                );
  2941. //
  2942. //                $dql = 'SELECT p
  2943. //                        FROM EventsBundle:Proposal p
  2944. //                        WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta and (p.agentId IS null) and p.status = :status
  2945. //                        ORDER BY p.id DESC';
  2946. ////                        ORDER BY p.dateProposedAt DESC';
  2947. //            }
  2948. //
  2949. //            $query = $em->createQuery($dql)->setParameters($parameters);
  2950. //            $proposals = $query->getResult();
  2951. //        }
  2952.         $datos_proposal = array();
  2953.         foreach($proposals as $proposal){
  2954.             /*
  2955.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  2956.              * */
  2957.             switch ($proposal->getStatus()) {
  2958.                 case "Pending":
  2959. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  2960.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  2961.                     break;
  2962.                 case "Sent":
  2963.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  2964.                     break;
  2965.                 case "Confirmed":
  2966. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  2967.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  2968.                     break;
  2969.                 case "Invoiced":
  2970. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  2971.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  2972.                     break;
  2973.                 case "Cancel":
  2974. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  2975.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  2976.                     break;
  2977.                 case "Blocked":
  2978.                     $iconstatus ='<i class=" icon-lock2 text-grey"></i>';
  2979.                     break;
  2980.             }
  2981.             if ($proposal->getSent() == "Yes"){
  2982.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  2983.                 if ($proposal->getStatus() == "Pending"){
  2984. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  2985.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  2986.                 }
  2987.             }else{
  2988.                 $iconsent ='';
  2989.             }
  2990.             /* Consultas */
  2991.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  2992.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  2993.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  2994.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  2995.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  2996.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  2997.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2998.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  2999.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  3000.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  3001.                 //no Visto
  3002.                 $novisto $this->translator->trans('Not seen');
  3003.             }else{
  3004.                 //visto
  3005.                 $novisto $this->translator->trans('Seen by Client');
  3006.             }
  3007.             //Nombres resumidos de los agentes
  3008.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  3009.             $agentesResumidos '';
  3010.             $nombreOne'';
  3011.             if (!empty($allAgentesResumidos)) {
  3012.                 if (!empty($allAgentesResumidos->getAgOne())) {
  3013.                     if ($allAgentesResumidos->getAgOne() != 0) {
  3014.                         // Hay Agente One
  3015.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  3016.                         if(is_null($theOne)){
  3017.                             $nombreOne 'N/A';
  3018.                         }else{
  3019.                             $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  3020.                         }
  3021.                         if (!empty($agentesResumidos)) {
  3022.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  3023.                         } else {
  3024.                             $agentesResumidos $nombreOne;
  3025.                         }
  3026.                     }
  3027.                 }
  3028.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  3029.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  3030.                         // Hay Agente Two
  3031.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  3032.                         if(is_null($theTwo)){
  3033.                             $nombreTwo 'N/A';
  3034.                         }else{
  3035.                             $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  3036.                         }
  3037.                         if (!empty($agentesResumidos)) {
  3038.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  3039.                         } else {
  3040.                             $agentesResumidos $nombreTwo;
  3041.                         }
  3042.                     }
  3043.                 }
  3044.                 if (!empty($allAgentesResumidos->getAgThree())) {
  3045.                     if ($allAgentesResumidos->getAgThree() != 0) {
  3046.                         // Hay Agente Three
  3047.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  3048.                         if(is_null($theThree)){
  3049.                             $nombreThree 'N/A';
  3050.                         }else{
  3051.                             $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  3052.                         }
  3053.                         if (!empty($agentesResumidos)) {
  3054.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  3055.                         } else {
  3056.                             $agentesResumidos $nombreThree;
  3057.                         }
  3058.                     }
  3059.                 }
  3060.                 if (!empty($allAgentesResumidos->getAgFour())) {
  3061.                     if ($allAgentesResumidos->getAgFour() != 0) {
  3062.                         // Hay Agente Four
  3063.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  3064.                         if(is_null($theFour)){
  3065.                             $nombreFour 'N/A';
  3066.                         }else{
  3067.                             $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  3068.                         }
  3069.                         if (!empty($agentesResumidos)) {
  3070.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  3071.                         } else {
  3072.                             $agentesResumidos $nombreFour;
  3073.                         }
  3074.                     }
  3075.                 }
  3076.             }
  3077.             if (strpos($agentesResumidos,',')===false){
  3078.                 //Hay mas de un agente
  3079.                 $masdeunagente true;
  3080.                 $agentView $agent;
  3081.             } else {
  3082.                 //No hay mas de un agente
  3083.                 $masdeunagente false;
  3084.                 $agentView $agentesResumidos;
  3085.             }
  3086.             //Nombres resumidos de los agentes
  3087.             $datos_proposal[] = array(
  3088.                 'status'             => $this->translator->trans($proposal->getStatus()),
  3089.                 'iconstatus'         => $iconstatus,
  3090.                 'iconsent'           => $iconsent,
  3091.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  3092.                 'novisto'            => $novisto,
  3093.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  3094.                 'id'                 => $proposal->getId(),
  3095.                 'token'              => $proposal->getAccessKey(),
  3096.                 'mcp'                => $proposal->getMcp(),
  3097.                 'name'               => $proposal->getName(),
  3098.                 'client'             => $client->getName(),
  3099.                 'client_id'          => $client->getId(),
  3100.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  3101.                 'contactdepartment'  => $contact->getDepartment(),
  3102.                 'contactphone'       => $contact->getPhone(),
  3103.                 'contactmovil'       => $contact->getMobile(),
  3104.                 'contactmail'        => $contact->getEmail(),
  3105.                 'commercial'         => $comercial,
  3106.                 'team'               => $team,
  3107.                 'agent'              => $agent,
  3108.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  3109.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  3110.                 'list_client'        => 'si',
  3111.                 'send'        => $proposal->getSent(),
  3112. //                'refagent'           => ''
  3113.                 'refagent'           => $agentView
  3114.             );
  3115.         }
  3116. //        $agent_data = $em->getRepository(User::class)->findAll();
  3117.         /* INICIO Consulta de agente activos MICE */
  3118.         $parameters = array(
  3119.             'status' => true
  3120.         );
  3121.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  3122.         $dql 'SELECT us
  3123.                         FROM App\Entity\User us
  3124.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  3125.                         ORDER BY us.name ASC';
  3126.         $query $em->createQuery($dql)->setParameters($parameters);
  3127.         $agent_data $query->getResult();
  3128.         /* FIN Consulta de agente activos MICE */
  3129.         return $this->render('MDS/EventsBundle/proposal/list-proposal-blocked.html.twig', array(
  3130.             'proposals' => $datos_proposal,
  3131.             'numblock' => sizeof($datos_proposal),
  3132.             'unassigned' => 'Unassigned',
  3133.             'agents' => $agent_data,
  3134.         ));
  3135.     }
  3136.     /**
  3137.      * @Route("/proposal/my/list", name="proposal_my")
  3138.      */
  3139.     public function indexListMyAction(Request $request)
  3140.     {
  3141.         /* Obtengo usuario logueado */
  3142.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3143.         $user_id $user_logueado->getId();
  3144.         $em $this->getDoctrine()->getManager();
  3145.         $desde = isset($request->request->get('buscarFecha')['desde'])? $request->request->get('buscarFecha')['desde'] : '';
  3146.         $hasta = isset($request->request->get('buscarFecha')['hasta'])? $request->request->get('buscarFecha')['hasta'] : '';;
  3147.         $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  3148.         $agentId = isset($request->request->get('data')['agent'])? $request->request->get('data')['agent'] : '';
  3149.         if (empty($desde) && empty($hasta))
  3150.         {
  3151.             if(empty($cliente))
  3152.             {
  3153.                 if(empty($agentId))
  3154.                 {
  3155.                     $parameters = array(
  3156.                         'idUser' => $user_id
  3157.                     );
  3158.                     $dql 'SELECT p
  3159.                         FROM EventsBundle:Proposal p
  3160.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3161.                         WHERE pa.agOne = :idUser
  3162.                         OR pa.agTwo = :idUser OR pa.agThree = :idUser OR pa.agFour = :idUser
  3163.                         ORDER BY p.id DESC';
  3164.                     $query $em->createQuery($dql)->setParameters($parameters);
  3165.                     $proposals $query->getResult();
  3166.                 }
  3167.                 else
  3168.                 {// El buscador no esta llegando a este punto ya que devuelve a la lista principal, corregir cuando haya tiempo creando un nuevo buscador
  3169.                     $parameters = array(
  3170.                         'idUser' => $user_id,
  3171.                         'agentId' => $agentId
  3172.                     );
  3173.                     $dql 'SELECT p
  3174.                         FROM EventsBundle:Proposal p
  3175.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3176.                         WHERE (pa.agOne = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId))
  3177.                         OR (pa.agTwo = :idUser and (pa.agOne = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId)) 
  3178.                         OR (pa.agThree = :idUser and (pa.agTwo = :agentId OR pa.agOne = :agentId OR pa.agFour = :agentId)) 
  3179.                         OR (pa.agFour = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agOne = :agentId)) 
  3180.                         ORDER BY p.id DESC';
  3181.                     $query $em->createQuery($dql)->setParameters($parameters);
  3182.                     $proposals $query->getResult();
  3183.                 }
  3184.             }
  3185.             else
  3186.             {   // el cliente no viene vacio
  3187.                 if(empty($agentId))
  3188.                 {
  3189.                     // El buscador no esta llegando a este punto ya que devuelve a la lista principal, corregir cuando haya tiempo creando un nuevo buscador
  3190.                     $parameters = array(
  3191.                         'cliente' => $cliente,
  3192.                         'idUser' => $user_id
  3193.                     );
  3194.                     $dql 'SELECT p
  3195.                         FROM EventsBundle:Proposal p
  3196.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3197.                         WHERE (pa.agOne = :idUser and (p.clientId = cliente))
  3198.                         OR (pa.agTwo = :idUser and (p.clientId = cliente)) 
  3199.                         OR (pa.agThree = :idUser and (p.clientId = cliente)) 
  3200.                         OR (pa.agFour = :idUser and (p.clientId = cliente)) 
  3201.                         ORDER BY p.id DESC';
  3202.                     $query $em->createQuery($dql)->setParameters($parameters);
  3203.                     $proposals $query->getResult();
  3204.                 }
  3205.                 else
  3206.                 {   //el cliente no viene vacio y hay agente
  3207.                     // El buscador no esta llegando a este punto ya que devuelve a la lista principal, corregir cuando haya tiempo creando un nuevo buscador
  3208.                     $parameters = array(
  3209.                         'cliente' => $cliente,
  3210.                         'idUser' => $user_id,
  3211.                         'agentId' => $agentId
  3212.                     );
  3213.                     $dql 'SELECT p
  3214.                         FROM EventsBundle:Proposal p
  3215.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3216.                         WHERE (pa.agOne = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId) and (p.clientId = cliente))
  3217.                         OR (pa.agTwo = :idUser and (pa.agOne = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId) and (p.clientId = cliente)) 
  3218.                         OR (pa.agThree = :idUser and (pa.agTwo = :agentId OR pa.agOne = :agentId OR pa.agFour = :agentId) and (p.clientId = cliente)) 
  3219.                         OR (pa.agFour = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agOne = :agentId) and (p.clientId = cliente)) 
  3220.                         ORDER BY p.id DESC';
  3221.                     $query $em->createQuery($dql)->setParameters($parameters);
  3222.                     $proposals $query->getResult();
  3223.                 }
  3224.             }
  3225.         }
  3226.         else
  3227.         {
  3228.             /* Consulta con fechas desde y hasta con id cliente */
  3229.             if(!empty($cliente)){
  3230.                 if(!empty($agentId)){
  3231.                     $parameters = array(
  3232.                         'desde' => $desde,
  3233.                         'hasta' => $hasta,
  3234.                         'cliente' => $cliente,
  3235.                         'agentId' => $agentId,
  3236.                         'status' => 'Cancel'
  3237.                     );
  3238.                     $dql 'SELECT p
  3239.                         FROM EventsBundle:Proposal p
  3240.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId = :agentId 
  3241.                         ORDER BY p.id DESC';
  3242.                 }
  3243.                 else
  3244.                 {
  3245.                     $parameters = array(
  3246.                         'desde' => $desde,
  3247.                         'hasta' => $hasta,
  3248.                         'cliente' => $cliente,
  3249.                         'status' => 'Cancel'
  3250.                     );
  3251.                     $dql 'SELECT p
  3252.                         FROM EventsBundle:Proposal p
  3253.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId is not null 
  3254.                         ORDER BY p.id DESC';
  3255. //                        ORDER BY p.dateProposedAt DESC';
  3256.                 }
  3257.             }
  3258.             else
  3259.             {
  3260.                 if(!empty($agentId)){
  3261.                     /* Consulta con fechas desde y hasta sin id cliente */
  3262.                     $parameters = array(
  3263.                         'agentId' => $agentId,
  3264.                         'desde' => $desde,
  3265.                         'hasta' => $hasta,
  3266.                         'status' => 'Cancel'
  3267.                     );
  3268.                     $dql 'SELECT p
  3269.                         FROM EventsBundle:Proposal p
  3270.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId = :agentId 
  3271.                         ORDER BY p.id DESC';
  3272.                 }
  3273.                 else
  3274.                 {
  3275.                     /* Consulta con fechas desde y hasta sin id cliente */
  3276.                     $parameters = array(
  3277.                         'desde' => $desde,
  3278.                         'hasta' => $hasta,
  3279.                         'status' => 'Cancel'
  3280.                     );
  3281.                     $dql 'SELECT p
  3282.                         FROM EventsBundle:Proposal p
  3283.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId is not null 
  3284.                         ORDER BY p.id DESC';
  3285. //                        ORDER BY p.dateProposedAt DESC';
  3286.                 }
  3287.             }
  3288.             $query $em->createQuery($dql)->setParameters($parameters);
  3289.             $proposals $query->getResult();
  3290.         }
  3291.         $datos_proposal = array();
  3292.         foreach($proposals as $proposal){
  3293.             /*
  3294.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  3295.              * */
  3296.             switch ($proposal->getStatus()) {
  3297.                 case "Pending":
  3298. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  3299.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  3300.                     break;
  3301.                 case "Sent":
  3302.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  3303.                     break;
  3304.                 case "Confirmed":
  3305. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  3306.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  3307.                     break;
  3308.                 case "Invoiced":
  3309. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  3310.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  3311.                     break;
  3312.                 case "Cancel":
  3313. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  3314.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  3315.                     break;
  3316.                 case "Blocked":
  3317.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>';
  3318.                     break;
  3319.                 case "Unblocked":
  3320.                     $iconstatus ='<i class="icon-unlocked2 text-black"></i>';
  3321.                     break;
  3322.             }
  3323.             if ($proposal->getSent() == "Yes"){
  3324.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  3325.                 if ($proposal->getStatus() == "Pending"){
  3326. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  3327.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  3328.                 }
  3329.             }else{
  3330.                 $iconsent ='';
  3331.             }
  3332.             /* Consultas */
  3333.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  3334.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  3335.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  3336.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  3337.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  3338.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  3339.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  3340.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  3341.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  3342.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  3343.                 //no Visto
  3344.                 $novisto $this->translator->trans('Not seen');
  3345.             }else{
  3346.                 //visto
  3347.                 $novisto $this->translator->trans('Seen by Client');
  3348.             }
  3349.             //Nombres resumidos de los agentes
  3350.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  3351.             $agentesResumidos '';
  3352.             $nombreOne'';
  3353.             if (!empty($allAgentesResumidos)) {
  3354.                 if (!empty($allAgentesResumidos->getAgOne())) {
  3355.                     if ($allAgentesResumidos->getAgOne() != 0) {
  3356.                         // Hay Agente One
  3357.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  3358.                         if(!is_null($theOne)){
  3359.                             $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  3360.                             if (!empty($agentesResumidos)) {
  3361.                                 $agentesResumidos $agentesResumidos.', '$nombreOne;
  3362.     
  3363.                             } else {
  3364.                                 $agentesResumidos $nombreOne;
  3365.                             }
  3366.                         }
  3367.                     }
  3368.                 }
  3369.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  3370.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  3371.                         // Hay Agente Two
  3372.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  3373.                         if(!is_null($theTwo)){
  3374.                             $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  3375.                             if (!empty($agentesResumidos)) {
  3376.                                 $agentesResumidos $agentesResumidos.', '$nombreTwo;
  3377.                             } else {
  3378.                                 $agentesResumidos $nombreTwo;
  3379.                             }
  3380.                         }
  3381.                     }
  3382.                 }
  3383.                 if (!empty($allAgentesResumidos->getAgThree())) {
  3384.                     if ($allAgentesResumidos->getAgThree() != 0) {
  3385.                         // Hay Agente Three
  3386.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  3387.                         if(!is_null($theThree)){
  3388.                             $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  3389.                             if (!empty($agentesResumidos)) {
  3390.                                 $agentesResumidos $agentesResumidos.', '$nombreThree;
  3391.     
  3392.                             } else {
  3393.                                 $agentesResumidos $nombreThree;
  3394.                             }
  3395.                         }
  3396.                     }
  3397.                 }
  3398.                 if (!empty($allAgentesResumidos->getAgFour())) {
  3399.                     if ($allAgentesResumidos->getAgFour() != 0) {
  3400.                         // Hay Agente Four
  3401.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  3402.                         if(!is_null($theFour)){
  3403.                             $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  3404.                             if (!empty($agentesResumidos)) {
  3405.                                 $agentesResumidos $agentesResumidos.', '$nombreFour;
  3406.     
  3407.                             } else {
  3408.                                 $agentesResumidos $nombreFour;
  3409.                             }
  3410.                         }
  3411.                     }
  3412.                 }
  3413.             }
  3414.             if (strpos($agentesResumidos,',')===false){
  3415.                 //Hay mas de un agente
  3416.                 $masdeunagente true;
  3417.                 $agentView $agent;
  3418.             } else {
  3419.                 //No hay mas de un agente
  3420.                 $masdeunagente false;
  3421.                 $agentView $agentesResumidos;
  3422.             }
  3423.             //Nombres resumidos de los agentes
  3424.             $datos_proposal[] = array(
  3425.                 'status'             => $this->translator->trans($proposal->getStatus()),
  3426.                 'iconstatus'         => $iconstatus,
  3427.                 'iconsent'           => $iconsent,
  3428.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  3429.                 'novisto'            => $novisto,
  3430.                 'create'             => $proposal->getDateProposedAt() == Null'' $proposal->getDateProposedAt()->format('d/m/Y'),
  3431.                 'id'                 => $proposal->getId(),
  3432.                 'token'              => $proposal->getAccessKey(),
  3433.                 'mcp'                => $proposal->getMcp(),
  3434.                 'name'               => $proposal->getName(),
  3435.                 'client'             => $client->getName(),
  3436.                 'client_id'          => $client->getId(),
  3437.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  3438.                 'contactdepartment'  => $contact->getDepartment(),
  3439.                 'contactphone'       => $contact->getPhone(),
  3440.                 'contactmovil'       => $contact->getMobile(),
  3441.                 'contactmail'        => $contact->getEmail(),
  3442.                 'commercial'         => $comercial,
  3443.                 'team'               => $team,
  3444.                 'agent'              => $agent,
  3445.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  3446.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  3447.                 'list_client'        => 'si',
  3448.                 'send'        => $proposal->getSent(),
  3449. //                'refagent'           => ''
  3450.                 'refagent'           => $agentView
  3451.             );
  3452.         }
  3453. //        $agent_data = $em->getRepository(User::class)->findAll();
  3454.         /* INICIO Consulta de agente activos MICE */
  3455.         $parameters = array(
  3456.             'status' => true
  3457.         );
  3458.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  3459.         $dql 'SELECT us
  3460.                         FROM App\Entity\User us
  3461.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  3462.                         ORDER BY us.name ASC';
  3463.         $query $em->createQuery($dql)->setParameters($parameters);
  3464.         $agent_data $query->getResult();
  3465.         /* FIN Consulta de agente activos MICE */
  3466.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig', array(
  3467.             'proposals' => $datos_proposal,
  3468.             'unassigned' => '',
  3469.             'agents' => $agent_data,
  3470.         ));
  3471.     }
  3472.     /**
  3473.      * @Route("/proposal/historic", name="proposal_historic")
  3474.      */
  3475.     public function indexListHistoricAction(Request $request)
  3476.     {
  3477.         $em $this->getDoctrine()->getManager();
  3478.         $desde = isset($request->request->get('buscarFecha')['desde'])? $request->request->get('buscarFecha')['desde'] : '';;
  3479.         $hasta = isset($request->request->get('buscarFecha')['hasta'])? $request->request->get('buscarFecha')['hasta'] : '';;
  3480.         $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  3481.         $agentId = isset($request->request->get('data')['agent'])? $request->request->get('data')['agent'] : '';
  3482.         if (empty($desde) && empty($hasta))
  3483.         {
  3484.             if(empty($cliente))
  3485.             {
  3486.                 if(empty($agentId))
  3487.                 {
  3488. //                    $hoy = date('Y-m-01', strtotime('-12 month'));
  3489.                     $hoy date('Y-m-01'strtotime('-24 month'));
  3490.                     $parameters = array(
  3491.                         'hoy' => $hoy,
  3492.                         'status' => 'Cancel'
  3493.                     );
  3494.                     $dql 'SELECT p
  3495.                         FROM EventsBundle:Proposal p
  3496.                         WHERE p.dateEventStarAt >= :hoy
  3497.                         AND p.status != :status AND p.agentId is not null 
  3498.                         ORDER BY p.id DESC';
  3499.                     $query $em->createQuery($dql)->setParameters($parameters);
  3500.                     $proposals $query->getResult();
  3501.                 }
  3502.                 else
  3503.                 {
  3504. //                    $hoy = date('Y') . '-01-01';
  3505. //                    $hoy = date('Y-m-01', strtotime('-12 month'));
  3506.                     $hoy date('Y-m-01'strtotime('-2 month'));
  3507.                     $parameters = array(
  3508.                         'agentId' => $agentId,
  3509.                         'hoy' => $hoy,
  3510.                         'status' => 'Cancel'
  3511.                     );
  3512.                     $dql 'SELECT p
  3513.                         FROM EventsBundle:Proposal p
  3514.                         WHERE p.dateEventStarAt >= :hoy AND p.status != :status AND p.agentId = :agentId
  3515.                         ORDER BY p.id DESC';
  3516.                     $query $em->createQuery($dql)->setParameters($parameters);
  3517.                     $proposals $query->getResult();
  3518.                 }
  3519.             }
  3520.             else
  3521.             {   // el cliente no viene vacio
  3522.                 if(empty($agentId))
  3523.                 {
  3524.                     /* Si solo tiene el cliente id lo reenvió a consulta por id cliente */
  3525.                     return $this->redirectToRoute('proposal_list_client', array(
  3526.                         'id' => $cliente
  3527.                     ));
  3528.                 }
  3529.                 else
  3530.                 {           //el cliente no viene vacio y hay agente
  3531. //                    $hoy = date('Y') . '-01-01';
  3532. //                    $hoy = date('Y-m-01', strtotime('-12 month'));
  3533.                     $hoy date('Y-m-01'strtotime('-2 month'));
  3534.                     $parameters = array(
  3535.                         'agentId' => $agentId,
  3536.                         'cliente' => $cliente,
  3537.                         'hoy' => $hoy,
  3538.                         'status' => 'Cancel'
  3539.                     );
  3540.                     $dql 'SELECT p
  3541.                         FROM EventsBundle:Proposal p
  3542.                         WHERE p.dateEventStarAt >= :hoy
  3543.                         AND p.status != :status AND p.agentId = :agentId AND p.clientId = :cliente
  3544.                         ORDER BY p.id DESC';
  3545.                     $query $em->createQuery($dql)->setParameters($parameters);
  3546.                     $proposals $query->getResult();
  3547.                 }
  3548.             }
  3549.         }
  3550.         else
  3551.         {
  3552.             /* Consulta con fechas desde y hasta con id cliente */
  3553.             if(!empty($cliente)){
  3554.                 if(!empty($agentId)){
  3555.                     $parameters = array(
  3556.                         'desde' => $desde,
  3557.                         'hasta' => $hasta,
  3558.                         'cliente' => $cliente,
  3559.                         'agentId' => $agentId,
  3560.                         'status' => 'Cancel'
  3561.                     );
  3562.                     $dql 'SELECT p
  3563.                         FROM EventsBundle:Proposal p
  3564.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId = :agentId 
  3565.                         ORDER BY p.id DESC';
  3566.                 }
  3567.                 else
  3568.                 {
  3569.                     $parameters = array(
  3570.                         'desde' => $desde,
  3571.                         'hasta' => $hasta,
  3572.                         'cliente' => $cliente,
  3573.                         'status' => 'Cancel'
  3574.                     );
  3575.                     $dql 'SELECT p
  3576.                         FROM EventsBundle:Proposal p
  3577.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId is not null 
  3578.                         ORDER BY p.id DESC';
  3579. //                        ORDER BY p.dateProposedAt DESC';
  3580.                 }
  3581.             }
  3582.             else
  3583.             {
  3584.                 if(!empty($agentId)){
  3585.                     /* Consulta con fechas desde y hasta sin id cliente */
  3586.                     $parameters = array(
  3587.                         'agentId' => $agentId,
  3588.                         'desde' => $desde,
  3589.                         'hasta' => $hasta,
  3590.                         'status' => 'Cancel'
  3591.                     );
  3592.                     $dql 'SELECT p
  3593.                         FROM EventsBundle:Proposal p
  3594.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId = :agentId 
  3595.                         ORDER BY p.id DESC';
  3596.                 }
  3597.                 else
  3598.                 {
  3599.                     /* Consulta con fechas desde y hasta sin id cliente */
  3600.                     $parameters = array(
  3601.                         'desde' => $desde,
  3602.                         'hasta' => $hasta,
  3603.                         'status' => 'Cancel'
  3604.                     );
  3605.                     $dql 'SELECT p
  3606.                         FROM EventsBundle:Proposal p
  3607.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId is not null 
  3608.                         ORDER BY p.id DESC';
  3609. //                        ORDER BY p.dateProposedAt DESC';
  3610.                 }
  3611.             }
  3612.             $query $em->createQuery($dql)->setParameters($parameters);
  3613.             $proposals $query->getResult();
  3614.         }
  3615.         $datos_proposal = array();
  3616.         foreach($proposals as $proposal){
  3617.             /*
  3618.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  3619.              * */
  3620.             switch ($proposal->getStatus()) {
  3621.                 case "Pending":
  3622. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  3623.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  3624.                     break;
  3625.                 case "Sent":
  3626.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  3627.                     break;
  3628.                 case "Confirmed":
  3629. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  3630.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  3631.                     break;
  3632.                 case "Invoiced":
  3633. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  3634.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  3635.                     break;
  3636.                 case "Cancel":
  3637. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  3638.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  3639.                     break;
  3640.                 case "Blocked":
  3641.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>';
  3642.                     break;
  3643.                 case "Unblocked":
  3644.                     $iconstatus ='<i class="icon-unlocked2 text-black"></i>';
  3645.                     break;
  3646.             }
  3647.             if ($proposal->getSent() == "Yes"){
  3648.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  3649.                 if ($proposal->getStatus() == "Pending"){
  3650. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  3651.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  3652.                 }
  3653.             }else{
  3654.                 $iconsent ='';
  3655.             }
  3656.             /* Consultas */
  3657.             $client $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  3658.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  3659.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  3660.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  3661.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  3662.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  3663.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  3664.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  3665.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  3666.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  3667.                 //no Visto
  3668.                 $novisto $this->translator->trans('Not seen');
  3669.             }else{
  3670.                 //visto
  3671.                 $novisto $this->translator->trans('Seen by Client');
  3672.             }
  3673.             //Nombres resumidos de los agentes
  3674.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  3675.             $agentesResumidos '';
  3676.             $nombreOne'';
  3677.             if (!empty($allAgentesResumidos)) {
  3678.                 if (!empty($allAgentesResumidos->getAgOne())) {
  3679.                     if ($allAgentesResumidos->getAgOne() != 0) {
  3680.                         // Hay Agente One
  3681.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  3682.                         if (empty($theOne)){ $theOne $em->getRepository(User::class)->findOneByid(6); }
  3683.                         $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  3684.                         if (!empty($agentesResumidos)) {
  3685.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  3686.                         } else {
  3687.                             $agentesResumidos $nombreOne;
  3688.                         }
  3689.                     }
  3690.                 }
  3691.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  3692.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  3693.                         // Hay Agente Two
  3694.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  3695.                         if (empty($theTwo)){ $theTwo $em->getRepository(User::class)->findOneByid(6); }
  3696.                         $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  3697.                         if (!empty($agentesResumidos)) {
  3698.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  3699.                         } else {
  3700.                             $agentesResumidos $nombreTwo;
  3701.                         }
  3702.                     }
  3703.                 }
  3704.                 if (!empty($allAgentesResumidos->getAgThree())) {
  3705.                     if ($allAgentesResumidos->getAgThree() != 0) {
  3706.                         // Hay Agente Three
  3707.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  3708.                         if (empty($theThree)){ $theThree $em->getRepository(User::class)->findOneByid(6); }
  3709.                         $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  3710.                         if (!empty($agentesResumidos)) {
  3711.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  3712.                         } else {
  3713.                             $agentesResumidos $nombreThree;
  3714.                         }
  3715.                     }
  3716.                 }
  3717.                 if (!empty($allAgentesResumidos->getAgFour())) {
  3718.                     if ($allAgentesResumidos->getAgFour() != 0) {
  3719.                         // Hay Agente Four
  3720.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  3721.                         if (empty($theFour)){ $theFour $em->getRepository(User::class)->findOneByid(6); }
  3722.                         $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  3723.                         if (!empty($agentesResumidos)) {
  3724.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  3725.                         } else {
  3726.                             $agentesResumidos $nombreFour;
  3727.                         }
  3728.                     }
  3729.                 }
  3730.             }
  3731.             if (strpos($agentesResumidos,',')===false){
  3732.                 //Hay mas de un agente
  3733.                 $masdeunagente true;
  3734.                 $agentView $agent;
  3735.             } else {
  3736.                 //No hay mas de un agente
  3737.                 $masdeunagente false;
  3738.                 $agentView $agentesResumidos;
  3739.             }
  3740.             //Nombres resumidos de los agentes
  3741.             if (empty($client)){ $client = new Client(); }
  3742.             if (empty($contact)){ $contact = new ClientContact(); }
  3743.             $datos_proposal[] = array(
  3744.                 'status'             => $this->translator->trans($proposal->getStatus()),
  3745.                 'iconstatus'         => $iconstatus,
  3746.                 'iconsent'           => $iconsent,
  3747.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  3748.                 'novisto'            => $novisto,
  3749.                 'create'             => $proposal->getDateProposedAt() == Null'' $proposal->getDateProposedAt()->format('d/m/Y'),
  3750.                 'id'                 => $proposal->getId(),
  3751.                 'token'              => $proposal->getAccessKey(),
  3752.                 'mcp'                => $proposal->getMcp(),
  3753.                 'name'               => $proposal->getName(),
  3754.                 'client'             => $client->getName(),
  3755.                 'client_id'          => $client->getId(),
  3756.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  3757.                 'contactdepartment'  => $contact->getDepartment(),
  3758.                 'contactphone'       => $contact->getPhone(),
  3759.                 'contactmovil'       => $contact->getMobile(),
  3760.                 'contactmail'        => $contact->getEmail(),
  3761.                 'commercial'         => $comercial,
  3762.                 'team'               => $team,
  3763.                 'agent'              => $agent,
  3764.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  3765.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  3766.                 'list_client'        => 'si',
  3767.                 'send'        => $proposal->getSent(),
  3768. //                'refagent'           => ''
  3769.                 'refagent'           => $agentView
  3770.             );
  3771.         }
  3772. //        $agent_data = $em->getRepository(User::class)->findAll();
  3773.         /* INICIO Consulta de agente activos MICE */
  3774.         $parameters = array(
  3775.             'status' => true
  3776.         );
  3777.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  3778.         $dql 'SELECT us
  3779.                         FROM App\Entity\User us
  3780.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  3781.                         ORDER BY us.name ASC';
  3782.         $query $em->createQuery($dql)->setParameters($parameters);
  3783.         $agent_data $query->getResult();
  3784.         /* FIN Consulta de agente activos MICE */
  3785.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig', array(
  3786.             'proposals' => $datos_proposal,
  3787.             'unassigned' => '',
  3788.             'agents' => $agent_data,
  3789.         ));
  3790.     }
  3791.     /**
  3792.      * @Route("/proposal/duplicate/{id}",  name="proposal_duplicate")
  3793.      */
  3794.     public function duplicateAction($id)
  3795.     {
  3796.         // Inicio: Se genera el nuevo proposal (Tabla Proposals)
  3797.         $em $this->getDoctrine()->getManager();
  3798.         $proposalOrigen $em->getRepository(Proposal::class)->findOneById($id);
  3799.         $proposal = new Proposal();
  3800.         $proposal->setName('PROPOSAL DUPLICADO (' $id '): '$proposalOrigen->getName());
  3801.         $proposal->setTitle('PROPOSAL DUPLICADO (' $id '): '$proposalOrigen->getTitle());
  3802.         $proposal->setCommission($proposalOrigen->getCommission());
  3803.         $proposal->setPax($proposalOrigen->getPax());
  3804.         $proposal->setBedrooms($proposalOrigen->getBedrooms());
  3805.         $proposal->setOfficeId($proposalOrigen->getOfficeId());
  3806.         $proposal->setClientId($proposalOrigen->getClientId());
  3807.         $proposal->setContactId($proposalOrigen->getContactId());
  3808.         $proposal->setReferenceName($proposalOrigen->getReferenceName());
  3809.         $proposal->setReferenceId($proposalOrigen->getReferenceId());
  3810. //        $proposal->setAgentId($proposalOrigen->getAgentId());                      No se duplicara el agente
  3811.         $proposal->setAgentId('0');
  3812. //        $proposal->setTeamId($proposalOrigen->getTeamId());                        No se duplicara nada de los agentes
  3813. //        $proposal->setAgentTwoId($proposalOrigen->getAgentTwoId());                No se duplicara el agente
  3814. //        $proposal->setAgencommercialId($proposalOrigen->getAgencommercialId());    No se duplicara nada de los agentes
  3815.         $proposal->setDateProposedAt(new \DateTime("now"));
  3816. //        $proposal->setDateEventStarAt($proposalOrigen->getDateEventStarAt());     // La fecha de inicio y fin del evento no debe ser la misma ya que podria bloquearse el proposal de forma automatica
  3817.         $proposal->setDateEventStarAt(new \DateTime("now"));
  3818. //        $proposal->setDateEventEndAt($proposalOrigen->getDateEventEndAt());       // La fecha de inicio y fin del evento no debe ser la misma ya que podria bloquearse el proposal de forma automatica
  3819.         $proposal->setDateEventEndAt(new \DateTime("now"));
  3820.         $proposal->setDaysEmailReminder($proposalOrigen->getDaysEmailReminder());
  3821.         $proposal->setLanguage($proposalOrigen->getLanguage());
  3822.         $proposal->setIncludeLogo($proposalOrigen->getIncludeLogo());
  3823.         $proposal->setVersionPpt($proposalOrigen->getVersionPpt());
  3824.         $proposal->setVersionExcel($proposalOrigen->getVersionExcel());
  3825.         $proposal->setVersionFlahs($proposalOrigen->getVersionFlahs());
  3826.         $proposal->setVersionWord($proposalOrigen->getVersionWord());
  3827.         $proposal->setBriefing($proposalOrigen->getBriefing());
  3828.         $proposal->setDatePresentationAt($proposalOrigen->getDatePresentationAt());
  3829.         $proposal->setStatus('Pending');
  3830. //        $proposal->setSent($proposalOrigen->getSent());                           No se copia el envio
  3831.         $proposal->setSelectType($proposalOrigen->getSelectType());
  3832.         $proposal->setCreatedAt(new \DateTime("now"));
  3833.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3834.         $proposal->setCreatedId($user_logueado->getId());                       //  El nuevo proposal lo crea es el usuario loggeado y no el usuario que creo el original
  3835.         $proposal->setUpdatedAt(new \DateTime("now"));                          // La fecha de actualizacion es la actual
  3836.         $proposal->setUpdatedId($user_logueado->getId());                       //  El nuevo proposal lo actualiza es el usuario loggeado y no el usuario que actualizo el original
  3837.         //Access Key para entrar en el proposal
  3838.         $accessKey md5('CR-JDEF'rand() * time());
  3839.         $proposal->setAccessKey($accessKey);
  3840. //        $proposal->setViewedAt($proposalOrigen->getViewedAt());                   Este proposal no ha sido visto por el usuario
  3841.         $proposal->setViewedAt(new \DateTime("now"));
  3842. //        $proposal->setObservation($proposalOrigen->getObservation());
  3843. //        $proposal->setSendAdmin($proposalOrigen->getSendAdmin());
  3844. //        $proposal->setMcp($proposalOrigen->getMcp());
  3845. //        $proposal->setImage($proposalOrigen->getImage());
  3846.         $proposal->setCategory($proposalOrigen->getCategory());
  3847.         $proposal->setIdMusic($proposalOrigen->getIdMusic());
  3848.         $em->persist($proposal);
  3849.         $em->flush();
  3850.         $newId $proposal->getId();
  3851.         $proposalAgents = new ProposalAgents();
  3852.         $proposalAgents->setAgOne('0');
  3853.         $proposalAgents->setAgOnePerc('0');
  3854.         $proposalAgents->setAgTwo('0');
  3855.         $proposalAgents->setAgTwoPerc('0');
  3856.         $proposalAgents->setAgThree('0');
  3857.         $proposalAgents->setAgThreePerc('0');
  3858.         $proposalAgents->setAgFour('0');
  3859.         $proposalAgents->setAgFourPerc('0');
  3860.         $proposalAgents->setIdProp($newId);
  3861.         $em->persist($proposalAgents);
  3862.         $em->flush();
  3863.         // Fin: Se genera el nuevo proposal (Tabla Proposals)
  3864.         // Inicio: Se generan los controles del proposal (Tabla Proposals_control)
  3865.         $proposalControlOrigen $em->getRepository(ProposalControl::class)->findByProposalId($id);
  3866.         $arrayTranslateProposalControl = array();
  3867.         foreach ($proposalControlOrigen as $control){
  3868.             $proposalControl = new ProposalControl();
  3869.             $proposalControl->setDestinationId($control->getDestinationId());
  3870.             $proposalControl->setDisabled($control->getDisabled());
  3871.             $proposalControl->setDisabledPresentation($control->getDisabledPresentation());
  3872.             $proposalControl->setProposalId($newId);
  3873.             $em->persist($proposalControl);
  3874.             $em->flush();
  3875.             $arrayTranslateProposalControl[$control->getId()] = $proposalControl->getId();      // Arreglo que traduce un indice del antiguo proposal control al nuevo
  3876.         }
  3877.         // Fin: Se generan los controles del proposal (Tabla Proposals_control)
  3878.         // Inicio: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  3879.         $proposalSupplierControlOrigen $em->getRepository(ProposalSupplierControl::class)->findByProposalId($id);
  3880.         $arrayTranslateProposalSupplierControl = array();
  3881.         foreach ($proposalSupplierControlOrigen as $supcontrol){
  3882.             $proposalSupplierControl = new ProposalSupplierControl();
  3883.             $proposalSupplierControl->setDestinoId($supcontrol->getDestinoId());
  3884.             $proposalSupplierControl->setSupplierId($supcontrol->getSupplierId());
  3885.             $proposalSupplierControl->setIdeaId($supcontrol->getIdeaId());
  3886.             $proposalSupplierControl->setStatus($supcontrol->getStatus());
  3887.             $proposalSupplierControl->setDisabled($supcontrol->getDisabled());
  3888.             $proposalSupplierControl->setRank($supcontrol->getRank());
  3889.             $proposalSupplierControl->setDateBlockLimit($supcontrol->getDateBlockLimit());
  3890.             $proposalSupplierControl->setActivityId($supcontrol->getActivityId());
  3891.             $proposalSupplierControl->setProposalId($newId);
  3892.             if (array_key_exists($supcontrol->getControlDestinationId(),$arrayTranslateProposalControl)) {
  3893.                 $proposalSupplierControl->setControlDestinationId($arrayTranslateProposalControl[$supcontrol->getControlDestinationId()]);
  3894.             } else {
  3895.                 $proposalSupplierControl->setControlDestinationId(1);
  3896.             }
  3897.             $em->persist($proposalSupplierControl);
  3898.             $em->flush();
  3899.             $arrayTranslateProposalSupplierControl[$supcontrol->getId()] = $proposalSupplierControl->getId();       // Arreglo que traduce un indice del antiguo proposal supplier control al nuevo
  3900.         }
  3901.         // Fin: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  3902.         // Inicio: Se generan los servicios (Proposals_supplier_services)
  3903.         $proposalSupplierServicesOrigen $em->getRepository(ProposalSupplierServices::class)->findByProposalId($id);
  3904.         foreach ($proposalSupplierServicesOrigen as $suppserv) {
  3905.             $proposalSupplierServices = new ProposalSupplierServices();
  3906.             $proposalSupplierServices->setServiceIdFather($suppserv->getServiceIdFather());
  3907.             $proposalSupplierServices->setDestinationId($suppserv->getDestinationId());
  3908.             $proposalSupplierServices->setSupplierId($suppserv->getSupplierId());
  3909.             $proposalSupplierServices->setIdeaId($suppserv->getIdeaId());
  3910.             $proposalSupplierServices->setActivityId($suppserv->getActivityId());
  3911.             $proposalSupplierServices->setServiceId($suppserv->getServiceId());
  3912.             $proposalSupplierServices->setServiceCatId($suppserv->getServiceCatId());
  3913.             $proposalSupplierServices->setServiceCatName($suppserv->getServiceCatName());
  3914.             $proposalSupplierServices->setName($suppserv->getName());
  3915.             $proposalSupplierServices->setPrice($suppserv->getPrice());
  3916.             $proposalSupplierServices->setCurrency($suppserv->getCurrency());
  3917.             $proposalSupplierServices->setUnits($suppserv->getUnits());
  3918.             $proposalSupplierServices->setCommission($suppserv->getCommission());
  3919.             $proposalSupplierServices->setOver($suppserv->getOver());
  3920.             $proposalSupplierServices->setIva($suppserv->getIva());
  3921.             $proposalSupplierServices->setPax($suppserv->getPax());
  3922.             $proposalSupplierServices->setHour($suppserv->getHour());
  3923.             $proposalSupplierServices->setDateInAt($suppserv->getDateInAt());             //  **************************************************
  3924.             $proposalSupplierServices->setDateOutAt($suppserv->getDateOutAt());           //  **************************************************
  3925.             $proposalSupplierServices->setDirectPayment($suppserv->getDirectPayment());
  3926.             $proposalSupplierServices->setStatus('Pending');
  3927.             $proposalSupplierServices->setCreatedAt(new \DateTime("now"));
  3928.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3929.             $proposalSupplierServices->setCreatedId($user_logueado->getId());
  3930.             $proposalSupplierServices->setUpdatedAt(new \DateTime("now"));
  3931.             $proposalSupplierServices->setUpdatedId($user_logueado->getId());
  3932.             $proposalSupplierServices->setStatusinternal($suppserv->getStatusinternal());
  3933.             $proposalSupplierServices->setPreCommission($suppserv->getPreCommission());
  3934.             $proposalSupplierServices->setPreIva($suppserv->getPreIva());
  3935.             $proposalSupplierServices->setDateBlockLimit($suppserv->getDateBlockLimit());
  3936.             $proposalSupplierServices->setOpCommission($suppserv->getOpCommission());
  3937.             $proposalSupplierServices->setOpOver($suppserv->getOpOver());
  3938.             $proposalSupplierServices->setOpIva($suppserv->getOpIva());
  3939.             $proposalSupplierServices->setBreakdown($suppserv->getBreakdown());
  3940.             $proposalSupplierServices->setIsFather($suppserv->getIsFather());
  3941.             $proposalSupplierServices->setRank($suppserv->getRank());
  3942.             $proposalSupplierServices->setOriginalopIva($suppserv->getOriginalopIva());
  3943.             $proposalSupplierServices->setOriginalIva($suppserv->getOriginalIva());
  3944.             $proposalSupplierServices->setOriginalPrice($suppserv->getOriginalPrice());
  3945.             $proposalSupplierServices->setStatusRec($suppserv->getStatusRec());
  3946. //            $proposalSupplierServices->setAssistantId($suppserv->getAssistantId());     //  **************************************************/
  3947.             $proposalSupplierServices->setProposalId($newId);
  3948.             $proposalSupplierServices->setControlId($arrayTranslateProposalSupplierControl[$suppserv->getControlId()]);
  3949.             $em->persist($proposalSupplierServices);
  3950.             $em->flush();
  3951.         }
  3952.         // Fin: Se generan los servicios (Proposals_supplier_services)
  3953.         return $this->redirectToRoute('proposal_edit', array('id'=>$newId));
  3954.     }
  3955.     /**
  3956.      * @Route("/proposal/duplicatedestination/{id}/{destiIdOriCtrl}",  name="proposal_duplicate_destination")
  3957.      */
  3958.     public function duplicateDestinationAction($id$destiIdOriCtrlRequest $request)
  3959.     {//$id = id del proposal; $destiIdOriCtrl destination Id Control del origen; $request contiene el Id destino
  3960.         $em $this->getDoctrine()->getManager();
  3961.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  3962.         // Verificamos STATUS, si esta Cancelado, Bloqueado o Facturado no se toma ninguna acción
  3963.         if (($proposal->getStatus()=='Cancel') or ($proposal->getStatus()=='Blocked') or ($proposal->getStatus()=='Invoiced')){
  3964.             return $this->redirectToRoute('proposal_edit', array('id'=>$id));
  3965.         }
  3966.         // Buscamos el Id de Origen
  3967.         $proposalControlOri $em->getRepository(ProposalControl::class)->findOneById($destiIdOriCtrl);
  3968.         $destiIdOri $proposalControlOri->getDestinationId();
  3969.         // Buscamos el Id de Destino
  3970.         $destiIdDst $request->request->get('destinationList');
  3971.         // Verificamos si hay un IdDestino, si no es asi no se toma ninguna acción
  3972.         if (empty($destiIdDst)){
  3973.             return $this->redirectToRoute('proposal_edit', array('id'=>$id));
  3974.         }
  3975.         // Inicio: Se genera el control del proposal para el destino en caso de no existir (Tabla Proposals_control)
  3976.         $proposalControlDst $em->getRepository(ProposalControl::class)->findOneBy(
  3977.             array(
  3978.                 'proposalId'=>$id,
  3979.                 'destinationId'=>$destiIdDst));
  3980.         // Si no existe el destino en el proposal se debe crear
  3981.         if (empty($proposalControlDst)){
  3982.             $proposalControlDst = new ProposalControl();
  3983.             $proposalControlDst->setProposalId($id);
  3984.             $proposalControlDst->setDestinationId($destiIdDst);
  3985.             $proposalControlDst->setDisabled(0);
  3986.             $proposalControlDst->setDisabledPresentation(0);
  3987.             $em->persist($proposalControlDst);
  3988.             $em->flush();
  3989.         }
  3990.         // Fin: Se genera el control del proposal para el destino en caso de no existir (Tabla Proposals_control)
  3991.         // Inicio: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  3992.         $proposalSupplierControlOrigen $em->getRepository(ProposalSupplierControl::class)->findBy(
  3993.             array(
  3994.                 'proposalId'=>$id,
  3995.                 'destinoId'=>$destiIdOri));
  3996.         $arrayTranslateProposalSupplierControl = array();
  3997.         foreach ($proposalSupplierControlOrigen as $supcontrol){
  3998.             //Verificamos que no exista previamente el ProposalSupplierControl
  3999.             $proposalSupplierControl $em->getRepository(ProposalSupplierControl::class)->findOneBy(
  4000.                 array(
  4001.                     'proposalId'=>$id,
  4002.                     'supplierId'=>$supcontrol->getSupplierId(),
  4003.                     'destinoId'=>$destiIdDst));
  4004.             if (empty($proposalSupplierControl)){
  4005.                 $proposalSupplierControl = new ProposalSupplierControl();
  4006.                 $proposalSupplierControl->setDestinoId($destiIdDst);
  4007.                 $proposalSupplierControl->setSupplierId($supcontrol->getSupplierId());
  4008.                 $proposalSupplierControl->setIdeaId($supcontrol->getIdeaId());
  4009.                 $proposalSupplierControl->setStatus($supcontrol->getStatus());
  4010.                 $proposalSupplierControl->setDisabled($supcontrol->getDisabled());
  4011.                 $proposalSupplierControl->setRank($supcontrol->getRank());
  4012.                 $proposalSupplierControl->setDateBlockLimit($supcontrol->getDateBlockLimit());
  4013.                 $proposalSupplierControl->setActivityId($supcontrol->getActivityId());
  4014.                 $proposalSupplierControl->setProposalId($id);
  4015.                 $proposalSupplierControl->setControlDestinationId($proposalControlDst->getId());
  4016.                 $em->persist($proposalSupplierControl);
  4017.                 $em->flush();
  4018.             }
  4019.             $arrayTranslateProposalSupplierControl[$supcontrol->getId()] = $proposalSupplierControl->getId();       // Arreglo que traduce un indice del antiguo proposal supplier control al nuevo
  4020.         }
  4021.         // Fin: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  4022.         // Inicio: Se generan los servicios (Proposals_supplier_services)
  4023.         $proposalSupplierServicesOrigen $em->getRepository(ProposalSupplierServices::class)->findByProposalId($id);
  4024.         foreach ($proposalSupplierServicesOrigen as $suppserv) {
  4025.             $proposalSupplierServices = new ProposalSupplierServices();
  4026.             $proposalSupplierServices->setServiceIdFather($suppserv->getServiceIdFather());
  4027. //            $proposalSupplierServices->setDestinationId($suppserv->getDestinationId());
  4028.             $proposalSupplierServices->setDestinationId($destiIdDst);
  4029.             $proposalSupplierServices->setSupplierId($suppserv->getSupplierId());
  4030.             $proposalSupplierServices->setIdeaId($suppserv->getIdeaId());
  4031.             $proposalSupplierServices->setActivityId($suppserv->getActivityId());
  4032.             $proposalSupplierServices->setServiceId($suppserv->getServiceId());
  4033.             $proposalSupplierServices->setServiceCatId($suppserv->getServiceCatId());
  4034.             $proposalSupplierServices->setServiceCatName($suppserv->getServiceCatName());
  4035.             $proposalSupplierServices->setName($suppserv->getName());
  4036.             $proposalSupplierServices->setPrice($suppserv->getPrice());
  4037.             $proposalSupplierServices->setCurrency($suppserv->getCurrency());
  4038.             $proposalSupplierServices->setUnits($suppserv->getUnits());
  4039.             $proposalSupplierServices->setCommission($suppserv->getCommission());
  4040.             $proposalSupplierServices->setOver($suppserv->getOver());
  4041.             $proposalSupplierServices->setIva($suppserv->getIva());
  4042.             $proposalSupplierServices->setPax($suppserv->getPax());
  4043.             $proposalSupplierServices->setHour($suppserv->getHour());
  4044.             $proposalSupplierServices->setDateInAt($suppserv->getDateInAt());
  4045.             $proposalSupplierServices->setDateOutAt($suppserv->getDateOutAt());
  4046.             $proposalSupplierServices->setDirectPayment($suppserv->getDirectPayment());
  4047.             $proposalSupplierServices->setStatus('Pending');
  4048.             $proposalSupplierServices->setCreatedAt(new \DateTime("now"));
  4049.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4050.             $proposalSupplierServices->setCreatedId($user_logueado->getId());
  4051.             $proposalSupplierServices->setUpdatedAt(new \DateTime("now"));
  4052.             $proposalSupplierServices->setUpdatedId($user_logueado->getId());
  4053.             $proposalSupplierServices->setStatusinternal($suppserv->getStatusinternal());
  4054.             $proposalSupplierServices->setPreCommission($suppserv->getPreCommission());
  4055.             $proposalSupplierServices->setPreIva($suppserv->getPreIva());
  4056.             $proposalSupplierServices->setDateBlockLimit($suppserv->getDateBlockLimit());
  4057.             $proposalSupplierServices->setOpCommission($suppserv->getOpCommission());
  4058.             $proposalSupplierServices->setOpOver($suppserv->getOpOver());
  4059.             $proposalSupplierServices->setOpIva($suppserv->getOpIva());
  4060.             $proposalSupplierServices->setBreakdown($suppserv->getBreakdown());
  4061.             $proposalSupplierServices->setIsFather($suppserv->getIsFather());
  4062.             $proposalSupplierServices->setRank($suppserv->getRank());
  4063.             $proposalSupplierServices->setOriginalopIva($suppserv->getOriginalopIva());
  4064.             $proposalSupplierServices->setOriginalIva($suppserv->getOriginalIva());
  4065.             $proposalSupplierServices->setOriginalPrice($suppserv->getOriginalPrice());
  4066.             $proposalSupplierServices->setStatusRec($suppserv->getStatusRec());
  4067. //            $proposalSupplierServices->setAssistantId($suppserv->getAssistantId());     //  **************************************************/
  4068.             $proposalSupplierServices->setProposalId($id);
  4069.             // Si existe el indice hay que crear y guardar el elemento,en caso contrario es un elemento que ya existia previamente en el destino
  4070.             if (array_key_exists($suppserv->getControlId(),$arrayTranslateProposalSupplierControl)){
  4071.                 $proposalSupplierServices->setControlId($arrayTranslateProposalSupplierControl[$suppserv->getControlId()]);
  4072.                 $em->persist($proposalSupplierServices);
  4073.                 $em->flush();
  4074.             }
  4075.         }
  4076.         // Fin: Se generan los servicios (Proposals_supplier_services)
  4077.         return $this->redirectToRoute('proposal_destination_view', array('id'=>$id));
  4078.     }
  4079.     /**
  4080.      * @Route("/proposal/mobile/viewbriefing/{id}",  name="proposal_mobile_view_briefing")
  4081.      * Vista para el movil del briefing del proposal para asignación del agente
  4082.      */
  4083.     public function viewBriefingMobileAction($id)
  4084.     {
  4085.         $em $this->getDoctrine()->getManager();
  4086.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  4087.         $agents $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  4088.         if (empty($proposal) or empty($proposal->getBriefing())){ return $this->redirectToRoute('proposal_edit', array('id'=>$id)); }
  4089.         /* INICIO Consulta de agente activos MICE */
  4090.         $parameters = array( 'status' => true );
  4091.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  4092.         $dql 'SELECT us
  4093.                 FROM App\Entity\User us
  4094.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  4095.                 ORDER BY us.name ASC';
  4096.         $query $em->createQuery($dql)->setParameters($parameters);
  4097.         $userAgents $query->getResult();
  4098.         /* FIN Consulta de agente activos MICE */
  4099.         return $this->render('MDS/EventsBundle/proposal/mobile-proposal-briefing.html.twig',
  4100.             array(
  4101.                 'id' => $id,
  4102.                 'token' => $proposal->getAccessKey(),
  4103.                 'mcp' => $proposal->getMcp(),
  4104.                 'proposal' => $proposal,
  4105.                 'briefing' => $proposal->getBriefing(),
  4106.                 'userAgents' => $userAgents,
  4107.                 'agents'=> $agents
  4108.             )
  4109.         );
  4110.     }
  4111.     /**
  4112.      * @Route("/proposal/mobile/updatebriefing/{id}",  name="proposal_mobile_update_briefing")
  4113.      * Actualizar desde el movil el briefing del proposal ID y sus agentes
  4114.      */
  4115.     public function updateBriefingMobileAction($idRequest $request){
  4116.         $em $this->getDoctrine()->getManager();
  4117.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  4118.         $agents $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  4119.         $propReq $request->request->get('proposal');
  4120.         //Verificamos si se cambia el agente
  4121.         $logNotify false;
  4122.         if (!empty($agents)){
  4123.             if ($agents->getAgOne() != $propReq['Agent1']){ $logNotify true; }
  4124.             if ($agents->getAgTwo() != $propReq['Agent2']){ $logNotify true; }
  4125.             if ($agents->getAgThree() != $propReq['Agent3']){ $logNotify true; }
  4126.             if ($agents->getAgFour() != $propReq['Agent4']){ $logNotify true; }
  4127.         } else {
  4128.             $logNotify true;
  4129.         }
  4130.         empty($propReq['Agent1']) ? $agents->setAgOne(0) : $agents->setAgOne($propReq['Agent1']);
  4131.         empty($propReq['Agent2']) ? $agents->setAgTwo(0) : $agents->setAgTwo($propReq['Agent2']);
  4132.         empty($propReq['Agent3']) ? $agents->setAgThree(0) : $agents->setAgThree($propReq['Agent3']);
  4133.         empty($propReq['Agent4']) ? $agents->setAgFour(0) : $agents->setAgFour($propReq['Agent4']);
  4134.         $em->persist($agents);
  4135.         $em->flush();
  4136.         $proposal->setBriefing($propReq['briefing']);
  4137.         $em->persist($proposal);
  4138.         $em->flush();
  4139.         if ($logNotify){
  4140.             //  NOTIFICAR AL AGENTE
  4141.             $agentToNotify = array();
  4142.             if (!empty($agents->getAgOne()) and ($agents->getAgOne() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgOne()); }
  4143.             if (!empty($agents->getAgTwo()) and ($agents->getAgTwo() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgTwo()); }
  4144.             if (!empty($agents->getAgThree()) and ($agents->getAgThree() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgThree()); }
  4145.             if (!empty($agents->getAgFour()) and ($agents->getAgFour() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgFour()); }
  4146.             //-- Envio correo a los agentes que hayan sido modificados
  4147.             $time = new \DateTime("now");
  4148.             foreach ($agentToNotify as $agent) {
  4149.                 $mailAgent[] = $agent->getEmail();
  4150.                 $agentMail $agent->getEmail();
  4151.                 $firmGmail $agent->getFirmGmail();
  4152.                 $mailAgentSent = array(
  4153.                     $agent->getEmail() => $agent->getName() . ' ' $agent->getLastName()
  4154.                 );
  4155.                 $data = array(
  4156.                     'body' => 'P#' $proposal->getId() . ', ' $proposal->getTitle() . '<br><a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/edit/' $proposal->getId() . '">Ir al Proposal</a><br><br>Alerta de Proposal Asignado: ' $time->format('d/m/Y H:i:s') . '<br><br>',
  4157.                     'firm' => $firmGmail,
  4158.                 );
  4159.                 // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  4160.                 $transporter = \Swift_SmtpTransport::newInstance()
  4161.                     ->setHost('smtp.gmail.com')
  4162.                     ->setEncryption('ssl')//ssl / tls
  4163.                     ->setPort(465)// 465 / 587
  4164.                     ->setUsername('desarrollo@develup.solutions')
  4165.                     ->setPassword('MeDITeRRANeAN_Develup30102023#');
  4166.                 $mailer = \Swift_Mailer::newInstance($transporter);
  4167.                 $message = \Swift_Message::newInstance()
  4168.                     ->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Asignado')
  4169.                     ->setSender($agentMail)
  4170.                     ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  4171.                     ->setReplyTo($agentMail)
  4172.                     ->setTo($mailAgent)
  4173.                     ->setBody(
  4174.                         $this->renderView(
  4175.                             'mail/structure-mail.html.twig',
  4176.                             array('data' => $data)
  4177.                         ),
  4178.                         'text/html'
  4179.                     );
  4180.                 $mailer->send($message);
  4181.             }
  4182.         }
  4183.         return $this->redirectToRoute('proposal_edit', array('id'=>$id));
  4184.     }
  4185.     private function NotifyAvExpress($proposal$avFile$originPrpDateStart$originPrpDateEnd$originPrpStatus)
  4186.     {
  4187.         $em $this->getDoctrine()->getManager();
  4188.         $agent $em->getRepository(User::class)->findOneById($proposal->getUpdatedId());
  4189.         $mailSubject '';
  4190.         $mailBody '';
  4191.         $boolStatus false;
  4192.         $boolDates false;
  4193.         if (($proposal->getStatus() == 'Confirmed') and !($proposal->getStatus() == $originPrpStatus)){
  4194.             $boolStatus true;
  4195.             $mailSubject $mailSubject.'Proposal #'.$proposal->getId().' CONFIRMADO, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4196.             $mailBody $mailBody.'<p>''Proposal #'.$proposal->getId().' <b>CONFIRMADO</b> por '.$agent->getName().' '.$agent->getLastName().'</p>';
  4197.             $mailBody $mailBody.'<p>''AvExpress #'.$avFile->getId().' - '.$avFile->getTitle().'</p>';
  4198. //            $mailBody = $mailBody.'<a href="http://127.0.0.1:8000/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente</a>';
  4199.             $mailBody $mailBody.'<a href="https://inout.mante.solutions/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente. Es necesario iniciar la sesión previamente.</a>';
  4200.             $mailBody $mailBody.'<p><br><br>''Fecha de actualización: '.$proposal->getUpdatedAt()->format('d/m/Y').'<p>';
  4201.         }
  4202.         if (($proposal->getStatus() == 'Cancel') and !($proposal->getStatus() == $originPrpStatus)){
  4203.             $boolStatus true;
  4204.             $mailSubject $mailSubject.'Proposal #'.$proposal->getId().' CANCELADO, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4205.             $mailBody $mailBody.'<p>''Proposal #'.$proposal->getId().' <b>CANCELADO</b> por '.$agent->getName().' '.$agent->getLastName().'</p>';
  4206.             $mailBody $mailBody.'<p>''AvExpress #'.$avFile->getId().' - '.$avFile->getTitle().'</p>';
  4207.             $mailBody $mailBody.'<a href="https://inout.mante.solutions/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente. Es necesario iniciar la sesión previamente.</a>';
  4208.             $mailBody $mailBody.'<p><br><br>''Fecha de actualización: '.$proposal->getUpdatedAt()->format('d/m/Y').'<p>';
  4209.         }
  4210.         if ((!($proposal->getDateEventStarAt()->format('dmY') == $originPrpDateStart->format('dmY'))) or ((!($proposal->getDateEventEndAt()->format('dmY') == $originPrpDateEnd->format('dmY'))))){
  4211.             $boolDates true;
  4212.             $mailSubject $mailSubject.'Proposal #'.$proposal->getId().' FECHAS MODIFICADAS, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4213.             $mailBody $mailBody.'<p>''Proposal #'.$proposal->getId().' <b>FECHAS MODIFICADAS</b> por '.$agent->getName().' '.$agent->getLastName().'</p>';
  4214.             $mailBody $mailBody.'<p>''AvExpress #'.$avFile->getId().' - '.$avFile->getTitle().'</p>';
  4215.             $mailBody $mailBody.'<p>''Fecha de inicio del evento: '.$proposal->getDateEventStarAt()->format('d/m/Y').'</p>';
  4216.             $mailBody $mailBody.'<p>''Fecha fin del evento: '.$proposal->getDateEventEndAt()->format('d/m/Y').'</p>';
  4217.             $mailBody $mailBody.'<a href="https://inout.mante.solutions/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente. Es necesario iniciar la sesión previamente.</a>';
  4218.             $mailBody $mailBody.'<p><br><br>''Fecha de actualización: '.$proposal->getUpdatedAt()->format('d/m/Y').'<p>';
  4219.         }
  4220.         if ($boolStatus and $boolDates){
  4221.             $mailSubject 'Proposal #'.$proposal->getId().' ESTADO Y FECHAS MODIFICADAS, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4222.         }
  4223.         $mailAddress 'gustavo.ayala@develup.solutions';
  4224.         $replyTo = array();
  4225.         $replyTo['salvador@avexpress.tv'] = 'salvador@avexpress.tv';
  4226.         $replyTo['ayudantedeproduccion@avexpress.tv'] = 'ayudantedeproduccion@avexpress.tv';
  4227.         $replyTo['ayudantedeproduccion2@avexpress.tv'] = 'ayudantedeproduccion2@avexpress.tv';
  4228.         $agentMail $mailAddress;
  4229.         //Se prepara el correo con los agentes a notificar
  4230.         $firmGmail $agent->getFirmGmail();
  4231.         $data = array(
  4232.             'body' => $mailBody,
  4233.             'firm' => $firmGmail,
  4234.         );
  4235.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  4236.         $transporter = new Swift_SmtpTransport();
  4237.         $transporter->setHost('smtp.gmail.com')
  4238.             ->setEncryption('ssl')//ssl / tls
  4239.             ->setPort(465)// 465 / 587
  4240.             ->setUsername('desarrollo@develup.solutions')
  4241.             ->setPassword('MeDITeRRANeAN_Develup30102023#');
  4242.         $mailer = new Swift_Mailer($transporter);
  4243.         $message = new Swift_Message();
  4244.         $message->setSubject($mailSubject)
  4245.             ->setSender($agentMail)
  4246.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  4247.             ->setReplyTo($agentMail)
  4248.             ->setTo($replyTo)
  4249.             ->setBody(
  4250.                 $this->renderView(
  4251.                     'mail/structure-mail.html.twig',
  4252.                     array('data' => $data)
  4253.                 ),
  4254.                 'text/html'
  4255.             );
  4256.         $mailer->send($message);
  4257.         return true;
  4258.     }
  4259.     private function AsignacionPorcentajeAgente(){
  4260.         // Solo Rafa, Elena, Yulia o algun ADMIN pueden asignar porcentajes
  4261.         $em $this->getDoctrine()->getManager();
  4262.         $bool false;
  4263.         /* Obtengo usuario logueado */
  4264.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4265.         $user_id $user_logueado->getId();
  4266.         $agent $em->getRepository(User::class)->findOneById($user_id);
  4267.         if (($agent->getRole() == 'ROLE_ADMIN') or ($agent->getId() == 22) or ($agent->getId() == 27)){ $bool true; }
  4268.         return $bool;
  4269.     }
  4270.     private function MontoPorcentajeAgente($numberAgent$arrayRequest){
  4271.         // Asignacion de valores por defecto a los porcentajes de los agentes
  4272.         // Las aignaciones son para un agente 100%, para dos agentes 60% y 40%, para tres agentes, 60%, 20% y 20%, para cuatro agentes, 25%, 25%, 25% y 25%
  4273.         // $numberAgent numero del agente sobre el cual se buscará el porcentaje
  4274.         // $arrayRequest contiene el arreglo con los nombre de los agentes
  4275.         $numeroAgentesSolicitados 0;
  4276.         $porcentajeParaAsignar 0;
  4277.         if (!empty($arrayRequest[0])) { $numeroAgentesSolicitados ++; }
  4278.         if (!empty($arrayRequest[1])) { $numeroAgentesSolicitados ++; }
  4279.         if (!empty($arrayRequest[2])) { $numeroAgentesSolicitados ++; }
  4280.         if (!empty($arrayRequest[3])) { $numeroAgentesSolicitados ++; }
  4281.         switch ($numeroAgentesSolicitados) {
  4282.             case 1:
  4283.                 switch ($numberAgent) {
  4284.                     case 1$porcentajeParaAsignar 100; break;
  4285.                     case 2$porcentajeParaAsignar 0; break;
  4286.                     case 3$porcentajeParaAsignar 0; break;
  4287.                     case 4$porcentajeParaAsignar 0; break;
  4288.                     default: break;
  4289.                 }
  4290.                 break;
  4291.             case 2:
  4292.                 switch ($numberAgent) {
  4293.                     case 1$porcentajeParaAsignar 60; break;
  4294.                     case 2$porcentajeParaAsignar 40; break;
  4295.                     case 3$porcentajeParaAsignar 0; break;
  4296.                     case 4$porcentajeParaAsignar 0; break;
  4297.                     default: break;
  4298.                 }
  4299.                 break;
  4300.             case 3:
  4301.                 switch ($numberAgent) {
  4302.                     case 1$porcentajeParaAsignar 60; break;
  4303.                     case 2$porcentajeParaAsignar 20; break;
  4304.                     case 3$porcentajeParaAsignar 20; break;
  4305.                     case 4$porcentajeParaAsignar 0; break;
  4306.                     default: break;
  4307.                 }
  4308.                 break;
  4309.             case 4:
  4310.                 switch ($numberAgent) {
  4311.                     case 1$porcentajeParaAsignar 25; break;
  4312.                     case 2$porcentajeParaAsignar 25; break;
  4313.                     case 3$porcentajeParaAsignar 25; break;
  4314.                     case 4$porcentajeParaAsignar 25; break;
  4315.                     default: break;
  4316.                 }
  4317.                 break;
  4318.             default: break;
  4319.         }
  4320.         return $porcentajeParaAsignar;
  4321.     }
  4322.     private function sendTelegramMail($id$idProp$text )
  4323.     {
  4324.         $em $this->getDoctrine()->getManager();
  4325.         $telegUser $em->getRepository(MdvTelegramUser::class)->findOneByUserId($id);
  4326.         $xbody '<a href="//' $_SERVER['HTTP_HOST'] . '/events/proposal/edit/' $idProp '">' $idProp '</a> ' $text;
  4327.         if (!empty($telegUser)) {
  4328.             $text 'NUEVO PROPOSAL - ' 'https://' $_SERVER['HTTP_HOST'] . '/events/proposal/mobile/viewbriefing/' $idProp;
  4329.             $parameters = array(
  4330.                 'chat_id' => $telegUser->getChatId(),
  4331.                 'text' => $text,
  4332.             );
  4333.             $bot_token $telegUser->getBotToken();
  4334.             $url "https://api.telegram.org/bot$bot_token/sendMessage";
  4335.             if (!$curl curl_init()) {
  4336.                 exit();
  4337.             }
  4338.             curl_setopt($curlCURLOPT_POSTtrue);
  4339.             curl_setopt($curlCURLOPT_POSTFIELDS$parameters);
  4340.             curl_setopt($curlCURLOPT_URL$url);
  4341.             curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  4342.             $output curl_exec($curl);
  4343.             curl_close($curl);
  4344.         }
  4345.         $agent $em->getRepository(User::class)->findOneById($id);
  4346.         $agentMail $agent->getEmail();
  4347.         $mailAgent $agentMail;
  4348.         //Se prepara el correo con los agentes a notificar
  4349.         $firmGmail $agent->getFirmGmail();
  4350.         $data = array(
  4351.             'body' => $xbody,
  4352.             'firm' => $firmGmail,
  4353.         );
  4354.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  4355.         $transporter = new Swift_SmtpTransport();
  4356.         $transporter->setHost('smtp.gmail.com')
  4357.             ->setEncryption('ssl')//ssl / tls
  4358.             ->setPort(465)// 465 / 587
  4359.             ->setUsername('desarrollo@develup.solutions')
  4360.             ->setPassword('MeDITeRRANeAN_Develup30102023#');
  4361.         $mailer = new Swift_Mailer($transporter);
  4362.         $message = new Swift_Message();
  4363.         $message->setSubject('Proposal #' $idProp', Notificación de nuevo proposal')
  4364.             ->setSender($agentMail)
  4365.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  4366.             ->setReplyTo($agentMail)
  4367.             ->setTo($mailAgent)
  4368.             ->setBody(
  4369.                 $this->renderView(
  4370.                     'mail/structure-mail.html.twig',
  4371.                     array('data' => $data)
  4372.                 ),
  4373.                 'text/html'
  4374.             );
  4375.         $mailer->send($message);
  4376.         return true;
  4377.     }
  4378. }