<?php
/**
* Created by Mediterranean Develup Solutions
* User: jorge.defreitas@develup.solutions
* Date: 14/08/2017
* Time: 12:15
*/
namespace App\MDS\EventsBundle\Controller;
use App\Entity\Client;
use App\Entity\ClientContact;
use App\Entity\Destination;
use App\Entity\SettingsRol;
use App\Entity\SupplierAccommodation;
use App\Entity\SupplierActivities;
use App\Entity\SupplierAv;
use App\Entity\SupplierCreative;
use App\Entity\SupplierCruise;
use App\Entity\SupplierEntertainment;
use App\Entity\SupplierGifts;
use App\Entity\SupplierGuide;
use App\Entity\SupplierItineraries;
use App\Entity\SupplierLounge;
use App\Entity\SupplierMenu;
use App\Entity\SupplierOthers;
use App\Entity\SupplierServicesAssistant;
use App\Entity\SupplierTechnology;
use App\Entity\SupplierTransport;
use App\Entity\User;
use App\MDS\AvexpressBundle\Entity\AveFiles;
use App\MDS\DevelupBundle\Entity\MdvBriefings;
use App\MDS\AvexpressBundle\Entity\AveBriefings;
use App\MDS\DevelupBundle\Entity\MdvBudgetPending;
use App\MDS\AvexpressBundle\Entity\AveBudgetPending;
use App\MDS\AvexpressBundle\Entity\AveProduct;
use App\MDS\AvexpressBundle\Entity\AveProductFile;
use App\MDS\AvexpressBundle\Entity\AveTemplateItems;
use App\MDS\DevelupBundle\Entity\MdvFiles;
use App\MDS\DevelupBundle\Entity\MdvProduct;
use App\MDS\DevelupBundle\Entity\MdvProductFile;
use App\MDS\DevelupBundle\Entity\MdvTelegramUser;
use App\MDS\EventsBundle\Entity\Proposal;
use App\MDS\EventsBundle\Entity\ProposalControl;
use App\MDS\EventsBundle\Entity\ProposalInvoice;
use App\MDS\EventsBundle\Entity\ProposalNoVatInvoice;
use App\MDS\EventsBundle\Entity\ProposalSupplierServices;
use App\MDS\EventsBundle\Entity\ProposalSupplierServicesCostsClient;
use App\MDS\EventsBundle\Entity\ProposalTracing;
use App\MDS\EventsBundle\Entity\ProposalsSupplierServicesAssistantName;
use App\MDS\EventsBundle\Entity\ProposalSupplierControl;
use App\MDS\EventsBundle\Entity\ProposalSupplierServicesBudget;
use Doctrine\ORM\EntityManagerInterface;
use Swift_Mailer;
use Swift_Message;
use Swift_SmtpTransport;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
class ProposalSupplierServicesController extends AbstractController
{
private $translator;
public function __construct(TranslatorInterface $translator) {
$this->translator = $translator;
}
/*
* ATENCION LAS RAIZ DE @Route POR DEFECTO DEL BUNDLE: EventsBundle ES /events/, NO PONERLO EN LA @Route("")
*
* */
/**
* @Route("proposal/destination/services/addservices", name="proposal_destination_supplier_addservices")
*/
public function AddServicesAction(Request $request)
{
$idserviceproposal="";
$idserviceproposal = $request->request->get('idserviceproposal');
$supplierId = $request->request->get('supplierId');
$idcontrol = $request->request->get('idcontrol');
$supplierservices= new ProposalSupplierServices();
$supplierservices->setControlId($idcontrol);
$em = $this->getDoctrine()->getManager();
$supplierCrtl = $em->getRepository(ProposalSupplierControl::class)->findOneById($idcontrol);
$supplierservices->setProposalId($supplierCrtl->getProposalId());
$supplierservices->setDestinationId($supplierCrtl->getDestinoId());
if(empty($idserviceproposal)){
$supplierservices->setServiceIdFather('0');
$supplierservices->setSupplierId($supplierCrtl->getSupplierId());
$supplierservices->setIdeaId($supplierCrtl->getIdeaId());
$supplierservices->setActivityId($supplierCrtl->getActivityId());
$supplierservices->setIsFather('0');
}else{
$supplierservices->setServiceIdFather($idserviceproposal);
$supplierservices->setSupplierId($supplierId);
$supplierservices->setIsFather('1');
}
/* NAMEJO DE ADICIONALES EN EL DIA DEL EVENTO O DESPUES EL DIA DEL EVENTO */
$proposal_data = $em->getRepository(Proposal::class)->findOneById($supplierCrtl->getProposalId());
$dayEvent = $proposal_data->getDateEventStarAt()->format('Y-m-d');
$today = date('Y-m-d');
// if($dayEvent >= $today){
if( $today >= $dayEvent){
$additional = "Additional";
}else{
$additional = "Normal";
}
// d($dayEvent, $today, $additional);
// exit();
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$supplierservices->setCreatedId($user_id);
$supplierservices->setUpdatedId($user_id);
$supplierservices->setDateInAt($proposal_data->getDateEventStarAt());
$supplierservices->setDateOutAt($proposal_data->getDateEventEndAt());
/* metemos accommodation *////////////////////////////////////////////////////////////////
$accommodations = $request->request->get('accommodation');
if(!empty($accommodations)){
foreach($accommodations as $accommodation){
$supplierservices->setServiceId($accommodation);
$supplierservices->setServiceCatId('1');
$supplierservices->setServiceCatName('Accommodation');
$sqldata = $em->getRepository(SupplierAccommodation::class)->findOneById($accommodation);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission('0');
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva('10');
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos menu *////////////////////////////////////////////////////////////////
$menus = $request->request->get('menu');
if(!empty($menus)){
foreach($menus as $menu){
$supplierservices->setServiceId($menu);
$supplierservices->setServiceCatId('11');
$supplierservices->setServiceCatName('Menu');
$sqldata = $em->getRepository(SupplierMenu::class)->findOneById($menu);
$supplierservices->setName($sqldata->getTitle());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos lounge *////////////////////////////////////////////////////////////////
$lounges = $request->request->get('lounge');
if(!empty($lounges)){
foreach($lounges as $lounge){
$supplierservices->setServiceId($lounge);
$supplierservices->setServiceCatId('10');
$supplierservices->setServiceCatName('Lounge');
$sqldata = $em->getRepository(SupplierLounge::class)->findOneById($lounge);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos activities *////////////////////////////////////////////////////////////////
$activitiess = $request->request->get('activities');
if(!empty($activitiess)){
foreach($activitiess as $activities){
$supplierservices->setServiceId($activities);
$supplierservices->setServiceCatId('2');
$supplierservices->setServiceCatName('Activities');
$sqldata = $em->getRepository(SupplierActivities::class)->findOneById($activities);
$supplierservices->setName($sqldata->getTitle());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos itineraries *////////////////////////////////////////////////////////////////
$itinerariess = $request->request->get('itineraries');
if(!empty($itinerariess)){
foreach($itinerariess as $itineraries){
$supplierservices->setServiceId($itineraries);
$supplierservices->setServiceCatId('9');
$supplierservices->setServiceCatName('Itineraries');
$sqldata = $em->getRepository(SupplierItineraries::class)->findOneById($itineraries);
$supplierservices->setName($sqldata->getTitle());
$supplierservices->setPrice('0');
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission('0');
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva('10');
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos cruise *////////////////////////////////////////////////////////////////
$cruises = $request->request->get('cruise');
if(!empty($cruises)){
foreach($cruises as $cruise){
$supplierservices->setServiceId($cruise);
$supplierservices->setServiceCatId('5');
$supplierservices->setServiceCatName('Cruise');
$sqldata = $em->getRepository(SupplierCruise::class)->findOneById($cruise);
$supplierservices->setName($sqldata->getTitle());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos transport *////////////////////////////////////////////////////////////////
$transports = $request->request->get('transport');
if(!empty($transports)){
foreach($transports as $transport){
$supplierservices->setServiceId($transport);
$supplierservices->setServiceCatId('13');
$supplierservices->setServiceCatName('Transport');
$sqldata = $em->getRepository(SupplierTransport::class)->findOneById($transport);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos av *////////////////////////////////////////////////////////////////
$avs = $request->request->get('av');
$av_supplier = $request->request->get('av_supplier');
$av_template = $request->request->get('avexpress');
if(!empty($avs)){
foreach($avs as $av){
$supplierservices->setServiceId($av);
$supplierservices->setServiceCatId('3');
$supplierservices->setServiceCatName('Av');
if (empty($av_supplier)) {
$sqldata = $em->getRepository(SupplierAv::class)->findOneById($av);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
} else {
$sqldata = $em->getRepository(AveProduct::class)->findOneById($av);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
$supplierservices->setUnits('1');
$supplierservices->setCommission(0);
$supplierservices->setIva(21);
$supplierservices->setPax('0');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$supplierservices->setDateInAt(new \DateTime("now"));
$supplierservices->setDateOutAt(new \DateTime("now"));
}
$em->persist($supplierservices);
$em->flush();
$em->clear();
//INICIO: Confirmamos un servicio de AvExpress
// Nombre del agente
$agenteFullName = $em->getRepository(User::class)->findOneById($user_id);
$agenteFullName = $agenteFullName->getName() . ' ' . $agenteFullName->getLastName();
$proposalTitle = $em->getRepository(Proposal::class)->findOneById($supplierservices->getProposalId());
if ($supplierservices->getSupplierId()==80){
$originalServiceName = $em->getRepository(AveProduct::class)->findOneById($supplierservices->getServiceId());
$budget = new AveBudgetPending();
$budget->setActivityId($supplierservices->getActivityId());
$budget->setAssistantId($supplierservices->getAssistantId());
$budget->setBreakdown($supplierservices->getBreakdown());
$budget->setCommission($supplierservices->getCommission());
$budget->setControlId($supplierservices->getControlId());
$budget->setOriginId($supplierservices->getId());
$budget->setCurrency($supplierservices->getCurrency());
$budget->setDateBlockLimit($supplierservices->getDateBlockLimit());
$budget->setDateInAt($supplierservices->getDateInAt());
$budget->setDateOutAt($supplierservices->getDateOutAt());
$budget->setDestinationId($supplierservices->getDestinationId());
$budget->setDirectPayment($supplierservices->getDirectPayment());
$budget->setHour($supplierservices->getHour());
$budget->setIdeaId($supplierservices->getIdeaId());
$budget->setIsFather($supplierservices->getIsFather());
$budget->setIva($supplierservices->getIva());
if(!($originalServiceName->getName() == $supplierservices->getName())){
$budget->setName($originalServiceName->getName().' (:'. $supplierservices->getName().':)');
} else {
$budget->setName($originalServiceName->getName());
}
$budget->setOpCommission($supplierservices->getOpCommission());
$budget->setOpIva($supplierservices->getOpIva());
$budget->setOpOver($supplierservices->getOpOver());
$budget->setOriginalIva($supplierservices->getOriginalIva());
$budget->setOriginalopIva($supplierservices->getOriginalopIva());
$budget->setOriginalPrice($supplierservices->getOriginalPrice());
$budget->setOver($supplierservices->getOver());
$budget->setPax($supplierservices->getPax());
$budget->setPreCommission($supplierservices->getPreCommission());
$budget->setPreIva($supplierservices->getPreIva());
$budget->setPrice($supplierservices->getPrice());
$budget->setProposalId($supplierservices->getProposalId());
$budget->setRank($supplierservices->getRank());
$budget->setServiceCatId($supplierservices->getServiceCatId());
$budget->setServiceCatName($supplierservices->getServiceCatName());
$budget->setServiceId($supplierservices->getServiceId());
$budget->setServiceIdFather($supplierservices->getServiceIdFather());
$budget->setStatus($supplierservices->getStatus());
$budget->setStatusinternal($supplierservices->getStatusinternal());
$budget->setStatusRec($supplierservices->getStatusRec());
$budget->setSupplierId($supplierservices->getSupplierId());
$budget->setUnits($supplierservices->getUnits());
$budget->setUserConfirmedFullName($agenteFullName);
$budget->setUserConfirmedId($user_id);
$budget->setProposalTitle($proposalTitle->getTitle());
$budget->setCreatedAt(new \DateTime("now"));
$budget->setCreatedId($user_id);
$budget->setUpdatedId($user_id);
$budget->setUpdatedAt(new \DateTime("now"));
// INIICO: Llenamos el tooltip con la info del proposal
$texto = null;
if (!empty($budget->getProposalId())){
$prop = $em->getRepository(Proposal::class)->findOneById($budget->getProposalId());
if (!empty($prop)){
$client = $em->getRepository(Client::class)->findOneById($prop->getClientId());
$clientContact = $em->getRepository(ClientContact::class)->findOneById($prop->getContactId());
$contacto = null;
if (!empty($clientContact->getName())){$contacto = $contacto. $clientContact->getName(). ' ';}
if (!empty($clientContact->getLastName())){$contacto = $contacto. $clientContact->getLastName(). ' ';}
if (!empty($clientContact->getEmail())){$contacto = $contacto. '('.$clientContact->getEmail().')'. ' ';}
if (!empty($clientContact->getPhone())){$contacto = $contacto. ' - '.$clientContact->getPhone(). ' ';}
if (!empty($clientContact->getMobile())){$contacto = $contacto. ' - '.$clientContact->getMobile();}
$city = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$texto = $texto .'Petición: '.$budget->getCreatedAt()->format('d/m/Y'). ' -- ';
if (!empty($client)){$texto = $texto .'Cliente: '.$client->getName(). ' -- ';}
if (!empty($prop->getPax())){$texto = $texto .'Personas: '.$prop->getPax(). ' -- ';}
$texto = $texto .'Desde: '.$prop->getDateEventStarAt()->format('d/m/Y').' Hasta: '.$prop->getDateEventEndAt()->format('d/m/Y'). ' -- ';
$texto = $texto .'Horario: '.$supplierservices->getDateInAt()->format('H:i'). ' a '.$supplierservices->getDateOutAt()->format('H:i'). ' -- ';
$texto = $texto .'Ciudad: '.$city->getTitle(). ' -- ';
$texto = $texto .'Contacto: '. $contacto;
$budget->setTextTooltip($texto);
}
}
// FIN: Llenamos el tooltip con la info del proposal
$em->persist($budget);
$em->flush();
$logMail = false;
//INICIO: Creamos el expediente en AV si es necesario
$fileAv = $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
if (empty($fileAv)){
$fileAv = new AveFiles();
$fileAv->setTitle($proposalTitle->getId().' - '. $proposalTitle->getTitle());
$fileAv->setClient('262'); //In Out es el cliente
$fileAv->setPriority(null);
$fileAv->setSupplier(null);
$fileAv->setStatus(''); //El status no puede ir en nulo o no se listara el expediente
$fileAv->setDaysBlock(null);
$fileAv->setAdvancePayment(null);
$fileAv->setIdProposal($proposalTitle->getId());
$fileAv->setCateringName(null);
$fileAv->setBoolCatering(null);
$fileAv->setDateStart($proposalTitle->getDateEventStarAt());
$fileAv->setDateEnd($proposalTitle->getDateEventEndAt());
$fileAv->setPax($proposalTitle->getPax());
$fileAv->setDeposit(null);
$fileAv->setAccessKey(null);
$fileAv->setDescription(null);
$fileAv->setCreatedAt(new \DateTime("now"));
$fileAv->setCreatedId($user_id);
$fileAv->setUpdatedId($user_id);
$fileAv->setUpdatedAt(new \DateTime("now"));
$em->persist($fileAv);
$em->flush();
$logMail = true;
}
//FIN: Creamos el expediente en AV si es necesario
//INICIO: Notificamos por correo a Salvador y al agente
if ($logMail){
$mailAddressTo = 'salvador@avexpress.tv';
// $mailAddressTo = 'gustavo.ayala@develup.solutions';
$agente = $em->getRepository(User::class)->findOneById($user_id);
$mailAddressFrom = $agente->getEmail();
$mailSubject = 'Nuevo expediente solicitado por In Out';
$mailBody = 'Estimado proveedor,'.
'<br><br> Para nuestro evento: '. $proposalTitle->getId().' - '. $proposalTitle->getTitle().
'<br>Se ha creado automaticamente el expediente AV: '. $fileAv->getId().' con el mismo nombre de nuestro evento'.
'<br><br>Muchas gracias por su colaboración.<br><br>';
//El correo solo se enviara si no se ha enviado ya una alerta previamente
$this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
//Copia para el ayudante de AV (Temporal por vacaciones de Salvador)
// $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
// $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv'; // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025 - salvador@avexpress.tv
$mailAddressTo = 'salvador@avexpress.tv';
$this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
}
//FIN: Notificamos por correo a Salvador y al agente
//INICIO: Enviamos Telegram
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
$file = $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 14; // Id de Salvador
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$nombreDestino = $nombreDestino->getTitle();
//Mensaje:
//SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
$this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
//FIN: Enviamos Telegram
}
//FIN: Confirmamos un servicio de AvExpress
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
if(!empty($av_template)){
$av_template = $av_template['template'];
$avTemplateItems = $em->getRepository(AveTemplateItems::class)->findByTemplateId($av_template);
foreach($avTemplateItems as $av){
$supplierservices->setServiceId($av->getId());
$supplierservices->setServiceCatId('3');
$supplierservices->setServiceCatName('Av');
$supplierservices->setName($av->getProductName());
$supplierservices->setPrice($av->getSubTotalPrice());
$supplierservices->setUnits('1');
$supplierservices->setCommission(0);
$supplierservices->setIva(21);
$supplierservices->setPax('0');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal('AV TEMPLATE');
$supplierservices->setDateInAt(new \DateTime("now"));
$supplierservices->setDateOutAt(new \DateTime("now"));
$em->persist($supplierservices);
$em->flush();
$em->clear();
//INICIO: Confirmamos un servicio de AvExpress
// Nombre del agente
$agenteFullName = $em->getRepository(User::class)->findOneById($user_id);
$agenteFullName = $agenteFullName->getName() . ' ' . $agenteFullName->getLastName();
$proposalTitle = $em->getRepository(Proposal::class)->findOneById($supplierservices->getProposalId());
if ($supplierservices->getSupplierId()==80){
// $originalServiceName = $em->getRepository(AveProduct::class)->findOneById($supplierservices->getServiceId());
$originalServiceName = $av;
$budget = new AveBudgetPending();
$budget->setActivityId($supplierservices->getActivityId());
$budget->setAssistantId($supplierservices->getAssistantId());
$budget->setBreakdown($supplierservices->getBreakdown());
$budget->setCommission($supplierservices->getCommission());
$budget->setControlId($supplierservices->getControlId());
$budget->setOriginId($supplierservices->getId());
$budget->setCurrency($supplierservices->getCurrency());
$budget->setDateBlockLimit($supplierservices->getDateBlockLimit());
$budget->setDateInAt($supplierservices->getDateInAt());
$budget->setDateOutAt($supplierservices->getDateOutAt());
$budget->setDestinationId($supplierservices->getDestinationId());
$budget->setDirectPayment($supplierservices->getDirectPayment());
$budget->setHour($supplierservices->getHour());
$budget->setIdeaId($supplierservices->getIdeaId());
$budget->setIsFather($supplierservices->getIsFather());
$budget->setIva($supplierservices->getIva());
if(!($originalServiceName->getProductName() == $supplierservices->getName())){
$budget->setName($originalServiceName->getProductName().' (:'. $supplierservices->getName().':)');
} else {
$budget->setName($originalServiceName->getProductName());
}
$budget->setOpCommission($supplierservices->getOpCommission());
$budget->setOpIva($supplierservices->getOpIva());
$budget->setOpOver($supplierservices->getOpOver());
$budget->setOriginalIva($supplierservices->getOriginalIva());
$budget->setOriginalopIva($supplierservices->getOriginalopIva());
$budget->setOriginalPrice($supplierservices->getOriginalPrice());
$budget->setOver($supplierservices->getOver());
$budget->setPax($supplierservices->getPax());
$budget->setPreCommission($supplierservices->getPreCommission());
$budget->setPreIva($supplierservices->getPreIva());
$budget->setPrice($supplierservices->getPrice());
$budget->setProposalId($supplierservices->getProposalId());
$budget->setRank($supplierservices->getRank());
$budget->setServiceCatId($supplierservices->getServiceCatId());
$budget->setServiceCatName($supplierservices->getServiceCatName());
$budget->setServiceId($supplierservices->getServiceId());
$budget->setServiceIdFather($supplierservices->getServiceIdFather());
$budget->setStatus($supplierservices->getStatus());
$budget->setStatusinternal($supplierservices->getStatusinternal());
$budget->setStatusRec($supplierservices->getStatusRec());
$budget->setSupplierId($supplierservices->getSupplierId());
$budget->setUnits($supplierservices->getUnits());
$budget->setUserConfirmedFullName($agenteFullName);
$budget->setUserConfirmedId($user_id);
$budget->setProposalTitle($proposalTitle->getTitle());
$budget->setCreatedAt(new \DateTime("now"));
$budget->setCreatedId($user_id);
$budget->setUpdatedId($user_id);
$budget->setUpdatedAt(new \DateTime("now"));
// INIICO: Llenamos el tooltip con la info del proposal
$texto = null;
if (!empty($budget->getProposalId())){
$prop = $em->getRepository(Proposal::class)->findOneById($budget->getProposalId());
if (!empty($prop)){
$client = $em->getRepository(Client::class)->findOneById($prop->getClientId());
$clientContact = $em->getRepository(ClientContact::class)->findOneById($prop->getContactId());
$contacto = null;
if (!empty($clientContact->getName())){$contacto = $contacto. $clientContact->getName(). ' ';}
if (!empty($clientContact->getLastName())){$contacto = $contacto. $clientContact->getLastName(). ' ';}
if (!empty($clientContact->getEmail())){$contacto = $contacto. '('.$clientContact->getEmail().')'. ' ';}
if (!empty($clientContact->getPhone())){$contacto = $contacto. ' - '.$clientContact->getPhone(). ' ';}
if (!empty($clientContact->getMobile())){$contacto = $contacto. ' - '.$clientContact->getMobile();}
$city = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$texto = $texto .'Petición: '.$budget->getCreatedAt()->format('d/m/Y'). ' -- ';
if (!empty($client)){$texto = $texto .'Cliente: '.$client->getName(). ' -- ';}
if (!empty($prop->getPax())){$texto = $texto .'Personas: '.$prop->getPax(). ' -- ';}
$texto = $texto .'Desde: '.$prop->getDateEventStarAt()->format('d/m/Y').' Hasta: '.$prop->getDateEventEndAt()->format('d/m/Y'). ' -- ';
$texto = $texto .'Horario: '.$supplierservices->getDateInAt()->format('H:i'). ' a '.$supplierservices->getDateOutAt()->format('H:i'). ' -- ';
$texto = $texto .'Ciudad: '.$city->getTitle(). ' -- ';
$texto = $texto .'Contacto: '. $contacto;
$budget->setTextTooltip($texto);
}
}
// FIN: Llenamos el tooltip con la info del proposal
$em->persist($budget);
$em->flush();
$logMail = false;
//INICIO: Creamos el expediente en AV si es necesario
$fileAv = $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
if (empty($fileAv)){
$fileAv = new AveFiles();
$fileAv->setTitle($proposalTitle->getId().' - '. $proposalTitle->getTitle());
$fileAv->setClient('262'); //In Out es el cliente
$fileAv->setPriority(null);
$fileAv->setSupplier(null);
$fileAv->setStatus(''); //El status no puede ir en nulo o no se listara el expediente
$fileAv->setDaysBlock(null);
$fileAv->setAdvancePayment(null);
$fileAv->setIdProposal($proposalTitle->getId());
$fileAv->setCateringName(null);
$fileAv->setBoolCatering(null);
$fileAv->setDateStart($proposalTitle->getDateEventStarAt());
$fileAv->setDateEnd($proposalTitle->getDateEventEndAt());
$fileAv->setPax($proposalTitle->getPax());
$fileAv->setDeposit(null);
$fileAv->setAccessKey(null);
$fileAv->setDescription(null);
$fileAv->setCreatedAt(new \DateTime("now"));
$fileAv->setCreatedId($user_id);
$fileAv->setUpdatedId($user_id);
$fileAv->setUpdatedAt(new \DateTime("now"));
$em->persist($fileAv);
$em->flush();
$logMail = true;
}
//FIN: Creamos el expediente en AV si es necesario
//INICIO: Notificamos por correo a Salvador y al agente
if ($logMail){
$mailAddressTo = 'salvador@avexpress.tv';
// $mailAddressTo = 'gustavo.ayala@develup.solutions';
$agente = $em->getRepository(User::class)->findOneById($user_id);
$mailAddressFrom = $agente->getEmail();
$mailSubject = 'Nuevo expediente solicitado por In Out';
$mailBody = 'Estimado proveedor,'.
'<br><br> Para nuestro evento: '. $proposalTitle->getId().' - '. $proposalTitle->getTitle().
'<br>Se ha creado automaticamente el expediente AV: '. $fileAv->getId().' con el mismo nombre de nuestro evento'.
'<br><br>Muchas gracias por su colaboración.<br><br>';
//El correo solo se enviara si no se ha enviado ya una alerta previamente
$this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
//Copia para el ayudante de AV (Temporal por vacaciones de Salvador)
// $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
// $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv'; // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025 - salvador@avexpress.tv
$mailAddressTo = 'salvador@avexpress.tv';
$this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
}
//FIN: Notificamos por correo a Salvador y al agente
//INICIO: Enviamos Telegram
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
$file = $em->getRepository(AveFiles::class)->findOneByIdProposal($prop->getId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 14; // Id de Salvador
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$nombreDestino = $nombreDestino->getTitle();
//Mensaje:
//SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
$this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
//FIN: Enviamos Telegram
}
//FIN: Confirmamos un servicio de AvExpress
}
}
/* metemos creative *////////////////////////////////////////////////////////////////
$creatives = $request->request->get('creative');
if(!empty($creatives)){
foreach($creatives as $creative){
$supplierservices->setServiceId($creative);
$supplierservices->setServiceCatId('4');
$supplierservices->setServiceCatName('Creative');
$sqldata = $em->getRepository(SupplierCreative::class)->findOneById($creative);
$supplierservices->setName($sqldata->getTitle());
$supplierservices->setPrice('0');
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission('0');
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva('21');
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos gift *////////////////////////////////////////////////////////////////
$gifts = $request->request->get('gift');
if(!empty($gifts)){
foreach($gifts as $gift){
$supplierservices->setServiceId($gift);
$supplierservices->setServiceCatId('7');
$supplierservices->setServiceCatName('Gifts');
$sqldata = $em->getRepository(SupplierGifts::class)->findOneById($gift);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos entertainment *////////////////////////////////////////////////////////////////
$entertainments = $request->request->get('entertainment');
if(!empty($entertainments)){
foreach($entertainments as $entertainment){
$supplierservices->setServiceId($entertainment);
$supplierservices->setServiceCatId('6');
$supplierservices->setServiceCatName('Entertainment');
$sqldata = $em->getRepository(SupplierEntertainment::class)->findOneById($entertainment);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos guide *////////////////////////////////////////////////////////////////
$guides = $request->request->get('guide');
if(!empty($guides)){
foreach($guides as $guide){
$supplierservices->setServiceId($guide);
$supplierservices->setServiceCatId('8');
$supplierservices->setServiceCatName('Guide');
$sqldata = $em->getRepository(SupplierGuide::class)->findOneById($guide);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos others *////////////////////////////////////////////////////////////////
$otherss = $request->request->get('others');
if(!empty($otherss)){
foreach($otherss as $others){
$supplierservices->setServiceId($others);
$supplierservices->setServiceCatId('12');
$supplierservices->setServiceCatName('Others');
$sqldata = $em->getRepository(SupplierOthers::class)->findOneById($others);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos technology *////////////////////////////////////////////////////////////////
$technologys = $request->request->get('technology');
$technology_supplier = $request->request->get('technology_supplier');
if(!empty($technologys)){
foreach($technologys as $technology){
$supplierservices->setServiceId($technology);
$supplierservices->setServiceCatId('14');
$supplierservices->setServiceCatName('Technology');
if (empty($technology_supplier)){
$sqldata = $em->getRepository(SupplierTechnology::class)->findOneById($technology);
$supplierservices->setName($sqldata->getTitle());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
} else {
$sqldata = $em->getRepository(MdvProduct::class)->findOneById($technology);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
$supplierservices->setUnits('1');
$supplierservices->setCommission(0);
$supplierservices->setIva(21);
$supplierservices->setPax('0');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
}
$em->persist($supplierservices);
$em->flush();
$em->clear();
//INICIO: Confirmamos un servicio de Develup o AV
// if ($status == "Confirmed"){
if (true){
// if (($services_supplier_proposal->getSupplierId()==2) or ($services_supplier_proposal->getSupplierId()==80)){
if (true){
// Nombre del agente
$agenteFullName = $em->getRepository(User::class)->findOneById($user_id);
$agenteFullName = $agenteFullName->getName() . ' ' . $agenteFullName->getLastName();
$proposalTitle = $em->getRepository(Proposal::class)->findOneById($supplierservices->getProposalId());
if ($supplierservices->getSupplierId()==2){
$originalServiceName = $em->getRepository(MdvProduct::class)->findOneById($supplierservices->getServiceId());
$budget = new MdvBudgetPending();
$budget->setActivityId($supplierservices->getActivityId());
$budget->setAssistantId($supplierservices->getAssistantId());
$budget->setBreakdown($supplierservices->getBreakdown());
$budget->setCommission($supplierservices->getCommission());
$budget->setControlId($supplierservices->getControlId());
$budget->setOriginId($supplierservices->getId());
$budget->setCurrency($supplierservices->getCurrency());
$budget->setDateBlockLimit($supplierservices->getDateBlockLimit());
$budget->setDateInAt($supplierservices->getDateInAt());
$budget->setDateOutAt($supplierservices->getDateOutAt());
$budget->setDestinationId($supplierservices->getDestinationId());
$budget->setDirectPayment($supplierservices->getDirectPayment());
$budget->setHour($supplierservices->getHour());
$budget->setIdeaId($supplierservices->getIdeaId());
$budget->setIsFather($supplierservices->getIsFather());
$budget->setIva($supplierservices->getIva());
if(!($originalServiceName->getName() == $supplierservices->getName())){
$budget->setName($originalServiceName->getName().' (:'. $supplierservices->getName().':)');
} else {
$budget->setName($originalServiceName->getName());
}
$budget->setOpCommission($supplierservices->getOpCommission());
$budget->setOpIva($supplierservices->getOpIva());
$budget->setOpOver($supplierservices->getOpOver());
$budget->setOriginalIva($supplierservices->getOriginalIva());
$budget->setOriginalopIva($supplierservices->getOriginalopIva());
$budget->setOriginalPrice($supplierservices->getOriginalPrice());
$budget->setOver($supplierservices->getOver());
$budget->setPax($supplierservices->getPax());
$budget->setPreCommission($supplierservices->getPreCommission());
$budget->setPreIva($supplierservices->getPreIva());
$budget->setPrice($supplierservices->getPrice());
$budget->setProposalId($supplierservices->getProposalId());
$budget->setRank($supplierservices->getRank());
$budget->setServiceCatId($supplierservices->getServiceCatId());
$budget->setServiceCatName($supplierservices->getServiceCatName());
$budget->setServiceId($supplierservices->getServiceId());
$budget->setServiceIdFather($supplierservices->getServiceIdFather());
$budget->setStatus($supplierservices->getStatus());
$budget->setStatusinternal($supplierservices->getStatusinternal());
$budget->setStatusRec($supplierservices->getStatusRec());
$budget->setSupplierId($supplierservices->getSupplierId());
$budget->setUnits($supplierservices->getUnits());
$budget->setUserConfirmedFullName($agenteFullName);
$budget->setUserConfirmedId($user_id);
$budget->setProposalTitle($proposalTitle->getTitle());
$budget->setCreatedAt(new \DateTime("now"));
$budget->setCreatedId($user_id);
$budget->setUpdatedId($user_id);
$budget->setUpdatedAt(new \DateTime("now"));
// INIICO: Llenamos el tooltip con la info del proposal
$texto = null;
if (!empty($budget->getProposalId())){
$prop = $em->getRepository(Proposal::class)->findOneById($budget->getProposalId());
if (!empty($prop)){
$client = $em->getRepository(Client::class)->findOneById($prop->getClientId());
$clientContact = $em->getRepository(ClientContact::class)->findOneById($prop->getContactId());
$contacto = null;
if (!empty($clientContact->getName())){$contacto = $contacto. $clientContact->getName(). ' ';}
if (!empty($clientContact->getLastName())){$contacto = $contacto. $clientContact->getLastName(). ' ';}
if (!empty($clientContact->getEmail())){$contacto = $contacto. '('.$clientContact->getEmail().')'. ' ';}
if (!empty($clientContact->getPhone())){$contacto = $contacto. ' - '.$clientContact->getPhone(). ' ';}
if (!empty($clientContact->getMobile())){$contacto = $contacto. ' - '.$clientContact->getMobile();}
$city = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$texto = $texto .'Petición: '.$budget->getCreatedAt()->format('d/m/Y'). ' -- ';
if (!empty($client)){$texto = $texto .'Cliente: '.$client->getName(). ' -- ';}
if (!empty($prop->getPax())){$texto = $texto .'Personas: '.$prop->getPax(). ' -- ';}
$texto = $texto .'Desde: '.$prop->getDateEventStarAt()->format('d/m/Y').' Hasta: '.$prop->getDateEventEndAt()->format('d/m/Y'). ' -- ';
$texto = $texto .'Horario: '.$supplierservices->getDateInAt()->format('H:i'). ' a '.$supplierservices->getDateOutAt()->format('H:i'). ' -- ';
$texto = $texto .'Ciudad: '.$city->getTitle(). ' -- ';
$texto = $texto .'Contacto: '. $contacto;
$budget->setTextTooltip($texto);
}
}
// FIN: Llenamos el tooltip con la info del proposal
$em->persist($budget);
$em->flush();
//INICIO: Enviamos Telegram
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
$file = $em->getRepository(MdvFiles::class)->findOneByIdProposal($prop->getId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 5; // Id de Jorge
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$nombreDestino = $nombreDestino->getTitle();
//Mensaje:
//SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
$this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
// d($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());exit();
//FIN: Enviamos Telegram
}
}
}
//FIN: Confirmamos un servicio de AV o Develup
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos Assistant *////////////////////////////////////////////////////////////////
$assistants = $request->request->get('assistant');
if(!empty($assistants)){
foreach($assistants as $assistant){
$supplierservices->setServiceId($assistant);
$supplierservices->setServiceCatId('15');
$supplierservices->setServiceCatName('Assistant');
$sqldata = $em->getRepository(SupplierServicesAssistant::class)->findOneById($assistant);
$supplierservices->setName($sqldata->getName());
$supplierservices->setPrice($sqldata->getPrice());
//$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission($sqldata->getCommission());
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva($sqldata->getIva());
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
//para pruebas
//$data_prueba[] = array(
// 'data' => $supplierservices
//);
}
//para pruebas
//d($data_prueba);
//exit();
}
/* metemos Services en Blanco *////////////////////////////////////////////////////////////////
$serviceswhite = $request->request->get('serviceswhite');
if(!empty($serviceswhite['id'])){
// d($serviceswhite['id']);
// exit();
$supplierservices->setServiceId('0');
switch ($serviceswhite['id']) {
case 1:
$supplierservices->setServiceCatId('1');
$supplierservices->setServiceCatName('Accommodation');
break;
case 2:
$supplierservices->setServiceCatId('2');
$supplierservices->setServiceCatName('Activities');
break;
case 3:
$supplierservices->setServiceCatId('3');
$supplierservices->setServiceCatName('Av');
break;
case 4:
$supplierservices->setServiceCatId('4');
$supplierservices->setServiceCatName('Creative');
break;
case 5:
$supplierservices->setServiceCatId('5');
$supplierservices->setServiceCatName('Cruise');
break;
case 6:
$supplierservices->setServiceCatId('6');
$supplierservices->setServiceCatName('Entertainment');
break;
case 7:
$supplierservices->setServiceCatId('7');
$supplierservices->setServiceCatName('Gifts');
break;
case 8:
$supplierservices->setServiceCatId('8');
$supplierservices->setServiceCatName('Guide');
break;
case 9:
$supplierservices->setServiceCatId('9');
$supplierservices->setServiceCatName('Itineraries');
break;
case 10:
$supplierservices->setServiceCatId('10');
$supplierservices->setServiceCatName('Lounge');
break;
case 11:
$supplierservices->setServiceCatId('11');
$supplierservices->setServiceCatName('Menu');
break;
case 12:
$supplierservices->setServiceCatId('12');
$supplierservices->setServiceCatName('Others');
break;
case 13:
$supplierservices->setServiceCatId('13');
$supplierservices->setServiceCatName('Transport');
break;
case 14:
$supplierservices->setServiceCatId('14');
$supplierservices->setServiceCatName('Technology');
break;
case 15:
$supplierservices->setServiceCatId('15');
$supplierservices->setServiceCatName('Assistant');
break;
case 16:
$supplierservices->setServiceCatId('16');
$supplierservices->setServiceCatName('DDR');
break;
}
$supplierservices->setName(' ');
$supplierservices->setPrice('0.00');
$supplierservices->setCurrency('Euro');
$supplierservices->setUnits('1');
$supplierservices->setCommission('0');
//$supplierservices->setOver('Accommodation');
$supplierservices->setIva('0');
$supplierservices->setPax('0');
//$supplierservices->setHour('');//null
//$supplierservices->setDateInAt('');
//$supplierservices->setDateOutAt('');
$supplierservices->setDirectPayment('0');
$supplierservices->setStatus('Pending');
$supplierservices->setStatusinternal($additional);
$em->persist($supplierservices);
$em->flush();
$em->clear();
}
$brief = $request->request->get('briefing');
if (!empty($brief) and empty($technologys) and ($technology_supplier == 'Develup')){
// Tenemos un briefing para Develup sin servicios agregados
// Nombre del agente
$agenteFullName = $em->getRepository(User::class)->findOneById($user_id);
$agenteFullName = $agenteFullName->getName() . ' ' . $agenteFullName->getLastName();
$budget = new MdvBudgetPending();
$budget->setActivityId(null);
$budget->setAssistantId(null);
$budget->setBreakdown(null);
$budget->setCommission(null);
$budget->setControlId($supplierCrtl->getId());
$budget->setOriginId(null);
$budget->setCurrency(null);
$budget->setDateBlockLimit(null);
$budget->setDateInAt(null);
$budget->setDateOutAt(null);
$budget->setDestinationId($supplierCrtl->getDestinoId());
$budget->setDirectPayment(null);
$budget->setHour(null);
$budget->setIdeaId(null);
$budget->setIsFather(null);
$budget->setIva(null);
$budget->setName(null);
$budget->setOpCommission(null);
$budget->setOpIva(null);
$budget->setOpOver(null);
$budget->setOriginalIva(null);
$budget->setOriginalopIva(null);
$budget->setOriginalPrice(null);
$budget->setOver(null);
$budget->setPax(null);
$budget->setPreCommission(null);
$budget->setPreIva(null);
$budget->setPrice(null);
$budget->setProposalId($supplierCrtl->getProposalId());
$budget->setRank(null);
$budget->setServiceCatId(null);
$budget->setServiceCatName(null);
$budget->setServiceId(null);
$budget->setServiceIdFather(null);
$budget->setStatus(null);
$budget->setStatusinternal(null);
$budget->setStatusRec(null);
$budget->setSupplierId($supplierCrtl->getSupplierId());
$budget->setUnits(null);
$budget->setTextTooltip(null);
$budget->setUserConfirmedFullName($agenteFullName);
$budget->setUserConfirmedId($user_id);
$budget->setProposalTitle($proposal_data->getTitle());
$budget->setBriefing($brief);
$budget->setCreatedAt(new \DateTime("now"));
$budget->setCreatedId($user_id);
$budget->setUpdatedId($user_id);
$budget->setUpdatedAt(new \DateTime("now"));
$em->persist($budget);
$em->flush();
//INICIO: Creamos el briefing
//Busacmos si ya hay un expediente asociado al proposal
$fileProp = $em->getRepository(MdvFiles::class)->findOneByIdProposal($supplierCrtl->getProposalId());
if (!empty($fileProp)){
$fileProp = $fileProp->getId();
}
$newBriefing = new MdvBriefings();
$newBriefing->setFileId($fileProp);
$newBriefing->setUserConfirmedId($user_id);
$newBriefing->setUserConfirmedFullName($agenteFullName);
$newBriefing->setBriefing($brief);
$newBriefing->setBudgetPendingId($budget->getId());
$newBriefing->setCreatedAt(new \DateTime("now"));
$newBriefing->setProposalId($supplierCrtl->getProposalId());
$em->persist($newBriefing);
$em->flush();
//FIN: Creamos el briefing
//INICIO: Enviamos Telegram
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
$file = $em->getRepository(MdvFiles::class)->findOneByIdProposal($proposal_data->getId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 5; // Id de Jorge
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$nombreDestino = $nombreDestino->getTitle();
//Mensaje:
//SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
$this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
// d($userTelegramId,'SOLICITUD DE PRESUPUESTO CON BRIEFING __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());exit();
//FIN: Enviamos Telegram
}
if (!empty($brief) and empty($avs) and ($av_supplier == 'AvExpress')){
// Tenemos un briefing para AvExpress sin servicios agregados
// Nombre del agente
$agenteFullName = $em->getRepository(User::class)->findOneById($user_id);
$agenteFullName = $agenteFullName->getName() . ' ' . $agenteFullName->getLastName();
$budget = new AveBudgetPending();
$budget->setActivityId(null);
$budget->setAssistantId(null);
$budget->setBreakdown(null);
$budget->setCommission(null);
$budget->setControlId($supplierCrtl->getId());
$budget->setOriginId(null);
$budget->setCurrency(null);
$budget->setDateBlockLimit(null);
$budget->setDateInAt(null);
$budget->setDateOutAt(null);
$budget->setDestinationId($supplierCrtl->getDestinoId());
$budget->setDirectPayment(null);
$budget->setHour(null);
$budget->setIdeaId(null);
$budget->setIsFather(null);
$budget->setIva(null);
$budget->setName(null);
$budget->setOpCommission(null);
$budget->setOpIva(null);
$budget->setOpOver(null);
$budget->setOriginalIva(null);
$budget->setOriginalopIva(null);
$budget->setOriginalPrice(null);
$budget->setOver(null);
$budget->setPax(null);
$budget->setPreCommission(null);
$budget->setPreIva(null);
$budget->setPrice(null);
$budget->setProposalId($supplierCrtl->getProposalId());
$budget->setRank(null);
$budget->setServiceCatId(null);
$budget->setServiceCatName(null);
$budget->setServiceId(null);
$budget->setServiceIdFather(null);
$budget->setStatus(null);
$budget->setStatusinternal(null);
$budget->setStatusRec(null);
$budget->setSupplierId($supplierCrtl->getSupplierId());
$budget->setUnits(null);
$budget->setTextTooltip(null);
$budget->setUserConfirmedFullName($agenteFullName);
$budget->setUserConfirmedId($user_id);
$budget->setProposalTitle($proposal_data->getTitle());
$budget->setBriefing($brief);
$budget->setCreatedAt(new \DateTime("now"));
$budget->setCreatedId($user_id);
$budget->setUpdatedId($user_id);
$budget->setUpdatedAt(new \DateTime("now"));
$em->persist($budget);
$em->flush();
$logMail = false;
//INICIO: Creamos el expediente en AV si es necesario
$fileAv = $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal_data->getId());
if (empty($fileAv)){
$fileAv = new AveFiles();
$fileAv->setTitle($proposal_data->getId().' - '. $proposal_data->getTitle());
$fileAv->setClient('262'); //In Out es el cliente
$fileAv->setPriority(null);
$fileAv->setSupplier(null);
$fileAv->setStatus(''); //El status no puede ir en nulo o no se listara el expediente
$fileAv->setDaysBlock(null);
$fileAv->setAdvancePayment(null);
$fileAv->setIdProposal($proposal_data->getId());
$fileAv->setCateringName(null);
$fileAv->setBoolCatering(null);
$fileAv->setDateStart($proposal_data->getDateEventStarAt());
$fileAv->setDateEnd($proposal_data->getDateEventEndAt());
$fileAv->setPax($proposal_data->getPax());
$fileAv->setDeposit(null);
$fileAv->setAccessKey(null);
$fileAv->setDescription(null);
$fileAv->setCreatedAt(new \DateTime("now"));
$fileAv->setCreatedId($user_id);
$fileAv->setUpdatedId($user_id);
$fileAv->setUpdatedAt(new \DateTime("now"));
$em->persist($fileAv);
$em->flush();
$logMail = true;
}
//FIN: Creamos el expediente en AV si es necesario
//INICIO: Notificamos por correo a Salvador y al agente
if ($logMail){
$mailAddressTo = 'salvador@avexpress.tv';
// $mailAddressTo = 'gustavo.ayala@develup.solutions';
$agente = $em->getRepository(User::class)->findOneById($user_id);
$mailAddressFrom = $agente->getEmail();
$mailSubject = 'Nuevo expediente solicitado por In Out';
$mailBody = 'Estimado proveedor,'.
'<br><br> Para nuestro evento: '. $proposal_data->getId().' - '. $proposal_data->getTitle().
'<br>Se ha creado automaticamente el expediente AV: '. $fileAv->getId().' con el mismo nombre de nuestro evento'.
'<br><br>Muchas gracias por su colaboración.<br><br>';
//El correo solo se enviara si no se ha enviado ya una alerta previamente
$this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
//Copia para el ayudante de AV (Temporal por vacaciones de Salvador)
// $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
// $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv'; // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025 - salvador@avexpress.tv
$mailAddressTo = 'salvador@avexpress.tv';
$this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
}
//FIN: Notificamos por correo a Salvador y al agente
//INICIO: Creamos el briefing
//Busacmos si ya hay un expediente asociado al proposal
$fileProp = $em->getRepository(AveFiles::class)->findOneByIdProposal($supplierCrtl->getProposalId());
if (!empty($fileProp)){
$fileProp = $fileProp->getId();
}
$newBriefing = new AveBriefings();
$newBriefing->setFileId($fileProp);
$newBriefing->setUserConfirmedId($user_id);
$newBriefing->setUserConfirmedFullName($agenteFullName);
$newBriefing->setBriefing($brief);
$newBriefing->setBudgetPendingId($budget->getId());
$newBriefing->setCreatedAt(new \DateTime("now"));
$newBriefing->setProposalId($supplierCrtl->getProposalId());
$em->persist($newBriefing);
$em->flush();
//FIN: Creamos el briefing
//INICIO: Enviamos Telegram
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
$file = $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal_data->getId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 14; // Id de Salvador
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($budget->getDestinationId());
$nombreDestino = $nombreDestino->getTitle();
//Mensaje:
$this->sendTelegram($userTelegramId,'SOLICITUD DE PRESUPUESTO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName());
//FIN: Enviamos Telegram
}
//INICIO: Notificamos por correo a Salvador y al agente del mensaje contenido en el briefing
$fileAv = $em->getRepository(AveFiles::class)->findOneByIdProposal($proposal_data->getId());
if (!empty($fileAv) and !empty($brief)){
$mailAddressTo = 'salvador@avexpress.tv';
$agente = $em->getRepository(User::class)->findOneById($user_id);
$mailAddressFrom = $agente->getEmail();
$mailSubject = 'Briefing enviado desde In Out: ' . $fileAv->getId().' - '.$fileAv->getTitle();
$mailBody = 'Estimado proveedor,'.
'<br><br> Para nuestro evento: '. $proposal_data->getId().' - '. $proposal_data->getTitle().
'<br>Relacionado con el expediente AV: '. $fileAv->getId().' - '.$fileAv->getTitle().
'<br><br>Le notificamos:<br><br>'.
$request->request->get('briefing').
'<br><br>Muchas gracias por su colaboración.<br><br>';
//El correo solo se enviara si no se ha enviado ya una alerta previamente
$this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
//Copia para el ayudante de AV (Temporal por vacaciones de Salvador)
// $mailAddressTo = 'ayudantedeproduccion@avexpress.tv';
// $mailAddressTo = 'ayudantedeproduccion2@avexpress.tv';
// $this->sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody);
}
//INICIO: Notificamos por correo a Salvador y al agente del mensaje contenido en el briefing
$event = 'The Services upload in Destination Proposal.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
$propControl = $em->getRepository(ProposalControl::class)->findOneBy(
array(
'proposalId' => $supplierCrtl->getProposalId(),
'destinationId' => $supplierCrtl->getControlDestinationId(),
)
);
return $this->redirectToRoute('proposal_destination_supplier_view', array(
'id' => (empty($propControl)) ? $supplierCrtl->getControlDestinationId() : $propControl->getId(),
'_fragment' => 's'.$idcontrol
));
}
/**
* @Route("proposal/destination/services/updated", name="proposal_destination_supplier_services_updates", methods={"POST"})
*/
public function udatedAction(EntityManagerInterface $em, Request $request)
{
$data_services = $request->request->get('services');
$services_supplier_proposal = $em->getRepository(ProposalSupplierServices::class)->findOneById($data_services['id']);
$services_supplier = $em->getRepository(ProposalSupplierControl::class)->findOneById($services_supplier_proposal->getControlId());
$logTelegram = false;
if(!is_null($data_services)){
if (array_key_exists('name_asistant',$data_services)){
// Se desea ver el nombre del servicio y no "Staff In Out Events: "
$prpSupSrv = $em->getRepository(ProposalsSupplierServicesAssistantName::class)->findOneByPrpSupSrvId($data_services['id']);
if (empty($prpSupSrv)){
$prpSupSrv = new ProposalsSupplierServicesAssistantName();
$prpSupSrv->setPrpSupSrvId($data_services['id']);
$em->persist($prpSupSrv);
$em->flush();
} else {
// No se necesita hacer nada, no se ha modificado el booleano de ver el nombre con relacion a la tabla
}
} else {
// Si no existe el indice puede deberse al tipo de servicio o al valor falso del booleano
if ($services_supplier_proposal->getServiceCatId() == 15){
// Se ha puesto en falso el boleano
// Se desea ver "Staff In Out Events: " y no el nombre
$prpSupSrv = $em->getRepository(ProposalsSupplierServicesAssistantName::class)->findOneByPrpSupSrvId($data_services['id']);
if (empty($prpSupSrv)){
// No esta en la tabla, no es necesaria ninguna accion
} else {
// Se debe remover de la tabla el elemento
$em->remove($prpSupSrv);
$em->flush();
}
}
}
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$services_supplier_proposal->getUpdatedId($user_id);
if (!empty($data_services['dateBlockLimit']) and $services_supplier_proposal->getStatus() =='Pending'){
$services_supplier_proposal->setStatus('Block');
}
if (!empty($data_services['dateBlockLimit'])){
$services_supplier_proposal->setDateBlockLimit(new \DateTime($data_services['dateBlockLimit'].' '.$data_services['timeBlockLimit'] ));
}
if (!is_null($services_supplier_proposal->getActivityId())){
if (empty($data_services['supplierId'])){
// $services_supplier_proposal->setSupplierId(null);
}else{
$services_supplier_proposal->setSupplierId($data_services['supplierId']);
}
}
if (!is_null($services_supplier_proposal->getIdeaId())){
if (empty($data_services['supplierId'])){
// $services_supplier_proposal->setSupplierId(null);
}else{
$services_supplier_proposal->setSupplierId($data_services['supplierId']);
}
}
if ($services_supplier->getSupplierId() == '0' and empty($data_services['assistantId'])){
if (empty($data_services['supplierId'])){
$services_supplier_proposal->setSupplierId('0');
}else{
$services_supplier_proposal->setSupplierId($data_services['supplierId']);
}
}
if (empty($data_services['assistantId'])){
$services_supplier_proposal->setAssistantId(null);
}else{
$services_supplier_proposal->setAssistantId($data_services['assistantId']);
}
$services_supplier_proposal->setName($data_services['name']);
$services_supplier_proposal->setPrice($data_services['price']);
//$services_supplier_proposal->setPreCommission($data_services['preCommission']);
$services_supplier_proposal->setPreCommission('0');
//$services_supplier_proposal->setPreIva($data_services['preIva']);
$services_supplier_proposal->setPreIva('0');
$services_supplier_proposal->setCurrency($data_services['currency']);
$services_supplier_proposal->setUnits($data_services['units']);
$services_supplier_proposal->setOriginalopIva($data_services['originalopIva']);
$services_supplier_proposal->setOriginalIva($data_services['originalIva']);
$services_supplier_proposal->setOriginalPrice($data_services['originalPrice']);
//Nuevos op -/+
$services_supplier_proposal->setOpCommission($data_services['opCommission']);
$services_supplier_proposal->setOpOver($data_services['opOver']);
$services_supplier_proposal->setOpIva($data_services['opIva']);
$services_supplier_proposal->setCommission($data_services['commission']);
$services_supplier_proposal->setOver($data_services['over']);
$services_supplier_proposal->setIva($data_services['iva']);
$services_supplier_proposal->setPax($data_services['pax']);
$services_supplier_proposal->setHour($data_services['hour']);
$services_supplier_proposal->setDateInAt(new \DateTime($data_services['dateInAt'].' '.$data_services['hour']));
$services_supplier_proposal->setDateOutAt(new \DateTime($data_services['dateOutAt'].' '.$data_services['end']));
if(isset($data_services['directPayment'])){
$services_supplier_proposal->setDirectPayment($data_services['directPayment']);
}else{
$services_supplier_proposal->setDirectPayment('0');
}
if(isset($data_services['breakdown'])){
$services_supplier_proposal->setBreakdown($data_services['breakdown']);
}else{
$services_supplier_proposal->setBreakdown('0');
}
switch ($data_services['rank']) {
case 0: $services_supplier_proposal->setRank('00'); break;
case 1: $services_supplier_proposal->setRank('01'); break;
case 2: $services_supplier_proposal->setRank('02'); break;
case 3: $services_supplier_proposal->setRank('03'); break;
case 4: $services_supplier_proposal->setRank('04'); break;
case 5: $services_supplier_proposal->setRank('05'); break;
case 6: $services_supplier_proposal->setRank('06'); break;
case 7: $services_supplier_proposal->setRank('07'); break;
case 8: $services_supplier_proposal->setRank('08'); break;
case 9: $services_supplier_proposal->setRank('09'); break;
default: $services_supplier_proposal->setRank($data_services['rank']); break;
}
// $services_supplier_proposal->setRank($data_services['rank']);
// INICIO: Verificamos si el servicio es una asistencia a duplicar en varios dÃas
if ($services_supplier_proposal->getServiceCatId() == 15) {
//Si el dia de entrada es menor al de salida se duplica la asistencia en varios dias
if (($services_supplier_proposal->getDateInAt())->format('Ymd') < ($services_supplier_proposal->getDateOutAt())->format('Ymd')){
// $ind = ($services_supplier_proposal->getDateOutAt())->format('Ymd') - ($services_supplier_proposal->getDateInAt())->format('Ymd') +1;
$ind = ($services_supplier_proposal->getDateInAt()->diff($services_supplier_proposal->getDateOutAt()))->days + 1;
$horaInicio = $data_services['hour'];
$horaFin = $data_services['end'];
$diaInicio = $data_services['dateInAt'];
$diaFin = $data_services['dateOutAt'];
for($i =0; $i < $ind; $i++){
// Si es el ultimo dia no se modifica la hora de fin
if ((substr($diaFin,0,4).substr($diaFin,5,2).substr($diaFin,8,2)) == ($services_supplier_proposal->getDateInAt())->format('Ymd')) {
$services_supplier_proposal->setDateInAt(new \DateTime($diaFin . ' '. $horaInicio));
$services_supplier_proposal->setDateOutAt(new \DateTime($diaFin . ' '. $horaFin));
} else {
// La hora de fin se establece a las 23:59
$xInicio = new \DateTime($diaInicio);
$xInicio->modify('+'.$i.' day');
$xInicio->setTime(23, 59);
// $elDia = substr($diaInicio,8,2) + $i;
$elDia = $xInicio;
// $services_supplier_proposal->setDateOutAt(new \DateTime(substr($diaInicio,0,4).'-'.substr($diaInicio,5,2).'-'. $elDia . ' '. '23:59'));
$services_supplier_proposal->setDateOutAt($elDia);
}
$em->persist($services_supplier_proposal);
$em->flush();
//Actualizar confirmado
if ($services_supplier_proposal->getStatus() =='Confirmed'){
$costsClient = $em->getRepository(ProposalSupplierServicesCostsClient::class)->findOneByServiceIdProposal($services_supplier_proposal->getId());
if (!empty($costsClient)){
$costsClient->setAssistantId($services_supplier_proposal->getAssistantId());
$costsClient->setName($services_supplier_proposal->getName());
$costsClient->setPrice($services_supplier_proposal->getPrice());
$costsClient->setCurrency($services_supplier_proposal->getCurrency());
$costsClient->setUnits($services_supplier_proposal->getUnits());
$costsClient->setOpCommission($services_supplier_proposal->getOpCommission());
$costsClient->setCommission($services_supplier_proposal->getCommission());
$costsClient->setOpOver($services_supplier_proposal->getOpOver());
$costsClient->setOver($services_supplier_proposal->getOver());
$costsClient->setOpIva($services_supplier_proposal->getOpIva());
$costsClient->setIva($services_supplier_proposal->getIva());
$costsClient->setPax($services_supplier_proposal->getPax());
$costsClient->setHour($services_supplier_proposal->getHour());
$costsClient->setDateInAt($services_supplier_proposal->getDateInAt());
$costsClient->setDateOutAt($services_supplier_proposal->getDateOutAt());
$costsClient->setRank($services_supplier_proposal->getRank());
$costsClient->setCreatedId($user_id);
$costsClient->setUpdatedId($user_id);
$em->persist($costsClient);
$em->flush();
}
}
$temp = $services_supplier_proposal;
$services_supplier_proposal = new ProposalSupplierServices();
$services_supplier_proposal->setServiceIdFather($temp->getServiceIdFather());
$services_supplier_proposal->setControlId($temp->getControlId());
$services_supplier_proposal->setProposalId($temp->getProposalId());
$services_supplier_proposal->setDestinationId($temp->getDestinationId());
$services_supplier_proposal->setSupplierId($temp->getSupplierId());
$services_supplier_proposal->setIdeaId($temp->getIdeaId());
$services_supplier_proposal->setActivityId($temp->getActivityId());
$services_supplier_proposal->setServiceId($temp->getServiceId());
$services_supplier_proposal->setServiceCatId($temp->getServiceCatId());
$services_supplier_proposal->setServiceCatName($temp->getServiceCatName());
$services_supplier_proposal->setName($temp->getName());
$services_supplier_proposal->setPrice($temp->getPrice());
$services_supplier_proposal->setCurrency($temp->getCurrency());
$services_supplier_proposal->setUnits($temp->getUnits());
$services_supplier_proposal->setCommission($temp->getCommission());
$services_supplier_proposal->setOver($temp->getOver());
$services_supplier_proposal->setIva($temp->getIva());
$services_supplier_proposal->setPax($temp->getPax());
$services_supplier_proposal->setHour($temp->getHour());
$services_supplier_proposal->setDateInAt($temp->getDateInAt()->modify('+1 day'));
$services_supplier_proposal->setDateOutAt($temp->getDateOutAt());
$services_supplier_proposal->setDirectPayment($temp->getDirectPayment());
$services_supplier_proposal->setStatus($temp->getStatus());
$services_supplier_proposal->setCreatedAt($temp->getCreatedAt());
$services_supplier_proposal->setCreatedId($temp->getCreatedId());
$services_supplier_proposal->setUpdatedAt($temp->getUpdatedAt());
$services_supplier_proposal->setUpdatedId($temp->getUpdatedId());
$services_supplier_proposal->setStatusinternal($temp->getStatusinternal());
$services_supplier_proposal->setPreCommission($temp->getPreCommission());
$services_supplier_proposal->setPreIva($temp->getPreIva());
$services_supplier_proposal->setDateBlockLimit($temp->getDateBlockLimit());
$services_supplier_proposal->setOpCommission($temp->getOpCommission());
$services_supplier_proposal->setOpOver($temp->getOpOver());
$services_supplier_proposal->setOpIva($temp->getOpIva());
$services_supplier_proposal->setBreakdown($temp->getBreakdown());
$services_supplier_proposal->setIsFather($temp->getIsFather());
$services_supplier_proposal->setRank($temp->getRank());
$services_supplier_proposal->setOriginalopIva($temp->getOriginalopIva());
$services_supplier_proposal->setOriginalIva($temp->getOriginalIva());
$services_supplier_proposal->setOriginalPrice($temp->getOriginalPrice());
$services_supplier_proposal->setStatusRec($temp->getStatusRec());
$services_supplier_proposal->setAssistantId($temp->getAssistantId());
}
$event = 'The Services updated in Destination Proposal.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
return $this->redirectToRoute('proposal_destination_supplier_view',
array(
'id' => $services_supplier->getControlDestinationId(),
'_fragment' => $data_services['id']
)
);
}
//En caso contrario es una asistencia de 1 dia o con fechas erroneas y se procesa como siempre
}
// FIN: Verificamos si el servicio es una asistencia a duplicar en varios dÃas
$em->persist($services_supplier_proposal);
$em->flush();
//INICIO: Sincronizamos en Develup y Notificamos (si es necesario)
if ($services_supplier->getSupplierId() == 2){
//Buscamos el servicio reflejo en develup
$productFile = $em->getRepository(MdvProductFile::class)->findOneByOriginId($services_supplier_proposal->getId());
$budPen = $em->getRepository(MdvBudgetPending::class)->findOneByOriginId($services_supplier_proposal->getId());
if (!empty($productFile) or !empty($budPen)){
$logTelegram = true;
}
if ($logTelegram){
//INICIO: Enviamos Telegram
if (!empty($productFile)){
// $productFile->setServicePrice(round(($services_supplier_proposal->getPrice())/1.21,2));
$productFile->setServicePrice($services_supplier_proposal->getPrice());
$productFile->setUnits($services_supplier_proposal->getUnits());
$productFile->setSubTotalPrice($services_supplier_proposal->getUnits()*$services_supplier_proposal->getPrice());
$em->persist($productFile);
$em->flush();
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
$file = $em->getRepository(MdvFiles::class)->findOneById($productFile->getFileId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 5; // Id de Jorge (Jefe de Departamento)
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
$nombreDestino = $nombreDestino->getTitle();
//Buscamos el nombre del agente
$userFullName = $em->getRepository(User::class)->findOneById($user_id);
$userFullName = $userFullName->getName().' '.$userFullName->getLastName();
//Mensaje:
$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);
} else {
// Se modifico un budPending
if (!empty($budPen)){
// $budPen->setPrice(round(($services_supplier_proposal->getPrice())/1.21,2));
$budPen->setPrice($services_supplier_proposal->getPrice());
$budPen->setUnits($services_supplier_proposal->getUnits());
$em->persist($budPen);
$em->flush();
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
$file = null;
$idProp = 0;
if (!empty($productFile)){
if (!empty($productFile->getFileId())){
$file = $em->getRepository(MdvFiles::class)->findOneById($productFile->getFileId());
if(!empty($file->getIdProposal())){
$idProp = $file->getIdProposal();
}
}
} else {
// Verificamos si a pesar de ser un Budget ya existe un expediente asociado a ese proposal
$idProp = $budPen->getProposalId();
$file = $em->getRepository(MdvFiles::class)->findOneByIdProposal($idProp);
}
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 5; // Id de Jorge (Jefe de Departamento)
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
$nombreDestino = $nombreDestino->getTitle();
//Buscamos el nombre del agente
$userFullName = $em->getRepository(User::class)->findOneById($user_id);
$userFullName = $userFullName->getName().' '.$userFullName->getLastName();
//Mensaje:
$this->sendTelegram($userTelegramId,'MODIFICACION DE SERVICIO (PRESUPUESTO) __ Nombre del producto: '.$budPen->getName().' __ Proposal ID: '.$idProp.' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$userFullName);
}
}
//FIN: Enviamos Telegram
}
}
//FIN: Sincronizamos en Develup y Notificamos (si es necesario)
//INICIO: Sincronizamos en AvExpress y Notificamos (si es necesario)
if ($services_supplier->getSupplierId() == 80){
//Buscamos el servicio reflejo en AvExpress
$productFile = $em->getRepository(AveProductFile::class)->findOneByOriginId($services_supplier_proposal->getId());
$budPen = $em->getRepository(AveBudgetPending::class)->findOneByOriginId($services_supplier_proposal->getId());
$productFile = null; $budPen = null; // AvExpress no deberia verse modificado por cambios de InOut
if (!empty($productFile) or !empty($budPen)){
$logTelegram = true;
}
if ($logTelegram){
//INICIO: Enviamos Telegram
if (!empty($productFile)){
// $productFile->setServicePrice(round(($services_supplier_proposal->getPrice())/1.21,2));
$productFile->setServicePrice($services_supplier_proposal->getPrice());
$productFile->setUnits($services_supplier_proposal->getUnits());
$productFile->setSubTotalPrice($services_supplier_proposal->getUnits()*$services_supplier_proposal->getPrice());
$em->persist($productFile);
$em->flush();
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
$file = $em->getRepository(AveFiles::class)->findOneById($productFile->getFileId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 14; // Id de Salvador (Jefe de Departamento)
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
$nombreDestino = $nombreDestino->getTitle();
//Buscamos el nombre del agente
$userFullName = $em->getRepository(User::class)->findOneById($user_id);
$userFullName = $userFullName->getName().' '.$userFullName->getLastName();
//Mensaje:
$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);
} else {
// Se modifico un budPending
if (!empty($budPen)){
// $budPen->setPrice(round(($services_supplier_proposal->getPrice())/1.21,2));
$budPen->setPrice($services_supplier_proposal->getPrice());
$em->persist($budPen);
$em->flush();
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
$file = null;
$idProp = 0;
if (!empty($productFile)){
if (!empty($productFile->getFileId())){
$file = $em->getRepository(AveFiles::class)->findOneById($productFile->getFileId());
if(!empty($file->getIdProposal())){
$idProp = $file->getIdProposal();
}
}
} else {
// Verificamos si a pesar de ser un Budget ya existe un expediente asociado a ese proposal
$idProp = $budPen->getProposalId();
$file = $em->getRepository(AveFiles::class)->findOneByIdProposal($idProp);
}
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 14; // Id de Salvador (Jefe de Departamento)
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($services_supplier->getDestinoId());
$nombreDestino = $nombreDestino->getTitle();
//Buscamos el nombre del agente
$userFullName = $em->getRepository(User::class)->findOneById($user_id);
$userFullName = $userFullName->getName().' '.$userFullName->getLastName();
//Mensaje:
$this->sendTelegram($userTelegramId,'MODIFICACION DE SERVICIO (PRESUPUESTO) __ Nombre del producto: '.$budPen->getName().' __ Proposal ID: '.$idProp.' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$userFullName);
}
}
//FIN: Enviamos Telegram
}
}
//FIN: Sincronizamos en AvExpress y Notificamos (si es necesario)
//Actualizar confirmado
if ($services_supplier_proposal->getStatus() =='Confirmed'){
$costsClient = $em->getRepository(ProposalSupplierServicesCostsClient::class)->findOneByServiceIdProposal($services_supplier_proposal->getId());
if (!empty($costsClient)){
// $costsClient->setSupplierId($services_supplier_proposal->getSupplierId());
$costsClient->setAssistantId($services_supplier_proposal->getAssistantId());
$costsClient->setName($services_supplier_proposal->getName());
$costsClient->setPrice($services_supplier_proposal->getPrice());
$costsClient->setCurrency($services_supplier_proposal->getCurrency());
$costsClient->setUnits($services_supplier_proposal->getUnits());
$costsClient->setOpCommission($services_supplier_proposal->getOpCommission());
$costsClient->setCommission($services_supplier_proposal->getCommission());
$costsClient->setOpOver($services_supplier_proposal->getOpOver());
$costsClient->setOver($services_supplier_proposal->getOver());
$costsClient->setOpIva($services_supplier_proposal->getOpIva());
$costsClient->setIva($services_supplier_proposal->getIva());
$costsClient->setPax($services_supplier_proposal->getPax());
$costsClient->setHour($services_supplier_proposal->getHour());
$costsClient->setDateInAt($services_supplier_proposal->getDateInAt());
$costsClient->setDateOutAt($services_supplier_proposal->getDateOutAt());
$costsClient->setRank($services_supplier_proposal->getRank());
$costsClient->setCreatedId($user_id);
$costsClient->setUpdatedId($user_id);
$em->persist($costsClient);
$em->flush();
}
}
$event = 'The Services updated in Destination Proposal.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajeproposaldestinationservicesrror', $errorMessage);
}
return $this->redirectToRoute('proposal_destination_supplier_view',
array(
'id' => $services_supplier->getControlDestinationId(),
'_fragment' => $data_services['id']
)
);
}
/**
* Editar el servicio cuando se envian los datos desde un presupuesto.
*
* @Route("proposal/destination/services/updated/budget", name="proposal_destination_supplier_services_updates_budget", methods={"POST"})
*/
function updateServiceByBudget(Request $request, EntityManagerInterface $em) : JsonResponse {
$jsonContent = $request->getContent();
$data = json_decode($jsonContent, true);
$user = $this->getUser();
$serviceBudget = $em->getRepository(ProposalSupplierServicesBudget::class)->find($data['id']);
if (!$serviceBudget) {
return $this->json(['message' => 'Service Budget not found'], JsonResponse::HTTP_NOT_FOUND);
}
// Convertir las fechas a objetos DateTime
$dateIn = new \DateTime($data['dateInAt']);
$dateOut = new \DateTime($data['dateOutAt']);
// Calcular la diferencia entre las fechas
$interval = $dateIn->diff($dateOut);
// Obtener la diferencia en dÃas
$differenceInDays = $interval->days +1;
//Calculamos el neto
$units = $data['units'] != 0 ? $data['units'] : 1.0;
$pax = $data['pax'] != 0 ? $data['pax'] : 1.0;
$neto = $data['price'] * $units * $pax * $differenceInDays;
$total = $neto * (1 + ($data['iva']/100));
$serviceBudget->setUpdatedId($user->getId())
->setDays($differenceInDays)
->setPrice($data['price'])
->setDateInAt(new \DateTime($data['dateInAt']))
->setDateOutAt(new \DateTime($data['dateOutAt']))
->setUnits($data['units'])
->setPax($data['pax'])
->setIva($data['iva'])
->setNetAmount($neto)
->setTotal(number_format($total, 2, '.', ''))
->setName($data['name']);
try {
// La entidad $service ahora tiene los campos actualizados según el JSON
// Los campos no presentes en el JSON mantienen sus valores actuales en la base de datos
$em->persist($serviceBudget);
$em->flush();
return $this->json(['status' => 'success', 'msg' => 'Service updated successfully', 'data' => $serviceBudget], JsonResponse::HTTP_OK);
} catch (\Exception $e) {
return new JsonResponse(['status' => 'error', 'msg' => 'An error occurred', 'detail' => $e->getMessage()], JsonResponse::HTTP_BAD_REQUEST);
}
return $this->json($serviceBudget, JsonResponse::HTTP_OK);
}
/**
* @Route("proposal/destination/services/status/{status}/{id}", name="proposal_destination_supplier_services_status")
*/
public function udatedStatusAction($status, $id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$services_supplier_proposal = $em->getRepository(ProposalSupplierServices::class)->findOneById($id);
$idp = $services_supplier_proposal->getProposalId();
$services_supplier = $em->getRepository(ProposalSupplierControl::class)->findOneById($services_supplier_proposal->getControlId());
if(!empty($services_supplier_proposal))
{
if ($status == "Confirmed"){
//confirmar proposal
$proposal= $em->getRepository(Proposal::class)->findOneById($services_supplier_proposal->getProposalId());
// Envio correo a administracion en caso que de cambie el estatus y este como no enviado
if($proposal->getSendAdmin() != "yes"){
$time = new \DateTime("now");
$agent = $em->getRepository(User::class)->findOneById($proposal->getAgentId());
$mailAgent[] = $agent->getEmail();
$agentMail = $agent->getEmail();
$passGmail = $agent->getPassGmail();
$firmGmail = $agent->getFirmGmail();
$mailAgentSent = array(
$agent->getEmail() => $agent->getName().' '. $agent->getLastName()
);
$setting_rol = $em->getRepository(SettingsRol::class)->findBy(
array(
'weight' => array('2','3'),
'madmin' => '1',
)
);
foreach($setting_rol as $settingRol){
$administration = $em->getRepository(User::class)->findByUserrol($settingRol->getId());
foreach($administration as $admin){
$mailAdmin[] = $admin->getEmail();
}
}
$data = array(
'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>',
'firm' => $firmGmail,
);
$mailTodos = array_merge($mailAgent, $mailAdmin);
}
if ($proposal->getStatus() != "Invoiced"){
$proposal->setStatus('Confirmed');
}
$em->persist($proposal);
}
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$services_supplier_proposal->setUpdatedId($user_id);
$services_supplier_proposal->setStatus($status);
$em->persist($services_supplier_proposal);
$em->flush();
/* INICIO ACTUALIZAR CONFIRMADOS */
/* SI ESTA FACTURADO NO SE PERMITE ACTUALIZAR LA BASE DE DATOS */
$novatinvoice= $em->getRepository(ProposalNoVatInvoice::class)->findOneByProposalId($idp);
$invoice= $em->getRepository(ProposalInvoice::class)->findOneByProposalId($idp);
if (is_null($invoice) and is_null($novatinvoice)){
$services_hay = $em->getRepository(ProposalSupplierServices::class)->findBy(
array(
'proposalId' => $idp,
'status' => 'Confirmed'
),
array(
'id' => 'ASC'
)
);
/* INSERTAMOS Y ACTUALIZAMOS LA BASE DE DATOS ProposalSupplierServicesCostsClient*/
foreach($services_hay as $serviceshay) {
if (!is_null($serviceshay->getSupplierId()) && $serviceshay->getSupplierId() != '0' && $serviceshay->getDirectPayment() == '0'){
$costsClientHay = $em->getRepository(ProposalSupplierServicesCostsClient::class)->findOneBy(
array(
'proposalId' => $idp,
'serviceIdProposal' => $serviceshay->getId(),
)
);
if (empty($costsClientHay)){
//COLOR POR SERVICIO
$contcolor ="";
switch ($serviceshay->getServiceCatName()) {
case "Accommodation":
$contcolor = 'teal';
break;
case "Menu" :
$contcolor = 'purple';
break;
case "Lounge":
$contcolor = 'warning';
break;
case "Activities":
$contcolor = 'blue';
break;
case "Itineraries":
$contcolor = 'indigo';
break;
case "Cruise":
$contcolor = 'brown';
break;
case "Transport":
$contcolor = 'grey';
break;
case "Av":
$contcolor = 'slate';
break;
case "Creative":
$contcolor = 'orange';
break;
case "Gifts":
$contcolor = 'pink';
break;
case "Entertainment":
$contcolor = 'green';
break;
case "Guide":
$contcolor = 'orange';
break;
case "Others":
$contcolor = 'danger';
break;
case "Technology":
$contcolor = 'slate-800';
break;
case "Assistant":
$contcolor = 'indigo-800';
break;
case "DDR":
$contcolor = 'green-300';
break;
}
/* Para dentro de ProposalSupplierServicesCostsClient */
$costsClient = new ProposalSupplierServicesCostsClient();
$costsClient->setServiceIdProposal($serviceshay->getId());
$costsClient->setServiceIdFather($serviceshay->getServiceIdFather());
$costsClient->setControlId($serviceshay->getControlId());
$costsClient->setProposalId($serviceshay->getProposalId());
$costsClient->setDestinationId($serviceshay->getDestinationId());
$costsClient->setSupplierId($serviceshay->getSupplierId());
$costsClient->setAssistantId($serviceshay->getAssistantId());
$costsClient->setIdeaId($serviceshay->getIdeaId());
$costsClient->setActivityId($serviceshay->getActivityId());
$costsClient->setServiceId($serviceshay->getServiceId());
$costsClient->setServiceCatId($serviceshay->getServiceCatId());
$costsClient->setServiceCatName($serviceshay->getServiceCatName());
$costsClient->setName($serviceshay->getName());
$costsClient->setPrice($serviceshay->getPrice());
$costsClient->setCurrency($serviceshay->getCurrency());
$costsClient->setUnits($serviceshay->getUnits());
$costsClient->setOpCommission($serviceshay->getOpCommission());
$costsClient->setCommission($serviceshay->getCommission());
$costsClient->setOpOver($serviceshay->getOpOver());
$costsClient->setOver($serviceshay->getOver());
$costsClient->setOpIva($serviceshay->getOpIva());
$costsClient->setIva($serviceshay->getIva());
$costsClient->setPax($serviceshay->getPax());
$costsClient->setHour($serviceshay->getHour());
$costsClient->setDateInAt($serviceshay->getDateInAt());
$costsClient->setDateOutAt($serviceshay->getDateOutAt());
$costsClient->setRank($serviceshay->getRank());
$costsClient->setCreatedId($user_id);
$costsClient->setUpdatedId($user_id);
$costsClient->setContcolor($contcolor);
$costsClient->setRenovate('1');
$em->persist($costsClient);
$em->flush();
}else{
$costsClientHay->setAssistantId($serviceshay->getAssistantId());
$costsClientHay->setUpdatedId($user_id);
$costsClientHay->setRenovate('1');
$em->persist($costsClientHay);
$em->flush();
}
}
}
/* Consulta para limpiar los que ya no estan confirmados en servicios */
$limpiar_services = $em->getRepository(ProposalSupplierServicesCostsClient::class)->findBy(
array(
'proposalId' => $idp,
'renovate' => '0'
)
);
if (!empty($limpiar_services)){
foreach ($limpiar_services as $limpiarServices) {
$em->remove($limpiarServices);
}
$em->flush();
}
/* Consulta para renovar a cero en exists todos */
$renovate_services = $em->getRepository(ProposalSupplierServicesCostsClient::class)->findBy(
array(
'proposalId' => $idp,
'renovate' => '1'
)
);
if (!empty($renovate_services)){
foreach ($renovate_services as $renovateServices) {
$renovateServices->setRenovate('0');
$em->flush();
}
}
}
/* FIN ACTUALIZAR CONFIRMADOS */
$event = 'The Status Services updated in Destination Proposal.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajeproposaldestinationservicesrror', $errorMessage);
}
$url='#'.$id;
return $this->redirectToRoute('proposal_destination_supplier_view',
array(
'id' => $services_supplier->getControlDestinationId(),
'_fragment' => $id
)
);
}
/**
* @Route("proposal/destination/services/statusrec/{status}/{id}", name="proposal_destination_supplier_services_recommended")
*/
public function udatedRecommendedAction($status, $id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$services_supplier_proposal = $em->getRepository(ProposalSupplierServices::class)->findOneById($id);
$services_supplier = $em->getRepository(ProposalSupplierControl::class)->findOneById($services_supplier_proposal->getControlId());
$proposal = $em->getRepository(Proposal::class)->findOneById($services_supplier->getProposalId());
if(!empty($services_supplier_proposal))
{
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$services_supplier_proposal->setUpdatedId($user_id);
$services_supplier_proposal->setStatusRec($status);
$em->persist($services_supplier_proposal);
$em->flush();
$event = 'The Status Services updated in Destination Proposal.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajeproposaldestinationservicesrror', $errorMessage);
}
$url='#'.$id;
return $this->redirectToRoute('proposal_destination_supplier_makeyourbudget',
array(
'id' => $proposal->getId(),
'_fragment' => $id
)
);
}
/**
* @Route("proposal/destination/services/rank/{id}", name="proposal_destination_supplier_services_rank")
*/
public function udatedRankAction($id, Request $request)
{
$rank = $request->request->get('rank')['rank'];
$em = $this->getDoctrine()->getManager();
$services_control = $em->getRepository(ProposalSupplierControl::class)->findOneById($id);
if(!empty($services_control))
{
$services_control->setRank($rank);
$em->persist($services_control);
$em->flush();
$event = 'The Rank Services updated in Destination Proposal.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
}else{
$errorMessage = $this->translator->trans('Error');
$this->addFlash('mensajeproposaldestinationservicesrror', $errorMessage);
}
$url='#'.$id;
return $this->redirectToRoute('proposal_destination_supplier_view',
array(
'id' => $services_control->getControlDestinationId(),
'_fragment' => $id
)
);
}
/**
* @Route("proposal/destination/services/services-deleted/{id}", name="proposal_destination_supplier_services_deleted")
*
*/
// public function deleteAction($id, Request $request, LoggerInterface $logger)
public function deleteServicesAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$logTelegram = false;
$delete = $em->getRepository(ProposalSupplierServices::class)->findOneById($id);
$services_supplier = $em->getRepository(ProposalSupplierControl::class)->findOneById($delete->getControlId());
$destinationId = $delete->getDestinationId();
$delete_sub = $em->getRepository(ProposalSupplierServices::class)->findByServiceIdFather($delete->getId());
foreach($delete_sub as $deletesub){
$em->remove($deletesub);
}
$em->remove($delete);
$em->flush();
$event = 'The Services Supplier Proposal has been Deleted.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
//INICIO: Si existe su correspondiente en Develup se debe modificar y notificar
$prodFile = $em->getRepository(MdvProductFile::class)->findOneByOriginId($id);
$budPen = $em->getRepository(MdvBudgetPending::class)->findOneByOriginId($id);
if (!empty($prodFile)){
$prodFile->setProductName($prodFile->getProductName().' (ELIMINADO DEL PROPOSAL)');
$em->persist($prodFile);
$em->flush();
$logTelegram = true;
}
if (!empty($budPen)){
$budPen->setName($budPen->getName().' (ELIMINADO DEL PROPOSAL)');
$em->persist($budPen);
$em->flush();
$logTelegram = true;
}
if ($logTelegram){
//INICIO: Enviamos Telegram
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
$file = $em->getRepository(MdvFiles::class)->findOneByIdProposal($services_supplier->getProposalId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 5; // Id de Jorge
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Jorge)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($destinationId);
$nombreDestino = $nombreDestino->getTitle();
//Buscamos el usuario logeado
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$agenteFullName = $em->getRepository(User::class)->findOneById($user_id);
$agenteFullName = $agenteFullName->getName() . ' ' . $agenteFullName->getLastName();
//Mensaje:
//SERVICIO ELIMINADO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
$this->sendTelegram($userTelegramId,'SERVICIO ELIMINADO __ ID: '.$services_supplier->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$agenteFullName);
//FIN: Enviamos Telegram
$logTelegram = false; //Evitamos que un telegram para develup se envie para avexpress
}
//FIN: Si existe su correspondiente en Develup se debe modificar y notificar
//INICIO: Si existe su correspondiente en AvExpress se debe modificar y notificar
$prodFile = $em->getRepository(AveProductFile::class)->findOneByOriginId($id);
$budPen = $em->getRepository(AveBudgetPending::class)->findOneByOriginId($id);
if (!empty($prodFile)){
$prodFile->setProductName($prodFile->getProductName().' (ELIMINADO DEL PROPOSAL)');
$em->persist($prodFile);
$em->flush();
$logTelegram = true;
}
if (!empty($budPen)){
$budPen->setName($budPen->getName().' (ELIMINADO DEL PROPOSAL)');
$em->persist($budPen);
$em->flush();
$logTelegram = true;
}
if ($logTelegram){
//INICIO: Enviamos Telegram
//INICIO: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
$file = $em->getRepository(AveFiles::class)->findOneByIdProposal($services_supplier->getProposalId());
if(!empty($file)){
//Se envia el mensaje al creador del expediente
$userTelegramId = $file->getCreatedId();
} else {
// Solicitud sin expediente, se le notificara la jefe de departamento
$userTelegramId = 14; // Id de Salvador
}
//FIN: Buscamos el creador del expediente asociado al proposal, si no hay se le envia al jefe de grupo (Salvador)
//Buscamos el nombre del destino
$nombreDestino = $em->getRepository(Destination::class)->findOneById($destinationId);
$nombreDestino = $nombreDestino->getTitle();
//Buscamos el usuario logeado
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$agenteFullName = $em->getRepository(User::class)->findOneById($user_id);
$agenteFullName = $agenteFullName->getName() . ' ' . $agenteFullName->getLastName();
//Mensaje:
//SERVICIO ELIMINADO __ ID: '.$budget->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$budget->getUserConfirmedFullName()
$this->sendTelegram($userTelegramId,'SERVICIO ELIMINADO __ ID: '.$services_supplier->getProposalId().' __ DESTINO: '.$nombreDestino.' __ PROVEEDOR: In Out Travel __ CONTACTO: '.$agenteFullName);
//FIN: Enviamos Telegram
}
//FIN: Si existe su correspondiente en AvExpress se debe modificar y notificar
return $this->redirectToRoute('proposal_destination_supplier_view',
array(
'id' => $services_supplier->getControlDestinationId(),
'_fragment' => 's'.$delete->getControlId()
)
);
}
/**
* @Route("/proposals/block/events", name="get_proposal_select_block")
*/
public function proposalblockSelectAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$parametersp = array(
'agentId' => $user_id,
'agentTwoId' => array($user_id),
'status' => 'Pending',
);
$dqlp = 'SELECT p
FROM EventsBundle:Proposal p
WHERE ( p.agentId = :agentId OR p.agentTwoId in(:agentTwoId) )
AND p.status = :status';
$queryp = $em->createQuery($dqlp)->setParameters($parametersp);
$proposals = $queryp->getResult();
$datos = array();
if (!empty($proposals)){
foreach($proposals as $proposal){
$parameters = array(
'proposalId' => $proposal->getId(),
);
$dql = 'SELECT p
FROM EventsBundle:ProposalSupplierServices p
WHERE p.proposalId = :proposalId
AND p.dateBlockLimit IS NOT NULL';
$query = $em->createQuery($dql)->setParameters($parameters);
$services = $query->getResult();
$color = "#FF8A65";
$pre_title = $this->translator->trans('Blocking limit');
foreach($services as $service){
$control = $em->getRepository(ProposalSupplierControl::class)->findOneById($service->getControlId());
$tooltip = '<span>'.$service->getName().'<br>'.$pre_title.': '.$service->getDateBlockLimit()->format('d-m-Y H:m').'</span>';
$datos[] = array(
"id" => $proposal->getId(),
"title" => $pre_title.': '.$proposal->getName(),
"tooltip" => $tooltip,
"start" => $service->getDateBlockLimit(),
"end" => $service->getDateBlockLimit(),
"color" => $color,
"url" => "/events/proposal/destination/services/add/".$control->getcontrolDestinationId()."#".$service->getId(),
);
}
}
}
else
{
$datos = [];
}
$return = array(
'block' => $datos,
);
$response = new JsonResponse($return);
return $response;
}
// Funcion para insertar historico de seguimiento
// $textHistory = $this->translator->trans('');
// $history = $this->TracingHistoryOperations($proposal->getId(), $text);
private function TracingHistoryOperations($id, $text)
{
$em = $this->getDoctrine()->getManager();
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$history = new ProposalTracing();
$history->setDateAt(new \DateTime('now'));
$history->setText($text);
$history->setAgentId($user_id);
$history->setProposalId($id);
$history->setViewed('no');
$history->setCreatedId($user_id);
$history->setUpdatedId($user_id);
$em->persist($history);
$em->flush();
$success = 'success';
return $success;
}
private function sendTelegram ( $id, $text )
{
$em = $this->getDoctrine()->getManager();
$telegUser = $em->getRepository(MdvTelegramUser::class)->findOneByUserId($id);
if (empty($telegUser)){return true;}
$parameters = array(
'chat_id' => $telegUser->getChatId(),
'text' => $text,
);
$bot_token = $telegUser->getBotToken();
$url = "https://api.telegram.org/bot$bot_token/sendMessage";
if (!$curl = curl_init()){
exit();
}
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,$parameters);
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$output = curl_exec($curl);
curl_close($curl);
return true;
}
private function sendMailInternal($mailAddressFrom, $mailAddressTo, $mailSubject, $mailBody){
$em = $this->getDoctrine()->getManager();
$agent = $em->getRepository(User::class)->findOneByEmail($mailAddressFrom);
$client = $em->getRepository(User::class)->findOneByEmail($mailAddressTo);
$replyTo = array(
$client->getEmail() => $client->getName(),
$agent->getEmail() => $agent->getName().' '. $agent->getLastName(),
// 'ayudantedeproduccion@avexpress.tv' => 'ayudantedeproduccion@avexpress.tv',
// 'ayudantedeproduccion2@avexpress.tv' => 'ayudantedeproduccion2@avexpress.tv', // Solo Salva debe recibir los correos. Indicaciones de Salva 20/11/2025 - salvador@avexpress.tv
'salvador@avexpress.tv' => 'salvador@avexpress.tv',
);
$agentMail = $mailAddressFrom;
$mailAgent = $agentMail;
//Se prepara el correo con los agentes a notificar
$firmGmail = $agent->getFirmGmail();
$data = array(
'body' => $mailBody,
'firm' => $firmGmail,
);
// EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
$transporter = new Swift_SmtpTransport();
$transporter->setHost('smtp.gmail.com')
->setEncryption('ssl')//ssl / tls
->setPort(465)// 465 / 587
->setUsername('desarrollo@develup.solutions')
->setPassword('utvh hzoi wfdo ztjs');
$mailer = new Swift_Mailer($transporter);
$message = new Swift_Message();
$message->setSubject($mailSubject)
->setSender($agentMail)
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setReplyTo($agentMail)
->setTo($replyTo)
->setBody(
$this->renderView(
'mail/structure-mail.html.twig',
array('data' => $data)
),
'text/html'
);
$mailer->send($message);
return true;
}
}