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
        """
702
        return [to_t_vendor(v) for v in get_all_vendors()]
2116 ankur.sing 703
 
4423 phani.kuma 704
    def getAllSimilarItems(self, itemId):
705
        """
706
        Returns list of similar items.
707
 
708
        Parameters:
709
         - itemId
710
        """
711
        return get_all_similar_items_catalog_ids(itemId)
712
 
713
    def addSimilarItem(self, itemId, catalogItemId):
714
        """
715
        add similar item.
716
 
717
        Parameters:
718
         - itemId, catalogItemId
719
        """
720
        try:
721
            return add_similar_item_catalog_id(itemId, catalogItemId)
722
        finally:
723
            close_session()
724
 
725
    def deleteSimilarItem(self, itemId, catalogItemId):
726
        """
727
        delete similar items.
728
 
729
        Parameters:
730
         - itemId, catalogItemIds
731
        """
732
        try:
733
            return delete_similar_item_catalog_id(itemId, catalogItemId)
734
        finally:
735
            close_session()
736
 
2116 ankur.sing 737
    def itemExists(self, productGroup, brand, modelNumber, color, vendorId, category):
738
        try:
739
            return check_vendor_item_mapping(productGroup, brand, modelNumber, color, vendorId, category)
740
        finally:
741
            close_session()
2065 ankur.sing 742
 
2358 ankur.sing 743
    def addVendorItemMapping(self, key, vendorItemMapping):
2116 ankur.sing 744
        """
2358 ankur.sing 745
        Adds VendorItemMapping. Updates VendorItemMapping if exists corresponding to the item key.
2116 ankur.sing 746
 
747
        Parameters:
2358 ankur.sing 748
         - key
2116 ankur.sing 749
         - vendorItemMapping
750
        """
751
        log_entry(self, "addVendorItemMapping called")
752
        try:
2358 ankur.sing 753
            return add_vendor_item_mapping(key, vendorItemMapping)
2116 ankur.sing 754
        finally:
755
            close_session()
756
 
757
    def getVendorItemMappings(self, itemId):
758
        """
759
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
760
        Raises an exception if item not found corresponding to itemId
761
 
762
        Parameters:
763
         - itemId
764
        """
765
        try:
2120 ankur.sing 766
            item_mappings = get_item_mappings(itemId)
767
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
2116 ankur.sing 768
        finally:
769
            close_session()
770
 
771
    def checkSimilarItem(self, productGroup, brand, modelNumber, color):
772
        """
773
        Checks if similar item exists (with same ProductGroup, Brand, ModelNumber, Color)
774
        If yes, returns the itemId else returns 0
775
 
776
        Parameters:
777
         - productGroup
778
         - brand
779
         - modelNumber
780
         - color
781
        """
782
        try:
783
            return check_similar_item(productGroup, brand, modelNumber, color)
784
        finally:
785
            close_session()
786
 
2286 ankur.sing 787
    def changeItemRiskyFlag(self, itemId, risky):
788
        """
789
        Marks/Unmarks an item as risky. This flag is used for automatic marking of an item as INACTIVE in case of zero inventory.
790
 
791
        Parameters:
792
         - itemId
793
         - risky
794
        """
795
        try:
796
            change_risky_flag(itemId, risky)
797
        finally:
798
            close_session()
2116 ankur.sing 799
 
2358 ankur.sing 800
    def getItemsByVendorCategory(self, vendorCategory):
801
        """
802
        Return list of items filtered by vendor category.
803
        Raises exception if vendorCategory is null.
804
 
805
        Parameters:
806
         - vendorCategory
807
        """
808
        try:
809
            return [to_t_item(item) for item in get_items_by_vendor_category(vendorCategory)]
810
        finally:
811
            close_session()
812
 
813
    def getItemsByRiskyFlag(self, ):
814
        """
815
        Returns list of items marked as risky.
816
        """
817
        try:
818
            return [to_t_item(item) for item in get_risky_items()]
819
        finally:
820
            close_session()
2809 rajveer 821
 
822
    def getSimilarItemsCatalogIds(self, beginIndex, totalItems, itemId):
823
        """
824
        Returns list of catalog ids of items with same similarity index as of the given itemId
825
 
826
        Parameters:
827
         - beginIndex
828
         - totalItems
829
         - itemId
830
        """
831
        try:
832
            return get_similar_items_catalog_ids(beginIndex, beginIndex+totalItems, itemId)
833
        finally:
834
            close_session()
3079 rajveer 835
 
836
    def addProductNotification(self, itemId, email):
837
        """
838
        Add user requests for out of stock items. Once user will ask for notify me an entry will
839
 
840
        Parameters:
841
        - itemId
842
        - email
843
        """
844
        try:
845
            return add_product_notification(itemId, email)
846
        finally:
847
            close_session()
2358 ankur.sing 848
 
3086 rajveer 849
    def sendProductNotifications(self, ):
850
        """
851
        Send the product notifications to the users for items which has stock.
852
        """
853
        try:
854
            return send_product_notifications()
855
        finally:
856
            close_session()
3557 rajveer 857
 
858
 
859
    def getAllSources(self, ):
860
        """
861
        Return list of all sources
862
        """
863
        try:
864
            return get_all_sources()
865
        finally:
866
            close_session()
867
 
868
    def getItemPricingBySource(self, itemId, sourceId):
869
        """
870
        Returns the pricing information of an item. If no information is found, exception will be thrown.
3376 rajveer 871
 
3557 rajveer 872
        Parameters:
873
         - itemId
874
         - sourceId
875
        """
876
        try:
877
            return to_t_source_item_pricing(get_item_pricing_by_source(itemId, sourceId))
878
        finally:
879
            close_session()
880
 
881
    def addSourceItemPricing(self, sourceItemPricing):
882
        """
883
        Adds prices to be displayed corresponding to the item if user comes from a source.
884
 
885
        Parameters:
886
         - sourceItemPricing
887
        """
888
        try:
889
            add_source_item_pricing(sourceItemPricing)
890
        finally:
891
            close_session()
892
 
893
    def getAllSourcePricing(self, itemId):
894
        """
895
        Returns the list of source pricing information of an item.
896
        Raises an exception if item not found corresponding to itemId
897
 
898
        Parameters:
899
         - itemId
900
        """
901
        try:
902
            return [to_t_source_item_pricing(source_item_pricing) for source_item_pricing in get_all_source_pricing(itemId)]
903
#        return [to_t_item(item) for item in get_risky_items()]
904
        finally:
905
            close_session()
906
 
907
    def getItemForSource(self, item_id, sourceId):
908
        """
909
        Parameters:
910
         - item_id
911
         - sourceId
912
        """
913
        try:
914
            return to_t_item(get_item_for_source(item_id, sourceId))
915
        finally:
916
            close_session()
3872 chandransh 917
 
918
    def searchItemsInRange(self, searchTerms, offset, limit):
919
        """
920
        Searches items matching the the given terms in the catalog
3557 rajveer 921
 
3872 chandransh 922
        Parameters:
923
         - searchTerms
924
        """
925
        try:
926
            return [to_t_item(item) for item in search_items(searchTerms, offset, limit)]
927
        finally:
928
            close_session()
929
 
930
    def getSearchResultCount(self, searchTerms):
931
        """
932
        Gets the count of search results for the given search terms so that the user can go through all the pages.
933
 
934
        Parameters:
935
         - searchTerms
936
        """
937
        try:
938
            return get_search_result_count(searchTerms)
939
        finally:
940
            close_session()
941
 
4063 chandransh 942
    def getPendingOrdersInventory(self, vendorId):
4024 chandransh 943
        """
4063 chandransh 944
        Returns a list of inventory stock for items for which there are pending orders for the given vendor.
4024 chandransh 945
        """
946
        try:
4063 chandransh 947
            pending_items_inventory = get_pending_orders_inventory(vendorId)
4024 chandransh 948
            return [AvailableAndReservedStock(itemId = i[0], available=i[1], reserved=i[2], minimumStock=0) for i in pending_items_inventory]
949
        finally:
950
            close_session()
951
 
4295 varun.gupt 952
    def getProductNotifications(self, startDateTime):
953
        '''
954
        Returns a list of Product Notification objects each representing user requests for notification
955
        '''
956
        try:
957
            return [to_t_product_notification_request(notification) for notification in get_product_notifications(to_py_date(startDateTime))]
958
        finally:
959
            close_session()
960
 
961
    def getProductNotificationRequestCount(self, startDateTime):
962
        '''
963
        Returns list of items and the counts of product notification requests
964
        '''
965
        try:
966
            notification_request_counts = [(notification.item, count) for notification, count in get_product_notification_request_count(to_py_date(startDateTime))]
967
 
968
            return [to_t_product_notification_request_count(count) for count in notification_request_counts]
969
 
970
        finally:
971
            close_session()
972
 
3376 rajveer 973
    def isAlive(self, ):
974
        """
975
        For checking weather service is active alive or not. It also checks connectivity with database
976
        """
977
        try:
978
            return is_alive()
979
        finally:
980
            close_session()
981
 
766 rajveer 982
    def closeSession(self, ):
3376 rajveer 983
        """
984
        For closing the open session in sqlalchemy
985
        """
4332 anupam.sin 986
        close_session()
987
 
988
    def addVendor(self, vendor):
989
        """
990
        add a new vendor
991
        """
992
        try:
993
            return add_vendor(vendor)
994
        finally:
995
            close_session()
996
 
997
    def addWarehouseVendorMapping(self, warehouse_id, vendorId):
998
        """
999
        map given warehouse id to given vendor id
1000
        """
1001
        try:
1002
            return add_warehouse_vendor_mapping(warehouse_id, vendorId)
1003
        finally:
1004
            close_session()
1005
 
1006
    def getVendorsForWarehouse(self, warehouse_id):
1007
        """
1008
        get all vendors for the given warehouse_id
1009
        """
1010
        try:
1011
            vendors = get_vendors_for_warehouse(warehouse_id)
1012
            ret_vendors = []
1013
            for vendor in vendors:
1014
                if vendor:
1015
                    ret_vendors.append(to_t_vendor(vendor))
1016
            return ret_vendors
1017
        finally:
1018
            close_session()
1019
 
1020
    def getWarehousesForVendor(self, vendorId):
1021
        '''
1022
        get all warehouses for the given vendorId
1023
        '''
1024
        try:
1025
            warehouses = get_warehouses_for_vendor(vendorId)
1026
            ret_warehouses = []
1027
            for warehouse in warehouses:
1028
                if warehouse:
1029
                    ret_warehouses.append(to_t_warehouse(warehouse))
1030
            return ret_warehouses
1031
        finally:
4370 anupam.sin 1032
            close_session()
1033
 
1034
    def processPurchaseOrder(self, filename, vendorId):
1035
        '''
1036
        create purchase order for given filename
1037
        '''
1038
        workbook = xlrd.open_workbook(filename)
1039
        sheet = workbook.sheet_by_index(0)
1040
        num_rows = sheet.nrows
1041
        if(sheet.ncols != 2):
1042
            raise InventoryServiceException(101, "Sheet format Invalid")
1043
        catalogClient = CatalogClient().get_client()
1044
        lineitems = []
1045
        purchaseOrder = PurchaseOrder()
1046
        purchaseOrder.supplierId = vendorId
1047
        purchaseOrder.warehouseId = 7
1048
        totalCost = 0
1049
 
1050
        for rownum in range(1, num_rows):
1051
            itemId = sheet.row_values(rownum)[0]
1052
            quantity = sheet.row_values(rownum)[1]
1053
 
1054
            lineitem = LineItem()
1055
            item = catalogClient.getItem(itemId)
1056
            lineitem.itemId = item.id
1057
            lineitem.productGroup = item.productGroup
1058
            lineitem.brand = item.brand
1059
            lineitem.modelNumber = item.modelNumber
1060
            lineitem.modelName = item.modelName
1061
            lineitem.color = item.color
1062
            lineitem.quantity = quantity
1063
            lineitem.unfulfilledQuantity = quantity
1064
            try:
1065
                item_pricing = catalogClient.getItemPricing(itemId, vendorId)
1066
                lineitem.unitPrice = item_pricing.transferPrice
1067
            except:
1068
                raise InventoryServiceException(101, "Unable to get pricing for " + item.brand + " " + item.modelName \
1069
                                + " " + item.modelNumber + "(Item id : " + str(int(itemId)) + \
1070
                                ")" + " for VendorId : " + str(vendorId))
1071
            lineitem.fulfilled = 0
1072
 
1073
            totalCost += quantity*lineitem.unitPrice
1074
 
1075
            lineitems.append(lineitem)
1076
 
1077
        purchaseOrder.totalCost = totalCost
1078
        purchaseOrder.lineitems = lineitems
1079
 
1080
        whClient = WarehouseClient().get_client()
1081
        po_id = whClient.createPurchaseOrder(purchaseOrder)
1082
        return "POId:" + str(po_id)