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

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('desarrollo@develup.solutions')
  447.                                     ->setPassword('utvh hzoi wfdo ztjs');
  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('desarrollo@develup.solutions')
  579.                                 ->setPassword('utvh hzoi wfdo ztjs');
  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('utvh hzoi wfdo ztjs');
  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('utvh hzoi wfdo ztjs');
  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('desarrollo@develup.solutions')
  2258.                             ->setPassword('utvh hzoi wfdo ztjs');
  2259.                         $mailer = new Swift_Mailer($transporter);
  2260.                         $message = new Swift_Message();
  2261.                         $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Confirmado')
  2262.                             ->setSender($agentMail)
  2263.                             ->setFrom($mailAgentSent)
  2264.                             ->setReplyTo($mailAgentSent)
  2265.                             ->setTo($mailTodos)
  2266.                             ->setBody(
  2267.                                 $this->renderView(
  2268.                                     'mail/structure-mail.html.twig',
  2269.                                     array('data' => $data)
  2270.                                 ),
  2271.                                 'text/html'
  2272.                             );
  2273.                         $mailer->send($message);
  2274.                         $proposal->setSendAdmin('yes');
  2275.                     }
  2276.                 }else{
  2277.                     $errorMessage $this->translator->trans('Attention: Confirmed Proposal, without assigned agent');
  2278.                     $this->addFlash('mensajeproposaldestinationerror'$errorMessage);
  2279.                 }
  2280.             }
  2281.             //-- Envio correo a los agentes que hayan sido modificados
  2282.             if(sizeof($agentToNotify)>0){
  2283.                 $time = new \DateTime("now");
  2284. //                $agent = $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2285.                 foreach ($agentToNotify as $agent) {
  2286. //                if (!empty($agent)){
  2287.                     $mailAgent[] = $agent->getEmail();
  2288.                     $agentMail $agent->getEmail();
  2289. //                    $passGmail = $agent->getPassGmail();
  2290.                     $firmGmail $agent->getFirmGmail();
  2291.                     $mailAgentSent = array(
  2292.                         $agent->getEmail() => $agent->getName() . ' ' $agent->getLastName()
  2293.                     );
  2294.                     $data = array(
  2295.                         '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>',
  2296.                         'firm' => $firmGmail,
  2297.                     );
  2298. //                    $mailTodos = $mailAgent;
  2299.                     // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  2300.                     $transporter = new Swift_SmtpTransport();
  2301.                     $transporter->setHost('smtp.gmail.com')
  2302.                         ->setEncryption('ssl')//ssl / tls
  2303.                         ->setPort(465)// 465 / 587
  2304.                         ->setUsername('desarrollo@develup.solutions')
  2305.                         ->setPassword('utvh hzoi wfdo ztjs');
  2306.                     $mailer = new Swift_Mailer($transporter);
  2307.                     $message = new Swift_Message();
  2308.                     $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Asignado')
  2309.                         ->setSender($agentMail)
  2310.                         ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  2311.                         ->setReplyTo($agentMail)
  2312.                         ->setTo($mailAgent)
  2313.                         ->setBody(
  2314.                             $this->renderView(
  2315.                                 'mail/structure-mail.html.twig',
  2316.                                 array('data' => $data)
  2317.                             ),
  2318.                             'text/html'
  2319.                         );
  2320.                     $mailer->send($message);
  2321.                 }
  2322.             }
  2323.             /* Obtengo usuario logueado */
  2324.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2325.             $user_id $user_logueado->getId();
  2326.             $proposal->setUpdatedId($user_id);
  2327.             $proposal->setDateProposedAt($created_at);
  2328.             if (empty($proposal->getDateProposedAt())){
  2329.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  2330.             }
  2331.             $em $this->getDoctrine()->getManager();
  2332. //            $em->persist($client);
  2333. //            $em->flush();
  2334.             /* Gestión de eventos en Log */
  2335.             $user_lastname $user_logueado->getLastname();
  2336.             $user_name $user_logueado->getName();
  2337.             $user_email $user_logueado->getEmail();
  2338.             $user_rol $user_logueado->getRoles();
  2339.             $event_url $request->getPathInfo();
  2340.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  2341.             if(!is_null($form->get('briefing')->getData())){
  2342.                 $reg_exp = array('<p>','<br></p>');
  2343.                 $briefing str_ireplace($reg_exp''$form->get('briefing')->getData());
  2344.                 $addBriefing = new ProposalBriefingList();
  2345.                 $addBriefing->setBriefing($briefing);
  2346.                 $addBriefing->setProposalId($id);
  2347.                 $addBriefing->setUserId($user_id);
  2348.                 $addBriefing->setUserName($user_name);
  2349.                 $addBriefing->setActualTime();
  2350.                 $proposal->setBriefing(null);
  2351.                 $em->persist($addBriefing);
  2352.                 $em->flush();
  2353.             }
  2354.             $hoy date('Y-m-d'strtotime('-31 day'));
  2355.             $fechaFinSt $fechaFin->format('Y-m-d');
  2356.             $expiredTime $fechaFinSt $hoy;
  2357.             // Si ponen el estado en desbloqueado y no es un administrador se debe deshacer el cambio
  2358.             if (($proposal->getStatus() == 'Unblocked') and ($user_rol[0] != 'ROLE_ADMIN')){
  2359.                 $proposal->setStatus($previusStatus);
  2360.             }
  2361.             // 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
  2362.             if ($expiredTime and ($user_rol[0] != 'ROLE_ADMIN')){
  2363.                 $proposal->setDateEventStarAt($fechaInicio);
  2364.                 $proposal->setDateEventEndAt($fechaFin);
  2365.                 $proposal->setStatus($previusStatus);
  2366.             }
  2367.             if (empty($proposal->getDateProposedAt())){
  2368.                 $proposal->setDateProposedAt($proposal->getCreatedAt());
  2369.             }
  2370.             $em->persist($proposal);
  2371.             $em->flush();
  2372.             $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2373.             if ($logicoNotificarCliente and !empty($agent)){
  2374.                 // Envio de correo notificacion al CLIENTE asignado
  2375.                 $time = new \DateTime("now");
  2376.                 $allAgents '<table width="100%">';
  2377.                 if ($propAgents->getAgOne() != 0){
  2378.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgOne());
  2379.                     $allAgents $allAgents '<tr>
  2380.                                     <td width="10%">'.
  2381. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2382.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2383.                                     </td width="90%">
  2384.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2385.                 }
  2386.                 if ($propAgents->getAgTwo() != 0){
  2387.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgTwo());
  2388.                     $allAgents $allAgents '<tr height="10px"></tr><tr>
  2389.                                     <td width="10%">'.
  2390. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2391.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2392.                                     </td width="90%">
  2393.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2394.                 }
  2395.                 if ($propAgents->getAgThree() != 0){
  2396.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgThree());
  2397.                     $allAgents $allAgents '<tr height="10px"></tr><tr>
  2398.                                     <td width="10%">'.
  2399. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2400.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2401.                                     </td width="90%">
  2402.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2403.                 }
  2404.                 if ($propAgents->getAgFour() != 0){
  2405.                     $age $em->getRepository(User::class)->findOneById($propAgents->getAgFour());
  2406.                     $allAgents $allAgents '<tr height="10px"></tr><tr>
  2407.                                     <td width="10%">'.
  2408. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $age->getPicture(). '" alt="No Image" height="45" width="45">
  2409.                         '<img src="https://inout.mante.solutions/'$age->getPicture(). '" alt="No Image" height="45" width="45">
  2410.                                     </td width="90%">
  2411.                                     <td>' $age->getName().' '$age->getLastName().' <br> Teléfono: '$age->getMobile() .' <br> Correo electrónico: '$age->getEmail() .'</td></tr>';
  2412.                 }
  2413.                 $allAgents $allAgents .'</table>';
  2414.                 $clara $em->getRepository(User::class)->findOneByEmail('clara.pedreno@avexpress.tv');
  2415.                 // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  2416.                 $tabClara '<table width="100%">';
  2417.                 $tabClara $tabClara '<tr>
  2418.                                 <td width="10%">'.
  2419. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2420.                     '<img src="https://inout.mante.solutions/'$clara->getPicture(). '" alt="No Image" height="45" width="45">
  2421.                                 </td width="90%">
  2422.                                 <td>' $clara->getName().' '$clara->getLastName().' <br> Teléfono: '$clara->getMobile() .' <br> Correo electrónico: '$clara->getEmail() .'</td></tr>';
  2423.                 $tabClara $tabClara .'</table>';
  2424.                 // Tabla de datos CLARA / DEPARTAMENTO DE RENDER Y CREATIVIDAD
  2425.                 // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  2426.                 if (!(strpos($proposal->getSelectType(),'TECNOLOGÍA')===false)){
  2427.                     // Tecnología estaba seleccionada entre las opciones
  2428.                     $jorge $em->getRepository(User::class)->findOneByEmail('jorge.defreitas@develup.solutions');
  2429.                     $tabJorge '<table width="100%">';
  2430.                     $tabJorge $tabJorge '<tr>
  2431.                                 <td width="10%">'.
  2432. //                                    '<img src="https://'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2433.                         '<img src="https://inout.mante.solutions/'$jorge->getPicture(). '" alt="No Image" height="45" width="45">
  2434.                                 </td width="90%">
  2435.                                 <td>' $jorge->getName().' '$jorge->getLastName().' <br> Teléfono: '$jorge->getMobile() .' <br> Correo electrónico: '$jorge->getEmail() .'</td></tr>';
  2436.                     $tabJorge $tabJorge .'</table>';
  2437.                     $tabClara $tabClara .'</p><p><b>Departamento de Tecnología&nbsp;</b></p><p>'$tabJorge;
  2438.                 }
  2439.                 // Tabla de datos Jorge / DEPARTAMENTO DE TECNOLOGIA
  2440.                 $rafa $em->getRepository(User::class)->findOneByEmail('rafael.guerrero@inout-travel.com');
  2441.                 // Tabla de datos RAFA
  2442.                 $tabRafa '<table width="100%">';
  2443.                 $tabRafa $tabRafa '<tr>
  2444.                                 <td width="10%">'.
  2445. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2446.                     '<img src="https://inout.mante.solutions/'$rafa->getPicture(). '" alt="No Image" height="45" width="45">
  2447.                                 </td width="90%">
  2448.                                 <td>' $rafa->getName().' '$rafa->getLastName().' <br> Teléfono: '$rafa->getMobile() .' <br> Correo electrónico: '$rafa->getEmail() .'</td></tr>';
  2449.                 $tabRafa $tabRafa .'</table>';
  2450.                 // FIN Tabla de datos RAFA
  2451.                 $salva $em->getRepository(User::class)->findOneByEmail('salvador@avexpress.tv');
  2452.                 // Tabla de datos SALVA
  2453.                 $tabSalva '<table width="100%">';
  2454.                 $tabSalva $tabSalva '<tr>
  2455.                                 <td width="10%">'.
  2456. //                                    '<img src="'.$_SERVER['HTTP_HOST'].'/'. $salva->getPicture(). '" alt="No Image" height="45" width="45">
  2457.                     '<img src="https://inout.mante.solutions/'$salva->getPicture(). '" alt="No Image" height="45" width="45">
  2458.                                 </td width="90%">
  2459.                                 <td>' $salva->getName().' '$salva->getLastName().' <br> Teléfono: '$salva->getMobile() .' <br> Correo electrónico: '$salva->getEmail() .'</td></tr>';
  2460.                 $tabSalva $tabSalva .'</table>';
  2461.                 // FIN Tabla de datos SALVA
  2462.                 $zclient $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  2463.                 $mailAgent[] = $agent->getEmail();
  2464.                 $agentMail $agent->getEmail();
  2465.                 $zagentReplyTo = array(
  2466.                     $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  2467.                 );
  2468.                 $firmGmail $agent->getFirmGmail();
  2469.                 $mailAgentSent = array(
  2470.                     $zclient->getEmail() => $zclient->getName()
  2471.                 );
  2472.                 $mailAgentFrom = array(
  2473.                     $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  2474.                 );
  2475.                 $data = array(
  2476.                     '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>',
  2477.                     '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>',
  2478.                 );
  2479.                 // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  2480.                 $transporter = new Swift_SmtpTransport();
  2481.                 $transporter->setHost('smtp.gmail.com')
  2482.                     ->setEncryption('ssl')//ssl / tls
  2483.                     ->setPort(465)// 465 / 587
  2484.                     ->setUsername('desarrollo@develup.solutions')
  2485.                     ->setPassword('utvh hzoi wfdo ztjs');
  2486.                 $mailer = new Swift_Mailer($transporter);
  2487.                 $message = new Swift_Message();
  2488.                 $message->setSubject('P#' $proposal->getId() . ', Alta de petición')
  2489.                     ->setSender($agentMail)
  2490.                     ->setFrom($mailAgentFrom)
  2491.                     ->setReplyTo($zagentReplyTo)
  2492.                     ->setTo($mailAgentSent)
  2493.                     ->setBody(
  2494.                         $this->renderView(
  2495.                             'mail/structure-mail.html.twig',
  2496.                             array('data' => $data)
  2497.                         ),
  2498.                         'text/html'
  2499.                     );
  2500.                 $mailer->send($message);
  2501.             }
  2502.             $event 'The Proposal has been Updated. Now';
  2503.             $successMessage $this->translator->trans($event);
  2504.             $this->addFlash('mensajeproposaldestination'$successMessage);
  2505. //            try{
  2506. //                $em->persist($client);
  2507. //                $em->flush();
  2508. //                $event = 'The Client has been Updated. Now';
  2509. //
  2510. //                $successMessage = $this->translator->trans($event);
  2511. //                $this->addFlash('mensajeclient', $successMessage);
  2512. //
  2513. //                $logger->info($event_complete.' | '.$event);
  2514. //
  2515. //            } catch (\Exception $e){
  2516. //
  2517. //                $event = 'An error occurred: '.$e->getMessage();
  2518. //
  2519. //                /* Para el log */
  2520. //                $logger->error($event_complete.' | '.$event);
  2521. //                /* Para el usuario */
  2522. //                $errorMessage = $this->translator->trans($event);
  2523. //                $this->addFlash('mensajeclienterror', $errorMessage);
  2524. //            }
  2525. //            /* Fin Gestión de eventos en Log */
  2526.             // ALL LO QUE HAY -- PROPOSAL NO ASIGNADOS
  2527. //            $parameterspc = array();
  2528. //            $dqlpc = 'SELECT COUNT (pc.id) FROM EventsBundle:Proposal pc WHERE pc.agentId is null';
  2529. //            $querypc = $em->createQuery($dqlpc)->setParameters($parameterspc);
  2530. //            $cantidadpc = $querypc->getResult();
  2531. //            $request->getSession()->set('_proposal_unassigned', $cantidadpc[0][1]);
  2532.             $parameterspc = array(
  2533.                 'pending' => 'Pending',
  2534.                 'confirmed' => 'Confirmed',
  2535.             );
  2536.             $dqlpc 'SELECT pc FROM EventsBundle:Proposal pc WHERE pc.agentId is null AND (pc.status = :pending or pc.status = :confirmed)';
  2537.             $querypc $em->createQuery($dqlpc)->setParameters($parameterspc);
  2538.             $cantidadpc $querypc->getResult();
  2539.             $request->getSession()->set('_proposal_unassigned'count($cantidadpc));
  2540.             // Notificar a AV Express si se cambia a estado de Confirmado/Cancelado o se cambia la fecha del evento
  2541.             $avFile $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal->getId());
  2542.             if (!empty($avFile)){
  2543.                 if ((!($originPrpStatus == 'Confirmed') and ($proposal->getStatus() == 'Confirmed')) or
  2544.                     (!($originPrpStatus == 'Cancel') and ($proposal->getStatus() == 'Cancel')) or
  2545.                     (!($originPrpDateStart->format('d/m/Y') == $proposal->getDateEventStarAt()->format('d/m/Y'))) or
  2546.                     (!($originPrpDateEnd->format('d/m/Y') == $proposal->getDateEventEndAt()->format('d/m/Y')))){
  2547.                     $this->NotifyAvExpress($proposal$avFile$originPrpDateStart$originPrpDateEnd$originPrpStatus);
  2548.                 }
  2549.             }
  2550.             return $this->redirectToRoute('proposal_destination_view',
  2551.                 array(
  2552.                     'id' => $id
  2553.                 )
  2554.             );
  2555.         }else{
  2556.             $errorMessage $this->translator->trans('Error, some fields are empty');
  2557.             $this->addFlash('mensajeproposaldestinationerror'$errorMessage);
  2558.         }
  2559. //        $userAgents = $em->getRepository(User::class)->findAll();
  2560.         /* INICIO Consulta de agente activos MICE */
  2561.         $parameters = array(
  2562.             'status' => true
  2563.         );
  2564.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  2565.         $dql 'SELECT us
  2566.                 FROM App\Entity\User us
  2567.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  2568.                 ORDER BY us.name ASC';
  2569.         $query $em->createQuery($dql)->setParameters($parameters);
  2570.         $userAgents $query->getResult();
  2571.         /* FIN Consulta de agente activos MICE */
  2572.         return $this->render('MDS/EventsBundle/proposal/add-proposal.html.twig', array(
  2573.                 'typeSupplier' => $type,
  2574.                 'userAgents' => $userAgents,
  2575.                 'form' => $form->createView()
  2576.             )
  2577.         );
  2578.     }
  2579.     /**
  2580.      * @Route("/proposals/events", name="get_proposal_select")
  2581.      */
  2582.     public function proposalSelectAction(Request $request) {
  2583.         $session = new Session();
  2584.         $token=$session->get('tokenGoogleCalendar');
  2585.         if (!is_null($token)) {
  2586.             $this->googleCalendar->setAccessToken($token);
  2587.             $connectGoogle "1";
  2588.         }else{
  2589.             $connectGoogle "0";
  2590.         }
  2591.         $em $this->getDoctrine()->getManager();
  2592.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2593.         $team_id $user_logueado->getTeam();
  2594.         $user_role $user_logueado->getRole();
  2595.         if ($user_role == 'ROLE_ADMIN'){ $team_id 1; }
  2596.         // Cargar los proposals que sean depués de un año atras desde el día de la búsqueda
  2597.         $dql "SELECT p
  2598.             FROM App\MDS\EventsBundle\Entity\Proposal p
  2599.             WHERE p.teamId = :teamId
  2600.             AND p.status in (:status)
  2601.             AND p.dateEventStarAt > :dateEventStarAt";
  2602.         $parameters = [
  2603.             'teamId' => $team_id,
  2604.             'status' => array('Confirmed''Invoiced'),
  2605.             'dateEventStarAt' => new DateTime('now -365 days'),
  2606.         ];
  2607.         $query $em->createQuery($dql)->setParameters($parameters);
  2608.         $proposals $query->getResult();
  2609.         $datos = array();
  2610.         if (!empty($proposals)){
  2611.             //Buscamos de una vez, todos los clientes y usuarios relacionados con los proposals
  2612.             $clientsIds array_map(function($proposal) { return $proposal->getClientId(); }, $proposals);
  2613.             $usersIds array_map(function($proposal) { return $proposal->getAgentId(); }, $proposals);
  2614.             $clients $em->getRepository(Client::class)->findById($clientsIds);
  2615.             $users $em->getRepository(User::class)->findById($usersIds);
  2616.             //Creamos arrays referenciados para encontrar los clientes y usuarios por su id.
  2617.             $clientsMapped array_reduce($clients, function($carry$client) {
  2618.                 $carry[$client->getId()] = $client;
  2619.                 return $carry;
  2620.             }, []);
  2621.             
  2622.             $usersMapped array_reduce($users, function($carry$user) {
  2623.                 $carry[$user->getId()] = $user;
  2624.                 return $carry;
  2625.             }, []);
  2626.             //Recorremos los proposals
  2627.             foreach($proposals as $proposal){
  2628.                 if ($connectGoogle == 1){
  2629.                     $egcuno '<a href="/calendar/addEvent/ep/'.$proposal->getId().'" class="text-white"><i class="icon-google-plus2"></i></a> ';
  2630.                 }else{
  2631.                     $egcuno '';
  2632.                 }
  2633.                 $clientId $proposal->getClientId();
  2634.                 $agentId $proposal->getAgentId();
  2635.                 $client $clientsMapped[$clientId] ?? null;
  2636.                 $user $usersMapped[$agentId] ?? null;
  2637.                 if(empty($user) || is_null($user)){
  2638.                     if(!is_null($proposal->getTeamId())){
  2639.                         $userAsignar $em->getRepository(User::class)->findOneBy(array('team'=>$proposal->getTeamId(),'teamleader'=>1));
  2640.                         if(!empty($userAsignar)){
  2641.                             $id=$userAsignar->getId();
  2642.                         }else{
  2643.                             $id null;
  2644.                         }
  2645.                     }else{
  2646.                         $id null;
  2647.                     }
  2648.                     if (!is_null($id)){
  2649.                         $proposal->setAgentId($id);
  2650.                         $em->persist($proposal);
  2651.                         $em->flush();
  2652.                         $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2653.                         $userColor $user->getColor();
  2654.                         $userPicture $user->getPicture();
  2655.                         $userLastname $user->getLastname();
  2656.                         $userName $user->getName();
  2657.                     }else{
  2658.                         $userColor "#ff0000";
  2659.                         $userPicture null;
  2660.                         $userLastname "Not Assigned";
  2661.                         $userName "Not Assigned";
  2662.                     }
  2663.                 }else{
  2664.                     $userColor $user->getColor();
  2665.                     $userPicture $user->getPicture();
  2666.                     $userLastname $user->getLastname();
  2667.                     $userName $user->getName();
  2668.                 }
  2669.                 $colorHay $userColor;
  2670.                 if (empty($colorHay)){
  2671.                     $color "#ff0000";
  2672.                 }else{
  2673.                     $color $userColor;
  2674.                 }
  2675.                 if (is_null($userPicture)){
  2676.                     $picture "";
  2677.                 }else{
  2678.                     $picture "<img src='".$userPicture."' class='img-circle img-lg'><br>";
  2679.                 }
  2680.                 $tooltip $picture." ".
  2681.                     $userName." ".$userLastname."<br>".
  2682.                     $client->getName()."<br>".
  2683.                     $proposal->getName()."</b><br>";
  2684.                 $datos[] = array(
  2685.                     "id" => $proposal->getId(),
  2686.                     "title" => $egcuno.$userName." ".$userLastname." | ".$client->getName().": ".$proposal->getName(),
  2687.                     "tooltip" => $tooltip,
  2688.                     "start" => $proposal->getDateEventStarAt(),
  2689.                     "end" => $proposal->getDateEventEndAt(),
  2690.                     "color" => $color,
  2691.                     "url" => "/events/proposal/destination/add/".$proposal->getId()
  2692.                 );
  2693.             }
  2694.         }
  2695.         $return = array(
  2696.             'proposal' => $datos,
  2697.         );
  2698.         $response = new JsonResponse($return);
  2699.         return $response;
  2700.     }
  2701.     /**
  2702.      * @Route("/proposals/events-admin", name="get_proposal_select-admin")
  2703.      */
  2704.     public function proposalAdminSelectAction(Request $request) {
  2705.         $session = new Session();
  2706.         $token=$session->get('tokenGoogleCalendar');
  2707.         if (!is_null($token)) {
  2708.             $this->googleCalendar->setAccessToken($token);
  2709.             $connectGoogle "1";
  2710.         }else{
  2711.             $connectGoogle "0";
  2712.         }
  2713.         $em $this->getDoctrine()->getManager();
  2714.         $proposals $em->getRepository(Proposal::class)->findBy(
  2715.             array(
  2716.                 'status' => array('Confirmed''Invoiced'),
  2717.                 ),
  2718.             array('dateEventStarAt' => 'ASC')
  2719.         );
  2720.         $datos = array();
  2721.         if (!empty($proposals)){
  2722.             foreach($proposals as $proposal){
  2723.                 if ($connectGoogle == 1){
  2724.                     $egcuno '<a href="/calendar/addEvent/ep/'.$proposal->getId().'" class="text-white"><i class="icon-google-plus2"></i></a> ';
  2725.                 }else{
  2726.                     $egcuno '';
  2727.                 }
  2728.                 $client $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  2729.                 $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2730.                 if(empty($user) || is_null($user)){
  2731. //                    d($proposal->getAgentTwoId());
  2732.                     if(!is_null($proposal->getTeamId())){
  2733.                         $userAsignar $em->getRepository(User::class)->findOneBy(array('team'=>$proposal->getTeamId(),'teamleader'=>1));
  2734.                         if(!empty($userAsignar)){
  2735.                             $id=$userAsignar->getId();
  2736.                         }else{
  2737.                             $id null;
  2738.                         }
  2739.                     }else{
  2740.                         $id null;
  2741.                     }
  2742. //                    d($id);
  2743.                     if (!is_null($id)){
  2744.                         $proposal->setAgentId($id);
  2745.                         $em->persist($proposal);
  2746.                         $em->flush();
  2747.                         $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2748.                         $userColor $user->getColor();
  2749.                         $userPicture $user->getPicture();
  2750.                         $userLastname $user->getLastname();
  2751.                         $userName $user->getName();
  2752.                     }else{
  2753.                         $userColor "#ff0000";
  2754.                         $userPicture null;
  2755.                         $userLastname "Not Assigned";
  2756.                         $userName "Not Assigned";
  2757.                     }
  2758.                 }else{
  2759.                     $userColor $user->getColor();
  2760.                     $userPicture $user->getPicture();
  2761.                     $userLastname $user->getLastname();
  2762.                     $userName $user->getName();
  2763.                 }
  2764.                 $colorHay $userColor;
  2765.                 if (empty($colorHay)){
  2766.                     $color "#ff0000";
  2767.                 }else{
  2768.                     $color $userColor;
  2769.                 }
  2770.                 if (is_null($userPicture)){
  2771.                     $picture "";
  2772.                 }else{
  2773.                     $picture "<img src='".$userPicture."' class='img-circle img-lg'><br>";
  2774.                 }
  2775.                 $tooltip $picture." ".
  2776.                     $userName." ".$userLastname."<br>".
  2777.                     $client->getName()."<br>".
  2778.                     $proposal->getName()."</b><br>";
  2779.                 $datos[] = array(
  2780.                     "id" => $proposal->getId(),
  2781.                     "title" => $egcuno.$userName." ".$userLastname." | ".$client->getName().": ".$proposal->getName(),
  2782.                     "tooltip" => $tooltip,
  2783.                     "start" => $proposal->getDateEventStarAt(),
  2784.                     "end" => $proposal->getDateEventEndAt(),
  2785.                     "color" => $color,
  2786.                     "url" => "/events/proposal/destination/add/".$proposal->getId()
  2787.                 );
  2788.             }
  2789.         }
  2790.         else
  2791.         {
  2792.             $datos = [];
  2793.         }
  2794.         $return = array(
  2795.             'proposal' => $datos,
  2796.         );
  2797.         $response = new JsonResponse($return);
  2798.         return $response;
  2799.     }
  2800.     /**
  2801.      * @Route("/proposal/sentmail/{id}", name="list_SentMail_Proposal")
  2802.      */
  2803.     public function listSentMailAction($idRequest $request)
  2804.     {
  2805.         $em $this->getDoctrine()->getManager();
  2806.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  2807.         $sentMaillist $em->getRepository(SendMail::class)->findByProposalId($id);
  2808.         return $this->render('MDS/EventsBundle/mail/list-mail.html.twig', array(
  2809.             'id' => $id,
  2810.             'token' => $proposal->getAccessKey(),
  2811.             'mcp' => $proposal->getMcp(),
  2812.             'mailsent' => $sentMaillist
  2813.         ));
  2814.     }
  2815.     /**
  2816.      * @Route("/proposal/detailsmail/{idm}/{id}", name="list_DeatilsMail_Proposal")
  2817.      */
  2818.     public function listDetailsMailAction($idm$idRequest $request)
  2819.     {
  2820.         $em $this->getDoctrine()->getManager();
  2821.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  2822.         $sentMaillist $em->getRepository(SendMail::class)->findOneById($idm);
  2823.         return $this->render('MDS/EventsBundle/mail/details-mail.html.twig', array(
  2824.             'id' => $id,
  2825.             'idm' => $idm,
  2826.             'token' => $proposal->getAccessKey(),
  2827.             'mcp' => $proposal->getMcp(),
  2828.             'mailsent' => $sentMaillist
  2829.         ));
  2830.     }
  2831.     /**
  2832.      * @Route("/proposal/cancel/{id}",  name="proposal_cancel")
  2833.      */
  2834.     public function cancelAction($idRequest $request)
  2835.     {
  2836.         $em $this->getDoctrine()->getManager();
  2837.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  2838.         if($proposal->getAgentId() == null){
  2839.             $proposal->setAgentId(999999);
  2840.             $proposal->setAgentTwoId('999999');
  2841.         }
  2842.         $proposal->setStatus('Cancel');
  2843.         $em->persist($proposal);
  2844.         $em->flush();
  2845.         $event 'The Proposal has been canceled.';
  2846.         $successMessage $this->translator->trans($event);
  2847.         $this->addFlash('mensajeproposaldestination'$successMessage);
  2848.         $parameterspc = array(
  2849.             'pending' => 'Pending',
  2850.             'confirmed' => 'Confirmed',
  2851.         );
  2852.         $dqlpc 'SELECT pc FROM EventsBundle:Proposal pc WHERE pc.agentId is null AND (pc.status = :pending or pc.status = :confirmed)';
  2853.         $querypc $em->createQuery($dqlpc)->setParameters($parameterspc);
  2854.         $cantidadpc $querypc->getResult();
  2855.         $request->getSession()->set('_proposal_unassigned'count($cantidadpc));
  2856.         
  2857.         if ( is_null(($proposal->getAgentId())) and is_null(($proposal->getAgentTwoId()))){
  2858.             //No tiene agente asignado, el controlador fue llamado desde Unassigned Porposals
  2859.             return $this->redirectToRoute('proposal_list_unassigned');
  2860.         } else {
  2861.             return $this->redirectToRoute('proposal_list');
  2862.         }
  2863.     }
  2864.     /**
  2865.      * @Route("/proposal/blocked/list", name="proposal_list_blocked")
  2866.      */
  2867.     public function indexListBlockedAction(Request $request)
  2868.     {
  2869.         $em $this->getDoctrine()->getManager();
  2870.         $props $em->getRepository(Proposal::class)->findAll();
  2871.         $proposals = array();
  2872.         foreach ($props as $prop){
  2873.             if ($prop->getStatus() == 'Blocked'){
  2874.                 $proposals[] = $prop;
  2875.             }
  2876.         }
  2877. //        $proposals = $em->getRepository(Proposal::class)->findBy(
  2878. //            array(
  2879. //                'status' =>  $status
  2880. //            )
  2881. //        );
  2882. //        $proposals = $em->getRepository(Proposal::class)->findByStatus($status);
  2883. //        $desde = $request->request->get('buscarFecha')['desde'];
  2884. //        $hasta = $request->request->get('buscarFecha')['hasta'];
  2885. //        $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  2886. //
  2887. //        if (empty($desde) && empty($hasta))
  2888. //        {
  2889. //            if(empty($cliente))
  2890. //            {
  2891. //                $hoy = date('Y').'-01-01';
  2892. ////                $hoy->modify('-3 month');
  2893. //                $parameters = array(
  2894. //                    'hoy' => $hoy,
  2895. //                    'status' => 'Blocked'
  2896. //                );
  2897. //                $dql = 'SELECT p
  2898. //                        FROM EventsBundle:Proposal p
  2899. //                        WHERE p.dateEventStarAt >= :hoy AND p.status = :status
  2900. //                        ORDER BY p.id DESC';
  2901. //
  2902. //                $query = $em->createQuery($dql)->setParameters($parameters);
  2903. //              //  $proposals = $query->getResult();
  2904. //
  2905. //            }
  2906. //            else
  2907. //            {
  2908. //                /* Si solo tiene el cliente id lo reenvió a consulta por id cliente */
  2909. //                return $this->redirectToRoute('proposal_list_client', array(
  2910. //                    'id' => $cliente
  2911. //                ));
  2912. //            }
  2913. //
  2914. //        }
  2915. //        else
  2916. //        {
  2917. //            /* Consulta con fechas desde y hasta con id cliente */
  2918. //            if(!empty($cliente)){
  2919. //                $parameters = array(
  2920. //                    'desde' => $desde,
  2921. //                    'hasta' => $hasta,
  2922. //                    'cliente' => $cliente,
  2923. //                    'status' => 'Blocked'
  2924. //                );
  2925. //
  2926. //                $dql = 'SELECT p
  2927. //                        FROM EventsBundle:Proposal p
  2928. //                        WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente and p.agentId IS null and p.status = :status
  2929. //                        ORDER BY p.id DESC';
  2930. ////                        ORDER BY p.dateProposedAt DESC';
  2931. //            }
  2932. //            else
  2933. //            {
  2934. //                /* Consulta con fechas desde y hasta sin id cliente */
  2935. //                $parameters = array(
  2936. //                    'desde' => $desde,
  2937. //                    'hasta' => $hasta,
  2938. //                    'status' => 'Blocked'
  2939. //                );
  2940. //
  2941. //                $dql = 'SELECT p
  2942. //                        FROM EventsBundle:Proposal p
  2943. //                        WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta and (p.agentId IS null) and p.status = :status
  2944. //                        ORDER BY p.id DESC';
  2945. ////                        ORDER BY p.dateProposedAt DESC';
  2946. //            }
  2947. //
  2948. //            $query = $em->createQuery($dql)->setParameters($parameters);
  2949. //            $proposals = $query->getResult();
  2950. //        }
  2951.         $datos_proposal = array();
  2952.         foreach($proposals as $proposal){
  2953.             /*
  2954.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  2955.              * */
  2956.             switch ($proposal->getStatus()) {
  2957.                 case "Pending":
  2958. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  2959.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  2960.                     break;
  2961.                 case "Sent":
  2962.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  2963.                     break;
  2964.                 case "Confirmed":
  2965. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  2966.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  2967.                     break;
  2968.                 case "Invoiced":
  2969. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  2970.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  2971.                     break;
  2972.                 case "Cancel":
  2973. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  2974.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  2975.                     break;
  2976.                 case "Blocked":
  2977.                     $iconstatus ='<i class=" icon-lock2 text-grey"></i>';
  2978.                     break;
  2979.             }
  2980.             if ($proposal->getSent() == "Yes"){
  2981.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  2982.                 if ($proposal->getStatus() == "Pending"){
  2983. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  2984.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  2985.                 }
  2986.             }else{
  2987.                 $iconsent ='';
  2988.             }
  2989.             /* Consultas */
  2990.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  2991.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  2992.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  2993.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  2994.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  2995.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  2996.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2997.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  2998.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  2999.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  3000.                 //no Visto
  3001.                 $novisto $this->translator->trans('Not seen');
  3002.             }else{
  3003.                 //visto
  3004.                 $novisto $this->translator->trans('Seen by Client');
  3005.             }
  3006.             //Nombres resumidos de los agentes
  3007.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  3008.             $agentesResumidos '';
  3009.             $nombreOne'';
  3010.             if (!empty($allAgentesResumidos)) {
  3011.                 if (!empty($allAgentesResumidos->getAgOne())) {
  3012.                     if ($allAgentesResumidos->getAgOne() != 0) {
  3013.                         // Hay Agente One
  3014.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  3015.                         if(is_null($theOne)){
  3016.                             $nombreOne 'N/A';
  3017.                         }else{
  3018.                             $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  3019.                         }
  3020.                         if (!empty($agentesResumidos)) {
  3021.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  3022.                         } else {
  3023.                             $agentesResumidos $nombreOne;
  3024.                         }
  3025.                     }
  3026.                 }
  3027.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  3028.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  3029.                         // Hay Agente Two
  3030.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  3031.                         if(is_null($theTwo)){
  3032.                             $nombreTwo 'N/A';
  3033.                         }else{
  3034.                             $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  3035.                         }
  3036.                         if (!empty($agentesResumidos)) {
  3037.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  3038.                         } else {
  3039.                             $agentesResumidos $nombreTwo;
  3040.                         }
  3041.                     }
  3042.                 }
  3043.                 if (!empty($allAgentesResumidos->getAgThree())) {
  3044.                     if ($allAgentesResumidos->getAgThree() != 0) {
  3045.                         // Hay Agente Three
  3046.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  3047.                         if(is_null($theThree)){
  3048.                             $nombreThree 'N/A';
  3049.                         }else{
  3050.                             $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  3051.                         }
  3052.                         if (!empty($agentesResumidos)) {
  3053.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  3054.                         } else {
  3055.                             $agentesResumidos $nombreThree;
  3056.                         }
  3057.                     }
  3058.                 }
  3059.                 if (!empty($allAgentesResumidos->getAgFour())) {
  3060.                     if ($allAgentesResumidos->getAgFour() != 0) {
  3061.                         // Hay Agente Four
  3062.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  3063.                         if(is_null($theFour)){
  3064.                             $nombreFour 'N/A';
  3065.                         }else{
  3066.                             $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  3067.                         }
  3068.                         if (!empty($agentesResumidos)) {
  3069.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  3070.                         } else {
  3071.                             $agentesResumidos $nombreFour;
  3072.                         }
  3073.                     }
  3074.                 }
  3075.             }
  3076.             if (strpos($agentesResumidos,',')===false){
  3077.                 //Hay mas de un agente
  3078.                 $masdeunagente true;
  3079.                 $agentView $agent;
  3080.             } else {
  3081.                 //No hay mas de un agente
  3082.                 $masdeunagente false;
  3083.                 $agentView $agentesResumidos;
  3084.             }
  3085.             //Nombres resumidos de los agentes
  3086.             $datos_proposal[] = array(
  3087.                 'status'             => $this->translator->trans($proposal->getStatus()),
  3088.                 'iconstatus'         => $iconstatus,
  3089.                 'iconsent'           => $iconsent,
  3090.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  3091.                 'novisto'            => $novisto,
  3092.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  3093.                 'id'                 => $proposal->getId(),
  3094.                 'token'              => $proposal->getAccessKey(),
  3095.                 'mcp'                => $proposal->getMcp(),
  3096.                 'name'               => $proposal->getName(),
  3097.                 'client'             => $client->getName(),
  3098.                 'client_id'          => $client->getId(),
  3099.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  3100.                 'contactdepartment'  => $contact->getDepartment(),
  3101.                 'contactphone'       => $contact->getPhone(),
  3102.                 'contactmovil'       => $contact->getMobile(),
  3103.                 'contactmail'        => $contact->getEmail(),
  3104.                 'commercial'         => $comercial,
  3105.                 'team'               => $team,
  3106.                 'agent'              => $agent,
  3107.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  3108.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  3109.                 'list_client'        => 'si',
  3110.                 'send'        => $proposal->getSent(),
  3111. //                'refagent'           => ''
  3112.                 'refagent'           => $agentView
  3113.             );
  3114.         }
  3115. //        $agent_data = $em->getRepository(User::class)->findAll();
  3116.         /* INICIO Consulta de agente activos MICE */
  3117.         $parameters = array(
  3118.             'status' => true
  3119.         );
  3120.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  3121.         $dql 'SELECT us
  3122.                         FROM App\Entity\User us
  3123.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  3124.                         ORDER BY us.name ASC';
  3125.         $query $em->createQuery($dql)->setParameters($parameters);
  3126.         $agent_data $query->getResult();
  3127.         /* FIN Consulta de agente activos MICE */
  3128.         return $this->render('MDS/EventsBundle/proposal/list-proposal-blocked.html.twig', array(
  3129.             'proposals' => $datos_proposal,
  3130.             'numblock' => sizeof($datos_proposal),
  3131.             'unassigned' => 'Unassigned',
  3132.             'agents' => $agent_data,
  3133.         ));
  3134.     }
  3135.     /**
  3136.      * @Route("/proposal/my/list", name="proposal_my")
  3137.      */
  3138.     public function indexListMyAction(Request $request)
  3139.     {
  3140.         /* Obtengo usuario logueado */
  3141.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3142.         $user_id $user_logueado->getId();
  3143.         $em $this->getDoctrine()->getManager();
  3144.         $desde = isset($request->request->get('buscarFecha')['desde'])? $request->request->get('buscarFecha')['desde'] : '';
  3145.         $hasta = isset($request->request->get('buscarFecha')['hasta'])? $request->request->get('buscarFecha')['hasta'] : '';;
  3146.         $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  3147.         $agentId = isset($request->request->get('data')['agent'])? $request->request->get('data')['agent'] : '';
  3148.         if (empty($desde) && empty($hasta))
  3149.         {
  3150.             if(empty($cliente))
  3151.             {
  3152.                 if(empty($agentId))
  3153.                 {
  3154.                     $parameters = array(
  3155.                         'idUser' => $user_id
  3156.                     );
  3157.                     $dql 'SELECT p
  3158.                         FROM EventsBundle:Proposal p
  3159.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3160.                         WHERE pa.agOne = :idUser
  3161.                         OR pa.agTwo = :idUser OR pa.agThree = :idUser OR pa.agFour = :idUser
  3162.                         ORDER BY p.id DESC';
  3163.                     $query $em->createQuery($dql)->setParameters($parameters);
  3164.                     $proposals $query->getResult();
  3165.                 }
  3166.                 else
  3167.                 {// El buscador no esta llegando a este punto ya que devuelve a la lista principal, corregir cuando haya tiempo creando un nuevo buscador
  3168.                     $parameters = array(
  3169.                         'idUser' => $user_id,
  3170.                         'agentId' => $agentId
  3171.                     );
  3172.                     $dql 'SELECT p
  3173.                         FROM EventsBundle:Proposal p
  3174.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3175.                         WHERE (pa.agOne = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId))
  3176.                         OR (pa.agTwo = :idUser and (pa.agOne = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId)) 
  3177.                         OR (pa.agThree = :idUser and (pa.agTwo = :agentId OR pa.agOne = :agentId OR pa.agFour = :agentId)) 
  3178.                         OR (pa.agFour = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agOne = :agentId)) 
  3179.                         ORDER BY p.id DESC';
  3180.                     $query $em->createQuery($dql)->setParameters($parameters);
  3181.                     $proposals $query->getResult();
  3182.                 }
  3183.             }
  3184.             else
  3185.             {   // el cliente no viene vacio
  3186.                 if(empty($agentId))
  3187.                 {
  3188.                     // El buscador no esta llegando a este punto ya que devuelve a la lista principal, corregir cuando haya tiempo creando un nuevo buscador
  3189.                     $parameters = array(
  3190.                         'cliente' => $cliente,
  3191.                         'idUser' => $user_id
  3192.                     );
  3193.                     $dql 'SELECT p
  3194.                         FROM EventsBundle:Proposal p
  3195.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3196.                         WHERE (pa.agOne = :idUser and (p.clientId = cliente))
  3197.                         OR (pa.agTwo = :idUser and (p.clientId = cliente)) 
  3198.                         OR (pa.agThree = :idUser and (p.clientId = cliente)) 
  3199.                         OR (pa.agFour = :idUser and (p.clientId = cliente)) 
  3200.                         ORDER BY p.id DESC';
  3201.                     $query $em->createQuery($dql)->setParameters($parameters);
  3202.                     $proposals $query->getResult();
  3203.                 }
  3204.                 else
  3205.                 {   //el cliente no viene vacio y hay agente
  3206.                     // El buscador no esta llegando a este punto ya que devuelve a la lista principal, corregir cuando haya tiempo creando un nuevo buscador
  3207.                     $parameters = array(
  3208.                         'cliente' => $cliente,
  3209.                         'idUser' => $user_id,
  3210.                         'agentId' => $agentId
  3211.                     );
  3212.                     $dql 'SELECT p
  3213.                         FROM EventsBundle:Proposal p
  3214.                         INNER JOIN EventsBundle:ProposalAgents pa WITH p.id = pa.idProp
  3215.                         WHERE (pa.agOne = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId) and (p.clientId = cliente))
  3216.                         OR (pa.agTwo = :idUser and (pa.agOne = :agentId OR pa.agThree = :agentId OR pa.agFour = :agentId) and (p.clientId = cliente)) 
  3217.                         OR (pa.agThree = :idUser and (pa.agTwo = :agentId OR pa.agOne = :agentId OR pa.agFour = :agentId) and (p.clientId = cliente)) 
  3218.                         OR (pa.agFour = :idUser and (pa.agTwo = :agentId OR pa.agThree = :agentId OR pa.agOne = :agentId) and (p.clientId = cliente)) 
  3219.                         ORDER BY p.id DESC';
  3220.                     $query $em->createQuery($dql)->setParameters($parameters);
  3221.                     $proposals $query->getResult();
  3222.                 }
  3223.             }
  3224.         }
  3225.         else
  3226.         {
  3227.             /* Consulta con fechas desde y hasta con id cliente */
  3228.             if(!empty($cliente)){
  3229.                 if(!empty($agentId)){
  3230.                     $parameters = array(
  3231.                         'desde' => $desde,
  3232.                         'hasta' => $hasta,
  3233.                         'cliente' => $cliente,
  3234.                         'agentId' => $agentId,
  3235.                         'status' => 'Cancel'
  3236.                     );
  3237.                     $dql 'SELECT p
  3238.                         FROM EventsBundle:Proposal p
  3239.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId = :agentId 
  3240.                         ORDER BY p.id DESC';
  3241.                 }
  3242.                 else
  3243.                 {
  3244.                     $parameters = array(
  3245.                         'desde' => $desde,
  3246.                         'hasta' => $hasta,
  3247.                         'cliente' => $cliente,
  3248.                         'status' => 'Cancel'
  3249.                     );
  3250.                     $dql 'SELECT p
  3251.                         FROM EventsBundle:Proposal p
  3252.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId is not null 
  3253.                         ORDER BY p.id DESC';
  3254. //                        ORDER BY p.dateProposedAt DESC';
  3255.                 }
  3256.             }
  3257.             else
  3258.             {
  3259.                 if(!empty($agentId)){
  3260.                     /* Consulta con fechas desde y hasta sin id cliente */
  3261.                     $parameters = array(
  3262.                         'agentId' => $agentId,
  3263.                         'desde' => $desde,
  3264.                         'hasta' => $hasta,
  3265.                         'status' => 'Cancel'
  3266.                     );
  3267.                     $dql 'SELECT p
  3268.                         FROM EventsBundle:Proposal p
  3269.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId = :agentId 
  3270.                         ORDER BY p.id DESC';
  3271.                 }
  3272.                 else
  3273.                 {
  3274.                     /* Consulta con fechas desde y hasta sin id cliente */
  3275.                     $parameters = array(
  3276.                         'desde' => $desde,
  3277.                         'hasta' => $hasta,
  3278.                         'status' => 'Cancel'
  3279.                     );
  3280.                     $dql 'SELECT p
  3281.                         FROM EventsBundle:Proposal p
  3282.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId is not null 
  3283.                         ORDER BY p.id DESC';
  3284. //                        ORDER BY p.dateProposedAt DESC';
  3285.                 }
  3286.             }
  3287.             $query $em->createQuery($dql)->setParameters($parameters);
  3288.             $proposals $query->getResult();
  3289.         }
  3290.         $datos_proposal = array();
  3291.         foreach($proposals as $proposal){
  3292.             /*
  3293.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  3294.              * */
  3295.             switch ($proposal->getStatus()) {
  3296.                 case "Pending":
  3297. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  3298.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  3299.                     break;
  3300.                 case "Sent":
  3301.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  3302.                     break;
  3303.                 case "Confirmed":
  3304. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  3305.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  3306.                     break;
  3307.                 case "Invoiced":
  3308. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  3309.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  3310.                     break;
  3311.                 case "Cancel":
  3312. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  3313.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  3314.                     break;
  3315.                 case "Blocked":
  3316.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>';
  3317.                     break;
  3318.                 case "Unblocked":
  3319.                     $iconstatus ='<i class="icon-unlocked2 text-black"></i>';
  3320.                     break;
  3321.             }
  3322.             if ($proposal->getSent() == "Yes"){
  3323.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  3324.                 if ($proposal->getStatus() == "Pending"){
  3325. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  3326.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  3327.                 }
  3328.             }else{
  3329.                 $iconsent ='';
  3330.             }
  3331.             /* Consultas */
  3332.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  3333.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  3334.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  3335.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  3336.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  3337.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  3338.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  3339.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  3340.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  3341.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  3342.                 //no Visto
  3343.                 $novisto $this->translator->trans('Not seen');
  3344.             }else{
  3345.                 //visto
  3346.                 $novisto $this->translator->trans('Seen by Client');
  3347.             }
  3348.             //Nombres resumidos de los agentes
  3349.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  3350.             $agentesResumidos '';
  3351.             $nombreOne'';
  3352.             if (!empty($allAgentesResumidos)) {
  3353.                 if (!empty($allAgentesResumidos->getAgOne())) {
  3354.                     if ($allAgentesResumidos->getAgOne() != 0) {
  3355.                         // Hay Agente One
  3356.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  3357.                         if(!is_null($theOne)){
  3358.                             $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  3359.                             if (!empty($agentesResumidos)) {
  3360.                                 $agentesResumidos $agentesResumidos.', '$nombreOne;
  3361.     
  3362.                             } else {
  3363.                                 $agentesResumidos $nombreOne;
  3364.                             }
  3365.                         }
  3366.                     }
  3367.                 }
  3368.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  3369.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  3370.                         // Hay Agente Two
  3371.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  3372.                         if(!is_null($theTwo)){
  3373.                             $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  3374.                             if (!empty($agentesResumidos)) {
  3375.                                 $agentesResumidos $agentesResumidos.', '$nombreTwo;
  3376.                             } else {
  3377.                                 $agentesResumidos $nombreTwo;
  3378.                             }
  3379.                         }
  3380.                     }
  3381.                 }
  3382.                 if (!empty($allAgentesResumidos->getAgThree())) {
  3383.                     if ($allAgentesResumidos->getAgThree() != 0) {
  3384.                         // Hay Agente Three
  3385.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  3386.                         if(!is_null($theThree)){
  3387.                             $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  3388.                             if (!empty($agentesResumidos)) {
  3389.                                 $agentesResumidos $agentesResumidos.', '$nombreThree;
  3390.     
  3391.                             } else {
  3392.                                 $agentesResumidos $nombreThree;
  3393.                             }
  3394.                         }
  3395.                     }
  3396.                 }
  3397.                 if (!empty($allAgentesResumidos->getAgFour())) {
  3398.                     if ($allAgentesResumidos->getAgFour() != 0) {
  3399.                         // Hay Agente Four
  3400.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  3401.                         if(!is_null($theFour)){
  3402.                             $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  3403.                             if (!empty($agentesResumidos)) {
  3404.                                 $agentesResumidos $agentesResumidos.', '$nombreFour;
  3405.     
  3406.                             } else {
  3407.                                 $agentesResumidos $nombreFour;
  3408.                             }
  3409.                         }
  3410.                     }
  3411.                 }
  3412.             }
  3413.             if (strpos($agentesResumidos,',')===false){
  3414.                 //Hay mas de un agente
  3415.                 $masdeunagente true;
  3416.                 $agentView $agent;
  3417.             } else {
  3418.                 //No hay mas de un agente
  3419.                 $masdeunagente false;
  3420.                 $agentView $agentesResumidos;
  3421.             }
  3422.             //Nombres resumidos de los agentes
  3423.             $datos_proposal[] = array(
  3424.                 'status'             => $this->translator->trans($proposal->getStatus()),
  3425.                 'iconstatus'         => $iconstatus,
  3426.                 'iconsent'           => $iconsent,
  3427.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  3428.                 'novisto'            => $novisto,
  3429.                 'create'             => $proposal->getDateProposedAt() == Null'' $proposal->getDateProposedAt()->format('d/m/Y'),
  3430.                 'id'                 => $proposal->getId(),
  3431.                 'token'              => $proposal->getAccessKey(),
  3432.                 'mcp'                => $proposal->getMcp(),
  3433.                 'name'               => $proposal->getName(),
  3434.                 'client'             => $client->getName(),
  3435.                 'client_id'          => $client->getId(),
  3436.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  3437.                 'contactdepartment'  => $contact->getDepartment(),
  3438.                 'contactphone'       => $contact->getPhone(),
  3439.                 'contactmovil'       => $contact->getMobile(),
  3440.                 'contactmail'        => $contact->getEmail(),
  3441.                 'commercial'         => $comercial,
  3442.                 'team'               => $team,
  3443.                 'agent'              => $agent,
  3444.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  3445.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  3446.                 'list_client'        => 'si',
  3447.                 'send'        => $proposal->getSent(),
  3448. //                'refagent'           => ''
  3449.                 'refagent'           => $agentView
  3450.             );
  3451.         }
  3452. //        $agent_data = $em->getRepository(User::class)->findAll();
  3453.         /* INICIO Consulta de agente activos MICE */
  3454.         $parameters = array(
  3455.             'status' => true
  3456.         );
  3457.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  3458.         $dql 'SELECT us
  3459.                         FROM App\Entity\User us
  3460.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  3461.                         ORDER BY us.name ASC';
  3462.         $query $em->createQuery($dql)->setParameters($parameters);
  3463.         $agent_data $query->getResult();
  3464.         /* FIN Consulta de agente activos MICE */
  3465.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig', array(
  3466.             'proposals' => $datos_proposal,
  3467.             'unassigned' => '',
  3468.             'agents' => $agent_data,
  3469.         ));
  3470.     }
  3471.     /**
  3472.      * @Route("/proposal/historic", name="proposal_historic")
  3473.      */
  3474.     public function indexListHistoricAction(Request $request)
  3475.     {
  3476.         $em $this->getDoctrine()->getManager();
  3477.         $desde = isset($request->request->get('buscarFecha')['desde'])? $request->request->get('buscarFecha')['desde'] : '';;
  3478.         $hasta = isset($request->request->get('buscarFecha')['hasta'])? $request->request->get('buscarFecha')['hasta'] : '';;
  3479.         $cliente = isset($request->request->get('buscarFecha')['clientid'])? $request->request->get('buscarFecha')['clientid'] : '';
  3480.         $agentId = isset($request->request->get('data')['agent'])? $request->request->get('data')['agent'] : '';
  3481.         if (empty($desde) && empty($hasta))
  3482.         {
  3483.             if(empty($cliente))
  3484.             {
  3485.                 if(empty($agentId))
  3486.                 {
  3487. //                    $hoy = date('Y-m-01', strtotime('-12 month'));
  3488.                     $hoy date('Y-m-01'strtotime('-24 month'));
  3489.                     $parameters = array(
  3490.                         'hoy' => $hoy,
  3491.                         'status' => 'Cancel'
  3492.                     );
  3493.                     $dql 'SELECT p
  3494.                         FROM EventsBundle:Proposal p
  3495.                         WHERE p.dateEventStarAt >= :hoy
  3496.                         AND p.status != :status AND p.agentId is not null 
  3497.                         ORDER BY p.id DESC';
  3498.                     $query $em->createQuery($dql)->setParameters($parameters);
  3499.                     $proposals $query->getResult();
  3500.                 }
  3501.                 else
  3502.                 {
  3503. //                    $hoy = date('Y') . '-01-01';
  3504. //                    $hoy = date('Y-m-01', strtotime('-12 month'));
  3505.                     $hoy date('Y-m-01'strtotime('-2 month'));
  3506.                     $parameters = array(
  3507.                         'agentId' => $agentId,
  3508.                         'hoy' => $hoy,
  3509.                         'status' => 'Cancel'
  3510.                     );
  3511.                     $dql 'SELECT p
  3512.                         FROM EventsBundle:Proposal p
  3513.                         WHERE p.dateEventStarAt >= :hoy AND p.status != :status AND p.agentId = :agentId
  3514.                         ORDER BY p.id DESC';
  3515.                     $query $em->createQuery($dql)->setParameters($parameters);
  3516.                     $proposals $query->getResult();
  3517.                 }
  3518.             }
  3519.             else
  3520.             {   // el cliente no viene vacio
  3521.                 if(empty($agentId))
  3522.                 {
  3523.                     /* Si solo tiene el cliente id lo reenvió a consulta por id cliente */
  3524.                     return $this->redirectToRoute('proposal_list_client', array(
  3525.                         'id' => $cliente
  3526.                     ));
  3527.                 }
  3528.                 else
  3529.                 {           //el cliente no viene vacio y hay agente
  3530. //                    $hoy = date('Y') . '-01-01';
  3531. //                    $hoy = date('Y-m-01', strtotime('-12 month'));
  3532.                     $hoy date('Y-m-01'strtotime('-2 month'));
  3533.                     $parameters = array(
  3534.                         'agentId' => $agentId,
  3535.                         'cliente' => $cliente,
  3536.                         'hoy' => $hoy,
  3537.                         'status' => 'Cancel'
  3538.                     );
  3539.                     $dql 'SELECT p
  3540.                         FROM EventsBundle:Proposal p
  3541.                         WHERE p.dateEventStarAt >= :hoy
  3542.                         AND p.status != :status AND p.agentId = :agentId AND p.clientId = :cliente
  3543.                         ORDER BY p.id DESC';
  3544.                     $query $em->createQuery($dql)->setParameters($parameters);
  3545.                     $proposals $query->getResult();
  3546.                 }
  3547.             }
  3548.         }
  3549.         else
  3550.         {
  3551.             /* Consulta con fechas desde y hasta con id cliente */
  3552.             if(!empty($cliente)){
  3553.                 if(!empty($agentId)){
  3554.                     $parameters = array(
  3555.                         'desde' => $desde,
  3556.                         'hasta' => $hasta,
  3557.                         'cliente' => $cliente,
  3558.                         'agentId' => $agentId,
  3559.                         'status' => 'Cancel'
  3560.                     );
  3561.                     $dql 'SELECT p
  3562.                         FROM EventsBundle:Proposal p
  3563.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId = :agentId 
  3564.                         ORDER BY p.id DESC';
  3565.                 }
  3566.                 else
  3567.                 {
  3568.                     $parameters = array(
  3569.                         'desde' => $desde,
  3570.                         'hasta' => $hasta,
  3571.                         'cliente' => $cliente,
  3572.                         'status' => 'Cancel'
  3573.                     );
  3574.                     $dql 'SELECT p
  3575.                         FROM EventsBundle:Proposal p
  3576.                         WHERE p.dateEventStarAt >= :desde AND p.dateEventStarAt <= :hasta AND p.clientId = :cliente AND p.status != :status AND p.agentId is not null 
  3577.                         ORDER BY p.id DESC';
  3578. //                        ORDER BY p.dateProposedAt DESC';
  3579.                 }
  3580.             }
  3581.             else
  3582.             {
  3583.                 if(!empty($agentId)){
  3584.                     /* Consulta con fechas desde y hasta sin id cliente */
  3585.                     $parameters = array(
  3586.                         'agentId' => $agentId,
  3587.                         'desde' => $desde,
  3588.                         'hasta' => $hasta,
  3589.                         'status' => 'Cancel'
  3590.                     );
  3591.                     $dql 'SELECT p
  3592.                         FROM EventsBundle:Proposal p
  3593.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId = :agentId 
  3594.                         ORDER BY p.id DESC';
  3595.                 }
  3596.                 else
  3597.                 {
  3598.                     /* Consulta con fechas desde y hasta sin id cliente */
  3599.                     $parameters = array(
  3600.                         'desde' => $desde,
  3601.                         'hasta' => $hasta,
  3602.                         'status' => 'Cancel'
  3603.                     );
  3604.                     $dql 'SELECT p
  3605.                         FROM EventsBundle:Proposal p
  3606.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.status != :status AND p.agentId is not null 
  3607.                         ORDER BY p.id DESC';
  3608. //                        ORDER BY p.dateProposedAt DESC';
  3609.                 }
  3610.             }
  3611.             $query $em->createQuery($dql)->setParameters($parameters);
  3612.             $proposals $query->getResult();
  3613.         }
  3614.         $datos_proposal = array();
  3615.         foreach($proposals as $proposal){
  3616.             /*
  3617.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  3618.              * */
  3619.             switch ($proposal->getStatus()) {
  3620.                 case "Pending":
  3621. //                    $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  3622.                     $iconstatus ='<i class="icon-hammer text-danger parpadea"></i>';
  3623.                     break;
  3624.                 case "Sent":
  3625.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  3626.                     break;
  3627.                 case "Confirmed":
  3628. //                    $iconstatus ='<i class="icon-unlocked text-success"></i>';
  3629.                     $iconstatus ='<i class="icon-thumbs-up3 text-green-800"></i>';
  3630.                     break;
  3631.                 case "Invoiced":
  3632. //                    $iconstatus ='<i class="icon-lock2 text-gold"></i>';
  3633.                     $iconstatus ='<i class="icon-thumbs-up3 text-gold"></i>';
  3634.                     break;
  3635.                 case "Cancel":
  3636. //                    $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  3637.                     $iconstatus ='<i class="icon-thumbs-down3 text-danger"></i>';
  3638.                     break;
  3639.                 case "Blocked":
  3640.                     $iconstatus ='<i class="icon-lock2 text-grey"></i>';
  3641.                     break;
  3642.                 case "Unblocked":
  3643.                     $iconstatus ='<i class="icon-unlocked2 text-black"></i>';
  3644.                     break;
  3645.             }
  3646.             if ($proposal->getSent() == "Yes"){
  3647.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  3648.                 if ($proposal->getStatus() == "Pending"){
  3649. //                    $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  3650.                     $iconstatus ='<i class="icon-hammer text-danger"></i>';
  3651.                 }
  3652.             }else{
  3653.                 $iconsent ='';
  3654.             }
  3655.             /* Consultas */
  3656.             $client $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  3657.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  3658.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  3659.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  3660.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  3661.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  3662.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  3663.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  3664.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  3665.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  3666.                 //no Visto
  3667.                 $novisto $this->translator->trans('Not seen');
  3668.             }else{
  3669.                 //visto
  3670.                 $novisto $this->translator->trans('Seen by Client');
  3671.             }
  3672.             //Nombres resumidos de los agentes
  3673.             $allAgentesResumidos $em->getRepository(ProposalAgents::class)->findOneByIdProp($proposal->getId());
  3674.             $agentesResumidos '';
  3675.             $nombreOne'';
  3676.             if (!empty($allAgentesResumidos)) {
  3677.                 if (!empty($allAgentesResumidos->getAgOne())) {
  3678.                     if ($allAgentesResumidos->getAgOne() != 0) {
  3679.                         // Hay Agente One
  3680.                         $theOne $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgOne());
  3681.                         if (empty($theOne)){ $theOne $em->getRepository(User::class)->findOneByid(6); }
  3682.                         $nombreOne $theOne->getName() . ' ' substr($theOne->getLastName(), 01);
  3683.                         if (!empty($agentesResumidos)) {
  3684.                             $agentesResumidos $agentesResumidos.', '$nombreOne;
  3685.                         } else {
  3686.                             $agentesResumidos $nombreOne;
  3687.                         }
  3688.                     }
  3689.                 }
  3690.                 if (!empty($allAgentesResumidos->getAgTwo())) {
  3691.                     if ($allAgentesResumidos->getAgTwo() != 0) {
  3692.                         // Hay Agente Two
  3693.                         $theTwo $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgTwo());
  3694.                         if (empty($theTwo)){ $theTwo $em->getRepository(User::class)->findOneByid(6); }
  3695.                         $nombreTwo $theTwo->getName() . ' ' substr($theTwo->getLastName(), 01);
  3696.                         if (!empty($agentesResumidos)) {
  3697.                             $agentesResumidos $agentesResumidos.', '$nombreTwo;
  3698.                         } else {
  3699.                             $agentesResumidos $nombreTwo;
  3700.                         }
  3701.                     }
  3702.                 }
  3703.                 if (!empty($allAgentesResumidos->getAgThree())) {
  3704.                     if ($allAgentesResumidos->getAgThree() != 0) {
  3705.                         // Hay Agente Three
  3706.                         $theThree $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgThree());
  3707.                         if (empty($theThree)){ $theThree $em->getRepository(User::class)->findOneByid(6); }
  3708.                         $nombreThree $theThree->getName() . ' ' substr($theThree->getLastName(), 01);
  3709.                         if (!empty($agentesResumidos)) {
  3710.                             $agentesResumidos $agentesResumidos.', '$nombreThree;
  3711.                         } else {
  3712.                             $agentesResumidos $nombreThree;
  3713.                         }
  3714.                     }
  3715.                 }
  3716.                 if (!empty($allAgentesResumidos->getAgFour())) {
  3717.                     if ($allAgentesResumidos->getAgFour() != 0) {
  3718.                         // Hay Agente Four
  3719.                         $theFour $em->getRepository(User::class)->findOneByid($allAgentesResumidos->getAgFour());
  3720.                         if (empty($theFour)){ $theFour $em->getRepository(User::class)->findOneByid(6); }
  3721.                         $nombreFour $theFour->getName() . ' ' substr($theFour->getLastName(), 01);
  3722.                         if (!empty($agentesResumidos)) {
  3723.                             $agentesResumidos $agentesResumidos.', '$nombreFour;
  3724.                         } else {
  3725.                             $agentesResumidos $nombreFour;
  3726.                         }
  3727.                     }
  3728.                 }
  3729.             }
  3730.             if (strpos($agentesResumidos,',')===false){
  3731.                 //Hay mas de un agente
  3732.                 $masdeunagente true;
  3733.                 $agentView $agent;
  3734.             } else {
  3735.                 //No hay mas de un agente
  3736.                 $masdeunagente false;
  3737.                 $agentView $agentesResumidos;
  3738.             }
  3739.             //Nombres resumidos de los agentes
  3740.             if (empty($client)){ $client = new Client(); }
  3741.             if (empty($contact)){ $contact = new ClientContact(); }
  3742.             $datos_proposal[] = array(
  3743.                 'status'             => $this->translator->trans($proposal->getStatus()),
  3744.                 'iconstatus'         => $iconstatus,
  3745.                 'iconsent'           => $iconsent,
  3746.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  3747.                 'novisto'            => $novisto,
  3748.                 'create'             => $proposal->getDateProposedAt() == Null'' $proposal->getDateProposedAt()->format('d/m/Y'),
  3749.                 'id'                 => $proposal->getId(),
  3750.                 'token'              => $proposal->getAccessKey(),
  3751.                 'mcp'                => $proposal->getMcp(),
  3752.                 'name'               => $proposal->getName(),
  3753.                 'client'             => $client->getName(),
  3754.                 'client_id'          => $client->getId(),
  3755.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  3756.                 'contactdepartment'  => $contact->getDepartment(),
  3757.                 'contactphone'       => $contact->getPhone(),
  3758.                 'contactmovil'       => $contact->getMobile(),
  3759.                 'contactmail'        => $contact->getEmail(),
  3760.                 'commercial'         => $comercial,
  3761.                 'team'               => $team,
  3762.                 'agent'              => $agent,
  3763.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  3764.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  3765.                 'list_client'        => 'si',
  3766.                 'send'        => $proposal->getSent(),
  3767. //                'refagent'           => ''
  3768.                 'refagent'           => $agentView
  3769.             );
  3770.         }
  3771. //        $agent_data = $em->getRepository(User::class)->findAll();
  3772.         /* INICIO Consulta de agente activos MICE */
  3773.         $parameters = array(
  3774.             'status' => true
  3775.         );
  3776.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  3777.         $dql 'SELECT us
  3778.                         FROM App\Entity\User us
  3779.                         WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  3780.                         ORDER BY us.name ASC';
  3781.         $query $em->createQuery($dql)->setParameters($parameters);
  3782.         $agent_data $query->getResult();
  3783.         /* FIN Consulta de agente activos MICE */
  3784.         return $this->render('MDS/EventsBundle/proposal/list-proposal.html.twig', array(
  3785.             'proposals' => $datos_proposal,
  3786.             'unassigned' => '',
  3787.             'agents' => $agent_data,
  3788.         ));
  3789.     }
  3790.     /**
  3791.      * @Route("/proposal/duplicate/{id}",  name="proposal_duplicate")
  3792.      */
  3793.     public function duplicateAction($id)
  3794.     {
  3795.         // Inicio: Se genera el nuevo proposal (Tabla Proposals)
  3796.         $em $this->getDoctrine()->getManager();
  3797.         $proposalOrigen $em->getRepository(Proposal::class)->findOneById($id);
  3798.         $proposal = new Proposal();
  3799.         $proposal->setName('PROPOSAL DUPLICADO (' $id '): '$proposalOrigen->getName());
  3800.         $proposal->setTitle('PROPOSAL DUPLICADO (' $id '): '$proposalOrigen->getTitle());
  3801.         $proposal->setCommission($proposalOrigen->getCommission());
  3802.         $proposal->setPax($proposalOrigen->getPax());
  3803.         $proposal->setBedrooms($proposalOrigen->getBedrooms());
  3804.         $proposal->setOfficeId($proposalOrigen->getOfficeId());
  3805.         $proposal->setClientId($proposalOrigen->getClientId());
  3806.         $proposal->setContactId($proposalOrigen->getContactId());
  3807.         $proposal->setReferenceName($proposalOrigen->getReferenceName());
  3808.         $proposal->setReferenceId($proposalOrigen->getReferenceId());
  3809. //        $proposal->setAgentId($proposalOrigen->getAgentId());                      No se duplicara el agente
  3810.         $proposal->setAgentId('0');
  3811. //        $proposal->setTeamId($proposalOrigen->getTeamId());                        No se duplicara nada de los agentes
  3812. //        $proposal->setAgentTwoId($proposalOrigen->getAgentTwoId());                No se duplicara el agente
  3813. //        $proposal->setAgencommercialId($proposalOrigen->getAgencommercialId());    No se duplicara nada de los agentes
  3814.         $proposal->setDateProposedAt(new \DateTime("now"));
  3815. //        $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
  3816.         $proposal->setDateEventStarAt(new \DateTime("now"));
  3817. //        $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
  3818.         $proposal->setDateEventEndAt(new \DateTime("now"));
  3819.         $proposal->setDaysEmailReminder($proposalOrigen->getDaysEmailReminder());
  3820.         $proposal->setLanguage($proposalOrigen->getLanguage());
  3821.         $proposal->setIncludeLogo($proposalOrigen->getIncludeLogo());
  3822.         $proposal->setVersionPpt($proposalOrigen->getVersionPpt());
  3823.         $proposal->setVersionExcel($proposalOrigen->getVersionExcel());
  3824.         $proposal->setVersionFlahs($proposalOrigen->getVersionFlahs());
  3825.         $proposal->setVersionWord($proposalOrigen->getVersionWord());
  3826.         $proposal->setBriefing($proposalOrigen->getBriefing());
  3827.         $proposal->setDatePresentationAt($proposalOrigen->getDatePresentationAt());
  3828.         $proposal->setStatus('Pending');
  3829. //        $proposal->setSent($proposalOrigen->getSent());                           No se copia el envio
  3830.         $proposal->setSelectType($proposalOrigen->getSelectType());
  3831.         $proposal->setCreatedAt(new \DateTime("now"));
  3832.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3833.         $proposal->setCreatedId($user_logueado->getId());                       //  El nuevo proposal lo crea es el usuario loggeado y no el usuario que creo el original
  3834.         $proposal->setUpdatedAt(new \DateTime("now"));                          // La fecha de actualizacion es la actual
  3835.         $proposal->setUpdatedId($user_logueado->getId());                       //  El nuevo proposal lo actualiza es el usuario loggeado y no el usuario que actualizo el original
  3836.         //Access Key para entrar en el proposal
  3837.         $accessKey md5('CR-JDEF'rand() * time());
  3838.         $proposal->setAccessKey($accessKey);
  3839. //        $proposal->setViewedAt($proposalOrigen->getViewedAt());                   Este proposal no ha sido visto por el usuario
  3840.         $proposal->setViewedAt(new \DateTime("now"));
  3841. //        $proposal->setObservation($proposalOrigen->getObservation());
  3842. //        $proposal->setSendAdmin($proposalOrigen->getSendAdmin());
  3843. //        $proposal->setMcp($proposalOrigen->getMcp());
  3844. //        $proposal->setImage($proposalOrigen->getImage());
  3845.         $proposal->setCategory($proposalOrigen->getCategory());
  3846.         $proposal->setIdMusic($proposalOrigen->getIdMusic());
  3847.         $em->persist($proposal);
  3848.         $em->flush();
  3849.         $newId $proposal->getId();
  3850.         $proposalAgents = new ProposalAgents();
  3851.         $proposalAgents->setAgOne('0');
  3852.         $proposalAgents->setAgOnePerc('0');
  3853.         $proposalAgents->setAgTwo('0');
  3854.         $proposalAgents->setAgTwoPerc('0');
  3855.         $proposalAgents->setAgThree('0');
  3856.         $proposalAgents->setAgThreePerc('0');
  3857.         $proposalAgents->setAgFour('0');
  3858.         $proposalAgents->setAgFourPerc('0');
  3859.         $proposalAgents->setIdProp($newId);
  3860.         $em->persist($proposalAgents);
  3861.         $em->flush();
  3862.         // Fin: Se genera el nuevo proposal (Tabla Proposals)
  3863.         // Inicio: Se generan los controles del proposal (Tabla Proposals_control)
  3864.         $proposalControlOrigen $em->getRepository(ProposalControl::class)->findByProposalId($id);
  3865.         $arrayTranslateProposalControl = array();
  3866.         foreach ($proposalControlOrigen as $control){
  3867.             $proposalControl = new ProposalControl();
  3868.             $proposalControl->setDestinationId($control->getDestinationId());
  3869.             $proposalControl->setDisabled($control->getDisabled());
  3870.             $proposalControl->setDisabledPresentation($control->getDisabledPresentation());
  3871.             $proposalControl->setProposalId($newId);
  3872.             $em->persist($proposalControl);
  3873.             $em->flush();
  3874.             $arrayTranslateProposalControl[$control->getId()] = $proposalControl->getId();      // Arreglo que traduce un indice del antiguo proposal control al nuevo
  3875.         }
  3876.         // Fin: Se generan los controles del proposal (Tabla Proposals_control)
  3877.         // Inicio: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  3878.         $proposalSupplierControlOrigen $em->getRepository(ProposalSupplierControl::class)->findByProposalId($id);
  3879.         $arrayTranslateProposalSupplierControl = array();
  3880.         foreach ($proposalSupplierControlOrigen as $supcontrol){
  3881.             $proposalSupplierControl = new ProposalSupplierControl();
  3882.             $proposalSupplierControl->setDestinoId($supcontrol->getDestinoId());
  3883.             $proposalSupplierControl->setSupplierId($supcontrol->getSupplierId());
  3884.             $proposalSupplierControl->setIdeaId($supcontrol->getIdeaId());
  3885.             $proposalSupplierControl->setStatus($supcontrol->getStatus());
  3886.             $proposalSupplierControl->setDisabled($supcontrol->getDisabled());
  3887.             $proposalSupplierControl->setRank($supcontrol->getRank());
  3888.             $proposalSupplierControl->setDateBlockLimit($supcontrol->getDateBlockLimit());
  3889.             $proposalSupplierControl->setActivityId($supcontrol->getActivityId());
  3890.             $proposalSupplierControl->setProposalId($newId);
  3891.             if (array_key_exists($supcontrol->getControlDestinationId(),$arrayTranslateProposalControl)) {
  3892.                 $proposalSupplierControl->setControlDestinationId($arrayTranslateProposalControl[$supcontrol->getControlDestinationId()]);
  3893.             } else {
  3894.                 $proposalSupplierControl->setControlDestinationId(1);
  3895.             }
  3896.             $em->persist($proposalSupplierControl);
  3897.             $em->flush();
  3898.             $arrayTranslateProposalSupplierControl[$supcontrol->getId()] = $proposalSupplierControl->getId();       // Arreglo que traduce un indice del antiguo proposal supplier control al nuevo
  3899.         }
  3900.         // Fin: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  3901.         // Inicio: Se generan los servicios (Proposals_supplier_services)
  3902.         $proposalSupplierServicesOrigen $em->getRepository(ProposalSupplierServices::class)->findByProposalId($id);
  3903.         foreach ($proposalSupplierServicesOrigen as $suppserv) {
  3904.             $proposalSupplierServices = new ProposalSupplierServices();
  3905.             $proposalSupplierServices->setServiceIdFather($suppserv->getServiceIdFather());
  3906.             $proposalSupplierServices->setDestinationId($suppserv->getDestinationId());
  3907.             $proposalSupplierServices->setSupplierId($suppserv->getSupplierId());
  3908.             $proposalSupplierServices->setIdeaId($suppserv->getIdeaId());
  3909.             $proposalSupplierServices->setActivityId($suppserv->getActivityId());
  3910.             $proposalSupplierServices->setServiceId($suppserv->getServiceId());
  3911.             $proposalSupplierServices->setServiceCatId($suppserv->getServiceCatId());
  3912.             $proposalSupplierServices->setServiceCatName($suppserv->getServiceCatName());
  3913.             $proposalSupplierServices->setName($suppserv->getName());
  3914.             $proposalSupplierServices->setPrice($suppserv->getPrice());
  3915.             $proposalSupplierServices->setCurrency($suppserv->getCurrency());
  3916.             $proposalSupplierServices->setUnits($suppserv->getUnits());
  3917.             $proposalSupplierServices->setCommission($suppserv->getCommission());
  3918.             $proposalSupplierServices->setOver($suppserv->getOver());
  3919.             $proposalSupplierServices->setIva($suppserv->getIva());
  3920.             $proposalSupplierServices->setPax($suppserv->getPax());
  3921.             $proposalSupplierServices->setHour($suppserv->getHour());
  3922.             $proposalSupplierServices->setDateInAt($suppserv->getDateInAt());             //  **************************************************
  3923.             $proposalSupplierServices->setDateOutAt($suppserv->getDateOutAt());           //  **************************************************
  3924.             $proposalSupplierServices->setDirectPayment($suppserv->getDirectPayment());
  3925.             $proposalSupplierServices->setStatus('Pending');
  3926.             $proposalSupplierServices->setCreatedAt(new \DateTime("now"));
  3927.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3928.             $proposalSupplierServices->setCreatedId($user_logueado->getId());
  3929.             $proposalSupplierServices->setUpdatedAt(new \DateTime("now"));
  3930.             $proposalSupplierServices->setUpdatedId($user_logueado->getId());
  3931.             $proposalSupplierServices->setStatusinternal($suppserv->getStatusinternal());
  3932.             $proposalSupplierServices->setPreCommission($suppserv->getPreCommission());
  3933.             $proposalSupplierServices->setPreIva($suppserv->getPreIva());
  3934.             $proposalSupplierServices->setDateBlockLimit($suppserv->getDateBlockLimit());
  3935.             $proposalSupplierServices->setOpCommission($suppserv->getOpCommission());
  3936.             $proposalSupplierServices->setOpOver($suppserv->getOpOver());
  3937.             $proposalSupplierServices->setOpIva($suppserv->getOpIva());
  3938.             $proposalSupplierServices->setBreakdown($suppserv->getBreakdown());
  3939.             $proposalSupplierServices->setIsFather($suppserv->getIsFather());
  3940.             $proposalSupplierServices->setRank($suppserv->getRank());
  3941.             $proposalSupplierServices->setOriginalopIva($suppserv->getOriginalopIva());
  3942.             $proposalSupplierServices->setOriginalIva($suppserv->getOriginalIva());
  3943.             $proposalSupplierServices->setOriginalPrice($suppserv->getOriginalPrice());
  3944.             $proposalSupplierServices->setStatusRec($suppserv->getStatusRec());
  3945. //            $proposalSupplierServices->setAssistantId($suppserv->getAssistantId());     //  **************************************************/
  3946.             $proposalSupplierServices->setProposalId($newId);
  3947.             $proposalSupplierServices->setControlId($arrayTranslateProposalSupplierControl[$suppserv->getControlId()]);
  3948.             $em->persist($proposalSupplierServices);
  3949.             $em->flush();
  3950.         }
  3951.         // Fin: Se generan los servicios (Proposals_supplier_services)
  3952.         return $this->redirectToRoute('proposal_edit', array('id'=>$newId));
  3953.     }
  3954.     /**
  3955.      * @Route("/proposal/duplicatedestination/{id}/{destiIdOriCtrl}",  name="proposal_duplicate_destination")
  3956.      */
  3957.     public function duplicateDestinationAction($id$destiIdOriCtrlRequest $request)
  3958.     {//$id = id del proposal; $destiIdOriCtrl destination Id Control del origen; $request contiene el Id destino
  3959.         $em $this->getDoctrine()->getManager();
  3960.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  3961.         // Verificamos STATUS, si esta Cancelado, Bloqueado o Facturado no se toma ninguna acción
  3962.         if (($proposal->getStatus()=='Cancel') or ($proposal->getStatus()=='Blocked') or ($proposal->getStatus()=='Invoiced')){
  3963.             return $this->redirectToRoute('proposal_edit', array('id'=>$id));
  3964.         }
  3965.         // Buscamos el Id de Origen
  3966.         $proposalControlOri $em->getRepository(ProposalControl::class)->findOneById($destiIdOriCtrl);
  3967.         $destiIdOri $proposalControlOri->getDestinationId();
  3968.         // Buscamos el Id de Destino
  3969.         $destiIdDst $request->request->get('destinationList');
  3970.         // Verificamos si hay un IdDestino, si no es asi no se toma ninguna acción
  3971.         if (empty($destiIdDst)){
  3972.             return $this->redirectToRoute('proposal_edit', array('id'=>$id));
  3973.         }
  3974.         // Inicio: Se genera el control del proposal para el destino en caso de no existir (Tabla Proposals_control)
  3975.         $proposalControlDst $em->getRepository(ProposalControl::class)->findOneBy(
  3976.             array(
  3977.                 'proposalId'=>$id,
  3978.                 'destinationId'=>$destiIdDst));
  3979.         // Si no existe el destino en el proposal se debe crear
  3980.         if (empty($proposalControlDst)){
  3981.             $proposalControlDst = new ProposalControl();
  3982.             $proposalControlDst->setProposalId($id);
  3983.             $proposalControlDst->setDestinationId($destiIdDst);
  3984.             $proposalControlDst->setDisabled(0);
  3985.             $proposalControlDst->setDisabledPresentation(0);
  3986.             $em->persist($proposalControlDst);
  3987.             $em->flush();
  3988.         }
  3989.         // Fin: Se genera el control del proposal para el destino en caso de no existir (Tabla Proposals_control)
  3990.         // Inicio: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  3991.         $proposalSupplierControlOrigen $em->getRepository(ProposalSupplierControl::class)->findBy(
  3992.             array(
  3993.                 'proposalId'=>$id,
  3994.                 'destinoId'=>$destiIdOri));
  3995.         $arrayTranslateProposalSupplierControl = array();
  3996.         foreach ($proposalSupplierControlOrigen as $supcontrol){
  3997.             //Verificamos que no exista previamente el ProposalSupplierControl
  3998.             $proposalSupplierControl $em->getRepository(ProposalSupplierControl::class)->findOneBy(
  3999.                 array(
  4000.                     'proposalId'=>$id,
  4001.                     'supplierId'=>$supcontrol->getSupplierId(),
  4002.                     'destinoId'=>$destiIdDst));
  4003.             if (empty($proposalSupplierControl)){
  4004.                 $proposalSupplierControl = new ProposalSupplierControl();
  4005.                 $proposalSupplierControl->setDestinoId($destiIdDst);
  4006.                 $proposalSupplierControl->setSupplierId($supcontrol->getSupplierId());
  4007.                 $proposalSupplierControl->setIdeaId($supcontrol->getIdeaId());
  4008.                 $proposalSupplierControl->setStatus($supcontrol->getStatus());
  4009.                 $proposalSupplierControl->setDisabled($supcontrol->getDisabled());
  4010.                 $proposalSupplierControl->setRank($supcontrol->getRank());
  4011.                 $proposalSupplierControl->setDateBlockLimit($supcontrol->getDateBlockLimit());
  4012.                 $proposalSupplierControl->setActivityId($supcontrol->getActivityId());
  4013.                 $proposalSupplierControl->setProposalId($id);
  4014.                 $proposalSupplierControl->setControlDestinationId($proposalControlDst->getId());
  4015.                 $em->persist($proposalSupplierControl);
  4016.                 $em->flush();
  4017.             }
  4018.             $arrayTranslateProposalSupplierControl[$supcontrol->getId()] = $proposalSupplierControl->getId();       // Arreglo que traduce un indice del antiguo proposal supplier control al nuevo
  4019.         }
  4020.         // Fin: Se generan los controles para los proveedores (Tabla Proposals_supplier_control)
  4021.         // Inicio: Se generan los servicios (Proposals_supplier_services)
  4022.         $proposalSupplierServicesOrigen $em->getRepository(ProposalSupplierServices::class)->findByProposalId($id);
  4023.         foreach ($proposalSupplierServicesOrigen as $suppserv) {
  4024.             $proposalSupplierServices = new ProposalSupplierServices();
  4025.             $proposalSupplierServices->setServiceIdFather($suppserv->getServiceIdFather());
  4026. //            $proposalSupplierServices->setDestinationId($suppserv->getDestinationId());
  4027.             $proposalSupplierServices->setDestinationId($destiIdDst);
  4028.             $proposalSupplierServices->setSupplierId($suppserv->getSupplierId());
  4029.             $proposalSupplierServices->setIdeaId($suppserv->getIdeaId());
  4030.             $proposalSupplierServices->setActivityId($suppserv->getActivityId());
  4031.             $proposalSupplierServices->setServiceId($suppserv->getServiceId());
  4032.             $proposalSupplierServices->setServiceCatId($suppserv->getServiceCatId());
  4033.             $proposalSupplierServices->setServiceCatName($suppserv->getServiceCatName());
  4034.             $proposalSupplierServices->setName($suppserv->getName());
  4035.             $proposalSupplierServices->setPrice($suppserv->getPrice());
  4036.             $proposalSupplierServices->setCurrency($suppserv->getCurrency());
  4037.             $proposalSupplierServices->setUnits($suppserv->getUnits());
  4038.             $proposalSupplierServices->setCommission($suppserv->getCommission());
  4039.             $proposalSupplierServices->setOver($suppserv->getOver());
  4040.             $proposalSupplierServices->setIva($suppserv->getIva());
  4041.             $proposalSupplierServices->setPax($suppserv->getPax());
  4042.             $proposalSupplierServices->setHour($suppserv->getHour());
  4043.             $proposalSupplierServices->setDateInAt($suppserv->getDateInAt());
  4044.             $proposalSupplierServices->setDateOutAt($suppserv->getDateOutAt());
  4045.             $proposalSupplierServices->setDirectPayment($suppserv->getDirectPayment());
  4046.             $proposalSupplierServices->setStatus('Pending');
  4047.             $proposalSupplierServices->setCreatedAt(new \DateTime("now"));
  4048.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4049.             $proposalSupplierServices->setCreatedId($user_logueado->getId());
  4050.             $proposalSupplierServices->setUpdatedAt(new \DateTime("now"));
  4051.             $proposalSupplierServices->setUpdatedId($user_logueado->getId());
  4052.             $proposalSupplierServices->setStatusinternal($suppserv->getStatusinternal());
  4053.             $proposalSupplierServices->setPreCommission($suppserv->getPreCommission());
  4054.             $proposalSupplierServices->setPreIva($suppserv->getPreIva());
  4055.             $proposalSupplierServices->setDateBlockLimit($suppserv->getDateBlockLimit());
  4056.             $proposalSupplierServices->setOpCommission($suppserv->getOpCommission());
  4057.             $proposalSupplierServices->setOpOver($suppserv->getOpOver());
  4058.             $proposalSupplierServices->setOpIva($suppserv->getOpIva());
  4059.             $proposalSupplierServices->setBreakdown($suppserv->getBreakdown());
  4060.             $proposalSupplierServices->setIsFather($suppserv->getIsFather());
  4061.             $proposalSupplierServices->setRank($suppserv->getRank());
  4062.             $proposalSupplierServices->setOriginalopIva($suppserv->getOriginalopIva());
  4063.             $proposalSupplierServices->setOriginalIva($suppserv->getOriginalIva());
  4064.             $proposalSupplierServices->setOriginalPrice($suppserv->getOriginalPrice());
  4065.             $proposalSupplierServices->setStatusRec($suppserv->getStatusRec());
  4066. //            $proposalSupplierServices->setAssistantId($suppserv->getAssistantId());     //  **************************************************/
  4067.             $proposalSupplierServices->setProposalId($id);
  4068.             // Si existe el indice hay que crear y guardar el elemento,en caso contrario es un elemento que ya existia previamente en el destino
  4069.             if (array_key_exists($suppserv->getControlId(),$arrayTranslateProposalSupplierControl)){
  4070.                 $proposalSupplierServices->setControlId($arrayTranslateProposalSupplierControl[$suppserv->getControlId()]);
  4071.                 $em->persist($proposalSupplierServices);
  4072.                 $em->flush();
  4073.             }
  4074.         }
  4075.         // Fin: Se generan los servicios (Proposals_supplier_services)
  4076.         return $this->redirectToRoute('proposal_destination_view', array('id'=>$id));
  4077.     }
  4078.     /**
  4079.      * @Route("/proposal/mobile/viewbriefing/{id}",  name="proposal_mobile_view_briefing")
  4080.      * Vista para el movil del briefing del proposal para asignación del agente
  4081.      */
  4082.     public function viewBriefingMobileAction($id)
  4083.     {
  4084.         $em $this->getDoctrine()->getManager();
  4085.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  4086.         $agents $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  4087.         if (empty($proposal) or empty($proposal->getBriefing())){ return $this->redirectToRoute('proposal_edit', array('id'=>$id)); }
  4088.         /* INICIO Consulta de agente activos MICE */
  4089.         $parameters = array( 'status' => true );
  4090.         // Los equipos 1 y 4 son 'Eventos' y 'Comercial MICE'
  4091.         $dql 'SELECT us
  4092.                 FROM App\Entity\User us
  4093.                 WHERE us.status = :status AND us.team IN (1,2,4,5,16)
  4094.                 ORDER BY us.name ASC';
  4095.         $query $em->createQuery($dql)->setParameters($parameters);
  4096.         $userAgents $query->getResult();
  4097.         /* FIN Consulta de agente activos MICE */
  4098.         return $this->render('MDS/EventsBundle/proposal/mobile-proposal-briefing.html.twig',
  4099.             array(
  4100.                 'id' => $id,
  4101.                 'token' => $proposal->getAccessKey(),
  4102.                 'mcp' => $proposal->getMcp(),
  4103.                 'proposal' => $proposal,
  4104.                 'briefing' => $proposal->getBriefing(),
  4105.                 'userAgents' => $userAgents,
  4106.                 'agents'=> $agents
  4107.             )
  4108.         );
  4109.     }
  4110.     /**
  4111.      * @Route("/proposal/mobile/updatebriefing/{id}",  name="proposal_mobile_update_briefing")
  4112.      * Actualizar desde el movil el briefing del proposal ID y sus agentes
  4113.      */
  4114.     public function updateBriefingMobileAction($idRequest $request){
  4115.         $em $this->getDoctrine()->getManager();
  4116.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  4117.         $agents $em->getRepository(ProposalAgents::class)->findOneByIdProp($id);
  4118.         $propReq $request->request->get('proposal');
  4119.         //Verificamos si se cambia el agente
  4120.         $logNotify false;
  4121.         if (!empty($agents)){
  4122.             if ($agents->getAgOne() != $propReq['Agent1']){ $logNotify true; }
  4123.             if ($agents->getAgTwo() != $propReq['Agent2']){ $logNotify true; }
  4124.             if ($agents->getAgThree() != $propReq['Agent3']){ $logNotify true; }
  4125.             if ($agents->getAgFour() != $propReq['Agent4']){ $logNotify true; }
  4126.         } else {
  4127.             $logNotify true;
  4128.         }
  4129.         empty($propReq['Agent1']) ? $agents->setAgOne(0) : $agents->setAgOne($propReq['Agent1']);
  4130.         empty($propReq['Agent2']) ? $agents->setAgTwo(0) : $agents->setAgTwo($propReq['Agent2']);
  4131.         empty($propReq['Agent3']) ? $agents->setAgThree(0) : $agents->setAgThree($propReq['Agent3']);
  4132.         empty($propReq['Agent4']) ? $agents->setAgFour(0) : $agents->setAgFour($propReq['Agent4']);
  4133.         $em->persist($agents);
  4134.         $em->flush();
  4135.         $proposal->setBriefing($propReq['briefing']);
  4136.         $em->persist($proposal);
  4137.         $em->flush();
  4138.         if ($logNotify){
  4139.             //  NOTIFICAR AL AGENTE
  4140.             $agentToNotify = array();
  4141.             if (!empty($agents->getAgOne()) and ($agents->getAgOne() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgOne()); }
  4142.             if (!empty($agents->getAgTwo()) and ($agents->getAgTwo() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgTwo()); }
  4143.             if (!empty($agents->getAgThree()) and ($agents->getAgThree() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgThree()); }
  4144.             if (!empty($agents->getAgFour()) and ($agents->getAgFour() != 0)){ $agentToNotify[] = $em->getRepository(User::class)->findOneById($agents->getAgFour()); }
  4145.             //-- Envio correo a los agentes que hayan sido modificados
  4146.             $time = new \DateTime("now");
  4147.             foreach ($agentToNotify as $agent) {
  4148.                 $mailAgent[] = $agent->getEmail();
  4149.                 $agentMail $agent->getEmail();
  4150.                 $firmGmail $agent->getFirmGmail();
  4151.                 $mailAgentSent = array(
  4152.                     $agent->getEmail() => $agent->getName() . ' ' $agent->getLastName()
  4153.                 );
  4154.                 $data = array(
  4155.                     '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>',
  4156.                     'firm' => $firmGmail,
  4157.                 );
  4158.                 // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  4159.                 $transporter = \Swift_SmtpTransport::newInstance()
  4160.                     ->setHost('smtp.gmail.com')
  4161.                     ->setEncryption('ssl')//ssl / tls
  4162.                     ->setPort(465)// 465 / 587
  4163.                     ->setUsername('desarrollo@develup.solutions')
  4164.                     ->setPassword('utvh hzoi wfdo ztjs');
  4165.                 $mailer = \Swift_Mailer::newInstance($transporter);
  4166.                 $message = \Swift_Message::newInstance()
  4167.                     ->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Asignado')
  4168.                     ->setSender($agentMail)
  4169.                     ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  4170.                     ->setReplyTo($agentMail)
  4171.                     ->setTo($mailAgent)
  4172.                     ->setBody(
  4173.                         $this->renderView(
  4174.                             'mail/structure-mail.html.twig',
  4175.                             array('data' => $data)
  4176.                         ),
  4177.                         'text/html'
  4178.                     );
  4179.                 $mailer->send($message);
  4180.             }
  4181.         }
  4182.         return $this->redirectToRoute('proposal_edit', array('id'=>$id));
  4183.     }
  4184.     private function NotifyAvExpress($proposal$avFile$originPrpDateStart$originPrpDateEnd$originPrpStatus)
  4185.     {
  4186.         $em $this->getDoctrine()->getManager();
  4187.         $agent $em->getRepository(User::class)->findOneById($proposal->getUpdatedId());
  4188.         $mailSubject '';
  4189.         $mailBody '';
  4190.         $boolStatus false;
  4191.         $boolDates false;
  4192.         if (($proposal->getStatus() == 'Confirmed') and !($proposal->getStatus() == $originPrpStatus)){
  4193.             $boolStatus true;
  4194.             $mailSubject $mailSubject.'Proposal #'.$proposal->getId().' CONFIRMADO, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4195.             $mailBody $mailBody.'<p>''Proposal #'.$proposal->getId().' <b>CONFIRMADO</b> por '.$agent->getName().' '.$agent->getLastName().'</p>';
  4196.             $mailBody $mailBody.'<p>''AvExpress #'.$avFile->getId().' - '.$avFile->getTitle().'</p>';
  4197. //            $mailBody = $mailBody.'<a href="http://127.0.0.1:8000/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente</a>';
  4198.             $mailBody $mailBody.'<a href="https://inout.mante.solutions/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente. Es necesario iniciar la sesión previamente.</a>';
  4199.             $mailBody $mailBody.'<p><br><br>''Fecha de actualización: '.$proposal->getUpdatedAt()->format('d/m/Y').'<p>';
  4200.         }
  4201.         if (($proposal->getStatus() == 'Cancel') and !($proposal->getStatus() == $originPrpStatus)){
  4202.             $boolStatus true;
  4203.             $mailSubject $mailSubject.'Proposal #'.$proposal->getId().' CANCELADO, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4204.             $mailBody $mailBody.'<p>''Proposal #'.$proposal->getId().' <b>CANCELADO</b> por '.$agent->getName().' '.$agent->getLastName().'</p>';
  4205.             $mailBody $mailBody.'<p>''AvExpress #'.$avFile->getId().' - '.$avFile->getTitle().'</p>';
  4206.             $mailBody $mailBody.'<a href="https://inout.mante.solutions/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente. Es necesario iniciar la sesión previamente.</a>';
  4207.             $mailBody $mailBody.'<p><br><br>''Fecha de actualización: '.$proposal->getUpdatedAt()->format('d/m/Y').'<p>';
  4208.         }
  4209.         if ((!($proposal->getDateEventStarAt()->format('dmY') == $originPrpDateStart->format('dmY'))) or ((!($proposal->getDateEventEndAt()->format('dmY') == $originPrpDateEnd->format('dmY'))))){
  4210.             $boolDates true;
  4211.             $mailSubject $mailSubject.'Proposal #'.$proposal->getId().' FECHAS MODIFICADAS, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4212.             $mailBody $mailBody.'<p>''Proposal #'.$proposal->getId().' <b>FECHAS MODIFICADAS</b> por '.$agent->getName().' '.$agent->getLastName().'</p>';
  4213.             $mailBody $mailBody.'<p>''AvExpress #'.$avFile->getId().' - '.$avFile->getTitle().'</p>';
  4214.             $mailBody $mailBody.'<p>''Fecha de inicio del evento: '.$proposal->getDateEventStarAt()->format('d/m/Y').'</p>';
  4215.             $mailBody $mailBody.'<p>''Fecha fin del evento: '.$proposal->getDateEventEndAt()->format('d/m/Y').'</p>';
  4216.             $mailBody $mailBody.'<a href="https://inout.mante.solutions/avexpress/fileedit/'.$avFile->getId().'">Ir al expediente. Es necesario iniciar la sesión previamente.</a>';
  4217.             $mailBody $mailBody.'<p><br><br>''Fecha de actualización: '.$proposal->getUpdatedAt()->format('d/m/Y').'<p>';
  4218.         }
  4219.         if ($boolStatus and $boolDates){
  4220.             $mailSubject 'Proposal #'.$proposal->getId().' ESTADO Y FECHAS MODIFICADAS, expediente AvExpress #'.$avFile->getId().' - '.$avFile->getTitle();
  4221.         }
  4222.         $mailAddress 'gustavo.ayala@develup.solutions';
  4223.         $replyTo = array();
  4224.         $replyTo['salvador@avexpress.tv'] = 'salvador@avexpress.tv';
  4225.         $replyTo['ayudantedeproduccion@avexpress.tv'] = 'ayudantedeproduccion@avexpress.tv';
  4226.         $replyTo['ayudantedeproduccion2@avexpress.tv'] = 'ayudantedeproduccion2@avexpress.tv';
  4227.         $agentMail $mailAddress;
  4228.         //Se prepara el correo con los agentes a notificar
  4229.         $firmGmail $agent->getFirmGmail();
  4230.         $data = array(
  4231.             'body' => $mailBody,
  4232.             'firm' => $firmGmail,
  4233.         );
  4234.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  4235.         $transporter = new Swift_SmtpTransport();
  4236.         $transporter->setHost('smtp.gmail.com')
  4237.             ->setEncryption('ssl')//ssl / tls
  4238.             ->setPort(465)// 465 / 587
  4239.             ->setUsername('desarrollo@develup.solutions')
  4240.             ->setPassword('utvh hzoi wfdo ztjs');
  4241.         $mailer = new Swift_Mailer($transporter);
  4242.         $message = new Swift_Message();
  4243.         $message->setSubject($mailSubject)
  4244.             ->setSender($agentMail)
  4245.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  4246.             ->setReplyTo($agentMail)
  4247.             ->setTo($replyTo)
  4248.             ->setBody(
  4249.                 $this->renderView(
  4250.                     'mail/structure-mail.html.twig',
  4251.                     array('data' => $data)
  4252.                 ),
  4253.                 'text/html'
  4254.             );
  4255.         $mailer->send($message);
  4256.         return true;
  4257.     }
  4258.     private function AsignacionPorcentajeAgente(){
  4259.         // Solo Rafa, Elena, Yulia o algun ADMIN pueden asignar porcentajes
  4260.         $em $this->getDoctrine()->getManager();
  4261.         $bool false;
  4262.         /* Obtengo usuario logueado */
  4263.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4264.         $user_id $user_logueado->getId();
  4265.         $agent $em->getRepository(User::class)->findOneById($user_id);
  4266.         if (($agent->getRole() == 'ROLE_ADMIN') or ($agent->getId() == 22) or ($agent->getId() == 27)){ $bool true; }
  4267.         return $bool;
  4268.     }
  4269.     private function MontoPorcentajeAgente($numberAgent$arrayRequest){
  4270.         // Asignacion de valores por defecto a los porcentajes de los agentes
  4271.         // 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%
  4272.         // $numberAgent numero del agente sobre el cual se buscará el porcentaje
  4273.         // $arrayRequest contiene el arreglo con los nombre de los agentes
  4274.         $numeroAgentesSolicitados 0;
  4275.         $porcentajeParaAsignar 0;
  4276.         if (!empty($arrayRequest[0])) { $numeroAgentesSolicitados ++; }
  4277.         if (!empty($arrayRequest[1])) { $numeroAgentesSolicitados ++; }
  4278.         if (!empty($arrayRequest[2])) { $numeroAgentesSolicitados ++; }
  4279.         if (!empty($arrayRequest[3])) { $numeroAgentesSolicitados ++; }
  4280.         switch ($numeroAgentesSolicitados) {
  4281.             case 1:
  4282.                 switch ($numberAgent) {
  4283.                     case 1$porcentajeParaAsignar 100; break;
  4284.                     case 2$porcentajeParaAsignar 0; break;
  4285.                     case 3$porcentajeParaAsignar 0; break;
  4286.                     case 4$porcentajeParaAsignar 0; break;
  4287.                     default: break;
  4288.                 }
  4289.                 break;
  4290.             case 2:
  4291.                 switch ($numberAgent) {
  4292.                     case 1$porcentajeParaAsignar 60; break;
  4293.                     case 2$porcentajeParaAsignar 40; break;
  4294.                     case 3$porcentajeParaAsignar 0; break;
  4295.                     case 4$porcentajeParaAsignar 0; break;
  4296.                     default: break;
  4297.                 }
  4298.                 break;
  4299.             case 3:
  4300.                 switch ($numberAgent) {
  4301.                     case 1$porcentajeParaAsignar 60; break;
  4302.                     case 2$porcentajeParaAsignar 20; break;
  4303.                     case 3$porcentajeParaAsignar 20; break;
  4304.                     case 4$porcentajeParaAsignar 0; break;
  4305.                     default: break;
  4306.                 }
  4307.                 break;
  4308.             case 4:
  4309.                 switch ($numberAgent) {
  4310.                     case 1$porcentajeParaAsignar 25; break;
  4311.                     case 2$porcentajeParaAsignar 25; break;
  4312.                     case 3$porcentajeParaAsignar 25; break;
  4313.                     case 4$porcentajeParaAsignar 25; break;
  4314.                     default: break;
  4315.                 }
  4316.                 break;
  4317.             default: break;
  4318.         }
  4319.         return $porcentajeParaAsignar;
  4320.     }
  4321.     private function sendTelegramMail($id$idProp$text )
  4322.     {
  4323.         $em $this->getDoctrine()->getManager();
  4324.         $telegUser $em->getRepository(MdvTelegramUser::class)->findOneByUserId($id);
  4325.         $xbody '<a href="//' $_SERVER['HTTP_HOST'] . '/events/proposal/edit/' $idProp '">' $idProp '</a> ' $text;
  4326.         if (!empty($telegUser)) {
  4327.             $text 'NUEVO PROPOSAL - ' 'https://' $_SERVER['HTTP_HOST'] . '/events/proposal/mobile/viewbriefing/' $idProp;
  4328.             $parameters = array(
  4329.                 'chat_id' => $telegUser->getChatId(),
  4330.                 'text' => $text,
  4331.             );
  4332.             $bot_token $telegUser->getBotToken();
  4333.             $url "https://api.telegram.org/bot$bot_token/sendMessage";
  4334.             if (!$curl curl_init()) {
  4335.                 exit();
  4336.             }
  4337.             curl_setopt($curlCURLOPT_POSTtrue);
  4338.             curl_setopt($curlCURLOPT_POSTFIELDS$parameters);
  4339.             curl_setopt($curlCURLOPT_URL$url);
  4340.             curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  4341.             $output curl_exec($curl);
  4342.             curl_close($curl);
  4343.         }
  4344.         $agent $em->getRepository(User::class)->findOneById($id);
  4345.         $agentMail $agent->getEmail();
  4346.         $mailAgent $agentMail;
  4347.         //Se prepara el correo con los agentes a notificar
  4348.         $firmGmail $agent->getFirmGmail();
  4349.         $data = array(
  4350.             'body' => $xbody,
  4351.             'firm' => $firmGmail,
  4352.         );
  4353.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  4354.         $transporter = new Swift_SmtpTransport();
  4355.         $transporter->setHost('smtp.gmail.com')
  4356.             ->setEncryption('ssl')//ssl / tls
  4357.             ->setPort(465)// 465 / 587
  4358.             ->setUsername('desarrollo@develup.solutions')
  4359.             ->setPassword('utvh hzoi wfdo ztjs');
  4360.         $mailer = new Swift_Mailer($transporter);
  4361.         $message = new Swift_Message();
  4362.         $message->setSubject('Proposal #' $idProp', Notificación de nuevo proposal')
  4363.             ->setSender($agentMail)
  4364.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  4365.             ->setReplyTo($agentMail)
  4366.             ->setTo($mailAgent)
  4367.             ->setBody(
  4368.                 $this->renderView(
  4369.                     'mail/structure-mail.html.twig',
  4370.                     array('data' => $data)
  4371.                 ),
  4372.                 'text/html'
  4373.             );
  4374.         $mailer->send($message);
  4375.         return true;
  4376.     }
  4377. }