src/MDS/EventsBundle/Controller/ProposalSupplierServicesController.php line 2729

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * User: jorge.defreitas@develup.solutions
  5.  * Date: 14/08/2017
  6.  * Time: 12:15
  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\SettingsRol;
  13. use App\Entity\SupplierAccommodation;
  14. use App\Entity\SupplierActivities;
  15. use App\Entity\SupplierAv;
  16. use App\Entity\SupplierCreative;
  17. use App\Entity\SupplierCruise;
  18. use App\Entity\SupplierEntertainment;
  19. use App\Entity\SupplierGifts;
  20. use App\Entity\SupplierGuide;
  21. use App\Entity\SupplierItineraries;
  22. use App\Entity\SupplierLounge;
  23. use App\Entity\SupplierMenu;
  24. use App\Entity\SupplierOthers;
  25. use App\Entity\SupplierServicesAssistant;
  26. use App\Entity\SupplierTechnology;
  27. use App\Entity\SupplierTransport;
  28. use App\Entity\User;
  29. use App\MDS\AvexpressBundle\Entity\AveFiles;
  30. use App\MDS\DevelupBundle\Entity\MdvBriefings;
  31. use App\MDS\AvexpressBundle\Entity\AveBriefings;
  32. use App\MDS\DevelupBundle\Entity\MdvBudgetPending;
  33. use App\MDS\AvexpressBundle\Entity\AveBudgetPending;
  34. use App\MDS\AvexpressBundle\Entity\AveProduct;
  35. use App\MDS\AvexpressBundle\Entity\AveProductFile;
  36. use App\MDS\AvexpressBundle\Entity\AveTemplateItems;
  37. use App\MDS\DevelupBundle\Entity\MdvFiles;
  38. use App\MDS\DevelupBundle\Entity\MdvProduct;
  39. use App\MDS\DevelupBundle\Entity\MdvProductFile;
  40. use App\MDS\DevelupBundle\Entity\MdvTelegramUser;
  41. use App\MDS\EventsBundle\Entity\Proposal;
  42. use App\MDS\EventsBundle\Entity\ProposalControl;
  43. use App\MDS\EventsBundle\Entity\ProposalInvoice;
  44. use App\MDS\EventsBundle\Entity\ProposalNoVatInvoice;
  45. use App\MDS\EventsBundle\Entity\ProposalSupplierServices;
  46. use App\MDS\EventsBundle\Entity\ProposalSupplierServicesCostsClient;
  47. use App\MDS\EventsBundle\Entity\ProposalTracing;
  48. use App\MDS\EventsBundle\Entity\ProposalsSupplierServicesAssistantName;
  49. use App\MDS\EventsBundle\Entity\ProposalSupplierControl;
  50. use App\MDS\EventsBundle\Entity\ProposalSupplierServicesBudget;
  51. use Doctrine\ORM\EntityManagerInterface;
  52. use Swift_Mailer;
  53. use Swift_Message;
  54. use Swift_SmtpTransport;
  55. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  56. use Symfony\Component\Routing\Annotation\Route;
  57. use Symfony\Component\HttpFoundation\JsonResponse;
  58. use Symfony\Component\HttpFoundation\Request;
  59. use Symfony\Contracts\Translation\TranslatorInterface;
  60. class ProposalSupplierServicesController extends AbstractController
  61. {
  62.     private $translator;
  63.     public function __construct(TranslatorInterface $translator) {
  64.         $this->translator $translator;
  65.     }
  66.     /*
  67.     * ATENCION LAS RAIZ DE @Route POR DEFECTO DEL BUNDLE: EventsBundle ES  /events/, NO PONERLO EN LA @Route("")
  68.     *
  69.     * */
  70.     /**
  71.      * @Route("proposal/destination/services/addservices", name="proposal_destination_supplier_addservices")
  72.      */
  73.     public function AddServicesAction(Request $request)
  74.     {
  75.         $idserviceproposal="";
  76.         $idserviceproposal $request->request->get('idserviceproposal');
  77.         $supplierId $request->request->get('supplierId');
  78.         $idcontrol $request->request->get('idcontrol');
  79.         $supplierservices= new ProposalSupplierServices();
  80.         $supplierservices->setControlId($idcontrol);
  81.         $em $this->getDoctrine()->getManager();
  82.         $supplierCrtl $em->getRepository(ProposalSupplierControl::class)->findOneById($idcontrol);
  83.         $supplierservices->setProposalId($supplierCrtl->getProposalId());
  84.         $supplierservices->setDestinationId($supplierCrtl->getDestinoId());
  85.         if(empty($idserviceproposal)){
  86.             $supplierservices->setServiceIdFather('0');
  87.             $supplierservices->setSupplierId($supplierCrtl->getSupplierId());
  88.             $supplierservices->setIdeaId($supplierCrtl->getIdeaId());
  89.             $supplierservices->setActivityId($supplierCrtl->getActivityId());
  90.             $supplierservices->setIsFather('0');
  91.         }else{
  92.             $supplierservices->setServiceIdFather($idserviceproposal);
  93.             $supplierservices->setSupplierId($supplierId);
  94.             $supplierservices->setIsFather('1');
  95.         }
  96.         /* NAMEJO DE ADICIONALES EN EL DIA DEL EVENTO O DESPUES EL DIA DEL EVENTO */
  97.         $proposal_data $em->getRepository(Proposal::class)->findOneById($supplierCrtl->getProposalId());
  98.         $dayEvent $proposal_data->getDateEventStarAt()->format('Y-m-d');
  99.         $today date('Y-m-d');
  100. //        if($dayEvent >= $today){
  101.         if( $today >= $dayEvent){
  102.             $additional "Additional";
  103.         }else{
  104.             $additional "Normal";
  105.         }
  106. //        d($dayEvent, $today, $additional);
  107. //        exit();
  108.         /* Obtengo usuario logueado */
  109.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  110.         $user_id $user_logueado->getId();
  111.         $supplierservices->setCreatedId($user_id);
  112.         $supplierservices->setUpdatedId($user_id);
  113.         $supplierservices->setDateInAt($proposal_data->getDateEventStarAt());
  114.         $supplierservices->setDateOutAt($proposal_data->getDateEventEndAt());
  115.         /* metemos accommodation *////////////////////////////////////////////////////////////////
  116.         $accommodations $request->request->get('accommodation');
  117.         if(!empty($accommodations)){
  118.             foreach($accommodations as $accommodation){
  119.                 $supplierservices->setServiceId($accommodation);
  120.                 $supplierservices->setServiceCatId('1');
  121.                 $supplierservices->setServiceCatName('Accommodation');
  122.                 $sqldata $em->getRepository(SupplierAccommodation::class)->findOneById($accommodation);
  123.                 $supplierservices->setName($sqldata->getName());
  124.                 $supplierservices->setPrice($sqldata->getPrice());
  125.                 //$supplierservices->setCurrency('Euro');
  126.                 $supplierservices->setUnits('1');
  127.                 $supplierservices->setCommission('0');
  128.                 //$supplierservices->setOver('Accommodation');
  129.                 $supplierservices->setIva('10');
  130.                 $supplierservices->setPax('0');
  131.                 //$supplierservices->setHour('');//null
  132.                 //$supplierservices->setDateInAt('');
  133.                 //$supplierservices->setDateOutAt('');
  134.                 $supplierservices->setDirectPayment('0');
  135.                 $supplierservices->setStatus('Pending');
  136.                 $supplierservices->setStatusinternal($additional);
  137.                 $em->persist($supplierservices);
  138.                 $em->flush();
  139.                 $em->clear();
  140.                 //para pruebas
  141.                 //$data_prueba[] = array(
  142.                 //    'data' => $supplierservices
  143.                 //);
  144.             }
  145.             //para pruebas
  146.             //d($data_prueba);
  147.             //exit();
  148.         }
  149.         /* metemos menu *////////////////////////////////////////////////////////////////
  150.         $menus $request->request->get('menu');
  151.         if(!empty($menus)){
  152.             foreach($menus as $menu){
  153.                 $supplierservices->setServiceId($menu);
  154.                 $supplierservices->setServiceCatId('11');
  155.                 $supplierservices->setServiceCatName('Menu');
  156.                 $sqldata $em->getRepository(SupplierMenu::class)->findOneById($menu);
  157.                 $supplierservices->setName($sqldata->getTitle());
  158.                 $supplierservices->setPrice($sqldata->getPrice());
  159.                 //$supplierservices->setCurrency('Euro');
  160.                 $supplierservices->setUnits('1');
  161.                 $supplierservices->setCommission($sqldata->getCommission());
  162.                 //$supplierservices->setOver('Accommodation');
  163.                 $supplierservices->setIva($sqldata->getIva());
  164.                 $supplierservices->setPax('0');
  165.                 //$supplierservices->setHour('');//null
  166.                 //$supplierservices->setDateInAt('');
  167.                 //$supplierservices->setDateOutAt('');
  168.                 $supplierservices->setDirectPayment('0');
  169.                 $supplierservices->setStatus('Pending');
  170.                 $supplierservices->setStatusinternal($additional);
  171.                 $em->persist($supplierservices);
  172.                 $em->flush();
  173.                 $em->clear();
  174.                 //para pruebas
  175.                 //$data_prueba[] = array(
  176.                 //    'data' => $supplierservices
  177.                 //);
  178.             }
  179.             //para pruebas
  180.             //d($data_prueba);
  181.             //exit();
  182.         }
  183.         /* metemos lounge *////////////////////////////////////////////////////////////////
  184.         $lounges $request->request->get('lounge');
  185.         if(!empty($lounges)){
  186.             foreach($lounges as $lounge){
  187.                 $supplierservices->setServiceId($lounge);
  188.                 $supplierservices->setServiceCatId('10');
  189.                 $supplierservices->setServiceCatName('Lounge');
  190.                 $sqldata $em->getRepository(SupplierLounge::class)->findOneById($lounge);
  191.                 $supplierservices->setName($sqldata->getName());
  192.                 $supplierservices->setPrice($sqldata->getPrice());
  193.                 //$supplierservices->setCurrency('Euro');
  194.                 $supplierservices->setUnits('1');
  195.                 $supplierservices->setCommission($sqldata->getCommission());
  196.                 //$supplierservices->setOver('Accommodation');
  197.                 $supplierservices->setIva($sqldata->getIva());
  198.                 $supplierservices->setPax('0');
  199.                 //$supplierservices->setHour('');//null
  200.                 //$supplierservices->setDateInAt('');
  201.                 //$supplierservices->setDateOutAt('');
  202.                 $supplierservices->setDirectPayment('0');
  203.                 $supplierservices->setStatus('Pending');
  204.                 $supplierservices->setStatusinternal($additional);
  205.                 $em->persist($supplierservices);
  206.                 $em->flush();
  207.                 $em->clear();
  208.                 //para pruebas
  209.                 //$data_prueba[] = array(
  210.                 //    'data' => $supplierservices
  211.                 //);
  212.             }
  213.             //para pruebas
  214.             //d($data_prueba);
  215.             //exit();
  216.         }
  217.         /* metemos activities *////////////////////////////////////////////////////////////////
  218.         $activitiess $request->request->get('activities');
  219.         if(!empty($activitiess)){
  220.             foreach($activitiess as $activities){
  221.                 $supplierservices->setServiceId($activities);
  222.                 $supplierservices->setServiceCatId('2');
  223.                 $supplierservices->setServiceCatName('Activities');
  224.                 $sqldata $em->getRepository(SupplierActivities::class)->findOneById($activities);
  225.                 $supplierservices->setName($sqldata->getTitle());
  226.                 $supplierservices->setPrice($sqldata->getPrice());
  227.                 //$supplierservices->setCurrency('Euro');
  228.                 $supplierservices->setUnits('1');
  229.                 $supplierservices->setCommission($sqldata->getCommission());
  230.                 //$supplierservices->setOver('Accommodation');
  231.                 $supplierservices->setIva($sqldata->getIva());
  232.                 $supplierservices->setPax('0');
  233.                 //$supplierservices->setHour('');//null
  234.                 //$supplierservices->setDateInAt('');
  235.                 //$supplierservices->setDateOutAt('');
  236.                 $supplierservices->setDirectPayment('0');
  237.                 $supplierservices->setStatus('Pending');
  238.                 $supplierservices->setStatusinternal($additional);
  239.                 $em->persist($supplierservices);
  240.                 $em->flush();
  241.                 $em->clear();
  242.                 //para pruebas
  243.                 //$data_prueba[] = array(
  244.                 //    'data' => $supplierservices
  245.                 //);
  246.             }
  247.             //para pruebas
  248.             //d($data_prueba);
  249.             //exit();
  250.         }
  251.         /* metemos itineraries *////////////////////////////////////////////////////////////////
  252.         $itinerariess $request->request->get('itineraries');
  253.         if(!empty($itinerariess)){
  254.             foreach($itinerariess as $itineraries){
  255.                 $supplierservices->setServiceId($itineraries);
  256.                 $supplierservices->setServiceCatId('9');
  257.                 $supplierservices->setServiceCatName('Itineraries');
  258.                 $sqldata $em->getRepository(SupplierItineraries::class)->findOneById($itineraries);
  259.                 $supplierservices->setName($sqldata->getTitle());
  260.                 $supplierservices->setPrice('0');
  261.                 //$supplierservices->setCurrency('Euro');
  262.                 $supplierservices->setUnits('1');
  263.                 $supplierservices->setCommission('0');
  264.                 //$supplierservices->setOver('Accommodation');
  265.                 $supplierservices->setIva('10');
  266.                 $supplierservices->setPax('0');
  267.                 //$supplierservices->setHour('');//null
  268.                 //$supplierservices->setDateInAt('');
  269.                 //$supplierservices->setDateOutAt('');
  270.                 $supplierservices->setDirectPayment('0');
  271.                 $supplierservices->setStatus('Pending');
  272.                 $supplierservices->setStatusinternal($additional);
  273.                 $em->persist($supplierservices);
  274.                 $em->flush();
  275.                 $em->clear();
  276.                 //para pruebas
  277.                 //$data_prueba[] = array(
  278.                 //    'data' => $supplierservices
  279.                 //);
  280.             }
  281.             //para pruebas
  282.             //d($data_prueba);
  283.             //exit();
  284.         }
  285.         /* metemos cruise *////////////////////////////////////////////////////////////////
  286.         $cruises $request->request->get('cruise');
  287.         if(!empty($cruises)){
  288.             foreach($cruises as $cruise){
  289.                 $supplierservices->setServiceId($cruise);
  290.                 $supplierservices->setServiceCatId('5');
  291.                 $supplierservices->setServiceCatName('Cruise');
  292.                 $sqldata $em->getRepository(SupplierCruise::class)->findOneById($cruise);
  293.                 $supplierservices->setName($sqldata->getTitle());
  294.                 $supplierservices->setPrice($sqldata->getPrice());
  295.                 //$supplierservices->setCurrency('Euro');
  296.                 $supplierservices->setUnits('1');
  297.                 $supplierservices->setCommission($sqldata->getCommission());
  298.                 //$supplierservices->setOver('Accommodation');
  299.                 $supplierservices->setIva($sqldata->getIva());
  300.                 $supplierservices->setPax('0');
  301.                 //$supplierservices->setHour('');//null
  302.                 //$supplierservices->setDateInAt('');
  303.                 //$supplierservices->setDateOutAt('');
  304.                 $supplierservices->setDirectPayment('0');
  305.                 $supplierservices->setStatus('Pending');
  306.                 $supplierservices->setStatusinternal($additional);
  307.                 $em->persist($supplierservices);
  308.                 $em->flush();
  309.                 $em->clear();
  310.                 //para pruebas
  311.                 //$data_prueba[] = array(
  312.                 //    'data' => $supplierservices
  313.                 //);
  314.             }
  315.             //para pruebas
  316.             //d($data_prueba);
  317.             //exit();
  318.         }
  319.         /* metemos transport *////////////////////////////////////////////////////////////////
  320.         $transports $request->request->get('transport');
  321.         if(!empty($transports)){
  322.             foreach($transports as $transport){
  323.                 $supplierservices->setServiceId($transport);
  324.                 $supplierservices->setServiceCatId('13');
  325.                 $supplierservices->setServiceCatName('Transport');
  326.                 $sqldata $em->getRepository(SupplierTransport::class)->findOneById($transport);
  327.                 $supplierservices->setName($sqldata->getName());
  328.                 $supplierservices->setPrice($sqldata->getPrice());
  329.                 //$supplierservices->setCurrency('Euro');
  330.                 $supplierservices->setUnits('1');
  331.                 $supplierservices->setCommission($sqldata->getCommission());
  332.                 //$supplierservices->setOver('Accommodation');
  333.                 $supplierservices->setIva($sqldata->getIva());
  334.                 $supplierservices->setPax('0');
  335.                 //$supplierservices->setHour('');//null
  336.                 //$supplierservices->setDateInAt('');
  337.                 //$supplierservices->setDateOutAt('');
  338.                 $supplierservices->setDirectPayment('0');
  339.                 $supplierservices->setStatus('Pending');
  340.                 $supplierservices->setStatusinternal($additional);
  341.                 $em->persist($supplierservices);
  342.                 $em->flush();
  343.                 $em->clear();
  344.                 //para pruebas
  345.                 //$data_prueba[] = array(
  346.                 //    'data' => $supplierservices
  347.                 //);
  348.             }
  349.             //para pruebas
  350.             //d($data_prueba);
  351.             //exit();
  352.         }
  353.         /* metemos av *////////////////////////////////////////////////////////////////
  354.         $avs $request->request->get('av');
  355.         $av_supplier $request->request->get('av_supplier');
  356.         $av_template $request->request->get('avexpress');
  357.         if(!empty($avs)){
  358.             foreach($avs as $av){
  359.                 $supplierservices->setServiceId($av);
  360.                 $supplierservices->setServiceCatId('3');
  361.                 $supplierservices->setServiceCatName('Av');
  362.                 if (empty($av_supplier)) {
  363.                     $sqldata $em->getRepository(SupplierAv::class)->findOneById($av);
  364.                     $supplierservices->setName($sqldata->getName());
  365.                     $supplierservices->setPrice($sqldata->getPrice());
  366.                     //$supplierservices->setCurrency('Euro');
  367.                     $supplierservices->setUnits('1');
  368.                     $supplierservices->setCommission($sqldata->getCommission());
  369.                     //$supplierservices->setOver('Accommodation');
  370.                     $supplierservices->setIva($sqldata->getIva());
  371.                     $supplierservices->setPax('0');
  372.                     //$supplierservices->setHour('');//null
  373.                     //$supplierservices->setDateInAt('');
  374.                     //$supplierservices->setDateOutAt('');
  375.                     $supplierservices->setDirectPayment('0');
  376.                     $supplierservices->setStatus('Pending');
  377.                     $supplierservices->setStatusinternal($additional);
  378.                 } else {
  379.                     $sqldata $em->getRepository(AveProduct::class)->findOneById($av);
  380.                     $supplierservices->setName($sqldata->getName());
  381.                     $supplierservices->setPrice($sqldata->getPrice());
  382.                     $supplierservices->setUnits('1');
  383.                     $supplierservices->setCommission(0);
  384.                     $supplierservices->setIva(21);
  385.                     $supplierservices->setPax('0');
  386.                     $supplierservices->setDirectPayment('0');
  387.                     $supplierservices->setStatus('Pending');
  388.                     $supplierservices->setStatusinternal($additional);
  389.                     $supplierservices->setDateInAt(new \DateTime("now"));
  390.                     $supplierservices->setDateOutAt(new \DateTime("now"));
  391.                 }
  392.                 $em->persist($supplierservices);
  393.                 $em->flush();
  394.                 $em->clear();
  395.                 //INICIO: Confirmamos un servicio de AvExpress
  396.                 // Nombre del agente
  397.                 $agenteFullName $em->getRepository(User::class)->findOneById($user_id);
  398.                 $agenteFullName $agenteFullName->getName() . ' ' $agenteFullName->getLastName();
  399.                 $proposalTitle $em->getRepository(Proposal::class)->findOneById($supplierservices->getProposalId());
  400.                 if ($supplierservices->getSupplierId()==80){
  401.                     $originalServiceName $em->getRepository(AveProduct::class)->findOneById($supplierservices->getServiceId());
  402.                     $budget = new AveBudgetPending();
  403.                     $budget->setActivityId($supplierservices->getActivityId());
  404.                     $budget->setAssistantId($supplierservices->getAssistantId());
  405.                     $budget->setBreakdown($supplierservices->getBreakdown());
  406.                     $budget->setCommission($supplierservices->getCommission());
  407.                     $budget->setControlId($supplierservices->getControlId());
  408.                     $budget->setOriginId($supplierservices->getId());
  409.                     $budget->setCurrency($supplierservices->getCurrency());
  410.                     $budget->setDateBlockLimit($supplierservices->getDateBlockLimit());
  411.                     $budget->setDateInAt($supplierservices->getDateInAt());
  412.                     $budget->setDateOutAt($supplierservices->getDateOutAt());
  413.                     $budget->setDestinationId($supplierservices->getDestinationId());
  414.                     $budget->setDirectPayment($supplierservices->getDirectPayment());
  415.                     $budget->setHour($supplierservices->getHour());
  416.                     $budget->setIdeaId($supplierservices->getIdeaId());
  417.                     $budget->setIsFather($supplierservices->getIsFather());
  418.                     $budget->setIva($supplierservices->getIva());
  419.                     if(!($originalServiceName->getName() == $supplierservices->getName())){
  420.                         $budget->setName($originalServiceName->getName().' (:'$supplierservices->getName().':)');
  421.                     } else {
  422.                         $budget->setName($originalServiceName->getName());
  423.                     }
  424.                     $budget->setOpCommission($supplierservices->getOpCommission());
  425.                     $budget->setOpIva($supplierservices->getOpIva());
  426.                     $budget->setOpOver($supplierservices->getOpOver());
  427.                     $budget->setOriginalIva($supplierservices->getOriginalIva());
  428.                     $budget->setOriginalopIva($supplierservices->getOriginalopIva());
  429.                     $budget->setOriginalPrice($supplierservices->getOriginalPrice());
  430.                     $budget->setOver($supplierservices->getOver());
  431.                     $budget->setPax($supplierservices->getPax());
  432.                     $budget->setPreCommission($supplierservices->getPreCommission());
  433.                     $budget->setPreIva($supplierservices->getPreIva());
  434.                     $budget->setPrice($supplierservices->getPrice());
  435.                     $budget->setProposalId($supplierservices->getProposalId());
  436.                     $budget->setRank($supplierservices->getRank());
  437.                     $budget->setServiceCatId($supplierservices->getServiceCatId());
  438.                     $budget->setServiceCatName($supplierservices->getServiceCatName());
  439.                     $budget->setServiceId($supplierservices->getServiceId());
  440.                     $budget->setServiceIdFather($supplierservices->getServiceIdFather());
  441.                     $budget->setStatus($supplierservices->getStatus());
  442.                     $budget->setStatusinternal($supplierservices->getStatusinternal());
  443.                     $budget->setStatusRec($supplierservices->getStatusRec());
  444.                     $budget->setSupplierId($supplierservices->getSupplierId());
  445.                     $budget->setUnits($supplierservices->getUnits());
  446.                     $budget->setUserConfirmedFullName($agenteFullName);
  447.                     $budget->setUserConfirmedId($user_id);
  448.                     $budget->setProposalTitle($proposalTitle->getTitle());
  449.                     $budget->setCreatedAt(new \DateTime("now"));
  450.                     $budget->setCreatedId($user_id);
  451.                     $budget->setUpdatedId($user_id);
  452.                     $budget->setUpdatedAt(new \DateTime("now"));
  453.                     // INIICO: Llenamos el tooltip con la info del proposal
  454.                     $texto null;
  455.                     if (!empty($budget->getProposalId())){
  456.                         $prop $em->getRepository(Proposal::class)->findOneById($budget->getProposalId());
  457.                         if (!empty($prop)){
  458.                             $client $em->getRepository(Client::class)->findOneById($prop->getClientId());
  459.                             $clientContact $em->getRepository(ClientContact::class)->findOneById($prop->getContactId());
  460.                             $contacto null;
  461.                             if (!empty($clientContact->getName())){$contacto $contacto$clientContact->getName(). ' ';}
  462.                             if (!empty($clientContact->getLastName())){$contacto $contacto$clientContact->getLastName(). ' ';}
  463.                             if (!empty($clientContact->getEmail())){$contacto $contacto'('.$clientContact->getEmail().')'' ';}
  464.                             if (!empty($clientContact->getPhone())){$contacto $contacto' - '.$clientContact->getPhone(). ' ';}
  465.                             if (!empty($clientContact->getMobile())){$contacto $contacto' - '.$clientContact->getMobile();}
  466.                             $city $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  467.                             $texto $texto .'Petición: '.$budget->getCreatedAt()->format('d/m/Y'). ' -- ';
  468.                             if (!empty($client)){$texto $texto .'Cliente: '.$client->getName(). ' -- ';}
  469.                             if (!empty($prop->getPax())){$texto $texto .'Personas: '.$prop->getPax(). ' -- ';}
  470.                             $texto $texto .'Desde: '.$prop->getDateEventStarAt()->format('d/m/Y').' Hasta: '.$prop->getDateEventEndAt()->format('d/m/Y'). ' -- ';
  471.                             $texto $texto .'Horario: '.$supplierservices->getDateInAt()->format('H:i'). ' a '.$supplierservices->getDateOutAt()->format('H:i'). ' -- ';
  472.                             $texto $texto .'Ciudad: '.$city->getTitle(). ' -- ';
  473.                             $texto $texto .'Contacto: '$contacto;
  474.                             $budget->setTextTooltip($texto);
  475.                         }
  476.                     }
  477.                     // FIN: Llenamos el tooltip con la info del proposal
  478.                     $em->persist($budget);
  479.                     $em->flush();
  480.                     $logMail false;
  481.                     //INICIO: Creamos el expediente en AV si es necesario
  482.                     $fileAv $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
  483.                     if (empty($fileAv)){
  484.                         $fileAv = new AveFiles();
  485.                         $fileAv->setTitle($proposalTitle->getId().' - '$proposalTitle->getTitle());
  486.                         $fileAv->setClient('262');                                                  //In Out es el cliente
  487.                         $fileAv->setPriority(null);
  488.                         $fileAv->setSupplier(null);
  489.                         $fileAv->setStatus('');                                                     //El status no puede ir en nulo o no se listara el expediente
  490.                         $fileAv->setDaysBlock(null);
  491.                         $fileAv->setAdvancePayment(null);
  492.                         $fileAv->setIdProposal($proposalTitle->getId());
  493.                         $fileAv->setCateringName(null);
  494.                         $fileAv->setBoolCatering(null);
  495.                         $fileAv->setDateStart($proposalTitle->getDateEventStarAt());
  496.                         $fileAv->setDateEnd($proposalTitle->getDateEventEndAt());
  497.                         $fileAv->setPax($proposalTitle->getPax());
  498.                         $fileAv->setDeposit(null);
  499.                         $fileAv->setAccessKey(null);
  500.                         $fileAv->setDescription(null);
  501.                         $fileAv->setCreatedAt(new \DateTime("now"));
  502.                         $fileAv->setCreatedId($user_id);
  503.                         $fileAv->setUpdatedId($user_id);
  504.                         $fileAv->setUpdatedAt(new \DateTime("now"));
  505.                         $em->persist($fileAv);
  506.                         $em->flush();
  507.                         $logMail true;
  508.                     }
  509.                     //FIN: Creamos el expediente en AV si es necesario
  510.                     //INICIO: Notificamos por correo a Salvador y al agente
  511.                     if ($logMail){
  512.                         $mailAddressTo 'salvador@avexpress.tv';
  513. //                        $mailAddressTo = 'gustavo.ayala@develup.solutions';
  514.                         $agente $em->getRepository(User::class)->findOneById($user_id);
  515.                         $mailAddressFrom $agente->getEmail();
  516.                         $mailSubject 'Nuevo expediente solicitado por In Out';
  517.                         $mailBody 'Estimado proveedor,'.
  518.                             '<br><br> Para nuestro evento: '$proposalTitle->getId().' - '$proposalTitle->getTitle().
  519.                             '<br>Se ha creado automaticamente el expediente AV: '$fileAv->getId().' con el mismo nombre de nuestro evento'.
  520.                             '<br><br>Muchas gracias por su colaboración.<br><br>';
  521.                         //El correo solo se enviara si no se ha enviado ya una alerta previamente
  522.                         $this->sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  523.                         //Copia para el ayudante de AV  (Temporal por vacaciones de Salvador)
  524. //                        $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
  525. //                        $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv';          // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025  -  salvador@avexpress.tv
  526.                         $mailAddressTo 'salvador@avexpress.tv';
  527.                         $this->sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  528.                     }
  529.                     //FIN: Notificamos por correo a Salvador y al agente
  530.                     //INICIO: Enviamos Telegram
  531.                     //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
  532.                     $file $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
  533.                     if(!empty($file)){
  534.                         //Se envia el mensaje al creador del expediente
  535.                         $userTelegramId $file->getCreatedId();
  536.                     } else {
  537.                         // Solicitud sin expediente, se le notificara la jefe de departamento
  538.                         $userTelegramId 14// Id de Salvador
  539.                     }
  540.                     //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  541.                     //Buscamos el nombre del destino
  542.                     $nombreDestino $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  543.                     $nombreDestino $nombreDestino->getTitle();
  544.                     //Mensaje:
  545.                     //SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
  546.                     $this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
  547.                     //FIN: Enviamos Telegram
  548.                 }
  549.                 //FIN: Confirmamos un servicio de AvExpress
  550.                 //para pruebas
  551.                 //$data_prueba[] = array(
  552.                 //    'data' => $supplierservices
  553.                 //);
  554.             }
  555.             //para pruebas
  556.             //d($data_prueba);
  557.             //exit();
  558.         }
  559.         if(!empty($av_template)){
  560.             $av_template $av_template['template'];
  561.             $avTemplateItems $em->getRepository(AveTemplateItems::class)->findByTemplateId($av_template);
  562.             foreach($avTemplateItems as $av){
  563.                 $supplierservices->setServiceId($av->getId());
  564.                 $supplierservices->setServiceCatId('3');
  565.                 $supplierservices->setServiceCatName('Av');
  566.                 $supplierservices->setName($av->getProductName());
  567.                 $supplierservices->setPrice($av->getSubTotalPrice());
  568.                 $supplierservices->setUnits('1');
  569.                 $supplierservices->setCommission(0);
  570.                 $supplierservices->setIva(21);
  571.                 $supplierservices->setPax('0');
  572.                 $supplierservices->setDirectPayment('0');
  573.                 $supplierservices->setStatus('Pending');
  574.                 $supplierservices->setStatusinternal('AV TEMPLATE');
  575.                 $supplierservices->setDateInAt(new \DateTime("now"));
  576.                 $supplierservices->setDateOutAt(new \DateTime("now"));
  577.                 $em->persist($supplierservices);
  578.                 $em->flush();
  579.                 $em->clear();
  580.                 //INICIO: Confirmamos un servicio de AvExpress
  581.                 // Nombre del agente
  582.                 $agenteFullName $em->getRepository(User::class)->findOneById($user_id);
  583.                 $agenteFullName $agenteFullName->getName() . ' ' $agenteFullName->getLastName();
  584.                 $proposalTitle $em->getRepository(Proposal::class)->findOneById($supplierservices->getProposalId());
  585.                 if ($supplierservices->getSupplierId()==80){
  586. //                    $originalServiceName = $em->getRepository(AveProduct::class)->findOneById($supplierservices->getServiceId());
  587.                     $originalServiceName $av;
  588.                     $budget = new AveBudgetPending();
  589.                     $budget->setActivityId($supplierservices->getActivityId());
  590.                     $budget->setAssistantId($supplierservices->getAssistantId());
  591.                     $budget->setBreakdown($supplierservices->getBreakdown());
  592.                     $budget->setCommission($supplierservices->getCommission());
  593.                     $budget->setControlId($supplierservices->getControlId());
  594.                     $budget->setOriginId($supplierservices->getId());
  595.                     $budget->setCurrency($supplierservices->getCurrency());
  596.                     $budget->setDateBlockLimit($supplierservices->getDateBlockLimit());
  597.                     $budget->setDateInAt($supplierservices->getDateInAt());
  598.                     $budget->setDateOutAt($supplierservices->getDateOutAt());
  599.                     $budget->setDestinationId($supplierservices->getDestinationId());
  600.                     $budget->setDirectPayment($supplierservices->getDirectPayment());
  601.                     $budget->setHour($supplierservices->getHour());
  602.                     $budget->setIdeaId($supplierservices->getIdeaId());
  603.                     $budget->setIsFather($supplierservices->getIsFather());
  604.                     $budget->setIva($supplierservices->getIva());
  605.                     if(!($originalServiceName->getProductName() == $supplierservices->getName())){
  606.                         $budget->setName($originalServiceName->getProductName().' (:'$supplierservices->getName().':)');
  607.                     } else {
  608.                         $budget->setName($originalServiceName->getProductName());
  609.                     }
  610.                     $budget->setOpCommission($supplierservices->getOpCommission());
  611.                     $budget->setOpIva($supplierservices->getOpIva());
  612.                     $budget->setOpOver($supplierservices->getOpOver());
  613.                     $budget->setOriginalIva($supplierservices->getOriginalIva());
  614.                     $budget->setOriginalopIva($supplierservices->getOriginalopIva());
  615.                     $budget->setOriginalPrice($supplierservices->getOriginalPrice());
  616.                     $budget->setOver($supplierservices->getOver());
  617.                     $budget->setPax($supplierservices->getPax());
  618.                     $budget->setPreCommission($supplierservices->getPreCommission());
  619.                     $budget->setPreIva($supplierservices->getPreIva());
  620.                     $budget->setPrice($supplierservices->getPrice());
  621.                     $budget->setProposalId($supplierservices->getProposalId());
  622.                     $budget->setRank($supplierservices->getRank());
  623.                     $budget->setServiceCatId($supplierservices->getServiceCatId());
  624.                     $budget->setServiceCatName($supplierservices->getServiceCatName());
  625.                     $budget->setServiceId($supplierservices->getServiceId());
  626.                     $budget->setServiceIdFather($supplierservices->getServiceIdFather());
  627.                     $budget->setStatus($supplierservices->getStatus());
  628.                     $budget->setStatusinternal($supplierservices->getStatusinternal());
  629.                     $budget->setStatusRec($supplierservices->getStatusRec());
  630.                     $budget->setSupplierId($supplierservices->getSupplierId());
  631.                     $budget->setUnits($supplierservices->getUnits());
  632.                     $budget->setUserConfirmedFullName($agenteFullName);
  633.                     $budget->setUserConfirmedId($user_id);
  634.                     $budget->setProposalTitle($proposalTitle->getTitle());
  635.                     $budget->setCreatedAt(new \DateTime("now"));
  636.                     $budget->setCreatedId($user_id);
  637.                     $budget->setUpdatedId($user_id);
  638.                     $budget->setUpdatedAt(new \DateTime("now"));
  639.                     // INIICO: Llenamos el tooltip con la info del proposal
  640.                     $texto null;
  641.                     if (!empty($budget->getProposalId())){
  642.                         $prop $em->getRepository(Proposal::class)->findOneById($budget->getProposalId());
  643.                         if (!empty($prop)){
  644.                             $client $em->getRepository(Client::class)->findOneById($prop->getClientId());
  645.                             $clientContact $em->getRepository(ClientContact::class)->findOneById($prop->getContactId());
  646.                             $contacto null;
  647.                             if (!empty($clientContact->getName())){$contacto $contacto$clientContact->getName(). ' ';}
  648.                             if (!empty($clientContact->getLastName())){$contacto $contacto$clientContact->getLastName(). ' ';}
  649.                             if (!empty($clientContact->getEmail())){$contacto $contacto'('.$clientContact->getEmail().')'' ';}
  650.                             if (!empty($clientContact->getPhone())){$contacto $contacto' - '.$clientContact->getPhone(). ' ';}
  651.                             if (!empty($clientContact->getMobile())){$contacto $contacto' - '.$clientContact->getMobile();}
  652.                             $city $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  653.                             $texto $texto .'Petición: '.$budget->getCreatedAt()->format('d/m/Y'). ' -- ';
  654.                             if (!empty($client)){$texto $texto .'Cliente: '.$client->getName(). ' -- ';}
  655.                             if (!empty($prop->getPax())){$texto $texto .'Personas: '.$prop->getPax(). ' -- ';}
  656.                             $texto $texto .'Desde: '.$prop->getDateEventStarAt()->format('d/m/Y').' Hasta: '.$prop->getDateEventEndAt()->format('d/m/Y'). ' -- ';
  657.                             $texto $texto .'Horario: '.$supplierservices->getDateInAt()->format('H:i'). ' a '.$supplierservices->getDateOutAt()->format('H:i'). ' -- ';
  658.                             $texto $texto .'Ciudad: '.$city->getTitle(). ' -- ';
  659.                             $texto $texto .'Contacto: '$contacto;
  660.                             $budget->setTextTooltip($texto);
  661.                         }
  662.                     }
  663.                     // FIN: Llenamos el tooltip con la info del proposal
  664.                     $em->persist($budget);
  665.                     $em->flush();
  666.                     $logMail false;
  667.                     //INICIO: Creamos el expediente en AV si es necesario
  668.                     $fileAv $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
  669.                     if (empty($fileAv)){
  670.                         $fileAv = new AveFiles();
  671.                         $fileAv->setTitle($proposalTitle->getId().' - '$proposalTitle->getTitle());
  672.                         $fileAv->setClient('262');                                                  //In Out es el cliente
  673.                         $fileAv->setPriority(null);
  674.                         $fileAv->setSupplier(null);
  675.                         $fileAv->setStatus('');                                                     //El status no puede ir en nulo o no se listara el expediente
  676.                         $fileAv->setDaysBlock(null);
  677.                         $fileAv->setAdvancePayment(null);
  678.                         $fileAv->setIdProposal($proposalTitle->getId());
  679.                         $fileAv->setCateringName(null);
  680.                         $fileAv->setBoolCatering(null);
  681.                         $fileAv->setDateStart($proposalTitle->getDateEventStarAt());
  682.                         $fileAv->setDateEnd($proposalTitle->getDateEventEndAt());
  683.                         $fileAv->setPax($proposalTitle->getPax());
  684.                         $fileAv->setDeposit(null);
  685.                         $fileAv->setAccessKey(null);
  686.                         $fileAv->setDescription(null);
  687.                         $fileAv->setCreatedAt(new \DateTime("now"));
  688.                         $fileAv->setCreatedId($user_id);
  689.                         $fileAv->setUpdatedId($user_id);
  690.                         $fileAv->setUpdatedAt(new \DateTime("now"));
  691.                         $em->persist($fileAv);
  692.                         $em->flush();
  693.                         $logMail true;
  694.                     }
  695.                     //FIN: Creamos el expediente en AV si es necesario
  696.                     //INICIO: Notificamos por correo a Salvador y al agente
  697.                     if ($logMail){
  698.                         $mailAddressTo 'salvador@avexpress.tv';
  699. //                        $mailAddressTo = 'gustavo.ayala@develup.solutions';
  700.                         $agente $em->getRepository(User::class)->findOneById($user_id);
  701.                         $mailAddressFrom $agente->getEmail();
  702.                         $mailSubject 'Nuevo expediente solicitado por In Out';
  703.                         $mailBody 'Estimado proveedor,'.
  704.                             '<br><br> Para nuestro evento: '$proposalTitle->getId().' - '$proposalTitle->getTitle().
  705.                             '<br>Se ha creado automaticamente el expediente AV: '$fileAv->getId().' con el mismo nombre de nuestro evento'.
  706.                             '<br><br>Muchas gracias por su colaboración.<br><br>';
  707.                         //El correo solo se enviara si no se ha enviado ya una alerta previamente
  708.                         $this->sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  709.                         //Copia para el ayudante de AV  (Temporal por vacaciones de Salvador)
  710. //                        $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
  711. //                        $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv';            // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025  -  salvador@avexpress.tv
  712.                         $mailAddressTo 'salvador@avexpress.tv';
  713.                         $this->sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  714.                     }
  715.                     //FIN: Notificamos por correo a Salvador y al agente
  716.                     //INICIO: Enviamos Telegram
  717.                     //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
  718.                     $file $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
  719.                     if(!empty($file)){
  720.                         //Se envia el mensaje al creador del expediente
  721.                         $userTelegramId $file->getCreatedId();
  722.                     } else {
  723.                         // Solicitud sin expediente, se le notificara la jefe de departamento
  724.                         $userTelegramId 14// Id de Salvador
  725.                     }
  726.                     //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  727.                     //Buscamos el nombre del destino
  728.                     $nombreDestino $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  729.                     $nombreDestino $nombreDestino->getTitle();
  730.                     //Mensaje:
  731.                     //SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
  732.                     $this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
  733.                     //FIN: Enviamos Telegram
  734.                 }
  735.                 //FIN: Confirmamos un servicio de AvExpress
  736.             }
  737.         }
  738.         /* metemos creative *////////////////////////////////////////////////////////////////
  739.         $creatives $request->request->get('creative');
  740.         if(!empty($creatives)){
  741.             foreach($creatives as $creative){
  742.                 $supplierservices->setServiceId($creative);
  743.                 $supplierservices->setServiceCatId('4');
  744.                 $supplierservices->setServiceCatName('Creative');
  745.                 $sqldata $em->getRepository(SupplierCreative::class)->findOneById($creative);
  746.                 $supplierservices->setName($sqldata->getTitle());
  747.                 $supplierservices->setPrice('0');
  748.                 //$supplierservices->setCurrency('Euro');
  749.                 $supplierservices->setUnits('1');
  750.                 $supplierservices->setCommission('0');
  751.                 //$supplierservices->setOver('Accommodation');
  752.                 $supplierservices->setIva('21');
  753.                 $supplierservices->setPax('0');
  754.                 //$supplierservices->setHour('');//null
  755.                 //$supplierservices->setDateInAt('');
  756.                 //$supplierservices->setDateOutAt('');
  757.                 $supplierservices->setDirectPayment('0');
  758.                 $supplierservices->setStatus('Pending');
  759.                 $supplierservices->setStatusinternal($additional);
  760.                 $em->persist($supplierservices);
  761.                 $em->flush();
  762.                 $em->clear();
  763.                 //para pruebas
  764.                 //$data_prueba[] = array(
  765.                 //    'data' => $supplierservices
  766.                 //);
  767.             }
  768.             //para pruebas
  769.             //d($data_prueba);
  770.             //exit();
  771.         }
  772.         /* metemos gift *////////////////////////////////////////////////////////////////
  773.         $gifts $request->request->get('gift');
  774.         if(!empty($gifts)){
  775.             foreach($gifts as $gift){
  776.                 $supplierservices->setServiceId($gift);
  777.                 $supplierservices->setServiceCatId('7');
  778.                 $supplierservices->setServiceCatName('Gifts');
  779.                 $sqldata $em->getRepository(SupplierGifts::class)->findOneById($gift);
  780.                 $supplierservices->setName($sqldata->getName());
  781.                 $supplierservices->setPrice($sqldata->getPrice());
  782.                 //$supplierservices->setCurrency('Euro');
  783.                 $supplierservices->setUnits('1');
  784.                 $supplierservices->setCommission($sqldata->getCommission());
  785.                 //$supplierservices->setOver('Accommodation');
  786.                 $supplierservices->setIva($sqldata->getIva());
  787.                 $supplierservices->setPax('0');
  788.                 //$supplierservices->setHour('');//null
  789.                 //$supplierservices->setDateInAt('');
  790.                 //$supplierservices->setDateOutAt('');
  791.                 $supplierservices->setDirectPayment('0');
  792.                 $supplierservices->setStatus('Pending');
  793.                 $supplierservices->setStatusinternal($additional);
  794.                 $em->persist($supplierservices);
  795.                 $em->flush();
  796.                 $em->clear();
  797.                 //para pruebas
  798.                 //$data_prueba[] = array(
  799.                 //    'data' => $supplierservices
  800.                 //);
  801.             }
  802.             //para pruebas
  803.             //d($data_prueba);
  804.             //exit();
  805.         }
  806.         /* metemos entertainment *////////////////////////////////////////////////////////////////
  807.         $entertainments $request->request->get('entertainment');
  808.         if(!empty($entertainments)){
  809.             foreach($entertainments as $entertainment){
  810.                 $supplierservices->setServiceId($entertainment);
  811.                 $supplierservices->setServiceCatId('6');
  812.                 $supplierservices->setServiceCatName('Entertainment');
  813.                 $sqldata $em->getRepository(SupplierEntertainment::class)->findOneById($entertainment);
  814.                 $supplierservices->setName($sqldata->getName());
  815.                 $supplierservices->setPrice($sqldata->getPrice());
  816.                 //$supplierservices->setCurrency('Euro');
  817.                 $supplierservices->setUnits('1');
  818.                 $supplierservices->setCommission($sqldata->getCommission());
  819.                 //$supplierservices->setOver('Accommodation');
  820.                 $supplierservices->setIva($sqldata->getIva());
  821.                 $supplierservices->setPax('0');
  822.                 //$supplierservices->setHour('');//null
  823.                 //$supplierservices->setDateInAt('');
  824.                 //$supplierservices->setDateOutAt('');
  825.                 $supplierservices->setDirectPayment('0');
  826.                 $supplierservices->setStatus('Pending');
  827.                 $supplierservices->setStatusinternal($additional);
  828.                 $em->persist($supplierservices);
  829.                 $em->flush();
  830.                 $em->clear();
  831.                 //para pruebas
  832.                 //$data_prueba[] = array(
  833.                 //    'data' => $supplierservices
  834.                 //);
  835.             }
  836.             //para pruebas
  837.             //d($data_prueba);
  838.             //exit();
  839.         }
  840.         /* metemos guide *////////////////////////////////////////////////////////////////
  841.         $guides $request->request->get('guide');
  842.         if(!empty($guides)){
  843.             foreach($guides as $guide){
  844.                 $supplierservices->setServiceId($guide);
  845.                 $supplierservices->setServiceCatId('8');
  846.                 $supplierservices->setServiceCatName('Guide');
  847.                 $sqldata $em->getRepository(SupplierGuide::class)->findOneById($guide);
  848.                 $supplierservices->setName($sqldata->getName());
  849.                 $supplierservices->setPrice($sqldata->getPrice());
  850.                 //$supplierservices->setCurrency('Euro');
  851.                 $supplierservices->setUnits('1');
  852.                 $supplierservices->setCommission($sqldata->getCommission());
  853.                 //$supplierservices->setOver('Accommodation');
  854.                 $supplierservices->setIva($sqldata->getIva());
  855.                 $supplierservices->setPax('0');
  856.                 //$supplierservices->setHour('');//null
  857.                 //$supplierservices->setDateInAt('');
  858.                 //$supplierservices->setDateOutAt('');
  859.                 $supplierservices->setDirectPayment('0');
  860.                 $supplierservices->setStatus('Pending');
  861.                 $supplierservices->setStatusinternal($additional);
  862.                 $em->persist($supplierservices);
  863.                 $em->flush();
  864.                 $em->clear();
  865.                 //para pruebas
  866.                 //$data_prueba[] = array(
  867.                 //    'data' => $supplierservices
  868.                 //);
  869.             }
  870.             //para pruebas
  871.             //d($data_prueba);
  872.             //exit();
  873.         }
  874.         /* metemos others *////////////////////////////////////////////////////////////////
  875.         $otherss $request->request->get('others');
  876.         if(!empty($otherss)){
  877.             foreach($otherss as $others){
  878.                 $supplierservices->setServiceId($others);
  879.                 $supplierservices->setServiceCatId('12');
  880.                 $supplierservices->setServiceCatName('Others');
  881.                 $sqldata $em->getRepository(SupplierOthers::class)->findOneById($others);
  882.                 $supplierservices->setName($sqldata->getName());
  883.                 $supplierservices->setPrice($sqldata->getPrice());
  884.                 //$supplierservices->setCurrency('Euro');
  885.                 $supplierservices->setUnits('1');
  886.                 $supplierservices->setCommission($sqldata->getCommission());
  887.                 //$supplierservices->setOver('Accommodation');
  888.                 $supplierservices->setIva($sqldata->getIva());
  889.                 $supplierservices->setPax('0');
  890.                 //$supplierservices->setHour('');//null
  891.                 //$supplierservices->setDateInAt('');
  892.                 //$supplierservices->setDateOutAt('');
  893.                 $supplierservices->setDirectPayment('0');
  894.                 $supplierservices->setStatus('Pending');
  895.                 $supplierservices->setStatusinternal($additional);
  896.                 $em->persist($supplierservices);
  897.                 $em->flush();
  898.                 $em->clear();
  899.                 //para pruebas
  900.                 //$data_prueba[] = array(
  901.                 //    'data' => $supplierservices
  902.                 //);
  903.             }
  904.             //para pruebas
  905.             //d($data_prueba);
  906.             //exit();
  907.         }
  908.         /* metemos technology *////////////////////////////////////////////////////////////////
  909.         $technologys $request->request->get('technology');
  910.         $technology_supplier $request->request->get('technology_supplier');
  911.         if(!empty($technologys)){
  912.             foreach($technologys as $technology){
  913.                 $supplierservices->setServiceId($technology);
  914.                 $supplierservices->setServiceCatId('14');
  915.                 $supplierservices->setServiceCatName('Technology');
  916.                 if (empty($technology_supplier)){
  917.                     $sqldata $em->getRepository(SupplierTechnology::class)->findOneById($technology);
  918.                     $supplierservices->setName($sqldata->getTitle());
  919.                     $supplierservices->setPrice($sqldata->getPrice());
  920.                     //$supplierservices->setCurrency('Euro');
  921.                     $supplierservices->setUnits('1');
  922.                     $supplierservices->setCommission($sqldata->getCommission());
  923.                     //$supplierservices->setOver('Accommodation');
  924.                     $supplierservices->setIva($sqldata->getIva());
  925.                     $supplierservices->setPax('0');
  926.                     //$supplierservices->setHour('');//null
  927.                     //$supplierservices->setDateInAt('');
  928.                     //$supplierservices->setDateOutAt('');
  929.                     $supplierservices->setDirectPayment('0');
  930.                     $supplierservices->setStatus('Pending');
  931.                     $supplierservices->setStatusinternal($additional);
  932.                 } else {
  933.                     $sqldata $em->getRepository(MdvProduct::class)->findOneById($technology);
  934.                     $supplierservices->setName($sqldata->getName());
  935.                     $supplierservices->setPrice($sqldata->getPrice());
  936.                     $supplierservices->setUnits('1');
  937.                     $supplierservices->setCommission(0);
  938.                     $supplierservices->setIva(21);
  939.                     $supplierservices->setPax('0');
  940.                     $supplierservices->setDirectPayment('0');
  941.                     $supplierservices->setStatus('Pending');
  942.                     $supplierservices->setStatusinternal($additional);
  943.                 }
  944.                 $em->persist($supplierservices);
  945.                 $em->flush();
  946.                 $em->clear();
  947.                 //INICIO: Confirmamos un servicio de Develup o AV
  948. //                if ($status == "Confirmed"){
  949.                 if (true){
  950. //                    if (($services_supplier_proposal->getSupplierId()==2) or ($services_supplier_proposal->getSupplierId()==80)){
  951.                     if (true){
  952.                         // Nombre del agente
  953.                         $agenteFullName $em->getRepository(User::class)->findOneById($user_id);
  954.                         $agenteFullName $agenteFullName->getName() . ' ' $agenteFullName->getLastName();
  955.                         $proposalTitle $em->getRepository(Proposal::class)->findOneById($supplierservices->getProposalId());
  956.                         if ($supplierservices->getSupplierId()==2){
  957.                             $originalServiceName $em->getRepository(MdvProduct::class)->findOneById($supplierservices->getServiceId());
  958.                             $budget = new MdvBudgetPending();
  959.                             $budget->setActivityId($supplierservices->getActivityId());
  960.                             $budget->setAssistantId($supplierservices->getAssistantId());
  961.                             $budget->setBreakdown($supplierservices->getBreakdown());
  962.                             $budget->setCommission($supplierservices->getCommission());
  963.                             $budget->setControlId($supplierservices->getControlId());
  964.                             $budget->setOriginId($supplierservices->getId());
  965.                             $budget->setCurrency($supplierservices->getCurrency());
  966.                             $budget->setDateBlockLimit($supplierservices->getDateBlockLimit());
  967.                             $budget->setDateInAt($supplierservices->getDateInAt());
  968.                             $budget->setDateOutAt($supplierservices->getDateOutAt());
  969.                             $budget->setDestinationId($supplierservices->getDestinationId());
  970.                             $budget->setDirectPayment($supplierservices->getDirectPayment());
  971.                             $budget->setHour($supplierservices->getHour());
  972.                             $budget->setIdeaId($supplierservices->getIdeaId());
  973.                             $budget->setIsFather($supplierservices->getIsFather());
  974.                             $budget->setIva($supplierservices->getIva());
  975.                             if(!($originalServiceName->getName() == $supplierservices->getName())){
  976.                                 $budget->setName($originalServiceName->getName().' (:'$supplierservices->getName().':)');
  977.                             } else {
  978.                                 $budget->setName($originalServiceName->getName());
  979.                             }
  980.                             $budget->setOpCommission($supplierservices->getOpCommission());
  981.                             $budget->setOpIva($supplierservices->getOpIva());
  982.                             $budget->setOpOver($supplierservices->getOpOver());
  983.                             $budget->setOriginalIva($supplierservices->getOriginalIva());
  984.                             $budget->setOriginalopIva($supplierservices->getOriginalopIva());
  985.                             $budget->setOriginalPrice($supplierservices->getOriginalPrice());
  986.                             $budget->setOver($supplierservices->getOver());
  987.                             $budget->setPax($supplierservices->getPax());
  988.                             $budget->setPreCommission($supplierservices->getPreCommission());
  989.                             $budget->setPreIva($supplierservices->getPreIva());
  990.                             $budget->setPrice($supplierservices->getPrice());
  991.                             $budget->setProposalId($supplierservices->getProposalId());
  992.                             $budget->setRank($supplierservices->getRank());
  993.                             $budget->setServiceCatId($supplierservices->getServiceCatId());
  994.                             $budget->setServiceCatName($supplierservices->getServiceCatName());
  995.                             $budget->setServiceId($supplierservices->getServiceId());
  996.                             $budget->setServiceIdFather($supplierservices->getServiceIdFather());
  997.                             $budget->setStatus($supplierservices->getStatus());
  998.                             $budget->setStatusinternal($supplierservices->getStatusinternal());
  999.                             $budget->setStatusRec($supplierservices->getStatusRec());
  1000.                             $budget->setSupplierId($supplierservices->getSupplierId());
  1001.                             $budget->setUnits($supplierservices->getUnits());
  1002.                             $budget->setUserConfirmedFullName($agenteFullName);
  1003.                             $budget->setUserConfirmedId($user_id);
  1004.                             $budget->setProposalTitle($proposalTitle->getTitle());
  1005.                             $budget->setCreatedAt(new \DateTime("now"));
  1006.                             $budget->setCreatedId($user_id);
  1007.                             $budget->setUpdatedId($user_id);
  1008.                             $budget->setUpdatedAt(new \DateTime("now"));
  1009.                             // INIICO: Llenamos el tooltip con la info del proposal
  1010.                             $texto null;
  1011.                             if (!empty($budget->getProposalId())){
  1012.                                 $prop $em->getRepository(Proposal::class)->findOneById($budget->getProposalId());
  1013.                                 if (!empty($prop)){
  1014.                                     $client $em->getRepository(Client::class)->findOneById($prop->getClientId());
  1015.                                     $clientContact $em->getRepository(ClientContact::class)->findOneById($prop->getContactId());
  1016.                                     $contacto null;
  1017.                                     if (!empty($clientContact->getName())){$contacto $contacto$clientContact->getName(). ' ';}
  1018.                                     if (!empty($clientContact->getLastName())){$contacto $contacto$clientContact->getLastName(). ' ';}
  1019.                                     if (!empty($clientContact->getEmail())){$contacto $contacto'('.$clientContact->getEmail().')'' ';}
  1020.                                     if (!empty($clientContact->getPhone())){$contacto $contacto' - '.$clientContact->getPhone(). ' ';}
  1021.                                     if (!empty($clientContact->getMobile())){$contacto $contacto' - '.$clientContact->getMobile();}
  1022.                                     $city $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  1023.                                     $texto $texto .'Petición: '.$budget->getCreatedAt()->format('d/m/Y'). ' -- ';
  1024.                                     if (!empty($client)){$texto $texto .'Cliente: '.$client->getName(). ' -- ';}
  1025.                                     if (!empty($prop->getPax())){$texto $texto .'Personas: '.$prop->getPax(). ' -- ';}
  1026.                                     $texto $texto .'Desde: '.$prop->getDateEventStarAt()->format('d/m/Y').' Hasta: '.$prop->getDateEventEndAt()->format('d/m/Y'). ' -- ';
  1027.                                     $texto $texto .'Horario: '.$supplierservices->getDateInAt()->format('H:i'). ' a '.$supplierservices->getDateOutAt()->format('H:i'). ' -- ';
  1028.                                     $texto $texto .'Ciudad: '.$city->getTitle(). ' -- ';
  1029.                                     $texto $texto .'Contacto: '$contacto;
  1030.                                     $budget->setTextTooltip($texto);
  1031.                                 }
  1032.                             }
  1033.                             // FIN: Llenamos el tooltip con la info del proposal
  1034.                             $em->persist($budget);
  1035.                             $em->flush();
  1036.                             //INICIO: Enviamos Telegram
  1037.                             //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1038.                             $file $em->getRepository(MdvFiles::class)->findOneByIdProposal($prop->getId());
  1039.                             if(!empty($file)){
  1040.                                 //Se envia el mensaje al creador del expediente
  1041.                                 $userTelegramId $file->getCreatedId();
  1042.                             } else {
  1043.                                 // Solicitud sin expediente, se le notificara la jefe de departamento
  1044.                                 $userTelegramId 5// Id de Jorge
  1045.                             }
  1046.                             //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1047.                             //Buscamos el nombre del destino
  1048.                             $nombreDestino $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  1049.                             $nombreDestino $nombreDestino->getTitle();
  1050.                             //Mensaje:
  1051.                             //SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
  1052.                             $this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
  1053. //                            d($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());exit();
  1054.                             //FIN: Enviamos Telegram
  1055.                         }
  1056.                     }
  1057.                 }
  1058.                 //FIN: Confirmamos un servicio de AV o Develup
  1059.                 //para pruebas
  1060.                 //$data_prueba[] = array(
  1061.                 //    'data' => $supplierservices
  1062.                 //);
  1063.             }
  1064.             //para pruebas
  1065.             //d($data_prueba);
  1066.             //exit();
  1067.         }
  1068.         /* metemos Assistant *////////////////////////////////////////////////////////////////
  1069.         $assistants $request->request->get('assistant');
  1070.         if(!empty($assistants)){
  1071.             foreach($assistants as $assistant){
  1072.                 $supplierservices->setServiceId($assistant);
  1073.                 $supplierservices->setServiceCatId('15');
  1074.                 $supplierservices->setServiceCatName('Assistant');
  1075.                 $sqldata $em->getRepository(SupplierServicesAssistant::class)->findOneById($assistant);
  1076.                 $supplierservices->setName($sqldata->getName());
  1077.                 $supplierservices->setPrice($sqldata->getPrice());
  1078.                 //$supplierservices->setCurrency('Euro');
  1079.                 $supplierservices->setUnits('1');
  1080.                 $supplierservices->setCommission($sqldata->getCommission());
  1081.                 //$supplierservices->setOver('Accommodation');
  1082.                 $supplierservices->setIva($sqldata->getIva());
  1083.                 $supplierservices->setPax('0');
  1084.                 //$supplierservices->setHour('');//null
  1085.                 //$supplierservices->setDateInAt('');
  1086.                 //$supplierservices->setDateOutAt('');
  1087.                 $supplierservices->setDirectPayment('0');
  1088.                 $supplierservices->setStatus('Pending');
  1089.                 $supplierservices->setStatusinternal($additional);
  1090.                 $em->persist($supplierservices);
  1091.                 $em->flush();
  1092.                 $em->clear();
  1093.                 //para pruebas
  1094.                 //$data_prueba[] = array(
  1095.                 //    'data' => $supplierservices
  1096.                 //);
  1097.             }
  1098.             //para pruebas
  1099.             //d($data_prueba);
  1100.             //exit();
  1101.         }
  1102.         /* metemos Services en Blanco *////////////////////////////////////////////////////////////////
  1103.         $serviceswhite $request->request->get('serviceswhite');
  1104.         if(!empty($serviceswhite['id'])){
  1105. //        d($serviceswhite['id']);
  1106. //        exit();
  1107.             $supplierservices->setServiceId('0');
  1108.             switch ($serviceswhite['id']) {
  1109.                 case 1:
  1110.                     $supplierservices->setServiceCatId('1');
  1111.                     $supplierservices->setServiceCatName('Accommodation');
  1112.                     break;
  1113.                 case 2:
  1114.                     $supplierservices->setServiceCatId('2');
  1115.                     $supplierservices->setServiceCatName('Activities');
  1116.                     break;
  1117.                 case 3:
  1118.                     $supplierservices->setServiceCatId('3');
  1119.                     $supplierservices->setServiceCatName('Av');
  1120.                     break;
  1121.                 case 4:
  1122.                     $supplierservices->setServiceCatId('4');
  1123.                     $supplierservices->setServiceCatName('Creative');
  1124.                     break;
  1125.                 case 5:
  1126.                     $supplierservices->setServiceCatId('5');
  1127.                     $supplierservices->setServiceCatName('Cruise');
  1128.                     break;
  1129.                 case 6:
  1130.                     $supplierservices->setServiceCatId('6');
  1131.                     $supplierservices->setServiceCatName('Entertainment');
  1132.                     break;
  1133.                 case 7:
  1134.                     $supplierservices->setServiceCatId('7');
  1135.                     $supplierservices->setServiceCatName('Gifts');
  1136.                     break;
  1137.                 case 8:
  1138.                     $supplierservices->setServiceCatId('8');
  1139.                     $supplierservices->setServiceCatName('Guide');
  1140.                     break;
  1141.                 case 9:
  1142.                     $supplierservices->setServiceCatId('9');
  1143.                     $supplierservices->setServiceCatName('Itineraries');
  1144.                     break;
  1145.                 case 10:
  1146.                     $supplierservices->setServiceCatId('10');
  1147.                     $supplierservices->setServiceCatName('Lounge');
  1148.                     break;
  1149.                 case 11:
  1150.                     $supplierservices->setServiceCatId('11');
  1151.                     $supplierservices->setServiceCatName('Menu');
  1152.                     break;
  1153.                 case 12:
  1154.                     $supplierservices->setServiceCatId('12');
  1155.                     $supplierservices->setServiceCatName('Others');
  1156.                     break;
  1157.                 case 13:
  1158.                     $supplierservices->setServiceCatId('13');
  1159.                     $supplierservices->setServiceCatName('Transport');
  1160.                     break;
  1161.                 case 14:
  1162.                     $supplierservices->setServiceCatId('14');
  1163.                     $supplierservices->setServiceCatName('Technology');
  1164.                     break;
  1165.                 case 15:
  1166.                     $supplierservices->setServiceCatId('15');
  1167.                     $supplierservices->setServiceCatName('Assistant');
  1168.                     break;
  1169.                 case 16:
  1170.                     $supplierservices->setServiceCatId('16');
  1171.                     $supplierservices->setServiceCatName('DDR');
  1172.                     break;
  1173.             }
  1174.             $supplierservices->setName(' ');
  1175.             $supplierservices->setPrice('0.00');
  1176.             $supplierservices->setCurrency('Euro');
  1177.             $supplierservices->setUnits('1');
  1178.             $supplierservices->setCommission('0');
  1179.             //$supplierservices->setOver('Accommodation');
  1180.             $supplierservices->setIva('0');
  1181.             $supplierservices->setPax('0');
  1182.             //$supplierservices->setHour('');//null
  1183.             //$supplierservices->setDateInAt('');
  1184.             //$supplierservices->setDateOutAt('');
  1185.             $supplierservices->setDirectPayment('0');
  1186.             $supplierservices->setStatus('Pending');
  1187.             $supplierservices->setStatusinternal($additional);
  1188.             $em->persist($supplierservices);
  1189.             $em->flush();
  1190.             $em->clear();
  1191.         }
  1192.         $brief $request->request->get('briefing');
  1193.         if (!empty($brief) and empty($technologys) and ($technology_supplier == 'Develup')){
  1194.             // Tenemos un briefing para Develup sin servicios agregados
  1195.             // Nombre del agente
  1196.             $agenteFullName $em->getRepository(User::class)->findOneById($user_id);
  1197.             $agenteFullName $agenteFullName->getName() . ' ' $agenteFullName->getLastName();
  1198.             $budget = new MdvBudgetPending();
  1199.             $budget->setActivityId(null);
  1200.             $budget->setAssistantId(null);
  1201.             $budget->setBreakdown(null);
  1202.             $budget->setCommission(null);
  1203.             $budget->setControlId($supplierCrtl->getId());
  1204.             $budget->setOriginId(null);
  1205.             $budget->setCurrency(null);
  1206.             $budget->setDateBlockLimit(null);
  1207.             $budget->setDateInAt(null);
  1208.             $budget->setDateOutAt(null);
  1209.             $budget->setDestinationId($supplierCrtl->getDestinoId());
  1210.             $budget->setDirectPayment(null);
  1211.             $budget->setHour(null);
  1212.             $budget->setIdeaId(null);
  1213.             $budget->setIsFather(null);
  1214.             $budget->setIva(null);
  1215.             $budget->setName(null);
  1216.             $budget->setOpCommission(null);
  1217.             $budget->setOpIva(null);
  1218.             $budget->setOpOver(null);
  1219.             $budget->setOriginalIva(null);
  1220.             $budget->setOriginalopIva(null);
  1221.             $budget->setOriginalPrice(null);
  1222.             $budget->setOver(null);
  1223.             $budget->setPax(null);
  1224.             $budget->setPreCommission(null);
  1225.             $budget->setPreIva(null);
  1226.             $budget->setPrice(null);
  1227.             $budget->setProposalId($supplierCrtl->getProposalId());
  1228.             $budget->setRank(null);
  1229.             $budget->setServiceCatId(null);
  1230.             $budget->setServiceCatName(null);
  1231.             $budget->setServiceId(null);
  1232.             $budget->setServiceIdFather(null);
  1233.             $budget->setStatus(null);
  1234.             $budget->setStatusinternal(null);
  1235.             $budget->setStatusRec(null);
  1236.             $budget->setSupplierId($supplierCrtl->getSupplierId());
  1237.             $budget->setUnits(null);
  1238.             $budget->setTextTooltip(null);
  1239.             $budget->setUserConfirmedFullName($agenteFullName);
  1240.             $budget->setUserConfirmedId($user_id);
  1241.             $budget->setProposalTitle($proposal_data->getTitle());
  1242.             $budget->setBriefing($brief);
  1243.             $budget->setCreatedAt(new \DateTime("now"));
  1244.             $budget->setCreatedId($user_id);
  1245.             $budget->setUpdatedId($user_id);
  1246.             $budget->setUpdatedAt(new \DateTime("now"));
  1247.             $em->persist($budget);
  1248.             $em->flush();
  1249.             //INICIO: Creamos el briefing
  1250.             //Busacmos si ya hay un expediente asociado al proposal
  1251.             $fileProp $em->getRepository(MdvFiles::class)->findOneByIdProposal($supplierCrtl->getProposalId());
  1252.             if (!empty($fileProp)){
  1253.                 $fileProp $fileProp->getId();
  1254.             }
  1255.             $newBriefing = new MdvBriefings();
  1256.             $newBriefing->setFileId($fileProp);
  1257.             $newBriefing->setUserConfirmedId($user_id);
  1258.             $newBriefing->setUserConfirmedFullName($agenteFullName);
  1259.             $newBriefing->setBriefing($brief);
  1260.             $newBriefing->setBudgetPendingId($budget->getId());
  1261.             $newBriefing->setCreatedAt(new \DateTime("now"));
  1262.             $newBriefing->setProposalId($supplierCrtl->getProposalId());
  1263.             $em->persist($newBriefing);
  1264.             $em->flush();
  1265.             //FIN: Creamos el briefing
  1266.             //INICIO: Enviamos Telegram
  1267.             //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1268.             $file $em->getRepository(MdvFiles::class)->findOneByIdProposal($proposal_data->getId());
  1269.             if(!empty($file)){
  1270.                 //Se envia el mensaje al creador del expediente
  1271.                 $userTelegramId $file->getCreatedId();
  1272.             } else {
  1273.                 // Solicitud sin expediente, se le notificara la jefe de departamento
  1274.                 $userTelegramId 5// Id de Jorge
  1275.             }
  1276.             //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1277.             //Buscamos el nombre del destino
  1278.             $nombreDestino $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  1279.             $nombreDestino $nombreDestino->getTitle();
  1280.             //Mensaje:
  1281.             //SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
  1282.             $this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
  1283. //            d($userTelegramId,'SOLICITUD DE PRESUPUESTO CON BRIEFING __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());exit();
  1284.             //FIN: Enviamos Telegram
  1285.         }
  1286.         if (!empty($brief) and empty($avs) and ($av_supplier == 'AvExpress')){
  1287.             // Tenemos un briefing para AvExpress sin servicios agregados
  1288.             // Nombre del agente
  1289.             $agenteFullName $em->getRepository(User::class)->findOneById($user_id);
  1290.             $agenteFullName $agenteFullName->getName() . ' ' $agenteFullName->getLastName();
  1291.             $budget = new AveBudgetPending();
  1292.             $budget->setActivityId(null);
  1293.             $budget->setAssistantId(null);
  1294.             $budget->setBreakdown(null);
  1295.             $budget->setCommission(null);
  1296.             $budget->setControlId($supplierCrtl->getId());
  1297.             $budget->setOriginId(null);
  1298.             $budget->setCurrency(null);
  1299.             $budget->setDateBlockLimit(null);
  1300.             $budget->setDateInAt(null);
  1301.             $budget->setDateOutAt(null);
  1302.             $budget->setDestinationId($supplierCrtl->getDestinoId());
  1303.             $budget->setDirectPayment(null);
  1304.             $budget->setHour(null);
  1305.             $budget->setIdeaId(null);
  1306.             $budget->setIsFather(null);
  1307.             $budget->setIva(null);
  1308.             $budget->setName(null);
  1309.             $budget->setOpCommission(null);
  1310.             $budget->setOpIva(null);
  1311.             $budget->setOpOver(null);
  1312.             $budget->setOriginalIva(null);
  1313.             $budget->setOriginalopIva(null);
  1314.             $budget->setOriginalPrice(null);
  1315.             $budget->setOver(null);
  1316.             $budget->setPax(null);
  1317.             $budget->setPreCommission(null);
  1318.             $budget->setPreIva(null);
  1319.             $budget->setPrice(null);
  1320.             $budget->setProposalId($supplierCrtl->getProposalId());
  1321.             $budget->setRank(null);
  1322.             $budget->setServiceCatId(null);
  1323.             $budget->setServiceCatName(null);
  1324.             $budget->setServiceId(null);
  1325.             $budget->setServiceIdFather(null);
  1326.             $budget->setStatus(null);
  1327.             $budget->setStatusinternal(null);
  1328.             $budget->setStatusRec(null);
  1329.             $budget->setSupplierId($supplierCrtl->getSupplierId());
  1330.             $budget->setUnits(null);
  1331.             $budget->setTextTooltip(null);
  1332.             $budget->setUserConfirmedFullName($agenteFullName);
  1333.             $budget->setUserConfirmedId($user_id);
  1334.             $budget->setProposalTitle($proposal_data->getTitle());
  1335.             $budget->setBriefing($brief);
  1336.             $budget->setCreatedAt(new \DateTime("now"));
  1337.             $budget->setCreatedId($user_id);
  1338.             $budget->setUpdatedId($user_id);
  1339.             $budget->setUpdatedAt(new \DateTime("now"));
  1340.             $em->persist($budget);
  1341.             $em->flush();
  1342.             $logMail false;
  1343.             //INICIO: Creamos el expediente en AV si es necesario
  1344.             $fileAv $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal_data->getId());
  1345.             if (empty($fileAv)){
  1346.                 $fileAv = new AveFiles();
  1347.                 $fileAv->setTitle($proposal_data->getId().' - '$proposal_data->getTitle());
  1348.                 $fileAv->setClient('262');                                                  //In Out es el cliente
  1349.                 $fileAv->setPriority(null);
  1350.                 $fileAv->setSupplier(null);
  1351.                 $fileAv->setStatus('');                                                     //El status no puede ir en nulo o no se listara el expediente
  1352.                 $fileAv->setDaysBlock(null);
  1353.                 $fileAv->setAdvancePayment(null);
  1354.                 $fileAv->setIdProposal($proposal_data->getId());
  1355.                 $fileAv->setCateringName(null);
  1356.                 $fileAv->setBoolCatering(null);
  1357.                 $fileAv->setDateStart($proposal_data->getDateEventStarAt());
  1358.                 $fileAv->setDateEnd($proposal_data->getDateEventEndAt());
  1359.                 $fileAv->setPax($proposal_data->getPax());
  1360.                 $fileAv->setDeposit(null);
  1361.                 $fileAv->setAccessKey(null);
  1362.                 $fileAv->setDescription(null);
  1363.                 $fileAv->setCreatedAt(new \DateTime("now"));
  1364.                 $fileAv->setCreatedId($user_id);
  1365.                 $fileAv->setUpdatedId($user_id);
  1366.                 $fileAv->setUpdatedAt(new \DateTime("now"));
  1367.                 $em->persist($fileAv);
  1368.                 $em->flush();
  1369.                 $logMail true;
  1370.             }
  1371.             //FIN: Creamos el expediente en AV si es necesario
  1372.             //INICIO: Notificamos por correo a Salvador y al agente
  1373.             if ($logMail){
  1374.                         $mailAddressTo 'salvador@avexpress.tv';
  1375. //                $mailAddressTo = 'gustavo.ayala@develup.solutions';
  1376.                 $agente $em->getRepository(User::class)->findOneById($user_id);
  1377.                 $mailAddressFrom $agente->getEmail();
  1378.                 $mailSubject 'Nuevo expediente solicitado por In Out';
  1379.                 $mailBody 'Estimado proveedor,'.
  1380.                     '<br><br> Para nuestro evento: '$proposal_data->getId().' - '$proposal_data->getTitle().
  1381.                     '<br>Se ha creado automaticamente el expediente AV: '$fileAv->getId().' con el mismo nombre de nuestro evento'.
  1382.                     '<br><br>Muchas gracias por su colaboración.<br><br>';
  1383.                 //El correo solo se enviara si no se ha enviado ya una alerta previamente
  1384.                 $this->sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  1385.                 //Copia para el ayudante de AV  (Temporal por vacaciones de Salvador)
  1386. //                $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
  1387. //                $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv';            // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025  -  salvador@avexpress.tv
  1388.                 $mailAddressTo 'salvador@avexpress.tv';
  1389.                 $this->sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  1390.             }
  1391.             //FIN: Notificamos por correo a Salvador y al agente
  1392.             //INICIO: Creamos el briefing
  1393.             //Busacmos si ya hay un expediente asociado al proposal
  1394.             $fileProp $em->getRepository(AveFiles::class)->findOneByIdProposal($supplierCrtl->getProposalId());
  1395.             if (!empty($fileProp)){
  1396.                 $fileProp $fileProp->getId();
  1397.             }
  1398.             $newBriefing = new AveBriefings();
  1399.             $newBriefing->setFileId($fileProp);
  1400.             $newBriefing->setUserConfirmedId($user_id);
  1401.             $newBriefing->setUserConfirmedFullName($agenteFullName);
  1402.             $newBriefing->setBriefing($brief);
  1403.             $newBriefing->setBudgetPendingId($budget->getId());
  1404.             $newBriefing->setCreatedAt(new \DateTime("now"));
  1405.             $newBriefing->setProposalId($supplierCrtl->getProposalId());
  1406.             $em->persist($newBriefing);
  1407.             $em->flush();
  1408.             //FIN: Creamos el briefing
  1409.             //INICIO: Enviamos Telegram
  1410.             //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1411.             $file $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal_data->getId());
  1412.             if(!empty($file)){
  1413.                 //Se envia el mensaje al creador del expediente
  1414.                 $userTelegramId $file->getCreatedId();
  1415.             } else {
  1416.                 // Solicitud sin expediente, se le notificara la jefe de departamento
  1417.                 $userTelegramId 14// Id de Salvador
  1418.             }
  1419.             //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1420.             //Buscamos el nombre del destino
  1421.             $nombreDestino $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
  1422.             $nombreDestino $nombreDestino->getTitle();
  1423.             //Mensaje:
  1424.             $this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
  1425.             //FIN: Enviamos Telegram
  1426.         }
  1427.         //INICIO: Notificamos por correo a Salvador y al agente del mensaje contenido en el briefing
  1428.         $fileAv $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal_data->getId());
  1429.         if (!empty($fileAv) and !empty($brief)){
  1430.             $mailAddressTo 'salvador@avexpress.tv';
  1431.             $agente $em->getRepository(User::class)->findOneById($user_id);
  1432.             $mailAddressFrom $agente->getEmail();
  1433.             $mailSubject 'Briefing enviado desde In Out: ' $fileAv->getId().' - '.$fileAv->getTitle();
  1434.             $mailBody 'Estimado proveedor,'.
  1435.                 '<br><br> Para nuestro evento: '$proposal_data->getId().' - '$proposal_data->getTitle().
  1436.                 '<br>Relacionado con el expediente AV: '$fileAv->getId().' - '.$fileAv->getTitle().
  1437.                 '<br><br>Le notificamos:<br><br>'.
  1438.                 $request->request->get('briefing').
  1439.                 '<br><br>Muchas gracias por su colaboración.<br><br>';
  1440.             //El correo solo se enviara si no se ha enviado ya una alerta previamente
  1441.             $this->sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  1442.             //Copia para el ayudante de AV  (Temporal por vacaciones de Salvador)
  1443. //            $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
  1444. //            $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv';
  1445. //            $this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
  1446.         }
  1447.         //INICIO: Notificamos por correo a Salvador y al agente del mensaje contenido en el briefing
  1448.         $event 'The Services upload in Destination Proposal.';
  1449.         $successMessage $this->translator->trans($event);
  1450.         $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  1451.         $propControl $em->getRepository(ProposalControl::class)->findOneBy(
  1452.             array(
  1453.                 'proposalId' => $supplierCrtl->getProposalId(),
  1454.                 'destinationId' => $supplierCrtl->getControlDestinationId(),
  1455.             )
  1456.         );
  1457.         return $this->redirectToRoute('proposal_destination_supplier_view', array(
  1458.             'id' => (empty($propControl)) ? $supplierCrtl->getControlDestinationId() : $propControl->getId(),
  1459.             '_fragment' => 's'.$idcontrol
  1460.         ));
  1461.     }
  1462.     /**
  1463.      * @Route("proposal/destination/services/updated", name="proposal_destination_supplier_services_updates", methods={"POST"})
  1464.      */
  1465.     public function udatedAction(EntityManagerInterface $emRequest $request)
  1466.     {
  1467.         $data_services $request->request->get('services');
  1468.         $services_supplier_proposal $em->getRepository(ProposalSupplierServices::class)->findOneById($data_services['id']);
  1469.         $services_supplier $em->getRepository(ProposalSupplierControl::class)->findOneById($services_supplier_proposal->getControlId());
  1470.         $logTelegram false;
  1471.         if(!is_null($data_services)){
  1472.             if (array_key_exists('name_asistant',$data_services)){
  1473.                 // Se desea ver el nombre del servicio y no "Staff In Out Events: "
  1474.                 $prpSupSrv $em->getRepository(ProposalsSupplierServicesAssistantName::class)->findOneByPrpSupSrvId($data_services['id']);
  1475.                 if (empty($prpSupSrv)){
  1476.                     $prpSupSrv = new ProposalsSupplierServicesAssistantName();
  1477.                     $prpSupSrv->setPrpSupSrvId($data_services['id']);
  1478.                     $em->persist($prpSupSrv);
  1479.                     $em->flush();
  1480.                 } else {
  1481.                     // No se necesita hacer nada, no se ha modificado el booleano de ver el nombre con relacion a la tabla
  1482.                 }
  1483.             } else {
  1484.                 // Si no existe el indice puede deberse al tipo de servicio o al valor falso del booleano
  1485.                 if ($services_supplier_proposal->getServiceCatId() == 15){
  1486.                     // Se ha puesto en falso el boleano
  1487.                     // Se desea ver "Staff In Out Events: " y no el nombre
  1488.                     $prpSupSrv $em->getRepository(ProposalsSupplierServicesAssistantName::class)->findOneByPrpSupSrvId($data_services['id']);
  1489.                     if (empty($prpSupSrv)){
  1490.                         // No esta en la tabla, no es necesaria ninguna accion
  1491.                     } else {
  1492.                         // Se debe remover de la tabla el elemento
  1493.                         $em->remove($prpSupSrv);
  1494.                         $em->flush();
  1495.                     }
  1496.                 }
  1497.             }
  1498.             /* Obtengo usuario logueado */
  1499.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1500.             $user_id $user_logueado->getId();
  1501.             $services_supplier_proposal->getUpdatedId($user_id);
  1502.             if (!empty($data_services['dateBlockLimit']) and $services_supplier_proposal->getStatus() =='Pending'){
  1503.             $services_supplier_proposal->setStatus('Block');
  1504.             }
  1505.             if (!empty($data_services['dateBlockLimit'])){
  1506.                 $services_supplier_proposal->setDateBlockLimit(new \DateTime($data_services['dateBlockLimit'].' '.$data_services['timeBlockLimit'] ));
  1507.             }
  1508.             if (!is_null($services_supplier_proposal->getActivityId())){
  1509.                 if (empty($data_services['supplierId'])){
  1510. //                    $services_supplier_proposal->setSupplierId(null);
  1511.                 }else{
  1512.                     $services_supplier_proposal->setSupplierId($data_services['supplierId']);
  1513.                 }
  1514.             }
  1515.             if (!is_null($services_supplier_proposal->getIdeaId())){
  1516.                 if (empty($data_services['supplierId'])){
  1517. //                    $services_supplier_proposal->setSupplierId(null);
  1518.                 }else{
  1519.                     $services_supplier_proposal->setSupplierId($data_services['supplierId']);
  1520.                 }
  1521.             }
  1522.             if ($services_supplier->getSupplierId() == '0' and empty($data_services['assistantId'])){
  1523.                 if (empty($data_services['supplierId'])){
  1524.                     $services_supplier_proposal->setSupplierId('0');
  1525.                 }else{
  1526.                     $services_supplier_proposal->setSupplierId($data_services['supplierId']);
  1527.                 }
  1528.             }
  1529.             if (empty($data_services['assistantId'])){
  1530.                 $services_supplier_proposal->setAssistantId(null);
  1531.             }else{
  1532.                 $services_supplier_proposal->setAssistantId($data_services['assistantId']);
  1533.             }
  1534.             $services_supplier_proposal->setName($data_services['name']);
  1535.             $services_supplier_proposal->setPrice($data_services['price']);
  1536.             //$services_supplier_proposal->setPreCommission($data_services['preCommission']);
  1537.             $services_supplier_proposal->setPreCommission('0');
  1538.             //$services_supplier_proposal->setPreIva($data_services['preIva']);
  1539.             $services_supplier_proposal->setPreIva('0');
  1540.             $services_supplier_proposal->setCurrency($data_services['currency']);
  1541.             $services_supplier_proposal->setUnits($data_services['units']);
  1542.             $services_supplier_proposal->setOriginalopIva($data_services['originalopIva']);
  1543.             $services_supplier_proposal->setOriginalIva($data_services['originalIva']);
  1544.             $services_supplier_proposal->setOriginalPrice($data_services['originalPrice']);
  1545.             //Nuevos op -/+
  1546.             $services_supplier_proposal->setOpCommission($data_services['opCommission']);
  1547.             $services_supplier_proposal->setOpOver($data_services['opOver']);
  1548.             $services_supplier_proposal->setOpIva($data_services['opIva']);
  1549.             $services_supplier_proposal->setCommission($data_services['commission']);
  1550.             $services_supplier_proposal->setOver($data_services['over']);
  1551.             $services_supplier_proposal->setIva($data_services['iva']);
  1552.             $services_supplier_proposal->setPax($data_services['pax']);
  1553.             $services_supplier_proposal->setHour($data_services['hour']);
  1554.             $services_supplier_proposal->setDateInAt(new \DateTime($data_services['dateInAt'].' '.$data_services['hour']));
  1555.             $services_supplier_proposal->setDateOutAt(new \DateTime($data_services['dateOutAt'].' '.$data_services['end']));
  1556.             if(isset($data_services['directPayment'])){
  1557.                 $services_supplier_proposal->setDirectPayment($data_services['directPayment']);
  1558.             }else{
  1559.                 $services_supplier_proposal->setDirectPayment('0');
  1560.             }
  1561.             if(isset($data_services['breakdown'])){
  1562.                 $services_supplier_proposal->setBreakdown($data_services['breakdown']);
  1563.             }else{
  1564.                 $services_supplier_proposal->setBreakdown('0');
  1565.             }
  1566.             switch ($data_services['rank']) {
  1567.                 case 0$services_supplier_proposal->setRank('00'); break;
  1568.                 case 1$services_supplier_proposal->setRank('01'); break;
  1569.                 case 2$services_supplier_proposal->setRank('02'); break;
  1570.                 case 3$services_supplier_proposal->setRank('03'); break;
  1571.                 case 4$services_supplier_proposal->setRank('04'); break;
  1572.                 case 5$services_supplier_proposal->setRank('05'); break;
  1573.                 case 6$services_supplier_proposal->setRank('06'); break;
  1574.                 case 7$services_supplier_proposal->setRank('07'); break;
  1575.                 case 8$services_supplier_proposal->setRank('08'); break;
  1576.                 case 9$services_supplier_proposal->setRank('09'); break;
  1577.                 default: $services_supplier_proposal->setRank($data_services['rank']); break;
  1578.             }
  1579. //            $services_supplier_proposal->setRank($data_services['rank']);
  1580.             // INICIO: Verificamos si el servicio es una asistencia a duplicar en varios días
  1581.             if ($services_supplier_proposal->getServiceCatId() == 15) {
  1582.                 //Si el dia de entrada es menor al de salida se duplica la asistencia en varios dias
  1583.                 if (($services_supplier_proposal->getDateInAt())->format('Ymd') < ($services_supplier_proposal->getDateOutAt())->format('Ymd')){
  1584. //                    $ind = ($services_supplier_proposal->getDateOutAt())->format('Ymd') - ($services_supplier_proposal->getDateInAt())->format('Ymd') +1;
  1585.                     $ind = ($services_supplier_proposal->getDateInAt()->diff($services_supplier_proposal->getDateOutAt()))->days 1;
  1586.                     $horaInicio $data_services['hour'];
  1587.                     $horaFin $data_services['end'];
  1588.                     $diaInicio $data_services['dateInAt'];
  1589.                     $diaFin $data_services['dateOutAt'];
  1590.                     for($i =0$i $ind$i++){
  1591.                         // Si es el ultimo dia no se modifica la hora de fin
  1592.                         if ((substr($diaFin,0,4).substr($diaFin,5,2).substr($diaFin,8,2)) == ($services_supplier_proposal->getDateInAt())->format('Ymd')) {
  1593.                             $services_supplier_proposal->setDateInAt(new \DateTime($diaFin ' '$horaInicio));
  1594.                             $services_supplier_proposal->setDateOutAt(new \DateTime($diaFin ' '$horaFin));
  1595.                         } else {
  1596.                             // La hora de fin se establece a las 23:59
  1597.                             $xInicio = new \DateTime($diaInicio);
  1598.                             $xInicio->modify('+'.$i.' day');
  1599.                             $xInicio->setTime(2359);
  1600. //                            $elDia = substr($diaInicio,8,2) + $i;
  1601.                             $elDia $xInicio;
  1602. //                            $services_supplier_proposal->setDateOutAt(new \DateTime(substr($diaInicio,0,4).'-'.substr($diaInicio,5,2).'-'. $elDia . ' '. '23:59'));
  1603.                             $services_supplier_proposal->setDateOutAt($elDia);
  1604.                         }
  1605.                         $em->persist($services_supplier_proposal);
  1606.                         $em->flush();
  1607.                         //Actualizar confirmado
  1608.                         if ($services_supplier_proposal->getStatus() =='Confirmed'){
  1609.                             $costsClient $em->getRepository(ProposalSupplierServicesCostsClient::class)->findOneByServiceIdProposal($services_supplier_proposal->getId());
  1610.                             if (!empty($costsClient)){
  1611.                                 $costsClient->setAssistantId($services_supplier_proposal->getAssistantId());
  1612.                                 $costsClient->setName($services_supplier_proposal->getName());
  1613.                                 $costsClient->setPrice($services_supplier_proposal->getPrice());
  1614.                                 $costsClient->setCurrency($services_supplier_proposal->getCurrency());
  1615.                                 $costsClient->setUnits($services_supplier_proposal->getUnits());
  1616.                                 $costsClient->setOpCommission($services_supplier_proposal->getOpCommission());
  1617.                                 $costsClient->setCommission($services_supplier_proposal->getCommission());
  1618.                                 $costsClient->setOpOver($services_supplier_proposal->getOpOver());
  1619.                                 $costsClient->setOver($services_supplier_proposal->getOver());
  1620.                                 $costsClient->setOpIva($services_supplier_proposal->getOpIva());
  1621.                                 $costsClient->setIva($services_supplier_proposal->getIva());
  1622.                                 $costsClient->setPax($services_supplier_proposal->getPax());
  1623.                                 $costsClient->setHour($services_supplier_proposal->getHour());
  1624.                                 $costsClient->setDateInAt($services_supplier_proposal->getDateInAt());
  1625.                                 $costsClient->setDateOutAt($services_supplier_proposal->getDateOutAt());
  1626.                                 $costsClient->setRank($services_supplier_proposal->getRank());
  1627.                                 $costsClient->setCreatedId($user_id);
  1628.                                 $costsClient->setUpdatedId($user_id);
  1629.                                 $em->persist($costsClient);
  1630.                                 $em->flush();
  1631.                             }
  1632.                         }
  1633.                         $temp $services_supplier_proposal;
  1634.                         $services_supplier_proposal = new ProposalSupplierServices();
  1635.                         $services_supplier_proposal->setServiceIdFather($temp->getServiceIdFather());
  1636.                         $services_supplier_proposal->setControlId($temp->getControlId());
  1637.                         $services_supplier_proposal->setProposalId($temp->getProposalId());
  1638.                         $services_supplier_proposal->setDestinationId($temp->getDestinationId());
  1639.                         $services_supplier_proposal->setSupplierId($temp->getSupplierId());
  1640.                         $services_supplier_proposal->setIdeaId($temp->getIdeaId());
  1641.                         $services_supplier_proposal->setActivityId($temp->getActivityId());
  1642.                         $services_supplier_proposal->setServiceId($temp->getServiceId());
  1643.                         $services_supplier_proposal->setServiceCatId($temp->getServiceCatId());
  1644.                         $services_supplier_proposal->setServiceCatName($temp->getServiceCatName());
  1645.                         $services_supplier_proposal->setName($temp->getName());
  1646.                         $services_supplier_proposal->setPrice($temp->getPrice());
  1647.                         $services_supplier_proposal->setCurrency($temp->getCurrency());
  1648.                         $services_supplier_proposal->setUnits($temp->getUnits());
  1649.                         $services_supplier_proposal->setCommission($temp->getCommission());
  1650.                         $services_supplier_proposal->setOver($temp->getOver());
  1651.                         $services_supplier_proposal->setIva($temp->getIva());
  1652.                         $services_supplier_proposal->setPax($temp->getPax());
  1653.                         $services_supplier_proposal->setHour($temp->getHour());
  1654.                         $services_supplier_proposal->setDateInAt($temp->getDateInAt()->modify('+1 day'));
  1655.                         $services_supplier_proposal->setDateOutAt($temp->getDateOutAt());
  1656.                         $services_supplier_proposal->setDirectPayment($temp->getDirectPayment());
  1657.                         $services_supplier_proposal->setStatus($temp->getStatus());
  1658.                         $services_supplier_proposal->setCreatedAt($temp->getCreatedAt());
  1659.                         $services_supplier_proposal->setCreatedId($temp->getCreatedId());
  1660.                         $services_supplier_proposal->setUpdatedAt($temp->getUpdatedAt());
  1661.                         $services_supplier_proposal->setUpdatedId($temp->getUpdatedId());
  1662.                         $services_supplier_proposal->setStatusinternal($temp->getStatusinternal());
  1663.                         $services_supplier_proposal->setPreCommission($temp->getPreCommission());
  1664.                         $services_supplier_proposal->setPreIva($temp->getPreIva());
  1665.                         $services_supplier_proposal->setDateBlockLimit($temp->getDateBlockLimit());
  1666.                         $services_supplier_proposal->setOpCommission($temp->getOpCommission());
  1667.                         $services_supplier_proposal->setOpOver($temp->getOpOver());
  1668.                         $services_supplier_proposal->setOpIva($temp->getOpIva());
  1669.                         $services_supplier_proposal->setBreakdown($temp->getBreakdown());
  1670.                         $services_supplier_proposal->setIsFather($temp->getIsFather());
  1671.                         $services_supplier_proposal->setRank($temp->getRank());
  1672.                         $services_supplier_proposal->setOriginalopIva($temp->getOriginalopIva());
  1673.                         $services_supplier_proposal->setOriginalIva($temp->getOriginalIva());
  1674.                         $services_supplier_proposal->setOriginalPrice($temp->getOriginalPrice());
  1675.                         $services_supplier_proposal->setStatusRec($temp->getStatusRec());
  1676.                         $services_supplier_proposal->setAssistantId($temp->getAssistantId());
  1677.                     }
  1678.                     $event 'The Services updated in Destination Proposal.';
  1679.                     $successMessage $this->translator->trans($event);
  1680.                     $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  1681.                     return $this->redirectToRoute('proposal_destination_supplier_view',
  1682.                         array(
  1683.                             'id' => $services_supplier->getControlDestinationId(),
  1684.                             '_fragment' => $data_services['id']
  1685.                         )
  1686.                     );
  1687.                 }
  1688.                 //En caso contrario es una asistencia de 1 dia o con fechas erroneas y se procesa como siempre
  1689.             }
  1690.             // FIN: Verificamos si el servicio es una asistencia a duplicar en varios días
  1691.             $em->persist($services_supplier_proposal);
  1692.             $em->flush();
  1693.             //INICIO: Sincronizamos en Develup y Notificamos (si es necesario)
  1694.             if ($services_supplier->getSupplierId() == 2){
  1695.                 //Buscamos el servicio reflejo en develup
  1696.                 $productFile $em->getRepository(MdvProductFile::class)->findOneByOriginId($services_supplier_proposal->getId());
  1697.                 $budPen $em->getRepository(MdvBudgetPending::class)->findOneByOriginId($services_supplier_proposal->getId());
  1698.                 if (!empty($productFile) or !empty($budPen)){
  1699.                     $logTelegram true;
  1700.                 }
  1701.                 if ($logTelegram){
  1702.                     //INICIO: Enviamos Telegram
  1703.                     if (!empty($productFile)){
  1704. //                        $productFile->setServicePrice(round(($services_supplier_proposal->getPrice())/1.21,2));
  1705.                         $productFile->setServicePrice($services_supplier_proposal->getPrice());
  1706.                         $productFile->setUnits($services_supplier_proposal->getUnits());
  1707.                         $productFile->setSubTotalPrice($services_supplier_proposal->getUnits()*$services_supplier_proposal->getPrice());
  1708.                         $em->persist($productFile);
  1709.                         $em->flush();
  1710.                         //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1711.                         $file $em->getRepository(MdvFiles::class)->findOneById($productFile->getFileId());
  1712.                         if(!empty($file)){
  1713.                             //Se envia el mensaje al creador del expediente
  1714.                             $userTelegramId $file->getCreatedId();
  1715.                         } else {
  1716.                             // Solicitud sin expediente, se le notificara la jefe de departamento
  1717.                             $userTelegramId 5// Id de Jorge (Jefe de Departamento)
  1718.                         }
  1719.                         //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1720.                         //Buscamos el nombre del destino
  1721.                         $nombreDestino $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
  1722.                         $nombreDestino $nombreDestino->getTitle();
  1723.                         //Buscamos el nombre del agente
  1724.                         $userFullName $em->getRepository(User::class)->findOneById($user_id);
  1725.                         $userFullName $userFullName->getName().' '.$userFullName->getLastName();
  1726.                         //Mensaje:
  1727.                         $this->sendTelegram($userTelegramId,'MODIFICACION DE SERVICIO __ Develup File ID: '.$productFile->getFileId().'__ Nombre del producto: '.$productFile->getProductName().' __ Proposal ID: '.$file->getIdProposal().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$userFullName);
  1728.                     } else {
  1729.                         // Se modifico un budPending
  1730.                         if (!empty($budPen)){
  1731. //                            $budPen->setPrice(round(($services_supplier_proposal->getPrice())/1.21,2));
  1732.                             $budPen->setPrice($services_supplier_proposal->getPrice());
  1733.                             $budPen->setUnits($services_supplier_proposal->getUnits());
  1734.                             $em->persist($budPen);
  1735.                             $em->flush();
  1736.                             //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1737.                             $file null;
  1738.                             $idProp 0;
  1739.                             if (!empty($productFile)){
  1740.                                 if (!empty($productFile->getFileId())){
  1741.                                     $file $em->getRepository(MdvFiles::class)->findOneById($productFile->getFileId());
  1742.                                     if(!empty($file->getIdProposal())){
  1743.                                         $idProp $file->getIdProposal();
  1744.                                     }
  1745.                                 }
  1746.                             } else {
  1747.                                 // Verificamos si a pesar de ser un Budget ya existe un expediente asociado a ese proposal
  1748.                                 $idProp $budPen->getProposalId();
  1749.                                 $file $em->getRepository(MdvFiles::class)->findOneByIdProposal($idProp);
  1750.                             }
  1751.                             if(!empty($file)){
  1752.                                 //Se envia el mensaje al creador del expediente
  1753.                                 $userTelegramId $file->getCreatedId();
  1754.                             } else {
  1755.                                 // Solicitud sin expediente, se le notificara la jefe de departamento
  1756.                                 $userTelegramId 5// Id de Jorge (Jefe de Departamento)
  1757.                             }
  1758.                             //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1759.                             //Buscamos el nombre del destino
  1760.                             $nombreDestino $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
  1761.                             $nombreDestino $nombreDestino->getTitle();
  1762.                             //Buscamos el nombre del agente
  1763.                             $userFullName $em->getRepository(User::class)->findOneById($user_id);
  1764.                             $userFullName $userFullName->getName().' '.$userFullName->getLastName();
  1765.                             //Mensaje:
  1766.                             $this->sendTelegram($userTelegramId,'MODIFICACION DE SERVICIO (PRESUPUESTO) __ Nombre del producto: '.$budPen->getName().' __ Proposal ID: '.$idProp.' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$userFullName);
  1767.                         }
  1768.                     }
  1769.                     //FIN: Enviamos Telegram
  1770.                 }
  1771.             }
  1772.             //FIN: Sincronizamos en Develup y Notificamos (si es necesario)
  1773.             //INICIO: Sincronizamos en AvExpress y Notificamos (si es necesario)
  1774.             if ($services_supplier->getSupplierId() == 80){
  1775.                 //Buscamos el servicio reflejo en AvExpress
  1776.                 $productFile $em->getRepository(AveProductFile::class)->findOneByOriginId($services_supplier_proposal->getId());
  1777.                 $budPen $em->getRepository(AveBudgetPending::class)->findOneByOriginId($services_supplier_proposal->getId());
  1778.                 $productFile null$budPen null// AvExpress no deberia verse modificado por cambios de InOut
  1779.                 if (!empty($productFile) or !empty($budPen)){
  1780.                     $logTelegram true;
  1781.                 }
  1782.                 if ($logTelegram){
  1783.                     //INICIO: Enviamos Telegram
  1784.                     if (!empty($productFile)){
  1785. //                        $productFile->setServicePrice(round(($services_supplier_proposal->getPrice())/1.21,2));
  1786.                         $productFile->setServicePrice($services_supplier_proposal->getPrice());
  1787.                         $productFile->setUnits($services_supplier_proposal->getUnits());
  1788.                         $productFile->setSubTotalPrice($services_supplier_proposal->getUnits()*$services_supplier_proposal->getPrice());
  1789.                         $em->persist($productFile);
  1790.                         $em->flush();
  1791.                         //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
  1792.                         $file $em->getRepository(AveFiles::class)->findOneById($productFile->getFileId());
  1793.                         if(!empty($file)){
  1794.                             //Se envia el mensaje al creador del expediente
  1795.                             $userTelegramId $file->getCreatedId();
  1796.                         } else {
  1797.                             // Solicitud sin expediente, se le notificara la jefe de departamento
  1798.                             $userTelegramId 14// Id de Salvador (Jefe de Departamento)
  1799.                         }
  1800.                         //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
  1801.                         //Buscamos el nombre del destino
  1802.                         $nombreDestino $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
  1803.                         $nombreDestino $nombreDestino->getTitle();
  1804.                         //Buscamos el nombre del agente
  1805.                         $userFullName $em->getRepository(User::class)->findOneById($user_id);
  1806.                         $userFullName $userFullName->getName().' '.$userFullName->getLastName();
  1807.                         //Mensaje:
  1808.                         $this->sendTelegram($userTelegramId,'MODIFICACION DE SERVICIO __ AvExpress File ID: '.$productFile->getFileId().'__ Nombre del producto: '.$productFile->getProductName().' __ Proposal ID: '.$file->getIdProposal().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$userFullName);
  1809.                     } else {
  1810.                         // Se modifico un budPending
  1811.                         if (!empty($budPen)){
  1812. //                            $budPen->setPrice(round(($services_supplier_proposal->getPrice())/1.21,2));
  1813.                             $budPen->setPrice($services_supplier_proposal->getPrice());
  1814.                             $em->persist($budPen);
  1815.                             $em->flush();
  1816.                             //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1817.                             $file null;
  1818.                             $idProp 0;
  1819.                             if (!empty($productFile)){
  1820.                                 if (!empty($productFile->getFileId())){
  1821.                                     $file $em->getRepository(AveFiles::class)->findOneById($productFile->getFileId());
  1822.                                     if(!empty($file->getIdProposal())){
  1823.                                         $idProp $file->getIdProposal();
  1824.                                     }
  1825.                                 }
  1826.                             } else {
  1827.                                 // Verificamos si a pesar de ser un Budget ya existe un expediente asociado a ese proposal
  1828.                                 $idProp $budPen->getProposalId();
  1829.                                 $file $em->getRepository(AveFiles::class)->findOneByIdProposal($idProp);
  1830.                             }
  1831.                             if(!empty($file)){
  1832.                                 //Se envia el mensaje al creador del expediente
  1833.                                 $userTelegramId $file->getCreatedId();
  1834.                             } else {
  1835.                                 // Solicitud sin expediente, se le notificara la jefe de departamento
  1836.                                 $userTelegramId 14// Id de Salvador (Jefe de Departamento)
  1837.                             }
  1838.                             //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  1839.                             //Buscamos el nombre del destino
  1840.                             $nombreDestino $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
  1841.                             $nombreDestino $nombreDestino->getTitle();
  1842.                             //Buscamos el nombre del agente
  1843.                             $userFullName $em->getRepository(User::class)->findOneById($user_id);
  1844.                             $userFullName $userFullName->getName().' '.$userFullName->getLastName();
  1845.                             //Mensaje:
  1846.                             $this->sendTelegram($userTelegramId,'MODIFICACION DE SERVICIO (PRESUPUESTO) __ Nombre del producto: '.$budPen->getName().' __ Proposal ID: '.$idProp.' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$userFullName);
  1847.                         }
  1848.                     }
  1849.                     //FIN: Enviamos Telegram
  1850.                 }
  1851.             }
  1852.             //FIN: Sincronizamos en AvExpress y Notificamos (si es necesario)
  1853.             //Actualizar confirmado
  1854.             if ($services_supplier_proposal->getStatus() =='Confirmed'){
  1855.                 $costsClient $em->getRepository(ProposalSupplierServicesCostsClient::class)->findOneByServiceIdProposal($services_supplier_proposal->getId());
  1856.                 if (!empty($costsClient)){
  1857. //                $costsClient->setSupplierId($services_supplier_proposal->getSupplierId());
  1858.                     $costsClient->setAssistantId($services_supplier_proposal->getAssistantId());
  1859.                     $costsClient->setName($services_supplier_proposal->getName());
  1860.                     $costsClient->setPrice($services_supplier_proposal->getPrice());
  1861.                     $costsClient->setCurrency($services_supplier_proposal->getCurrency());
  1862.                     $costsClient->setUnits($services_supplier_proposal->getUnits());
  1863.                     $costsClient->setOpCommission($services_supplier_proposal->getOpCommission());
  1864.                     $costsClient->setCommission($services_supplier_proposal->getCommission());
  1865.                     $costsClient->setOpOver($services_supplier_proposal->getOpOver());
  1866.                     $costsClient->setOver($services_supplier_proposal->getOver());
  1867.                     $costsClient->setOpIva($services_supplier_proposal->getOpIva());
  1868.                     $costsClient->setIva($services_supplier_proposal->getIva());
  1869.                     $costsClient->setPax($services_supplier_proposal->getPax());
  1870.                     $costsClient->setHour($services_supplier_proposal->getHour());
  1871.                     $costsClient->setDateInAt($services_supplier_proposal->getDateInAt());
  1872.                     $costsClient->setDateOutAt($services_supplier_proposal->getDateOutAt());
  1873.                     $costsClient->setRank($services_supplier_proposal->getRank());
  1874.                     $costsClient->setCreatedId($user_id);
  1875.                     $costsClient->setUpdatedId($user_id);
  1876.                     $em->persist($costsClient);
  1877.                     $em->flush();
  1878.                 }
  1879.             }
  1880.             $event 'The Services updated in Destination Proposal.';
  1881.             $successMessage $this->translator->trans($event);
  1882.             $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  1883.         }else{
  1884.             $errorMessage $this->translator->trans('Error, some fields are empty');
  1885.             $this->addFlash('mensajeproposaldestinationservicesrror'$errorMessage);
  1886.         }
  1887.         return $this->redirectToRoute('proposal_destination_supplier_view',
  1888.             array(
  1889.                 'id' => $services_supplier->getControlDestinationId(),
  1890.                 '_fragment' => $data_services['id']
  1891.             )
  1892.         );
  1893.     }
  1894.     /**
  1895.      * Editar el servicio cuando se envian los datos desde un presupuesto.
  1896.      * 
  1897.      * @Route("proposal/destination/services/updated/budget", name="proposal_destination_supplier_services_updates_budget", methods={"POST"})
  1898.      */
  1899.     function updateServiceByBudget(Request $requestEntityManagerInterface $em) : JsonResponse {
  1900.         $jsonContent $request->getContent();
  1901.         $data json_decode($jsonContenttrue);
  1902.         $user $this->getUser();
  1903.         
  1904.         $serviceBudget $em->getRepository(ProposalSupplierServicesBudget::class)->find($data['id']);
  1905.         if (!$serviceBudget) {
  1906.             return $this->json(['message' => 'Service Budget not found'], JsonResponse::HTTP_NOT_FOUND);
  1907.         }
  1908.         // Convertir las fechas a objetos DateTime
  1909.         $dateIn = new \DateTime($data['dateInAt']);
  1910.         $dateOut = new \DateTime($data['dateOutAt']);
  1911.         // Calcular la diferencia entre las fechas
  1912.         $interval $dateIn->diff($dateOut);
  1913.         // Obtener la diferencia en días
  1914.         $differenceInDays $interval->days +1;
  1915.         //Calculamos el neto
  1916.         $units $data['units'] != $data['units'] : 1.0;
  1917.         $pax $data['pax'] != $data['pax'] : 1.0;
  1918.         $neto $data['price'] * $units $pax $differenceInDays;
  1919.         $total $neto * (+ ($data['iva']/100));
  1920.         $serviceBudget->setUpdatedId($user->getId())
  1921.             ->setDays($differenceInDays)
  1922.             ->setPrice($data['price'])
  1923.             ->setDateInAt(new \DateTime($data['dateInAt']))
  1924.             ->setDateOutAt(new \DateTime($data['dateOutAt']))
  1925.             ->setUnits($data['units'])
  1926.             ->setPax($data['pax'])
  1927.             ->setIva($data['iva'])
  1928.             ->setNetAmount($neto)
  1929.             ->setTotal(number_format($total2'.'''))
  1930.             ->setName($data['name']);
  1931.         try {
  1932.             // La entidad $service ahora tiene los campos actualizados según el JSON
  1933.             // Los campos no presentes en el JSON mantienen sus valores actuales en la base de datos
  1934.             $em->persist($serviceBudget);
  1935.             $em->flush();
  1936.             return $this->json(['status' => 'success''msg' => 'Service updated successfully''data' => $serviceBudget], JsonResponse::HTTP_OK);
  1937.         } catch (\Exception $e) {
  1938.             return new JsonResponse(['status' => 'error''msg' => 'An error occurred''detail' => $e->getMessage()], JsonResponse::HTTP_BAD_REQUEST);
  1939.         }
  1940.         return $this->json($serviceBudgetJsonResponse::HTTP_OK);
  1941.     }
  1942.     /**
  1943.      * @Route("proposal/destination/services/status/{status}/{id}", name="proposal_destination_supplier_services_status")
  1944.      */
  1945.     public function udatedStatusAction($status$idRequest $request)
  1946.     {
  1947.         $em $this->getDoctrine()->getManager();
  1948.         $services_supplier_proposal $em->getRepository(ProposalSupplierServices::class)->findOneById($id);
  1949.         $idp $services_supplier_proposal->getProposalId();
  1950.         $services_supplier $em->getRepository(ProposalSupplierControl::class)->findOneById($services_supplier_proposal->getControlId());
  1951.         if(!empty($services_supplier_proposal))
  1952.         {
  1953.             if ($status == "Confirmed"){
  1954.                 //confirmar proposal
  1955.                 $proposal$em->getRepository(Proposal::class)->findOneById($services_supplier_proposal->getProposalId());
  1956.                 // Envio correo a administracion en caso que de cambie el estatus y este como no enviado
  1957.                 if($proposal->getSendAdmin() != "yes"){
  1958.                     $time = new \DateTime("now");
  1959.                     $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  1960.                     $mailAgent[] = $agent->getEmail();
  1961.                     $agentMail $agent->getEmail();
  1962.                     $passGmail $agent->getPassGmail();
  1963.                     $firmGmail $agent->getFirmGmail();
  1964.                     $mailAgentSent = array(
  1965.                         $agent->getEmail() => $agent->getName().' '$agent->getLastName()
  1966.                     );
  1967.                     $setting_rol $em->getRepository(SettingsRol::class)->findBy(
  1968.                         array(
  1969.                             'weight' => array('2','3'),
  1970.                             'madmin' => '1',
  1971.                         )
  1972.                     );
  1973.                     foreach($setting_rol as $settingRol){
  1974.                         $administration $em->getRepository(User::class)->findByUserrol($settingRol->getId());
  1975.                         foreach($administration as $admin){
  1976.                             $mailAdmin[] = $admin->getEmail();
  1977.                         }
  1978.                     }
  1979.                     $data = array(
  1980.                         '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>',
  1981.                         'firm' => $firmGmail,
  1982.                     );
  1983.                     $mailTodos array_merge($mailAgent$mailAdmin);
  1984.                 }
  1985.                 if ($proposal->getStatus() != "Invoiced"){
  1986.                     $proposal->setStatus('Confirmed');
  1987.                 }
  1988.                 $em->persist($proposal);
  1989.             }
  1990.             /* Obtengo usuario logueado */
  1991.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1992.             $user_id $user_logueado->getId();
  1993.             $services_supplier_proposal->setUpdatedId($user_id);
  1994.             $services_supplier_proposal->setStatus($status);
  1995.             $em->persist($services_supplier_proposal);
  1996.             $em->flush();
  1997.             /* INICIO ACTUALIZAR CONFIRMADOS */
  1998.             /* SI ESTA FACTURADO NO SE PERMITE ACTUALIZAR LA BASE DE DATOS */
  1999.             $novatinvoice$em->getRepository(ProposalNoVatInvoice::class)->findOneByProposalId($idp);
  2000.             $invoice$em->getRepository(ProposalInvoice::class)->findOneByProposalId($idp);
  2001.             if (is_null($invoice) and is_null($novatinvoice)){
  2002.                 $services_hay $em->getRepository(ProposalSupplierServices::class)->findBy(
  2003.                     array(
  2004.                         'proposalId' => $idp,
  2005.                         'status' => 'Confirmed'
  2006.                     ),
  2007.                     array(
  2008.                         'id' => 'ASC'
  2009.                     )
  2010.                 );
  2011.                 /* INSERTAMOS Y ACTUALIZAMOS LA BASE DE DATOS ProposalSupplierServicesCostsClient*/
  2012.                 foreach($services_hay as $serviceshay) {
  2013.                     if (!is_null($serviceshay->getSupplierId()) && $serviceshay->getSupplierId() != '0' && $serviceshay->getDirectPayment() == '0'){
  2014.                         $costsClientHay $em->getRepository(ProposalSupplierServicesCostsClient::class)->findOneBy(
  2015.                             array(
  2016.                                 'proposalId' => $idp,
  2017.                                 'serviceIdProposal' => $serviceshay->getId(),
  2018.                             )
  2019.                         );
  2020.                         if (empty($costsClientHay)){
  2021.                             //COLOR POR SERVICIO
  2022.                             $contcolor ="";
  2023.                             switch ($serviceshay->getServiceCatName()) {
  2024.                                 case "Accommodation":
  2025.                                     $contcolor 'teal';
  2026.                                     break;
  2027.                                 case "Menu" :
  2028.                                     $contcolor 'purple';
  2029.                                     break;
  2030.                                 case "Lounge":
  2031.                                     $contcolor 'warning';
  2032.                                     break;
  2033.                                 case "Activities":
  2034.                                     $contcolor 'blue';
  2035.                                     break;
  2036.                                 case "Itineraries":
  2037.                                     $contcolor 'indigo';
  2038.                                     break;
  2039.                                 case "Cruise":
  2040.                                     $contcolor 'brown';
  2041.                                     break;
  2042.                                 case "Transport":
  2043.                                     $contcolor 'grey';
  2044.                                     break;
  2045.                                 case "Av":
  2046.                                     $contcolor 'slate';
  2047.                                     break;
  2048.                                 case "Creative":
  2049.                                     $contcolor 'orange';
  2050.                                     break;
  2051.                                 case "Gifts":
  2052.                                     $contcolor 'pink';
  2053.                                     break;
  2054.                                 case "Entertainment":
  2055.                                     $contcolor 'green';
  2056.                                     break;
  2057.                                 case "Guide":
  2058.                                     $contcolor 'orange';
  2059.                                     break;
  2060.                                 case "Others":
  2061.                                     $contcolor 'danger';
  2062.                                     break;
  2063.                                 case "Technology":
  2064.                                     $contcolor 'slate-800';
  2065.                                     break;
  2066.                                 case "Assistant":
  2067.                                     $contcolor 'indigo-800';
  2068.                                     break;
  2069.                                 case "DDR":
  2070.                                     $contcolor 'green-300';
  2071.                                     break;
  2072.                             }
  2073.                             /* Para dentro de ProposalSupplierServicesCostsClient */
  2074.                             $costsClient = new ProposalSupplierServicesCostsClient();
  2075.                             $costsClient->setServiceIdProposal($serviceshay->getId());
  2076.                             $costsClient->setServiceIdFather($serviceshay->getServiceIdFather());
  2077.                             $costsClient->setControlId($serviceshay->getControlId());
  2078.                             $costsClient->setProposalId($serviceshay->getProposalId());
  2079.                             $costsClient->setDestinationId($serviceshay->getDestinationId());
  2080.                             $costsClient->setSupplierId($serviceshay->getSupplierId());
  2081.                             $costsClient->setAssistantId($serviceshay->getAssistantId());
  2082.                             $costsClient->setIdeaId($serviceshay->getIdeaId());
  2083.                             $costsClient->setActivityId($serviceshay->getActivityId());
  2084.                             $costsClient->setServiceId($serviceshay->getServiceId());
  2085.                             $costsClient->setServiceCatId($serviceshay->getServiceCatId());
  2086.                             $costsClient->setServiceCatName($serviceshay->getServiceCatName());
  2087.                             $costsClient->setName($serviceshay->getName());
  2088.                             $costsClient->setPrice($serviceshay->getPrice());
  2089.                             $costsClient->setCurrency($serviceshay->getCurrency());
  2090.                             $costsClient->setUnits($serviceshay->getUnits());
  2091.                             $costsClient->setOpCommission($serviceshay->getOpCommission());
  2092.                             $costsClient->setCommission($serviceshay->getCommission());
  2093.                             $costsClient->setOpOver($serviceshay->getOpOver());
  2094.                             $costsClient->setOver($serviceshay->getOver());
  2095.                             $costsClient->setOpIva($serviceshay->getOpIva());
  2096.                             $costsClient->setIva($serviceshay->getIva());
  2097.                             $costsClient->setPax($serviceshay->getPax());
  2098.                             $costsClient->setHour($serviceshay->getHour());
  2099.                             $costsClient->setDateInAt($serviceshay->getDateInAt());
  2100.                             $costsClient->setDateOutAt($serviceshay->getDateOutAt());
  2101.                             $costsClient->setRank($serviceshay->getRank());
  2102.                             $costsClient->setCreatedId($user_id);
  2103.                             $costsClient->setUpdatedId($user_id);
  2104.                             $costsClient->setContcolor($contcolor);
  2105.                             $costsClient->setRenovate('1');
  2106.                             $em->persist($costsClient);
  2107.                             $em->flush();
  2108.                         }else{
  2109.                             $costsClientHay->setAssistantId($serviceshay->getAssistantId());
  2110.                             $costsClientHay->setUpdatedId($user_id);
  2111.                             $costsClientHay->setRenovate('1');
  2112.                             $em->persist($costsClientHay);
  2113.                             $em->flush();
  2114.                         }
  2115.                     }
  2116.                 }
  2117.                 /* Consulta para limpiar los que ya no estan confirmados en servicios */
  2118.                 $limpiar_services $em->getRepository(ProposalSupplierServicesCostsClient::class)->findBy(
  2119.                     array(
  2120.                         'proposalId' => $idp,
  2121.                         'renovate' => '0'
  2122.                     )
  2123.                 );
  2124.                 if (!empty($limpiar_services)){
  2125.                     foreach ($limpiar_services as $limpiarServices) {
  2126.                         $em->remove($limpiarServices);
  2127.                     }
  2128.                     $em->flush();
  2129.                 }
  2130.                 /* Consulta para renovar a cero en exists todos */
  2131.                 $renovate_services $em->getRepository(ProposalSupplierServicesCostsClient::class)->findBy(
  2132.                     array(
  2133.                         'proposalId' => $idp,
  2134.                         'renovate' => '1'
  2135.                     )
  2136.                 );
  2137.                 if (!empty($renovate_services)){
  2138.                     foreach ($renovate_services as $renovateServices) {
  2139.                         $renovateServices->setRenovate('0');
  2140.                         $em->flush();
  2141.                     }
  2142.                 }
  2143.             }
  2144.             /* FIN ACTUALIZAR CONFIRMADOS */
  2145.             $event 'The Status Services updated in Destination Proposal.';
  2146.             $successMessage $this->translator->trans($event);
  2147.             $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  2148.         }else{
  2149.             $errorMessage $this->translator->trans('Error, some fields are empty');
  2150.             $this->addFlash('mensajeproposaldestinationservicesrror'$errorMessage);
  2151.         }
  2152.         $url='#'.$id;
  2153.         return $this->redirectToRoute('proposal_destination_supplier_view',
  2154.             array(
  2155.                 'id' => $services_supplier->getControlDestinationId(),
  2156.                 '_fragment' => $id
  2157.             )
  2158.         );
  2159.     }
  2160.     /**
  2161.      * @Route("proposal/destination/services/statusrec/{status}/{id}", name="proposal_destination_supplier_services_recommended")
  2162.      */
  2163.     public function udatedRecommendedAction($status$idRequest $request)
  2164.     {
  2165.         $em $this->getDoctrine()->getManager();
  2166.         $services_supplier_proposal $em->getRepository(ProposalSupplierServices::class)->findOneById($id);
  2167.         $services_supplier $em->getRepository(ProposalSupplierControl::class)->findOneById($services_supplier_proposal->getControlId());
  2168.         $proposal $em->getRepository(Proposal::class)->findOneById($services_supplier->getProposalId());
  2169.         if(!empty($services_supplier_proposal))
  2170.         {
  2171.             /* Obtengo usuario logueado */
  2172.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2173.             $user_id $user_logueado->getId();
  2174.             $services_supplier_proposal->setUpdatedId($user_id);
  2175.             $services_supplier_proposal->setStatusRec($status);
  2176.             $em->persist($services_supplier_proposal);
  2177.             $em->flush();
  2178.             $event 'The Status Services updated in Destination Proposal.';
  2179.             $successMessage $this->translator->trans($event);
  2180.             $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  2181.         }else{
  2182.             $errorMessage $this->translator->trans('Error, some fields are empty');
  2183.             $this->addFlash('mensajeproposaldestinationservicesrror'$errorMessage);
  2184.         }
  2185.         $url='#'.$id;
  2186.         return $this->redirectToRoute('proposal_destination_supplier_makeyourbudget',
  2187.             array(
  2188.                 'id' => $proposal->getId(),
  2189.                 '_fragment' => $id
  2190.             )
  2191.         );
  2192.     }
  2193.     /**
  2194.      * @Route("proposal/destination/services/rank/{id}", name="proposal_destination_supplier_services_rank")
  2195.      */
  2196.     public function udatedRankAction($idRequest $request)
  2197.     {
  2198.         $rank $request->request->get('rank')['rank'];
  2199.         $em $this->getDoctrine()->getManager();
  2200.         $services_control $em->getRepository(ProposalSupplierControl::class)->findOneById($id);
  2201.         if(!empty($services_control))
  2202.         {
  2203.             $services_control->setRank($rank);
  2204.             $em->persist($services_control);
  2205.             $em->flush();
  2206.             $event 'The Rank Services updated in Destination Proposal.';
  2207.             $successMessage $this->translator->trans($event);
  2208.             $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  2209.         }else{
  2210.             $errorMessage $this->translator->trans('Error');
  2211.             $this->addFlash('mensajeproposaldestinationservicesrror'$errorMessage);
  2212.         }
  2213.         $url='#'.$id;
  2214.         return $this->redirectToRoute('proposal_destination_supplier_view',
  2215.             array(
  2216.                 'id' => $services_control->getControlDestinationId(),
  2217.                 '_fragment' => $id
  2218.             )
  2219.         );
  2220.     }
  2221.     /**
  2222.      * @Route("proposal/destination/services/services-deleted/{id}", name="proposal_destination_supplier_services_deleted")
  2223.      *
  2224.      */
  2225. //    public function deleteAction($id, Request $request, LoggerInterface $logger)
  2226.     public function deleteServicesAction($idRequest $request)
  2227.     {
  2228.         $em $this->getDoctrine()->getManager();
  2229.         $logTelegram false;
  2230.         $delete $em->getRepository(ProposalSupplierServices::class)->findOneById($id);
  2231.         $services_supplier $em->getRepository(ProposalSupplierControl::class)->findOneById($delete->getControlId());
  2232.         $destinationId $delete->getDestinationId();
  2233.         $delete_sub $em->getRepository(ProposalSupplierServices::class)->findByServiceIdFather($delete->getId());
  2234.         foreach($delete_sub as $deletesub){
  2235.             $em->remove($deletesub);
  2236.         }
  2237.         $em->remove($delete);
  2238.         $em->flush();
  2239.         $event 'The Services Supplier Proposal has been Deleted.';
  2240.         $successMessage $this->translator->trans($event);
  2241.         $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  2242.         //INICIO: Si existe su correspondiente en Develup se debe modificar y notificar
  2243.         $prodFile $em->getRepository(MdvProductFile::class)->findOneByOriginId($id);
  2244.         $budPen $em->getRepository(MdvBudgetPending::class)->findOneByOriginId($id);
  2245.         if (!empty($prodFile)){
  2246.             $prodFile->setProductName($prodFile->getProductName().' (ELIMINADO DEL PROPOSAL)');
  2247.             $em->persist($prodFile);
  2248.             $em->flush();
  2249.             $logTelegram true;
  2250.         }
  2251.         if (!empty($budPen)){
  2252.             $budPen->setName($budPen->getName().' (ELIMINADO DEL PROPOSAL)');
  2253.             $em->persist($budPen);
  2254.             $em->flush();
  2255.             $logTelegram true;
  2256.         }
  2257.         if ($logTelegram){
  2258.             //INICIO: Enviamos Telegram
  2259.             //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  2260.             $file $em->getRepository(MdvFiles::class)->findOneByIdProposal($services_supplier->getProposalId());
  2261.             if(!empty($file)){
  2262.                 //Se envia el mensaje al creador del expediente
  2263.                 $userTelegramId $file->getCreatedId();
  2264.             } else {
  2265.                 // Solicitud sin expediente, se le notificara la jefe de departamento
  2266.                 $userTelegramId 5// Id de Jorge
  2267.             }
  2268.             //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
  2269.             //Buscamos el nombre del destino
  2270.             $nombreDestino $em->getRepository(Destination::class)->findOneById($destinationId);
  2271.             $nombreDestino $nombreDestino->getTitle();
  2272.             //Buscamos el usuario logeado
  2273.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2274.             $user_id $user_logueado->getId();
  2275.             $agenteFullName $em->getRepository(User::class)->findOneById($user_id);
  2276.             $agenteFullName $agenteFullName->getName() . ' ' $agenteFullName->getLastName();
  2277.             //Mensaje:
  2278.             //SERVICIO ELIMINADO  __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
  2279.             $this->sendTelegram($userTelegramId,'SERVICIO ELIMINADO __ ID: '.$services_supplier->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$agenteFullName);
  2280.             //FIN: Enviamos Telegram
  2281.             $logTelegram false;   //Evitamos que un telegram para develup se envie para avexpress
  2282.         }
  2283.         //FIN: Si existe su correspondiente en Develup se debe modificar y notificar
  2284.         //INICIO: Si existe su correspondiente en AvExpress se debe modificar y notificar
  2285.         $prodFile $em->getRepository(AveProductFile::class)->findOneByOriginId($id);
  2286.         $budPen $em->getRepository(AveBudgetPending::class)->findOneByOriginId($id);
  2287.         if (!empty($prodFile)){
  2288.             $prodFile->setProductName($prodFile->getProductName().' (ELIMINADO DEL PROPOSAL)');
  2289.             $em->persist($prodFile);
  2290.             $em->flush();
  2291.             $logTelegram true;
  2292.         }
  2293.         if (!empty($budPen)){
  2294.             $budPen->setName($budPen->getName().' (ELIMINADO DEL PROPOSAL)');
  2295.             $em->persist($budPen);
  2296.             $em->flush();
  2297.             $logTelegram true;
  2298.         }
  2299.         if ($logTelegram){
  2300.             //INICIO: Enviamos Telegram
  2301.             //INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
  2302.             $file $em->getRepository(AveFiles::class)->findOneByIdProposal($services_supplier->getProposalId());
  2303.             if(!empty($file)){
  2304.                 //Se envia el mensaje al creador del expediente
  2305.                 $userTelegramId $file->getCreatedId();
  2306.             } else {
  2307.                 // Solicitud sin expediente, se le notificara la jefe de departamento
  2308.                 $userTelegramId 14// Id de Salvador
  2309.             }
  2310.             //FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
  2311.             //Buscamos el nombre del destino
  2312.             $nombreDestino $em->getRepository(Destination::class)->findOneById($destinationId);
  2313.             $nombreDestino $nombreDestino->getTitle();
  2314.             //Buscamos el usuario logeado
  2315.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2316.             $user_id $user_logueado->getId();
  2317.             $agenteFullName $em->getRepository(User::class)->findOneById($user_id);
  2318.             $agenteFullName $agenteFullName->getName() . ' ' $agenteFullName->getLastName();
  2319.             //Mensaje:
  2320.             //SERVICIO ELIMINADO  __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
  2321.             $this->sendTelegram($userTelegramId,'SERVICIO ELIMINADO __ ID: '.$services_supplier->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$agenteFullName);
  2322.             //FIN: Enviamos Telegram
  2323.         }
  2324.         //FIN: Si existe su correspondiente en AvExpress se debe modificar y notificar
  2325.         return $this->redirectToRoute('proposal_destination_supplier_view',
  2326.             array(
  2327.                 'id' => $services_supplier->getControlDestinationId(),
  2328.                 '_fragment' => 's'.$delete->getControlId()
  2329.             )
  2330.         );
  2331.     }
  2332.     /**
  2333.      * @Route("/proposals/block/events", name="get_proposal_select_block")
  2334.      */
  2335.     public function proposalblockSelectAction(Request $request) {
  2336.         $em $this->getDoctrine()->getManager();
  2337.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2338.         $user_id $user_logueado->getId();
  2339.         $parametersp = array(
  2340.             'agentId' => $user_id,
  2341.             'agentTwoId' => array($user_id),
  2342.             'status' => 'Pending',
  2343.         );
  2344.         $dqlp 'SELECT p
  2345.                 FROM EventsBundle:Proposal p
  2346.                 WHERE ( p.agentId = :agentId OR p.agentTwoId in(:agentTwoId) )
  2347.                 AND p.status = :status';
  2348.         $queryp $em->createQuery($dqlp)->setParameters($parametersp);
  2349.         $proposals $queryp->getResult();
  2350.         $datos = array();
  2351.         if (!empty($proposals)){
  2352.             foreach($proposals as $proposal){
  2353.                 $parameters = array(
  2354.                     'proposalId' => $proposal->getId(),
  2355.                 );
  2356.                 $dql 'SELECT p
  2357.                         FROM EventsBundle:ProposalSupplierServices p
  2358.                         WHERE p.proposalId = :proposalId 
  2359.                         AND p.dateBlockLimit IS NOT NULL';
  2360.                 $query $em->createQuery($dql)->setParameters($parameters);
  2361.                 $services $query->getResult();
  2362.                 $color "#FF8A65";
  2363.                 $pre_title $this->translator->trans('Blocking limit');
  2364.                 foreach($services as $service){
  2365.                     $control $em->getRepository(ProposalSupplierControl::class)->findOneById($service->getControlId());
  2366.                     $tooltip '<span>'.$service->getName().'<br>'.$pre_title.': '.$service->getDateBlockLimit()->format('d-m-Y H:m').'</span>';
  2367.                     $datos[] = array(
  2368.                         "id" => $proposal->getId(),
  2369.                         "title" => $pre_title.': '.$proposal->getName(),
  2370.                         "tooltip" => $tooltip,
  2371.                         "start" => $service->getDateBlockLimit(),
  2372.                         "end" => $service->getDateBlockLimit(),
  2373.                         "color" => $color,
  2374.                         "url" => "/events/proposal/destination/services/add/".$control->getcontrolDestinationId()."#".$service->getId(),
  2375.                     );
  2376.                 }
  2377.             }
  2378.         }
  2379.         else
  2380.         {
  2381.             $datos = [];
  2382.         }
  2383.         $return = array(
  2384.             'block' => $datos,
  2385.         );
  2386.         $response = new JsonResponse($return);
  2387.         return $response;
  2388.     }
  2389.     // Funcion para insertar historico de seguimiento
  2390.     // $textHistory = $this->translator->trans('');
  2391.     // $history = $this->TracingHistoryOperations($proposal->getId(), $text);
  2392.     private function TracingHistoryOperations($id$text)
  2393.     {
  2394.         $em $this->getDoctrine()->getManager();
  2395.         /* Obtengo usuario logueado */
  2396.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2397.         $user_id $user_logueado->getId();
  2398.         $history = new ProposalTracing();
  2399.         $history->setDateAt(new \DateTime('now'));
  2400.         $history->setText($text);
  2401.         $history->setAgentId($user_id);
  2402.         $history->setProposalId($id);
  2403.         $history->setViewed('no');
  2404.         $history->setCreatedId($user_id);
  2405.         $history->setUpdatedId($user_id);
  2406.         $em->persist($history);
  2407.         $em->flush();
  2408.         $success 'success';
  2409.         return $success;
  2410.     }
  2411.     private function sendTelegram $id$text )
  2412.     {
  2413.         $em $this->getDoctrine()->getManager();
  2414.         $telegUser $em->getRepository(MdvTelegramUser::class)->findOneByUserId($id);
  2415.         if (empty($telegUser)){return true;}
  2416.         $parameters = array(
  2417.             'chat_id' => $telegUser->getChatId(),
  2418.             'text' => $text,
  2419.         );
  2420.         $bot_token $telegUser->getBotToken();
  2421.         $url "https://api.telegram.org/bot$bot_token/sendMessage";
  2422.         if (!$curl curl_init()){
  2423.             exit();
  2424.         }
  2425.         curl_setopt($curl,CURLOPT_POST,true);
  2426.         curl_setopt($curl,CURLOPT_POSTFIELDS,$parameters);
  2427.         curl_setopt($curl,CURLOPT_URL,$url);
  2428.         curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
  2429.         $output curl_exec($curl);
  2430.         curl_close($curl);
  2431.         return true;
  2432.     }
  2433.     private function sendMailInternal($mailAddressFrom$mailAddressTo$mailSubject$mailBody){
  2434.         $em $this->getDoctrine()->getManager();
  2435.         $agent $em->getRepository(User::class)->findOneByEmail($mailAddressFrom);
  2436.         $client $em->getRepository(User::class)->findOneByEmail($mailAddressTo);
  2437.         $replyTo = array(
  2438.             $client->getEmail() => $client->getName(),
  2439.             $agent->getEmail() => $agent->getName().' '$agent->getLastName(),
  2440. //            'ayudantedeproduccion@avexpress.tv' => 'ayudantedeproduccion@avexpress.tv',
  2441. //            'ayudantedeproduccion2@avexpress.tv' => 'ayudantedeproduccion2@avexpress.tv',         // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025  -  salvador@avexpress.tv
  2442.             'salvador@avexpress.tv' => 'salvador@avexpress.tv',
  2443.         );
  2444.         $agentMail $mailAddressFrom;
  2445.         $mailAgent $agentMail;
  2446.         //Se prepara el correo con los agentes a notificar
  2447.         $firmGmail $agent->getFirmGmail();
  2448.         $data = array(
  2449.             'body' => $mailBody,
  2450.             'firm' => $firmGmail,
  2451.         );
  2452.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  2453.         $transporter = new Swift_SmtpTransport();
  2454.         $transporter->setHost('smtp.gmail.com')
  2455.             ->setEncryption('ssl')//ssl / tls
  2456.             ->setPort(465)// 465 / 587
  2457.             ->setUsername('desarrollo@develup.solutions')
  2458.             ->setPassword('utvh hzoi wfdo ztjs');
  2459.         $mailer = new Swift_Mailer($transporter);
  2460.         $message = new Swift_Message();
  2461.         $message->setSubject($mailSubject)
  2462.             ->setSender($agentMail)
  2463.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  2464.             ->setReplyTo($agentMail)
  2465.             ->setTo($replyTo)
  2466.             ->setBody(
  2467.                 $this->renderView(
  2468.                     'mail/structure-mail.html.twig',
  2469.                     array('data' => $data)
  2470.                 ),
  2471.                 'text/html'
  2472.             );
  2473.         $mailer->send($message);
  2474.         return true;
  2475.     }
  2476. }