Subversion Repositories SmartDukaan

Rev

Rev 22700 | Rev 23246 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
21234 kshitij.so 1
package in.shop2020.hotspot.dashbaord.server;
2
 
21247 kshitij.so 3
import in.shop2020.hotspot.dashbaord.shared.actions.AddJacketNumberResponse;
4
import in.shop2020.model.v1.inventory.BillingType;
21237 kshitij.so 5
import in.shop2020.model.v1.order.Order;
21247 kshitij.so 6
import in.shop2020.model.v1.order.OrderStatus;
7
import in.shop2020.model.v1.order.ShipmentLogisticsCostDetail;
8
import in.shop2020.model.v1.order.TransactionServiceException;
21237 kshitij.so 9
import in.shop2020.model.v1.order.TransactionService.Client;
21247 kshitij.so 10
import in.shop2020.thrift.clients.LogisticsClient;
21234 kshitij.so 11
import in.shop2020.thrift.clients.TransactionClient;
21242 kshitij.so 12
import in.shop2020.thrift.clients.WarehouseClient;
22588 amit.gupta 13
import in.shop2020.thrift.clients.config.ConfigClient;
21242 kshitij.so 14
import in.shop2020.warehouse.InventoryItem;
21234 kshitij.so 15
 
16
import java.io.File;
17
import java.io.FileInputStream;
18
import java.util.ArrayList;
22588 amit.gupta 19
import java.util.Date;
21242 kshitij.so 20
import java.util.HashMap;
21234 kshitij.so 21
import java.util.List;
21242 kshitij.so 22
import java.util.Map;
21247 kshitij.so 23
import java.util.Set;
21234 kshitij.so 24
 
21244 kshitij.so 25
import org.apache.poi.hssf.usermodel.HSSFCell;
21234 kshitij.so 26
import org.apache.poi.hssf.usermodel.HSSFSheet;
27
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
21244 kshitij.so 28
import org.apache.poi.ss.usermodel.DataFormatter;
21247 kshitij.so 29
import org.apache.thrift.TException;
21234 kshitij.so 30
import org.slf4j.Logger;
31
import org.slf4j.LoggerFactory;
32
 
21247 kshitij.so 33
import com.providers.logistics.Provider;
34
import com.providers.logistics.ProviderFactory;
21242 kshitij.so 35
 
21247 kshitij.so 36
 
21234 kshitij.so 37
public class ProcessBulkBilling{
38
	private static  Logger logger = LoggerFactory.getLogger(ProcessBulkBilling.class);
21242 kshitij.so 39
 
21237 kshitij.so 40
	private String fileName;
41
	private String logisticsTransactionId;
42
	private String packageDimensions;
21242 kshitij.so 43
	private List<InventoryItem> inventoryItems;
44
	private Map<Long, Long> itemQuantityMap= new HashMap<Long, Long>();
45
	private Map<Long, List<InventoryItem>> inventoryItemMap= new HashMap<Long, List<InventoryItem>>();
21237 kshitij.so 46
	private ArrayList<String> imei_list = new ArrayList<String>();
21247 kshitij.so 47
	private BillingType billingType;
48
	private String user;
49
	private List<Order> orders_list;
50
	private Map<Long, List<String>> itemNumbersMap = new HashMap<Long, List<String>>();
51
	private Map<Long, List<String>> serialNumbersMap = new HashMap<Long, List<String>>();
52
	private Map<Long, List<Long>> freebieWarehouseIdMap = new HashMap<Long, List<Long>>();
53
	private static final long jacket_number = 1;
54
	private static final String invoice_type = "Individual";
22588 amit.gupta 55
 
22597 amit.gupta 56
	private static String live = "";
22588 amit.gupta 57
 
58
	static {
59
		try {
60
			ConfigClient cc = ConfigClient.getClient();
22699 amit.gupta 61
			live = cc.get("live");
22588 amit.gupta 62
		} catch (Exception e) {
63
			e.printStackTrace();
64
		}
65
	}
21242 kshitij.so 66
 
67
 
21247 kshitij.so 68
	ProcessBulkBilling(String fileName, String logisticsTransactionId, String packageDimensions, BillingType billingType, String user) {
69
		logger.info("FileName "+fileName+" logisticsTransactionId "+logisticsTransactionId+" packageDimension "+packageDimensions+" billingType "+billingType+" user "+user);
21237 kshitij.so 70
		this.fileName = fileName;
71
		this.logisticsTransactionId = logisticsTransactionId;
72
		this.packageDimensions = packageDimensions;
21247 kshitij.so 73
		this.billingType = billingType;
74
		this.user = user;
21237 kshitij.so 75
	}
21234 kshitij.so 76
 
21237 kshitij.so 77
	public boolean processReport() {
21234 kshitij.so 78
		try{
79
 
80
			FileInputStream iFile = new FileInputStream(new File(fileName));
81
			HSSFWorkbook workbook = new HSSFWorkbook(iFile);
82
			HSSFSheet sheet = workbook.getSheetAt(0);
21244 kshitij.so 83
			DataFormatter formatter = new DataFormatter();
21234 kshitij.so 84
			for (int iterator=sheet.getFirstRowNum()+1;iterator<=sheet.getLastRowNum();iterator++){
22701 amit.gupta 85
				logger.info("Iterator -----" + iterator);
21244 kshitij.so 86
				HSSFCell imei_cell = sheet.getRow(iterator).getCell(0);
87
				String imei = formatter.formatCellValue(imei_cell).trim();
21237 kshitij.so 88
				if (imei == null || imei.isEmpty()){
89
					break;
90
				}
21242 kshitij.so 91
				if (imei_list.contains(imei)){
92
					return false;
93
				}
22701 amit.gupta 94
				logger.info(imei);
21237 kshitij.so 95
				imei_list.add(imei);
21234 kshitij.so 96
			}
97
			return true;
98
		}
99
		catch(Exception e){
100
			e.printStackTrace();
101
			return false;
102
		}
103
	}
21242 kshitij.so 104
 
21247 kshitij.so 105
	private String addBillingInformation(){
106
 
107
		Order t_order = orders_list.get(0);
108
		try{
109
			TransactionClient txnClient = new TransactionClient();
110
			Client client = txnClient.getClient();
111
 
112
 
113
			if (packageDimensions==null){
114
				return "Illegal package dimensions";
115
			}
116
 
117
			try{
118
				ShipmentLogisticsCostDetail slcd = new ShipmentLogisticsCostDetail();
119
				slcd.setLogisticsTransactionId(t_order.getLogisticsTransactionId());
120
				slcd.setPackageDimensions(packageDimensions);
121
				client.addShipmentLogisticDetail(slcd);
122
			}
123
			catch(Exception slcd_ex){
124
				slcd_ex.printStackTrace();
125
				return "Unable to add ShipmentLogisticsCostDetail";
126
			}
127
 
128
 
129
			if (t_order.getAirwaybill_no()==null){
130
				String airway_billno = null;
22588 amit.gupta 131
				if(live.equals("true")) {
132
					try{
133
						//If aramaex then
134
						if (t_order.getLogistics_provider_id()==2){
22589 amit.gupta 135
							Provider logisticsProvider = ProviderFactory.getProvider((int)orders_list.get(0).getLogistics_provider_id());
136
							airway_billno = logisticsProvider.getAirwayBillNo(orders_list);
22588 amit.gupta 137
						}
138
						else{
139
							LogisticsClient lc = new LogisticsClient();
140
							airway_billno = lc.getClient().getEmptyAWB(t_order.getLogistics_provider_id(), t_order.getLogisticsTransactionId());
141
						}
142
						if (airway_billno==null || airway_billno.isEmpty()){
143
							throw new Exception("Empty airway bill number");
144
						}
21247 kshitij.so 145
					}
22588 amit.gupta 146
					catch(Exception airwayBillException){
147
						airwayBillException.printStackTrace();
148
						return "Unable to assign airway bill number";
21247 kshitij.so 149
					}
22597 amit.gupta 150
				} else if (live.equals("false")){
151
					airway_billno = String.valueOf(new Date().getTime());
22588 amit.gupta 152
				} else {
22597 amit.gupta 153
					return "Config error";
21247 kshitij.so 154
				}
22589 amit.gupta 155
				client.updateMasterOrderAWB(t_order.getLogisticsTransactionId(), airway_billno);
21247 kshitij.so 156
			}
157
 
158
 
159
			if((billingType == BillingType.OURS || billingType == BillingType.OURS_EXTERNAL) && t_order.getStatus().getValue() >= OrderStatus.BILLED.getValue()){
160
				return "Already Billed";
161
			}
162
 
163
			long billing_type = billingType.getValue();
164
 
165
			Set<Long> orderIdSet = itemNumbersMap.keySet();
166
			List<Long> order_ids = new ArrayList<Long>();
167
			order_ids.addAll(orderIdSet);
168
 
169
			boolean status = client.addBillingDetailsForGrouppedOrders(order_ids, "", itemNumbersMap, serialNumbersMap, freebieWarehouseIdMap , user, jacket_number, billing_type, false, invoice_type);
170
 
171
			if(!status)
172
				return "Couldn't add billing info on server";
173
 
174
			return "Billing Info added successfully";
175
		}  catch(TransactionServiceException tse){
176
			logger.error("Exception while adding InventoryServiceHandlerjacket number", tse);
177
			return "Error While Billing Order:" + tse.getMessage();
178
		} catch (TException e) {
179
			return "Unknown exception from server:" + e.getMessage();
180
		}
181
	}
182
 
21237 kshitij.so 183
	public String checkBillingDetails(){
184
		try{
21242 kshitij.so 185
			Client tc = new TransactionClient().getClient();
186
			orders_list = tc.getGroupOrdersByLogisticsTxnId(logisticsTransactionId);
21237 kshitij.so 187
		}
188
		catch(Exception e){
189
			e.printStackTrace();
190
			return "Service Error!!!";
191
		}
192
		long total_quantity = 0;
193
		for (Order o : orders_list){
21242 kshitij.so 194
			if (itemQuantityMap.containsKey(o.getLineitems().get(0).getItem_id())){
195
				itemQuantityMap.put(o.getLineitems().get(0).getItem_id(), itemQuantityMap.get(o.getLineitems().get(0).getItem_id())+(long)o.getLineitems().get(0).getQuantity());
196
			}
197
			else{
198
				itemQuantityMap.put(o.getLineitems().get(0).getItem_id(), (long)o.getLineitems().get(0).getQuantity());
199
			}
21237 kshitij.so 200
			total_quantity = (long) (total_quantity + o.getLineitems().get(0).getQuantity());
201
		}
202
		if (total_quantity != imei_list.size()){
203
			return "Quantity and imei mismatch.Supplied imei's not equal to quantity to bill";
204
		}
21242 kshitij.so 205
		try{
206
			in.shop2020.warehouse.WarehouseService.Client wc = new WarehouseClient().getClient();
207
			inventoryItems = wc.getInventoryItems(imei_list);
22700 amit.gupta 208
			logger.info(imei_list.toString());
22698 amit.gupta 209
			logger.info(inventoryItems.toString());
21242 kshitij.so 210
			for (InventoryItem it : inventoryItems){
211
				if (inventoryItemMap.containsKey(it.getItemId())){
212
					inventoryItemMap.get(it.getItemId()).add(it);
213
				}
214
				else{
215
					List<InventoryItem> it_list = new ArrayList<InventoryItem>();
216
					it_list.add(it);
217
					inventoryItemMap.put(it.getItemId(), it_list);
218
				}
219
			}
220
		}
221
		catch(Exception e){
222
			return "Exception while getting inventory items from warehouse";
223
		}
224
		logger.info("itemQuantityMap "+itemQuantityMap);
225
		logger.info("inventoryItemMap "+inventoryItemMap);
21247 kshitij.so 226
		for(Map.Entry<Long, Long> entry : itemQuantityMap.entrySet()){
227
			List<InventoryItem> inventory_items = inventoryItemMap.get(entry.getKey());
21252 kshitij.so 228
			if (inventory_items == null){
229
				return "Mismatch in inventory items.Quantity to bill "+entry.getValue()+".InventoryItem available 0 for item_id "+entry.getKey();
21247 kshitij.so 230
			}
21252 kshitij.so 231
			if (inventory_items.size()!= entry.getValue()){
232
				return "Mismatch in inventory items.Quantity to bill "+entry.getValue()+".InventoryItem available "+inventory_items.size()+" for item_id "+entry.getKey();
233
			}
21247 kshitij.so 234
		}
235
		for (Order o : orders_list){
236
 
237
			freebieWarehouseIdMap.put(o.getId(), new ArrayList<Long>());
238
 
239
			for(int i=0;i< o.getLineitems().get(0).getQuantity();i++){
240
 
241
				if (itemNumbersMap.containsKey(o.getId())){
242
					itemNumbersMap.get(o.getId()).add("1");
243
				}
244
				else{
245
					List<String> itemNumbers = new ArrayList<String>();
246
					itemNumbers.add("1");
247
					itemNumbersMap.put(o.getId(), itemNumbers);
248
				}
249
 
250
				if (serialNumbersMap.containsKey(o.getId())){
251
					InventoryItem inventory_item = inventoryItemMap.get(o.getLineitems().get(0).getItem_id()).remove(0);
252
					serialNumbersMap.get(o.getId()).add(inventory_item.getSerialNumber());
253
				}
254
				else{
255
					List<String> serialNumbers = new ArrayList<String>();
256
					InventoryItem inventory_item = inventoryItemMap.get(o.getLineitems().get(0).getItem_id()).remove(0);
257
					serialNumbers.add(inventory_item.getSerialNumber());
258
					serialNumbersMap.put(o.getId(), serialNumbers);
259
				}
260
			}
261
		}
262
 
263
		return addBillingInformation();
21237 kshitij.so 264
	}
21234 kshitij.so 265
 
266
}