Subversion Repositories SmartDukaan

Rev

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