src/MDS/CommercialBundle/Controller/CommercialTrackingController.php line 607

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * User: jorge.defreitas@develup.solutions
  5.  * Date: 17/10/2017
  6.  * Time: 11:05
  7.  */
  8. namespace App\MDS\CommercialBundle\Controller;
  9. use App\Entity\Client;
  10. use App\Entity\ClientContact;
  11. use App\Entity\SettingsRol;
  12. use App\Entity\SettingsTeam;
  13. use App\Entity\Supplier;
  14. use App\Entity\SupplierContact;
  15. use App\Entity\User;
  16. use App\MDS\CommercialBundle\Entity\CommercialBreakdownVolume;
  17. use App\MDS\CommercialBundle\Entity\CommercialBreakdownVolumeControl;
  18. use App\MDS\CommercialBundle\Entity\CommercialTracking;
  19. use App\MDS\CommercialBundle\Form\CommercialTrackingType;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\Validator\Constraints as Assert;
  25. use Symfony\Component\Validator\Validator\ValidatorInterface;
  26. use Symfony\Contracts\Translation\TranslatorInterface;
  27. class CommercialTrackingController  extends AbstractController
  28. {
  29.     private $translator;
  30.     private $validator;
  31.     public function __construct(TranslatorInterface $translatorValidatorInterface $validator) {
  32.         $this->translator $translator;
  33.         $this->validator $validator;
  34.     }
  35.     
  36.     /**
  37.      * @Route("/tracking/prueba/{page}", name="commercial_tracking_list_prueba")
  38.      */
  39.     public function listPruebaAction($pageRequest $request)
  40.     {
  41.         $limit 10;
  42.         $em $this->getDoctrine()->getManager();
  43.         $tracking_base $em->getRepository(CommercialTracking::class);
  44.         $paginator $tracking_base->paginateDos($limit$page);
  45. //        $paginator->findAll(array(),array('dateAt' => 'DESC'));
  46.         $totalItems count($paginator);
  47.         $pagesCount ceil($totalItems $limit);
  48.         return $this->render('MDS/CommercialBundle/tracking/list-prueba-tracking.html.twig', array(
  49.             'trackings' => $paginator,
  50.             'totalItems' => $totalItems,
  51.             'pagesCount' => $pagesCount,
  52.             'thisPage' => $page
  53.         ));
  54.     }
  55.     /**
  56.      * @Route("/tracking/list/{page}/{id}", defaults={"page" = 1, "id" = 0}, name="commercial_tracking_list")
  57.      */
  58.     public function listAction($page$idRequest $request)
  59.     {
  60.         $limit 10;
  61.         $em $this->getDoctrine()->getManager();
  62.         $trackingBase $em->getRepository(CommercialTracking::class);
  63.         /* Obtengo usuario logueado */
  64.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  65.         $user_id $user_logueado->getId();
  66.         $user_role $user_logueado->getRole();
  67.         $user_userrol $user_logueado->getUserrol();
  68.         $user_team $user_logueado->getTeam();
  69.         $user_teamleader $user_logueado->getTeamleader();
  70.         /* VERIFICAR EL weight DEL USUARIO */
  71.         $accesoNivel $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  72.         $nivelAcceso $accesoNivel->getWeight();
  73.         $tracking = array();
  74.         $usertitle = array();
  75.         $verNombre="no";
  76.         $user_url = array();
  77.         if( ( $user_role == "ROLE_ADMIN" || ($nivelAcceso <= '3' AND $user_teamleader == true) )  AND $id == "0"){
  78. //            $tracking = $em->getRepository(CommercialTracking::class)->findBy(
  79. //                array(),
  80. //                array('id' => 'DESC')
  81. //            );
  82.             $user_del_team $em->getRepository(User::class)->findByTeam($user_team);
  83.             $teamId = array();
  84.             foreach($user_del_team as $user){
  85.                 $teamId[] = $user->getId();
  86.                 $user_url[$user->getId()] = array(
  87.                     'userid' => $user->getId(),
  88.                     'name' => $user->getName()
  89.                 );
  90.             };
  91. //            d($user_url);
  92.             $teamIdverimplode(","$teamId);
  93.             if (!empty($request->request->get('buscarClient')['palabra'])){
  94.                 $buscarPalabra $request->request->get('buscarClient')['palabra'];
  95.                 // CONSULTA A ENTIDAD CLIENTE PARA SACAR EL ID DEL CLIENTE QUE RESULTE DE LA CONSULTA
  96.                 $limit 100;
  97.                 $parametersBs = array(
  98.                     'name' => '%'.$buscarPalabra.'%',
  99.                     'title' => '%'.$buscarPalabra.'%',
  100.                 );
  101.                 $dqlBs 'SELECT cl.id
  102.                 FROM App:Client cl
  103.                 WHERE cl.name LIKE :name OR cl.title LIKE :title';
  104.                 $queryBs $em->createQuery($dqlBs)->setParameters($parametersBs);
  105.                 $consultaDentroCliente $queryBs->getResult();
  106.                 $hay=array();
  107.                 foreach($consultaDentroCliente as $dentro){
  108.                     $hay[] = $dentro['id'];
  109.                 }
  110.                 if(!empty($hay)){
  111.                     $id_hay implode(","$hay);
  112.                 }else{
  113.                     $id_hay "0";
  114.                 }
  115. //                $dql = "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p WHERE p.clientId IN($id_hay) ORDER BY p.id DESC";
  116.                 if ($user_role == "ROLE_ADMIN"){
  117.                     $dql "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p WHERE p.clientId IN($id_hay) ORDER BY p.id DESC";
  118.                 }else{
  119.                     $dql "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p WHERE p.clientId IN($id_hay) AND p.commercialId IN($teamIdver) ORDER BY p.id DESC";
  120.                 }
  121.             }else{
  122. //                $dql = "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p";
  123.                 if ($user_role == "ROLE_ADMIN"){
  124.                     $dql "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p ORDER BY p.id DESC";
  125.                 }else{
  126.                     $dql "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p WHERE p.commercialId IN($teamIdver) ORDER BY p.id DESC";
  127.                 }
  128.             }
  129.             $usertitle = array(
  130.                 'name' => 'All Tracking',
  131.                 'lastname' => '',
  132.                 'team' => 'Everybody'
  133.             );
  134.             $verNombre="si";
  135.         }else{
  136.             if(( $user_role == "ROLE_USER" AND $nivelAcceso '2' AND $user_teamleader == false ) AND ($id == "0" OR $id != "0")){
  137.                 $id $user_id;
  138.                 $verNombre="no";
  139.             }
  140. //            $tracking = $em->getRepository(CommercialTracking::class)->findBy(
  141. //                array('commercialId' => $id),
  142. //                array('id' => 'DESC')
  143. //            );
  144.             if (!empty($request->request->get('buscarClient')['palabra'])){
  145.                 // CONSULTA A ENTIDAD CLIENTE PARA SACAR EL ID DEL CLIENTE QUE RESULTE DE LA CONSULTA
  146.                 $limit 100;
  147.                 $parametersBs = array(
  148.                     'name' => '%'.$buscarPalabra.'%',
  149.                     'title' => '%'.$buscarPalabra.'%',
  150.                 );
  151.                 $dqlBs 'SELECT cl.id
  152.                 FROM App:Client cl
  153.                 WHERE cl.name LIKE :name OR cl.title LIKE :title';
  154.                 $queryBs $em->createQuery($dqlBs)->setParameters($parametersBs);
  155.                 $consultaDentroCliente $queryBs->getResult();
  156.                 $hay=array();
  157.                 foreach($consultaDentroCliente as $dentro){
  158.                     $hay[] = $dentro['id'];
  159.                 }
  160.                 $id_hayimplode(","$hay);
  161.                 $dql "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p WHERE p.clientId IN($id_hay) AND p.commercialId = $id";
  162.             }else{
  163.                 $dql "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p WHERE p.commercialId = $id ORDER BY p.id DESC";
  164. //                $dql = "SELECT p FROM App\MDS\CommercialBundle\Entity\CommercialTracking p WHERE p.commercialId = $id";
  165.             }
  166.             $usertitle $em->getRepository(User::class)->findOneById($id);
  167.             $team $em->getRepository(SettingsTeam::class)->findOneById($usertitle->getTeam());
  168.             $usertitle->setTeam($team->getTeam());
  169.         }
  170.         $tracking =  $trackingBase->paginate($dql$limit$page);
  171.         $totalItems count($tracking);
  172.         $pagesCount ceil($totalItems $limit);
  173.         $data = array();
  174.         $client = array();
  175.         $n="0";
  176.         foreach($tracking as $trackings){
  177. //            d($trackings);
  178.             $user $em->getRepository(User::class)->findOneById($trackings->getCommercialId());
  179.             $team $em->getRepository(SettingsTeam::class)->findOneById($user->getTeam());
  180.             $clientType $trackings->getClientType();
  181.             if($clientType == 'client') {
  182.                 $parameters = array(
  183.                     'clientId' => $trackings->getClientId()
  184.                 );
  185.                 $dql 'SELECT cl
  186.                 FROM App:Client cl
  187.                 INNER JOIN App:Country c WITH c.id = cl.country
  188.                 INNER JOIN App:Regions p WITH p.id = cl.region
  189.                 INNER JOIN App:Provinces pr WITH pr.id = cl.province
  190.                 INNER JOIN App:Cities r WITH r.id = cl.population
  191.                 WHERE cl.id = :clientId';
  192. //                ORDER BY p.dateProposedAt DESC';
  193.                 $query $em->createQuery($dql)->setParameters($parameters);
  194.                 $client $query->getResult();
  195. //                ACA
  196.                 $contact $em->getRepository(ClientContact::class)->findOneById($trackings->getContactId());
  197.                 $breakdownControl $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneBy(
  198.                     array(
  199.                         'clientId' => $trackings->getClientId(),
  200.                         'contactId' => $trackings->getContactId(),
  201.                     )
  202.                 );
  203.                 $breakdown null;
  204.                 if (!empty($breakdownControl)){
  205.                     $breakdown $em->getRepository(CommercialBreakdownVolume::class)->findByControlId($breakdownControl->getId());
  206.                 }
  207.                 $fecha $trackings->getDateAt()->format('d/m/Y');
  208.                 $countClient count($client);
  209.                 if($countClient === 0){
  210.                     $clientP null;
  211. //                    d('es cero'); die();
  212.                 }else{
  213.                     $clientP $client[0];
  214.                 }
  215. //                if($client !== null or $client !== 0 or !empty($client) or $countClient !== 0){
  216. ////                if($client !== null or $client !== 0 or !empty($client) or $countClient === 0){
  217. //                    d('viene lleno'); die();
  218. //
  219. //                }else if($countClient === 0){
  220. //                    d('vacio'); die();
  221. //                }
  222.                 $data[] = array(
  223.                     'id' => $trackings->getId(),
  224.                     'fecha' => $fecha,
  225.                     'user' => $user,
  226.                     'team' => $team,
  227.                     'tracking' => $trackings,
  228.                     'client' => $clientP,
  229.                     'contact' => $contact,
  230.                     'breakdownControl' => $breakdownControl,
  231.                     'breakdown' => $breakdown,
  232.                     'clientType' => $clientType,
  233.                 );
  234. //            $em->clear();
  235.             }elseif ($clientType == 'supplier'){
  236.                 $parameters = array(
  237.                     'supplierId' => $trackings->getSupplierId()
  238.                 );
  239.                 $dql 'SELECT cl
  240.                 FROM App:Supplier cl
  241.                 INNER JOIN App:Country c WITH c.id = cl.country
  242.                 INNER JOIN App:Regions p WITH p.id = cl.region
  243.                 INNER JOIN App:Provinces pr WITH pr.id = cl.province
  244.                 INNER JOIN App:Cities r WITH r.id = cl.population
  245.                 WHERE cl.id = :supplierId';
  246.                 $query $em->createQuery($dql)->setParameters($parameters);
  247.                 $supplier $query->getResult();
  248.                 $contact $em->getRepository(SupplierContact::class)->findOneById($trackings->getContactId());
  249. //                $breakdownControl = $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneBy(
  250. //                    array(
  251. //                        'supplierId' => $trackings->getSupplierId(),
  252. //                        'contactId' => $trackings->getContactId(),
  253. //                    )
  254. //                );
  255. //
  256. //                $breakdown = null;
  257. //                if (!empty($breakdownControl)){
  258. //                    $breakdown = $em->getRepository(CommercialBreakdownVolume::class)->findByControlId($breakdownControl->getId());
  259. //                }
  260.                 $fecha $trackings->getDateAt()->format('d/m/Y');
  261.                 $data[] = array(
  262.                     'id' => $trackings->getId(),
  263.                     'fecha' => $fecha,
  264.                     'user' => $user,
  265.                     'team' => $team,
  266.                     'tracking' => $trackings,
  267.                     'client' => $supplier[0],
  268.                     'contact' => $contact,
  269.                     'breakdownControl' => ' ',
  270.                     'breakdown' => ' ',
  271.                     'clientType' => $clientType,
  272.                 );
  273.             } else {
  274.                 if (empty($clientType)){
  275.                     $parameters = array(
  276.                         'clientId' => $trackings->getClientId()
  277.                     );
  278.                     $dql 'SELECT cl
  279.                 FROM App:Client cl
  280.                 INNER JOIN App:Country c WITH c.id = cl.country
  281.                 INNER JOIN App:Regions p WITH p.id = cl.region
  282.                 INNER JOIN App:Provinces pr WITH pr.id = cl.province
  283.                 INNER JOIN App:Cities r WITH r.id = cl.population
  284.                 WHERE cl.id = :clientId';
  285. //                ORDER BY p.dateProposedAt DESC';
  286.                     $query $em->createQuery($dql)->setParameters($parameters);
  287.                     $client $query->getResult();
  288. //                ACA
  289.                     $contact $em->getRepository(ClientContact::class)->findOneById($trackings->getContactId());
  290.                     $breakdownControl $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneBy(
  291.                         array(
  292.                             'clientId' => $trackings->getClientId(),
  293.                             'contactId' => $trackings->getContactId(),
  294.                         )
  295.                     );
  296.                     $breakdown null;
  297.                     if (!empty($breakdownControl)){
  298.                         $breakdown $em->getRepository(CommercialBreakdownVolume::class)->findByControlId($breakdownControl->getId());
  299.                     }
  300.                     $fecha $trackings->getDateAt()->format('d/m/Y');
  301.                     $countClient count($client);
  302.                     if($countClient === 0){
  303.                         $clientP null;
  304. //                    d('es cero'); die();
  305.                     }else{
  306.                         $clientP $client[0];
  307.                     }
  308. //                if($client !== null or $client !== 0 or !empty($client) or $countClient !== 0){
  309. ////                if($client !== null or $client !== 0 or !empty($client) or $countClient === 0){
  310. //                    d('viene lleno'); die();
  311. //
  312. //                }else if($countClient === 0){
  313. //                    d('vacio'); die();
  314. //                }
  315.                     $data[] = array(
  316.                         'id' => $trackings->getId(),
  317.                         'fecha' => $fecha,
  318.                         'user' => $user,
  319.                         'team' => $team,
  320.                         'tracking' => $trackings,
  321.                         'client' => $clientP,
  322.                         'contact' => $contact,
  323.                         'breakdownControl' => $breakdownControl,
  324.                         'breakdown' => $breakdown,
  325.                         'clientType' => $clientType,
  326.                     );
  327.                 }
  328.             }
  329.         }
  330.         if ( $user_role == "ROLE_ADMIN" ){
  331.             $users $em->getRepository(User::class)->findBy(['team' => 7]); //Filtrar los usuarios por Comercial MICE
  332.             $user_url = array();
  333.             foreach($users as $user){
  334.                 $user_url[$user->getId()] = array(
  335.                     'userid' => $user->getId(),
  336.                     'name' => $user->getName()
  337.                 );
  338.             };
  339.         }
  340.         return $this->render('MDS/CommercialBundle/tracking/list-tracking.html.twig', array(
  341.             'idview' =>$id,
  342.             'verNombre' => $verNombre,
  343.             'userurl' => $user_url,
  344.             'commercial' => $usertitle,
  345.             'trackings' => $data,
  346.             'totalItems' => $totalItems,
  347.             'pagesCount' => $pagesCount,
  348.             'thisPage' => $page,
  349.             'limitPage' => $limit
  350.         ));
  351.     }
  352.     /**
  353.      * @Route("/tracking/details/{id}", name="commercial_tracking_list_details")
  354.      */
  355.     public function listDetailsAction($idRequest $request)
  356.     {
  357. //        $buscarPalabra = $request->request->get('buscarClient')['palabra'];
  358.         $em $this->getDoctrine()->getManager();
  359.         $trackingBase $em->getRepository(CommercialTracking::class);
  360.         /*- Obtengo usuario logueado -*/
  361.         $user_logueado $this->getUser();
  362.         $user_id $user_logueado->getId();
  363.         $user_role $user_logueado->getRole();
  364.         $user_userrol $user_logueado->getUserrol();
  365.         $user_team $user_logueado->getTeam();
  366.         $user_teamleader $user_logueado->getTeamleader();
  367.         /* VERIFICAR EL weight DEL USUARIO */
  368.         $accesoNivel $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  369.         $nivelAcceso $accesoNivel->getWeight();
  370.         if( $user_role == "ROLE_ADMIN" ){
  371.             $tracking $em->getRepository(CommercialTracking::class)->findOneById($id);
  372.         }
  373.         if( $nivelAcceso <= '3' AND $user_teamleader == true ){
  374.             $tracking $em->getRepository(CommercialTracking::class)->findOneById($id);
  375.         }
  376.         if( $user_role == "ROLE_USER" ){
  377.             $tracking $em->getRepository(CommercialTracking::class)->findOneById($id);
  378.         }
  379.         $user $user_logueado;
  380.         $team $em->getRepository(SettingsTeam::class)->findOneById($user->getTeam());
  381.         $parameters = array(
  382.             'clientId' => $tracking->getClientId()
  383.         );
  384.         $dql 'SELECT cl.id, cl.name, cl.picture, cl.address, cl.addressNumber, cl.zipCode, cl.competency, c.country, re.region, p.name, r.city
  385.             FROM App:Client cl
  386.             INNER JOIN App:Country c WITH c.id = cl.country
  387.             INNER JOIN App:Regions re WITH re.id = cl.region
  388.             INNER JOIN App:Provinces p WITH p.id = cl.province
  389.             INNER JOIN App:Cities r WITH r.id = cl.population
  390.             WHERE cl.id = :clientId';
  391.         $query $em->createQuery($dql)->setParameters($parameters);
  392.         $client $query->getResult();
  393.         $contact $em->getRepository(ClientContact::class)->findOneById($tracking->getContactId());
  394.         $breakdownControl $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneBy(
  395.             array(
  396.                 'clientId' => $tracking->getClientId(),
  397.                 'contactId' => $tracking->getContactId(),
  398.             )
  399.         );
  400.         $breakdown null;
  401.         if (!empty($breakdownControl)){
  402.             $breakdown $em->getRepository(CommercialBreakdownVolume::class)->findByControlId($breakdownControl->getId());
  403.         }
  404.         $fecha $tracking->getDateAt()->format('d/m/Y');
  405.         $data = array(
  406.             'user' => $user,
  407.             'team' => $team,
  408.             'tracking' => $tracking,
  409.             'client' => $client['0'],
  410.             'contact' => $contact,
  411.             'breakdownControl' => $breakdownControl,
  412.             'breakdown' => $breakdown,
  413.         );
  414.         return $this->render('MDS/CommercialBundle/tracking/list-tracking-details.html.twig', array(
  415.             'tracking' => $data,
  416.         ));
  417.     }
  418.     /**
  419.      * @Route("/tracking/historic/{id}", defaults={"id" = 0},  name="commercial_historic_list")
  420.      */
  421.     public function listHistoricAction($idRequest $request)
  422.     {
  423.         $em $this->getDoctrine()->getManager();
  424.         $trackingBase $em->getRepository(CommercialTracking::class);
  425.         /* Obtengo usuario logueado */
  426.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  427.         $user_id $user_logueado->getId();
  428.         $user_role $user_logueado->getRole();
  429.         $user_userrol $user_logueado->getUserrol();
  430.         $user_team $user_logueado->getTeam();
  431.         $user_teamleader $user_logueado->getTeamleader();
  432.         /* VERIFICAR EL weight DEL USUARIO */
  433.         $accesoNivel $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  434.         $nivelAcceso $accesoNivel->getWeight();
  435.         $verNombre="no";
  436.         $user_url = array();
  437.         if($nivelAcceso <= '3' AND $user_teamleader == true){
  438.             $verNombre="si";
  439.             $user_del_team $em->getRepository(User::class)->findByTeam($user_team);
  440.             $teamId = array();
  441.             foreach($user_del_team as $user){
  442.                 $teamId[] = $user->getId();
  443.                 $user_url[$user->getId()] = array(
  444.                     'userid' => $user->getId(),
  445.                     'name' => $user->getName()
  446.                 );
  447.             };
  448.             $teamIdverimplode(","$teamId);
  449.             if($id == "0"){
  450. //                $tracking = $em->getRepository(CommercialTracking::class)->findBy(
  451. //                    array('dateAt' => 'DESC')
  452. //                );
  453.                 $parameters = array(
  454.                     'teamIdver' => $teamIdver
  455.                 );
  456.                 $dql 'SELECT tr
  457.                 FROM App\MDS\CommercialBundle\Entity\CommercialTracking tr
  458.                 WHERE tr.commercialId IN ( :teamIdver )';
  459.                 $query $em->createQuery($dql)->setParameters($parameters);
  460.                 $tracking $query->getResult();
  461.             }else{
  462.                 $tracking $em->getRepository(CommercialTracking::class)->findBy(
  463.                     array('commercialId' => $id),
  464.                     array('dateAt' => 'DESC')
  465.                 );
  466.             }
  467.             $usertitle = array(
  468.                 'name' => 'All Tracking',
  469.                 'lastname' => '',
  470.                 'team' => 'Everybody'
  471.             );
  472.         }else{
  473.             $tracking $em->getRepository(CommercialTracking::class)->findBy(
  474.                 array('commercialId' => $user_id),
  475.                 array('dateAt' => 'DESC')
  476.             );
  477.             $usertitle $em->getRepository(User::class)->findOneById($user_id);
  478.         }
  479.         $data = array();
  480.         $client = array();
  481.         $n="0";
  482.         foreach($tracking as $trackings){
  483.             $commercial $em->getRepository(User::class)->findOneById($trackings->getCommercialId());
  484.             $client $em->getRepository(Client::class)->findOneById($trackings->getClientId());
  485.             $contact $em->getRepository(ClientContact::class)->findOneById($trackings->getContactId());
  486.             $data[] = array(
  487.                 'tracking' => $trackings,
  488.                 'client' => $client,
  489.                 'contact' => $contact,
  490.                 'commercial' => $commercial,
  491.             );
  492.         }
  493.         return $this->render('MDS/CommercialBundle/historic/list-historic.html.twig', array(
  494.             'trackings' => $data,
  495.             'commercial' => $usertitle,
  496.             'userurl' => $user_url,
  497.             'verNombre' => $verNombre
  498.         ));
  499.     }
  500.     /**
  501.      * @Route("/tracking/addcc/{cid}/{coid}", defaults={"cid" = 0, "coid" = 0},  name="commercial_tracking_add_client_contact")
  502.      */
  503.     public function addCcAction($cid$coidRequest $request)
  504.     {
  505.         $em $this->getDoctrine()->getManager();
  506.         $tracking = new CommercialTracking();
  507. //        $tracking->setDateAt();
  508.         //d('entro');
  509.         $client $em->getRepository(Client::class)->findOneById($cid);
  510.         //d($client); die();
  511.         $tracking->setClientId($client);
  512.         $tracking->setContactId($coid);
  513.         $tracking->setTimeStart(new \DateTime('00:00:00'));
  514.         $tracking->setTimeEnd(new \DateTime('00:00:00'));
  515.         $tracking->setDateAt(new \DateTime("now"));
  516.         $form $this->createTrackingCreateForm($tracking);
  517.         return $this->render('MDS/CommercialBundle/tracking/add-tracking.html.twig', array('form' => $form->createView()));
  518.     }
  519.     /**
  520.      * @Route("/tracking/add/", name="commercial_tracking_add")
  521.      */
  522.     public function addAction(Request $request)
  523.     {
  524.         $tracking = new CommercialTracking();
  525. //        $tracking->setDateAt();
  526.         $tracking->setTimeStart(new \DateTime('00:00:00'));
  527.         $tracking->setTimeEnd(new \DateTime('00:00:00'));
  528.         $tracking->setDateAt(new \DateTime("now"));
  529.         $form $this->createTrackingCreateForm($tracking);
  530.         return $this->render('MDS/CommercialBundle/tracking/add-tracking.html.twig', array('form' => $form->createView()));
  531.     }
  532.     private function createTrackingCreateForm(CommercialTracking $entity)
  533.     {
  534.         $form $this->createForm(CommercialTrackingType::class, $entity, array(
  535.             'action' => $this->generateUrl('commercial_tracking_create'),
  536.             'method' => 'POST'
  537.         ));
  538.         return $form;
  539.     }
  540.     /**
  541.      * @Route("/tracking/create", name="commercial_tracking_create")
  542.      */
  543.     public function createTrackingAction(Request $request)
  544.     {
  545.         /* prevenir que contacto no este en blanco */
  546. //        $contactId2 = $request->request->get('proposal')['contactId'];
  547.         $em $this->getDoctrine()->getManager();
  548.         $tracking = new CommercialTracking();
  549.         $form $this->createTrackingCreateForm($tracking);
  550.         $form->handleRequest($request);
  551.         $title $form->get('title')->getData();
  552.         $contactId $form->get('contactId')->getData();
  553.         $volume $form->get('volume')->getData();
  554.         $year $form->get('year')->getData();
  555.         $timeEnd $form->get('timeEnd')->getData();
  556.         $payment $form->get('payment')->getData();
  557.         $comerciales $form->get('visit')->getData();
  558.         /* Obtengo usuario logueado */
  559.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  560.         $user_id $user_logueado->getId();
  561.         $type $form->get('clientType')->getData();
  562.         $titleIdConstraint = new Assert\NotBlank();
  563. //        $contactIdConstraint = new Assert\NotBlank();
  564.         $errorList $this->validator->validate($title$titleIdConstraint);
  565. //        $errorList = $this->validator->validate($contactId, $contactIdConstraint);
  566.         if (!count($errorList) == 0) {
  567.             $errorMessage_contact $this->translator->trans('Check contact field');
  568.         } else {
  569.             $errorMessage_contact "";
  570.             if($contactId !== null){
  571.                 /* Consulta el agente comercial asignado */
  572.                 $data_contact $em->getRepository(ClientContact::class)->findOneById($contactId);
  573.             } else {
  574.                 $data_contact null;
  575.             }
  576.         }
  577.         if (count($errorList) == 0) {
  578. //        if ($form->isSubmitted()) {
  579. //        if ($form->isValid() && count($errorList) == 0) {
  580.             if(count($comerciales) > 0){
  581.                 for ($i 0$i count($comerciales); ++$i) {
  582.                     $tracking = new CommercialTracking();
  583.                     $form $this->createTrackingCreateForm($tracking);
  584.                     $form->handleRequest($request);
  585.                     if (empty($timeEnd)) {
  586.                         $tracking->setTimeEnd(new \DateTime('00:00:00'));
  587.                     }
  588.                     if ($type == 'supplier') {
  589.                         $supplierID $form->get('supplierId')->getData();
  590.                         $tracking->setSupplierId($supplierID->getId());
  591.                         $tracking->setClientId(0);
  592.                     } elseif ($type == 'client') {
  593.                         $client_tracking $form->get('clientId')->getData();
  594.                         if (!is_null($client_tracking)) {
  595.                             $clientId $client_tracking->getId();
  596.                             $tracking->setClientId($client_tracking->getId());
  597.                             $tracking->setSupplierId(0);
  598.                         }
  599.                     }
  600.                     $tracking->setContactId($contactId);
  601.                     $tracking->setCommercialId($comerciales[$i]->getId());
  602.                     $tracking->setCreatedId($user_id);
  603.                     $tracking->setUpdatedId($user_id);
  604.                     $situation $tracking->getSituation();
  605.                     $status $tracking->getStatus();
  606.                     if (!empty($situation) and !empty($status)) {
  607.                         if ($type == 'client') {
  608.                             $data_client $em->getRepository(Client::class)->findOneById($clientId);
  609.                             $status_Client $data_client->getAction();
  610.                             if (
  611.                                 $status == "FOLLOW UP" or
  612.                                 $status == "INCIDENCE" or
  613.                                 $status == "RISK/RFP" or
  614.                                 $status == "CLIENT LOST"
  615.                             ) {
  616.                                 $status_Client "CLIENT";
  617.                             }
  618.                             $data_client->setAction($status_Client);
  619.                             $em->persist($data_client);
  620.                         }
  621.                         $data_contact->setSituation($situation);
  622.                         $data_contact->setStatus($status);
  623.                         $em->persist($data_contact);
  624.                         $em->flush();
  625.                     }
  626.                     if (!empty($volume) AND !empty($year)) {
  627.                         $data_control $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneBy(
  628.                             array(
  629.                                 'contactId' => $contactId,
  630.                                 'year' => $year,
  631.                             )
  632.                         );
  633.                         if ($tracking->getClientType() == 'client') {
  634.                             $clientId $clientId;
  635.                         } elseif ($tracking->getClientType() == 'supplier') {
  636.                             $clientId 0;
  637.                         }
  638.                         if (empty($data_control)) {
  639.                             $breakdowncontrol = new CommercialBreakdownVolumeControl();
  640.                             $breakdowncontrol->setTrackingId($tracking->getId());
  641.                             $breakdowncontrol->setClientId($clientId);
  642.                             $breakdowncontrol->setContactId($contactId);
  643.                             $breakdowncontrol->setYear($year);
  644.                             $breakdowncontrol->setVolume($volume);
  645.                             $breakdowncontrol->setCommercialId($user_id);
  646.                             $breakdowncontrol->setPayment($payment);
  647.                             $breakdowncontrol->setCreatedId($user_id);
  648.                             $breakdowncontrol->setUpdatedId($user_id);
  649.                             $em->persist($breakdowncontrol);
  650.                         } else {
  651.                             $breakdowncontroledit $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneById($data_control->getId());
  652.                             $breakdowncontroledit->setTrackingId($tracking->getId());
  653.                             $breakdowncontroledit->setYear($year);
  654.                             $breakdowncontroledit->setVolume($volume);
  655.                             $breakdowncontroledit->setCommercialId($user_id);
  656.                             $breakdowncontroledit->setPayment($payment);
  657.                             $breakdowncontroledit->setCreatedId($user_id);
  658.                             $breakdowncontroledit->setUpdatedId($user_id);
  659.                             $em->persist($breakdowncontroledit);
  660.                         }
  661.                     }
  662.                     $em->persist($tracking);
  663.                 }
  664.             } else {
  665.                 $tracking = new CommercialTracking();
  666.                 $form $this->createTrackingCreateForm($tracking);
  667.                 $form->handleRequest($request);
  668.                 if (empty($timeEnd)) { $tracking->setTimeEnd(new \DateTime('00:00:00')); }
  669.                 
  670.                 $typology $request->request->get('commercialtracking')['typology'] ?? null;
  671.                 if ($type == 'supplier') {
  672.                     $supplierID $form->get('supplierId')->getData();
  673.                     $tracking->setSupplierId($supplierID->getId());
  674.                     $tracking->setClientId(0);
  675.                     if (!empty($typology) and $supplierID->getTypology() == null) {
  676.                         $data_supplier $em->getRepository(Supplier::class)->findOneById($supplierID);
  677.                         $data_supplier->setTypology($typology);
  678.                         $em->persist($data_supplier);
  679.                     }
  680.                 } elseif ($type == 'client') {
  681.                     $client_tracking $form->get('clientId')->getData();
  682.                     if (!is_null($client_tracking)) {
  683.                         $clientId $client_tracking->getId();
  684.                         $tracking->setClientId($client_tracking->getId());
  685.                         $tracking->setSupplierId(0);
  686.                     }
  687.                     if (!empty($typology) and $client_tracking->getTypology() == null) {
  688.                         $data_client $em->getRepository(Client::class)->findOneById($clientId);
  689.                         $data_client->setTypology($typology);
  690.                         $em->persist($data_client);
  691.                     }
  692.                 }
  693.                 $tracking->setContactId($contactId);
  694.                 $tracking->setCommercialId($user_id);
  695.                 $tracking->setCreatedId($user_id);
  696.                 $tracking->setUpdatedId($user_id);
  697. //            $em->persist($tracking);
  698.                 $situation $tracking->getSituation();
  699.                 $status $tracking->getStatus();
  700.                 if (!empty($situation) and !empty($status) and !empty($clientId)) {
  701.                     if ($type == 'client') {
  702.                         $data_client $em->getRepository(Client::class)->findOneById($clientId);
  703.                         $status_Client $data_client->getAction();
  704.                         if (
  705.                             $status == "FOLLOW UP" or
  706.                             $status == "INCIDENCE" or
  707.                             $status == "RISK/RFP" or
  708.                             $status == "CLIENT LOST"
  709.                         ) {
  710.                             $status_Client "CLIENT";
  711.                         }
  712.                         $data_client->setAction($status_Client);
  713.                         $em->persist($data_client);
  714.                     }
  715.                     if (!empty($data_contact)) {
  716.                         $data_contact->setSituation($situation);
  717.                         $data_contact->setStatus($status);
  718.                         $em->persist($data_contact);
  719.                         $em->flush();
  720.                     }
  721.                 }
  722.                 if (!empty($volume) AND !empty($year)) {
  723.                     $data_control $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneBy(
  724.                         array(
  725.                             'contactId' => $contactId,
  726.                             'year' => $year,
  727.                         )
  728.                     );
  729.                     if ($tracking->getClientType() == 'client') {
  730.                         $clientId $clientId;
  731.                     } elseif ($tracking->getClientType() == 'supplier') {
  732.                         $clientId 0;
  733.                     }
  734.                     if (empty($data_control)) {
  735.                         $breakdowncontrol = new CommercialBreakdownVolumeControl();
  736.                         $breakdowncontrol->setTrackingId($tracking->getId());
  737.                         $breakdowncontrol->setClientId($clientId);
  738.                         $breakdowncontrol->setContactId($contactId);
  739.                         $breakdowncontrol->setYear($year);
  740.                         $breakdowncontrol->setVolume($volume);
  741.                         $breakdowncontrol->setCommercialId($user_id);
  742.                         $breakdowncontrol->setPayment($payment);
  743.                         $breakdowncontrol->setCreatedId($user_id);
  744.                         $breakdowncontrol->setUpdatedId($user_id);
  745.                         $em->persist($breakdowncontrol);
  746.                     } else {
  747.                         $breakdowncontroledit $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneById($data_control->getId());
  748.                         $breakdowncontroledit->setTrackingId($tracking->getId());
  749.                         $breakdowncontroledit->setYear($year);
  750.                         $breakdowncontroledit->setVolume($volume);
  751.                         $breakdowncontroledit->setCommercialId($user_id);
  752.                         $breakdowncontroledit->setPayment($payment);
  753.                         $breakdowncontroledit->setCreatedId($user_id);
  754.                         $breakdowncontroledit->setUpdatedId($user_id);
  755.                         $em->persist($breakdowncontroledit);
  756.                     }
  757.                 }
  758.                 $em->persist($tracking);
  759.             }
  760.             $em->flush();
  761.             $event 'The Commercial Tracking has been created.';
  762.             $successMessage $this->translator->trans($event);
  763.             $this->addFlash('mensajetracking'$successMessage);
  764.         } else {
  765.             $errorMessagebase $this->translator->trans('Error, some fields are empty');
  766.             $errorMessage $errorMessagebase ' | ' $errorMessage_contact;
  767.             $this->addFlash('mensajetrackingerror'$errorMessage);
  768.         }
  769.         return $this->redirectToRoute('commercial_tracking_list');
  770.     }
  771.     /**
  772.      * @Route("/tracking/listdesplegable", name="post_tracking_select")
  773.      */
  774.     public function clientSelectAction(Request $request) {
  775. //        $idclient = $_POST['client'];
  776.         $id $_POST['client'];
  777.         /* Obtengo usuario logueado */
  778.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  779.         $user_id $user_logueado->getId();
  780.         $user_role $user_logueado->getRole();
  781.         $em $this->getDoctrine()->getManager();
  782.         $contacts $em->getRepository(ClientContact::class)->findBy(
  783.             array(
  784.                 'clientId' => $id
  785.             )
  786.         );
  787. //        if($user_role == "ROLE_ADMIN"){
  788. //            $contacts = $em->getRepository(ClientContact::class)->findBy(
  789. //                array(
  790. //                    'clientId' => $id
  791. //                )
  792. //            );
  793. //        }else{
  794. //            $contacts = $em->getRepository(ClientContact::class)->findBy(
  795. //                array(
  796. //                    'clientId' => $id,
  797. //                    'assignedAgent' => $user_id,
  798. //                )
  799. //
  800. //            );
  801. //        }
  802.         $datos = array();
  803.         if (!empty($contacts)){
  804. //            $datos = array();
  805.             foreach($contacts as $contact){
  806.                 $datos[] = array(
  807.                     "idcliente" => $contact->getClientId(),
  808.                     "id" => $contact->getId(),
  809.                     "name" => $contact->getName(),
  810.                     "lastname" => $contact->getLastname(),
  811.                     "department" => $contact->getDepartment(),
  812.                 );
  813.                 $agenteid $contact->getAssignedAgent();
  814.             }
  815.         }
  816. //        else
  817. //        {
  818. //            $datos[] = array(
  819. //                "idcliente" => '',
  820. //                "id" => '',
  821. //                "name" => $this->translator->trans('No assigned contact'),
  822. //                "lastname" => '',
  823. //                "department" => $this->translator->trans('Please add contact'),
  824. //            );
  825. //
  826. //        }
  827.         /* VERIFICAR EL weight DEL USUARIO */
  828.         $user_userrol $user_logueado->getUserrol();
  829.         $accesoNivel $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  830.         if($user_role == "ROLE_ADMIN"){
  831.             $disabled "no";
  832.         }else{
  833.             if ($agenteid == $user_id){
  834.                 $disabled "no";
  835.             }else{
  836.                 $disabled "yes";
  837.             }
  838.         }
  839.         $return = array(
  840.             'contacts' => $datos,
  841.             'disabled' => $disabled,
  842.         );
  843.         $response = new JsonResponse($return);
  844.         return $response;
  845.     }
  846.     /**
  847.      * @Route("/tracking/contactSuppliers", name="tracking_supplier")
  848.      */
  849.     public function suppliersSelectAction(Request $request) {
  850.         /* Obtengo usuario logueado */
  851.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  852.         $user_id $user_logueado->getId();
  853.         $user_role $user_logueado->getRole();
  854. //        $idclient = $_POST['client'];
  855.         $idSupplier $_POST['idSupplier'];
  856. //        $idSupplier = 6;
  857. //        $idSupplier = 3;
  858.         $em $this->getDoctrine()->getManager();
  859.         $supplierContact $em->getRepository(SupplierContact::class)->findBySupplierId($idSupplier);
  860. //        d($supplierContact); die();
  861. //        if($user_role == "ROLE_ADMIN"){
  862. //            $contacts = $em->getRepository(ClientContact::class)->findBy(
  863. //                array(
  864. //                    'clientId' => $idclient
  865. //                )
  866. //            );
  867. //        }else{
  868. //            $contacts = $em->getRepository(ClientContact::class)->findBy(
  869. //                array(
  870. //                    'clientId' => $idclient,
  871. //                    'assignedAgent' => $user_id,
  872. //                )
  873. //
  874. //            );
  875. //        }
  876.         $datos = array();
  877.         if (!empty($supplierContact)){
  878. //            $datos = array();
  879.             foreach($supplierContact as $contact){
  880.                 $datos[] = array(
  881. //                    "idcliente" => $contact->getClientId(),
  882.                     "id" => $contact->getId(),
  883.                     "name" => $contact->getName(),
  884.                     "lastname" => $contact->getLastname(),
  885. //                    "department" => $contact->getDepartment(),
  886.                 );
  887. //                $agenteid = $contact->getAssignedAgent();
  888.             }
  889.         }
  890. //        d($datos); die();
  891. //        else
  892. //        {
  893. //            $datos[] = array(
  894. //                "idcliente" => '',
  895. //                "id" => '',
  896. //                "name" => $this->translator->trans('No assigned contact'),
  897. //                "lastname" => '',
  898. //                "department" => $this->translator->trans('Please add contact'),
  899. //            );
  900. //
  901. //        }
  902.         /* VERIFICAR EL weight DEL USUARIO */
  903.         $user_userrol $user_logueado->getUserrol();
  904.         $accesoNivel $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  905. //        if($user_role == "ROLE_ADMIN"){
  906. //            $disabled = "no";
  907. //        }else{
  908. //            if ($agenteid == $user_id){
  909. //                $disabled = "no";
  910. //            }else{
  911. //                $disabled = "yes";
  912. //            }
  913. //        }
  914.         $return = array(
  915.             'contacts' => $datos,
  916. //            'disabled' => $disabled,
  917.         );
  918.         $response = new JsonResponse($return);
  919.         return $response;
  920.     }
  921.     /**
  922.      * @Route("/tracking/contactClients", name="tracking_clients")
  923.      */
  924.     public function clientsSelectAction(Request $request) {
  925.         /* Obtengo usuario logueado */
  926.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  927.         $user_id $user_logueado->getId();
  928.         $user_role $user_logueado->getRole();
  929.         $idClient $_POST['client'];
  930.         $em $this->getDoctrine()->getManager();
  931.         $supplierContact $em->getRepository(ClientContact::class)->findByClientId($idClient);
  932.         $datos = array();
  933.         if (!empty($supplierContact)){
  934. //            $datos = array();
  935.             foreach($supplierContact as $contact){
  936.                 $datos[] = array(
  937. //                    "idcliente" => $contact->getClientId(),
  938.                     "id" => $contact->getId(),
  939.                     "name" => $contact->getName(),
  940.                     "lastname" => $contact->getLastname(),
  941. //                    "department" => $contact->getDepartment(),
  942.                 );
  943. //                $agenteid = $contact->getAssignedAgent();
  944.             }
  945.         }
  946.         /* VERIFICAR EL weight DEL USUARIO */
  947.         $user_userrol $user_logueado->getUserrol();
  948.         $accesoNivel $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  949.         $return = array(
  950.             'contacts' => $datos,
  951. //            'disabled' => $disabled,
  952.         );
  953.         $response = new JsonResponse($return);
  954.         return $response;
  955.     }
  956.     /**
  957.      * @Route("/tracking/contactdepartment", name="get_edit_tracking_select_contact")
  958.      */
  959. //    public function clientSelectActionEdit($idclient, $idtracking, Request $request) {
  960.     public function clientSelectActionContactEdit(Request $request) {
  961.         $id $_POST['id'];
  962.         $em $this->getDoctrine()->getManager();
  963.         $contacts $em->getRepository(ClientContact::class)->findOneById($id);
  964.         $year_now date('Y');
  965.         $datatrakincontrol $em->getRepository(CommercialBreakdownVolumeControl::class)->findOneBy(
  966.             array(
  967.                 'contactId' => $id,
  968. //                'year' => $year_now,
  969.             )
  970.         );
  971.         if (!empty($datatrakincontrol)){
  972.             //$volume
  973.             if (is_null($datatrakincontrol->getVolume()) or empty($datatrakincontrol->getVolume())){
  974.                 $volume "";
  975.             }else{
  976.                 $volume $datatrakincontrol->getVolume();
  977.             }
  978.             //$year
  979.             if (is_null($datatrakincontrol->getYear()) or empty($datatrakincontrol->getYear())){
  980.                 $year "";
  981.             }else{
  982.                 $year $datatrakincontrol->getYear();
  983.             }
  984.             //$payment
  985.             if (is_null($datatrakincontrol->getPayment()) or empty($datatrakincontrol->getPayment())){
  986.                 $payment "";
  987.             }else{
  988.                 $payment $datatrakincontrol->getPayment();
  989.             }
  990.         }else{
  991.             $volume "";
  992.             $year "";
  993.             $payment "";
  994.         }
  995.         //$department
  996.         if (!empty($contacts)){
  997.             $department $contacts->getDepartment();
  998.         }else{
  999.             $department $this->translator->trans('Please add contact');
  1000.         }
  1001.         $return = array(
  1002.             'department' => $department,
  1003.             'volume' => $volume,
  1004.             'year' => $year,
  1005.             'payment' => $payment,
  1006.         );
  1007.         $response = new JsonResponse($return);
  1008.         return $response;
  1009.     }
  1010.     /**
  1011.      * @Route("/tracking/contactName", name="get_edit_tracking_contact")
  1012.      */
  1013.     public function contactNameActionContactEdit(Request $request) {
  1014.         $client $_POST['client'];
  1015.         $em $this->getDoctrine()->getManager();
  1016.         $contactCommercial $em->getRepository(ClientContact::class)->findByClientId($client);
  1017.         $return = array(
  1018.             'contacts' => $contactCommercial,
  1019.         );
  1020.         $response = new JsonResponse($return);
  1021.         return $response;
  1022.     }
  1023.     /**
  1024.      * @Route("/tracking/edit/{id}",  name="commercial_tracking_edit")
  1025.      */
  1026.     public function editAction($id)
  1027.     {
  1028.         $em $this->getDoctrine()->getManager();
  1029.         /* Obtengo usuario logueado */
  1030.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1031.         $user_id $user_logueado->getId();
  1032.         $user_role $user_logueado->getRole();
  1033.         $user_userrol $user_logueado->getUserrol();
  1034.         /* VERIFICAR EL weight DEL USUARIO */
  1035.         $accesoNivel $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  1036.         $nivelAcceso $accesoNivel->getWeight();
  1037.         $tracking $em->getRepository(CommercialTracking::class)->findOneById($id);
  1038.         if($tracking->getClientId() == 0){
  1039.             $contact $em->getRepository(SupplierContact::class)->findOneBy(array(
  1040.                 'id' => $tracking->getContactId(),
  1041.             ));
  1042. //            $fullNameContact = $contact->getName().' '.$contact->getLastname();
  1043.             $departament null;
  1044.             if($user_id == $tracking->getCommercialId() || $user_role == "ROLE_ADMIN" || $nivelAcceso <= '2'){
  1045.                 $client $em->getRepository(Supplier::class)->findOneById($tracking->getSupplierId());
  1046. //                d($client);
  1047.                 $tracking->setSupplierId($client);
  1048. //                $tracking->setContactId($contact);
  1049. //            d($tracking); die();
  1050.                 $form $this->EditTrackingForm($tracking$id);
  1051.                 return $this->render('MDS/CommercialBundle/tracking/edit-tracking.html.twig',
  1052.                     array(
  1053.                         'department' => $departament,
  1054.                         'form' => $form->createView()
  1055.                     )
  1056.                 );
  1057.             }
  1058.         }else{
  1059.             $contact $em->getRepository(ClientContact::class)->findOneBy(array(
  1060.                 'clientId' => $tracking->getClientId(),
  1061.                 'id' => $tracking->getContactId(),
  1062.             ));
  1063.             
  1064.             $fullNameContact $contact->getName().' '.$contact->getLastname();
  1065.             $departament $contact->getDepartment();
  1066.             if($user_id == $tracking->getCommercialId() || $user_role == "ROLE_ADMIN" || $nivelAcceso <= '2'){
  1067.                 $client $em->getRepository(Client::class)->findOneById($tracking->getClientId());
  1068.                 $tracking->setClientId($client);
  1069.                 // $tracking->setContactId($fullNameContact);
  1070.                 $form $this->EditTrackingForm($tracking$id);
  1071.                 return $this->render('MDS/CommercialBundle/tracking/edit-tracking.html.twig',
  1072.                     array(
  1073.                         'department' => $departament,
  1074.                         'form' => $form->createView()
  1075.                     )
  1076.                 );
  1077.             }
  1078.         }
  1079.         return $this->redirectToRoute('error_access');
  1080.     }
  1081.     private function EditTrackingForm(CommercialTracking $entity$id)
  1082.     {
  1083.         $form $this->createForm(CommercialTrackingType::class, $entity,
  1084.             array(
  1085.                 'action' => $this->generateUrl('commercial_tracking_update',
  1086.                     array(
  1087.                         'id' => $id
  1088.                     )
  1089.                 )));
  1090.         return $form;
  1091.     }
  1092.     /**
  1093.      * @Route("/tracking/update/{id}", name="commercial_tracking_update", methods={"POST"})
  1094.      */
  1095.     public function updateAction($idRequest $request)
  1096.     {
  1097.         $em $this->getDoctrine()->getManager();
  1098.         $tracking $em->getRepository(CommercialTracking::class)->findOneById($id);
  1099.         
  1100.         $form $this->EditTrackingForm($tracking$id);
  1101.         $form->handleRequest($request);
  1102.         if($tracking->getClientType() == 'supplier'){
  1103.             $client_proposal $form->get('supplierId')->getData();
  1104.             $tracking->setSupplierId($client_proposal->getId());
  1105.             $tracking->setClientId(0);
  1106.         }else{
  1107.             $client_proposal $form->get('clientId')->getData();
  1108.             $tracking->setClientId($client_proposal->getId());
  1109.             $tracking->setSupplierId(0);
  1110.         }
  1111.         if($form->isValid())
  1112.         {
  1113.             if($tracking->getClientType() == 'supplier') {
  1114.                 $data_contact $em->getRepository(SupplierContact::class)->findOneById($tracking->getContactId());
  1115.             }else{
  1116.                 $data_contact $em->getRepository(ClientContact::class)->findOneById($tracking->getContactId());
  1117.                 $situation $tracking->getSituation();
  1118.                 if (!empty($situation)){
  1119.                     $data_contact->setSituation($situation);
  1120.                     $em->persist($data_contact);
  1121.                     $em->flush();
  1122.                 }
  1123.             }
  1124.             /* Obtengo usuario logueado */
  1125.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1126.             $user_id $user_logueado->getId();
  1127.             $tracking->getUpdatedId($user_id);
  1128.             /* Gestión de eventos en Log */
  1129.             $user_lastname $user_logueado->getLastname();
  1130.             $user_name $user_logueado->getName();
  1131.             $user_email $user_logueado->getEmail();
  1132.             $user_rol $user_logueado->getRoles();
  1133.             $event_url $request->getPathInfo();
  1134.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  1135.             $em->persist($tracking);
  1136.             $em->flush();
  1137.             $event 'The Tracking has been Updated. Now';
  1138.             $successMessage $this->translator->trans($event);
  1139.             $this->addFlash('mensajetracking'$successMessage);
  1140.             return $this->redirectToRoute('commercial_tracking_list',
  1141.                 array(
  1142.                     '_fragment' => 's'.$tracking->getId()
  1143.                 )
  1144.             );
  1145.         }else{
  1146.             $errorMessage $this->translator->trans('Error, some fields are empty');
  1147.             $this->addFlash('mensajetrackingerror'$errorMessage);
  1148.         }
  1149.         return $this->render('MDS/CommercialBundle/tracking/edit-tracking.html.twig', array(
  1150.                     'department' => ''
  1151.                     'form' => $form->createView()
  1152.             )
  1153.         );
  1154.     }
  1155.     /**
  1156.      * @Route("/tracking/events", name="get_commercial_tracking_select")
  1157.      */
  1158.     public function TrackingSelectAction(Request $request) {
  1159.         $em $this->getDoctrine()->getManager();
  1160.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1161.         $user_id $user_logueado->getId();
  1162. //        $trackings = $em->getRepository(CommercialTracking::class)->findBy(
  1163. //            array('commercialId' => $user_id),
  1164. //            array('timeStart' => 'ASC')
  1165. //        );
  1166.         $parametersA = array(
  1167.             'commercialId' => $user_id
  1168.         );
  1169.         $dql 'SELECT ct, cl.title, cn.name, cn.lastName, cn.phone, cn.mobile, cn.email
  1170.                 FROM App\MDS\CommercialBundle\Entity\CommercialTracking ct
  1171.                 INNER JOIN App:Client cl WITH cl.id = ct.clientId
  1172.                 INNER JOIN App:ClientContact cn WITH cn.id = ct.contactId
  1173.                 WHERE ct.commercialId = :commercialId 
  1174.                 ORDER BY ct.timeStart ASC ';
  1175.         $query $em->createQuery($dql)->setParameters($parametersA);;
  1176.         $trackings $query->getResult();
  1177.         $parametersB = array(
  1178.             'commercialId' => $user_id,
  1179.         );
  1180.         $dqlb 'SELECT ct, cl.title, cn.name, cn.lastName, cn.phone, cn.mobile, cn.email
  1181.                 FROM App\MDS\CommercialBundle\Entity\CommercialTracking ct
  1182.                 INNER JOIN App:Client cl WITH cl.id = ct.clientId
  1183.                 INNER JOIN App:ClientContact cn WITH cn.id = ct.contactId
  1184.                 WHERE ct.commercialId = :commercialId
  1185.                 AND ct.alertAt is not NULL
  1186.                 ORDER BY ct.timeStart ASC ';
  1187.         $queryb $em->createQuery($dqlb)->setParameters($parametersB);;
  1188.         $trackingAlerts $queryb->getResult();
  1189.         $datos = array();
  1190.         if (!empty($trackings) or !empty($trackingAlerts)){
  1191.             foreach($trackings as $tracking){
  1192.                 if(empty($tracking['0']->getTitle())){
  1193.                     $title =  $tracking['0']->getTimeStart()->format('H:i').' | '.$this->translator->trans('Tracking of commercial performance in client');
  1194.                 }else{
  1195.                     $title $tracking['0']->getTimeStart()->format('H:i').' | '.$tracking['0']->getTitle();
  1196.                 }
  1197.                 $client_tr $this->translator->trans('Client');
  1198.                 $contact_tr $this->translator->trans('Contact');
  1199.                 $telephone_tr $this->translator->trans('Telephone');
  1200.                 $mobile_tr $this->translator->trans('Mobile');
  1201.                 $tooltip $title."<br>".$client_tr.": <b>".$tracking['title']."</b><br>
  1202.                     ".$contact_tr.": <b>".$tracking['name']." ".$tracking['lastName']."</b><br>
  1203.                     <i class='icon-phone position-left'></i>".$telephone_tr.": ".$tracking['phone']." <br> 
  1204.                     <i class='icon-mobile position-left'></i>".$mobile_tr.": ".$tracking['mobile']."<br>
  1205.                     <i class='icon-mail-read position-left'></i>: ".$tracking['email']."<br><br>
  1206.                     ".$tracking['0']->getMessage();
  1207.                 $datos[] = array(
  1208.                     "id" => $tracking['0']->getId(),
  1209.                     "title" => $title,
  1210.                     "tooltip" => $tooltip,
  1211.                     "date" => $tracking['0']->getDateAt(),
  1212.                     "start" => $tracking['0']->getTimeStart()->format('H:i'),
  1213.                     "end" => $tracking['0']->getTimeEnd()->format('H:i'),
  1214.                     "color" => '#01DF01',
  1215.                     "url" => "commercial/tracking/details/".$tracking['0']->getId()
  1216.                 );
  1217.             }
  1218.             if (!empty($trackingAlerts)){
  1219.                 foreach($trackingAlerts as $trackingAlert){
  1220.                     $reminder_tr $this->translator->trans('Reminder');
  1221.                     if(empty($trackingAlert['0']->getTitle())){
  1222.                         $titleB $reminder_tr.': '.$this->translator->trans('Tracking of commercial performance in client');
  1223.                     }else{
  1224.                         $titleB $reminder_tr.': '.$trackingAlert['0']->getTitle();
  1225.                     }
  1226.                     $client_tr $this->translator->trans('Client');
  1227.                     $contact_tr $this->translator->trans('Contact');
  1228.                     $telephone_tr $this->translator->trans('Telephone');
  1229.                     $mobile_tr $this->translator->trans('Mobile');
  1230.                     $tooltipB $reminder_tr.": ".$title."<br>".$client_tr.": <b>".$trackingAlert['title']."</b><br>
  1231.                         ".$contact_tr.": <b>".$trackingAlert['name']." ".$trackingAlert['lastName']."</b><br>
  1232.                         <i class='icon-phone position-left'></i>".$telephone_tr.": ".$trackingAlert['phone']." <br>
  1233.                         <i class='icon-mobile position-left'></i>".$mobile_tr.": ".$trackingAlert['mobile']."<br>
  1234.                         <i class='icon-mail-read position-left'></i>: ".$trackingAlert['email']."<br><br>
  1235.                         ".$trackingAlert['0']->getMessage();
  1236.                     $datos[] = array(
  1237.                         "id" => $trackingAlert['0']->getId(),
  1238.                         "title" => $titleB,
  1239.                         "tooltip" => $tooltipB,
  1240.                         "date" => $trackingAlert['0']->getAlertAt(),
  1241.                         "start" => $trackingAlert['0']->getTimeStart()->format('H:i'),
  1242.                         "end" => $trackingAlert['0']->getTimeEnd()->format('H:i'),
  1243.                         "color" => '#610B0B',
  1244.                         "url" => "commercial/tracking/details/".$trackingAlert['0']->getId()
  1245.                     );
  1246.                 }
  1247.             }
  1248.         }
  1249.         else
  1250.         {
  1251.             $datos = [];
  1252.         }
  1253.         $return = array(
  1254.             'tracking' => $datos,
  1255.         );
  1256.         $response = new JsonResponse($return);
  1257.         return $response;
  1258.     }
  1259.     /**
  1260.      * @Route("/tracking/statistics/{iduser}/{desde}/{hasta}", name="post_commercial_tracking_statistics")
  1261.      */
  1262.     public function statisticsSelectAction($iduser$desde$hastaRequest $request) {
  1263. //        $iduser = $_POST['iduser'];
  1264.         $em $this->getDoctrine()->getManager();
  1265. //        $commercials = $em->getRepository(CommercialTracking::class)->findByCommercialId($iduser);
  1266. //        $desde = date_create($desde);
  1267. //        $hasta = date_create($hasta);
  1268. //        $desde = Date('now');
  1269. //        $hasta = Date('now');
  1270.         $parametersA = array(
  1271.             'commercialId' => $iduser,
  1272.             'desde' => $desde,
  1273.             'hasta' => $hasta,
  1274.         );
  1275.         $dql 'SELECT ct
  1276.                 FROM App\MDS\CommercialBundle\Entity\CommercialTracking ct
  1277.                 WHERE ct.commercialId = :commercialId 
  1278.                 AND ct.createdAt >= :desde 
  1279.                 AND ct.createdAt <= :hasta 
  1280.                 ORDER BY ct.id ASC ';
  1281.         $query $em->createQuery($dql)->setParameters($parametersA);;
  1282.         $commercials $query->getResult();
  1283. //        d($commercials);
  1284.         $stllamada strtoupper($this->translator->trans('CALL'));
  1285.         $llamada 0;
  1286.         $stalcance strtoupper($this->translator->trans('SCOPE'));
  1287.         $alcance 0;
  1288.         $stseguimiento strtoupper($this->translator->trans('TRACING'));
  1289.         $seguimiento 0;
  1290.         $stpresentacion strtoupper($this->translator->trans('PRESENTATION'));
  1291.         $presentacion 0;
  1292.         $stpresentacionSend strtoupper($this->translator->trans('PRESENTATION SEND'));
  1293.         $presentacionSend 0;
  1294.         $stofertaPendiente strtoupper($this->translator->trans('PENDING OFFER'));
  1295.         $ofertaPendiente 0;
  1296.         $stofertaEnviada strtoupper($this->translator->trans('OFFER SENT'));
  1297.         $ofertaEnviada 0;
  1298.         $stofertaPresentada strtoupper($this->translator->trans('PRESENTED OFFER'));
  1299.         $ofertaPresentada0;
  1300.         $stofertaDescartada strtoupper($this->translator->trans('OFFER DISCARDED'));
  1301.         $ofertaDescartada 0;
  1302.         $stofertaDescartadaSeg strtoupper($this->translator->trans('OFFERED DISCARDED TRACKING'));
  1303.         $ofertaDescartadaSeg 0;
  1304.         $stcliente strtoupper($this->translator->trans('CLIENT'));
  1305.         $cliente0;
  1306.         $stclientePerdido strtoupper($this->translator->trans('CLIENT LOST'));
  1307.         $clientePerdido 0;
  1308.         foreach($commercials as $commercial){
  1309.             switch ($commercial->getSituation()) {
  1310.                 case "CALL":
  1311.                     $llamada $llamada 1;
  1312.                     break;
  1313.                 case "SCOPE":
  1314.                     $alcance $alcance 1;
  1315.                     break;
  1316.                 case "TRACING":
  1317.                     $seguimiento $seguimiento 1;
  1318.                     break;
  1319.                 case "PRESENTATION":
  1320.                     $presentacion $presentacion 1;
  1321.                     break;
  1322.                 case "PRESENTATION SEND":
  1323.                     $presentacionSend $presentacionSend 1;
  1324.                     break;
  1325.                 case "PENDING OFFER":
  1326.                     $ofertaPendiente $ofertaPendiente 1;
  1327.                     break;
  1328.                 case "OFFER SENT":
  1329.                     $ofertaEnviada $ofertaEnviada 1;
  1330.                     break;
  1331.                 case "PRESENTED OFFER":
  1332.                     $ofertaPresentada $ofertaPresentada 1;
  1333.                     break;
  1334.                 case "OFFER DISCARDED":
  1335.                     $ofertaDescartada $ofertaDescartada 1;
  1336.                     break;
  1337.                 case "OFFERED DISCARDED TRACKING":
  1338.                     $ofertaDescartadaSeg $ofertaDescartadaSeg 1;
  1339.                     break;
  1340.                 case "CLIENT":
  1341.                     $cliente $cliente 1;
  1342.                     break;
  1343.                 case "CLIENT LOST":
  1344.                     $clientePerdido $clientePerdido 1;
  1345.                     break;
  1346.             }
  1347.         }
  1348.         $datos = array(
  1349.             "llamada" => array(
  1350.                 'status' => $stllamada,
  1351.                 'value' => $llamada,
  1352.             ),
  1353.             "alcance" => array(
  1354.                 'status' => $stalcance,
  1355.                 'value' => $alcance,
  1356.             ),
  1357.             "seguimiento" => array(
  1358.                 'status' => $stseguimiento,
  1359.                 'value' => $seguimiento,
  1360.             ),
  1361.             "presentacion" => array(
  1362.                 'status' => $stpresentacion,
  1363.                 'value' => $presentacion,
  1364.             ),
  1365.             "presentacionSend" => array(
  1366.                 'status' => $stpresentacionSend,
  1367.                 'value' => $presentacionSend,
  1368.             ),
  1369.             "ofertaPendiente" => array(
  1370.                 'status' => $stofertaPendiente,
  1371.                 'value' => $ofertaPendiente,
  1372.             ),
  1373.             "ofertaEnviada" => array(
  1374.                 'status' => $stofertaEnviada,
  1375.                 'value' => $ofertaEnviada,
  1376.             ),
  1377.             "ofertaPresentada" => array(
  1378.                 'status' => $stofertaPresentada,
  1379.                 'value' => $ofertaPresentada,
  1380.             ),
  1381.             "ofertaDescartada" => array(
  1382.                 'status' => $stofertaDescartada,
  1383.                 'value' => $ofertaDescartada,
  1384.             ),
  1385.             "ofertaDescartadaSeg" => array(
  1386.                 'status' => $stofertaDescartadaSeg,
  1387.                 'value' => $ofertaDescartadaSeg,
  1388.             ),
  1389.             "cliente" => array(
  1390.                 'status' => $stcliente,
  1391.                 'value' => $cliente,
  1392.             ),
  1393.             "clientePerdido" => array(
  1394.                 'status' => $stclientePerdido,
  1395.                 'value' => $clientePerdido,
  1396.             ),
  1397.         );
  1398. //        $datos = array(
  1399. //            "llamada" => $llamada,
  1400. //            "alcance" => $alcance,
  1401. //            "seguimiento" => $seguimiento,
  1402. //            "presentacion" => $presentacion,
  1403. //            "presentacionSend" => $presentacionSend,
  1404. //            "ofertaPendiente" => $ofertaPendiente,
  1405. //            "ofertaEnviada" => $ofertaEnviada,
  1406. //            "ofertaPresentada" => $ofertaPresentada,
  1407. //            "ofertaDescartada" => $ofertaDescartada,
  1408. //            "ofertaDescartadaSeg" => $ofertaDescartadaSeg,
  1409. //            "cliente" => $cliente,
  1410. //            "clientePerdido" => $clientePerdido,
  1411. //        );
  1412.         $return = array(
  1413.             'datos' => $datos,
  1414.         );
  1415.         $response = new JsonResponse($return);
  1416.         return $response;
  1417.     }
  1418.     /**
  1419.      * @Route("/tracking/user", name="commercial_statistics_tracing_user")
  1420.      */
  1421.     public function CommercialuserAction(Request $request) {
  1422.         $em $this->getDoctrine()->getManager();
  1423.         $tracing_user $em->getRepository(CommercialTracking::class)->findAll();
  1424.         foreach($tracing_user as $tracinguser){
  1425.             $idUserdata[$tracinguser->getCommercialId()] = $tracinguser->getCommercialId();
  1426.         }
  1427.         foreach($idUserdata as $idUserdos){
  1428.             $idUser[] = $idUserdos;
  1429.         }
  1430.         $return = array(
  1431.             'idUser' => $idUser,
  1432.             'year' => date('2016-01-01'),
  1433.             'today' => date('Y-m-d')
  1434.         );
  1435.         $response = new JsonResponse($return);
  1436.         return $response;
  1437.     }
  1438. }