Subversion Repositories SmartDukaan

Rev

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