Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
122 ashish 1
'''
2
Created on 27-Apr-2010
3
 
4
@author: ashish
5
'''
6
from shop2020.model.v1.catalog.impl import DataService
4295 varun.gupt 7
from shop2020.utils.Utils import log_entry, to_py_date
122 ashish 8
from shop2020.model.v1.catalog.impl.DataAcessors import add_item, add_warehouse,\
9
    update_inventory, retire_warehouse, retire_item, change_item_status,\
4431 phani.kuma 10
    get_item, get_all_items, get_all_items_by_status,\
643 chandransh 11
    get_item_availability_for_warehouse, get_item_availability_for_location, get_all_warehouses_by_status,\
122 ashish 12
    get_Warehouse, get_all_warehouses_for_item, get_all_items_for_warehouse,\
766 rajveer 13
    update_item, start_item_on, close_session, \
4332 anupam.sin 14
    add_vendor, add_warehouse_vendor_mapping, get_warehouses_for_vendor, get_vendors_for_warehouse, \
635 rajveer 15
    retire_item_on, get_item_inventory_by_item_id, get_items_by_catalog_id,\
1308 chandransh 16
    get_best_deals, get_best_deals_catalog_ids, get_best_deals_count, get_best_sellers, get_latest_arrivals, get_latest_arrivals_catalog_ids, get_latest_arrivals_count,\
635 rajveer 17
    is_active, get_best_sellers_catalog_ids, get_best_sellers_count, put_category_object,\
871 chandransh 18
    get_category_object, mark_item_as_content_complete,\
1341 chandransh 19
    reserve_item_in_warehouse, reduce_reservation_count, generate_new_entity_id,\
2116 ankur.sing 20
    get_all_item_pricing, add_vendor_pricing, \
2035 rajveer 21
    get_item_pricing, get_category, get_all_categories, add_category,\
2116 ankur.sing 22
    get_item_status_description, get_all_vendors, check_vendor_item_mapping,\
2286 ankur.sing 23
    get_item_mappings, add_vendor_item_mapping, check_similar_item,\
2809 rajveer 24
    change_risky_flag, get_items_by_vendor_category, get_risky_items,\
3086 rajveer 25
    get_similar_items_catalog_ids, add_product_notification,\
3348 varun.gupt 26
    send_product_notifications, update_inventory_history,\
3557 rajveer 27
    get_all_brands_by_category, is_alive, get_item_pricing_by_source,\
28
    add_source_item_pricing, get_all_sources, get_item_for_source,\
4295 varun.gupt 29
    get_all_source_pricing, get_item_count_by_status, search_items, get_search_result_count,\
4320 rajveer 30
    get_pending_orders_inventory, get_product_notifications, get_product_notification_request_count,\
4423 phani.kuma 31
    add_inventory, get_all_similar_items_catalog_ids, add_similar_item_catalog_id, delete_similar_item_catalog_id
122 ashish 32
from shop2020.model.v1.catalog.impl.Convertors import to_t_item,\
4295 varun.gupt 33
    to_t_item_inventory, to_t_warehouse, to_t_vendor_item_pricing, to_t_category, to_t_vendor,\
34
    to_t_vendor_item_mapping, to_t_source_item_pricing, to_t_product_notification_request,\
35
    to_t_product_notification_request_count
122 ashish 36
from shop2020.thriftpy.model.v1.catalog.ttypes import status,\
4024 chandransh 37
    InventoryServiceException, AvailableAndReservedStock
599 chandransh 38
from shop2020.config.client.ConfigClient import ConfigClient
4370 anupam.sin 39
from shop2020.clients.CatalogClient import CatalogClient
40
from shop2020.clients.WarehouseClient import WarehouseClient
41
from shop2020.thriftpy.warehouse.ttypes import PurchaseOrder, LineItem
122 ashish 42
 
4370 anupam.sin 43
import xlrd
122 ashish 44
 
4370 anupam.sin 45
 
122 ashish 46
class InventoryServiceHandler:
47
    '''
48
    classdocs
49
    '''
599 chandransh 50
 
3187 rajveer 51
    def __init__(self, dbname='catalog', db_hostname='localhost'):
122 ashish 52
        '''
53
        Constructor
54
        '''
3187 rajveer 55
        DataService.initialize(dbname, db_hostname)
599 chandransh 56
        try:
621 chandransh 57
            config_client = ConfigClient()
58
            self.latest_arrivals_limit = int(config_client.get_property("LATEST_ARRIVALS_LIMIT"));
59
            self.best_sellers_limit = int(config_client.get_property("BEST_SELLERS_LIMIT"))
599 chandransh 60
        except:
621 chandransh 61
            self.latest_arrivals_limit = 50
62
            self.best_sellers_limit = 50
122 ashish 63
 
64
    #DONE
65
    def addItem(self, item):
66
        """
67
        Availability and inventory attributes
68
 
69
        Parameters:
70
         - item
71
        """
72
        log_entry(self, "addItem called")
785 rajveer 73
        try:
74
            return add_item(item)
75
        finally:
76
            close_session()
122 ashish 77
 
78
    def addWarehouse(self, warehouse):
79
        """
80
        Parameters:
81
         - warehouse
82
        """
83
        log_entry(self, "addWarehouse called")
785 rajveer 84
        try:
85
            return add_warehouse(warehouse)
86
        finally:
87
            close_session()
122 ashish 88
 
3325 chandransh 89
    def updateInventoryHistory(self, warehouse_id, timestamp, availability):
90
        """
91
        Stores the incremental warehouse updates of items.
92
 
93
        Parameters:
94
         - warehouse_id
95
         - timestamp
96
         - availability
97
        """
98
        try:
99
            return update_inventory_history(warehouse_id, timestamp, availability)
100
        finally:
101
            close_session()
483 rajveer 102
 
103
    def updateInventory(self, warehouse_id, timestamp, availability):
122 ashish 104
        """
105
        Parameters:
106
         - warehouse_id
107
         - timestamp
483 rajveer 108
         - availability
122 ashish 109
        """
110
        log_entry(self, "update Inventory called")
785 rajveer 111
        try:
112
            return update_inventory(warehouse_id, timestamp, availability)
113
        finally:
114
            close_session()
115
 
4320 rajveer 116
    def addInventory(self, itemId, warehouseId, quantity):
117
        """
118
        Add the inventory to existing stock.
119
 
120
        Parameters:
121
         - itemId
122
         - warehouseId
123
         - quantity
124
        """
125
        log_entry(self, "add Inventory called")
126
        try:
127
            return add_inventory(itemId, warehouseId, quantity)
128
        finally:
129
            close_session()
130
 
785 rajveer 131
 
635 rajveer 132
    def isActive(self, item_id):
563 chandransh 133
        """
134
        Parameters:
635 rajveer 135
         - item_id
563 chandransh 136
        """
785 rajveer 137
        try:
138
            return is_active(item_id)
139
        finally:
140
            close_session()
122 ashish 141
 
2035 rajveer 142
    def getItemStatusDescription(self, itemId):
143
        """
144
        Parameters:
145
         - itemId
146
        """
147
        try:
148
            return get_item_status_description(itemId)
149
        finally:
150
            close_session()
151
 
122 ashish 152
    def retireWarehouse(self, warehouse_id):
153
        """
154
        Parameters:
155
         - warehouse_id
156
        """
157
        log_entry(self, "retire warehouse called")
785 rajveer 158
        try:
159
            return retire_warehouse(warehouse_id)
160
        finally:
161
            close_session()
162
 
122 ashish 163
 
164
    def retireItem(self, item_id):
165
        """
166
        Parameters:
167
        - item_id
168
        """
169
        log_entry(self, "retire item called")
785 rajveer 170
        try:
171
            return retire_item(item_id)
172
        finally:
173
            close_session()
122 ashish 174
 
175
    def startItemOn(self, item_id, timestamp):
176
        """
177
        Parameters:
178
         - item_id
179
         - timestamp
180
        """
785 rajveer 181
        try:
182
            start_item_on(item_id, timestamp)
183
        finally:
184
            close_session()
122 ashish 185
 
186
    def retireItemOn(self, item_id, timestamp):
187
        """
188
        Parameters:
189
         - item_id
190
         - timestamp
191
        """
785 rajveer 192
        try:
193
            retire_item_on(item_id, timestamp)
194
        finally:
195
            close_session()
122 ashish 196
 
197
    def changeItemStatus(self, item_id, timestamp, newstatus):
198
        """
199
        Parameters:
200
         - item_id
201
         - timestamp
202
         - newstatus
203
        """
204
        log_entry(self, "change item status called")
785 rajveer 205
        try:
206
            return change_item_status(item_id, newstatus)
207
        finally:
208
            close_session()
122 ashish 209
 
785 rajveer 210
 
122 ashish 211
    def getItem(self, item_id):
212
        """
213
        Parameters:
214
         - item_id
215
        """
216
        log_entry(self, "item requested")
785 rajveer 217
        try:
2065 ankur.sing 218
            item = to_t_item( get_item(item_id))
219
            return item
785 rajveer 220
        finally:
221
            close_session()
379 ashish 222
 
635 rajveer 223
    def getItemsByCatalogId(self, catalog_item_id):
379 ashish 224
        """
225
        Parameters:
226
        - catalog_item_id
227
        """
386 ashish 228
        log_entry(self, "item requested")
766 rajveer 229
        try:
230
            return get_items_by_catalog_id(catalog_item_id)
231
        finally:
232
            close_session()
122 ashish 233
 
483 rajveer 234
 
122 ashish 235
    def getAllItems(self, isActive):
236
        """
237
        Parameters:
238
         - isActive
239
        """
240
        log_entry(self, "all items requested")
766 rajveer 241
        try:
242
            items = get_all_items(isActive)
243
            ret_items = []
244
            for item in items:
245
                if item:
246
                    ret_items.append(to_t_item(item))
247
            return ret_items
248
        finally:
249
            close_session()
250
 
122 ashish 251
    def getAllItemsByStatus(self, itemStatus):
252
        """
253
        Parameters:
254
         - itemStatus
255
        """
256
        log_entry(self, "all items requested")
766 rajveer 257
        try:
258
            items = get_all_items_by_status(itemStatus)
259
            ret_items = []
260
            for item in items:
261
                if item:
262
                    ret_items.append(to_t_item(item))
263
            return ret_items
264
        finally:
265
            close_session()
122 ashish 266
 
4431 phani.kuma 267
    '''
122 ashish 268
    def getItemInventory(self, item_id):
269
        """
270
        Parameters:
271
        - item_id
272
        """
273
        log_entry(self, "item inventory requested")
766 rajveer 274
        try:
275
            inventory = get_item_inventoy(item_id)
276
            return to_t_item_inventory(inventory, item_id)
277
        finally:
278
            close_session()
4431 phani.kuma 279
    '''
122 ashish 280
 
635 rajveer 281
    def getItemInventoryByItemId(self, item_id):
282
        """
283
        Parameters:
284
         - item_id
285
        """
286
        log_entry(self, "item inventory requested")
766 rajveer 287
        try:
288
            inventory = get_item_inventory_by_item_id(item_id)
289
            return to_t_item_inventory(inventory, item_id)
290
        finally:
291
            close_session()
635 rajveer 292
 
3348 varun.gupt 293
    def getAllBrandsByCategory(self, categoryId):
294
        """
295
        Parameters:
296
         - categoryId
297
        """
298
        try:
299
            return get_all_brands_by_category(categoryId)
300
        finally:
301
            close_session()
302
 
635 rajveer 303
    '''
379 ashish 304
    def getItemInventoryByCatalogId(self, item_id):
305
        """
306
        Parameters:
307
         - item_id
308
        """
383 ashish 309
        log_entry(self, "item inventory requested")
310
        inventory = get_item_inventory_by_catalog_id(item_id)
311
        return to_t_item_inventory(inventory, item_id)
635 rajveer 312
    '''
313
 
3849 chandransh 314
    def getAllItemsInRange(self, offset, limit):
315
        """
316
        Gets at most 'limit' items starting at the given offset. Returns an empty list if there are no more items at the given offset.
317
 
318
        Parameters:
319
         - offset
320
         - limit
321
        """
322
        try:
323
            items = get_all_items(False, offset, limit)
324
            return [to_t_item(item) for item in items]
325
        finally:
326
            close_session()
379 ashish 327
 
3849 chandransh 328
    def getAllItemsByStatusInRange(self, itemStatus, offset, limit):
329
        """
330
        Gets at most 'limit' items starting at the given offset in the given status. Returns an empty list if there are no more items at the given offset.
331
 
332
        Parameters:
333
         - itemStatus
334
         - offset
335
         - limit
336
        """
337
        log_entry(self, "all items requested")
338
        try:
339
            items = get_all_items_by_status(itemStatus, offset, limit)
340
            return [to_t_item(item) for item in items]
341
        finally:
342
            close_session()
343
 
344
    def getItemCountByStatus(self, useStatus, itemStatus):
345
        """
346
        Gets a count of all items by status
347
 
348
        Parameters:
349
         - useStatus
350
         - itemStatus
351
        """
352
        try:
353
            return get_item_count_by_status(useStatus, itemStatus)
354
        finally:
355
            close_session()
356
 
643 chandransh 357
    def getItemAvailabilityAtLocation(self, warehouse_loc, item_id):
358
        """
3355 chandransh 359
        Determines the warehouse that should be used to fulfil an order for the given item.
360
        It first checks all the warehouses which are in the logistics location given by the
361
        warehouse_loc parameter. If none of the warehouses there have any inventory, then the
362
        preferred warehouse for the item is used.
643 chandransh 363
 
3355 chandransh 364
        Returns an ordered list of size 4 with following elements in the given order:
365
        1. Logistics location of the warehouse which was finally picked up to ship the order.
366
        2. Id of the warehouse which was finally picked up.
367
        3. Inventory size in the selected warehouse.
368
        4. Expected delay added by the category manager.
369
 
643 chandransh 370
        Parameters:
371
         - warehouse_loc
372
         - item_id
373
        """
766 rajveer 374
        try:
375
            return get_item_availability_for_location(warehouse_loc, item_id)
376
        finally:
377
            close_session()
378
 
122 ashish 379
    def getItemAvailibilityAtWarehouse(self, warehouse_id, item_id):
380
        """
381
        Parameters:
382
         - warehouse_id
383
         - item_id
384
        """
385
        log_entry(self, "item availability at warehouse requested")
766 rajveer 386
        try:
387
            return get_item_availability_for_warehouse(warehouse_id, item_id)
388
        finally:
389
            close_session()
390
 
2080 rajveer 391
    def markItemAsContentComplete(self, entityId, category, brand, modelName, modelNumber):
392
        """
393
        Parameters:
394
         - entityId
395
         - category
396
         - brand
397
         - modelName
398
         - modelNumber
399
        """
400
        try:
401
            return mark_item_as_content_complete(entityId, category, brand, modelName, modelNumber)
402
        finally:
403
            close_session()
2075 rajveer 404
 
405
 
122 ashish 406
    def getItemInventoryHistory(self, id, item_id, warehouse_id, from_date, to_date):
407
        """
408
        Parameters:
409
         - id
410
         - item_id
411
         - warehouse_id
412
         - from_date
413
         - to_date
414
        """
415
        pass
416
 
417
    def getAllWarehouses(self, isActive):
418
        """
419
        Parameters:
420
        - isActive
421
        """
766 rajveer 422
        try:
423
            if isActive:
424
                warehouses = get_all_warehouses_by_status(status.ACTIVE)
425
            else:
426
                warehouses = get_all_warehouses_by_status(None)
427
 
428
            ret_warehouses = []
429
 
430
            for warehouse in warehouses:
431
                ret_warehouses.append(to_t_warehouse(warehouse))
432
            return ret_warehouses
433
        finally:
434
            close_session()
435
 
122 ashish 436
    def getWarehouse(self, warehouse_id):
437
        """
438
        Parameters:
439
         - warehouse_id
440
        """
441
        log_entry(self, "get warehouse call")
766 rajveer 442
        try:
443
            warehouse = get_Warehouse(warehouse_id)
444
            if warehouse:
445
                return to_t_warehouse(warehouse)
446
            else:
447
                raise InventoryServiceException(101, "no such warehouse")
448
        finally:
449
            close_session()
450
 
122 ashish 451
    def getAllWarehousesForItem(self, item_id):
452
        """
453
        Parameters:
454
         - item_id
455
        """
456
        log_entry(self, "getting all warehouses for item")
766 rajveer 457
        try:
458
            all_warehouses = get_all_warehouses_for_item(item_id)
459
            t_warehouses = []
460
            for warehouse in all_warehouses:
461
                t_warehouses.append(to_t_warehouse(warehouse))
462
            return t_warehouses
463
        finally:
464
            close_session()
465
 
122 ashish 466
    def getAllItemsForWarehouse(self, warehouse_id):
467
        """
468
        Parameters:
469
         - warehouse_id
470
        """
471
        log_entry(self, "getting all items for warehouse")
766 rajveer 472
        try:
473
            all_items = get_all_items_for_warehouse(warehouse_id)
474
            t_items = []
475
            for item in all_items:
476
                t_items.append(to_t_item(item))
477
            return t_items
478
        finally:
479
            close_session()
871 chandransh 480
 
481
    def reserveItemInWarehouse(self, itemId, warehouseId, quantity):
482
        """
483
        Increases the reservation count for an item in a warehouse. Should always succeed normally.
484
 
485
        Parameters:
486
         - itemId
487
         - warehouseId
488
        """
489
        log_entry(self, "reserveItemInWarehouse called")
490
        try:
491
            return reserve_item_in_warehouse(itemId, warehouseId, quantity)
492
        finally:
493
            close_session()
494
 
495
    def reduceReservationCount(self, itemId, warehouseId, quantity):
496
        """
497
        Decreases the reservation count for an item in a warehouse. Should always succeed normally.
498
 
499
        Parameters:
500
         - itemId
501
         - warehouseId
502
        """
503
        log_entry(self, "reduceReservationCount called")
504
        try:
505
            return reduce_reservation_count(itemId, warehouseId, quantity)
506
        finally:
507
            close_session()
766 rajveer 508
 
122 ashish 509
    def updateItem(self, item):
510
        """
511
        Parameters:
512
         - item
513
        """
514
        log_entry(self, "addItem called")
766 rajveer 515
        try:
516
            return update_item(item)
517
        finally:
518
            close_session()
519
 
626 chandransh 520
    def getBestSellers(self, start_index=0, total_items=None, category=-1):
766 rajveer 521
        try:
522
            if total_items is None:
523
                total_items = self.best_sellers_limit
524
            stop_index = start_index + total_items
525
            return get_best_sellers(start_index, stop_index, category)
526
        finally:
527
            close_session()
528
 
1926 rajveer 529
    def getBestSellersCatalogIds(self, start_index, total_items, brand, category=-1):
548 rajveer 530
        """
531
        Parameters:
532
         - beginIndex
533
         - totalItems
534
        """
766 rajveer 535
        try:
536
            if total_items is None:
537
                total_items = self.best_sellers_limit
538
            stop_index = start_index + total_items
1926 rajveer 539
            return get_best_sellers_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 540
        finally:
541
            close_session()
542
 
591 chandransh 543
    def getBestSellersCount(self, ):
766 rajveer 544
        try:
2093 chandransh 545
            return get_best_sellers_count()
766 rajveer 546
        finally:
547
            close_session()
548
 
591 chandransh 549
    def getBestDeals(self,):
766 rajveer 550
        try:
551
            return get_best_deals()
552
        finally:
553
            close_session()
554
 
1926 rajveer 555
    def getBestDealsCatalogIds(self, start_index, total_items, brand,category=-1):
548 rajveer 556
        """
557
        Parameters:
558
         - beginIndex
559
         - totalItems
560
        """
766 rajveer 561
        try:
562
            stop_index = start_index + total_items
1926 rajveer 563
            return get_best_deals_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 564
        finally:
565
            close_session()
566
 
591 chandransh 567
    def getBestDealsCount(self, ):
766 rajveer 568
        try:
569
            return get_best_deals_count()
570
        finally:
571
            close_session()
572
 
591 chandransh 573
    def getLatestArrivals(self,):
766 rajveer 574
        try:
575
            return get_latest_arrivals(self.latest_arrivals_limit)
576
        finally:
577
            close_session()
2975 chandransh 578
 
579
    def getLatestArrivalsCatalogIds(self, beginIndex, totalItems, brand, categories):
548 rajveer 580
        """
2975 chandransh 581
        Returns the list of catalog ids of latest arrivals in the given categories of the given brand.
582
        To ignore the categories, pass the list as empty. To ignore brand, pass it as null.
583
 
548 rajveer 584
        Parameters:
585
         - beginIndex
586
         - totalItems
2975 chandransh 587
         - brand
588
         - categories
548 rajveer 589
        """
766 rajveer 590
        try:
2975 chandransh 591
            if beginIndex > self.latest_arrivals_limit:
766 rajveer 592
                return []
2975 chandransh 593
            stopIndex = beginIndex + totalItems
594
            if stopIndex > self.latest_arrivals_limit:
595
                stopIndex = self.latest_arrivals_limit
596
            return get_latest_arrivals_catalog_ids(beginIndex, stopIndex, brand, categories)
766 rajveer 597
        finally:
598
            close_session()
599
 
591 chandransh 600
    def getLatestArrivalsCount(self, ):
766 rajveer 601
        try:
602
            return get_latest_arrivals_count(self.latest_arrivals_limit)
603
        finally:
604
            close_session()
591 chandransh 605
 
4283 anupam.sin 606
    def getItemPricing(self, itemId, vendorId):
1334 chandransh 607
        """
608
        Returns the pricing information of an item associated with the vendor of the given warehouse.
609
        Raises an exception if either the item, vendor or the associated pricing information can't be found.
610
 
611
        Parameters:
612
         - itemId
613
         - warehouseId
614
        """
1341 chandransh 615
        try:
4283 anupam.sin 616
            return to_t_vendor_item_pricing(get_item_pricing(itemId, vendorId))
1341 chandransh 617
        finally:
618
            close_session()
1991 ankur.sing 619
 
620
 
621
    def getAllItemPricing(self, itemId):
622
        """
623
        Returns list of the pricing information of an item associated an item.
624
        Raises an exception if the item can't be found.
625
 
626
        Parameters:
627
         - itemId
628
        """
629
        try:
630
            return [to_t_vendor_item_pricing(vid) for vid in get_all_item_pricing(itemId)]
631
        finally:
632
            close_session()
1334 chandransh 633
 
1155 rajveer 634
    def generateNewEntityID(self, ):
635
        try:
636
            return generate_new_entity_id()
637
        finally:
638
            close_session()
639
 
635 rajveer 640
    def putCategoryObject(self, object):
641
        """
642
        Parameters:
643
         - object
644
        """
766 rajveer 645
        try:
646
            return put_category_object(object)
647
        finally:
648
            close_session()
649
 
635 rajveer 650
    def getCategoryObject(self, ):
766 rajveer 651
        try:
652
            return get_category_object()
653
        finally:
654
            close_session()
1970 rajveer 655
 
656
    def addCategory(self, category):
657
        """
658
        Parameters:
659
         - category
660
        """
661
        try:
662
            return add_category(category)
663
        finally:
664
            close_session()
665
 
666
    def getCategory(self, id):
667
        """
668
        Parameters:
669
         - id
670
        """
671
        try:
672
            return to_t_category(get_category(id))
673
        finally:
674
            close_session()
675
 
676
    def getAllCategories(self, ):
677
        try:
678
            categories = get_all_categories()
679
            return [to_t_category(category) for category in categories]
680
        finally:
681
            close_session()
682
 
683
 
2116 ankur.sing 684
    def addVendorItemPricing(self, vendorItemPricing):
1991 ankur.sing 685
        """
2116 ankur.sing 686
        Adds vendor prices corresponding to the item. If pricing already exists then updates the prices. 
1991 ankur.sing 687
        Raises an exception if either the item or vendor can't be found corresponding to their ids.
688
 
689
        Parameters:
690
         - vendorItemPricing
691
        """
692
        log_entry(self, "updateVendorItemPricing called")
693
        try:
2116 ankur.sing 694
            return add_vendor_pricing(vendorItemPricing)
1991 ankur.sing 695
        finally:
696
            close_session()
697
 
2065 ankur.sing 698
    def getAllVendors(self, ):
699
        """
700
        Return list of all vendors
701
        """
4432 rajveer 702
        try:
703
            return [to_t_vendor(v) for v in get_all_vendors()]
704
        finally:
705
            close_session()
706
 
4423 phani.kuma 707
    def getAllSimilarItems(self, itemId):
708
        """
709
        Returns list of similar items.
710
 
711
        Parameters:
712
         - itemId
713
        """
4432 rajveer 714
        try:
715
            return get_all_similar_items_catalog_ids(itemId)
716
        finally:
717
            close_session()
718
 
4423 phani.kuma 719
    def addSimilarItem(self, itemId, catalogItemId):
720
        """
721
        add similar item.
722
 
723
        Parameters:
724
         - itemId, catalogItemId
725
        """
726
        try:
727
            return add_similar_item_catalog_id(itemId, catalogItemId)
728
        finally:
729
            close_session()
730
 
731
    def deleteSimilarItem(self, itemId, catalogItemId):
732
        """
733
        delete similar items.
734
 
735
        Parameters:
736
         - itemId, catalogItemIds
737
        """
738
        try:
739
            return delete_similar_item_catalog_id(itemId, catalogItemId)
740
        finally:
741
            close_session()
742
 
2116 ankur.sing 743
    def itemExists(self, productGroup, brand, modelNumber, color, vendorId, category):
744
        try:
745
            return check_vendor_item_mapping(productGroup, brand, modelNumber, color, vendorId, category)
746
        finally:
747
            close_session()
2065 ankur.sing 748
 
2358 ankur.sing 749
    def addVendorItemMapping(self, key, vendorItemMapping):
2116 ankur.sing 750
        """
2358 ankur.sing 751
        Adds VendorItemMapping. Updates VendorItemMapping if exists corresponding to the item key.
2116 ankur.sing 752
 
753
        Parameters:
2358 ankur.sing 754
         - key
2116 ankur.sing 755
         - vendorItemMapping
756
        """
757
        log_entry(self, "addVendorItemMapping called")
758
        try:
2358 ankur.sing 759
            return add_vendor_item_mapping(key, vendorItemMapping)
2116 ankur.sing 760
        finally:
761
            close_session()
762
 
763
    def getVendorItemMappings(self, itemId):
764
        """
765
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
766
        Raises an exception if item not found corresponding to itemId
767
 
768
        Parameters:
769
         - itemId
770
        """
771
        try:
2120 ankur.sing 772
            item_mappings = get_item_mappings(itemId)
773
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
2116 ankur.sing 774
        finally:
775
            close_session()
776
 
777
    def checkSimilarItem(self, productGroup, brand, modelNumber, color):
778
        """
779
        Checks if similar item exists (with same ProductGroup, Brand, ModelNumber, Color)
780
        If yes, returns the itemId else returns 0
781
 
782
        Parameters:
783
         - productGroup
784
         - brand
785
         - modelNumber
786
         - color
787
        """
788
        try:
789
            return check_similar_item(productGroup, brand, modelNumber, color)
790
        finally:
791
            close_session()
792
 
2286 ankur.sing 793
    def changeItemRiskyFlag(self, itemId, risky):
794
        """
795
        Marks/Unmarks an item as risky. This flag is used for automatic marking of an item as INACTIVE in case of zero inventory.
796
 
797
        Parameters:
798
         - itemId
799
         - risky
800
        """
801
        try:
802
            change_risky_flag(itemId, risky)
803
        finally:
804
            close_session()
2116 ankur.sing 805
 
2358 ankur.sing 806
    def getItemsByVendorCategory(self, vendorCategory):
807
        """
808
        Return list of items filtered by vendor category.
809
        Raises exception if vendorCategory is null.
810
 
811
        Parameters:
812
         - vendorCategory
813
        """
814
        try:
815
            return [to_t_item(item) for item in get_items_by_vendor_category(vendorCategory)]
816
        finally:
817
            close_session()
818
 
819
    def getItemsByRiskyFlag(self, ):
820
        """
821
        Returns list of items marked as risky.
822
        """
823
        try:
824
            return [to_t_item(item) for item in get_risky_items()]
825
        finally:
826
            close_session()
2809 rajveer 827
 
828
    def getSimilarItemsCatalogIds(self, beginIndex, totalItems, itemId):
829
        """
830
        Returns list of catalog ids of items with same similarity index as of the given itemId
831
 
832
        Parameters:
833
         - beginIndex
834
         - totalItems
835
         - itemId
836
        """
837
        try:
838
            return get_similar_items_catalog_ids(beginIndex, beginIndex+totalItems, itemId)
839
        finally:
840
            close_session()
3079 rajveer 841
 
842
    def addProductNotification(self, itemId, email):
843
        """
844
        Add user requests for out of stock items. Once user will ask for notify me an entry will
845
 
846
        Parameters:
847
        - itemId
848
        - email
849
        """
850
        try:
851
            return add_product_notification(itemId, email)
852
        finally:
853
            close_session()
2358 ankur.sing 854
 
3086 rajveer 855
    def sendProductNotifications(self, ):
856
        """
857
        Send the product notifications to the users for items which has stock.
858
        """
859
        try:
860
            return send_product_notifications()
861
        finally:
862
            close_session()
3557 rajveer 863
 
864
 
865
    def getAllSources(self, ):
866
        """
867
        Return list of all sources
868
        """
869
        try:
870
            return get_all_sources()
871
        finally:
872
            close_session()
873
 
874
    def getItemPricingBySource(self, itemId, sourceId):
875
        """
876
        Returns the pricing information of an item. If no information is found, exception will be thrown.
3376 rajveer 877
 
3557 rajveer 878
        Parameters:
879
         - itemId
880
         - sourceId
881
        """
882
        try:
883
            return to_t_source_item_pricing(get_item_pricing_by_source(itemId, sourceId))
884
        finally:
885
            close_session()
886
 
887
    def addSourceItemPricing(self, sourceItemPricing):
888
        """
889
        Adds prices to be displayed corresponding to the item if user comes from a source.
890
 
891
        Parameters:
892
         - sourceItemPricing
893
        """
894
        try:
895
            add_source_item_pricing(sourceItemPricing)
896
        finally:
897
            close_session()
898
 
899
    def getAllSourcePricing(self, itemId):
900
        """
901
        Returns the list of source pricing information of an item.
902
        Raises an exception if item not found corresponding to itemId
903
 
904
        Parameters:
905
         - itemId
906
        """
907
        try:
908
            return [to_t_source_item_pricing(source_item_pricing) for source_item_pricing in get_all_source_pricing(itemId)]
909
#        return [to_t_item(item) for item in get_risky_items()]
910
        finally:
911
            close_session()
912
 
913
    def getItemForSource(self, item_id, sourceId):
914
        """
915
        Parameters:
916
         - item_id
917
         - sourceId
918
        """
919
        try:
920
            return to_t_item(get_item_for_source(item_id, sourceId))
921
        finally:
922
            close_session()
3872 chandransh 923
 
924
    def searchItemsInRange(self, searchTerms, offset, limit):
925
        """
926
        Searches items matching the the given terms in the catalog
3557 rajveer 927
 
3872 chandransh 928
        Parameters:
929
         - searchTerms
930
        """
931
        try:
932
            return [to_t_item(item) for item in search_items(searchTerms, offset, limit)]
933
        finally:
934
            close_session()
935
 
936
    def getSearchResultCount(self, searchTerms):
937
        """
938
        Gets the count of search results for the given search terms so that the user can go through all the pages.
939
 
940
        Parameters:
941
         - searchTerms
942
        """
943
        try:
944
            return get_search_result_count(searchTerms)
945
        finally:
946
            close_session()
947
 
4063 chandransh 948
    def getPendingOrdersInventory(self, vendorId):
4024 chandransh 949
        """
4063 chandransh 950
        Returns a list of inventory stock for items for which there are pending orders for the given vendor.
4024 chandransh 951
        """
952
        try:
4063 chandransh 953
            pending_items_inventory = get_pending_orders_inventory(vendorId)
4024 chandransh 954
            return [AvailableAndReservedStock(itemId = i[0], available=i[1], reserved=i[2], minimumStock=0) for i in pending_items_inventory]
955
        finally:
956
            close_session()
957
 
4295 varun.gupt 958
    def getProductNotifications(self, startDateTime):
959
        '''
960
        Returns a list of Product Notification objects each representing user requests for notification
961
        '''
962
        try:
963
            return [to_t_product_notification_request(notification) for notification in get_product_notifications(to_py_date(startDateTime))]
964
        finally:
965
            close_session()
966
 
967
    def getProductNotificationRequestCount(self, startDateTime):
968
        '''
969
        Returns list of items and the counts of product notification requests
970
        '''
971
        try:
972
            notification_request_counts = [(notification.item, count) for notification, count in get_product_notification_request_count(to_py_date(startDateTime))]
973
 
974
            return [to_t_product_notification_request_count(count) for count in notification_request_counts]
975
 
976
        finally:
977
            close_session()
978
 
3376 rajveer 979
    def isAlive(self, ):
980
        """
981
        For checking weather service is active alive or not. It also checks connectivity with database
982
        """
983
        try:
984
            return is_alive()
985
        finally:
986
            close_session()
987
 
766 rajveer 988
    def closeSession(self, ):
3376 rajveer 989
        """
990
        For closing the open session in sqlalchemy
991
        """
4332 anupam.sin 992
        close_session()
993
 
994
    def addVendor(self, vendor):
995
        """
996
        add a new vendor
997
        """
998
        try:
999
            return add_vendor(vendor)
1000
        finally:
1001
            close_session()
1002
 
1003
    def addWarehouseVendorMapping(self, warehouse_id, vendorId):
1004
        """
1005
        map given warehouse id to given vendor id
1006
        """
1007
        try:
1008
            return add_warehouse_vendor_mapping(warehouse_id, vendorId)
1009
        finally:
1010
            close_session()
1011
 
1012
    def getVendorsForWarehouse(self, warehouse_id):
1013
        """
1014
        get all vendors for the given warehouse_id
1015
        """
1016
        try:
1017
            vendors = get_vendors_for_warehouse(warehouse_id)
1018
            ret_vendors = []
1019
            for vendor in vendors:
1020
                if vendor:
1021
                    ret_vendors.append(to_t_vendor(vendor))
1022
            return ret_vendors
1023
        finally:
1024
            close_session()
1025
 
1026
    def getWarehousesForVendor(self, vendorId):
1027
        '''
1028
        get all warehouses for the given vendorId
1029
        '''
1030
        try:
1031
            warehouses = get_warehouses_for_vendor(vendorId)
1032
            ret_warehouses = []
1033
            for warehouse in warehouses:
1034
                if warehouse:
1035
                    ret_warehouses.append(to_t_warehouse(warehouse))
1036
            return ret_warehouses
1037
        finally:
4370 anupam.sin 1038
            close_session()
1039
 
1040
    def processPurchaseOrder(self, filename, vendorId):
1041
        '''
1042
        create purchase order for given filename
1043
        '''
1044
        workbook = xlrd.open_workbook(filename)
1045
        sheet = workbook.sheet_by_index(0)
1046
        num_rows = sheet.nrows
1047
        if(sheet.ncols != 2):
1048
            raise InventoryServiceException(101, "Sheet format Invalid")
1049
        catalogClient = CatalogClient().get_client()
1050
        lineitems = []
1051
        purchaseOrder = PurchaseOrder()
1052
        purchaseOrder.supplierId = vendorId
1053
        purchaseOrder.warehouseId = 7
1054
        totalCost = 0
1055
 
1056
        for rownum in range(1, num_rows):
1057
            itemId = sheet.row_values(rownum)[0]
1058
            quantity = sheet.row_values(rownum)[1]
1059
 
1060
            lineitem = LineItem()
1061
            item = catalogClient.getItem(itemId)
1062
            lineitem.itemId = item.id
1063
            lineitem.productGroup = item.productGroup
1064
            lineitem.brand = item.brand
1065
            lineitem.modelNumber = item.modelNumber
1066
            lineitem.modelName = item.modelName
1067
            lineitem.color = item.color
1068
            lineitem.quantity = quantity
1069
            lineitem.unfulfilledQuantity = quantity
1070
            try:
1071
                item_pricing = catalogClient.getItemPricing(itemId, vendorId)
1072
                lineitem.unitPrice = item_pricing.transferPrice
1073
            except:
1074
                raise InventoryServiceException(101, "Unable to get pricing for " + item.brand + " " + item.modelName \
1075
                                + " " + item.modelNumber + "(Item id : " + str(int(itemId)) + \
1076
                                ")" + " for VendorId : " + str(vendorId))
1077
            lineitem.fulfilled = 0
1078
 
1079
            totalCost += quantity*lineitem.unitPrice
1080
 
1081
            lineitems.append(lineitem)
1082
 
1083
        purchaseOrder.totalCost = totalCost
1084
        purchaseOrder.lineitems = lineitems
1085
 
1086
        whClient = WarehouseClient().get_client()
1087
        po_id = whClient.createPurchaseOrder(purchaseOrder)
1088
        return "POId:" + str(po_id)