<?php
/**
* Created by Mediterranean Develup Solutions
* User: jorge.defreitas@develup.solutions
* Date: 04/07/2017
* Time: 10:14
*/
namespace App\Controller;
use App\Entity\Client;
use App\Entity\NewsLetterEmail;
use App\Entity\ClientContact;
use App\Entity\NewsLetterControl;
use App\Entity\SettingsRol;
use App\Entity\User;
use App\Form\ClientContactType;
use App\MDS\CommercialBundle\Entity\CommercialBreakdownVolume;
use App\MDS\CommercialBundle\Entity\CommercialBreakdownVolumeControl;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
class ClientContactController extends AbstractController
{
private $translator;
public function __construct(TranslatorInterface $translator) {
$this->translator = $translator;
}
/**
* @Route("/client/contact/list/{idclient}", name="contact_index")
*/
public function indexAction($idclient, Request $request)
{
$em = $this->getDoctrine()->getManager();
$client = $em->getRepository(Client::class)->findById($idclient);
$contacts = $em->getRepository(ClientContact::class)->findBy(
array('clientId' => $idclient)
);
$breakdown = null;
$data_breakdown = array();
$contacts_data = [];
foreach ($contacts as $contact) {
$assigned_user = $em->getRepository(User::class)->findOneById($contact->getAssignedAgent());
$created_user = $em->getRepository(User::class)->findOneById($contact->getCreatedId());
$assigned_user = empty($assigned_user) ? ($em->getRepository(User::class)->findOneById(6)) : $assigned_user;
$created_user = empty($created_user) ? ($em->getRepository(User::class)->findOneById(6)) : $created_user;
$contact->setAssignedAgent($assigned_user->getName() . ' ' . $assigned_user->getLastName());
$contact->setCreatedId($created_user->getName() . ' ' . $created_user->getLastName());
$breakdown_Control = $em->getRepository(CommercialBreakdownVolumeControl::class)->findBy(
array(
'clientId' => $contact->getClientId(),
'contactId' => $contact->getId(),
)
);
if (!empty($breakdown_Control)) {
foreach ($breakdown_Control as $breakdownControl) {
$breakdown = $em->getRepository(CommercialBreakdownVolume::class)->findByControlId($breakdownControl->getId());
$data_breakdown[] = array(
'breakdownControl' => $breakdownControl,
'breakdown' => $breakdown,
);
// d($data_breakdown);
}
}
$contacts_data[] = array(
'contacts' => $contact,
'breakdown' => $data_breakdown,
);
}
return $this->render('client/contact/list-contact.html.twig', array(
'id' => $idclient,
'clients' => $client,
'contacts' => $contacts_data
));
}
/**
* @Route("/client/contact/add/{idclient}", name="contact_add")
*/
public function addClientContactAction($idclient, Request $request)
{
$contact = new ClientContact();
$contact->setClientId($idclient);
$form = $this->createClientContactCreateForm($contact);
return $this->render('client/contact/add-contact.html.twig', array(
'id' => $idclient,
'idclient' => $idclient,
'form' => $form->createView()
));
}
private function createClientContactCreateForm(ClientContact $entity)
{
$form = $this->createForm(ClientContactType::class, $entity, array(
'action' => $this->generateUrl('contact_create'),
'method' => 'POST'
));
return $form;
}
/**
* @Route("/client/contact/new/{idclient}", name="contact_new")
*/
public function newClientContactAction($idclient, Request $request)
{
$contact = new ClientContact();
$contact->setClientId($idclient);
$form = $this->NewCreateClientContactCreateForm($contact);
return $this->render('client/contact/modal/add-modal-contact.html.twig', array('idclient' => $idclient, 'form' => $form->createView()));
}
private function NewCreateClientContactCreateForm(ClientContact $entity)
{
$form = $this->createForm(ClientContactType::class, $entity, array(
'action' => $this->generateUrl('contact_create_new'),
'method' => 'POST'
));
return $form;
}
/**
* @Route("/client/contact/newcreate", name="contact_create_new")
*/
public function newcreateContactAction(Request $request, LoggerInterface $logger)
{
$telephone_data = $_POST['contact']['phone'];
$email_data = $_POST['contact']['email'];
$contact = new ClientContact();
$form = $this->createClientContactCreateForm($contact);
$form->handleRequest($request);
$client_agent = $form->get('assignedAgent')->getData();
if (!is_null($client_agent)) {
$contact->setAssignedAgent($client_agent->getId());
}
$verifico_phone = $this->getDoctrine()->getRepository(ClientContact::class)->findOneByPhone($telephone_data);
$verifico_email = $this->getDoctrine()->getRepository(ClientContact::class)->findOneByEmail($email_data);
if (empty($verifico_phone) AND empty($verifico_email)) {
if ($form->isValid()) {
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$contact->setCreatedId($user_id);
$contact->setUpdatedId($user_id);
$em = $this->getDoctrine()->getManager();
// $em->persist($contact);
// $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($contact);
$em->flush();
$event = 'The Client Contact has been created';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajecontact', $successMessage);
$logger->info($event_complete . ' | ' . $event);
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage() . ' | transport';
/* Para el log */
$logger->error($event_complete . ' | ' . $event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajecontacterror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
return $this->redirectToRoute('client_edit',
array(
'id' => $contact->getClientId()
));
} else {
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajecontacterror', $errorMessage);
}
} else {
$errorMessage = $this->translator->trans('The Contact of the Client already exists');
$this->addFlash('mensajecontacterror', $errorMessage);
}
return $this->redirectToRoute('contact_add',
array(
'idclient' => $contact->getClientId()
)
);
}
/**
* @Route("/client/contact/new2/{idclient}", name="contact_new2")
*/
public function new2ClientContactAction($idclient, Request $request)
{
$contact = new ClientContact();
$contact->setClientId($idclient);
$form = $this->New2CreateClientContactCreateForm($contact);
return $this->render('client/contact/modal/add-modal-contact.html.twig', array('idclient' => $idclient, 'form' => $form->createView()));
}
private function New2CreateClientContactCreateForm(ClientContact $entity)
{
$form = $this->createForm(ClientContactType::class, $entity, array(
'action' => $this->generateUrl('contact_create_new2'),
'method' => 'POST'
));
return $form;
}
/**
* @Route("/client/contact/new2create", name="contact_create_new2")
*/
public function new2createContactAction(Request $request, LoggerInterface $logger)
{
$telephone_data = $_POST['contact']['phone'];
$email_data = $_POST['contact']['email'];
$contact = new ClientContact();
$form = $this->createClientContactCreateForm($contact);
$form->handleRequest($request);
$client_agent = $form->get('assignedAgent')->getData();
if (!is_null($client_agent)) {
$contact->setAssignedAgent($client_agent->getId());
}
$verifico_phone = $this->getDoctrine()->getRepository(ClientContact::class)->findOneByPhone($telephone_data);
$verifico_email = $this->getDoctrine()->getRepository(ClientContact::class)->findOneByEmail($email_data);
if (empty($verifico_phone) AND empty($verifico_email)) {
if ($form->isValid()) {
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$contact->setCreatedId($user_id);
$contact->setUpdatedId($user_id);
$em = $this->getDoctrine()->getManager();
// $em->persist($contact);
// $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($contact);
$em->flush();
$event = 'The Client Contact has been created';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajecontact', $successMessage);
$logger->info($event_complete . ' | ' . $event);
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage() . ' | transport';
/* Para el log */
$logger->error($event_complete . ' | ' . $event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajecontacterror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
return $this->redirectToRoute('contact_index',
array(
'idclient' => $contact->getClientId()
));
} else {
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajecontacterror', $errorMessage);
}
} else {
$errorMessage = $this->translator->trans('The Contact of the Client already exists');
$this->addFlash('mensajecontacterror', $errorMessage);
}
return $this->redirectToRoute('contact_index',
array(
'idclient' => $contact->getClientId()
)
);
}
/**
* @Route("/client/contact/create", name="contact_create")
*/
public function createContactAction(Request $request, LoggerInterface $logger)
{
$telephone_data = $request->request->get('contact')['phone'];
$email_data = $request->request->get('contact')['email'];
$contact = new ClientContact();
$form = $this->createClientContactCreateForm($contact);
$form->handleRequest($request);
$client_agent = $form->get('assignedAgent')->getData();
if (!is_null($client_agent)) {
$contact->setAssignedAgent($client_agent->getId());
}
$verifico_phone = $this->getDoctrine()->getRepository(ClientContact::class)->findOneByPhone($telephone_data);
// $verifico_email = $this->getDoctrine()->getRepository(ClientContact::class)->findOneByEmail($email_data);
// if (empty($verifico_phone) AND empty($verifico_email)) {
if (empty($verifico_phone)) {
if ($form->isValid()) {
$email = $request->request->get('contact')['email'];
if (isset($request->request->get('suppliercontact')['newsletter'])) {
$newsletters = $request->request->get('suppliercontact')['newsletter'];
$contact->setNewsletter(implode(",", $newsletters));
} else {
$contact->setNewsletter(null);
}
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$contact->setCreatedId($user_id);
$contact->setUpdatedId($user_id);
$em = $this->getDoctrine()->getManager();
/* 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($contact);
$em->flush();
$event = 'The Client Contact has been created';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajecontact', $successMessage);
$logger->info($event_complete . ' | ' . $event);
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage() . ' | transport';
/* Para el log */
$logger->error($event_complete . ' | ' . $event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajecontacterror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
if (isset($request->request->get('suppliercontact')['newsletter'])) {
$newsletters = $request->request->get('suppliercontact')['newsletter'];
foreach ($newsletters as $newsletter) {
$correos = array(
'newsletterId' => $newsletter,
'email' => $email,
);
$revisar_correo = $em->getRepository(NewsLetterEmail::class)->findOneBy($correos);
if (empty($revisar_correo)) {
$newsletteremail = new NewsLetterEmail();
$newsletteremail->setNewsletterId($newsletter);
$newsletteremail->setEmail($email);
$newsletteremail->setClientId($contact->getClientId());
$newsletteremail->setType('Client');
$newsletteremail->setCreatedId($user_id);
$newsletteremail->setUpdatedId($user_id);
$em->persist($newsletteremail);
$em->flush();
} else {
$revisar_correo->setClientId($contact->getClientId());
$revisar_correo->setUpdatedId($user_id);
$revisar_correo->setType('Client');
$em->persist($revisar_correo);
$em->flush();
}
}
}
return $this->redirectToRoute('contact_index',
array(
'id' => $contact->getClientId(),
'idclient' => $contact->getClientId()
));
} else {
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajecontacterror', $errorMessage);
}
} else {
$errorMessage = $this->translator->trans('The Contact of the Client already exists');
$this->addFlash('mensajecontacterror', $errorMessage);
}
return $this->render('client/contact/add-contact.html.twig', array('id' => $contact->getClientId(), 'idclient' => $contact->getClientId(), 'form' => $form->createView()));
}
/**
* @Route("/client/contact/edited/{id}", name="contact_edit_new")
*/
public function NeweditContact($id)
{
$em = $this->getDoctrine()->getManager();
$contact = $em->getRepository(ClientContact::class)->findOneById($id);
$user = $em->getRepository(User::class)->findOneById($contact->getAssignedAgent());
$contact->setAssignedAgent($user);
$form = $this->NewCreateEditContactForm($contact, $id);
return $this->render('client/contact/modal/edit-modal-contact.html.twig',
array(
'contact' => $contact,
'form' => $form->createView()
)
);
}
private function NewCreateEditContactForm(ClientContact $entity, $id)
{
$form = $this->createForm(ClientContactType::class, $entity,
array(
'action' => $this->generateUrl('contact_update_new',
array(
'id' => $id
)
), 'method' => 'PUT'));
return $form;
}
/**
* @Route("/client/contact/updated/{id}", name="contact_update_new", methods={"POST"})
*/
public function NewUpdateAction($id, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$contact = $em->getRepository(ClientContact::class)->findOneById($id);
$form = $this->NewCreateEditContactForm($contact, $id);
$form->handleRequest($request);
$assignedAgent = $form->get('assignedAgent')->getData();
if (!is_null($assignedAgent)) {
$contact->setAssignedAgent($assignedAgent->getId());
}
if ($form->isSubmitted() && $form->isValid()) {
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$contact->getUpdatedId($user_id);
$em = $this->getDoctrine()->getManager();
// $em->persist($contact);
// $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($contact);
$em->flush();
$event = 'The Client Contact has been modified.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajecontact', $successMessage);
$logger->info($event_complete . ' | ' . $event);
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage() . ' | transport';
/* Para el log */
$logger->error($event_complete . ' | ' . $event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajecontacterror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
return $this->redirectToRoute('contact_index',
array(
'idclient' => $contact->getClientId()
)
);
}
return $this->render('client/contact/list-contact.html.twig',
array(
'idclient' => $contact->getClientId()
)
);
}
/**
* @Route("/client/contact/edit/{id}", name="contact_edit")
*/
public function editContact($id)
{
$em = $this->getDoctrine()->getManager();
$contact = $em->getRepository(ClientContact::class)->findOneById($id);
$user = $em->getRepository(User::class)->findOneById($contact->getAssignedAgent());
$contact->setAssignedAgent($user);
$newsletters = explode(",", $contact->getNewsletter());
$newsletterscontrol = $em->getRepository(NewsLetterControl::class)->findById($newsletters);
$contact->setNewsletter($newsletterscontrol);
$form = $this->createEditContactForm($contact, $id);
return $this->render('client/contact/edit-contact.html.twig',
array(
'id' => $id,
'contact' => $contact,
'form' => $form->createView()
)
);
}
private function createEditContactForm(ClientContact $entity, $id)
{
$form = $this->createForm(ClientContactType::class, $entity,
array(
'action' => $this->generateUrl('contact_update',
array(
'id' => $id
)
), 'method' => 'PUT'));
return $form;
}
/**
* @Route("/client/contact/update/{id}", name="contact_update", methods={"POST", "PUT"})
*/
public function updateAction($id, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$contact = $em->getRepository(ClientContact::class)->findOneById($id);
$contact->setNewsletter(null);
$assignedAgent = $contact->getAssignedAgent();
$form = $this->createEditContactForm($contact, $id);
$form->handleRequest($request);
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_role = $user_logueado->getRole();
$user_userrol = $user_logueado->getUserrol();
/* VERIFICAR EL weight DEL USUARIO */
$accesoNivel = $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
$nivelAcceso = $accesoNivel->getWeight();
if ($user_role == "ROLE_ADMIN" || $nivelAcceso <= '2') {
$assignedAgent = $form->get('assignedAgent')->getData();
if (!is_null($assignedAgent)) {
$contact->setAssignedAgent($assignedAgent->getId());
}
} else {
$contact->setAssignedAgent($assignedAgent);
}
if ($form->isSubmitted() && $form->isValid()) {
$user_id = $user_logueado->getId();
// d($user_id);
// exit();
$contact->setUpdatedId($user_id);
if (isset($request->request->get('contact')['newsletter'])) {
$newsletters = $request->request->get('contact')['newsletter'];
$contact->setNewsletter(implode(",", $newsletters));
} else {
$contact->setNewsletter(null);
}
$email = $request->request->get('contact')['email'];
if (isset($request->request->get('contact')['newsletter'])) {
$newsletters = $request->request->get('contact')['newsletter'];
foreach ($newsletters as $newsletter) {
$correos = array(
'newsletterId' => $newsletter,
'email' => $email
);
$revisar_correo = $em->getRepository(NewsLetterEmail::class)->findOneBy($correos);
if (empty($revisar_correo)) {
$newsletteremail = new NewsLetterEmail();
$newsletteremail->setNewsletterId($newsletter);
$newsletteremail->setEmail($email);
$newsletteremail->setClientId($contact->getClientId());
$newsletteremail->setType('Client');
$newsletteremail->setCreatedId($user_id);
$newsletteremail->setUpdatedId($user_id);
$em->persist($newsletteremail);
$em->flush();
} else {
$revisar_correo->setClientId($contact->getClientId());
$revisar_correo->setUpdatedId($user_id);
$revisar_correo->setType('Client');
$em->persist($revisar_correo);
$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($contact);
$em->flush();
$event = 'The Client Contact has been modified.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajecontact', $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('mensajecontacterror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
return $this->redirectToRoute('contact_index',
array(
'idclient' => $contact->getClientId()
)
);
}
return $this->render('client/contact/edit-contact.html.twig',
array(
'id' => $contact->getClientId(),
'idclient' => $contact->getClientId(),
'contact' => $contact,
'form' => $form->createView()
)
);
}
/**
* @Route("/client/contact/listdesplegable", name="get_contact_select")
*/
public function contactSelectAction(Request $request)
{
$idclient = $_POST['client'];
$em = $this->getDoctrine()->getManager();
$contacts = $em->getRepository(ClientContact::class)->findByClientId($idclient);
if (!empty($contacts)) {
$datos = array();
foreach ($contacts as $contact) {
$datos[] = array(
"idcliente" => $contact->getClientId(),
"id" => $contact->getId(),
"name" => $contact->getName(),
"lastname" => $contact->getLastname(),
"department" => $contact->getDepartment(),
);
}
} else {
$datos[] = array(
"idcliente" => '',
"id" => '',
"name" => $this->translator->trans('Nonexistent contact'),
"lastname" => '',
"department" => $this->translator->trans('Please add contact'),
);
}
$return = array(
'contacts' => $datos,
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/client/contact/add-image", name="client_contact_image")
*/
public function addClientContactImage()
{
$dataa = $_POST['image'];
list($type, $data) = explode(';', $dataa);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
$imageName = time() . '.png';
$ruta = "assets/images/clients/contact/";
if (!file_exists($ruta)) {
mkdir($ruta, 0777, true);
}
$file = fopen($ruta . $imageName, "wb");
fwrite($file, $data);
fclose($file);
$return = array(
'base64' => $dataa,
'nombre_archivo' => $ruta . $imageName,
);
$response = new JsonResponse($return);
return $response;
}
}