package com.salesmanager.shop.admin.controller.customers; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.salesmanager.core.business.services.merchant.MerchantStoreService; import com.salesmanager.core.business.services.system.OptinService; import com.salesmanager.core.business.utils.ajax.AjaxResponse; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.system.optin.Optin; import com.salesmanager.shop.admin.controller.ControllerConstants; import com.salesmanager.shop.admin.model.web.Menu; import com.salesmanager.shop.constants.Constants; import com.salesmanager.shop.utils.DateUtil; import com.salesmanager.shop.utils.LabelUtils; @Controller public class CustomerOptinController { @Inject private MerchantStoreService merchantService; @Inject private OptinService optinService; @Inject private LabelUtils messages; private static final Logger LOGGER = LoggerFactory.getLogger(CustomerOptinController.class); @PreAuthorize("hasRole('CUSTOMER')") @RequestMapping(value="/admin/customers/optin/list.html", method=RequestMethod.GET) public String displayOptions(Model model, HttpServletRequest request, HttpServletResponse response) throws Exception { setMenu(model,request); return ControllerConstants.Tiles.Optin.optinsList; } @PreAuthorize("hasRole('CUSTOMER')") @RequestMapping(value="/admin/customers/optin/edit.html", method=RequestMethod.GET) public String displayOptionEdit(@RequestParam("id") long id, HttpServletRequest request, HttpServletResponse response, Model model, Locale locale) throws Exception { return displayOptin(id,request,response,model,locale); } @PreAuthorize("hasRole('CUSTOMER')") @RequestMapping(value="/admin/customers/optin/create.html", method=RequestMethod.GET) public String displayOptionCreate(HttpServletRequest request, HttpServletResponse response, Model model, Locale locale) throws Exception { return displayOptin(null,request,response,model,locale); } private String displayOptin(Long optinId, HttpServletRequest request, HttpServletResponse response,Model model,Locale locale) throws Exception { this.setMenu(model, request); List<MerchantStore> stores = merchantService.list(); Optin optin = new Optin(); if(optinId!=null && optinId!=0) {//edit mode optin = optinService.getById(optinId); if(optin==null) { return "redirect:/admin/customers/optin/list.html"; } } else { } model.addAttribute("merchants", stores); model.addAttribute("optin", optin); return ControllerConstants.Tiles.Optin.optinDetails; } @PreAuthorize("hasRole('CUSTOMER')") @RequestMapping(value="/admin/customers/optins/save.html", method=RequestMethod.POST) public String saveOptin(@Valid @ModelAttribute("optin") Optin optin, BindingResult result, Model model, HttpServletRequest request, Locale locale) throws Exception { //display menu setMenu(model,request); MerchantStore store = merchantService.getByCode(optin.getMerchant().getCode()); Optin dbEntity = null; if(optin.getId() != null && optin.getId() >0) { //edit entry //get from DB dbEntity = optinService.getById(optin.getId()); if(dbEntity==null) { return "redirect:/admin/optins/optins.html"; } } optin.setMerchant(store); if (result.hasErrors()) { return ControllerConstants.Tiles.Optin.optinDetails; } optinService.save(optin); model.addAttribute("success","success"); return ControllerConstants.Tiles.Optin.optinDetails; } @SuppressWarnings("unchecked") @PreAuthorize("hasRole('CUSTOMER')") @RequestMapping(value="/admin/customers/optins/paging.html", method=RequestMethod.POST) public @ResponseBody ResponseEntity<String> pageOptins(HttpServletRequest request, HttpServletResponse response) { AjaxResponse resp = new AjaxResponse(); try { MerchantStore store = (MerchantStore)request.getAttribute(Constants.ADMIN_STORE); List<Optin> optins = null; optins = optinService.findByMerchant(store.getId()); for(Optin optin : optins) { @SuppressWarnings("rawtypes") Map entry = new HashMap(); entry.put("id", optin.getId()); entry.put("code", optin.getCode()); entry.put("description", optin.getDescription()); entry.put("endDate", DateUtil.formatDate(optin.getEndDate())); entry.put("startDate", DateUtil.formatDate(optin.getStartDate())); entry.put("merchant", optin.getMerchant().getStorename()); resp.addDataEntry(entry); } resp.setStatus(AjaxResponse.RESPONSE_STATUS_SUCCESS); } catch (Exception e) { LOGGER.error("Error while paging optins", e); resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE); } String returnString = resp.toJSONString(); final HttpHeaders httpHeaders= new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); return new ResponseEntity<String>(returnString,httpHeaders,HttpStatus.OK); } private void setMenu(Model model, HttpServletRequest request) throws Exception { //display menu Map<String,String> activeMenus = new HashMap<String,String>(); activeMenus.put("optin-customers", "optin-customers"); @SuppressWarnings("unchecked") Map<String, Menu> menus = (Map<String, Menu>)request.getAttribute("MENUMAP"); Menu currentMenu = (Menu)menus.get("customer"); model.addAttribute("currentMenu",currentMenu); model.addAttribute("activeMenus",activeMenus); // } @PreAuthorize("hasRole('CUSTOMER')") @RequestMapping(value="/admin/customers/optins/remove.html", method=RequestMethod.POST) public @ResponseBody ResponseEntity<String> deleteOptin(HttpServletRequest request, HttpServletResponse response, Locale locale) { String sid = request.getParameter("id"); MerchantStore store = (MerchantStore)request.getAttribute(Constants.ADMIN_STORE); AjaxResponse resp = new AjaxResponse(); try { Long id = Long.parseLong(sid); Optin entity = optinService.getById(id); if(entity==null || entity.getMerchant().getId().intValue()!=store.getId().intValue()) { resp.setStatusMessage(messages.getMessage("message.unauthorized", locale)); resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE); } else { optinService.delete(entity); resp.setStatus(AjaxResponse.RESPONSE_OPERATION_COMPLETED); } } catch (Exception e) { LOGGER.error("Error while deleting optin", e); resp.setStatus(AjaxResponse.RESPONSE_STATUS_FAIURE); resp.setErrorMessage(e); } String returnString = resp.toJSONString(); final HttpHeaders httpHeaders= new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); return new ResponseEntity<String>(returnString,httpHeaders,HttpStatus.OK); } }