Subversion Repositories SmartDukaan

Rev

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

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