src/Application/Internit/LeadBundle/Controller/ProductFrontController.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\Application\Internit\LeadBundle\Controller;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  9. use App\Application\Internit\LeadBundle\Entity\Lead;
  10. use App\Application\Internit\LeadBundle\Entity\ChatbotLead;
  11. use Symfony\Component\HttpKernel\Exception\HttpException;
  12. /**
  13.  * Product Front controller.
  14.  *
  15.  * @Route("/api/leads")
  16.  */
  17. class ProductFrontController extends Controller
  18. {
  19.     public function getBundleName()
  20.     {
  21.         return 'ApplicationInternitLeadBundle';
  22.     }
  23.     public function getEntityName()
  24.     {
  25.         return 'Product';
  26.     }
  27.     public function getFormType()
  28.     {
  29.         return 'App\Application\Internit\LeadBundle\Form\ProductType';
  30.     }
  31.     /**
  32.      * @Route("/send", name="front_product_lead_send")
  33.      * @Method("POST")
  34.      */
  35.     public function send(Request $request)
  36.     {
  37.         $data json_decode($request->getContent());
  38.         $statusCode=400;
  39.         $result=[];
  40.         if(!$data)
  41.             return $this->sendStatus(400,"New Lead is not valid");
  42.         if(isset($data->token)){
  43.             $product $this->getDoctrine()->getRepository('ApplicationInternitLeadBundle:Product')->findOneByToken($data->token);
  44.             if(!$product)
  45.                 return $this->sendStatus(404,"Product not found");
  46.             if(!empty($data->name) &&
  47.                 !empty($data->origem) &&
  48.                 !empty($data->group)
  49.             ){
  50.                 // form de whatsapp não traz e-mail
  51.                 $emailLead = isset($data->email) ? $data->email '';
  52.                 $extraInfo = array();
  53.                 $to $this->get('tupi.caster.service')->next($product$emailLead);
  54.                 //dd($to);
  55.                 // dump($to);exit;
  56.                 $newLead = new Lead();
  57.                 //Obrigatórios
  58.                 $newLead->setName($data->name);
  59.                 $newLead->setGroup($data->group);
  60.                 $newLead->setOrigem($data->origem);
  61.                 $newLead->setProduct($product);
  62.                 $newLead->setEmail($emailLead);
  63.                 $newLead->setPhone(isset($data->phone) ? $data->phone '');
  64.                 //Opcionais
  65.                 if(isset($data->fixedPhone)) {
  66.                     $newLead->setFixedPhone(($data->fixedPhone $data->fixedPhone ''));
  67.                 }
  68.                 if(isset($data->empreendimento))
  69.                     $newLead->setEmpreendimento(($data->empreendimento $data->empreendimento ''));
  70.                 if(isset($data->utm_source))
  71.                     $newLead->setUtm_source(($data->utm_source $data->utm_source ''));
  72.                 if(isset($data->utm_medium))
  73.                     $newLead->setUtm_medium(($data->utm_medium $data->utm_medium ''));
  74.                 if(isset($data->utm_campaign))
  75.                     $newLead->setUtm_campaign(($data->utm_campaign $data->utm_campaign ''));
  76.                 if(isset($data->message))
  77.                     $newLead->setMessage(($data->message $data->message ''));
  78.                 // e-mail que a construtora configura para receber os leads deste produto.
  79.                 $productEmail $product->getEmail();
  80.                 if(!empty($productEmail) || !is_null($to)){
  81.                     // obter e-mails de lead da imobiliária da vez
  82.                     $realEstateLeadEmails $this->getDoctrine()
  83.                         ->getRepository('ApplicationInternitLeadBundle:RealEstateEmail')
  84.                         ->findRealEstateLeadEmails($to['imob']);
  85.                     $realEstate $this->getDoctrine()
  86.                         ->getRepository('ApplicationInternitRealEstateBundle:RealEstate')
  87.                         ->findOneBy(['name' => $to['imob']]);
  88.                     //Chamar service de disparo para corretor
  89.                     $email1 $this->get('admin.mail.service');
  90.                     //$email2 = $this->get('admin.mail.service');
  91.                     // EMAILS COPY
  92.                     $emailCopySend = [];
  93.                     if($realEstate){
  94.                         if($realEstate->getReceiveLead()){
  95.                             $emailCopySend[] = $realEstate->getEmail();
  96.                             //$email->setMessage()->setBCC($realEstate->getEmail());
  97.                         }
  98.                     }
  99.                     if ( ! empty($productEmail) ) {
  100.                         $emailsSend explode(','str_replace(' '''$productEmail));
  101.                         foreach ($emailsSend as $sendMail){
  102.                             $emailCopySend[] = $sendMail;
  103.                             //$email->setMessage()->setBCC($sendMail);
  104.                         }
  105.                     }
  106.                     // se houver o e-mail do corretor, ele é o destinatário principal e
  107.                     // o e-mail padrão da campanha é cópia oculta
  108.                     if ( !empty($to['email']) ) {
  109.                         $email1->setMessage()->setTo($to['email']);
  110.                         //dd($realEstate);
  111.                         if(!empty($emailCopySend)){
  112.                             $email1->setMessage()->setCC($emailCopySend);
  113.                         }
  114.                     }
  115.                     // se não houver nenhum corretor para receber e-mail, o e-mail padrão
  116.                     // da campanha é o destinatário principal
  117.                     else if (! empty($productEmail)) {
  118.                         $emailsSend explode(','str_replace(' '''$productEmail));
  119.                         foreach ($emailsSend as $sendMail){
  120.                             $emailCopySend[] = $sendMail;
  121.                             //$email->setMessage()->setBCC($sendMail);
  122.                         }
  123.                         $email1->setMessage()->setTo($emailsSend);
  124.                         if(!empty($emailCopySend)){
  125.                             $email1->setMessage()->setCC($emailCopySend);
  126.                         }
  127.                     }
  128. //                        if (!empty($realEstateLeadEmails)) {
  129. //                            $email->setMessage()->setCC($realEstateLeadEmails);
  130. //                        }
  131.                     $newLead->setBrokerEmail( ! empty($to['email']) ? $to['email'] : $productEmail ); //Seta email do corretor que recebeu o lead
  132.                     $newLead->setBrokerRealState($to['imob']); //Seta Imobiliaria do corretor que recebeu o lead
  133.                     $extraInfo['broker_name'] = $to['name'];
  134.                     if($to['phone'])
  135.                         $extraInfo['broker_phone'] = preg_replace('/[^0-9]/'''$to['phone']);
  136.                     $entityManager $this->getDoctrine()->getManager();
  137.                     $entityManager->persist($newLead);
  138.                     $entityManager->flush();
  139.                     $email1
  140.                         ->setMessage()
  141.                         ->setSubject("[leadcalper] ".$product->getName() . ' - ' $newLead->getGroup() . ' - ' $to['name'])
  142.                         ->setBody($this->renderView("@ApplicationInternit/SettingBundle/Resources/views/Mail/emailLead.html.twig", array(
  143.                             'data' => $newLead,
  144.                             'corretor' => $to['name'],
  145.                         )), 'text/html');
  146.                     $email1->send();
  147.                  /*   $email2
  148.                         ->setMessage()
  149.                         ->setSubject("[Lead] ".$product->getName() . ' - ' . $newLead->getGroup())
  150.                         ->setBody($this->renderView("@ApplicationInternit/SettingBundle/Resources/views/Mail/emailLead.html.twig", array(
  151.                             'data' => $newLead,
  152.                         )), 'text/html');
  153.                     $email2->send();*/
  154.                 }
  155.                 // dump($newLead);
  156.                 return $this->sendStatus(200,"Lead created"$extraInfo);
  157.             }
  158.             else{
  159.                 return $this->sendStatus(400,"Invalid content");
  160.             }
  161.         }
  162.         return $this->sendStatus(400,"Token is required");
  163.     }
  164.     public function sendLast(Request $request)
  165.     {
  166.         
  167.         $data json_decode($request->getContent());
  168.         $statusCode=400;
  169.         $result=[];
  170.         if(!$data)
  171.             return $this->sendStatus(400,"New Lead is not valid");
  172.         if(isset($data->token)){
  173.             $product $this->getDoctrine()->getRepository('ApplicationInternitLeadBundle:Product')->findOneByToken($data->token);        
  174.             if(!$product)
  175.                 return $this->sendStatus(404,"Product not found");
  176.             
  177.             if(!empty($data->name) &&
  178.                 !empty($data->origem) &&
  179.                 !empty($data->group)
  180.                 ){
  181.                     // form de whatsapp não traz e-mail
  182.                     $emailLead = isset($data->email) ? $data->email '';
  183.                     $extraInfo = array();
  184.                     $to $this->get('tupi.caster.service')->next($product$emailLead);
  185.                     //dd($to);
  186.                     // dump($to);exit;
  187.                     $newLead = new Lead();
  188.                     //Obrigatórios
  189.                     $newLead->setName($data->name);
  190.                     $newLead->setGroup($data->group);
  191.                     $newLead->setOrigem($data->origem);
  192.                     $newLead->setProduct($product);
  193.                     $newLead->setEmail($emailLead);
  194.                     $newLead->setPhone(isset($data->phone) ? $data->phone '');
  195.                     
  196.                     //Opcionais
  197.                     if(isset($data->fixedPhone)) {
  198.                         $newLead->setFixedPhone(($data->fixedPhone $data->fixedPhone ''));
  199.                     }
  200.                     if(isset($data->empreendimento))
  201.                         $newLead->setEmpreendimento(($data->empreendimento $data->empreendimento ''));
  202.                     if(isset($data->utm_source))
  203.                         $newLead->setUtm_source(($data->utm_source $data->utm_source ''));
  204.                     if(isset($data->utm_medium))
  205.                         $newLead->setUtm_medium(($data->utm_medium $data->utm_medium ''));
  206.                     if(isset($data->utm_campaign))
  207.                         $newLead->setUtm_campaign(($data->utm_campaign $data->utm_campaign ''));
  208.                     if(isset($data->message))
  209.                         $newLead->setMessage(($data->message $data->message ''));
  210.                     // e-mail que a construtora configura para receber os leads deste produto.
  211.                     $productEmail $product->getEmail();
  212.                     if(!empty($productEmail) || !is_null($to)){
  213.                         // obter e-mails de lead da imobiliária da vez
  214.                         $realEstateLeadEmails $this->getDoctrine()
  215.                             ->getRepository('ApplicationInternitLeadBundle:RealEstateEmail')
  216.                             ->findRealEstateLeadEmails($to['imob']);
  217.                         $realEstate $this->getDoctrine()
  218.                             ->getRepository('ApplicationInternitRealEstateBundle:RealEstate')
  219.                             ->findOneBy(['name' => $to['imob']]);
  220.                         //Chamar service de disparo para corretor
  221.                         $email1 $this->get('admin.mail.service');
  222.                         $email2 $this->get('admin.mail.service');
  223.                         // EMAILS COPY
  224.                         $emailCopySend = [];
  225.                         if($realEstate){
  226.                             if($realEstate->getReceiveLead()){
  227.                                 $emailCopySend[] = $realEstate->getEmail();
  228.                                 //$email->setMessage()->setBCC($realEstate->getEmail());
  229.                             }
  230.                         }
  231.                         if ( ! empty($productEmail) ) {
  232.                             $emailsSend explode(','str_replace(' '''$productEmail));
  233.                             foreach ($emailsSend as $sendMail){
  234.                                 $emailCopySend[] = $sendMail;
  235.                                 //$email->setMessage()->setBCC($sendMail);
  236.                             }
  237.                         }
  238.                         // se houver o e-mail do corretor, ele é o destinatário principal e
  239.                         // o e-mail padrão da campanha é cópia oculta
  240.                         if ( !empty($to['email']) ) {
  241.                             
  242.                             $email1->setMessage()->setTo($to['email']);
  243.                             //dd($realEstate);
  244.                             if(!empty($emailCopySend)){
  245.                                 $email2->setMessage()->setTo($emailCopySend);
  246.                             }
  247.                         }
  248.                         // se não houver nenhum corretor para receber e-mail, o e-mail padrão
  249.                         // da campanha é o destinatário principal
  250.                         else if (! empty($productEmail)) {
  251.                             $emailsSend explode(','str_replace(' '''$productEmail));
  252.                             foreach ($emailsSend as $sendMail){
  253.                                 $emailCopySend[] = $sendMail;
  254.                                 //$email->setMessage()->setBCC($sendMail);
  255.                             }
  256.                             $email1->setMessage()->setTo($emailsSend);
  257.                             if(!empty($emailCopySend)){
  258.                                 $email2->setMessage()->setTo($emailCopySend);
  259.                             }
  260.                         }
  261. //                        if (!empty($realEstateLeadEmails)) {
  262. //                            $email->setMessage()->setCC($realEstateLeadEmails);
  263. //                        }
  264.                         $newLead->setBrokerEmail( ! empty($to['email']) ? $to['email'] : $productEmail ); //Seta email do corretor que recebeu o lead
  265.                         $newLead->setBrokerRealState($to['imob']); //Seta Imobiliaria do corretor que recebeu o lead
  266.                         $extraInfo['broker_name'] = $to['name'];
  267.                         if($to['phone'])
  268.                             $extraInfo['broker_phone'] = preg_replace('/[^0-9]/'''$to['phone']);
  269.                         $entityManager $this->getDoctrine()->getManager();
  270.                         $entityManager->persist($newLead);
  271.                         $entityManager->flush();
  272.                         $email1
  273.                             ->setMessage()
  274.                             ->setSubject("[Lead] ".$product->getName() . ' - ' $newLead->getGroup())
  275.                             ->setBody($this->renderView("@ApplicationInternit/SettingBundle/Resources/views/Mail/emailLead.html.twig", array(
  276.                                 'data' => $newLead,
  277.                             )), 'text/html');
  278.                         $email1->send();
  279.                         $email2
  280.                             ->setMessage()
  281.                             ->setSubject("[Lead] ".$product->getName() . ' - ' $newLead->getGroup())
  282.                             ->setBody($this->renderView("@ApplicationInternit/SettingBundle/Resources/views/Mail/emailLead.html.twig", array(
  283.                                 'data' => $newLead,
  284.                             )), 'text/html');
  285.                         $email2->send();
  286.                     }
  287.                     // dump($newLead);
  288.                     return $this->sendStatus(200,"Lead created"$extraInfo);
  289.                 }
  290.                 else{
  291.                     return $this->sendStatus(400,"Invalid content");
  292.                 }
  293.         }
  294.         return $this->sendStatus(400,"Token is required");
  295.     }
  296.     private function sendStatus($code 401$message "Requisição não autorizada",$extra = array()){
  297.         $array = array('message' => $message);
  298.         $array array_merge($array$extra);
  299.         $response = new Response(json_encode($array), $code);
  300.         $response->headers->set('Content-Type''application/json');
  301.         return $response;
  302.     }
  303. }