Subversion Repositories SmartDukaan

Rev

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