Subversion Repositories SmartDukaan

Rev

Rev 13514 | Rev 17990 | 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
12963 amit.gupta 59
        '''
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:
13514 amit.gupta 586
            f = open('/catalog-dumps/catalog.items')
587
            itemids = f.readline()
588
            f.close()
589
            if len(itemids) == 0 or "NULL" in itemids:
16214 amit.gupta 590
                pass
13514 amit.gupta 591
            else:
592
                itemids = [int(itemid) for itemid in itemids.split(",")]
593
                clear_item_availability_cache(itemids)
16214 amit.gupta 594
        except:
595
            print "Could not read file"
5944 mandeep.dh 596
        finally:
597
            close_session()
16214 amit.gupta 598
        return
5957 mandeep.dh 599
 
6096 amit.gupta 600
    def clearItemAvailabilityCacheForItem(self, item_id):
601
        """
602
        Clear item availability cache.
603
        """
604
        try:
605
            clear_item_availability_cache(item_id)
606
        finally:
607
            close_session()
608
 
5957 mandeep.dh 609
    def getPendingOrdersInventory(self, vendorId):
610
        """
611
        Returns a list of inventory stock for items for which there are pending orders for the given vendor.
612
        """
613
        try:
614
            pending_items_inventory = get_pending_orders_inventory(vendorId)
615
            return [AvailableAndReservedStock(itemId = i[0], available=i[1], reserved=i[2], minimumStock=0) for i in pending_items_inventory]
616
        finally:
617
            close_session()
618
 
5944 mandeep.dh 619
    def updateVendorString(self, warehouseId, vendorString):
620
        """
621
        Parameters:
622
         - warehouseId
623
         - vendorString
624
        """
625
        try:
626
            update_vendor_string(warehouseId, vendorString)
627
        finally:
628
            close_session()
7718 amar.kumar 629
    def getOurWarehouseIdForVendor(self, vendorId, billingWarehouseId):
6467 amar.kumar 630
        """
631
        Returns warehouseId for our warehouse for a vendor
632
        """    
633
        try:
7718 amar.kumar 634
            return get_our_warehouse_id_for_vendor(vendorId, billingWarehouseId)
6467 amar.kumar 635
        finally:
6531 vikram.rag 636
            close_session()
637
    def getMonitoredWarehouseForVendors(self, vendorIds):
638
        """
639
        Returns monitored warehouse ids for vendors
640
        """    
641
        try:
642
            return get_monitored_warehouses_for_vendors(vendorIds)
643
        finally:
644
            close_session()
645
    def getIgnoredWarehouseidsAndItemids(self):
646
        """
647
        Returns list of itemid and warehouseId for ignored inventory update
648
        """    
649
        try:
650
            return get_ignored_warehouseids_and_itemids()
651
        finally:
652
            close_session()
653
 
654
    def insertItemtoIgnoreInventoryUpdatelist(self,item_id,warehouse_id):
655
        """
656
        Returns list of itemid and warehouseId for ignored inventory update
657
        """
658
        try:
6532 amit.gupta 659
            return insert_item_to_ignore_inventory_update_list(item_id,warehouse_id)
6531 vikram.rag 660
        finally:
661
            close_session()     
662
    def deleteItemFromIgnoredInventoryUpdateList(self,item_id,warehouse_id):
663
        """
664
        Deletes warehouse and item entry from inventory update ignore list
665
        """
666
        try:
667
            return delete_item_from_ignore_inventory_update_list(item_id,warehouse_id)
668
        finally:
669
            close_session()
670
    def getAllIgnoredInventoryupdateItemsCount(self):
671
        """
672
        Returns all ignored inventory update item count
673
        """
6833 amar.kumar 674
        try:
675
            return get_all_ignored_inventoryupdate_items_count()
676
        finally:
677
            close_session()
6531 vikram.rag 678
 
679
 
680
    def getIgnoredInventoryUpdateItemids(self,offset,limit):
681
        """
682
        Returns all ignored inventory update items
683
        """
6833 amar.kumar 684
        try:
685
            return get_ignored_inventoryupdate_itemids(offset,limit)
686
        finally:
687
            close_session()
6821 amar.kumar 688
    def updateItemStockPurchaseParams(self, item_id, numOfDaysStock, minStockLevel):
689
        """
690
        Update/Add parameters required for heuristic purchase of Items 
6833 amar.kumar 691
        """ 
692
        try:               
693
            update_item_stock_purchase_params(item_id, numOfDaysStock, minStockLevel)
694
        finally:
695
            close_session()
696
 
6821 amar.kumar 697
    def getItemStockPurchaseParams(self, item_id):
698
        """
699
        Get parameters required for heuristic purchase of Items 
6833 amar.kumar 700
        """ 
701
        try:               
702
            return to_t_item_stock_purchase_params(get_item_stock_purchase_params(item_id))
703
        finally:
704
            close_session()
705
 
6821 amar.kumar 706
    def addOosStatusForItem(self, oosStatusMap, date):
707
        """
708
        Add OOS status for Item 
709
        """
6833 amar.kumar 710
        try:
711
            add_oos_status_for_item(oosStatusMap, date)
712
        finally:
713
            close_session()
714
 
9665 rajveer 715
    def getOosStatusesForXDaysForItem(self, itemId, sourceId, days):
6832 amar.kumar 716
        """
9665 rajveer 717
        Get OOSStatus Objects for "days" number of days and sourceId for source. If sourceId is zero return for all sources.
6832 amar.kumar 718
        """
6833 amar.kumar 719
        try:
9665 rajveer 720
            return [to_t_oos_status(oos) for oos in get_oos_statuses_for_x_days_for_item(itemId, sourceId, days)]
6833 amar.kumar 721
        finally:
6857 amar.kumar 722
            close_session()
723
 
10126 amar.kumar 724
    def getOosStatusesForXDays(self, sourceId, days):
725
        """
726
        Get OOSStatus Objects for "days" number of days and sourceId for source. If sourceId is zero return for all sources.
727
        """
728
        try:
729
            return [to_t_oos_status(oos) for oos in get_oos_statuses_for_x_days(sourceId, days)]
730
        finally:
731
            close_session()
732
 
6857 amar.kumar 733
    def getNonZeroItemStockPurchaseParams(self):
734
        """
735
        Get All ItemStockPurchaseParam objects where either minStockLevel or minNumOfDaysOfStock is zero 
736
        """
737
        try:
738
            return [to_t_item_stock_purchase_params(ispp) for ispp in get_non_zero_item_stock_purchase_params()]
739
        finally:
7149 amar.kumar 740
            close_session()
7972 amar.kumar 741
 
742
    def getLastNdaySaleForItem(self, itemId, numberOfDays):
743
        """
744
        Get Sale for Last N day for an Item
745
        """
746
        try:
747
            return get_last_n_day_sale_for_item(itemId, numberOfDays)
748
        finally:
749
            close_session()
7149 amar.kumar 750
    def getBillableInventoryAndPendingOrders(self):
751
        """
752
        Returns a list of inventory stock for items for which there are pending orders or have 
753
        billable inventory.
754
        """
755
        try:
756
            items_inventory = get_billable_inventory_and_pending_orders()
757
            return [AvailableAndReservedStock(itemId = i[0], available=i[1], reserved=i[2], minimumStock=0) for i in items_inventory]
758
        finally:
7281 kshitij.so 759
            close_session()
760
 
761
    def getWarehouseName(self,warehouseId):
762
        try:
763
            name = get_warehouse_name(warehouseId)
764
            return name
765
        finally:
766
            close_session()
767
 
768
    def getAmazonInventoryForItem(self, amazonItemId):
7316 kshitij.so 769
        result = []
7281 kshitij.so 770
        try:
771
            result = get_amazon_inventory_for_item(amazonItemId)
772
            if result is not None:
773
                result = to_t_amazon_inventory_snapshot(result)
774
        except:
7316 kshitij.so 775
            return result
7281 kshitij.so 776
        finally:
777
            close_session()
778
            return result
779
 
780
    def getAllAmazonInventory(self):
781
        try:
782
            amazoninventory = []
783
            all_inventory = get_all_amazon_inventory()
784
            for inventory in all_inventory:
785
                amazoninventory.append(to_t_amazon_inventory_snapshot((inventory)))
786
            return amazoninventory                                           
787
        finally:
788
            close_session() 
789
 
10450 vikram.rag 790
    def addOrUpdateAmazonInventoryForItem(self, amazoninventorysnapshot,time):
7281 kshitij.so 791
        try:
10450 vikram.rag 792
            add_or_update_amazon_inventory_for_item(amazoninventorysnapshot,time)
7281 kshitij.so 793
        finally:
8182 amar.kumar 794
            close_session()
795
 
8282 kshitij.so 796
    def addOrUpdateAmazonFbaInventory(self,amazonfbainventorysnapshot):
797
        try:
11173 vikram.rag 798
            add_or_update_amazon_fba_inventory(amazonfbainventorysnapshot)
799
            session.commit()
800
            return True 
8282 kshitij.so 801
        finally:
802
            close_session()
803
 
8182 amar.kumar 804
    def addUpdateHoldInventory(self, itemId, warehouseId, holdQuantity, source):
805
        try:
806
            add_update_hold_inventory(itemId, warehouseId, holdQuantity, source)
807
        finally:
8282 kshitij.so 808
            close_session()
809
 
810
    def getAmazonFbaItemInventory(self,itemId):
11173 vikram.rag 811
        fba_inventory = []
8282 kshitij.so 812
        try:
11173 vikram.rag 813
            for inventory in get_amazon_fba_inventory(itemId):
814
                fba_inventory.append(to_t_amazon_fba_inventory_snapshot(inventory))
815
            return fba_inventory     
8282 kshitij.so 816
        finally:
817
            close_session()            
818
 
8363 vikram.rag 819
    def getAllAmazonFbaItemInventory(self):
820
        all_fba_inventory = []
8282 kshitij.so 821
        try:
8363 vikram.rag 822
            for inventory in get_all_amazon_fba_inventory():
823
                all_fba_inventory.append(to_t_amazon_fba_inventory_snapshot(inventory))
824
            return all_fba_inventory     
8282 kshitij.so 825
        except:
826
            return None 
827
        finally:
8363 vikram.rag 828
            close_session()
829
 
830
    def getOursGoodWarehouseIdsForLocation(self,state_id):
831
        ids=[]
8572 vikram.rag 832
        try:
833
            for id in get_oursgood_warehouseids_for_location(state_id):
834
                ids.append(id[0])
835
            return ids
836
        except:
837
            return None
838
        finally:
8954 vikram.rag 839
            close_session()
840
 
841
    def getHoldInventoryDetailForItemForWarehouseIdExceptSource(self,item_id,warehouse_id,source):
842
        try:
843
            return get_holdinventorydetail_forItem_forWarehouseId_exceptsource(item_id,warehouse_id,source)
844
        finally:
9404 vikram.rag 845
            close_session()
846
 
847
    def getSnapdealInventoryForItem(self,item_id):
848
        try:
849
            return to_t_snapdeal_inventory_snapshot(get_snapdeal_inventory_for_item(item_id)) 
850
        finally:
851
            close_session()            
852
    def addOrUpdateSnapdealInventoryForItem(self,snapdealinventoryitem):
853
        try:
854
            add_or_update_snapdeal_inventor_for_item(snapdealinventoryitem)
855
        finally:
856
            close_session()
857
 
858
    def getNlcForWarehouse(self,warehouse_id,item_id):
859
        try:
860
            return get_nlc_for_warehouse(warehouse_id,item_id)
861
        finally:
9456 vikram.rag 862
            close_session()
863
 
9495 vikram.rag 864
    def addOrUpdateAllAmazonFbaInventory(self,allamazonfbainventorysnapshot):
11173 vikram.rag 865
        print 'inside handler'
9456 vikram.rag 866
        try:
9495 vikram.rag 867
            for amazonfbainventorysnapshot in allamazonfbainventorysnapshot:
11173 vikram.rag 868
                print amazonfbainventorysnapshot 
9495 vikram.rag 869
                add_or_update_amazon_fba_inventory(amazonfbainventorysnapshot)
11173 vikram.rag 870
            session.commit()    
9456 vikram.rag 871
        finally:
9482 vikram.rag 872
            close_session()
9495 vikram.rag 873
 
874
    def addOrUpdateAllSnapdealInventory(self,allsnapdealinventorysnapshot):
875
        try:
876
            for snapdealinventorysnapshot in allsnapdealinventorysnapshot:
877
                add_or_update_snapdeal_inventor_for_item(snapdealinventorysnapshot)
878
        finally:
879
            close_session()
9456 vikram.rag 880
 
9495 vikram.rag 881
    def getSnapdealInventorySnapshot(self):
9503 vikram.rag 882
        allsnapdealinventorysnapshot = []
883
        try:     
9504 vikram.rag 884
            for inventorysnapshot in get_snapdeal_inventory_snapshot():
885
                allsnapdealinventorysnapshot.append(to_t_snapdeal_inventory_snapshot(inventorysnapshot))  
886
            return allsnapdealinventorysnapshot
9495 vikram.rag 887
        finally:            
888
            close_session()
9640 amar.kumar 889
 
890
    def getHeldInventoryMapForItem(self, itemId, warehouseId):
891
        try:
892
            return get_held_inventory_map_for_item(itemId, warehouseId)
893
        finally:
894
            close_session()
9761 amar.kumar 895
 
896
    def getHoldInventoryDetails(self, itemId, warehouseId, source):
897
        try:
898
            return [to_t_hold_inventory_detail(holdInventoryDetail) for holdInventoryDetail in get_hold_inventory_details(itemId, warehouseId, source)]
899
        finally:
900
            close_session()
10050 vikram.rag 901
 
10450 vikram.rag 902
    def addOrUpdateFlipkartInventorySnapshot(self,flipkartInventorySnapshot,time):
10050 vikram.rag 903
        try:
10450 vikram.rag 904
            add_or_update_flipkart_inventory_snapshot(flipkartInventorySnapshot,time)
10050 vikram.rag 905
        finally:
906
            close_session()    
907
 
908
 
909
    def getFlipkartInventorySnapshot(self):
910
        try:
911
            return [to_t_flipkart_inventory_snapshot(snapshot) for snapshot in get_flipkart_inventory_snapshot()]
912
        finally:
913
            close_session()
10097 kshitij.so 914
 
915
    def getFlipkartlInventoryForItem(self,item_id):
916
        try:
917
            return to_t_flipkart_inventory_snapshot(get_flipkart_inventory_for_Item(item_id))
918
        finally:
919
            close_session()
10485 vikram.rag 920
 
921
    def getStateMaster(self):
922
        try:
923
            return get_state_master()
924
        finally:
10544 vikram.rag 925
            close_session()
926
 
927
    def updateSnapdealStockAtEOD(self,allsnapdealstock):
928
        try:
929
            update_snapdeal_stock_at_eod(allsnapdealstock)
930
        finally:
931
            close_session()
932
 
933
    def updateFlipkartStockAtEOD(self,allflipkartstock):
934
        try:
935
            update_flipkart_stock_at_eod(allflipkartstock)
936
        finally:
937
            close_session()
12363 kshitij.so 938
 
939
    def getWanNlcForSource(self,item_id,source):
940
        try:
941
            return get_wanlc_for_source(item_id,source)
942
        finally:
943
            close_session()
944
 
945
    def getAllAvailableAmazonFbaItemInventory(self):
946
        try:
947
            amazoninventory = []
948
            all_inventory = get_all_available_amazon_inventory()
949
            for inventory in all_inventory:
12376 kshitij.so 950
                amazoninventory.append(to_t_amazon_fba_inventory_snapshot((inventory)))
12363 kshitij.so 951
            return amazoninventory                                           
952
        finally:
953
            close_session() 
954
 
10544 vikram.rag 955
 
956
 
9495 vikram.rag 957