Subversion Repositories SmartDukaan

Rev

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