Rev 21657 | Rev 21728 | Go to most recent revision | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed
package com.spice.profitmandi.web.controller;import java.time.LocalDateTime;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.transaction.annotation.Transactional;import org.springframework.ui.Model;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;import com.spice.profitmandi.common.model.CustomCurrentInventorySnapshot;import com.spice.profitmandi.common.model.ProfitMandiConstants;import com.spice.profitmandi.common.util.StringUtils;import com.spice.profitmandi.dao.entity.FofoItemId;import com.spice.profitmandi.dao.entity.InventoryItem;import com.spice.profitmandi.dao.entity.Item;import com.spice.profitmandi.dao.entity.LineItem;import com.spice.profitmandi.dao.entity.Order;import com.spice.profitmandi.dao.entity.Purchase;import com.spice.profitmandi.dao.repository.CurrentInventorySnapshotRepository;import com.spice.profitmandi.dao.repository.InventoryItemRepository;import com.spice.profitmandi.dao.repository.ItemRepository;import com.spice.profitmandi.dao.repository.OrderRepository;import com.spice.profitmandi.dao.repository.PurchaseRepository;import com.spice.profitmandi.web.model.FofoDetails;import com.spice.profitmandi.web.util.CookiesFetcher;import com.spice.profitmandi.web.util.MVCResponseSender;@Controller@Transactionalpublic class InventoryController {private static final Logger LOGGER = LoggerFactory.getLogger(InventoryController.class);@AutowiredCurrentInventorySnapshotRepository currentInventorySnapshotRepository;@AutowiredInventoryItemRepository inventoryItemRepository;@AutowiredPurchaseRepository purchaseRepository;@AutowiredItemRepository itemRepository;@AutowiredOrderRepository orderRepository;@AutowiredMVCResponseSender mvcResponseSender;@AutowiredCookiesFetcher cookiesFetcher;@RequestMapping(value = "/checkCurrentAvailability")public String getCurrentAvailability(HttpServletRequest request, @ModelAttribute ModelMap model) throws Exception{FofoDetails fofoDetails;try {fofoDetails = cookiesFetcher.getCookiesObject(request);} catch (ProfitMandiBusinessException e) {model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));return "response";}List<Object[]> rows = currentInventorySnapshotRepository.selectCustomByFofoId(fofoDetails.getFofoId());model.addAttribute("currentInventorySnapshots", this.getCustomCurrentInventorySnapshots(rows));return "dashboard";}private Set<CustomCurrentInventorySnapshot> getCustomCurrentInventorySnapshots(List<Object[]> rows){Set<CustomCurrentInventorySnapshot> currentInventorySnapshots = new HashSet<>();for(Object[] row : rows){currentInventorySnapshots.add(this.createCustomCurrentInventorySnapshop(row));}return currentInventorySnapshots;}private CustomCurrentInventorySnapshot createCustomCurrentInventorySnapshop(Object[] row){CustomCurrentInventorySnapshot currentInventorySnapshot = new CustomCurrentInventorySnapshot();currentInventorySnapshot.setItemId((Integer)row[0]);currentInventorySnapshot.setAvailability((Integer)row[1]);currentInventorySnapshot.setBrand((String)row[2]);currentInventorySnapshot.setModelName((String)row[3]);currentInventorySnapshot.setModelNumber((String)row[4]);currentInventorySnapshot.setColor((String)row[5]);return currentInventorySnapshot;}@RequestMapping(value = "/checkItemAvailability")public String getItemAvailability(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.ITEM_ID) int itemId, @ModelAttribute Model model) throws Exception{FofoDetails fofoDetails;try {fofoDetails = cookiesFetcher.getCookiesObject(request);} catch (ProfitMandiBusinessException e) {model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));return "response";}try{FofoItemId fofoItemId = new FofoItemId();fofoItemId.setFofoId(fofoDetails.getFofoId());fofoItemId.setItemId(itemId);Object[] row = currentInventorySnapshotRepository.selectCustomByFofoItemId(fofoItemId);model.addAttribute("currentInventorySnapshots", this.createCustomCurrentInventorySnapshop(row));return "dashboard";}catch(ProfitMandiBusinessException profitMandiBusinessException){model.addAttribute("loginResponse", mvcResponseSender.createResponseString("INVNTRY_SNPSHT", false, "/dashboard"));return "response";}}@RequestMapping(value = "/grnHistoryByFofoId")public String grnHistoryByFofoId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.START_TIME, required = false) String startTimeString, @RequestParam(name = ProfitMandiConstants.END_TIME, required = false) String endTimeString, @RequestParam(name = ProfitMandiConstants.PAGE_NUMBER) int pageNumber, @RequestParam(name = ProfitMandiConstants.PAGE_SIZE) int pageSize, Model model) throws Exception{FofoDetails fofoDetails;try {fofoDetails = cookiesFetcher.getCookiesObject(request);} catch (ProfitMandiBusinessException e) {model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));return "response";}LocalDateTime startDateTime = StringUtils.toDateTime(startTimeString);LocalDateTime endDateTime = StringUtils.toDateTime(endTimeString);model.addAttribute("grnHistories", purchaseRepository.selectByFofoId(fofoDetails.getFofoId(), startDateTime, endDateTime, pageNumber, pageSize));return "";}@RequestMapping(value = "/grnHistoryDetailByPurchaseId")public String grnHistoryByPurchaseId(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PURCHASE_ID) int purchaseId, Model model) throws Exception{FofoDetails fofoDetails;try {fofoDetails = cookiesFetcher.getCookiesObject(request);} catch (ProfitMandiBusinessException e) {model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));return "response";}Purchase purchase = null;try {purchase = purchaseRepository.selectById(purchaseId);} catch (ProfitMandiBusinessException e) {}model.addAttribute("grnHistories", this.grnHistoryDetails(purchase, fofoDetails.getFofoId()));return "";}@RequestMapping(value = "/grnHistoryDetailByPurchaseReference")public String grnHistoryByPurchaseReference(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.PURCHASE_REFERENCE) String purchaseReference, Model model) throws Exception{FofoDetails fofoDetails;try {fofoDetails = cookiesFetcher.getCookiesObject(request);} catch (ProfitMandiBusinessException e) {model.addAttribute("loginResponse", mvcResponseSender.createResponseString("RTLR_1009", false, "/login"));return "response";}Purchase purchase = null;try {purchase = purchaseRepository.selectByPurchaseReference(purchaseReference);} catch (ProfitMandiBusinessException e) {}model.addAttribute("grnHistories", this.grnHistoryDetails(purchase, fofoDetails.getFofoId()));return "";}private Map<Integer, Map<String, Object>> grnHistoryDetails(Purchase purchase, int fofoId){Set<Integer> itemIds = new HashSet<>();Set<Item> inventoryItemDetails = new HashSet<>();List<InventoryItem> inventoryItems = inventoryItemRepository.selectByPurchaseId(purchase.getId());for(InventoryItem inventoryItem : inventoryItems){inventoryItemDetails.add(inventoryItem.getItem());itemIds.add(inventoryItem.getItemId());}Map<Integer, Map<String, Object>> grnHistoryDetails = new HashMap<>();this.createGrnHistoryDetails(grnHistoryDetails, inventoryItems);Map<Integer, Map<String, Object>> completedItemDetails = this.toMap(inventoryItemDetails);this.writeItemDetailstoGrnHistories(grnHistoryDetails, completedItemDetails);if(!purchase.isCompleted()){List<Order> orders = orderRepository.selectByInvoiceNumberRetailerIdNotItemIds(purchase.getPurchaseReference(), fofoId, itemIds);for(Order order : orders){LineItem lineItem = order.getLineItem();//orderItemDetails.add(lineItem.getItem());Item item = lineItem.getItem();if(!grnHistoryDetails.containsKey(item.getId())){Map<String, Object> grnHistoryDetail = new HashMap<>();grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, lineItem.getQuantity());grnHistoryDetail.put(ProfitMandiConstants.BRAND, item.getBrand());grnHistoryDetail.put(ProfitMandiConstants.MODEL_NAME, item.getModelName());grnHistoryDetail.put(ProfitMandiConstants.MODEL_NUMBER, item.getModelNumber());grnHistoryDetail.put(ProfitMandiConstants.COLOR, item.getColor());grnHistoryDetail.put(ProfitMandiConstants.COMPLETED, false);if(lineItem.getSerialNumber() == null || lineItem.getSerialNumber().equals("")){grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, false);}else{grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, true);Set<String> serialNumbers = new HashSet<>();serialNumbers.add(lineItem.getSerialNumber());grnHistoryDetail.put(ProfitMandiConstants.SERIAL_NUMBERS, serialNumbers);}grnHistoryDetails.put(item.getId(), grnHistoryDetail);}else{Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(item.getId());if((boolean)grnHistoryDetail.get(ProfitMandiConstants.SERIALIZED)){@SuppressWarnings("unchecked")Set<String> serialNumbers = (Set<String>)grnHistoryDetail.get(ProfitMandiConstants.SERIAL_NUMBERS);serialNumbers.add(lineItem.getSerialNumber());}}}}return grnHistoryDetails;}private void writeItemDetailstoGrnHistories(Map<Integer, Map<String, Object>> grnHistoryDetails, Map<Integer, Map<String, Object>> itemDetails){for(int key : grnHistoryDetails.keySet()){Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(key);grnHistoryDetail.putAll(itemDetails.get(key));}}private Map<Integer, Map<String, Object>> toMap(Set<Item> items){Map<Integer, Map<String, Object>> map = new HashMap<>();for(Item item : items){Map<String, Object> detailMap = new HashMap<>();detailMap.put(ProfitMandiConstants.BRAND, item.getBrand());detailMap.put(ProfitMandiConstants.MODEL_NAME, item.getModelName());detailMap.put(ProfitMandiConstants.MODEL_NUMBER, item.getModelNumber());detailMap.put(ProfitMandiConstants.COLOR, item.getColor());map.put(item.getId(), detailMap);}return map;}private void createGrnHistoryDetails(Map<Integer, Map<String, Object>> grnHistoryDetails, List<InventoryItem> inventoryItems){//Map<Integer, Map<String, Object>> grnHistoryDetails = new HashMap<>();for(InventoryItem inventoryItem : inventoryItems){if(!grnHistoryDetails.containsKey(inventoryItem.getItemId())){Map<String, Object> grnHistoryDetail = new HashMap<>();grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, inventoryItem.getInitialQuantity());grnHistoryDetail.put(ProfitMandiConstants.COMPLETED, true);if(inventoryItem.getSerialNumber() == null || inventoryItem.getSerialNumber().equals("")){grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, false);}else{grnHistoryDetail.put(ProfitMandiConstants.SERIALIZED, true);Set<String> serialNumbers = new HashSet<>();serialNumbers.add(inventoryItem.getSerialNumber());grnHistoryDetail.put(ProfitMandiConstants.SERIAL_NUMBERS, serialNumbers);}grnHistoryDetails.put(inventoryItem.getItemId(), grnHistoryDetail);//itemIds.add(inventoryItem.getItemId());}else{Map<String, Object> grnHistoryDetail = grnHistoryDetails.get(inventoryItem.getItemId());if((boolean)grnHistoryDetail.get(ProfitMandiConstants.SERIALIZED)){@SuppressWarnings("unchecked")Set<String> serialNumbers = (Set<String>)grnHistoryDetail.get(ProfitMandiConstants.SERIAL_NUMBERS);LOGGER.info("serialNumbers {}", serialNumbers);serialNumbers.add(inventoryItem.getSerialNumber());grnHistoryDetail.put(ProfitMandiConstants.QUANTITY, (int)grnHistoryDetail.get(ProfitMandiConstants.QUANTITY) + inventoryItem.getInitialQuantity());}}}//return null;}public List<Item> getItemsByItemIds(Set<Integer> itemIds){return null;}/*@RequestMapping(value = "/grnHist")public String grnHist(HttpServletRequest request) throws Exception{LOGGER.info("result {}", orderRepository.selectByInvoiceNumber("58400149931", 963490));return null;}*/@RequestMapping(value = "/grnHist")public String grnHist(HttpServletRequest request ) throws Exception{Purchase purchase = null;try {purchase = purchaseRepository.selectById(2);} catch (ProfitMandiBusinessException e) {// TODO Auto-generated catch blocke.printStackTrace();}LOGGER.info("grnHistoryDetails {}", StringUtils.toString(this.grnHistoryDetails(purchase, 963490)));return null;}}