Subversion Repositories SmartDukaan

Rev

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