src/MDS/EventsBundle/Controller/ProposalDocumentController.php line 33

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * User: jorge.defreitas@develup.solutions
  5.  * Date: 02/10/2017
  6.  * Time: 10:21
  7.  */
  8. namespace App\MDS\EventsBundle\Controller;
  9. use App\Entity\User;
  10. use App\MDS\EventsBundle\Entity\Proposal;
  11. use App\MDS\EventsBundle\Entity\ProposalDocument;
  12. use Swift_Mailer;
  13. use Swift_Message;
  14. use Swift_SmtpTransport;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Contracts\Translation\TranslatorInterface;
  19. class ProposalDocumentController extends AbstractController
  20. {
  21.     private $translator;
  22.     public function __construct(TranslatorInterface $translator) {
  23.         $this->translator $translator;
  24.     }
  25.     
  26.     /**
  27.      * @Route("/proposal/document/list/{id}", name="proposal_document_index")
  28.      */
  29.     public function indexAction($idRequest $request) {
  30.         $em $this->getDoctrine()->getManager();
  31.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  32.         $document $em->getRepository(ProposalDocument::class)->findBy(
  33.             array( 'proposalId' => $id)
  34.         );
  35.         $documentArray = array();
  36.         // foreach ($document as $doc){
  37.         //     $documentStatus = $doc->getDisabled();
  38.         //     if($documentStatus == null ){
  39.         //         $documentStatus = 0;
  40.         //     }
  41.         //     $documentArray[] = array(
  42.         //         'status' => $documentStatus,
  43.         //         'category' => $doc->getCategory(),
  44.         //         'file' => $doc->getFile(),
  45.         //         'title' => $doc->getTitle(),
  46.         //         'proposalId' => $doc->getProposalId(),
  47.         //         'id' => $doc->getId(),
  48.         //         'extension' => $doc->getExtension(),
  49.         //     );
  50.         // }
  51.         return $this->render('MDS/EventsBundle/document/list-document.html.twig', array(
  52.             'id' => $id,
  53.             'token' => $proposal->getAccessKey(),
  54.             'mcp' => $proposal->getMcp(),
  55.             'proposal' => $proposal,
  56.             'document' => $document,
  57.         ));
  58.     }
  59.     /**
  60.      * @Route("/proposal/document/listadmin/{id}", name="proposal_document_index_admin")
  61.      */
  62.     public function indexAdminAction($idRequest $request) {
  63.         $em $this->getDoctrine()->getManager();
  64.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  65.         $document $em->getRepository(ProposalDocument::class)->findBy(
  66.             array(
  67.                 'proposalId' => $id,
  68.                 'category' => 'DOCUMENTO DE ADMINISTRACIÓN',
  69.                 )
  70.         );
  71.         $documentArray = array();
  72.         foreach ($document as $doc){
  73.             $documentStatus $doc->getDisabled();
  74.             if($documentStatus == null ){
  75.                 $documentStatus 0;
  76.             }
  77.             $documentArray[] = array(
  78.                 'status' => $documentStatus,
  79.                 'category' => $doc->getCategory(),
  80.                 'file' => $doc->getFile(),
  81.                 'title' => $doc->getTitle(),
  82.                 'proposalId' => $doc->getProposalId(),
  83.                 'id' => $doc->getId(),
  84.                 'disabled' => $doc->getDisabled(),
  85.                 'card' => $doc->getCard(),
  86.                 'extension' => $doc->getExtension(),
  87.             );
  88.         }
  89.         return $this->render('MDS/EventsBundle/document/list-document.html.twig', array(
  90.             'id' => $id,
  91.             'token' => $proposal->getAccessKey(),
  92.             'mcp' => $proposal->getMcp(),
  93.             'proposal' => $proposal,
  94.             'document' => $documentArray,
  95.             'status' => $documentArray,
  96.         ));
  97.     }
  98.     /**
  99.      * @Route("/proposal/document/closegroup/{id}", name="proposal_document_close_group")
  100.      * Formulario para la creacion de un correo electronico para administracion.
  101.      * Ademas permite agregar documentos administrativos al expediente.
  102.      */
  103.     public function indexDocumentsCloseGroupAction($idRequest $request) {
  104.         $em $this->getDoctrine()->getManager();
  105.         $proposal $em->getRepository(Proposal::class)->findOneById($id);
  106.         $document $em->getRepository(ProposalDocument::class)->findBy(
  107.             array(
  108.                 'proposalId' => $id,
  109.                 'category' => 'DOCUMENTO DE ADMINISTRACIÓN',
  110.             )
  111.         );
  112.         $documentArray = array();
  113.         foreach ($document as $doc){
  114.             $documentStatus $doc->getDisabled();
  115.             if($documentStatus == null ){
  116.                 $documentStatus 0;
  117.             }
  118.             $documentArray[] = array(
  119.                 'status' => $documentStatus,
  120.                 'category' => $doc->getCategory(),
  121.                 'file' => $doc->getFile(),
  122.                 'title' => $doc->getTitle(),
  123.                 'proposalId' => $doc->getProposalId(),
  124.                 'id' => $doc->getId(),
  125.                 'extension' => $doc->getExtension(),
  126.             );
  127.         }
  128.         $parameters = array(
  129.             'status' => true
  130.         );
  131.         $dql 'SELECT us
  132.                 FROM App\Entity\User us
  133.                     WHERE us.status = :status AND us.team IN (1,8)
  134.                     ORDER BY us.name ASC';
  135.         $query $em->createQuery($dql)->setParameters($parameters);
  136.         $adminEventsUsers $query->getResult();
  137.         /* Obtengo usuario logueado */
  138.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  139.         $user_id $user_logueado->getId();
  140.         return $this->render('MDS/EventsBundle/document/close-group-document.html.twig', array(
  141.             'id' => $id,
  142.             'token' => $proposal->getAccessKey(),
  143.             'mcp' => $proposal->getMcp(),
  144.             'proposal' => $proposal,
  145.             'document' => $documentArray,
  146.             'status' => $documentArray,
  147.             'adminEventsUsers' => $adminEventsUsers,
  148.             'user_id' => $user_id,
  149.         ));
  150.     }
  151.     /**
  152.      * @Route("/proposal/document/createadmin", name="proposal_document_create_admin")
  153.      * Crea un documento administrativo. Utilizado en el Cierre de grupo
  154.      */
  155.     public function createAdminAction(Request $request)
  156.     {
  157.         $proposalId_data $request->request->get('proposaldocument')['proposalId'];
  158.         $file $request->files->get('proposaldocument')['file'];
  159.         $title $request->request->get('proposaldocument')['title'];
  160.         $category $request->request->get('proposaldocument')['category'];
  161.         $em $this->getDoctrine()->getManager();
  162.         $proposal$em->getRepository(Proposal::class)->findOneById($proposalId_data);
  163.         if (empty($title)){
  164.             $proposalDocs $em->getRepository(ProposalDocument::class)->findByProposalId($proposal->getId());
  165.             if (empty($proposalDocs)){
  166.                 $title 'Documento - 0';
  167.             } else {
  168.                 $title 'Documento - '.(count($proposalDocs) + 1);
  169.             }
  170.         }
  171.         if (!empty($title) and !is_null($file)){
  172.             $document = new ProposalDocument();
  173.             $document->setProposalId($proposalId_data);
  174.             $fileName md5(rand() * time());
  175.             $camino "assets/document/proposals/";
  176.             if (!file_exists($camino)) {
  177.                 mkdir($camino,0777,true);
  178.             }
  179.             $extension $file->guessExtension();
  180.             $file_id $proposalId_data.'-'.$fileName.'.'.$extension;
  181.             $file->move($camino$file_id);
  182.             $document->setFile($file_id);
  183.             $document->setExtension($extension);
  184.             $document->setTitle($title);
  185.             $document->setcategory($category);
  186.             /* Obtengo usuario logueado */
  187.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  188.             $user_id $user_logueado->getId();
  189.             $document->setCreatedId($user_id);
  190.             $document->setUpdatedId($user_id);
  191.             $em->persist($document);
  192.             $em->flush();
  193.             /* Gestión de eventos en Log */
  194.             $user_lastname $user_logueado->getLastname();
  195.             $user_name $user_logueado->getName();
  196.             $user_email $user_logueado->getEmail();
  197.             $user_rol $user_logueado->getRoles();
  198.             $event_url $request->getPathInfo();
  199.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  200.             $event 'The Proposal Document has been created.';
  201.             $successMessage $this->translator->trans($event);
  202.             $this->addFlash('mensajedocument'$successMessage);
  203. //            /* Fin Gestión de eventos en Log */
  204.         }else{
  205.             $errorMessage $this->translator->trans('Error, some fields are empty');
  206.             $this->addFlash('mensajedocumenterror'$errorMessage);
  207.         }
  208.         return $this->redirectToRoute('proposal_document_close_group',
  209.             array(
  210.                 'id' => $proposalId_data,
  211.                 'token' => $proposal->getAccessKey(),
  212.             )
  213.         );
  214.     }
  215.     /**
  216.      * @Route("/proposal/document/sendclosegroupmessage", name="proposal_document_send_close_group_message")
  217.      * Envio del mensaje de cierre de grupo, con copia al agente y a Esteban Rincon
  218.      */
  219.     public function sendCloseGroupMessageAction(Request $request){
  220.         $em $this->getDoctrine()->getManager();
  221.         $proposalId $request->request->get('proposal_closegroup')['proposalId'];
  222.         $message $request->request->get('proposal_closegroup')['description'];
  223.         $emailUser $request->request->get('emailUser');
  224.         /* Obtengo usuario logueado */
  225.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  226.         $user_id $user_logueado->getId();
  227.         $agente $em->getRepository(User::class)->findOneById($user_id);
  228.         $proposal $em->getRepository(Proposal::class)->findOneById($proposalId);
  229.         $mailArrayTo = array();
  230.         $mailArrayTo[] = $agente->getEmail();                           // El mensaje siempre se enviara con copia al agente
  231.         $mailArrayTo[] = 'esteban.rincon@inout-travel.com';             // El mensaje siempre se enviara con copia a Esteban
  232.         $mailArrayTo[] = 'administracion@inout-travel.com';             // El mensaje siempre se enviara con copia a Administracion
  233.         foreach ($emailUser as $key => $item) {
  234.             if ($key == 0){
  235.                 $mailArrayTo[] = $item;
  236.             } else {
  237.                 $agent $em->getRepository(User::class)->findOneById($key);
  238.                 $mailArrayTo[] = $agent->getEmail();
  239.             }
  240.         }
  241.         $mailAddressFrom $agente->getEmail();
  242.         $mailSubject 'Cierre del grupo: '$proposal->getId(). ' - ' .$proposal->getTitle();
  243.         $mailBody 'Cierre del grupo: '$proposal->getId().
  244.             '<br><br>'$message.
  245.             '<br><br>Enlaces del expediente:'.
  246.             '<br><br><a href="https://inout.mante.solutions/events/proposal/summary/prices/'.$proposal->getId().'">Ver el Resumen</a>'.
  247.             '<br><br><a href="https://inout.mante.solutions/events/proposal/document/listadmin/'.$proposal->getId().'">Ver los Documentos de Administración</a>';
  248.         $this->sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailBody);
  249.         return $this->redirectToRoute('proposal_edit', array('id'=>$proposal->getId()));
  250.     }
  251.     /**
  252.      * @Route("/proposal/document/create", name="proposal_document_create")
  253.      */
  254. //    public function createAction(Request $request, LoggerInterface $logger)
  255.     public function createAction(Request $request)
  256.     {
  257.         $proposalId_data $request->request->get('proposaldocument')['proposalId'];
  258.         $file $request->files->get('proposaldocument')['file'];
  259.         $title $request->request->get('proposaldocument')['title'];
  260.         $category $request->request->get('proposaldocument')['category'];
  261.         $em $this->getDoctrine()->getManager();
  262.         $proposal$em->getRepository(Proposal::class)->findOneById($proposalId_data);
  263.         if (empty($title)){
  264.             $proposalDocs $em->getRepository(ProposalDocument::class)->findByProposalId($proposal->getId());
  265.             if (empty($proposalDocs)){
  266.                 $title 'Documento - 0';
  267.             } else {
  268.                 $title 'Documento - '.(count($proposalDocs) + 1);
  269.             }
  270.         }
  271. //        d(ini_get('upload_max_filesize'));
  272.         if (!empty($title) and !is_null($file)){
  273.             $document = new ProposalDocument();
  274.             $document->setProposalId($proposalId_data);
  275.             $fileName md5(rand() * time());
  276.             $camino "assets/document/proposals/";
  277.             if (!file_exists($camino)) {
  278.                 mkdir($camino,0777,true);
  279.             }
  280.             $extension $file->guessExtension();
  281.             $file_id $proposalId_data.'-'.$fileName.'.'.$extension;
  282.             $file->move($camino$file_id);
  283.             $document->setFile($file_id);
  284.             $document->setExtension($extension);
  285.             $document->setTitle($title);
  286.             $document->setcategory($category);
  287.             /* Obtengo usuario logueado */
  288.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  289.             $user_id $user_logueado->getId();
  290.             $document->setCreatedId($user_id);
  291.             $document->setUpdatedId($user_id);
  292.             $em->persist($document);
  293.             $em->flush();
  294.             /* Gestión de eventos en Log */
  295.             $user_lastname $user_logueado->getLastname();
  296.             $user_name $user_logueado->getName();
  297.             $user_email $user_logueado->getEmail();
  298.             $user_rol $user_logueado->getRoles();
  299.             $event_url $request->getPathInfo();
  300.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  301. //            try{
  302. //                $em->persist($document);
  303. //                $em->flush();
  304.                 $event 'The Proposal Document has been created.';
  305. //
  306.                 $successMessage $this->translator->trans($event);
  307.                 $this->addFlash('mensajedocument'$successMessage);
  308. //
  309. //                $logger->info($event_complete.' | '.$event);
  310. //
  311. //            } catch (\Exception $e){
  312. //
  313. //                $event = 'An error occurred: '.$e->getMessage();
  314. //
  315. //                /* Para el log */
  316. //                $logger->error($event_complete.' | '.$event);
  317. //                /* Para el usuario */
  318. //                $errorMessage = $this->translator->trans($event);
  319. //                $this->addFlash('mensajedocumenterror', $errorMessage);
  320. //            }
  321. //            /* Fin Gestión de eventos en Log */
  322.         }else{
  323.             $errorMessage $this->translator->trans('Error, some fields are empty');
  324.             $this->addFlash('mensajedocumenterror'$errorMessage);
  325.         }
  326.         return $this->redirectToRoute('proposal_document_index',
  327.             array(
  328.                 'id' => $proposalId_data,
  329.                 'token' => $proposal->getAccessKey(),
  330.             )
  331.         );
  332.     }
  333.     /**
  334.      * @Route("/proposal/document/deleted/{id}", name="proposal_document_deleted")
  335.      *
  336.      */
  337. //    public function deleteAction($id, Request $request, LoggerInterface $logger)
  338.     public function deleteAction($idRequest $request)
  339.     {
  340.         $em $this->getDoctrine()->getManager();
  341.         $var $em->getRepository(ProposalDocument::class);
  342.         $delete $var->findOneById($id);
  343.         $proposal $em->getRepository(Proposal::class)->findOneById($delete->getProposalId());
  344. //        $em->remove($delete);
  345. //        $em->flush();
  346.         /* Gestión de eventos en Log */
  347.         /* Obtengo usuario logueado */
  348. //        $user_logueado = $this->get('security.token_storage')->getToken()->getUser();
  349. //        $user_lastname = $user_logueado->getLastname();
  350. //        $user_name = $user_logueado->getName();
  351. //        $user_email = $user_logueado->getEmail();
  352. //        $user_rol = $user_logueado->getRoles();
  353. //        $event_url = $request->getPathInfo();
  354. //        $event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  355. //        try{
  356.             $file $delete->getFile();
  357.             $em->remove($delete);
  358.             $em->flush();
  359.             /* Borrar File */
  360.             $camino "assets/document/proposals/";
  361.             unlink($camino.$file);
  362.             $event 'The File of this proposal has been deleted.';
  363.             $successMessage $this->translator->trans($event);
  364.             $this->addFlash('mensajedocument'$successMessage);
  365. //
  366. //            $logger->info($event_complete.' | '.$event);
  367. //
  368. //        } catch (\Exception $e){
  369. //
  370. //            $event = 'An error occurred: '.$e->getMessage();
  371. //
  372. //            /* Para el log */
  373. //            $logger->error($event_complete.' | '.$event);
  374. //            /* Para el usuario */
  375. //            $errorMessage = $this->translator->trans($event);
  376. //            $this->addFlash('mensajedocumenterror', $errorMessage);
  377. //        }
  378.         /* Fin Gestión de eventos en Log */
  379.         return $this->redirectToRoute('proposal_document_index',
  380.             array(
  381.                 'id' => $delete->getProposalId(),
  382.                 'token' => $proposal->getAccessKey(),
  383.             )
  384.         );
  385.     }
  386.     /**
  387.      * @Route("proposal/document/disabled/{documentId}", name="proposal_document_disabled")
  388.      *
  389.      */
  390.     public function disabledAction($documentIdRequest $request)
  391.     {
  392.         $em $this->getDoctrine()->getManager();
  393.         $disabled $em->getRepository(ProposalDocument::class)->findOneById($documentId);
  394. //        $proposal= $em->getRepository(Proposal::class)->findOneById($disabled->getProposalId());
  395.         $actual $disabled->getDisabled();
  396.         $var_mensaje="";
  397.         if($actual == "0"){
  398.             $disabled->setDisabled('1');
  399.             $var_mensaje "Disabled";
  400.         }
  401.         if($actual == "1"){
  402.             $disabled->setDisabled('0');
  403.             $var_mensaje "Activated";
  404.         }
  405.         $em->persist($disabled);
  406.         $em->flush();
  407.         $event 'The supplier has been. '.$var_mensaje;
  408.         $successMessage $this->translator->trans($event);
  409.         $this->addFlash('mensajeproposaldestinationservices'$successMessage);
  410.         return $this->redirectToRoute('proposal_document_index',
  411.             array(
  412. //                'documentId' => $disabled->getControlDestinationId(),
  413.                 'id' => $disabled->getProposalId(),
  414.                 '_fragment' => 's'.$disabled->getId()
  415.             )
  416.         );
  417.     }
  418.     private function sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailBody){
  419.         $em $this->getDoctrine()->getManager();
  420.         $agent $em->getRepository(User::class)->findOneByEmail($mailAddressFrom);
  421.         $replyTo = array();
  422.         foreach ($mailArrayTo as $item){
  423.             // Verificamos que los correos sean validos
  424.             if (filter_var($item,FILTER_VALIDATE_EMAIL)){
  425.                 $user_mail $em->getRepository(User::class)->findOneByEmail($item);
  426.                 if (!empty($user_mail)){
  427.                     $replyTo[$user_mail->getEmail()] = $user_mail->getName().' '$user_mail->getLastName();
  428.                 } else {
  429.                     $replyTo[$item] = $item;
  430.                 }
  431.             }
  432.         }
  433.         $agentMail $mailAddressFrom;
  434.         $mailAgent $agentMail;
  435.         //Se prepara el correo con los agentes a notificar
  436.         $firmGmail $agent->getFirmGmail();
  437.         $data = array(
  438.             'body' => $mailBody,
  439.             'firm' => $firmGmail,
  440.         );
  441.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  442.         $transporter = new Swift_SmtpTransport();
  443.         $transporter->setHost('smtp.gmail.com')
  444.             ->setEncryption('ssl')//ssl / tls
  445.             ->setPort(465)// 465 / 587
  446.             ->setUsername('desarrollo@develup.solutions')
  447.             ->setPassword('utvh hzoi wfdo ztjs');
  448.         $mailer = new Swift_Mailer($transporter);
  449.         $message = new Swift_Message();
  450.         $message->setSubject($mailSubject)
  451.             ->setSender($agentMail)
  452.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  453.             ->setReplyTo($agentMail)
  454.             ->setTo($replyTo)
  455.             ->setBody(
  456.                 $this->renderView(
  457.                     'mail/structure-mail.html.twig',
  458.                     array('data' => $data)
  459.                 ),
  460.                 'text/html'
  461.             );
  462.         $mailer->send($message);
  463.         return true;
  464.     }
  465. }