Subversion Repositories SmartDukaan

Rev

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