Package br.com.buyFast.controller

Source Code of br.com.buyFast.controller.CustomerController

package br.com.buyFast.controller;

import java.io.Serializable;
import java.sql.Timestamp;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.annotation.Resource;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.buyFast.model.Address;
import br.com.buyFast.model.Customer;
import br.com.buyFast.model.ItemsOrder;
import br.com.buyFast.model.Order;
import br.com.buyFast.model.StatusEnum;
import br.com.buyFast.service.EmailService;
import br.com.buyFast.service.Facade;
import br.com.buyFast.service.ServiceException;
import br.com.buyFast.util.FacesUtil;

/**
* Classe responsável pelo controller de clientes.
*/
@Controller("customerController")
@Scope("session")
public class CustomerController implements Serializable {

  /**
   * {@link Serializable}.
   */
  private static final long serialVersionUID = 1L;

  /**
   * Apresenta o log na aplicação.
   */
  private static final Log logger = LogFactory.getLog(CustomerController.class);
 
  /**
   * Representa o cliente logado na aplicação.
   */
  private Customer customer;
 
  /**
   * Utilizado para obter o e-mail do usuário que esqueceu a senha.
   */
  private String email;
 
  /**
   * Responsável pelo serviço de e-mail.
   */
  @Resource
  private EmailService emailService;
 
  /**
   * Utilizado para verificação de senha.
   */
  private String validationPassword;
 
  /**
   * Utilizado para a verificação de email.
   */
  private String validationEmail;
 
  /**
   * Representa a camada de serviço da aplicação.
   */
  @Resource
  private Facade facade;
 
  /**
   * Armazena o último acesso do usuário.
   */
  private String originViewId;
 
  /**
   * captura a sessão do contexto criado pelo JavaServer Faces.
   */
  private FacesContext fc;
 
  /**
   * Representa a sessão.
   */
  private HttpSession session;

  /**
   * DataModel de pedidos não pagos.
   */
  private DataModel dataModelOrderNotPaid;

  /**
   * DataModel de pedidos.
   */
  private DataModel dataModelOrders;
 
  /**
   * Construtor padrão.
   */
  public CustomerController() {
    resetCustomer();
    this.fc = FacesContext.getCurrentInstance();
    this.session = (HttpSession) fc.getExternalContext().getSession(false);
  }
 
  /**
   * Método para acessar a conta do usuário.
   * Este método verifica se o usuário está logado.
   * @return caso usuário logado, redireciona para a página da conta do usuário.
   * caso contrário, vai para a página para login.
   */
  public String myAccount() {
    if (session.getAttribute("user") != null) {
      //Se estiver logado, ir para este caminho.
      return "myAccount";
    }
    //Se não estiver logado, ir para a página de login.
    return "userLogin";
  }

  /**
   * Retorna para a tela de cadastro de cliente.
   * @return Para a tela de cadastro de cliente.
   */
  public String customerRegister() {
   
    return "customerForm";
  }
 
  /**
   * Método responsável pelo login do usuário.
   * @return caso usuário logado, ir para a página do mesmo.
   */
  public String login() {
    //Obter o usuário cadastrado.
    Customer customer = null;
    try {
      customer = getCustomerLogin(this.customer.getEmail());
    } catch (ServiceException e) {
      String error = "Erro ao obter usuário.";
      logger.error(error, e);
      FacesUtil.mensErro("", FacesUtil.getMessage("customerControllerErrorgetCustomer"));
      return null;
    }
   
    //verificar usuário e senha.
    if (customer != null && customer.getPassword().equals(this.customer.getPassword())) {
      //Cria uma nova sessão.
      session.setAttribute("user", customer);
     
      //Seta o usuário.
      this.customer = customer;
     
      // caso a sessão msg esteja com valor, a remove
      if (session.getAttribute("msg") != null) {
        session.removeAttribute("msg");
      }
     
//      Retorna para a página do usuário.
      if (originViewId != null) {
       
        FacesUtil.redirectPage(originViewId);
        return null;
      } else {
        return "myAccount";
      }
     
    } else {
      FacesUtil.mensErro("", FacesUtil.getMessage("customerPasswordLoginInvalid"));
    }
   
    return null;
  }
 
  /**
   * Fecha o login do usuário.
   * @return retorna para a página.
   */
  public String logout() {
    session.removeAttribute("user");
   
    // caso a sessão msg esteja com valor, a remove
    if (session.getAttribute("msg") != null) {
      session.removeAttribute("msg");
    }
   
    resetCustomer();
   
    return "home";
  }
 
  /**
   * Registra um novo usuário.
   * @return Retorna para a página de login.
   */
  public String register() {
   
    // Verifica a confirmação do e-mail.
    if (this.customer.getId() == null && !this.validationEmail.equals(this.customer.getEmail())) {
      logger.error("Erro de confirmação de e-mail.");
      FacesUtil.mensErro("", FacesUtil.getMessage("messageValidateConfirmEmail"));
     
      //Apagando e-mail de confirmação.
      this.validationEmail = "";
     
      return null;
    }
   
    //Verifica a confirmação da senha.
    if (this.customer.getId() == null && !this.validationPassword.equals(this.customer.getPassword())) {
      logger.error("Erro de confirmação de senha.");
      FacesUtil.mensErro("", FacesUtil.getMessage("messageValidateConfirmPassword"));
     
      //Apaga a senha de confirmação.
      this.validationPassword = "";
     
      return null;
    }
   
    //Apaga as validações
    this.validationPassword = "";
    this.validationEmail = "";
   
    try {
      logger.info("Salavando cadastro do cliente...");
      if (this.customer.getId() != null) {
        facade.customerUpdate(customer);
       
        try {
          sendContact();
        } catch (ServiceException e) {
          logger.error("Erro ao enviar e-mail de confirmação de cadastro.", e);
          FacesUtil.mensWarn("", FacesUtil.getMessage("customerControllerErrorSendEmailRegisterCustomer"));
        }
       
        return "userLogged";
       
      } else {
        facade.customerRecord(customer);
      }
    } catch (ServiceException e) {
      logger.error("Erro ao salvar registro do cliente " + this.customer, e);
      FacesUtil.mensErro("", FacesUtil.getMessage("customerControllerErrorRegisterCustomer"));
      return null;
    }
   
    try {
      sendContact();
    } catch (ServiceException e) {
      logger.error("Erro ao enviar e-mail de confirmação de cadastro.", e);
      FacesUtil.mensWarn("", FacesUtil.getMessage("customerControllerErrorSendEmailRegisterCustomer"));
    }
   
    //Mensagem de confirmação de cadastro.
    FacesUtil.mensInfo("", FacesUtil.getMessage("customerControllerSuccessRegisterCustomer"));
   
    resetCustomer();
   
    return "userLogin";
   
  }
 
  /**
   * Obter os pedidos não pagos do cliente logado.
   * @return A lista dos pedidos não pagos do cliente.
   */
  public DataModel getOrdersNotPaid() {
    try {
      dataModelOrderNotPaid = new ListDataModel(facade.getOrdersNotPaid(customer));
      return dataModelOrderNotPaid;
    } catch (ServiceException e) {
      logger.error("Erro ao obter lista de pedidos não pagos.", e);
      FacesUtil.mensErro("", FacesUtil.getMessage("customerControllerErrorGetOrderNotPaid"));
    }
   
    return new ListDataModel();
  }
 
  /**
   * Obter os pedidos do cliente logado.
   * @return A lista dos pedidos do cliente.
   */
  public DataModel getOrders() {
    try {
      dataModelOrders = new ListDataModel(facade.getOrders(customer));
      return dataModelOrders;
    } catch (ServiceException e) {
      logger.error("Erro ao obter lista de pedidos.", e);
      FacesUtil.mensErro("", FacesUtil.getMessage("customerControllerErrorGetOrder"));
    }
   
    return new ListDataModel();
  }
 
  /**
   * Confirmar o pedido selecionado na tabela de não pagos.
   * @return
   */
  public String confirmPayment() {
    Order order = (Order) dataModelOrderNotPaid.getRowData();
    // Altera para o status "Em processo".
    order.setStatusEnum(StatusEnum.INPROCESS);
    // Data do pagamento.
    order.setPaymentDate(new Timestamp((new Date()).getTime()));
    try {
      facade.updateOrder(order);
    } catch (ServiceException e) {
      logger.error("Erro ao atualizar status do pedido.", e);
      FacesUtil.mensErro("", FacesUtil.getMessage("customerControllerErrorGetOrderNotPaid"));
    }
    // Envio de e-mail.
    try {
      sendConfirmPayment(order);
    } catch (ServiceException e) {
      logger.error("Erro ao enviar e-mail de confirmação de pagamento.", e);
      FacesUtil.mensWarn("", FacesUtil.getMessage("customerControllerErrorSendConfirmPayment"));
    }
   
    return null;
  }
 
  /**
   * Obter o usuário que tenha o e-mail informado pelo parâmetro.
   * @param email o e-mail do usuário.
   * @return o usuário cadastrado no sistema.
   * @throws ServiceException
   */
  private Customer getCustomerLogin(String email) throws ServiceException {
   
    return facade.getCustomerLogin(email);
  }
 
  /**
   * Envia a mensagem de confirmação de cadastro.
   * @throws ServiceException
   */
  public void sendContact() throws ServiceException {
      logger.info("Enviando e-mail para " + this.customer);
     
      SimpleDateFormat df = new SimpleDateFormat("dd/MM/yy - HH:mm:ss");
     
      StringBuilder builder = new StringBuilder();
     
      if (this.customer.getId() != null) {
        builder.append("<h2>Atualização no cadastro do site BuyFast:</h2><br />");
      } else {
        builder.append("<h2>Cadastro no site BuyFast:</h2><br />");
      }
      builder.append("<b>Hora do cadastro:</b> " + df.format(new Date()) + "<br />");
      builder.append("<b>Nome:</b> " + this.customer.getName() + "<br />");
      builder.append("<b>E-mail:</b> " + this.customer.getEmail() + "<br />");
      builder.append("<b>Assunto:</b> Cadastro no site BuyFast<br />");
      builder.append("<b>Mensagem:</b>");
      builder.append("Seu cadastro foi efetuado com sucesso no site do buyFast.<br />");
      builder.append("Dados para acesso ao site:<br />");
      builder.append("Login: " + this.customer.getEmail());
      builder.append("<br />");
      builder.append("Senha: " + this.customer.getPassword());
     
      emailService.send(this.customer.getEmail(), "buyfast@buyfast.com", "Cadastro no site BuyFast",
          builder.toString());
   
  }
 
  /**
   * Envia a mensagem de confirmação de pagamento de pedido.
   * @throws ServiceException
   */
  public void sendConfirmPayment(Order order) throws ServiceException {
      logger.info("Enviando e-mail para " + this.customer);
     
      SimpleDateFormat df = new SimpleDateFormat("dd/MM/yy - HH:mm:ss");
     
      StringBuilder builder = new StringBuilder();
      NumberFormat format = NumberFormat.getCurrencyInstance();
     
      builder.append("<h2>Confirmação de pagamento de pedido - site BuyFast:</h2><br />");
      builder.append("<b>Hora do pagamento:</b> " + df.format(new Date()) + "<br />");
      builder.append("<b>Mensagem:</b>");
      builder.append("Confirmação de pagamento do pedido código " + order.getId() + ".<br />");
      builder.append("<b>Dados do pedido:</b> <br />");
      double total = 0.0d;
      for (ItemsOrder itemsOrder : order.getItemsOrders()) {
        builder.append(itemsOrder.getQuantity());
        builder.append(" - ");
        builder.append(itemsOrder.getProduct().getName());
        builder.append(" - ");
        builder.append(format.format(itemsOrder.getPrice()));
        builder.append("<br />");
        total += itemsOrder.getPrice();
      }
      builder.append("<br /><b>Total:</b> " + format.format(total));
      builder.append("<br /><b>Data do pedido:</b> " + df.format(order.getOrderDate()));
     
      emailService.send(this.customer.getEmail(), "buyfast@buyfast.com", "Confirmação de Pagamento - site BuyFast",
          builder.toString());
   
  }
 
  /**
   * Utilizado para "resetar" customer.
   */
  private void resetCustomer() {
    this.customer = new Customer();
    this.customer.setAddress(new Address());
  }
 
  /**
   * Prepara para a obtenção de senha do usuário.
   * @return para a página de login.
   */
  public String sendForgotPassword() {
    try {
      this.customer = facade.getCustomerLogin(this.email);
    } catch (ServiceException e1) {
      logger.error("Erro ao obter dados do usuário.", e1);
      FacesUtil.mensErro("", FacesUtil.getMessage("customerControllerErrorGetCustomerEmail"));
      return null;
    }
   
    logger.info("Enviando e-mail para " + this.customer);
   
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yy - HH:mm:ss");
   
    StringBuilder builder = new StringBuilder();
   
    builder.append("<h2>site BuyFast:</h2><br />");
    builder.append("<b>Hora do envio:</b> " + df.format(new Date()) + "<br />");
    builder.append("<b>Dados:</b>");
    builder.append("Seu cadastro foi efetuado com sucesso no site do buyFast.<br />");
    builder.append("Dados para acesso ao site:<br />");
    builder.append("Login: " + this.customer.getEmail());
    builder.append("<br />");
    builder.append("Senha: " + this.customer.getPassword());
   
    try {
      emailService.send(this.customer.getEmail(), "buyfast@buyfast.com", "Cadastro no site BuyFast",
          builder.toString());
    } catch (ServiceException e) {
      logger.error("Erro ao enviar e-mail de recuperação de senha.", e);
      FacesUtil.mensErro("", FacesUtil.getMessage("customerControllerErrorForgotPassword"));
      return null;
    }
   
    return "userLogin";
  }
 
  //Getters and Setters
 
  /**
   * Obter o cliente logado na aplicação.
   * @return O cliente logado na aplicação.
   */
  public Customer getCustomer() {
    return customer;
  }

  /**
   * Ajustar o cliente logado na aplicação.
   * @param customer O cliente logado na aplicação.
   */
  public void setCustomer(Customer customer) {
    this.customer = customer;
  }

  /**
   * Obter o último acesso do usuário.
   * Após obter este valor, o atributo de classe é setado como nulo.
   * @return o último acesso do usuário.
   */
  public String getOriginViewId() {
    String tmp = originViewId;
    originViewId = null;
    return tmp;
  }

  /**
   * Ajustar o último acesso do usuário.
   * @param originViewId O último acesso do usuário.
   */
  public void setOriginViewId(String originViewId) {
    this.originViewId = originViewId;
  }

  /**
   * Ajustar a camada de serviço da aplicação.
   * @param facade A camada de serviço da aplicação.
   */
  public void setFacade(Facade facade) {
    this.facade = facade;
  }

  /**
   * Obter validação da senha.
   * @return a senha para validação.
   */
  public String getValidationPassword() {
    return validationPassword;
  }

  /**
   * Ajustar a validação da senha.
   * @param validationPassword a senha para validação.
   */
  public void setValidationPassword(String validationPassword) {
    this.validationPassword = validationPassword;
  }

  /**
   * Obter o e-mail para validação.
   * @return o e-mail para validação.
   */
  public String getValidationEmail() {
    return validationEmail;
  }

  /**
   * Ajustar o e-mail para validação.
   * @param validationEmail O e-mail para validação.
   */
  public void setValidationEmail(String validationEmail) {
    this.validationEmail = validationEmail;
  }

  /**
   * Obter o e-mail para receber senha.
   * @return O e-mail para receber senha.
   */
  public String getEmail() {
    return email;
  }

  /**
   * Ajustar o e-mail para receber senha.
   * @param email O e-mail para receber senha.
   */
  public void setEmail(String email) {
    this.email = email;
  }

  /**
   * Ajustar o atributo responsável pelo envio de e-mail.
   * @param emailService A camada de serviço responsável pelo envio de e-mail.
   */
  public void setEmailService(EmailService emailService) {
    this.emailService = emailService;
  }
 
}
TOP

Related Classes of br.com.buyFast.controller.CustomerController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.