Subversion Repositories SmartDukaan

Rev

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