Subversion Repositories SmartDukaan

Rev

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