<?php
/**
* Created by Mediterranean Develup Solutions
* User: jorge.defreitas@develup.solutions
* Date: 02/10/2017
* Time: 10:21
*/
namespace App\MDS\EventsBundle\Controller;
use App\Entity\User;
use App\MDS\EventsBundle\Entity\Proposal;
use App\MDS\EventsBundle\Entity\ProposalDocument;
use Swift_Mailer;
use Swift_Message;
use Swift_SmtpTransport;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
class ProposalDocumentController extends AbstractController
{
private $translator;
public function __construct(TranslatorInterface $translator) {
$this->translator = $translator;
}
/**
* @Route("/proposal/document/list/{id}", name="proposal_document_index")
*/
public function indexAction($id, Request $request) {
$em = $this->getDoctrine()->getManager();
$proposal = $em->getRepository(Proposal::class)->findOneById($id);
$document = $em->getRepository(ProposalDocument::class)->findBy(
array( 'proposalId' => $id)
);
$documentArray = array();
// foreach ($document as $doc){
// $documentStatus = $doc->getDisabled();
// if($documentStatus == null ){
// $documentStatus = 0;
// }
// $documentArray[] = array(
// 'status' => $documentStatus,
// 'category' => $doc->getCategory(),
// 'file' => $doc->getFile(),
// 'title' => $doc->getTitle(),
// 'proposalId' => $doc->getProposalId(),
// 'id' => $doc->getId(),
// 'extension' => $doc->getExtension(),
// );
// }
return $this->render('MDS/EventsBundle/document/list-document.html.twig', array(
'id' => $id,
'token' => $proposal->getAccessKey(),
'mcp' => $proposal->getMcp(),
'proposal' => $proposal,
'document' => $document,
));
}
/**
* @Route("/proposal/document/listadmin/{id}", name="proposal_document_index_admin")
*/
public function indexAdminAction($id, Request $request) {
$em = $this->getDoctrine()->getManager();
$proposal = $em->getRepository(Proposal::class)->findOneById($id);
$document = $em->getRepository(ProposalDocument::class)->findBy(
array(
'proposalId' => $id,
'category' => 'DOCUMENTO DE ADMINISTRACIÓN',
)
);
$documentArray = array();
foreach ($document as $doc){
$documentStatus = $doc->getDisabled();
if($documentStatus == null ){
$documentStatus = 0;
}
$documentArray[] = array(
'status' => $documentStatus,
'category' => $doc->getCategory(),
'file' => $doc->getFile(),
'title' => $doc->getTitle(),
'proposalId' => $doc->getProposalId(),
'id' => $doc->getId(),
'disabled' => $doc->getDisabled(),
'card' => $doc->getCard(),
'extension' => $doc->getExtension(),
);
}
return $this->render('MDS/EventsBundle/document/list-document.html.twig', array(
'id' => $id,
'token' => $proposal->getAccessKey(),
'mcp' => $proposal->getMcp(),
'proposal' => $proposal,
'document' => $documentArray,
'status' => $documentArray,
));
}
/**
* @Route("/proposal/document/closegroup/{id}", name="proposal_document_close_group")
* Formulario para la creacion de un correo electronico para administracion.
* Ademas permite agregar documentos administrativos al expediente.
*/
public function indexDocumentsCloseGroupAction($id, Request $request) {
$em = $this->getDoctrine()->getManager();
$proposal = $em->getRepository(Proposal::class)->findOneById($id);
$document = $em->getRepository(ProposalDocument::class)->findBy(
array(
'proposalId' => $id,
'category' => 'DOCUMENTO DE ADMINISTRACIÓN',
)
);
$documentArray = array();
foreach ($document as $doc){
$documentStatus = $doc->getDisabled();
if($documentStatus == null ){
$documentStatus = 0;
}
$documentArray[] = array(
'status' => $documentStatus,
'category' => $doc->getCategory(),
'file' => $doc->getFile(),
'title' => $doc->getTitle(),
'proposalId' => $doc->getProposalId(),
'id' => $doc->getId(),
'extension' => $doc->getExtension(),
);
}
$parameters = array(
'status' => true
);
$dql = 'SELECT us
FROM App\Entity\User us
WHERE us.status = :status AND us.team IN (1,8)
ORDER BY us.name ASC';
$query = $em->createQuery($dql)->setParameters($parameters);
$adminEventsUsers = $query->getResult();
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
return $this->render('MDS/EventsBundle/document/close-group-document.html.twig', array(
'id' => $id,
'token' => $proposal->getAccessKey(),
'mcp' => $proposal->getMcp(),
'proposal' => $proposal,
'document' => $documentArray,
'status' => $documentArray,
'adminEventsUsers' => $adminEventsUsers,
'user_id' => $user_id,
));
}
/**
* @Route("/proposal/document/createadmin", name="proposal_document_create_admin")
* Crea un documento administrativo. Utilizado en el Cierre de grupo
*/
public function createAdminAction(Request $request)
{
$proposalId_data = $request->request->get('proposaldocument')['proposalId'];
$file = $request->files->get('proposaldocument')['file'];
$title = $request->request->get('proposaldocument')['title'];
$category = $request->request->get('proposaldocument')['category'];
$em = $this->getDoctrine()->getManager();
$proposal= $em->getRepository(Proposal::class)->findOneById($proposalId_data);
if (empty($title)){
$proposalDocs = $em->getRepository(ProposalDocument::class)->findByProposalId($proposal->getId());
if (empty($proposalDocs)){
$title = 'Documento - 0';
} else {
$title = 'Documento - '.(count($proposalDocs) + 1);
}
}
if (!empty($title) and !is_null($file)){
$document = new ProposalDocument();
$document->setProposalId($proposalId_data);
$fileName = md5(rand() * time());
$camino = "assets/document/proposals/";
if (!file_exists($camino)) {
mkdir($camino,0777,true);
}
$extension = $file->guessExtension();
$file_id = $proposalId_data.'-'.$fileName.'.'.$extension;
$file->move($camino, $file_id);
$document->setFile($file_id);
$document->setExtension($extension);
$document->setTitle($title);
$document->setcategory($category);
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$document->setCreatedId($user_id);
$document->setUpdatedId($user_id);
$em->persist($document);
$em->flush();
/* Gestión de eventos en Log */
$user_lastname = $user_logueado->getLastname();
$user_name = $user_logueado->getName();
$user_email = $user_logueado->getEmail();
$user_rol = $user_logueado->getRoles();
$event_url = $request->getPathInfo();
$event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
$event = 'The Proposal Document has been created.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajedocument', $successMessage);
// /* Fin Gestión de eventos en Log */
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajedocumenterror', $errorMessage);
}
return $this->redirectToRoute('proposal_document_close_group',
array(
'id' => $proposalId_data,
'token' => $proposal->getAccessKey(),
)
);
}
/**
* @Route("/proposal/document/sendclosegroupmessage", name="proposal_document_send_close_group_message")
* Envio del mensaje de cierre de grupo, con copia al agente y a Esteban Rincon
*/
public function sendCloseGroupMessageAction(Request $request){
$em = $this->getDoctrine()->getManager();
$proposalId = $request->request->get('proposal_closegroup')['proposalId'];
$message = $request->request->get('proposal_closegroup')['description'];
$emailUser = $request->request->get('emailUser');
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$agente = $em->getRepository(User::class)->findOneById($user_id);
$proposal = $em->getRepository(Proposal::class)->findOneById($proposalId);
$mailArrayTo = array();
$mailArrayTo[] = $agente->getEmail(); // El mensaje siempre se enviara con copia al agente
$mailArrayTo[] = 'esteban.rincon@inout-travel.com'; // El mensaje siempre se enviara con copia a Esteban
$mailArrayTo[] = 'administracion@inout-travel.com'; // El mensaje siempre se enviara con copia a Administracion
foreach ($emailUser as $key => $item) {
if ($key == 0){
$mailArrayTo[] = $item;
} else {
$agent = $em->getRepository(User::class)->findOneById($key);
$mailArrayTo[] = $agent->getEmail();
}
}
$mailAddressFrom = $agente->getEmail();
$mailSubject = 'Cierre del grupo: '. $proposal->getId(). ' - ' .$proposal->getTitle();
$mailBody = 'Cierre del grupo: '. $proposal->getId().
'<br><br>'. $message.
'<br><br>Enlaces del expediente:'.
'<br><br><a href="https://inout.mante.solutions/events/proposal/summary/prices/'.$proposal->getId().'">Ver el Resumen</a>'.
'<br><br><a href="https://inout.mante.solutions/events/proposal/document/listadmin/'.$proposal->getId().'">Ver los Documentos de Administración</a>';
$this->sendMailLot($mailAddressFrom, $mailArrayTo, $mailSubject, $mailBody);
return $this->redirectToRoute('proposal_edit', array('id'=>$proposal->getId()));
}
/**
* @Route("/proposal/document/create", name="proposal_document_create")
*/
// public function createAction(Request $request, LoggerInterface $logger)
public function createAction(Request $request)
{
$proposalId_data = $request->request->get('proposaldocument')['proposalId'];
$file = $request->files->get('proposaldocument')['file'];
$title = $request->request->get('proposaldocument')['title'];
$category = $request->request->get('proposaldocument')['category'];
$em = $this->getDoctrine()->getManager();
$proposal= $em->getRepository(Proposal::class)->findOneById($proposalId_data);
if (empty($title)){
$proposalDocs = $em->getRepository(ProposalDocument::class)->findByProposalId($proposal->getId());
if (empty($proposalDocs)){
$title = 'Documento - 0';
} else {
$title = 'Documento - '.(count($proposalDocs) + 1);
}
}
// d(ini_get('upload_max_filesize'));
if (!empty($title) and !is_null($file)){
$document = new ProposalDocument();
$document->setProposalId($proposalId_data);
$fileName = md5(rand() * time());
$camino = "assets/document/proposals/";
if (!file_exists($camino)) {
mkdir($camino,0777,true);
}
$extension = $file->guessExtension();
$file_id = $proposalId_data.'-'.$fileName.'.'.$extension;
$file->move($camino, $file_id);
$document->setFile($file_id);
$document->setExtension($extension);
$document->setTitle($title);
$document->setcategory($category);
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$document->setCreatedId($user_id);
$document->setUpdatedId($user_id);
$em->persist($document);
$em->flush();
/* Gestión de eventos en Log */
$user_lastname = $user_logueado->getLastname();
$user_name = $user_logueado->getName();
$user_email = $user_logueado->getEmail();
$user_rol = $user_logueado->getRoles();
$event_url = $request->getPathInfo();
$event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
// try{
// $em->persist($document);
// $em->flush();
$event = 'The Proposal Document has been created.';
//
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajedocument', $successMessage);
//
// $logger->info($event_complete.' | '.$event);
//
// } catch (\Exception $e){
//
// $event = 'An error occurred: '.$e->getMessage();
//
// /* Para el log */
// $logger->error($event_complete.' | '.$event);
// /* Para el usuario */
// $errorMessage = $this->translator->trans($event);
// $this->addFlash('mensajedocumenterror', $errorMessage);
// }
// /* Fin Gestión de eventos en Log */
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajedocumenterror', $errorMessage);
}
return $this->redirectToRoute('proposal_document_index',
array(
'id' => $proposalId_data,
'token' => $proposal->getAccessKey(),
)
);
}
/**
* @Route("/proposal/document/deleted/{id}", name="proposal_document_deleted")
*
*/
// public function deleteAction($id, Request $request, LoggerInterface $logger)
public function deleteAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$var = $em->getRepository(ProposalDocument::class);
$delete = $var->findOneById($id);
$proposal = $em->getRepository(Proposal::class)->findOneById($delete->getProposalId());
// $em->remove($delete);
// $em->flush();
/* Gestión de eventos en Log */
/* Obtengo usuario logueado */
// $user_logueado = $this->get('security.token_storage')->getToken()->getUser();
// $user_lastname = $user_logueado->getLastname();
// $user_name = $user_logueado->getName();
// $user_email = $user_logueado->getEmail();
// $user_rol = $user_logueado->getRoles();
// $event_url = $request->getPathInfo();
// $event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
// try{
$file = $delete->getFile();
$em->remove($delete);
$em->flush();
/* Borrar File */
$camino = "assets/document/proposals/";
unlink($camino.$file);
$event = 'The File of this proposal has been deleted.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajedocument', $successMessage);
//
// $logger->info($event_complete.' | '.$event);
//
// } catch (\Exception $e){
//
// $event = 'An error occurred: '.$e->getMessage();
//
// /* Para el log */
// $logger->error($event_complete.' | '.$event);
// /* Para el usuario */
// $errorMessage = $this->translator->trans($event);
// $this->addFlash('mensajedocumenterror', $errorMessage);
// }
/* Fin Gestión de eventos en Log */
return $this->redirectToRoute('proposal_document_index',
array(
'id' => $delete->getProposalId(),
'token' => $proposal->getAccessKey(),
)
);
}
/**
* @Route("proposal/document/disabled/{documentId}", name="proposal_document_disabled")
*
*/
public function disabledAction($documentId, Request $request)
{
$em = $this->getDoctrine()->getManager();
$disabled = $em->getRepository(ProposalDocument::class)->findOneById($documentId);
// $proposal= $em->getRepository(Proposal::class)->findOneById($disabled->getProposalId());
$actual = $disabled->getDisabled();
$var_mensaje="";
if($actual == "0"){
$disabled->setDisabled('1');
$var_mensaje = "Disabled";
}
if($actual == "1"){
$disabled->setDisabled('0');
$var_mensaje = "Activated";
}
$em->persist($disabled);
$em->flush();
$event = 'The supplier has been. '.$var_mensaje;
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajeproposaldestinationservices', $successMessage);
return $this->redirectToRoute('proposal_document_index',
array(
// 'documentId' => $disabled->getControlDestinationId(),
'id' => $disabled->getProposalId(),
'_fragment' => 's'.$disabled->getId()
)
);
}
private function sendMailLot($mailAddressFrom, $mailArrayTo, $mailSubject, $mailBody){
$em = $this->getDoctrine()->getManager();
$agent = $em->getRepository(User::class)->findOneByEmail($mailAddressFrom);
$replyTo = array();
foreach ($mailArrayTo as $item){
// Verificamos que los correos sean validos
if (filter_var($item,FILTER_VALIDATE_EMAIL)){
$user_mail = $em->getRepository(User::class)->findOneByEmail($item);
if (!empty($user_mail)){
$replyTo[$user_mail->getEmail()] = $user_mail->getName().' '. $user_mail->getLastName();
} else {
$replyTo[$item] = $item;
}
}
}
$agentMail = $mailAddressFrom;
$mailAgent = $agentMail;
//Se prepara el correo con los agentes a notificar
$firmGmail = $agent->getFirmGmail();
$data = array(
'body' => $mailBody,
'firm' => $firmGmail,
);
// EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
$transporter = new Swift_SmtpTransport();
$transporter->setHost('smtp.gmail.com')
->setEncryption('ssl')//ssl / tls
->setPort(465)// 465 / 587
->setUsername('desarrollo@develup.solutions')
->setPassword('utvh hzoi wfdo ztjs');
$mailer = new Swift_Mailer($transporter);
$message = new Swift_Message();
$message->setSubject($mailSubject)
->setSender($agentMail)
->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
->setReplyTo($agentMail)
->setTo($replyTo)
->setBody(
$this->renderView(
'mail/structure-mail.html.twig',
array('data' => $data)
),
'text/html'
);
$mailer->send($message);
return true;
}
}