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

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