Subversion Repositories SmartDukaan

Rev

Rev 10149 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
10138 vikram.rag 1
package in.shop2020;
2
 
3
import in.shop2020.model.v1.catalog.CatalogService;
4
import in.shop2020.model.v1.catalog.Item;
5
import in.shop2020.model.v1.catalog.SnapdealItem;
6
import in.shop2020.model.v1.catalog.SnapdealItemDetails;
7
import in.shop2020.model.v1.catalog.status;
8
import in.shop2020.model.v1.inventory.InventoryService.Client;
9
import in.shop2020.model.v1.inventory.InventoryType;
10
import in.shop2020.model.v1.inventory.ItemInventory;
11
import in.shop2020.model.v1.inventory.SnapdealInventoryItem;
12
import in.shop2020.model.v1.inventory.Warehouse;
13
import in.shop2020.model.v1.inventory.WarehouseLocation;
14
import in.shop2020.model.v1.inventory.WarehouseType;
15
import in.shop2020.thrift.clients.CatalogClient;
16
import in.shop2020.thrift.clients.InventoryClient;
17
import in.shop2020.thrift.clients.TransactionClient;
18
import in.shop2020.utils.GmailUtils;
19
import inventory.Inventory;
20
import inventory.InventoryHistory;
21
import inventory.InventoryHistoryItems;
22
import inventory.InventoryItems;
23
import inventory.PendingOrderInventoryHistory;
24
import inventory.SnapdealItemForInventory;
25
 
26
import java.io.BufferedReader;
27
import java.io.File;
28
import java.io.FileInputStream;
29
import java.io.FileNotFoundException;
30
import java.io.FileOutputStream;
31
import java.io.IOException;
32
import java.io.InputStreamReader;
33
import java.io.UnsupportedEncodingException;
34
import java.util.ArrayList;
35
import java.util.Calendar;
36
import java.util.GregorianCalendar;
37
import java.util.HashMap;
38
import java.util.List;
39
import java.util.Map;
40
import java.util.Map.Entry;
41
 
42
import javax.mail.MessagingException;
43
 
44
import org.apache.http.HttpResponse;
45
import org.apache.http.NameValuePair;
46
import org.apache.http.client.ClientProtocolException;
47
import org.apache.http.client.HttpClient;
48
import org.apache.http.client.entity.UrlEncodedFormEntity;
49
import org.apache.http.client.methods.HttpGet;
50
import org.apache.http.client.methods.HttpPost;
51
import org.apache.http.entity.mime.MultipartEntity;
52
import org.apache.http.entity.mime.content.ContentBody;
53
import org.apache.http.entity.mime.content.FileBody;
54
import org.apache.http.impl.client.DefaultHttpClient;
55
import org.apache.http.message.BasicNameValuePair;
56
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
57
import org.apache.poi.ss.usermodel.Row;
58
import org.apache.poi.ss.usermodel.Sheet;
59
import org.apache.poi.ss.usermodel.Workbook;
60
import org.apache.thrift.TException;
61
import org.apache.thrift.transport.TTransportException;
62
 
63
import com.google.gson.Gson;
64
 
65
public class UpdateSnapdealInventoryUsingPanel {
66
	private static long time = System.currentTimeMillis();
67
	private static String SNAPDEAL_INVENTORY_SHEET;
68
	private static Map<Long, SnapdealItemForInventory> allItemsInventoryMap = new HashMap<Long, SnapdealItemForInventory>();
69
	private static ArrayList<Inventory> currentInventoryItemList;
70
	static Map<Long,Long> itemIdpendingOrdersMap;
71
	private static Map<String,InventoryHistory> inventoryhistoryItemMap;
72
	private static DefaultHttpClient client = new DefaultHttpClient();
73
	static Map<String,SnapdealItemDetails> snapdealItemMap = new HashMap<String,SnapdealItemDetails>();
74
	static Map<Long,SnapdealItemDetails> itemSnapdealMap = new HashMap<Long,SnapdealItemDetails>();
75
	static Map<String,PendingOrderInventoryHistory> PendingOrdersInventoryHistoryMap = new HashMap<String,PendingOrderInventoryHistory>();
76
	static long lastUpdatedInventoryTime = 0;
77
	static java.text.SimpleDateFormat sdf;
78
	static String emailFromAddress;
79
	static String password;
80
	static GmailUtils mailer;
81
	static String sendTo[];
82
	static StringBuffer notMappedItems =new StringBuffer();
83
	private static boolean UPDATEUSINGPANEL=true;
84
	static{
85
		sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
86
		emailFromAddress = "build@shop2020.in";
87
		password = "cafe@nes";
88
		mailer = new GmailUtils();
89
		//sendTo = new String[]{"vikram.raghav@shop2020.in"};
90
		sendTo = new String[]{ "sandeep.sachdeva@shop2020.in", "vikram.raghav@shop2020.in", "rajneesh.arora@shop2020.in",
91
				"khushal.bhatia@shop2020.in","manoj.kumar@saholic.com","chaitnaya.vats@saholic.com",
92
				"yukti.jain@shop2020.in","manisha.sharma@shop2020.in","chandan.kumar@shop2020.in","ankush.dhingra@shop2020.in","amar.kumar@shop2020.in"};
93
		itemIdpendingOrdersMap = new HashMap<Long,Long>();
94
		CatalogClient catalogServiceClient = null;
95
		try {
96
			catalogServiceClient = new CatalogClient();
97
		} catch (TTransportException e1) {
98
			e1.printStackTrace();
99
		}
100
		in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
101
		List<SnapdealItemDetails> allSnapdealItems = null;
102
		try {
103
			allSnapdealItems = catalogClient.getAllSnapdealItems();
104
		} catch (TException e) {
105
			e.printStackTrace();
106
		}
107
		for(SnapdealItemDetails snapdealItem:allSnapdealItems){
108
			snapdealItemMap.put(snapdealItem.getSkuAtSnapdeal(),snapdealItem);
109
			itemSnapdealMap.put(snapdealItem.getItem_id(), snapdealItem);
110
			//System.out.println("Creating Item and Snapdeal Map " + snapdealItem.getItem_id() + " " + snapdealItem.getSkuAtSnapdeal());
111
		}
112
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
113
		try {
114
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
115
			lastUpdatedInventoryTime = transactionClient.getSourceDetail(7).getLastUpdatedOn();
116
			//System.out.println("Time is " + lastUpdatedInventoryTime);
117
		} catch (Exception e) {
118
			try {
119
				transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
120
				lastUpdatedInventoryTime = transactionClient.getSourceDetail(7).getLastUpdatedOn();
121
			} catch (Exception ex) {
122
				ex.printStackTrace();
123
			}
124
		}
125
	}
126
 
127
	private static void calculateinventory(){
128
		CatalogClient catalogServiceClient = null;
129
		Map<Long,ItemInventory> availability= new HashMap<Long,ItemInventory>();
130
		try {
131
			catalogServiceClient = new CatalogClient();
132
		} catch (TTransportException e) {
133
			e.printStackTrace();
134
		}
135
		in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
136
		try {
137
			List<Item> aliveItems = catalogClient.getAllAliveItems();
138
			Map<Long,Item> aliveItemsMap = new HashMap<Long,Item>(); 
139
			for(in.shop2020.model.v1.catalog.Item thriftItem:aliveItems){
140
				aliveItemsMap.put(thriftItem.getId(), thriftItem);
141
 
142
			}
143
			InventoryClient inventoryServiceClient = new InventoryClient();
144
			try {
145
				inventoryServiceClient = new InventoryClient();
146
			} catch (TTransportException e) {
147
				e.printStackTrace();
148
			}
149
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
150
			List<in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems> ignoreItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
151
			SNAPDEAL_INVENTORY_SHEET = "/home/snapdeal/snapdeal-inventory-"+time+".xls";
152
			availability = inventoryClient.getInventorySnapshot(0);
153
			List<Warehouse> allwarehouses = inventoryClient.getWarehouses(null,null,0,0,0);
154
			Map<Long,Warehouse> allWarehousesMap = new HashMap<Long,Warehouse>();
155
			for(Warehouse warehouse:allwarehouses){
156
				allWarehousesMap.put(warehouse.getId(),warehouse);
157
			}
158
			List<Warehouse> warehouses = inventoryClient.getWarehouses(WarehouseType.OURS_THIRDPARTY,null,0,0,0);
159
			List<Warehouse> ours_warehouses = inventoryClient.getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 0, 0, 0);
160
			List<Long> thirdpartywarehouseids = new ArrayList<Long>();
161
			List<Long> oursGoodWarehouse = new ArrayList<Long>();
162
			for(Warehouse warehouse:warehouses){
163
				thirdpartywarehouseids.add(warehouse.getId());
164
			}
165
			for (Warehouse warehouse:ours_warehouses){
166
				oursGoodWarehouse.add(warehouse.getId());
167
			}
168
			long available=0;
169
			long reserve=0;
170
			long total_warehouse_held=0;
171
			long heldForSource=0;
172
			long total_held=0;
173
			double nlc=0;
174
			double maxnlc=0;
175
			Item thriftItem;
176
			long sku = 0;
177
			for(Inventory inventoryItem:currentInventoryItemList){
178
				if(snapdealItemMap.containsKey(inventoryItem.getSellerSku())){
179
					sku = snapdealItemMap.get(inventoryItem.getSellerSku()).getItem_id();
180
				}
181
				else{
182
					continue;
183
				}
184
				if(aliveItemsMap.get(sku) != null){
185
					thriftItem = aliveItemsMap.get(sku);	
186
				}
187
				else{
188
					continue;
189
				}
190
				available=0;
191
				reserve=0;
192
				total_warehouse_held=0;
193
				heldForSource=0;
194
				total_held=0;
195
				nlc=0;
196
				List<Warehouse> vendor_warehouses=null;
197
				SnapdealItemForInventory item;
198
				if(availability.get(thriftItem.getId())!=null){ 
199
					ItemInventory iteminventory = availability.get(thriftItem.getId());
200
					Map<Long,Long> itemavailability = new HashMap<Long,Long>();
201
					itemavailability = iteminventory.getAvailability();
202
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
203
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating availability)"+thriftItem.getPreferredVendor());						
204
						vendor_warehouses = inventoryClient.getWarehouses(WarehouseType.THIRD_PARTY,InventoryType.GOOD , thriftItem.getPreferredVendor(), 0, 0);
205
						vendor_warehouses.addAll(ours_warehouses);
206
						for (Warehouse warehouse:vendor_warehouses){
207
							if(warehouse.getBillingWarehouseId()!=7){
208
								if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){
209
 
210
								}
211
								else{
212
									continue;
213
								}
214
							}
215
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
216
							ignoredItem.setItemId(thriftItem.getId());
217
							ignoredItem.setWarehouseId(warehouse.getId());
218
							if (itemavailability.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(ignoredItem)){
219
								try{
220
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
221
								}
222
								catch(TTransportException e){
223
									inventoryClient = inventoryServiceClient.getClient(); 
224
									nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
225
								}
226
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
227
 
228
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );
229
								if(nlc !=0 && (maxnlc >= nlc)){
230
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
231
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);
232
									available = available + itemavailability.get(warehouse.getId());
233
									total_held = total_held + total_warehouse_held; 
234
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
235
								}
236
								else if(maxnlc==0){
237
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 0);
238
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), warehouse.getId(), 7);
239
									available = available + itemavailability.get(warehouse.getId());
240
									total_held = total_held + total_warehouse_held;
241
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
242
								}
243
							}
244
						}
245
					}
246
					else{
247
						for (Map.Entry<Long,Long> entry :  itemavailability.entrySet()) {
248
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
249
								if(allWarehousesMap.get(entry.getKey()).getLogisticsLocation().equals(WarehouseLocation.Delhi) && allWarehousesMap.get(entry.getKey()).getWarehouseType().equals(WarehouseType.THIRD_PARTY) && allWarehousesMap.get(entry.getKey()).getVendor().getId()!=1){
250
 
251
								}
252
								else{
253
									continue;
254
								}
255
							}
256
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
257
							ignoredItem.setItemId(thriftItem.getId());
258
							ignoredItem.setWarehouseId(entry.getKey());
259
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
260
 
261
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
262
								try{
263
									maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
264
								}
265
								catch(TTransportException e){
266
									catalogClient = catalogServiceClient.getClient();  
267
									maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
268
								}
269
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );
270
								if(nlc !=0 && (maxnlc >= nlc)){
271
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
272
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);
273
									available =  available + entry.getValue();
274
									total_held = total_held + total_warehouse_held;
275
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
276
								}
277
								else if(maxnlc==0){
278
									total_warehouse_held = inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 0);
279
									heldForSource = heldForSource + total_warehouse_held - inventoryClient.getHoldInventoryDetailForItemForWarehouseIdExceptSource(thriftItem.getId(), entry.getKey(), 7);
280
									available = available + itemavailability.get(entry.getKey());
281
									total_held = total_held + total_warehouse_held;
282
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\tavailable:" + available);
283
								}
284
 
285
							}
286
						}
287
					}
288
					Map<Long,Long> itemreserve = new HashMap<Long,Long>();
289
					itemreserve = iteminventory.getReserved();
290
					if (thriftItem.isIsWarehousePreferenceSticky() && thriftItem.getPreferredVendor()!=0){
291
						//System.out.println("Item id "+thriftItem.getId()+".Found prefered vendor and warehouse is marked sticky (Calculating Reserve)"+thriftItem.getPreferredVendor());
292
						for (Warehouse warehouse:vendor_warehouses){
293
							if(warehouse.getBillingWarehouseId()!=7){
294
								if(warehouse.getLogisticsLocation().equals(WarehouseLocation.Delhi) && warehouse.getWarehouseType().equals(WarehouseType.THIRD_PARTY) && warehouse.getVendor().getId()!=1){
295
 
296
								}
297
								else{
298
									continue;
299
								}
300
							}
301
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
302
							ignoredItem.setItemId(thriftItem.getId());
303
							ignoredItem.setWarehouseId(warehouse.getId());
304
							if (itemreserve.get(warehouse.getId())!=null && !thirdpartywarehouseids.contains(warehouse.getId()) && !ignoreItems.contains(warehouse.getId())){
305
								nlc = inventoryClient.getNlcForWarehouse(warehouse.getId(),thriftItem.getId());
306
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
307
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + warehouse.getId() );
308
								if(nlc !=0 && (maxnlc >= nlc)){
309
									reserve = reserve + itemreserve.get(warehouse.getId());
310
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
311
								}
312
								else if(maxnlc==0){
313
									reserve = reserve + itemreserve.get(warehouse.getId());
314
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
315
								}
316
 
317
							}
318
						}
319
					}else{
320
						for (Map.Entry<Long,Long> entry : itemreserve.entrySet()) {
321
							if(allWarehousesMap.get(entry.getKey()).getBillingWarehouseId()!=7){
322
								if(allWarehousesMap.get(entry.getKey()).getLogisticsLocation().equals(WarehouseLocation.Delhi) && allWarehousesMap.get(entry.getKey()).getWarehouseType().equals(WarehouseType.THIRD_PARTY) && allWarehousesMap.get(entry.getKey()).getVendor().getId()!=1){
323
 
324
								}
325
								else{
326
									continue;
327
								}
328
							}
329
							in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems ignoredItem = new in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems();
330
							ignoredItem.setItemId(thriftItem.getId());
331
							ignoredItem.setWarehouseId(entry.getKey());
332
							if(!thirdpartywarehouseids.contains(entry.getKey()) && !ignoreItems.contains(ignoredItem)){
333
								nlc = inventoryClient.getNlcForWarehouse(entry.getKey(),thriftItem.getId());
334
								maxnlc = catalogClient.getSnapdealItem(thriftItem.getId()).getMaxNlc();
335
								//System.out.println("itemId:" + thriftItem.getId() + "\tmaxnlc: " + maxnlc + "\tnlc:" + nlc + "\twid:" + entry.getKey() );
336
								if(nlc !=0 && (maxnlc >= nlc)){
337
									reserve =  reserve + entry.getValue();
338
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
339
								}
340
								else if(maxnlc==0){
341
									reserve =  reserve + entry.getValue();
342
									//System.out.println("itemId:" + thriftItem.getId() + "\ttotal_held: " + total_held + "\theldForSource:" + heldForSource + "\treserve:" + reserve);
343
								}
344
 
345
							}
346
 
347
							else{
348
								//System.out.println("skipping inventory for warehouse id " + entry.getKey());
349
							}
350
						}
351
					}
352
					item= new SnapdealItemForInventory(thriftItem.getId(),available,reserve,heldForSource,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),total_held,thriftItem.isRisky(),thriftItem.getItemStatus());
353
					//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
354
				}
355
				else{
356
					item = new SnapdealItemForInventory(thriftItem.getId(),0,0,0,thriftItem.getHoldInventory(),thriftItem.getDefaultInventory(),0,thriftItem.isRisky(),thriftItem.getItemStatus());
357
					//System.out.println("itemId:" + thriftItem.getId() + "\tavailable: " + available + "\treserve" + reserve + "\theldForSource:" + heldForSource + "\twebsite_hold:" + thriftItem.getHoldInventory() + "\tdefault_inv:" +thriftItem.getDefaultInventory());
358
				}
359
 
360
				//System.out.println(" Item details are " + thriftItem.getId() +" " + available + " " + reserve + " " + thriftItem.getHoldInventory() + " "+ thriftItem.getDefaultInventory() + " " + thriftItem.isRisky());
361
				//System.out.println("+++++++++++++++++++++++");
362
				allItemsInventoryMap.put(thriftItem.getId(),item);
363
 
364
			}
365
 
366
		} catch (TException e) {
367
			e.printStackTrace();
368
		}
369
 
370
	}
371
	private static void fetchinventoryhistoryfromsnapdeal() throws UnsupportedEncodingException, TException{
372
		int i = 1;
373
		Gson gson = new Gson();
374
		inventoryhistoryItemMap = new HashMap<String,InventoryHistory>();
375
		boolean exitfetchinghistory = true;
376
		System.out.println("Fetching history inventory");
377
		HttpGet get;
378
		HttpResponse response = null;
379
		BufferedReader rd = null;
380
		while(exitfetchinghistory){
381
			System.out.println("Fetching inventory history page " +i);
382
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=history&_search=false&nd="+time+"&rows=30&page="+i+"&sidx=&sord=dsc");
383
 
384
			try {
385
				response = client.execute(get);
386
			} catch (ClientProtocolException e) {
387
				e.printStackTrace();
388
			} catch (IOException e) {
389
				e.printStackTrace();
390
			}
391
 
392
			try {
393
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
394
 
395
			} catch (IllegalStateException e) {
396
				e.printStackTrace();
397
			} catch (IOException e) {
398
				e.printStackTrace();
399
			}
400
			InventoryHistoryItems inventoryhistoryitems = (InventoryHistoryItems) gson.fromJson(rd, InventoryHistoryItems.class);
401
			if(inventoryhistoryitems.getRows().size()!=0){
402
				//System.out.println("Parsing page " + i);
403
				for(InventoryHistory inventoryhistory : inventoryhistoryitems.getRows()){
404
					System.out.println("Inventory History " + inventoryhistory.getSellerSku() +" "+ inventoryhistory.getSupc()+" "+inventoryhistory.getNewValue());
405
					if(inventoryhistory.getUpdateTime() > lastUpdatedInventoryTime){
406
						if(inventoryhistoryItemMap.containsKey(inventoryhistory.getSellerSku())){
407
							if(inventoryhistoryItemMap.get(inventoryhistory.getSellerSku()).getUpdateTime() < inventoryhistory.getUpdateTime()){  
408
								inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
409
							}
410
						}
411
						else{
412
							inventoryhistoryItemMap.put(inventoryhistory.getSellerSku(),inventoryhistory);
413
						}
414
					}
415
					else{
416
						exitfetchinghistory = false;
417
					}
418
				}
419
			}
420
			else{
421
				exitfetchinghistory = false;
422
			}
423
			i++;
424
		}
425
		if(inventoryhistoryItemMap.entrySet().size()==0){
426
			try {
427
				mailer.sendSSLMessage(sendTo,"Error : Last Inventory Sent still not updated"+ sdf.format(System.currentTimeMillis()),"This e-mail is sent when there is some time lag on inventory updation on snapdeal ", emailFromAddress, password, new ArrayList<File>());
428
			} catch (MessagingException e) {
429
				e.printStackTrace();
430
			}
431
		}
432
		InventoryClient inventoryServiceClient = new InventoryClient();
433
		in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
434
		List<SnapdealInventoryItem> snapdealInventoryItemHistoryList = inventoryClient.getSnapdealInventorySnapshot();
435
		if(snapdealInventoryItemHistoryList.size()>0){
436
			for(SnapdealInventoryItem snapdealInventoryItem:snapdealInventoryItemHistoryList){
437
				if(itemSnapdealMap.containsKey(snapdealInventoryItem.getItem_id())){
438
					PendingOrderInventoryHistory pendingOrdersInventoryHistory = new PendingOrderInventoryHistory();
439
					pendingOrdersInventoryHistory.setPendingOrders(snapdealInventoryItem.getPendingOrders());
440
					pendingOrdersInventoryHistory.setInventoryHistory(snapdealInventoryItem.getAvailability());
441
					pendingOrdersInventoryHistory.setLastUpdatedTimestamp(snapdealInventoryItem.getLastUpdatedOnSnapdeal());
442
					PendingOrdersInventoryHistoryMap.put(itemSnapdealMap.get(snapdealInventoryItem.getItem_id()).getSkuAtSnapdeal(), pendingOrdersInventoryHistory);
443
				}
444
			}
445
		}
446
		PendingOrderInventoryHistory  pendingOrdersInventoryHistory;
447
		for(Entry<String, InventoryHistory> inventoryHistoryItem :inventoryhistoryItemMap.entrySet()){
448
			if(PendingOrdersInventoryHistoryMap.containsKey(inventoryHistoryItem.getValue().getSellerSku())){
449
				pendingOrdersInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventoryHistoryItem.getValue().getSellerSku());
450
				pendingOrdersInventoryHistory.setInventoryHistory(Long.parseLong(inventoryHistoryItem.getValue().getNewValue()));
451
				pendingOrdersInventoryHistory.setLastUpdatedTimestamp(inventoryHistoryItem.getValue().getUpdateTime());
452
				PendingOrdersInventoryHistoryMap.put(inventoryHistoryItem.getValue().getSellerSku(),pendingOrdersInventoryHistory);
453
			}
454
			else{
455
				pendingOrdersInventoryHistory = new PendingOrderInventoryHistory();
456
				pendingOrdersInventoryHistory.setInventoryHistory(Long.parseLong(inventoryHistoryItem.getValue().getNewValue()));
457
				pendingOrdersInventoryHistory.setLastUpdatedTimestamp(inventoryHistoryItem.getValue().getUpdateTime());
458
				pendingOrdersInventoryHistory.setPendingOrders(0);
459
				PendingOrdersInventoryHistoryMap.put(inventoryHistoryItem.getValue().getSellerSku(),pendingOrdersInventoryHistory);
460
			}
461
		}
462
	}
463
 
464
	private static void fetchcurrentinventoryfromsnapdeal() throws UnsupportedEncodingException, TException{
465
		int i = 1;
466
		int items=0;
467
		Gson gson = new Gson();
468
		in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
469
		currentInventoryItemList = new ArrayList<Inventory>();
470
		HttpGet get;
471
		HttpResponse response = null;
472
		BufferedReader rd= null;
473
		System.out.println("Fetching current inventory ");
474
		while(true){
475
			//System.out.println("Fetching current inventory page " +i);
476
			get = new HttpGet("http://seller.snapdeal.com/inventory/search?gridType=normal&_search=false&nd="+time+"&rows="+30+"&page="+i+"&sidx=&sord=asc");
477
			try {
478
				response = client.execute(get);
479
			} catch (ClientProtocolException e) {
480
				e.printStackTrace();
481
			} catch (IOException e) {
482
				e.printStackTrace();
483
			}
484
			try {
485
				rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
486
			} catch (IllegalStateException e) {
487
				e.printStackTrace();
488
			} catch (IOException e) {
489
				e.printStackTrace();
490
			}
491
			InventoryItems inventoryitems = (InventoryItems) gson.fromJson(rd, InventoryItems.class);
492
			if(inventoryitems.getRows().size()!=0){
493
				for(Inventory inventory : inventoryitems.getRows()){
494
					if(snapdealItemMap.containsKey(inventory.getSellerSku())){
495
						currentInventoryItemList.add(inventory);
496
					}
497
 
498
					else{
499
						notMappedItems.append("<tr>" 
500
								+ "<td>" + inventory.getProductName() +"</td>"
501
								+"<td>" + inventory.getSellerSku() + "</td>"
502
								+"<td>" + inventory.getSupc() + "</td>"
503
								+"</tr>");
504
					}
505
					items++;
506
				}
507
			}
508
			else{
509
				System.out.println("Fetched  " + items);
510
				break;
511
			}
512
			i++;
513
		}
514
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
515
		SnapdealItemDetails snapdealitem = null;
516
		long sku = 0;
517
		long created_orders;
518
		long pending_orders;
519
		Map<Long, Long> itemIdCreatedOrdersMap = null;
520
		try {
521
			transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
522
			System.out.println("Last Updated on Time is  " + lastUpdatedInventoryTime);
523
			if(lastUpdatedInventoryTime > 0){
524
				itemIdCreatedOrdersMap = transactionClient.getOrdersCreatedAfterTimestampForSource(lastUpdatedInventoryTime, 7);
525
				System.out.println("Item id orders created map size "+ itemIdCreatedOrdersMap.entrySet().size());
526
			}
527
		} catch (TTransportException e1) {
528
			e1.printStackTrace();
529
		}
530
		try {
531
			catalogServiceClient = new CatalogClient().getClient();
532
		} catch (TTransportException e1) {
533
			e1.printStackTrace();
534
		}
535
		List<String> notMappedItems = new ArrayList<String>();
536
 
537
		for(Inventory inventory:currentInventoryItemList){
538
			created_orders = 0;
539
			pending_orders = 0;
540
			snapdealitem = snapdealItemMap.get(inventory.getSellerSku());
541
			if(snapdealitem==null){
542
				notMappedItems.add(inventory.getSellerSku()+" "+inventory.getProductName());
543
				System.out.println("Not Mapped  " + inventory.getSellerSku());
544
				continue;
545
			}
546
			sku = snapdealitem.getItem_id();
547
			if(sku!=0){
548
				if(itemIdCreatedOrdersMap!=null && itemIdCreatedOrdersMap.containsKey(sku)){
549
					created_orders = itemIdCreatedOrdersMap.get(sku);
550
				}
551
				System.out.println("Created orders for " + sku +" " + created_orders);
552
			}
553
			else{
554
				continue;
555
			}
556
			if(PendingOrdersInventoryHistoryMap.containsKey(inventory.getSellerSku())){
557
				System.out.println("Calculating Pending Orders for " + inventory.getSellerSku());
558
				System.out.println("Current Inventory "+inventory.getAvailableInventory());
559
				System.out.println("History Inventory "+PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getInventoryHistory());
560
				System.out.println("Created Orders "+created_orders);
561
				System.out.println("Old Pending Orders "+ PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders());
562
				if(PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getLastUpdatedTimestamp() > lastUpdatedInventoryTime){
563
					pending_orders = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders() + PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getInventoryHistory() - inventory.getAvailableInventory() - created_orders;
564
				}
565
				else{
566
					pending_orders = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku()).getPendingOrders() - created_orders;
567
				}
568
				if(pending_orders < 0){
569
					pending_orders = 0;
570
				}
571
				System.out.println("New Pending Orders "+pending_orders);
572
				PendingOrderInventoryHistory pendingOrderInventoryHistory = PendingOrdersInventoryHistoryMap.get(inventory.getSellerSku());
573
				pendingOrderInventoryHistory.setPendingOrders(pending_orders);
574
				PendingOrdersInventoryHistoryMap.put(inventory.getSellerSku(),pendingOrderInventoryHistory);
575
			}
576
			else{
577
				System.out.print("Could not calculate pending orders " + inventory.getSellerSku() +"\n");
578
				PendingOrderInventoryHistory pendingOrderInventoryHistory = new PendingOrderInventoryHistory();
579
				pendingOrderInventoryHistory.setPendingOrders(pending_orders);
580
				pendingOrderInventoryHistory.setInventoryHistory(inventory.getAvailableInventory());
581
				pendingOrderInventoryHistory.setLastUpdatedTimestamp(System.currentTimeMillis());
582
				PendingOrdersInventoryHistoryMap.put(inventory.getSellerSku(),pendingOrderInventoryHistory);
583
			}
584
			itemIdpendingOrdersMap.put(sku, pending_orders);
585
 
586
		}
587
		List<SnapdealInventoryItem> snapdealInventoryItemList = new ArrayList<SnapdealInventoryItem>();
588
		SnapdealInventoryItem snapdealInventoryItem;
589
		for(Entry<String, PendingOrderInventoryHistory> pendingOrderInventoryHistory:PendingOrdersInventoryHistoryMap.entrySet()){
590
			snapdealInventoryItem = new SnapdealInventoryItem();
591
			if(snapdealItemMap.containsKey(pendingOrderInventoryHistory.getKey())){
592
				snapdealInventoryItem.setItem_id(snapdealItemMap.get(pendingOrderInventoryHistory.getKey()).getItem_id());
593
				snapdealInventoryItem.setPendingOrders(pendingOrderInventoryHistory.getValue().getPendingOrders());
594
				snapdealInventoryItem.setAvailability(pendingOrderInventoryHistory.getValue().getInventoryHistory());
595
				snapdealInventoryItem.setLastUpdatedOnSnapdeal(pendingOrderInventoryHistory.getValue().getLastUpdatedTimestamp());
596
				snapdealInventoryItemList.add(snapdealInventoryItem);
597
			}
598
		}
599
		InventoryClient inventoryServiceClient = new InventoryClient();
600
		in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
601
		try {
602
			inventoryClient.addOrUpdateAllSnapdealInventory(snapdealInventoryItemList);
603
		} catch (TException e) {
604
			e.printStackTrace();
605
			inventoryClient = inventoryServiceClient.getClient();
606
			inventoryClient.addOrUpdateAllSnapdealInventory(snapdealInventoryItemList);
607
		}
608
 
609
	}
610
 
611
	public static void handleLogin() throws ClientProtocolException, IOException{
612
		HttpGet get = new HttpGet("http://selleraccounts.snapdeal.com/keymaker/login");
613
		HttpResponse response = null;
614
		try {
615
			response = client.execute(get);
616
		} catch (ClientProtocolException e) {
617
			e.printStackTrace();
618
		} catch (IOException e) {
619
			e.printStackTrace();
620
		}
621
		BufferedReader rd = null;
622
		try {
623
			rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
624
		} catch (IllegalStateException e1) {
625
			e1.printStackTrace();
626
		} catch (IOException e1) {
627
			e1.printStackTrace();
628
		}
629
		String line = "";
630
		StringBuffer sb = new StringBuffer();
631
		try {
632
			while ((line = rd.readLine()) != null) {
633
				sb.append(line);
634
				//System.out.println(line);
635
			}
636
		} catch (IOException e) {
637
			e.printStackTrace();
638
		}
639
		int i= sb.toString().indexOf("name=\"lt\" value=");
640
		char[] charArray = sb.toString().toCharArray();
641
		String lt = "";
642
		int j=0;
643
		for(j=i+16;j<=charArray.length;j++){
644
 
645
			if(charArray[j]==' '){
646
				break;
647
			}
648
		}
649
		lt = sb.substring(i+17,j-1);
650
		System.out.println("LT VALUE " + lt);
651
		i= sb.toString().indexOf("name=\"execution\" value=");
652
		charArray = sb.toString().toCharArray();
653
		String ex = "";
654
		j=0;
655
		for(j=i+24;j<=charArray.length;j++){
656
			if(charArray[j]==' '){
657
				break;
658
			}
659
		}
660
		ex = sb.substring(i+24,j-1);
661
		System.out.println("EXECUTION VALUE " + ex);
662
		HttpPost post = new HttpPost("http://selleraccounts.snapdeal.com/login?service=http%3A%2F%2Fseller.snapdeal.com%2Fj_spring_cas_security_check");
663
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
664
		//nameValuePairs.add(new BasicNameValuePair("username",
665
		//"khushal.bhatia@saholic.com"));
666
		nameValuePairs.add(new BasicNameValuePair("username",
667
		"saholic-snapdeal@saholic.com"));
668
		//nameValuePairs.add(new BasicNameValuePair("password",
669
		//"sonline"));
670
		nameValuePairs.add(new BasicNameValuePair("password",
671
		"bc452ce4"));
672
		nameValuePairs.add(new BasicNameValuePair("_eventId","submit"));
673
		nameValuePairs.add(new BasicNameValuePair("execution",ex));
674
		nameValuePairs.add(new BasicNameValuePair("lt",lt));
675
		nameValuePairs.add(new BasicNameValuePair("submit","LOGIN"));
676
		post.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));
677
		response = client.execute(post);
678
		rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
679
		line = "";
680
		while ((line = rd.readLine()) != null) {
681
			System.out.println(line);
682
		}
683
		get = new HttpGet("http://seller.snapdeal.com/inventory/");
684
		response = client.execute(get);
685
		rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
686
		while ((line = rd.readLine()) != null) {
687
			//System.out.println(line);
688
		}
689
	}
690
 
691
 
692
	@SuppressWarnings("deprecation")
693
	public static void main(String[] args) throws NumberFormatException, TException, ClientProtocolException, IOException, MessagingException {
694
 
695
		handleLogin();
696
		fetchinventoryhistoryfromsnapdeal();
697
		fetchcurrentinventoryfromsnapdeal();
698
		calculateinventory();
699
		in.shop2020.model.v1.catalog.CatalogService.Client catalogServiceClient = null;
700
		try {
701
			catalogServiceClient = new CatalogClient().getClient();
702
		} catch (TTransportException e) {
703
			e.printStackTrace();
704
		}
705
		FileInputStream fis = new FileInputStream("/root/code/trunk/SnapDealFeeds/SellerInventory.xls");
706
		Workbook hwb = new HSSFWorkbook(fis);
707
		Sheet sheet = hwb.getSheetAt(0);
708
		Row row;
709
		int iterator=1;
710
		long available,reserve,defaultinventory,holdinventory,heldorders=0,sent_inventory = 0,totalheld,heldforsource,allocable;
711
		SnapdealItemForInventory  inventoryItem;
712
		StringBuffer outOfStockItems =new StringBuffer();
713
		StringBuffer backInStockItems =new StringBuffer();
714
		StringBuffer inventoryChangeItems =new StringBuffer();
715
		StringBuffer heldMoreThanAvailable =new StringBuffer();
716
		long sku = 0;
717
		SnapdealItemDetails snapdealitem;
718
		for(Inventory inventory:currentInventoryItemList){
719
			//System.out.println(inventory.getSupc()+" "+inventory.getSellerSku()+ " " +inventory.getProductName()+" "+inventory.getAvailableInventory()+" "+inventory.isLive()+" "+itemIdpendingOrdersMap.get(Long.parseLong(inventory.getSellerSku())));
720
			if(snapdealItemMap.containsKey(inventory.getSellerSku())){
721
				snapdealitem = snapdealItemMap.get(inventory.getSellerSku()); 
722
				sku =  snapdealitem.getItem_id();
723
			}
724
			else{
725
				continue;
726
			}
727
			if(snapdealitem.getItem_id()!=0 && snapdealitem.isIsListedOnSnapdeal() && !snapdealitem.isSuppressInventoryFeed()){
728
				inventoryItem = allItemsInventoryMap.get(sku);
729
				if(inventoryItem==null){
730
					continue;
731
				}
732
				available = inventoryItem.getAvailability(); 
733
				reserve = inventoryItem.getReserve();
734
				defaultinventory = inventoryItem.getDefaultInventory();
735
				holdinventory = inventoryItem.getHoldInventory();
736
				totalheld = inventoryItem.getTotalHeldInventory();
737
				heldforsource = inventoryItem.getHeldForSource();
738
				if(itemIdpendingOrdersMap.containsKey(sku)){
739
					heldorders = itemIdpendingOrdersMap.get(sku);
740
					if(heldorders < 0){
741
						heldorders = 0;
742
					}
743
				}
744
				System.out.println("itemId: " + inventoryItem.getId() + "\trisky: " + inventoryItem.getRisky()+ 
745
						"\tavailable: " + available + "\treserve: " + reserve + "\theldForSource:" + heldforsource +
746
						"\twebsite_hold: " + holdinventory + "\ttotal_held: " +totalheld +"\tdefault_inv: "
747
						+ defaultinventory + "\theldorders " + heldorders);
748
				row =   sheet.getRow((short) iterator);
749
				if(!inventoryItem.getStatus().equals(status.PAUSED)){
750
					if(inventoryItem.getRisky()){
751
						if((available - reserve) < totalheld && totalheld!=0){
752
							sent_inventory = (long) Math.floor(((available - reserve)*heldforsource/totalheld)) - heldorders;
753
							heldMoreThanAvailable.append("<tr>" 
754
									+ "<td>" + inventory.getProductName() +"</td>"
755
									+"<td>" + sku + "</td>"
756
									+"<td>" + (available - reserve) +  "</td>"
757
									+"<td>" + totalheld + "</td>"
758
									+"</tr>");
759
						}
760
						else{
761
							allocable = available - reserve - totalheld - holdinventory;
762
							if(allocable < 0){
763
								allocable = 0;
764
							}
765
							sent_inventory = Math.round(allocable*2/3) + heldforsource - heldorders ;
766
						}
767
						if(sent_inventory < 0){
768
							sent_inventory = 0;
769
						}
770
					}
771
					else{
772
						allocable = available - reserve - totalheld;
773
						if(allocable < 0){
774
							allocable = 0;
775
						}
776
						if((allocable + heldforsource ) > defaultinventory){
777
							sent_inventory = Math.round(allocable*2/3) +  heldforsource - heldorders;
778
							//System.out.println("actual" + allocable + "\t2/3actual" + Math.round(allocable*2/3) +  "\theld for source" + heldforsource + "\theldorders" +  heldorders + "\tFinal Value is : " + (Math.round(allocable*2/3) +  heldforsource - heldorders));
779
							if(sent_inventory < 0){
780
								sent_inventory = 0;							
781
							}
782
						}
783
						else{
784
							if(defaultinventory > heldorders){
785
								sent_inventory = defaultinventory - heldorders;
786
							}
787
							else{
788
								sent_inventory = 0;
789
							}
790
						}
791
					}
792
				}
793
				else{
794
					sent_inventory = 0;
795
				}
796
				if(inventory.getAvailableInventory()!= sent_inventory){
797
 
798
					if(UPDATEUSINGPANEL){
799
						UpdateSDIUsingPanel.updateInventory(sent_inventory,inventory.getSupc());	
800
					}
801
					else{
802
						row.getCell((short) 0).setCellValue(inventory.getSupc());
803
						row.getCell((short) 1).setCellValue(inventory.getSellerSku());
804
						row.getCell((short) 2).setCellValue(inventory.getProductName());
805
						row.getCell((short) 3).setCellValue(inventory.getAvailableInventory());
806
						row.getCell((short) 4).setCellValue(sent_inventory);
807
						if(inventory.getAvailableInventory()!=0 && sent_inventory==0){
808
							outOfStockItems.append("<tr>" 
809
									+ "<td>" + inventory.getProductName() +"</td>"
810
									+"<td>" + sku + "</td>"
811
									+"<td>" + inventory.getAvailableInventory() + "</td>"
812
									+"<td>" + sent_inventory + "</td>"
813
									+"</tr>");
814
						}
815
						else if(inventory.getAvailableInventory()==0 && sent_inventory!=0){
816
							backInStockItems.append("<tr>" 
817
									+ "<td>" + inventory.getProductName() +"</td>"
818
									+"<td>" + sku + "</td>"
819
									+"<td>" + inventory.getAvailableInventory() + "</td>"
820
									+"<td>" + sent_inventory + "</td>"
821
									+"</tr>");
822
						}
823
						else{
824
							inventoryChangeItems.append("<tr>" 
825
									+ "<td>" + inventory.getProductName() +"</td>"
826
									+"<td>" + sku + "</td>"
827
									+"<td>" + inventory.getAvailableInventory() + "</td>"
828
									+"<td>" + sent_inventory + "</td>"
829
									+"</tr>");
830
						}
831
						if(inventory.isLive()){
832
							row.getCell((short) 5).setCellValue("Yes");
833
						}
834
						else{
835
							row.getCell((short) 5).setCellValue("No");
836
						}
837
					}
838
					iterator++;
839
				}
840
			}
841
			else{
842
				continue;
843
			}
844
		}
845
		if(!UPDATEUSINGPANEL){
846
			if(iterator > 1){
847
				FileOutputStream fileOut = null;
848
				fis.close();
849
				try {
850
					System.out.println("Before writing file ");
851
					fileOut = new FileOutputStream(SNAPDEAL_INVENTORY_SHEET);
852
				} catch (FileNotFoundException e) {
853
					e.printStackTrace();
854
				}
855
				try {
856
 
857
					hwb.write(fileOut);
858
				} catch (IOException e) {
859
					e.printStackTrace();
860
				}
861
				HttpPost post = new HttpPost("http://seller.snapdeal.com/inventory/upload");
862
				File file = new File(SNAPDEAL_INVENTORY_SHEET);
863
				MultipartEntity mpEntity = new MultipartEntity();
864
				ContentBody cbFile = new FileBody(file,"application/vnd.ms-excel");
865
				mpEntity.addPart("file", cbFile);
866
				post.setEntity(mpEntity);
867
				System.out.println("Before posting file");
868
				HttpResponse response = client.execute(post);
869
				BufferedReader rd = null;
870
				try {
871
					rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
872
				} catch (IllegalStateException e1) {
873
					e1.printStackTrace();
874
				} catch (IOException e1) {
875
					e1.printStackTrace();
876
				}
877
				String line = "";
878
				String feedresponse = null;
879
				try {
880
					while ((line = rd.readLine()) != null) {
881
						System.out.println(line);
882
						feedresponse = line;
883
					}
884
				} catch (IOException e) {
885
					e.printStackTrace();
886
				}
887
				System.out.println("posting response" + feedresponse);
888
			}	
889
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = null;
890
			long lastSentInventoryTime = System.currentTimeMillis();
891
			try {
892
				transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
893
				transactionClient.updateSourceDetailTimestamp(7, lastSentInventoryTime);
894
			} catch (Exception e) {
895
				try {
896
					transactionClient = new TransactionClient("support_transaction_service_server_host","transaction_service_server_port").getClient();
897
					transactionClient.updateSourceDetailTimestamp(7, lastSentInventoryTime);
898
				} catch (Exception ex) {
899
					ex.printStackTrace();
900
				}
901
			}
902
			String emailSubjectTxt;
903
			if(UPDATEUSINGPANEL){
904
				emailSubjectTxt = "Products back in stock on Snapdeal (Using Panel) "+sdf.format(lastSentInventoryTime);
905
			}
906
			else{
907
				emailSubjectTxt = "Products back in stock on Snapdeal "+sdf.format(lastSentInventoryTime);
908
			}
909
 
910
			String text;
911
			String tableHeader = "<tr>" 
912
				+ "<td>" + "Product Name" +"</td>"
913
				+"<td>" + "Item ID" + "</td>"
914
				+"<td>" + "Old Inventory" + "</td>"
915
				+"<td>" + "New Inventory" + "</td>"
916
				+"</tr>";
917
			if(backInStockItems.length() > 0){
918
				text = "<html><table border=\"1\" align=\"center\">"+tableHeader+backInStockItems.toString()+"</table></html>";
919
				try {
920
					mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
921
					//mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
922
				} catch (MessagingException e) {
923
					e.printStackTrace();
924
				}
925
			}
926
			if(UPDATEUSINGPANEL){
927
				emailSubjectTxt = "Products back in stock on Snapdeal (Using Panel) "+sdf.format(lastSentInventoryTime);
928
			}
929
			else{
930
				emailSubjectTxt = "Products out of stock on Snapdeal "+sdf.format(lastSentInventoryTime);
931
			}
932
			if(outOfStockItems.length() > 0){
933
				text = "<html><table border=\"1\" align=\"center\">"+tableHeader+outOfStockItems.toString()+"</table></html>";
934
				try {
935
					mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
936
					//mailer.sendSSLMessage(sendTo, emailSubjectTxt, text, emailFromAddress, password, new ArrayList<File>());
937
				} catch (MessagingException e) {
938
					e.printStackTrace();
939
				}
940
			}
941
			/*			List<File> files = new ArrayList<File>();
942
			files.add(new File(SNAPDEAL_INVENTORY_SHEET));
943
			try {
944
				mailer.sendSSLMessage(sendTo,"Inventory File",feedresponse, emailFromAddress, password, files);
945
			} catch (MessagingException e) {
946
				e.printStackTrace();
947
			}
948
			 */
949
			if(UPDATEUSINGPANEL){
950
				emailSubjectTxt = "Snapdeal Inventory Updates sent for " +(iterator-1)+" items "+ sdf.format(System.currentTimeMillis() +" "+"(Using Panel)");
951
			}
952
			else{
953
				emailSubjectTxt = "Snapdeal Inventory Updates sent for " +(iterator-1)+" items "+ sdf.format(System.currentTimeMillis());
954
			}
955
			if(inventoryChangeItems.length() > 0){
956
				text = "<html><table border=\"1\" align=\"center\">"+tableHeader+inventoryChangeItems.toString()+"</table></html>";
957
				try {
958
					mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
959
				} catch (MessagingException e) {
960
					e.printStackTrace();
961
				}
962
			}
963
 
964
			tableHeader = "<tr>" 
965
				+ "<td>" + "Product Name" +"</td>"
966
				+"<td>" + "Item ID" + "</td>"
967
				+"<td>" + "Available - Reserve" + "</td>"
968
				+"<td>" + "Total Held" + "</td>"
969
				+"</tr>";
970
 
971
			emailSubjectTxt = "Items with (Total Held > Net Available) Inventory "+ sdf.format(System.currentTimeMillis());
972
			if(heldMoreThanAvailable.length() > 0){
973
				text = "<html><table border=\"1\" align=\"center\">"+tableHeader+heldMoreThanAvailable.toString()+"</table></html>";
974
				try {
975
					mailer.sendSSLMessage(sendTo,emailSubjectTxt, emailFromAddress, password, text);
976
					//mailer.sendSSLMessage(sendTo,"Snapdeal Inventory Updates sent for " +(iterator-1)+" items "+ sdf.format(System.currentTimeMillis()),inventoryChangeItems.toString(), emailFromAddress, password, new ArrayList<File>());
977
				} catch (MessagingException e) {
978
					e.printStackTrace();
979
				}
980
			}
981
 
982
		}
983
		else{
984
			try {
985
				mailer.sendSSLMessage(sendTo,"No changes in Snapdeal inventory to update "+ sdf.format(System.currentTimeMillis()),"No change in Snapdeal Inventory to be updated ", emailFromAddress, password, new ArrayList<File>());
986
			} catch (MessagingException e) {
987
				e.printStackTrace();
988
			}
989
		}
990
		String tableHeader = "<tr>" 
991
			+ "<td>" + "Product Name" +"</td>"
992
			+"<td>" + "SKU at Snapdeal" + "</td>"
993
			+"<td>" + "SUPC" + "</td>"
994
			+"</tr>";
995
		String text;
996
		if(notMappedItems.length() >0){
997
			text = "<html><table border=\"1\" align=\"center\">"+tableHeader+notMappedItems.toString()+"</table></html>";
998
			mailer.sendSSLMessage(sendTo,"Please create Warehouse ID and Item ID mapping", emailFromAddress, password, text);
999
		}
1000
	}
1001
}