/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
* http://www.apache.org/licenses/LICENSE-2.0
*
* Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.service;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Hibernate;
import org.hoteia.qalingo.core.domain.Asset;
import org.hoteia.qalingo.core.domain.Cart;
import org.hoteia.qalingo.core.domain.Customer;
import org.hoteia.qalingo.core.domain.CustomerAddress;
import org.hoteia.qalingo.core.domain.CustomerCredential;
import org.hoteia.qalingo.core.domain.CustomerGroup;
import org.hoteia.qalingo.core.domain.CustomerMarketArea;
import org.hoteia.qalingo.core.domain.CustomerOptin;
import org.hoteia.qalingo.core.domain.CustomerPayment;
import org.hoteia.qalingo.core.domain.Email;
import org.hoteia.qalingo.core.domain.EngineEcoSession;
import org.hoteia.qalingo.core.domain.Market;
import org.hoteia.qalingo.core.domain.MarketArea;
import org.hoteia.qalingo.core.domain.OrderItem;
import org.hoteia.qalingo.core.domain.OrderPurchase;
import org.hoteia.qalingo.core.domain.ProductSku;
import org.hoteia.qalingo.core.domain.Retailer;
import org.hoteia.qalingo.core.domain.Retailer_;
import org.hoteia.qalingo.core.domain.Store;
import org.hoteia.qalingo.core.domain.enumtype.CustomerPlatformOrigin;
import org.hoteia.qalingo.core.domain.enumtype.FoUrls;
import org.hoteia.qalingo.core.email.bean.ContactEmailBean;
import org.hoteia.qalingo.core.email.bean.CustomerForgottenPasswordEmailBean;
import org.hoteia.qalingo.core.email.bean.CustomerNewAccountConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.CustomerResetPasswordConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.NewsletterEmailBean;
import org.hoteia.qalingo.core.email.bean.OrderConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.OrderItemEmailBean;
import org.hoteia.qalingo.core.email.bean.RetailerContactEmailBean;
import org.hoteia.qalingo.core.exception.UniqueNewsletterSubscriptionException;
import org.hoteia.qalingo.core.fetchplan.FetchPlan;
import org.hoteia.qalingo.core.fetchplan.SpecificFetchMode;
import org.hoteia.qalingo.core.i18n.enumtype.ScopeWebMessage;
import org.hoteia.qalingo.core.i18n.message.CoreMessageSource;
import org.hoteia.qalingo.core.security.helper.SecurityUtil;
import org.hoteia.qalingo.core.util.CoreUtil;
import org.hoteia.qalingo.core.web.mvc.form.ContactForm;
import org.hoteia.qalingo.core.web.mvc.form.CreateAccountForm;
import org.hoteia.qalingo.core.web.mvc.form.CustomerAddressForm;
import org.hoteia.qalingo.core.web.mvc.form.CustomerContactForm;
import org.hoteia.qalingo.core.web.mvc.form.CustomerEditForm;
import org.hoteia.qalingo.core.web.mvc.form.ForgottenPasswordForm;
import org.hoteia.qalingo.core.web.mvc.form.PaymentForm;
import org.hoteia.qalingo.core.web.mvc.form.ResetPasswordForm;
import org.hoteia.qalingo.core.web.mvc.viewbean.AssetViewBean;
import org.hoteia.qalingo.core.web.resolver.RequestData;
import org.hoteia.qalingo.core.web.util.RequestUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service("webManagementService")
@Transactional
public class WebManagementService {
@Autowired
protected CustomerService customerService;
@Autowired
protected RetailerService retailerService;
@Autowired
protected CatalogCategoryService catalogCategoryService;
@Autowired
protected ProductService productService;
@Autowired
protected CheckoutService checkoutService;
@Autowired
protected CartService cartService;
@Autowired
protected OrderPurchaseService orderPurchaseService;
@Autowired
protected EngineSettingService engineSettingService;
@Autowired
protected EngineSessionService engineSessionService;
@Autowired
protected ReferentialDataService referentialDataService;
@Autowired
protected CoreMessageSource coreMessageSource;
@Autowired
protected UrlService urlService;
@Autowired
protected EmailService emailService;
@Autowired
protected RequestUtil requestUtil;
@Autowired
protected SecurityUtil securityUtil;
public void addToCart(final RequestData requestData, final String catalogCategoryCode, final String productSkuCode, final int quantity) throws Exception {
final Retailer retailer = requestData.getMarketAreaRetailer();
addToCart(requestData, retailer.getPrimaryStore(), catalogCategoryCode, productSkuCode, quantity);
}
public void addToCart(final RequestData requestData, final Store store, final String catalogCategoryCode, final String productSkuCode, final int quantity) throws Exception {
// SANITY CHECK : sku code is empty or null : no sense
if (StringUtils.isEmpty(productSkuCode)) {
throw new Exception("");
}
// SANITY CHECK : quantity is equal zero : no sense
if (quantity == 0) {
throw new Exception("");
}
Cart cart = requestData.getCart();
final HttpServletRequest request = requestData.getRequest();
if(cart == null) {
EngineEcoSession engineEcoSession = requestUtil.getCurrentEcoSession(request);
engineEcoSession = engineSessionService.addNewCart(engineEcoSession);
cart = engineEcoSession.getCart();
}
cart = cartService.addProductSkuToCart(cart, store, requestData.getVirtualCatalogCode(), catalogCategoryCode, productSkuCode, quantity);
updateRequestCart(requestData, cart);
}
public void updateCart(final RequestData requestData, final Store store, final String productSkuCode, final int quantity) throws Exception {
updateCart(requestData, store, null, productSkuCode, quantity);
}
public void updateCart(final RequestData requestData, final Store store, final String catalogCategoryCode, final String productSkuCode, final int quantity) throws Exception {
final HttpServletRequest request = requestData.getRequest();
// SANITY CHECK : sku code is empty or null : no sense
if (StringUtils.isEmpty(productSkuCode)) {
throw new Exception("");
}
// SANITY CHECK : quantity is equal zero : no sense
if (quantity == 0) {
throw new Exception("");
}
Cart cart = requestData.getCart();
if(cart == null) {
EngineEcoSession engineEcoSession = requestUtil.getCurrentEcoSession(request);
engineEcoSession = engineSessionService.addNewCart(engineEcoSession);
cart = engineEcoSession.getCart();
}
cartService.updateCartItem(cart, store, requestData.getVirtualCatalogCode(), catalogCategoryCode, productSkuCode, quantity);
updateRequestCart(requestData, cart);
}
public void updateCartAddresses(final RequestData requestData, final Long billingAddressId, final Long shippingAddressId) throws Exception {
final HttpServletRequest request = requestData.getRequest();
Cart cart = requestData.getCart();
if(cart == null) {
return;
}
cart.setBillingAddressId(billingAddressId);
cart.setShippingAddressId(shippingAddressId);
saveCartAndUpdateRequestCart(requestData, cart);
}
public Cart saveCartAndUpdateRequestCart(final RequestData requestData, Cart cart) throws Exception {
final HttpServletRequest request = requestData.getRequest();
cartService.saveOrUpdateCart(cart);
// RELOAD BECAUSE PREVIOUS PERSIT BREAK THE FETCHPLAN
Cart newCart = cartService.getCartById(cart.getId());
newCart.copyTransient(cart);
requestUtil.updateCurrentCart(request, newCart);
requestData.setCart(newCart);
return newCart;
}
public Cart updateRequestCart(final RequestData requestData, Cart cart) throws Exception {
final HttpServletRequest request = requestData.getRequest();
// RELOAD BECAUSE PREVIOUS PERSIT BREAK THE FETCHPLAN
Cart newCart = cartService.getCartById(cart.getId());
newCart.copyTransient(cart);
requestUtil.updateCurrentCart(request, newCart);
requestData.setCart(newCart);
return newCart;
}
public void linkAndUpdateCartWithCustomer(final RequestData requestData, final Customer customer) throws Exception {
final HttpServletRequest request = requestData.getRequest();
Cart cart = requestData.getCart();
if(cart == null) {
return;
}
cart.setCustomerId(customer.getId());
cart.setBillingAddressId(customer.getDefaultBillingAddressId());
cart.setShippingAddressId(customer.getDefaultShippingAddressId());
updateRequestCart(requestData, cart);
}
public void deleteCartItem(final RequestData requestData, final Store store, final String productSkuCode) throws Exception {
final HttpServletRequest request = requestData.getRequest();
Cart cart = requestData.getCart();
if(cart == null) {
return;
}
cartService.deleteCartItem(cart, store, productSkuCode);
updateRequestCart(requestData, cart);
}
public void setCartShippingAddress(final RequestData requestData, final String customerShippingAddressId) throws Exception {
final HttpServletRequest request = requestData.getRequest();
Customer customer = requestData.getCustomer();
Cart cart = requestData.getCart();
if(cart == null) {
return;
}
Long customerAddressId = Long.parseLong(customerShippingAddressId);
cartService.setShippingAddress(cart, customer, customerAddressId);
updateRequestCart(requestData, cart);
}
public void setCartBillingAddress(final RequestData requestData, final String customerBillingAddressId) throws Exception {
final HttpServletRequest request = requestData.getRequest();
Customer customer = requestData.getCustomer();
Cart cart = requestData.getCart();
if(cart == null) {
return;
}
Long customerAddressId = Long.parseLong(customerBillingAddressId);
cartService.setBillingAddress(cart, customer, customerAddressId);
updateRequestCart(requestData, cart);
}
public void setDeliveryMethod(final RequestData requestData, final String deliveryMethodCode) throws Exception {
final HttpServletRequest request = requestData.getRequest();
Cart cart = requestData.getCart();
if(cart == null) {
return;
}
cartService.setDeliveryMethod(cart, deliveryMethodCode);
updateRequestCart(requestData, cart);
}
public void cleanCart(final RequestData requestData) throws Exception {
final HttpServletRequest request = requestData.getRequest();
requestUtil.resetCurrentCart(request);
}
public Customer buildAndSaveQuickNewCustomer(final RequestData requestData, final Market market, final MarketArea marketArea, final CreateAccountForm createAccountForm) throws Exception {
return buildAndSaveQuickNewCustomer(requestData.getRequest(), market, marketArea, createAccountForm);
}
public Customer buildAndSaveQuickNewCustomer(final HttpServletRequest request, final Market market, final MarketArea marketArea, final CreateAccountForm createAccountForm) throws Exception {
Customer customer = new Customer();
customer.setLogin(createAccountForm.getEmail());
customer.setLastname(createAccountForm.getLastname());
customer.setPassword(securityUtil.generateAndEncodePassword());
if(StringUtils.isNotEmpty(createAccountForm.getEmail())){
customer.setEmail(createAccountForm.getEmail().toLowerCase());
}
return buildAndSaveNewCustomer(request, market, marketArea, customer);
}
public Customer buildAndSaveNewCustomer(final RequestData requestData, final Market market, final MarketArea marketArea,
final CreateAccountForm createAccountForm) throws Exception {
Customer customer = new Customer();
customer.setLogin(createAccountForm.getEmail());
customer.setTitle(createAccountForm.getTitle());
customer.setFirstname(createAccountForm.getFirstname());
customer.setLastname(createAccountForm.getLastname());
customer.setPassword(securityUtil.encodePassword(createAccountForm.getPassword()));
customer.setEmail(createAccountForm.getEmail());
customer = checkCustomerMarketArea(requestData, customer);
CustomerMarketArea customerMarketArea = customer.getCurrentCustomerMarketArea(marketArea.getId());
if(customerMarketArea != null){
customerMarketArea.setMobile(createAccountForm.getMobile());
customerMarketArea.setPhone(createAccountForm.getPhone());
customerMarketArea.setFax(createAccountForm.getFax());
if(createAccountForm.isOptin()){
CustomerOptin optinNewsletter = new CustomerOptin();
optinNewsletter.setType(CustomerOptin.OPTIN_TYPE_WWW_NEWSLETTER);
optinNewsletter.setCustomerMarketArea(customerMarketArea);
optinNewsletter.setOrigin("STANDARD");
customerMarketArea.getOptins().add(optinNewsletter);
}
}
CustomerAddress defaultAddress = new CustomerAddress();
if(StringUtils.isNotEmpty(createAccountForm.getAddressName())){
defaultAddress.setAddressName(createAccountForm.getAddressName());
} else {
defaultAddress.setAddressName(createAccountForm.getAddress1() + " (" + createAccountForm.getCity() + ")");
}
defaultAddress.setTitle(createAccountForm.getTitle());
defaultAddress.setLastname(createAccountForm.getLastname());
defaultAddress.setFirstname(createAccountForm.getFirstname());
defaultAddress.setAddress1(createAccountForm.getAddress1());
defaultAddress.setAddress2(createAccountForm.getAddress2());
defaultAddress.setAddressAdditionalInformation(createAccountForm.getAddressAdditionalInformation());
defaultAddress.setPostalCode(createAccountForm.getPostalCode());
defaultAddress.setCity(createAccountForm.getCity());
defaultAddress.setStateCode(createAccountForm.getStateCode());
defaultAddress.setCountryCode(createAccountForm.getCountryCode());
defaultAddress.setDefaultBilling(true);
defaultAddress.setDefaultShipping(true);
customer.getAddresses().add(defaultAddress);
return buildAndSaveNewCustomer(requestData, market, marketArea, customer);
}
public Customer updateCurrentCustomer(final RequestData requestData, final Market market, final MarketArea marketArea, final CustomerEditForm customerEditForm) throws Exception {
final HttpServletRequest request = requestData.getRequest();
String customerLogin = requestUtil.getCurrentCustomerLogin(request);
Customer customer = customerService.getCustomerByLoginOrEmail(customerLogin);
customer.setTitle(customerEditForm.getTitle());
customer.setFirstname(customerEditForm.getFirstname());
customer.setLastname(customerEditForm.getLastname());
customer.setEmail(customerEditForm.getEmail());
customer = checkCustomerMarketArea(requestData, customer);
CustomerMarketArea customerMarketArea = customer.getCurrentCustomerMarketArea(marketArea.getId());
if(customerMarketArea != null){
customerMarketArea.setMobile(customerEditForm.getMobile());
customerMarketArea.setPhone(customerEditForm.getPhone());
customerMarketArea.setFax(customerEditForm.getFax());
if(customerEditForm.isOptin()){
CustomerOptin optinNewsletter = customerMarketArea.getOptins(CustomerOptin.OPTIN_TYPE_WWW_NEWSLETTER);
if(optinNewsletter == null){
optinNewsletter = new CustomerOptin();
optinNewsletter.setType(CustomerOptin.OPTIN_TYPE_WWW_NEWSLETTER);
optinNewsletter.setCustomerMarketArea(customerMarketArea);
customerMarketArea.getOptins().add(optinNewsletter);
}
optinNewsletter.setOrigin("STANDARD");
optinNewsletter.setDateUpdate(new Date());
} else {
CustomerOptin optinNewsletter = customerMarketArea.getOptins(CustomerOptin.OPTIN_TYPE_WWW_NEWSLETTER);
if(optinNewsletter != null){
optinNewsletter.setActive(true);
optinNewsletter.setDateUpdate(new Date());
}
}
}
return updateCurrentCustomer(requestData, customer);
}
public Customer activeNewCustomer(final RequestData requestData, Customer customer) throws Exception {
customer.setValidated(true);
return updateCurrentCustomer(requestData, customer);
}
public Customer updateOrSaveAddressCustomer(final RequestData requestData, final Market market, final MarketArea marketArea, final CustomerAddressForm customerAddressForm) throws Exception {
final HttpServletRequest request = requestData.getRequest();
String customerLogin = requestUtil.getCurrentCustomerLogin(request);
Customer customer = customerService.getCustomerByLoginOrEmail(customerLogin);
CustomerAddress customerAddress = new CustomerAddress();
customerAddress.setDateCreate(new Date());
customerAddress.setDateUpdate(new Date());
String addressId = customerAddressForm.getId();
if(StringUtils.isNotEmpty(addressId)){
customerAddress = customer.getAddress(new Long(addressId));
}
if(StringUtils.isNotEmpty(customerAddressForm.getAddressName())){
customerAddress.setAddressName(customerAddressForm.getAddressName());
} else {
customerAddress.setAddressName(customerAddressForm.getAddress1() + " (" + customerAddressForm.getCity() + ")");
}
customerAddress.setTitle(customerAddressForm.getTitle());
customerAddress.setLastname(customerAddressForm.getLastname());
customerAddress.setFirstname(customerAddressForm.getFirstname());
customerAddress.setAddress1(customerAddressForm.getAddress1());
customerAddress.setAddress2(customerAddressForm.getAddress2());
customerAddress.setAddressAdditionalInformation(customerAddressForm.getAddressAdditionalInformation());
customerAddress.setPostalCode(customerAddressForm.getPostalCode());
customerAddress.setCity(customerAddressForm.getCity());
customerAddress.setStateCode(customerAddressForm.getStateCode());
customerAddress.setCountryCode(customerAddressForm.getCountryCode());
customerAddress.setDefaultBilling(true);
customerAddress.setDefaultShipping(true);
if(StringUtils.isEmpty(addressId)){
customer.getAddresses().add(customerAddress);
}
return updateOrSaveAddressCustomer(requestData, market, marketArea, customer);
}
public Customer saveNewsletterSubscriptionAndSendEmail(final RequestData requestData, final String email) throws Exception {
if(StringUtils.isEmpty(email)){
throw new Exception("");
}
Customer customer = saveNewsletterSubscription(requestData, email);
saveAndBuildNewsletterSubscriptionConfirmationMail(requestData, email);
return customer;
}
public Customer saveNewsletterUnsubscriptionAndSendEmail(final RequestData requestData, final String email) throws Exception {
if(StringUtils.isEmpty(email)){
throw new Exception("");
}
Customer customer = saveNewsletterUnsubscription(requestData, email);
saveAndBuildNewsletterUnsubscriptionConfirmationMail(requestData, email);
return customer;
}
public void buildAndSaveContactMail(final RequestData requestData, final ContactForm contactForm) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final String contextNameValue = requestData.getContextNameValue();
final ContactEmailBean contactEmailBean = new ContactEmailBean();
BeanUtils.copyProperties(contactForm, contactEmailBean);
contactEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_CONTACT));
contactEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_CONTACT));
contactEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_CONTACT));
contactEmailBean.setToEmail(marketArea.getEmailToContact(contextNameValue));
buildAndSaveContactMail(requestData, contactEmailBean);
}
public void buildAndSaveRetailerContactMail(final RequestData requestData, final CustomerContactForm customerContactForm) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final String contextNameValue = requestData.getContextNameValue();
final List<SpecificFetchMode> retailerFetchPlans = new ArrayList<SpecificFetchMode>();
retailerFetchPlans.add(new SpecificFetchMode(Retailer_.addresses.getName()));
final Retailer retailerToContact = retailerService.getRetailerByCode(customerContactForm.getObjectCode(), new FetchPlan(retailerFetchPlans));
final RetailerContactEmailBean retailerContactEmailBean = new RetailerContactEmailBean();
BeanUtils.copyProperties(customerContactForm, retailerContactEmailBean);
retailerContactEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_RETAILER_CONTACT));
retailerContactEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_RETAILER_CONTACT));
retailerContactEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_RETAILER_CONTACT));
retailerContactEmailBean.setToEmail(retailerToContact.getDefaultAddress().getEmail());
buildAndSaveRetailerContactMail(requestData, retailerToContact, retailerContactEmailBean);
}
public void buildAndSaveStoreContactMail(final RequestData requestData, final CustomerContactForm customerContactForm) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final String contextNameValue = requestData.getContextNameValue();
final List<SpecificFetchMode> storeFetchPlans = new ArrayList<SpecificFetchMode>();
final Retailer retailerToContact = retailerService.getRetailerByCode(customerContactForm.getObjectCode(), new FetchPlan(storeFetchPlans));
final RetailerContactEmailBean retailerContactEmailBean = new RetailerContactEmailBean();
BeanUtils.copyProperties(customerContactForm, retailerContactEmailBean);
retailerContactEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_RETAILER_CONTACT));
retailerContactEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_RETAILER_CONTACT));
retailerContactEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_RETAILER_CONTACT));
retailerContactEmailBean.setToEmail(retailerToContact.getDefaultAddress().getEmail());
buildAndSaveRetailerContactMail(requestData, retailerToContact, retailerContactEmailBean);
}
public void saveAndBuildNewsletterSubscriptionConfirmationMail(final RequestData requestData, final String email) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final String contextNameValue = requestData.getContextNameValue();
final NewsletterEmailBean newsletterEmailBean = new NewsletterEmailBean();
newsletterEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_NEWSLETTER_SUBSCRIPTION));
newsletterEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_NEWSLETTER_SUBSCRIPTION));
newsletterEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_NEWSLETTER_SUBSCRIPTION));
newsletterEmailBean.setToEmail(email);
saveAndBuildNewsletterSubscriptionConfirmationMail(requestData, newsletterEmailBean);
}
public void saveAndBuildNewsletterUnsubscriptionConfirmationMail(final RequestData requestData, final String email) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final String contextNameValue = requestData.getContextNameValue();
final NewsletterEmailBean newsletterEmailBean = new NewsletterEmailBean();
newsletterEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_NEWSLETTER_UNSUBSCRIPTION));
newsletterEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_NEWSLETTER_UNSUBSCRIPTION));
newsletterEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_NEWSLETTER_UNSUBSCRIPTION));
newsletterEmailBean.setToEmail(email);
saveAndBuildNewsletterUnsubscriptionConfirmationMail(requestData, newsletterEmailBean);
}
public void buildAndSaveCustomerNewAccountMail(final RequestData requestData, final Customer customer) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final String contextNameValue = requestData.getContextNameValue();
final CustomerNewAccountConfirmationEmailBean customerNewAccountConfirmationEmailBean = new CustomerNewAccountConfirmationEmailBean();
BeanUtils.copyProperties(customer, customerNewAccountConfirmationEmailBean);
customerNewAccountConfirmationEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_NEW_ACCOUNT_CONFIRMATION));
customerNewAccountConfirmationEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_NEW_ACCOUNT_CONFIRMATION));
customerNewAccountConfirmationEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_NEW_ACCOUNT_CONFIRMATION));
customerNewAccountConfirmationEmailBean.setToEmail(customer.getEmail());
customerNewAccountConfirmationEmailBean.setTitle(customer.getTitle());
customerNewAccountConfirmationEmailBean.setFirstname(customer.getFirstname());
customerNewAccountConfirmationEmailBean.setLastname(customer.getLastname());
customerNewAccountConfirmationEmailBean.setEmail(customer.getEmail());
customerNewAccountConfirmationEmailBean.setCustomerDetailsUrl(urlService.buildAbsoluteUrl(requestData, urlService.generateUrl(FoUrls.PERSONAL_DETAILS, requestData)));
buildAndSaveCustomerNewAccountMail(requestData, customerNewAccountConfirmationEmailBean);
}
public void buildAndSaveCustomerForgottenPasswordMail(final RequestData requestData, final Customer customer, final CustomerCredential customerCredential, final ForgottenPasswordForm forgottenPasswordForm) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final Locale locale = requestData.getLocale();
final String contextNameValue = requestData.getContextNameValue();
final CustomerForgottenPasswordEmailBean customerForgottenPasswordEmailBean = new CustomerForgottenPasswordEmailBean();
customerForgottenPasswordEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_FORGOTTEN_PASSWORD));
customerForgottenPasswordEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_FORGOTTEN_PASSWORD));
customerForgottenPasswordEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_FORGOTTEN_PASSWORD));
customerForgottenPasswordEmailBean.setToEmail(customer.getEmail());
customerForgottenPasswordEmailBean.setToken(customerCredential.getResetToken());
customerForgottenPasswordEmailBean.setTitle(referentialDataService.getTitleByLocale(customer.getTitle(), locale));
customerForgottenPasswordEmailBean.setFirstname(customer.getFirstname());
customerForgottenPasswordEmailBean.setLastname(customer.getLastname());
customerForgottenPasswordEmailBean.setEmail(customer.getEmail());
buildAndSaveCustomerForgottenPasswordMail(requestData, customer, customerCredential, customerForgottenPasswordEmailBean);
}
public void resetCustomerCredential(final Customer customer, final ResetPasswordForm resetPasswordForm) throws Exception {
// FLAG LAST CURRENT CREDENTIEL
CustomerCredential customerCredential = customer.getCurrentCredential();
if(customerCredential != null){
customerCredential.setDateUpdate(new Date());
customerCredential.setResetProcessedDate(new Date());
}
// ADD A NEW ONE
addNewCustomerCredential(customer, resetPasswordForm.getNewPassword());
}
public CustomerCredential flagCustomerCredentialWithToken(final RequestData requestData, final Customer customer) throws Exception {
if(customer != null){
String token = UUID.randomUUID().toString();
CustomerCredential customerCredential = customer.getCurrentCredential();
if(customerCredential == null){
customerCredential = new CustomerCredential();
customerCredential.setDateCreate(new Date());
customer.getCredentials().add(customerCredential);
}
customerCredential.setDateUpdate(new Date());
customerCredential.setResetToken(token);
customerCredential.setTokenTimestamp(new Timestamp(new Date().getTime()));
// UPDATE CUSTOMER
customerService.saveOrUpdateCustomer(customer);
return customerCredential;
}
return null;
}
public void cancelCustomerCredentialToken(final RequestData requestData, final Customer customer) throws Exception {
if(customer != null){
CustomerCredential customerCredential = customer.getCurrentCredential();
if(customerCredential != null){
customerCredential.setDateUpdate(new Date());
customerCredential.setResetToken("");
customerCredential.setTokenTimestamp(null);
customerService.saveOrUpdateCustomerCredential(customerCredential);
}
}
}
public void addNewCustomerCredential(final Customer customer, final String newPassword) throws Exception {
if(customer != null){
String encodePassword = securityUtil.encodePassword(newPassword);
CustomerCredential customerCredential = new CustomerCredential();
customerCredential.setPassword(encodePassword);
customerCredential.setDateCreate(new Date());
customerCredential.setDateUpdate(new Date());
customer.getCredentials().add(customerCredential);
customer.setPassword(encodePassword);
customerService.saveOrUpdateCustomer(customer);
}
}
public Customer buildAndSaveNewCustomer(final RequestData requestData, final Market market, final MarketArea marketArea, Customer customer) throws Exception {
return buildAndSaveNewCustomer(requestData.getRequest(), market, marketArea, customer);
}
public Customer buildAndSaveNewCustomer(final HttpServletRequest request, final Market market, final MarketArea marketArea, Customer customer) throws Exception {
if(customer.getCode() == null){
customer.setCode(CoreUtil.generateEntityCode());
}
if(customer.getPermalink() == null){
String permalink = securityUtil.generatePermalink();
customer.setPermalink(permalink);
}
customer.setPlatformOrigin(CustomerPlatformOrigin.STANDARD.getPropertyKey());
customer.setMarketAreaOrigin(marketArea.getCode());
customer.setDefaultLocale(marketArea.getDefaultLocalization().getCode());
customer.setActive(true);
CustomerGroup customerGroup = customerService.getCustomerGroupByCode(CustomerGroup.GROUP_FO_CUSTOMER);
customer.getGroups().add(customerGroup);
// WE SAVE A FIRST TIME TO EVICT DETACH ENTITY ISSUE WITH CUSTOMERGROUP - NOT THE BEST WAY
Customer savedCustomer = customerService.saveOrUpdateCustomer(customer);
requestUtil.updateCurrentCustomer(request, savedCustomer);
return savedCustomer;
}
public Customer updateCurrentCustomer(final RequestData requestData, Customer customer) throws Exception {
final HttpServletRequest request = requestData.getRequest();
customer.setActive(true);
customer.setDateUpdate(new Date());
// save market context phone etc
// UPDATE CUSTOMER
Customer savedCustomer = customerService.saveOrUpdateCustomer(customer);
// UPDATE SESSION
requestUtil.updateCurrentCustomer(request, savedCustomer);
return savedCustomer;
}
public Customer updateOrSaveAddressCustomer(final RequestData requestData, final Market market, final MarketArea marketArea, Customer customer) throws Exception {
final HttpServletRequest request = requestData.getRequest();
// UPDATE CUSTOMER
Customer savedCustomer = customerService.saveOrUpdateCustomer(customer);
// UPDATE SESSION
requestUtil.updateCurrentCustomer(request, savedCustomer);
return savedCustomer;
}
public Customer deleteAddressCustomer(final RequestData requestData, final String customerAddressId) throws Exception {
final HttpServletRequest request = requestData.getRequest();
String customerLogin = requestUtil.getCurrentCustomerLogin(request);
Customer customer = customerService.getCustomerByLoginOrEmail(customerLogin);
CustomerAddress customerAddress = customer.getAddress(new Long(customerAddressId));
// SANITY CHECK : wrong address id for this customer
if(customerAddress == null){
throw new Exception("");
}
Set<CustomerAddress> customerAddresses = customer.getAddresses();
// SANITY CHECK : min address equal zero
if(customerAddresses.size() < 2){
throw new Exception("");
}
for (CustomerAddress customerAddressIterator : customerAddresses) {
if (customerAddressIterator.getId().equals(new Long(customerAddressId))) {
customerAddress = customerAddressIterator;
}
}
customer.getAddresses().remove(customerAddress);
// UPDATE CUSTOMER
Customer savedCustomer = customerService.saveOrUpdateCustomer(customer);
// UPDATE SESSION
requestUtil.updateCurrentCustomer(request, savedCustomer);
return customer;
}
public Customer addProductSkuToWishlist(final RequestData requestData, final String catalogCategoryCode, final String productSkuCode) throws Exception {
final HttpServletRequest request = requestData.getRequest();
final MarketArea marketArea = requestData.getMarketArea();
Customer customer = requestData.getCustomer();
customer = checkCustomerMarketArea(requestData, customer);
customerService.addProductSkuToWishlist(marketArea, customer, catalogCategoryCode, productSkuCode);
// UPDATE SESSION
requestUtil.updateCurrentCustomer(request, customer);
return customer;
}
public Customer removeProductSkuFromWishlist(final RequestData requestData, final String productSkuCode) throws Exception {
final HttpServletRequest request = requestData.getRequest();
final MarketArea marketArea = requestData.getMarketArea();
Customer customer = requestData.getCustomer();
customer = checkCustomerMarketArea(requestData, customer);
customerService.removeProductSkuFromWishlist(marketArea, customer, productSkuCode);
// UPDATE SESSION
requestUtil.updateCurrentCustomer(request, customer);
return customer;
}
public void savePaymentInformation(RequestData requestData, PaymentForm paymentForm) throws Exception {
final HttpServletRequest request = requestData.getRequest();
final MarketArea marketArea = requestData.getMarketArea();
Customer customer = requestData.getCustomer();
final CustomerPayment customerInformation = new CustomerPayment();
customerInformation.setPaymentType(paymentForm.getPaymentType());
customerInformation.setCardHolderName(paymentForm.getCardHolderName());
customerInformation.setCardNumber(paymentForm.getCardNumber());
customerInformation.setCardExpMonth(paymentForm.getCardExpMonth());
customerInformation.setCardExpYear(paymentForm.getCardExpYear());
customerInformation.setCardCVV(paymentForm.getCardCVV());
customerInformation.setMarketAreaId(marketArea.getId());
customerService.savePaymentInformation(customer, customerInformation);
requestUtil.updateCurrentCustomer(request, customer);
}
public OrderPurchase buildAndSaveNewOrder(final RequestData requestData) throws Exception {
final HttpServletRequest request = requestData.getRequest();
final Customer customer = requestData.getCustomer();
final Cart cart = requestData.getCart();
OrderPurchase orderPurchase = checkoutService.checkoutB2C(customer, cart);
requestUtil.deleteCurrentCartAndSaveEngineSession(request);
// RELOAD ORDER FOR THE SESSION
orderPurchase = orderPurchaseService.getOrderByOrderNum(orderPurchase.getOrderNum());
requestUtil.keepLastOrderInSession(requestData, orderPurchase);
buildAndSaveNewOrderConfirmationMail(requestData, customer, orderPurchase);
return orderPurchase;
}
public Customer saveNewsletterSubscription(final RequestData requestData, final String email) throws Exception {
Customer customer = customerService.getCustomerByLoginOrEmail(email);
MarketArea marketArea = requestData.getMarketArea();
// SANITY CHECK : CHECK IF THE OPTIN ALREADY EXIST FOR THE MARKET AREA
if(customer != null){
CustomerMarketArea customerMarketArea = customer.getCurrentCustomerMarketArea(marketArea.getId());
if(customerMarketArea != null){
CustomerOptin customerOptin = customerMarketArea.getOptins(CustomerOptin.OPTIN_TYPE_WWW_NEWSLETTER);
if(customerOptin != null){
throw new UniqueNewsletterSubscriptionException();
}
}
}
CustomerOptin customerOptin = new CustomerOptin();
customerOptin.setType(CustomerOptin.OPTIN_TYPE_WWW_NEWSLETTER);
customerOptin.setOrigin("MCOMMERCE");
// HANDLE OPTIN
if(customer != null){
customer = checkCustomerMarketArea(requestData, customer);
CustomerMarketArea customerMarketArea = customer.getCurrentCustomerMarketArea(marketArea.getId());
if(customerMarketArea == null){
customerMarketArea = new CustomerMarketArea(marketArea.getId());
customerMarketArea.addOptins(customerOptin);
customer.getCustomerMarketAreas().add(customerMarketArea);
} else {
customerMarketArea.addOptins(customerOptin);
}
} else {
customer = new Customer();
customer.setEmail(email);
customer.setAnonymous(true);
customer = checkCustomerMarketArea(requestData, customer);
CustomerMarketArea customerMarketArea = new CustomerMarketArea(marketArea.getId());
customerMarketArea.addOptins(customerOptin);
customer.getCustomerMarketAreas().add(customerMarketArea);
}
customer = updateCurrentCustomer(requestData, customer);
return customer;
}
public Customer saveNewsletterUnsubscription(final RequestData requestData, final String email) throws Exception {
Customer customer = customerService.getCustomerByLoginOrEmail(email);
MarketArea marketArea = requestData.getMarketArea();
// SANITY CHECK : CHECK IF THE OPTIN ALREADY EXIST FOR THE MARKET AREA
if(customer != null){
CustomerMarketArea customerMarketArea = customer.getCurrentCustomerMarketArea(marketArea.getId());
if(customerMarketArea != null){
CustomerOptin customerOptin = customerMarketArea.getOptins(CustomerOptin.OPTIN_TYPE_WWW_NEWSLETTER);
if(customerOptin != null){
customerMarketArea.getOptins().remove(customerOptin);
}
}
}
customer = updateCurrentCustomer(requestData, customer);
return customer;
}
/**
*
*/
public void buildAndSaveContactMail(final RequestData requestData, final ContactEmailBean contactEmailBean) throws Exception {
emailService.buildAndSaveContactMail(requestData, requestData.getVelocityEmailPrefix(), contactEmailBean);
}
/**
*
*/
public void buildAndSaveRetailerContactMail(final RequestData requestData, final Retailer retailerToContact, final RetailerContactEmailBean retailerContactEmailBean) throws Exception {
emailService.buildAndSaveRetailerContactMail(requestData, requestData.getCustomer(), requestData.getVelocityEmailPrefix(), retailerContactEmailBean);
}
/**
*
*/
public void saveAndBuildNewsletterSubscriptionConfirmationMail(final RequestData requestData, final NewsletterEmailBean newsletterEmailBean) throws Exception {
emailService.buildAndSaveNewsletterSubscriptionConfirmationMail(requestData, requestData.getVelocityEmailPrefix(), newsletterEmailBean);
}
/**
*
*/
public void saveAndBuildNewsletterUnsubscriptionConfirmationMail(final RequestData requestData, final NewsletterEmailBean newsletterEmailBean) throws Exception {
emailService.buildAndSaveNewsletterUnsubscriptionConfirmationMail(requestData, requestData.getVelocityEmailPrefix(), newsletterEmailBean);
}
/**
*
*/
public void buildAndSaveCustomerNewAccountMail(final RequestData requestData, final CustomerNewAccountConfirmationEmailBean customerNewAccountConfirmationEmailBean) throws Exception {
emailService.buildAndSaveCustomerNewAccountMail(requestData, requestData.getVelocityEmailPrefix(), customerNewAccountConfirmationEmailBean);
}
/**
*
*/
public void buildAndSaveCustomerForgottenPasswordMail(final RequestData requestData, final Customer customer, final CustomerCredential customerCredential, final CustomerForgottenPasswordEmailBean customerForgottenPasswordEmailBean) throws Exception {
emailService.buildAndSaveCustomerForgottenPasswordMail(requestData, customer, requestData.getVelocityEmailPrefix(), customerForgottenPasswordEmailBean);
}
/**
*
*/
public void buildAndSaveCustomerResetPasswordConfirmationMail(final RequestData requestData, final Customer customer) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final Locale locale = requestData.getLocale();
final String contextNameValue = requestData.getContextNameValue();
final String velocityPath = requestData.getVelocityEmailPrefix();
final CustomerResetPasswordConfirmationEmailBean customerResetPasswordConfirmationEmailBean = new CustomerResetPasswordConfirmationEmailBean();
customerResetPasswordConfirmationEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_RESET_PASSWORD_CONFIRMATION));
customerResetPasswordConfirmationEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_RESET_PASSWORD_CONFIRMATION));
customerResetPasswordConfirmationEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_RESET_PASSWORD_CONFIRMATION));
customerResetPasswordConfirmationEmailBean.setToEmail(customer.getEmail());
customerResetPasswordConfirmationEmailBean.setTitle(referentialDataService.getTitleByLocale(customer.getTitle(), locale));
customerResetPasswordConfirmationEmailBean.setFirstname(customer.getFirstname());
customerResetPasswordConfirmationEmailBean.setLastname(customer.getLastname());
customerResetPasswordConfirmationEmailBean.setEmail(customer.getEmail());
customerResetPasswordConfirmationEmailBean.setCustomerDetailsUrl(urlService.buildAbsoluteUrl(requestData, urlService.generateUrl(FoUrls.PERSONAL_DETAILS, requestData)));
emailService.buildAndSaveCustomerResetPasswordConfirmationMail(requestData, customer, velocityPath, customerResetPasswordConfirmationEmailBean);
}
/**
*
*/
public void buildAndSaveNewOrderConfirmationMail(final RequestData requestData, final Customer customer, final OrderPurchase order) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
final String contextNameValue = requestData.getContextNameValue();
final String velocityPath = requestData.getVelocityEmailPrefix();
final Locale locale = requestData.getLocale();
final String localizationCode = requestData.getMarketAreaLocalization().getCode();
final OrderConfirmationEmailBean orderConfirmationEmailBean = new OrderConfirmationEmailBean();
orderConfirmationEmailBean.setFromAddress(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_ORDER_CONFIRMATION));
orderConfirmationEmailBean.setFromName(marketArea.getEmailFromName(contextNameValue, Email.EMAIl_TYPE_ORDER_CONFIRMATION));
orderConfirmationEmailBean.setReplyToEmail(getEmailFromAddress(requestData, marketArea, contextNameValue, Email.EMAIl_TYPE_ORDER_CONFIRMATION));
orderConfirmationEmailBean.setToEmail(customer.getEmail());
if (order != null) {
orderConfirmationEmailBean.setOrderNumber(order.getOrderNum());
DateFormat dateFormat = requestUtil.getCommonFormatDate(requestData, DateFormat.MEDIUM, DateFormat.MEDIUM);
if (order.getExpectedDeliveryDate() != null) {
orderConfirmationEmailBean.setExpectedDeliveryDate(dateFormat.format(order.getExpectedDeliveryDate()));
} else {
orderConfirmationEmailBean.setExpectedDeliveryDate("NA");
}
if (Hibernate.isInitialized(order.getShippingAddress())
&& order.getShippingAddress() != null) {
orderConfirmationEmailBean.setCompanyName(order.getShippingAddress().getCompanyName());
orderConfirmationEmailBean.setTitleCode(order.getShippingAddress().getTitle());
String titleLabel = referentialDataService.getTitleByLocale(order.getShippingAddress().getTitle(), locale);
orderConfirmationEmailBean.setTitleLabel(titleLabel);
orderConfirmationEmailBean.setLastname(order.getShippingAddress().getLastname());
orderConfirmationEmailBean.setFirstname(order.getShippingAddress().getFirstname());
orderConfirmationEmailBean.setAddress1(order.getShippingAddress().getAddress1());
orderConfirmationEmailBean.setAddress2(order.getShippingAddress().getAddress2());
orderConfirmationEmailBean.setAddressAdditionalInformation(order.getShippingAddress().getAddressAdditionalInformation());
orderConfirmationEmailBean.setPostalCode(order.getShippingAddress().getPostalCode());
orderConfirmationEmailBean.setCity(order.getShippingAddress().getCity());
orderConfirmationEmailBean.setStateCode(order.getShippingAddress().getStateCode());
orderConfirmationEmailBean.setAreaCode(order.getShippingAddress().getAreaCode());
orderConfirmationEmailBean.setCountryCode(order.getShippingAddress().getCountryCode());
String coutryLabel = referentialDataService.getCountryByLocale(order.getShippingAddress().getCountryCode(), locale);
orderConfirmationEmailBean.setCountry(coutryLabel);
}
if (Hibernate.isInitialized(order.getOrderItems())
&& order.getOrderItems() != null) {
for (OrderItem orderItem : order.getOrderItems()) {
OrderItemEmailBean orderItemEmailBean = new OrderItemEmailBean();
orderItemEmailBean.setSkuCode(orderItem.getProductSkuCode());
if(StringUtils.isNotEmpty(orderItem.getProductSkuCode())){
ProductSku productSku = productService.getProductSkuByCode(orderItem.getProductSkuCode());
orderItemEmailBean.setEan(productSku.getEan());
orderItemEmailBean.setI18nName(productSku.getI18nName(localizationCode));
orderItemEmailBean.setI18nDescription(productSku.getI18nDescription(localizationCode));
if (Hibernate.isInitialized(productSku.getAssets()) && productSku.getAssets() != null) {
for (Asset asset : productSku.getAssets()) {
final String path = engineSettingService.getProductSkuImageWebPath(productSku.getCode(), asset);
orderItemEmailBean.setDefaultAssetFullPath(urlService.buildAbsoluteUrl(requestData, path));
}
}
}
if(orderItem.getStoreId() != null){
Store store = retailerService.getStoreById(orderItem.getStoreId());
orderItemEmailBean.setStoreCode(store.getCode());
orderItemEmailBean.setStoreName(store.getName());
}
orderItemEmailBean.setPrice(orderItem.getOrderItemPriceWithStandardCurrencySign());
orderItemEmailBean.setPriceWithTaxes(orderItem.getOrderItemPriceWithTaxesWithStandardCurrencySign());
orderItemEmailBean.setQuantity(orderItem.getQuantity());
orderItemEmailBean.setAmount(orderItem.getOrderItemTotalPriceWithTaxesWithStandardCurrencySign());
orderConfirmationEmailBean.getOrderItems().add(orderItemEmailBean);
}
}
orderConfirmationEmailBean.setOrderItemsTotalWithCurrencySign(order.getOrderItemTotalWithTaxesWithStandardCurrencySign());
orderConfirmationEmailBean.setOrderShippingTotalWithCurrencySign(order.getDeliveryMethodTotalWithStandardCurrencySign());
if (BigDecimal.ZERO.compareTo(order.getDeliveryMethodTotal()) == 0) {
orderConfirmationEmailBean.setOrderShippingTotalWithCurrencySign(coreMessageSource.getCommonMessage(ScopeWebMessage.LABEL.getPropertyKey(), "free", requestData.getLocale()));
}
orderConfirmationEmailBean.setOrderTaxesTotalWithCurrencySign(order.getTaxTotalWithStandardCurrencySign());
orderConfirmationEmailBean.setOrderTotalWithCurrencySign(order.getOrderTotalWithStandardCurrencySign());
}
emailService.buildAndSaveNewOrderB2CConfirmationMail(requestData, customer, velocityPath, orderConfirmationEmailBean);
}
public Customer checkCustomerMarketArea(final RequestData requestData, Customer customer) throws Exception {
final MarketArea marketArea = requestData.getMarketArea();
CustomerMarketArea customerMarketArea = customer.getCurrentCustomerMarketArea(marketArea.getId());
if(customerMarketArea == null){
// Create a CustomerMarketArea for this MarketArea
customerMarketArea = new CustomerMarketArea();
customerMarketArea.setMarketAreaId(marketArea.getId());
customer.getCustomerMarketAreas().add(customerMarketArea);
// customerService.saveOrUpdateCustomer(customer);
// if(StringUtils.isNotEmpty(customer.getEmail())){
// customer = customerService.getCustomerByLoginOrEmail(customer.getEmail(), FetchPlanGraphCustomer.fullCustomerFetchPlan());
// }
}
return customer;
}
protected String getEmailFromAddress(final RequestData requestData, final MarketArea marketArea, final String contextNameValue, final String emailType) throws Exception {
String emailFromAddress = marketArea.getEmailFromAddress(contextNameValue, emailType);
if(StringUtils.isEmpty(emailFromAddress)){
final String contextValue = requestUtil.getCurrentContextNameValue();
emailFromAddress = engineSettingService.getDefaultEmailAddress(contextValue);
}
return emailFromAddress;
}
}