Subversion Repositories SmartDukaan

Rev

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