Rev 13956 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.inventory.controllers;import in.shop2020.inventory.controllers.PurchaseController.ScanRecordType;import in.shop2020.model.v1.catalog.CatalogService;import in.shop2020.model.v1.catalog.CatalogServiceException;import in.shop2020.model.v1.catalog.Item;import in.shop2020.model.v1.catalog.ItemType;import in.shop2020.model.v1.inventory.InventoryServiceException;import in.shop2020.model.v1.inventory.Vendor;import in.shop2020.model.v1.inventory.InventoryService.Client;import in.shop2020.model.v1.inventory.Warehouse;import in.shop2020.model.v1.inventory.WarehouseType;import in.shop2020.model.v1.order.LineItem;import in.shop2020.purchase.PurchaseReturn;import in.shop2020.purchase.PurchaseServiceException;import in.shop2020.thrift.clients.CatalogClient;import in.shop2020.thrift.clients.InventoryClient;import in.shop2020.thrift.clients.PurchaseClient;import in.shop2020.thrift.clients.WarehouseClient;import in.shop2020.warehouse.InventoryItem;import in.shop2020.warehouse.Scan;import in.shop2020.warehouse.ScanType;import in.shop2020.warehouse.TransferLot;import in.shop2020.warehouse.TransferLotStatus;import in.shop2020.warehouse.WarehouseService;import in.shop2020.warehouse.WarehouseServiceException;import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.Hashtable;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import java.util.ArrayList;import javax.servlet.ServletOutputStream;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.thrift.TException;import org.apache.thrift.transport.TTransportException;import org.json.JSONObject;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class TransferLotController extends BaseController{/****/private static final long serialVersionUID = 3052114881399915348L;private Long id;private TransferLot transferLot;private List<TransferLot>transferLots;private String remoteTransferRefNumber;private String fromDate;private String toDate;private String errorMessage = "";private Calendar transferLotFromDate;private Calendar transferLotToDate;private Long originWarehouseId;private List<LineItem> lineItems;private Long destinationWarehouseId;private String inventoryItemsString;private JSONObject jsonTransferLotItemData = null;private String inventoryItemsLength;private String transferLotReceiveType;private String output;private static Map<Long, Warehouse> warehouseMap;private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");private static long totalItemsSizeInTransferLot;private static boolean isCompleteTransferAvailable = false;private static Logger logger = LoggerFactory.getLogger(TransferLotController.class);static {warehouseMap = new HashMap<Long, Warehouse>();InventoryClient inventoryServiceClient;try {inventoryServiceClient = new InventoryClient();Client inventoryClient = inventoryServiceClient.getClient();List<Warehouse> warehouses;warehouses = inventoryClient.getAllWarehouses(true);for(Warehouse warehouse : warehouses){warehouseMap.put(warehouse.getId(), warehouse);}} catch (TTransportException e) {logger.error("Error in populating warehouse map", e);} catch (TException e) {logger.error("Error in populating warehouse map", e);} catch (InventoryServiceException isex) {logger.error("Error in populating warehouse map", isex);}}public String index(){if(warehouseMap==null||warehouseMap.size()<1){fetchWarehouseMap();}try{WarehouseService.Client warehouseClient = new WarehouseClient().getClient();transferLotFromDate = Calendar.getInstance();transferLotToDate = Calendar.getInstance();if(fromDate==null) {transferLotFromDate.add(Calendar.MONTH, -12);} else {transferLotFromDate.setTime(formatter.parse(fromDate));if(toDate!=null) {transferLotToDate.setTime(formatter.parse(toDate));}}List<TransferLot> allTransferLots = warehouseClient.getTransferLotsByDate(transferLotFromDate.getTimeInMillis(), transferLotToDate.getTimeInMillis());transferLots = new ArrayList<TransferLot>();for(TransferLot transferLot: allTransferLots){if(transferLot.getStatus()!=TransferLotStatus.TRANSFER_COMPLETE){transferLots.add(transferLot);}}//transferLots = warehouseClient.getTransferLotsByDate(transferLotFromDate.getTimeInMillis(), transferLotToDate.getTimeInMillis());} catch(TException e){logger.error("Error in getting transfer lots", e);} catch(ParseException pex) {logger.error("Error in parsing time", pex);} catch(WarehouseServiceException wsex) {logger.error("Error in getting transfer lots", wsex);}return INDEX;}private void fetchWarehouseMap() {warehouseMap = new HashMap<Long, Warehouse>();InventoryClient inventoryServiceClient;try {inventoryServiceClient = new InventoryClient();Client inventoryClient = inventoryServiceClient.getClient();List<Warehouse> warehouses;warehouses = inventoryClient.getAllWarehouses(true);for(Warehouse warehouse : warehouses){warehouseMap.put(warehouse.getId(), warehouse);}} catch (TTransportException e) {logger.error("Error in populating warehouse map", e);} catch (TException e) {logger.error("Error in populating warehouse map", e);} catch (InventoryServiceException isex) {logger.error("Error in populating warehouse map", isex);}}public String create() {originWarehouseId = Long.parseLong(request.getParameter("originWarehouseId"));destinationWarehouseId = Long.parseLong(request.getParameter("destinationWarehouseId"));try {WarehouseService.Client warehouseClient = new WarehouseClient().getClient();id = warehouseClient.createTransferLot(originWarehouseId, destinationWarehouseId);} catch (TException tex) {logger.error("Error in creating transferlot between warehouseId " + originWarehouseId + " and " + destinationWarehouseId, tex);errorMessage = "Error in creating transferlot between warehouseId " + originWarehouseId + " and " + destinationWarehouseId;} catch (WarehouseServiceException wex) {logger.error("Error in creating transferlot between warehouseId " + originWarehouseId + " and " + destinationWarehouseId, wex);errorMessage = "Error in creating transferlot between warehouseId " + originWarehouseId + " and " + destinationWarehouseId;}return show();}public String show(){resetLineItems();return SHOW;}public String update() {try {if(!areValidScans()){errorMessage = "Invalid Scans";return show();}if(id == null || id==0) {errorMessage = "No transferLot-Id selected for Transfer";return "new";}List<InventoryItem> inventoryItems = new ArrayList<InventoryItem>();CatalogService.Client catalogClient = new CatalogClient().getClient();for (LineItem lineItem : lineItems) {if (lineItem.getItem_id() == 0) {continue;}InventoryItem inventoryItem = new InventoryItem();inventoryItem.setItemId(lineItem.getItem_id());inventoryItem.setCurrentQuantity(new Double(lineItem.getQuantity()).longValue());inventoryItem.setItemNumber(lineItem.getItem_number());if(catalogClient.getItem(lineItem.getItem_id()).getType()==ItemType.SERIALIZED) {inventoryItem.setSerialNumber(lineItem.getSerial_number());}inventoryItems.add(inventoryItem);}WarehouseService.Client warehouseClient = new WarehouseClient().getClient();warehouseClient.scanForTransferOut(inventoryItems, ScanType.WAREHOUSE_TRANSFER_OUT, id);} catch (TTransportException e) {errorMessage = "Error while establishing connection to the warehouse server";logger.error(errorMessage, e);} catch (WarehouseServiceException e) {errorMessage = e.getMessage();logger.error(errorMessage, e);} catch (TException e) {errorMessage = "Error while scanning in the item";logger.error(errorMessage, e);} catch (CatalogServiceException csex) {errorMessage = "Error while getting the serialized details of item";logger.error(errorMessage, csex);}return show();}public String editNew(){return "new";}private boolean areValidScans() throws NumberFormatException, TException {boolean areValidScans = true;return areValidScans;}private void resetLineItems() {lineItems = new ArrayList<LineItem>();for (int i = 0; i < 11; i++) {LineItem lineItem = new LineItem();lineItem.setId(i);lineItem.setExtra_info("");lineItem.setSerial_number("");lineItem.setItem_number("");lineItem.setQuantity(1);lineItem.setItem_id(-1);lineItems.add(lineItem);}}public String getTransferLotItems() {try {WarehouseService.Client warehouseClient = new WarehouseClient().getClient();Map<Long, Long> transferLotItems = warehouseClient.getItemsInTransferLot(id);CatalogService.Client catalogClient = new CatalogClient().getClient();String transferLotItemDiv = "<div id = 'transfer-lot-item-list-div' align='center'><table id = 'transfer-lot-item-list-table'><tr><th>Item</th><th>Quantity</th></tr>";for(Long itemId : transferLotItems.keySet()){Item item = catalogClient.getItem(itemId);transferLotItemDiv = transferLotItemDiv + "<tr><td>" + item.getBrand() + " " + item.getModelName() + " " + item.getModelNumber() + " " + item.getColor();transferLotItemDiv = transferLotItemDiv + "</td><td>" + transferLotItems.get(itemId) +"</td></tr>";}transferLotItemDiv = transferLotItemDiv + "</table></div>";setOutput(transferLotItemDiv);} catch (TException tex) {logger.error("Error in getting transfer lot items",tex);} catch (CatalogServiceException csex) {logger.error("Error in getting transfer lot items",csex);}return OUTPUT;}public String getTransferLotItemsForMarkReceive(){try{WarehouseService.Client warehouseClient = new WarehouseClient().getClient();List<InventoryItem> inventoryItems = warehouseClient.getTransferLotItemsForMarkReceive(id, ScanType.WAREHOUSE_TRANSFER_OUT);CatalogService.Client catalogClient = new CatalogClient().getClient();Set<Long> itemIdSet = new HashSet<Long>();Map<Long,Map<String,String>> itemDataMap = new HashMap<Long,Map<String,String>>();Map<String,List<Map<String,String>>> jsonDataMap = new HashMap<String,List<Map<String,String>>>();List<Map<String,String>> jsonDataList = new ArrayList<Map<String,String>>();//long quantity = 0;for(InventoryItem item : inventoryItems){itemIdSet.add(item.getItemId());}for(Long id : itemIdSet){Item catalogItem = catalogClient.getItem(id);Map<String,String> itemdetailsMap = new HashMap<String,String>();itemdetailsMap.put("Name", catalogItem.getBrand() + " " + catalogItem.getModelName() + " " + catalogItem.getModelNumber() + " " + catalogItem.getColor());itemdetailsMap.put("Type", catalogItem.getType().name());itemDataMap.put(id,itemdetailsMap);}for(InventoryItem item : inventoryItems){Map<String,String> dataMap = new HashMap<String,String>();ItemType type = ItemType.valueOf(itemDataMap.get(item.getItemId()).get("Type"));dataMap.put("ItemId",item.getId()+"");if(ItemType.SERIALIZED == type){dataMap.put("ItemDetail",itemDataMap.get(item.getItemId()).get("Name") +"-"+ item.getSerialNumber()+"-Units("+item.getInitialQuantity()+")");}else{dataMap.put("ItemDetail",itemDataMap.get(item.getItemId()).get("Name") +"-"+ item.getItemNumber()+"-Units("+item.getCurrentQuantity()+")");}TransferLotStatus transferLotStatus = item.getTransferStatus();if(TransferLotStatus.IN_TRANSIT == transferLotStatus){dataMap.put("ItemStatus","Enabled");}else{dataMap.put("ItemStatus","Disabled");}//quantity = quantity + item.getInitialQuantity();jsonDataList.add(dataMap);}totalItemsSizeInTransferLot= inventoryItems.size();jsonDataMap.put("TransferLotItemData", jsonDataList);setJsonTransferLotItemData(new JSONObject(jsonDataMap));} catch(Exception e){logger.error("Error While getting Transfer Lot Items for Mark Receive",e);}return OUTPUT;}public String markTransferLotAsReceived() throws Exception {try{WarehouseService.Client warehouseClient = new WarehouseClient().getClient();warehouseClient.markItemsAsReceivedForTransferLot(id);warehouseClient.markTransferLotAsReceived(id, remoteTransferRefNumber);} catch(TException e){logger.error("Error in marking transfer lot as received",e);throw new Exception("Error in marking transfer lot as received");} catch(WarehouseServiceException wsex) {logger.error("Error in marking transfer lot as received",wsex);throw new Exception("Error in marking transfer lot as received");}return INDEX;}public String markTransferLotAsReceivedPartial() throws Exception {try{WarehouseService.Client warehouseClient = new WarehouseClient().getClient();TransferLot transferLot = warehouseClient.getTransferLot(id);if(transferLot.getTransitCompletionReferenceNumber()!=null && !("").equalsIgnoreCase(transferLot.getTransitCompletionReferenceNumber())){remoteTransferRefNumber = transferLot.getTransitCompletionReferenceNumber()+":"+remoteTransferRefNumber;}if("complete".equalsIgnoreCase(transferLotReceiveType)){System.out.println("In Transfer Complete Block");if (TransferLotStatus.IN_TRANSIT.equals(transferLot.getStatus())){if(!warehouseClient.isAlive()){warehouseClient = new WarehouseClient().getClient();}warehouseClient.markItemsAsReceivedForTransferLot(id);warehouseClient.markTransferLotAsReceived(id, remoteTransferRefNumber);}if (TransferLotStatus.PARTIAL_TRANSFER.equals(transferLot.getStatus())){String[] inventoryItemsArr = inventoryItemsString.split(",");//System.out.println("inventoryItemsArr Length... "+inventoryItemsArr.length);List<InventoryItem> inventoryItemList = new ArrayList<InventoryItem>();for(String inventItemStr : inventoryItemsArr){if(!warehouseClient.isAlive()){warehouseClient = new WarehouseClient().getClient();}InventoryItem item = warehouseClient.getInventoryItemFromId(Long.parseLong(inventItemStr));inventoryItemList.add(item);}if(!warehouseClient.isAlive()){warehouseClient = new WarehouseClient().getClient();}warehouseClient.markItemsAsReceivedForTransferLotPartial(inventoryItemList,id);warehouseClient.markTransferLotAsReceived(id, remoteTransferRefNumber);}}else{List<InventoryItem> inventoryItemsScannedIn = warehouseClient.getTransferLotItemsForMarkReceive(id,ScanType.WAREHOUSE_TRANSFER_IN);System.out.println("totalItemsSizeInTransferLot....."+totalItemsSizeInTransferLot);int totalItemsSizeScannedIn = inventoryItemsScannedIn.size();int totalItemsSizeToBeScanIn = Integer.parseInt(inventoryItemsLength);System.out.println("totalItemsSizeScannedIn....."+totalItemsSizeScannedIn);System.out.println("totalItemsSizeToBeScanIn....."+totalItemsSizeToBeScanIn);String[] inventoryItemsArr = inventoryItemsString.split(",");System.out.println("inventoryItemsArr Length... "+inventoryItemsArr.length);List<InventoryItem> inventoryItemList = new ArrayList<InventoryItem>();for(String inventItemStr : inventoryItemsArr){if(!warehouseClient.isAlive()){warehouseClient = new WarehouseClient().getClient();}InventoryItem item = warehouseClient.getInventoryItemFromId(Long.parseLong(inventItemStr));inventoryItemList.add(item);}if(totalItemsSizeToBeScanIn==totalItemsSizeInTransferLot){System.out.println("Transfer Complete");if(!warehouseClient.isAlive()){warehouseClient = new WarehouseClient().getClient();}warehouseClient.markItemsAsReceivedForTransferLot(id);warehouseClient.markTransferLotAsReceived(id, remoteTransferRefNumber);}if(totalItemsSizeInTransferLot== (totalItemsSizeScannedIn + totalItemsSizeToBeScanIn)){System.out.println("Transfer Complete.... from Partial");if(!warehouseClient.isAlive()){warehouseClient = new WarehouseClient().getClient();}warehouseClient.markItemsAsReceivedForTransferLotPartial(inventoryItemList,id);warehouseClient.markTransferLotAsReceived(id, remoteTransferRefNumber);}if(totalItemsSizeToBeScanIn<totalItemsSizeInTransferLot){System.out.println("Items and Transfer Lot Partial");if(!warehouseClient.isAlive()){warehouseClient = new WarehouseClient().getClient();}warehouseClient.markItemsAsReceivedForTransferLotPartial(inventoryItemList,id);warehouseClient.markTransferLotAsReceivedPartial(id, remoteTransferRefNumber);}}} catch(Exception e){logger.error("Error in marking transfer lot as received",e);throw new Exception("Error in marking transfer lot as received");}return INDEX;}public void downloadFBASheet() {try {WarehouseService.Client warehouseClient = new WarehouseClient().getClient();Map<Long, Long> transferLotItems = warehouseClient.getItemsInTransferLot(id);File fbaSheetFile = new File("transfer-lot-"+id+"-sheet_"+new Date() + ".xls");FileOutputStream fStream = null;try {fStream = new FileOutputStream(fbaSheetFile);} catch (FileNotFoundException e1) {logger.error(e1.getMessage());}ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();Workbook wb = new HSSFWorkbook();Sheet fbaSheet = wb.createSheet("FBA Sheet");Row merchantShipmentName = fbaSheet.createRow((short)0);merchantShipmentName.createCell(0).setCellValue("MerchantShipmentName");Row labelPrepPreference = fbaSheet.createRow((short)1);labelPrepPreference.createCell(0).setCellValue("LabelPrepPreference");Row addressName = fbaSheet.createRow((short)2);addressName.createCell(0).setCellValue("AddressName");Row addressFieldOne = fbaSheet.createRow((short)3);addressFieldOne.createCell(0).setCellValue("AddressFieldOne");Row addressFieldTwo = fbaSheet.createRow((short)4);addressFieldTwo.createCell(0).setCellValue("AddressFieldTwo");Row addressCity = fbaSheet.createRow((short)5);addressCity.createCell(0).setCellValue("AddressCity");Row addressCountryCode = fbaSheet.createRow((short)6);addressCountryCode.createCell(0).setCellValue("AddressCountryCode");Row addressStateOrRegion = fbaSheet.createRow((short)7);addressStateOrRegion.createCell(0).setCellValue("AddressStateOrRegion");Row addressPostalCode = fbaSheet.createRow((short)8);addressPostalCode.createCell(0).setCellValue("AddressPostalCode");Row addressDistrict = fbaSheet.createRow((short)9);addressDistrict.createCell(0).setCellValue("AddressDistrict");Row blankRow = fbaSheet.createRow((short)10);//blankRow.createCell(0).setCellValue("AddressPostalCode");Row skuHeaders = fbaSheet.createRow((short)11);skuHeaders.createCell(0).setCellValue("MerchantSKU");skuHeaders.createCell(1).setCellValue("Quantity");int rowCount = 12;for(Entry<Long, Long> itemQuantity : transferLotItems.entrySet()) {Row newRow = fbaSheet.createRow((short)rowCount);newRow.createCell(0).setCellValue("FBA"+itemQuantity.getKey());newRow.createCell(1).setCellValue(itemQuantity.getValue());rowCount++;}try {wb.write(baosXLS);baosXLS.close();baosXLS.writeTo(fStream);fStream.flush();fStream.close();} catch(IOException e) {//TODO}byte[] buffer = null;buffer = new byte[(int) fbaSheetFile.length()];InputStream input = null;try {int totalBytesRead = 0;input = new BufferedInputStream(new FileInputStream(fbaSheetFile));while (totalBytesRead < buffer.length) {int bytesRemaining = buffer.length - totalBytesRead;// input.read() returns -1, 0, or more :int bytesRead = input.read(buffer, totalBytesRead,bytesRemaining);if (bytesRead > 0) {totalBytesRead = totalBytesRead + bytesRead;}}/* the above style is a bit tricky: it places bytes into the* 'buffer' array; 'buffer' is an output parameter; the while* loop usually has a single iteration only.*/} finally {input.close();}response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "attachment; filename="+ fbaSheetFile.getName());ServletOutputStream sos = response.getOutputStream();sos.write(buffer);sos.flush();} catch (TException tex) {logger.error("Error in generating fba sheet for transfer Lot Id " + id,tex);} catch (FileNotFoundException fnfex) {logger.error("Error in generating fba sheet for transfer Lot Id " + id,fnfex);} catch (IOException ioex) {logger.error("Error in generating fba sheet for transfer Lot Id " + id,ioex);}}public String getWarehouseName(Long warehouseId){return warehouseMap.get(warehouseId).getDisplayName();}public boolean isTransferReceivable(TransferLot transferLot) {if(warehouseMap.get(transferLot.getDestinationWarehouseId()).getWarehouseType()==WarehouseType.OURS_THIRDPARTY||warehouseMap.get(transferLot.getDestinationWarehouseId()).getWarehouseType()==WarehouseType.THIRD_PARTY) {return false;} else {return true;}}public String getDateTime(long milliseconds) {Calendar cal = Calendar.getInstance();cal.setTimeInMillis(milliseconds);return formatter.format(cal.getTime());}public static void setWarehouseMap(Map<Long, Warehouse> warehouseMap) {TransferLotController.warehouseMap = warehouseMap;}public TransferLot getTransferLot() {return transferLot;}public void setTransferLot(TransferLot transferLot) {this.transferLot = transferLot;}public List<TransferLot> getTransferLots() {return transferLots;}public void setTransferLots(List<TransferLot> transferLots) {this.transferLots = transferLots;}public String getRemoteTransferRefNumber() {return remoteTransferRefNumber;}public void setRemoteTransferRefNumber(String remoteTransferRefNumber) {this.remoteTransferRefNumber = remoteTransferRefNumber;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getOutput() {return output;}public void setOutput(String output) {this.output = output;}public Long getOriginWarehouseId() {return originWarehouseId;}public void setOriginWarehouseId(Long originWarehouseId) {this.originWarehouseId = originWarehouseId;}public Long getDestinationWarehouseId() {return destinationWarehouseId;}public void setDestinationWarehouseId(Long destinationWarehouseId) {this.destinationWarehouseId = destinationWarehouseId;}public String getErrorMessage() {return errorMessage;}public void setErrorMsg(String errorMessage) {this.errorMessage = errorMessage;}public List<LineItem> getLineItems() {return lineItems;}public void setLineItems(List<LineItem> lineItems) {this.lineItems = lineItems;}public JSONObject getJsonTransferLotItemData() {return jsonTransferLotItemData;}public void setJsonTransferLotItemData(JSONObject jsonTransferLotItemData) {this.jsonTransferLotItemData = jsonTransferLotItemData;}public String getInventoryItemsString() {return inventoryItemsString;}public void setInventoryItemsString(String inventoryItemsString) {this.inventoryItemsString = inventoryItemsString;}public String getInventoryItemsLength() {return inventoryItemsLength;}public void setInventoryItemsLength(String inventoryItemsLength) {this.inventoryItemsLength = inventoryItemsLength;}public String getTransferLotReceiveType() {return transferLotReceiveType;}public void setTransferLotReceiveType(String transferLotReceiveType) {this.transferLotReceiveType = transferLotReceiveType;}}