Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
5944 mandeep.dh 1
'''
2
Created on 27-Apr-2010
3
 
4
@author: ashish
5
'''
11173 vikram.rag 6
from elixir import *
5944 mandeep.dh 7
from shop2020.config.client.ConfigClient import ConfigClient
8
from shop2020.model.v1.inventory.impl import DataService
5957 mandeep.dh 9
from shop2020.model.v1.inventory.impl.Convertors import to_t_item_inventory, \
6821 amar.kumar 10
    to_t_warehouse, to_t_vendor_item_pricing, to_t_vendor, to_t_vendor_item_mapping, \
8282 kshitij.so 11
    to_t_item_stock_purchase_params, to_t_oos_status, to_t_amazon_inventory_snapshot, \
9761 amar.kumar 12
    to_t_amazon_fba_inventory_snapshot,to_t_snapdeal_inventory_snapshot,\
10050 vikram.rag 13
    to_t_hold_inventory_detail, to_t_flipkart_inventory_snapshot
5944 mandeep.dh 14
from shop2020.model.v1.inventory.impl.DataAcessors import add_warehouse, \
15
    update_inventory, retire_warehouse, get_item_availability_for_warehouse, \
16
    get_item_availability_for_location, get_all_warehouses_by_status, get_Warehouse, \
5957 mandeep.dh 17
    get_all_items_for_warehouse, close_session, add_vendor, \
18
    get_item_inventory_by_item_id, reserve_item_in_warehouse, \
19
    reduce_reservation_count, get_all_item_pricing, add_vendor_pricing, \
20
    get_item_pricing, get_all_vendors, get_item_mappings, add_vendor_item_mapping, \
21
    update_inventory_history, is_alive, add_inventory, add_bad_inventory, \
22
    mark_missed_inventory_updates_as_processed, update_vendor_string, \
23
    get_item_keys_to_be_processed, reset_availability, get_shipping_locations, \
5944 mandeep.dh 24
    initialize, get_inventory_snapshot, clear_item_availability_cache, \
5987 rajveer 25
    reset_availability_for_warehouse, get_vendor, get_pending_orders_inventory, \
6531 vikram.rag 26
    is_order_billable, get_our_warehouse_id_for_vendor, \
27
    get_item_availability_for_our_warehouses, get_monitored_warehouses_for_vendors, \
28
    get_ignored_warehouseids_and_itemids,insert_item_to_ignore_inventory_update_list, \
29
    delete_item_from_ignore_inventory_update_list,get_all_ignored_inventoryupdate_items_count, \
6821 amar.kumar 30
    get_ignored_inventoryupdate_itemids, update_item_stock_purchase_params, \
6857 amar.kumar 31
    get_item_stock_purchase_params, add_oos_status_for_item, \
7149 amar.kumar 32
    get_oos_statuses_for_x_days_for_item, get_non_zero_item_stock_purchase_params, \
7281 kshitij.so 33
    get_billable_inventory_and_pending_orders,get_warehouse_name,get_amazon_inventory_for_item,get_all_amazon_inventory, \
7972 amar.kumar 34
    add_or_update_amazon_inventory_for_item, update_reservation_for_order, \
8282 kshitij.so 35
    get_last_n_day_sale_for_item, add_or_update_amazon_fba_inventory, add_update_hold_inventory,\
9404 vikram.rag 36
    get_amazon_fba_inventory,get_all_amazon_fba_inventory, get_oursgood_warehouseids_for_location, \
37
    get_holdinventorydetail_forItem_forWarehouseId_exceptsource, get_snapdeal_inventory_for_item, \
9640 amar.kumar 38
    add_or_update_snapdeal_inventor_for_item, get_nlc_for_warehouse,get_snapdeal_inventory_snapshot, \
10050 vikram.rag 39
    get_held_inventory_map_for_item, get_hold_inventory_details, add_or_update_flipkart_inventory_snapshot, \
10126 amar.kumar 40
    get_flipkart_inventory_snapshot, get_flipkart_inventory_for_Item, get_oos_statuses_for_x_days, \
12363 kshitij.so 41
    get_all_vendor_item_pricing, get_state_master, update_snapdeal_stock_at_eod, update_flipkart_stock_at_eod, \
42
    get_wanlc_for_source, get_all_available_amazon_inventory
7972 amar.kumar 43
 
5944 mandeep.dh 44
from shop2020.model.v1.inventory.impl.DataService import Warehouse, \
45
    MissedInventoryUpdate, VendorItemMapping
5957 mandeep.dh 46
from shop2020.thriftpy.model.v1.inventory.ttypes import \
47
    InventoryServiceException, WarehouseType, InventoryType, \
48
    AvailableAndReservedStock
5944 mandeep.dh 49
from shop2020.utils.Utils import log_entry, to_java_date
50
 
51
class InventoryServiceHandler:
52
    '''
53
    classdocs
54
    '''
55
 
56
    def __init__(self, dbname='catalog', db_hostname='localhost'):
57
        '''
58
        Constructor
12963 amit.gupta 59
        '''
5944 mandeep.dh 60
        initialize(dbname, db_hostname)
61
        try:
62
            config_client = ConfigClient()
63
            self.latest_arrivals_limit = int(config_client.get_property("LATEST_ARRIVALS_LIMIT"));
64
            self.best_sellers_limit = int(config_client.get_property("BEST_SELLERS_LIMIT"))
65
        except:
66
            self.latest_arrivals_limit = 50
67
            self.best_sellers_limit = 50
68
 
69
    def addWarehouse(self, warehouse):
70
        """
71
        Parameters:
72
         - warehouse
73
        """
74
        log_entry(self, "addWarehouse called")
75
        try:
76
            return add_warehouse(warehouse)
77
        finally:
78
            close_session()
79
 
80
    def updateInventoryHistory(self, warehouse_id, timestamp, availability):
81
        """
82
        Stores the incremental warehouse updates of items.
83
 
84
        Parameters:
85
         - warehouse_id
86
         - timestamp
87
         - availability
88
        """
89
        try:
90
            return update_inventory_history(warehouse_id, timestamp, availability)
91
        finally:
92
            close_session()
93
 
94
    def updateInventory(self, warehouse_id, timestamp, availability):
95
        """
96
        Parameters:
97
         - warehouse_id
98
         - timestamp
99
         - availability
100
        """
101
        log_entry(self, "update Inventory called")
102
        try:
103
            return update_inventory(warehouse_id, timestamp, availability)
104
        finally:
105
            close_session()
106
 
107
    def addInventory(self, itemId, warehouseId, quantity):
108
        """
109
        Add the inventory to existing stock.
110
 
111
        Parameters:
112
         - itemId
113
         - warehouseId
114
         - quantity
115
        """
116
        log_entry(self, "add Inventory called")
117
        try:
118
            return add_inventory(itemId, warehouseId, quantity)
119
        finally:
120
            close_session()
121
 
122
    def retireWarehouse(self, warehouse_id):
123
        """
124
        Parameters:
125
         - warehouse_id
126
        """
127
        log_entry(self, "retire warehouse called")
128
        try:
129
            return retire_warehouse(warehouse_id)
130
        finally:
131
            close_session()
132
 
133
 
134
    def getItemInventoryByItemId(self, item_id):
135
        """
136
        Parameters:
137
         - item_id
138
        """
139
        log_entry(self, "item inventory requested")
140
        try:
141
            inventory = get_item_inventory_by_item_id(item_id)
142
            return to_t_item_inventory(inventory, item_id)
143
        finally:
144
            close_session()
145
 
5978 rajveer 146
    def getItemAvailabilityAtLocation(self, itemId, sourceId):
5944 mandeep.dh 147
        """
148
        Determines the warehouse that should be used to fulfil an order for the given item.
149
        It first checks all the warehouses which are in the logistics location given by the
150
        warehouse_loc parameter. If none of the warehouses there have any inventory, then the
151
        preferred warehouse for the item is used.
152
 
153
        Returns an ordered list of size 4 with following elements in the given order:
154
        1. Logistics location of the warehouse which was finally picked up to ship the order.
155
        2. Id of the warehouse which was finally picked up.
156
        3. Inventory size in the selected warehouse.
157
        4. Expected delay added by the category manager.
158
 
159
        Parameters:
160
         - itemId
5978 rajveer 161
         - sourceId
5944 mandeep.dh 162
        """
163
        try:
5978 rajveer 164
            return get_item_availability_for_location(itemId, sourceId)
5944 mandeep.dh 165
        finally:
166
            close_session()
167
 
168
    def getItemAvailibilityAtWarehouse(self, warehouse_id, item_id):
169
        """
170
        Parameters:
171
         - warehouse_id
172
         - item_id
173
        """
174
        log_entry(self, "item availability at warehouse requested")
175
        try:
176
            return get_item_availability_for_warehouse(warehouse_id, item_id)
177
        finally:
178
            close_session()
6484 amar.kumar 179
 
180
    def getItemAvailabilitiesAtOurWarehouses(self, item_ids):
181
        try:   
182
            return get_item_availability_for_our_warehouses(item_ids)
183
        finally:
184
            close_session()
5944 mandeep.dh 185
 
186
    def getItemInventoryHistory(self, id, item_id, warehouse_id, from_date, to_date):
187
        """
188
        Parameters:
189
         - id
190
         - item_id
191
         - warehouse_id
192
         - from_date
193
         - to_date
194
        """
195
        pass
196
 
197
    def getAllWarehouses(self, isActive):
198
        """
199
        Parameters:
200
        - isActive
201
        """
202
        try:
203
            if isActive:
204
                warehouses = get_all_warehouses_by_status(3)
205
            else:
206
                warehouses = get_all_warehouses_by_status(None)
207
 
208
            ret_warehouses = []
209
 
210
            for warehouse in warehouses:
211
                ret_warehouses.append(to_t_warehouse(warehouse))
212
            return ret_warehouses
213
        finally:
214
            close_session()
215
 
216
    def getWarehouse(self, warehouse_id):
217
        """
218
        Parameters:
219
         - warehouse_id
220
        """
221
        log_entry(self, "get warehouse call")
222
        try:
223
            warehouse = get_Warehouse(warehouse_id)
224
            if warehouse:
225
                return to_t_warehouse(warehouse)
226
            else:
227
                raise InventoryServiceException(101, "no such warehouse: " + str(warehouse_id))
228
        finally:
229
            close_session()
230
 
231
    def getAllItemsForWarehouse(self, warehouse_id):
232
        """
233
        Parameters:
234
         - warehouse_id
235
        """
236
        log_entry(self, "getting all items for warehouse")
237
        try:
238
            all_items = get_all_items_for_warehouse(warehouse_id)
239
            t_items = []
240
            for item in all_items:
241
                t_items.append(item.id)
242
            return t_items
243
        finally:
244
            close_session()
245
 
5966 rajveer 246
    def isOrderBillable(self, itemId, warehouseId, sourceId, orderId):
5944 mandeep.dh 247
        """
5966 rajveer 248
        Depending on reservation in the table, verify if we can bill this order or not.
249
 
250
        Parameters:
251
         - itemId
252
         - warehouseId
253
         - sourceId
254
         - orderId
255
        """
256
        try:
257
            return is_order_billable(itemId, warehouseId, sourceId, orderId)
258
        finally:
259
            close_session()
260
 
261
    def reserveItemInWarehouse(self, itemId, warehouseId, sourceId, orderId, createdTimestamp, promisedShippingTimestamp, quantity):
262
        """
5944 mandeep.dh 263
        Increases the reservation count for an item in a warehouse. Should always succeed normally.
264
 
265
        Parameters:
266
         - itemId
267
         - warehouseId
268
        """
269
        log_entry(self, "reserveItemInWarehouse called")
270
        try:
5966 rajveer 271
            return reserve_item_in_warehouse(itemId, warehouseId, sourceId, orderId, createdTimestamp, promisedShippingTimestamp, quantity)
5944 mandeep.dh 272
        finally:
273
            close_session()
7968 amar.kumar 274
 
5944 mandeep.dh 275
 
7968 amar.kumar 276
    def updateReservationForOrder(self, itemId, warehouseId, sourceId, orderId, createdTimestamp, promisedShippingTimestamp, quantity):
277
        """
278
        Increases the reservation count for an item in a warehouse. Should always succeed normally.
279
 
280
        Parameters:
281
         - itemId
282
         - warehouseId
283
        """
284
        log_entry(self, "reserveItemInWarehouse called")
285
        try:
286
            return update_reservation_for_order(itemId, warehouseId, sourceId, orderId, createdTimestamp, promisedShippingTimestamp, quantity)
287
        finally:
288
            close_session()
289
 
5966 rajveer 290
    def reduceReservationCount(self, itemId, warehouseId, sourceId, orderId, quantity):
5944 mandeep.dh 291
        """
292
        Decreases the reservation count for an item in a warehouse. Should always succeed normally.
293
 
294
        Parameters:
295
         - itemId
296
         - warehouseId
297
        """
298
        log_entry(self, "reduceReservationCount called")
299
        try:
5966 rajveer 300
            return reduce_reservation_count(itemId, warehouseId, sourceId, orderId, quantity)
5944 mandeep.dh 301
        finally:
302
            close_session()
303
 
304
    def getItemPricing(self, itemId, vendorId):
305
        """
306
        Returns the pricing information of an item associated with the vendor of the given warehouse.
307
        Raises an exception if either the item, vendor or the associated pricing information can't be found.
308
 
309
        Parameters:
310
         - itemId
311
         - warehouseId
312
        """
313
        try:
314
            return to_t_vendor_item_pricing(get_item_pricing(itemId, vendorId))
315
        finally:
316
            close_session()
317
 
318
 
319
    def getAllItemPricing(self, itemId):
320
        """
321
        Returns list of the pricing information of an item associated an item.
322
        Raises an exception if the item can't be found.
323
 
324
        Parameters:
325
         - itemId
326
        """
327
        try:
328
            return [to_t_vendor_item_pricing(vid) for vid in get_all_item_pricing(itemId)]
329
        finally:
330
            close_session()
10126 amar.kumar 331
 
332
    def getAllVendorItemPricing(self, itemId, vendorId):
333
        """
334
        Returns list of all stored pricing information for given itemId and vendorId.
335
 
336
        Parameters:
337
         - itemId
338
         - vendorId
339
        """
340
        try:
341
            return [to_t_vendor_item_pricing(vid) for vid in get_all_vendor_item_pricing(itemId, vendorId)]
342
        finally:
343
            close_session()
5944 mandeep.dh 344
 
345
    def addVendorItemPricing(self, vendorItemPricing):
346
        """
347
        Adds vendor prices corresponding to the item. If pricing already exists then updates the prices. 
348
        Raises an exception if either the item or vendor can't be found corresponding to their ids.
349
 
350
        Parameters:
351
         - vendorItemPricing
352
        """
353
        log_entry(self, "updateVendorItemPricing called")
354
        try:
355
            return add_vendor_pricing(vendorItemPricing)
356
        finally:
357
            close_session()
358
 
359
    def getVendor(self, vendorId):
360
        """
361
        Return a vendor for id
362
        """
363
        try:
364
            return to_t_vendor(get_vendor(vendorId))
365
        finally:
366
            close_session()
367
 
368
 
369
    def getAllVendors(self, ):
370
        """
371
        Return list of all vendors
372
        """
373
        try:
374
            return [to_t_vendor(v) for v in get_all_vendors()]
375
        finally:
376
            close_session()
377
 
378
    def addVendorItemMapping(self, key, vendorItemMapping):
379
        """
380
        Adds VendorItemMapping. Updates VendorItemMapping if exists corresponding to the item key.
381
 
382
        Parameters:
383
         - key
384
         - vendorItemMapping
385
        """
386
        log_entry(self, "addVendorItemMapping called")
387
        try:
388
            return add_vendor_item_mapping(key, vendorItemMapping)
389
        finally:
390
            close_session()
391
 
392
    def getVendorItemMappings(self, itemId):
393
        """
394
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
395
        Raises an exception if item not found corresponding to itemId
396
 
397
        Parameters:
398
         - itemId
399
        """
400
        try:
401
            item_mappings = get_item_mappings(itemId)
402
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
403
        finally:
404
            close_session()
405
 
406
    def isAlive(self, ):
407
        """
408
        For checking weather service is active alive or not. It also checks connectivity with database
409
        """
410
        try:
411
            return is_alive()
412
        finally:
413
            close_session()
414
 
415
    def closeSession(self, ):
416
        """
417
        For closing the open session in sqlalchemy
418
        """
419
        close_session()
420
 
421
    def addVendor(self, vendor):
422
        """
423
        add a new vendor
424
        """
425
        try:
426
            return add_vendor(vendor)
427
        finally:
428
            close_session()
429
 
430
    def getWarehouses(self, warehouseType, inventoryType, vendorId, billingWarehouseId, shippingWarehouseId):
431
        """
432
        This method returns all warehouses for a given warehosueType, inventoryType, vendor, billingWarehouse and shippingWarehouse.
433
        getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 3, 7, 7) would return ours warehouse with GOOD type inventory for vendor 1 for billing warehouse 7 and shipping warehouse 7
434
        getWarehouses(WarehouseType.OURS, InventoryType.GOOD, 3, 7, 7) would return ours warehouse with GOOD type inventory for vendor 3 for billing warehouse 7 and shipping warehouse 7
435
        getWarehouses(null, null, 3, 7, 7) would return all type warehouses with all type inventory for vendor 3 for billing warehouse 7 and shipping warehouse 7
436
        getWarehouses(null, null, 0, 0, 7) would return all type warehouses with all type inventory for all vendors for all billing warehouses at shipping warehouse 7
437
 
438
        Parameters:
439
         - warehouseType
440
         - inventoryType
441
         - vendorId
442
         - billingWarehouseId
443
         - shippingWarehouseId
444
        """
445
        try:
446
            query = Warehouse.query
447
            if warehouseType is not None:
448
                query = query.filter_by(warehouseType = WarehouseType._VALUES_TO_NAMES[warehouseType])
449
            if inventoryType is not None:
450
                query = query.filter_by(inventoryType = InventoryType._VALUES_TO_NAMES[inventoryType])
451
            if vendorId:
452
                query = query.filter_by(vendor_id = vendorId)
453
            if billingWarehouseId:
454
                query = query.filter_by(billingWarehouseId = billingWarehouseId)
455
            if shippingWarehouseId:
456
                query = query.filter_by(shippingWarehouseId = shippingWarehouseId)
457
 
458
            return [to_t_warehouse(w) for w in query.all()]
459
        finally:
460
            close_session()
461
 
462
    def getItemKeysToBeProcessed(self, warehouseId):
463
        """
464
        Returns the list of item keys which need to be processed for a given warehouse.
465
        This is currently used by Support application to send item keys whose inventory needs
466
        to be updated from PLB
467
 
468
        Parameters:
469
         - warehouseId
470
        """
471
        try:
472
            return get_item_keys_to_be_processed(warehouseId)
473
        finally:
474
            close_session()
475
 
476
    def markMissedInventoryUpdatesAsProcessed(self, itemKey, warehouseId):
477
        """
478
        Marks/Deletes missed inventory updates for a given key and warehouse.
479
        This generally happens when updates from PLB are applied on the currentinventorysnapshot for an item
480
 
481
        Parameters:
482
         - itemKey
483
         - warehouseId
484
        """
485
        try:
486
            mark_missed_inventory_updates_as_processed(itemKey, warehouseId)
487
        finally:
488
            close_session()
489
 
490
    def resetAvailability(self, itemKey, vendorId, quantity, warehouseId):
491
        """
492
        Resets availability of an item to the quantity mentioned in a warehouse.
493
 
494
        Parameters:
495
         - itemKey
496
         - vendorId
497
         - quantity
498
         - warehouseId
499
        """
500
        try:
501
            reset_availability(itemKey, vendorId, quantity, warehouseId)
502
        finally:
503
            close_session()
504
 
505
    def resetAvailabilityForWarehouse(self, warehouseId):
506
        """
507
        Resets availability of a warehouse to zero.
508
 
509
        Parameters:
510
         - warehouseId
511
        """
512
        try:
513
            reset_availability_for_warehouse(warehouseId)
514
        finally:
515
            close_session()
516
 
517
    def getIgnoredItemKeys(self, ):
518
        """
519
        Returns all the item key mappings that have been ignored until date. Value of map has the warehouse id
520
        and the timestamp from where alert was raised.
521
        """
522
        try:
523
            itemKeysMap = {}
524
            for key in MissedInventoryUpdate.query.filter_by(isIgnored = 1).all():
525
                itemKeysMap[key.itemKey] = { key.warehouseId : to_java_date(key.timestamp) }
526
 
527
            return itemKeysMap
528
        finally:
529
            close_session()
530
 
531
    def addBadInventory(self, itemId, warehouseId, quantity):
532
        """
533
        Add the BAD type inventory to existing stock.
534
 
535
        Parameters:
536
         - itemId
537
         - warehouseId
538
         - quantity
539
        """
540
        try:
541
            add_bad_inventory(itemId, warehouseId, quantity)
542
        finally:
543
            close_session()
544
 
545
    def getShippingLocations(self, ):
546
        """
547
        Returns all shipping locations
548
        """
549
        try:
550
            return [to_t_warehouse(w) for w in get_shipping_locations()]
551
        finally:
552
            close_session()
553
 
554
    def getAllVendorItemMappings(self, ):
555
        """
556
        Fetches all the vendor item mappings present.
557
        """
558
        try:
559
            return [to_t_vendor_item_mapping(m) for m in VendorItemMapping.query.all()]
560
        finally:
561
            close_session()
562
 
563
    def getInventorySnapshot(self, warehouseId):
564
        """
565
        Gets items' inventory for a warehouse
566
        If warehouse is passed as zero, items' inventory across all warehouses is sent
567
 
568
        Parameters:
569
         - warehouseId
570
        """
571
        try:
572
            resultMap = {}
573
            itemInventoryMap = get_inventory_snapshot(warehouseId)
574
            for key, value in itemInventoryMap.items():
575
                resultMap[key] = to_t_item_inventory(value, key)
576
 
577
            return resultMap
578
        finally:
579
            close_session()
580
 
581
    def clearItemAvailabilityCache(self, ):
582
        """
583
        Clear item availability cache.
584
        """
585
        try:
13514 amit.gupta 586
            f = open('/catalog-dumps/catalog.items')
587
            itemids = f.readline()
588
            f.close()
589
            if len(itemids) == 0 or "NULL" in itemids:
590
                return
591
            else:
592
                itemids = [int(itemid) for itemid in itemids.split(",")]
593
                clear_item_availability_cache(itemids)
5944 mandeep.dh 594
        finally:
595
            close_session()
5957 mandeep.dh 596
 
6096 amit.gupta 597
    def clearItemAvailabilityCacheForItem(self, item_id):
598
        """
599
        Clear item availability cache.
600
        """
601
        try:
602
            clear_item_availability_cache(item_id)
603
        finally:
604
            close_session()
605
 
5957 mandeep.dh 606
    def getPendingOrdersInventory(self, vendorId):
607
        """
608
        Returns a list of inventory stock for items for which there are pending orders for the given vendor.
609
        """
610
        try:
611
            pending_items_inventory = get_pending_orders_inventory(vendorId)
612
            return [AvailableAndReservedStock(itemId = i[0], available=i[1], reserved=i[2], minimumStock=0) for i in pending_items_inventory]
613
        finally:
614
            close_session()
615
 
5944 mandeep.dh 616
    def updateVendorString(self, warehouseId, vendorString):
617
        """
618
        Parameters:
619
         - warehouseId
620
         - vendorString
621
        """
622
        try:
623
            update_vendor_string(warehouseId, vendorString)
624
        finally:
625
            close_session()
7718 amar.kumar 626
    def getOurWarehouseIdForVendor(self, vendorId, billingWarehouseId):
6467 amar.kumar 627
        """
628
        Returns warehouseId for our warehouse for a vendor
629
        """    
630
        try:
7718 amar.kumar 631
            return get_our_warehouse_id_for_vendor(vendorId, billingWarehouseId)
6467 amar.kumar 632
        finally:
6531 vikram.rag 633
            close_session()
634
    def getMonitoredWarehouseForVendors(self, vendorIds):
635
        """
636
        Returns monitored warehouse ids for vendors
637
        """    
638
        try:
639
            return get_monitored_warehouses_for_vendors(vendorIds)
640
        finally:
641
            close_session()
642
    def getIgnoredWarehouseidsAndItemids(self):
643
        """
644
        Returns list of itemid and warehouseId for ignored inventory update
645
        """    
646
        try:
647
            return get_ignored_warehouseids_and_itemids()
648
        finally:
649
            close_session()
650
 
651
    def insertItemtoIgnoreInventoryUpdatelist(self,item_id,warehouse_id):
652
        """
653
        Returns list of itemid and warehouseId for ignored inventory update
654
        """
655
        try:
6532 amit.gupta 656
            return insert_item_to_ignore_inventory_update_list(item_id,warehouse_id)
6531 vikram.rag 657
        finally:
658
            close_session()     
659
    def deleteItemFromIgnoredInventoryUpdateList(self,item_id,warehouse_id):
660
        """
661
        Deletes warehouse and item entry from inventory update ignore list
662
        """
663
        try:
664
            return delete_item_from_ignore_inventory_update_list(item_id,warehouse_id)
665
        finally:
666
            close_session()
667
    def getAllIgnoredInventoryupdateItemsCount(self):
668
        """
669
        Returns all ignored inventory update item count
670
        """
6833 amar.kumar 671
        try:
672
            return get_all_ignored_inventoryupdate_items_count()
673
        finally:
674
            close_session()
6531 vikram.rag 675
 
676
 
677
    def getIgnoredInventoryUpdateItemids(self,offset,limit):
678
        """
679
        Returns all ignored inventory update items
680
        """
6833 amar.kumar 681
        try:
682
            return get_ignored_inventoryupdate_itemids(offset,limit)
683
        finally:
684
            close_session()
6821 amar.kumar 685
    def updateItemStockPurchaseParams(self, item_id, numOfDaysStock, minStockLevel):
686
        """
687
        Update/Add parameters required for heuristic purchase of Items 
6833 amar.kumar 688
        """ 
689
        try:               
690
            update_item_stock_purchase_params(item_id, numOfDaysStock, minStockLevel)
691
        finally:
692
            close_session()
693
 
6821 amar.kumar 694
    def getItemStockPurchaseParams(self, item_id):
695
        """
696
        Get parameters required for heuristic purchase of Items 
6833 amar.kumar 697
        """ 
698
        try:               
699
            return to_t_item_stock_purchase_params(get_item_stock_purchase_params(item_id))
700
        finally:
701
            close_session()
702
 
6821 amar.kumar 703
    def addOosStatusForItem(self, oosStatusMap, date):
704
        """
705
        Add OOS status for Item 
706
        """
6833 amar.kumar 707
        try:
708
            add_oos_status_for_item(oosStatusMap, date)
709
        finally:
710
            close_session()
711
 
9665 rajveer 712
    def getOosStatusesForXDaysForItem(self, itemId, sourceId, days):
6832 amar.kumar 713
        """
9665 rajveer 714
        Get OOSStatus Objects for "days" number of days and sourceId for source. If sourceId is zero return for all sources.
6832 amar.kumar 715
        """
6833 amar.kumar 716
        try:
9665 rajveer 717
            return [to_t_oos_status(oos) for oos in get_oos_statuses_for_x_days_for_item(itemId, sourceId, days)]
6833 amar.kumar 718
        finally:
6857 amar.kumar 719
            close_session()
720
 
10126 amar.kumar 721
    def getOosStatusesForXDays(self, sourceId, days):
722
        """
723
        Get OOSStatus Objects for "days" number of days and sourceId for source. If sourceId is zero return for all sources.
724
        """
725
        try:
726
            return [to_t_oos_status(oos) for oos in get_oos_statuses_for_x_days(sourceId, days)]
727
        finally:
728
            close_session()
729
 
6857 amar.kumar 730
    def getNonZeroItemStockPurchaseParams(self):
731
        """
732
        Get All ItemStockPurchaseParam objects where either minStockLevel or minNumOfDaysOfStock is zero 
733
        """
734
        try:
735
            return [to_t_item_stock_purchase_params(ispp) for ispp in get_non_zero_item_stock_purchase_params()]
736
        finally:
7149 amar.kumar 737
            close_session()
7972 amar.kumar 738
 
739
    def getLastNdaySaleForItem(self, itemId, numberOfDays):
740
        """
741
        Get Sale for Last N day for an Item
742
        """
743
        try:
744
            return get_last_n_day_sale_for_item(itemId, numberOfDays)
745
        finally:
746
            close_session()
7149 amar.kumar 747
    def getBillableInventoryAndPendingOrders(self):
748
        """
749
        Returns a list of inventory stock for items for which there are pending orders or have 
750
        billable inventory.
751
        """
752
        try:
753
            items_inventory = get_billable_inventory_and_pending_orders()
754
            return [AvailableAndReservedStock(itemId = i[0], available=i[1], reserved=i[2], minimumStock=0) for i in items_inventory]
755
        finally:
7281 kshitij.so 756
            close_session()
757
 
758
    def getWarehouseName(self,warehouseId):
759
        try:
760
            name = get_warehouse_name(warehouseId)
761
            return name
762
        finally:
763
            close_session()
764
 
765
    def getAmazonInventoryForItem(self, amazonItemId):
7316 kshitij.so 766
        result = []
7281 kshitij.so 767
        try:
768
            result = get_amazon_inventory_for_item(amazonItemId)
769
            if result is not None:
770
                result = to_t_amazon_inventory_snapshot(result)
771
        except:
7316 kshitij.so 772
            return result
7281 kshitij.so 773
        finally:
774
            close_session()
775
            return result
776
 
777
    def getAllAmazonInventory(self):
778
        try:
779
            amazoninventory = []
780
            all_inventory = get_all_amazon_inventory()
781
            for inventory in all_inventory:
782
                amazoninventory.append(to_t_amazon_inventory_snapshot((inventory)))
783
            return amazoninventory                                           
784
        finally:
785
            close_session() 
786
 
10450 vikram.rag 787
    def addOrUpdateAmazonInventoryForItem(self, amazoninventorysnapshot,time):
7281 kshitij.so 788
        try:
10450 vikram.rag 789
            add_or_update_amazon_inventory_for_item(amazoninventorysnapshot,time)
7281 kshitij.so 790
        finally:
8182 amar.kumar 791
            close_session()
792
 
8282 kshitij.so 793
    def addOrUpdateAmazonFbaInventory(self,amazonfbainventorysnapshot):
794
        try:
11173 vikram.rag 795
            add_or_update_amazon_fba_inventory(amazonfbainventorysnapshot)
796
            session.commit()
797
            return True 
8282 kshitij.so 798
        finally:
799
            close_session()
800
 
8182 amar.kumar 801
    def addUpdateHoldInventory(self, itemId, warehouseId, holdQuantity, source):
802
        try:
803
            add_update_hold_inventory(itemId, warehouseId, holdQuantity, source)
804
        finally:
8282 kshitij.so 805
            close_session()
806
 
807
    def getAmazonFbaItemInventory(self,itemId):
11173 vikram.rag 808
        fba_inventory = []
8282 kshitij.so 809
        try:
11173 vikram.rag 810
            for inventory in get_amazon_fba_inventory(itemId):
811
                fba_inventory.append(to_t_amazon_fba_inventory_snapshot(inventory))
812
            return fba_inventory     
8282 kshitij.so 813
        finally:
814
            close_session()            
815
 
8363 vikram.rag 816
    def getAllAmazonFbaItemInventory(self):
817
        all_fba_inventory = []
8282 kshitij.so 818
        try:
8363 vikram.rag 819
            for inventory in get_all_amazon_fba_inventory():
820
                all_fba_inventory.append(to_t_amazon_fba_inventory_snapshot(inventory))
821
            return all_fba_inventory     
8282 kshitij.so 822
        except:
823
            return None 
824
        finally:
8363 vikram.rag 825
            close_session()
826
 
827
    def getOursGoodWarehouseIdsForLocation(self,state_id):
828
        ids=[]
8572 vikram.rag 829
        try:
830
            for id in get_oursgood_warehouseids_for_location(state_id):
831
                ids.append(id[0])
832
            return ids
833
        except:
834
            return None
835
        finally:
8954 vikram.rag 836
            close_session()
837
 
838
    def getHoldInventoryDetailForItemForWarehouseIdExceptSource(self,item_id,warehouse_id,source):
839
        try:
840
            return get_holdinventorydetail_forItem_forWarehouseId_exceptsource(item_id,warehouse_id,source)
841
        finally:
9404 vikram.rag 842
            close_session()
843
 
844
    def getSnapdealInventoryForItem(self,item_id):
845
        try:
846
            return to_t_snapdeal_inventory_snapshot(get_snapdeal_inventory_for_item(item_id)) 
847
        finally:
848
            close_session()            
849
    def addOrUpdateSnapdealInventoryForItem(self,snapdealinventoryitem):
850
        try:
851
            add_or_update_snapdeal_inventor_for_item(snapdealinventoryitem)
852
        finally:
853
            close_session()
854
 
855
    def getNlcForWarehouse(self,warehouse_id,item_id):
856
        try:
857
            return get_nlc_for_warehouse(warehouse_id,item_id)
858
        finally:
9456 vikram.rag 859
            close_session()
860
 
9495 vikram.rag 861
    def addOrUpdateAllAmazonFbaInventory(self,allamazonfbainventorysnapshot):
11173 vikram.rag 862
        print 'inside handler'
9456 vikram.rag 863
        try:
9495 vikram.rag 864
            for amazonfbainventorysnapshot in allamazonfbainventorysnapshot:
11173 vikram.rag 865
                print amazonfbainventorysnapshot 
9495 vikram.rag 866
                add_or_update_amazon_fba_inventory(amazonfbainventorysnapshot)
11173 vikram.rag 867
            session.commit()    
9456 vikram.rag 868
        finally:
9482 vikram.rag 869
            close_session()
9495 vikram.rag 870
 
871
    def addOrUpdateAllSnapdealInventory(self,allsnapdealinventorysnapshot):
872
        try:
873
            for snapdealinventorysnapshot in allsnapdealinventorysnapshot:
874
                add_or_update_snapdeal_inventor_for_item(snapdealinventorysnapshot)
875
        finally:
876
            close_session()
9456 vikram.rag 877
 
9495 vikram.rag 878
    def getSnapdealInventorySnapshot(self):
9503 vikram.rag 879
        allsnapdealinventorysnapshot = []
880
        try:     
9504 vikram.rag 881
            for inventorysnapshot in get_snapdeal_inventory_snapshot():
882
                allsnapdealinventorysnapshot.append(to_t_snapdeal_inventory_snapshot(inventorysnapshot))  
883
            return allsnapdealinventorysnapshot
9495 vikram.rag 884
        finally:            
885
            close_session()
9640 amar.kumar 886
 
887
    def getHeldInventoryMapForItem(self, itemId, warehouseId):
888
        try:
889
            return get_held_inventory_map_for_item(itemId, warehouseId)
890
        finally:
891
            close_session()
9761 amar.kumar 892
 
893
    def getHoldInventoryDetails(self, itemId, warehouseId, source):
894
        try:
895
            return [to_t_hold_inventory_detail(holdInventoryDetail) for holdInventoryDetail in get_hold_inventory_details(itemId, warehouseId, source)]
896
        finally:
897
            close_session()
10050 vikram.rag 898
 
10450 vikram.rag 899
    def addOrUpdateFlipkartInventorySnapshot(self,flipkartInventorySnapshot,time):
10050 vikram.rag 900
        try:
10450 vikram.rag 901
            add_or_update_flipkart_inventory_snapshot(flipkartInventorySnapshot,time)
10050 vikram.rag 902
        finally:
903
            close_session()    
904
 
905
 
906
    def getFlipkartInventorySnapshot(self):
907
        try:
908
            return [to_t_flipkart_inventory_snapshot(snapshot) for snapshot in get_flipkart_inventory_snapshot()]
909
        finally:
910
            close_session()
10097 kshitij.so 911
 
912
    def getFlipkartlInventoryForItem(self,item_id):
913
        try:
914
            return to_t_flipkart_inventory_snapshot(get_flipkart_inventory_for_Item(item_id))
915
        finally:
916
            close_session()
10485 vikram.rag 917
 
918
    def getStateMaster(self):
919
        try:
920
            return get_state_master()
921
        finally:
10544 vikram.rag 922
            close_session()
923
 
924
    def updateSnapdealStockAtEOD(self,allsnapdealstock):
925
        try:
926
            update_snapdeal_stock_at_eod(allsnapdealstock)
927
        finally:
928
            close_session()
929
 
930
    def updateFlipkartStockAtEOD(self,allflipkartstock):
931
        try:
932
            update_flipkart_stock_at_eod(allflipkartstock)
933
        finally:
934
            close_session()
12363 kshitij.so 935
 
936
    def getWanNlcForSource(self,item_id,source):
937
        try:
938
            return get_wanlc_for_source(item_id,source)
939
        finally:
940
            close_session()
941
 
942
    def getAllAvailableAmazonFbaItemInventory(self):
943
        try:
944
            amazoninventory = []
945
            all_inventory = get_all_available_amazon_inventory()
946
            for inventory in all_inventory:
12376 kshitij.so 947
                amazoninventory.append(to_t_amazon_fba_inventory_snapshot((inventory)))
12363 kshitij.so 948
            return amazoninventory                                           
949
        finally:
950
            close_session() 
951
 
10544 vikram.rag 952
 
953
 
9495 vikram.rag 954