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

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