Subversion Repositories SmartDukaan

Rev

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