package com.salesmanager.shop.store.controller.customer; import com.salesmanager.core.business.services.customer.attribute.CustomerOptionSetService; import com.salesmanager.core.model.customer.Customer; import com.salesmanager.core.model.customer.attribute.CustomerAttribute; import com.salesmanager.core.model.customer.attribute.CustomerOptionSet; import com.salesmanager.core.model.customer.attribute.CustomerOptionType; import com.salesmanager.core.model.customer.attribute.CustomerOptionValueDescription; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.reference.language.Language; import com.salesmanager.shop.admin.model.customer.attribute.CustomerOption; import com.salesmanager.shop.admin.model.customer.attribute.CustomerOptionValue; import com.salesmanager.shop.constants.Constants; import com.salesmanager.shop.populator.customer.ReadableCustomerOptionPopulator; import com.salesmanager.shop.store.controller.AbstractController; import com.salesmanager.shop.store.controller.ControllerConstants; import org.apache.commons.collections4.CollectionUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * Entry point for logged in customers * @author Carl Samson * */ @Controller @RequestMapping("/shop/customer") public class CustomerDashboardController extends AbstractController { @Inject private AuthenticationManager customerAuthenticationManager; @Inject private CustomerOptionSetService customerOptionSetService; @PreAuthorize("hasRole('AUTH_CUSTOMER')") @RequestMapping(value="/dashboard.html", method=RequestMethod.GET) public String displayCustomerDashboard(Model model, HttpServletRequest request, HttpServletResponse response) throws Exception { MerchantStore store = getSessionAttribute(Constants.MERCHANT_STORE, request); Language language = (Language)request.getAttribute(Constants.LANGUAGE); Customer customer = (Customer)request.getAttribute(Constants.CUSTOMER); getCustomerOptions(model, customer, store, language); model.addAttribute("section","dashboard"); /** template **/ StringBuilder template = new StringBuilder().append(ControllerConstants.Tiles.Customer.customer).append(".").append(store.getStoreTemplate()); return template.toString(); } private void getCustomerOptions(Model model, Customer customer, MerchantStore store, Language language) throws Exception { Map<Long,CustomerOption> options = new HashMap<Long,CustomerOption>(); //get options List<CustomerOptionSet> optionSet = customerOptionSetService.listByStore(store, language); if(!CollectionUtils.isEmpty(optionSet)) { ReadableCustomerOptionPopulator optionPopulator = new ReadableCustomerOptionPopulator(); Set<CustomerAttribute> customerAttributes = customer.getAttributes(); for(CustomerOptionSet optSet : optionSet) { com.salesmanager.core.model.customer.attribute.CustomerOption custOption = optSet.getCustomerOption(); if(!custOption.isActive() || !custOption.isPublicOption()) { continue; } CustomerOption customerOption = options.get(custOption.getId()); optionPopulator.setOptionSet(optSet); if(customerOption==null) { customerOption = new CustomerOption(); customerOption.setId(custOption.getId()); customerOption.setType(custOption.getCustomerOptionType()); customerOption.setName(custOption.getDescriptionsSettoList().get(0).getName()); } optionPopulator.populate(custOption, customerOption, store, language); options.put(customerOption.getId(), customerOption); if(!CollectionUtils.isEmpty(customerAttributes)) { for(CustomerAttribute customerAttribute : customerAttributes) { if(customerAttribute.getCustomerOption().getId().longValue()==customerOption.getId()){ CustomerOptionValue selectedValue = new CustomerOptionValue(); com.salesmanager.core.model.customer.attribute.CustomerOptionValue attributeValue = customerAttribute.getCustomerOptionValue(); selectedValue.setId(attributeValue.getId()); CustomerOptionValueDescription optValue = attributeValue.getDescriptionsSettoList().get(0); selectedValue.setName(optValue.getName()); customerOption.setDefaultValue(selectedValue); if(customerOption.getType().equalsIgnoreCase(CustomerOptionType.Text.name())) { selectedValue.setName(customerAttribute.getTextValue()); } } } } } } model.addAttribute("options", options.values()); } }