Subversion Repositories SmartDukaan

Rev

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