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,\
635 rajveer 10
    get_item, get_all_items, get_all_items_by_status, get_item_inventoy,\
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
 
267
    def getItemInventory(self, item_id):
268
        """
269
        Parameters:
270
        - item_id
271
        """
272
        log_entry(self, "item inventory requested")
766 rajveer 273
        try:
274
            inventory = get_item_inventoy(item_id)
275
            return to_t_item_inventory(inventory, item_id)
276
        finally:
277
            close_session()
122 ashish 278
 
635 rajveer 279
    def getItemInventoryByItemId(self, item_id):
280
        """
281
        Parameters:
282
         - item_id
283
        """
284
        log_entry(self, "item inventory requested")
766 rajveer 285
        try:
286
            inventory = get_item_inventory_by_item_id(item_id)
287
            return to_t_item_inventory(inventory, item_id)
288
        finally:
289
            close_session()
635 rajveer 290
 
3348 varun.gupt 291
    def getAllBrandsByCategory(self, categoryId):
292
        """
293
        Parameters:
294
         - categoryId
295
        """
296
        try:
297
            return get_all_brands_by_category(categoryId)
298
        finally:
299
            close_session()
300
 
635 rajveer 301
    '''
379 ashish 302
    def getItemInventoryByCatalogId(self, item_id):
303
        """
304
        Parameters:
305
         - item_id
306
        """
383 ashish 307
        log_entry(self, "item inventory requested")
308
        inventory = get_item_inventory_by_catalog_id(item_id)
309
        return to_t_item_inventory(inventory, item_id)
635 rajveer 310
    '''
311
 
3849 chandransh 312
    def getAllItemsInRange(self, offset, limit):
313
        """
314
        Gets at most 'limit' items starting at the given offset. Returns an empty list if there are no more items at the given offset.
315
 
316
        Parameters:
317
         - offset
318
         - limit
319
        """
320
        try:
321
            items = get_all_items(False, offset, limit)
322
            return [to_t_item(item) for item in items]
323
        finally:
324
            close_session()
379 ashish 325
 
3849 chandransh 326
    def getAllItemsByStatusInRange(self, itemStatus, offset, limit):
327
        """
328
        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.
329
 
330
        Parameters:
331
         - itemStatus
332
         - offset
333
         - limit
334
        """
335
        log_entry(self, "all items requested")
336
        try:
337
            items = get_all_items_by_status(itemStatus, offset, limit)
338
            return [to_t_item(item) for item in items]
339
        finally:
340
            close_session()
341
 
342
    def getItemCountByStatus(self, useStatus, itemStatus):
343
        """
344
        Gets a count of all items by status
345
 
346
        Parameters:
347
         - useStatus
348
         - itemStatus
349
        """
350
        try:
351
            return get_item_count_by_status(useStatus, itemStatus)
352
        finally:
353
            close_session()
354
 
643 chandransh 355
    def getItemAvailabilityAtLocation(self, warehouse_loc, item_id):
356
        """
3355 chandransh 357
        Determines the warehouse that should be used to fulfil an order for the given item.
358
        It first checks all the warehouses which are in the logistics location given by the
359
        warehouse_loc parameter. If none of the warehouses there have any inventory, then the
360
        preferred warehouse for the item is used.
643 chandransh 361
 
3355 chandransh 362
        Returns an ordered list of size 4 with following elements in the given order:
363
        1. Logistics location of the warehouse which was finally picked up to ship the order.
364
        2. Id of the warehouse which was finally picked up.
365
        3. Inventory size in the selected warehouse.
366
        4. Expected delay added by the category manager.
367
 
643 chandransh 368
        Parameters:
369
         - warehouse_loc
370
         - item_id
371
        """
766 rajveer 372
        try:
373
            return get_item_availability_for_location(warehouse_loc, item_id)
374
        finally:
375
            close_session()
376
 
122 ashish 377
    def getItemAvailibilityAtWarehouse(self, warehouse_id, item_id):
378
        """
379
        Parameters:
380
         - warehouse_id
381
         - item_id
382
        """
383
        log_entry(self, "item availability at warehouse requested")
766 rajveer 384
        try:
385
            return get_item_availability_for_warehouse(warehouse_id, item_id)
386
        finally:
387
            close_session()
388
 
2080 rajveer 389
    def markItemAsContentComplete(self, entityId, category, brand, modelName, modelNumber):
390
        """
391
        Parameters:
392
         - entityId
393
         - category
394
         - brand
395
         - modelName
396
         - modelNumber
397
        """
398
        try:
399
            return mark_item_as_content_complete(entityId, category, brand, modelName, modelNumber)
400
        finally:
401
            close_session()
2075 rajveer 402
 
403
 
122 ashish 404
    def getItemInventoryHistory(self, id, item_id, warehouse_id, from_date, to_date):
405
        """
406
        Parameters:
407
         - id
408
         - item_id
409
         - warehouse_id
410
         - from_date
411
         - to_date
412
        """
413
        pass
414
 
415
    def getAllWarehouses(self, isActive):
416
        """
417
        Parameters:
418
        - isActive
419
        """
766 rajveer 420
        try:
421
            if isActive:
422
                warehouses = get_all_warehouses_by_status(status.ACTIVE)
423
            else:
424
                warehouses = get_all_warehouses_by_status(None)
425
 
426
            ret_warehouses = []
427
 
428
            for warehouse in warehouses:
429
                ret_warehouses.append(to_t_warehouse(warehouse))
430
            return ret_warehouses
431
        finally:
432
            close_session()
433
 
122 ashish 434
    def getWarehouse(self, warehouse_id):
435
        """
436
        Parameters:
437
         - warehouse_id
438
        """
439
        log_entry(self, "get warehouse call")
766 rajveer 440
        try:
441
            warehouse = get_Warehouse(warehouse_id)
442
            if warehouse:
443
                return to_t_warehouse(warehouse)
444
            else:
445
                raise InventoryServiceException(101, "no such warehouse")
446
        finally:
447
            close_session()
448
 
122 ashish 449
    def getAllWarehousesForItem(self, item_id):
450
        """
451
        Parameters:
452
         - item_id
453
        """
454
        log_entry(self, "getting all warehouses for item")
766 rajveer 455
        try:
456
            all_warehouses = get_all_warehouses_for_item(item_id)
457
            t_warehouses = []
458
            for warehouse in all_warehouses:
459
                t_warehouses.append(to_t_warehouse(warehouse))
460
            return t_warehouses
461
        finally:
462
            close_session()
463
 
122 ashish 464
    def getAllItemsForWarehouse(self, warehouse_id):
465
        """
466
        Parameters:
467
         - warehouse_id
468
        """
469
        log_entry(self, "getting all items for warehouse")
766 rajveer 470
        try:
471
            all_items = get_all_items_for_warehouse(warehouse_id)
472
            t_items = []
473
            for item in all_items:
474
                t_items.append(to_t_item(item))
475
            return t_items
476
        finally:
477
            close_session()
871 chandransh 478
 
479
    def reserveItemInWarehouse(self, itemId, warehouseId, quantity):
480
        """
481
        Increases the reservation count for an item in a warehouse. Should always succeed normally.
482
 
483
        Parameters:
484
         - itemId
485
         - warehouseId
486
        """
487
        log_entry(self, "reserveItemInWarehouse called")
488
        try:
489
            return reserve_item_in_warehouse(itemId, warehouseId, quantity)
490
        finally:
491
            close_session()
492
 
493
    def reduceReservationCount(self, itemId, warehouseId, quantity):
494
        """
495
        Decreases the reservation count for an item in a warehouse. Should always succeed normally.
496
 
497
        Parameters:
498
         - itemId
499
         - warehouseId
500
        """
501
        log_entry(self, "reduceReservationCount called")
502
        try:
503
            return reduce_reservation_count(itemId, warehouseId, quantity)
504
        finally:
505
            close_session()
766 rajveer 506
 
122 ashish 507
    def updateItem(self, item):
508
        """
509
        Parameters:
510
         - item
511
        """
512
        log_entry(self, "addItem called")
766 rajveer 513
        try:
514
            return update_item(item)
515
        finally:
516
            close_session()
517
 
626 chandransh 518
    def getBestSellers(self, start_index=0, total_items=None, category=-1):
766 rajveer 519
        try:
520
            if total_items is None:
521
                total_items = self.best_sellers_limit
522
            stop_index = start_index + total_items
523
            return get_best_sellers(start_index, stop_index, category)
524
        finally:
525
            close_session()
526
 
1926 rajveer 527
    def getBestSellersCatalogIds(self, start_index, total_items, brand, category=-1):
548 rajveer 528
        """
529
        Parameters:
530
         - beginIndex
531
         - totalItems
532
        """
766 rajveer 533
        try:
534
            if total_items is None:
535
                total_items = self.best_sellers_limit
536
            stop_index = start_index + total_items
1926 rajveer 537
            return get_best_sellers_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 538
        finally:
539
            close_session()
540
 
591 chandransh 541
    def getBestSellersCount(self, ):
766 rajveer 542
        try:
2093 chandransh 543
            return get_best_sellers_count()
766 rajveer 544
        finally:
545
            close_session()
546
 
591 chandransh 547
    def getBestDeals(self,):
766 rajveer 548
        try:
549
            return get_best_deals()
550
        finally:
551
            close_session()
552
 
1926 rajveer 553
    def getBestDealsCatalogIds(self, start_index, total_items, brand,category=-1):
548 rajveer 554
        """
555
        Parameters:
556
         - beginIndex
557
         - totalItems
558
        """
766 rajveer 559
        try:
560
            stop_index = start_index + total_items
1926 rajveer 561
            return get_best_deals_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 562
        finally:
563
            close_session()
564
 
591 chandransh 565
    def getBestDealsCount(self, ):
766 rajveer 566
        try:
567
            return get_best_deals_count()
568
        finally:
569
            close_session()
570
 
591 chandransh 571
    def getLatestArrivals(self,):
766 rajveer 572
        try:
573
            return get_latest_arrivals(self.latest_arrivals_limit)
574
        finally:
575
            close_session()
2975 chandransh 576
 
577
    def getLatestArrivalsCatalogIds(self, beginIndex, totalItems, brand, categories):
548 rajveer 578
        """
2975 chandransh 579
        Returns the list of catalog ids of latest arrivals in the given categories of the given brand.
580
        To ignore the categories, pass the list as empty. To ignore brand, pass it as null.
581
 
548 rajveer 582
        Parameters:
583
         - beginIndex
584
         - totalItems
2975 chandransh 585
         - brand
586
         - categories
548 rajveer 587
        """
766 rajveer 588
        try:
2975 chandransh 589
            if beginIndex > self.latest_arrivals_limit:
766 rajveer 590
                return []
2975 chandransh 591
            stopIndex = beginIndex + totalItems
592
            if stopIndex > self.latest_arrivals_limit:
593
                stopIndex = self.latest_arrivals_limit
594
            return get_latest_arrivals_catalog_ids(beginIndex, stopIndex, brand, categories)
766 rajveer 595
        finally:
596
            close_session()
597
 
591 chandransh 598
    def getLatestArrivalsCount(self, ):
766 rajveer 599
        try:
600
            return get_latest_arrivals_count(self.latest_arrivals_limit)
601
        finally:
602
            close_session()
591 chandransh 603
 
4283 anupam.sin 604
    def getItemPricing(self, itemId, vendorId):
1334 chandransh 605
        """
606
        Returns the pricing information of an item associated with the vendor of the given warehouse.
607
        Raises an exception if either the item, vendor or the associated pricing information can't be found.
608
 
609
        Parameters:
610
         - itemId
611
         - warehouseId
612
        """
1341 chandransh 613
        try:
4283 anupam.sin 614
            return to_t_vendor_item_pricing(get_item_pricing(itemId, vendorId))
1341 chandransh 615
        finally:
616
            close_session()
1991 ankur.sing 617
 
618
 
619
    def getAllItemPricing(self, itemId):
620
        """
621
        Returns list of the pricing information of an item associated an item.
622
        Raises an exception if the item can't be found.
623
 
624
        Parameters:
625
         - itemId
626
        """
627
        try:
628
            return [to_t_vendor_item_pricing(vid) for vid in get_all_item_pricing(itemId)]
629
        finally:
630
            close_session()
1334 chandransh 631
 
1155 rajveer 632
    def generateNewEntityID(self, ):
633
        try:
634
            return generate_new_entity_id()
635
        finally:
636
            close_session()
637
 
635 rajveer 638
    def putCategoryObject(self, object):
639
        """
640
        Parameters:
641
         - object
642
        """
766 rajveer 643
        try:
644
            return put_category_object(object)
645
        finally:
646
            close_session()
647
 
635 rajveer 648
    def getCategoryObject(self, ):
766 rajveer 649
        try:
650
            return get_category_object()
651
        finally:
652
            close_session()
1970 rajveer 653
 
654
    def addCategory(self, category):
655
        """
656
        Parameters:
657
         - category
658
        """
659
        try:
660
            return add_category(category)
661
        finally:
662
            close_session()
663
 
664
    def getCategory(self, id):
665
        """
666
        Parameters:
667
         - id
668
        """
669
        try:
670
            return to_t_category(get_category(id))
671
        finally:
672
            close_session()
673
 
674
    def getAllCategories(self, ):
675
        try:
676
            categories = get_all_categories()
677
            return [to_t_category(category) for category in categories]
678
        finally:
679
            close_session()
680
 
681
 
2116 ankur.sing 682
    def addVendorItemPricing(self, vendorItemPricing):
1991 ankur.sing 683
        """
2116 ankur.sing 684
        Adds vendor prices corresponding to the item. If pricing already exists then updates the prices. 
1991 ankur.sing 685
        Raises an exception if either the item or vendor can't be found corresponding to their ids.
686
 
687
        Parameters:
688
         - vendorItemPricing
689
        """
690
        log_entry(self, "updateVendorItemPricing called")
691
        try:
2116 ankur.sing 692
            return add_vendor_pricing(vendorItemPricing)
1991 ankur.sing 693
        finally:
694
            close_session()
695
 
2065 ankur.sing 696
    def getAllVendors(self, ):
697
        """
698
        Return list of all vendors
699
        """
700
        return [to_t_vendor(v) for v in get_all_vendors()]
2116 ankur.sing 701
 
4423 phani.kuma 702
    def getAllSimilarItems(self, itemId):
703
        """
704
        Returns list of similar items.
705
 
706
        Parameters:
707
         - itemId
708
        """
709
        return get_all_similar_items_catalog_ids(itemId)
710
 
711
    def addSimilarItem(self, itemId, catalogItemId):
712
        """
713
        add similar item.
714
 
715
        Parameters:
716
         - itemId, catalogItemId
717
        """
718
        try:
719
            return add_similar_item_catalog_id(itemId, catalogItemId)
720
        finally:
721
            close_session()
722
 
723
    def deleteSimilarItem(self, itemId, catalogItemId):
724
        """
725
        delete similar items.
726
 
727
        Parameters:
728
         - itemId, catalogItemIds
729
        """
730
        try:
731
            return delete_similar_item_catalog_id(itemId, catalogItemId)
732
        finally:
733
            close_session()
734
 
2116 ankur.sing 735
    def itemExists(self, productGroup, brand, modelNumber, color, vendorId, category):
736
        try:
737
            return check_vendor_item_mapping(productGroup, brand, modelNumber, color, vendorId, category)
738
        finally:
739
            close_session()
2065 ankur.sing 740
 
2358 ankur.sing 741
    def addVendorItemMapping(self, key, vendorItemMapping):
2116 ankur.sing 742
        """
2358 ankur.sing 743
        Adds VendorItemMapping. Updates VendorItemMapping if exists corresponding to the item key.
2116 ankur.sing 744
 
745
        Parameters:
2358 ankur.sing 746
         - key
2116 ankur.sing 747
         - vendorItemMapping
748
        """
749
        log_entry(self, "addVendorItemMapping called")
750
        try:
2358 ankur.sing 751
            return add_vendor_item_mapping(key, vendorItemMapping)
2116 ankur.sing 752
        finally:
753
            close_session()
754
 
755
    def getVendorItemMappings(self, itemId):
756
        """
757
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
758
        Raises an exception if item not found corresponding to itemId
759
 
760
        Parameters:
761
         - itemId
762
        """
763
        try:
2120 ankur.sing 764
            item_mappings = get_item_mappings(itemId)
765
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
2116 ankur.sing 766
        finally:
767
            close_session()
768
 
769
    def checkSimilarItem(self, productGroup, brand, modelNumber, color):
770
        """
771
        Checks if similar item exists (with same ProductGroup, Brand, ModelNumber, Color)
772
        If yes, returns the itemId else returns 0
773
 
774
        Parameters:
775
         - productGroup
776
         - brand
777
         - modelNumber
778
         - color
779
        """
780
        try:
781
            return check_similar_item(productGroup, brand, modelNumber, color)
782
        finally:
783
            close_session()
784
 
2286 ankur.sing 785
    def changeItemRiskyFlag(self, itemId, risky):
786
        """
787
        Marks/Unmarks an item as risky. This flag is used for automatic marking of an item as INACTIVE in case of zero inventory.
788
 
789
        Parameters:
790
         - itemId
791
         - risky
792
        """
793
        try:
794
            change_risky_flag(itemId, risky)
795
        finally:
796
            close_session()
2116 ankur.sing 797
 
2358 ankur.sing 798
    def getItemsByVendorCategory(self, vendorCategory):
799
        """
800
        Return list of items filtered by vendor category.
801
        Raises exception if vendorCategory is null.
802
 
803
        Parameters:
804
         - vendorCategory
805
        """
806
        try:
807
            return [to_t_item(item) for item in get_items_by_vendor_category(vendorCategory)]
808
        finally:
809
            close_session()
810
 
811
    def getItemsByRiskyFlag(self, ):
812
        """
813
        Returns list of items marked as risky.
814
        """
815
        try:
816
            return [to_t_item(item) for item in get_risky_items()]
817
        finally:
818
            close_session()
2809 rajveer 819
 
820
    def getSimilarItemsCatalogIds(self, beginIndex, totalItems, itemId):
821
        """
822
        Returns list of catalog ids of items with same similarity index as of the given itemId
823
 
824
        Parameters:
825
         - beginIndex
826
         - totalItems
827
         - itemId
828
        """
829
        try:
830
            return get_similar_items_catalog_ids(beginIndex, beginIndex+totalItems, itemId)
831
        finally:
832
            close_session()
3079 rajveer 833
 
834
    def addProductNotification(self, itemId, email):
835
        """
836
        Add user requests for out of stock items. Once user will ask for notify me an entry will
837
 
838
        Parameters:
839
        - itemId
840
        - email
841
        """
842
        try:
843
            return add_product_notification(itemId, email)
844
        finally:
845
            close_session()
2358 ankur.sing 846
 
3086 rajveer 847
    def sendProductNotifications(self, ):
848
        """
849
        Send the product notifications to the users for items which has stock.
850
        """
851
        try:
852
            return send_product_notifications()
853
        finally:
854
            close_session()
3557 rajveer 855
 
856
 
857
    def getAllSources(self, ):
858
        """
859
        Return list of all sources
860
        """
861
        try:
862
            return get_all_sources()
863
        finally:
864
            close_session()
865
 
866
    def getItemPricingBySource(self, itemId, sourceId):
867
        """
868
        Returns the pricing information of an item. If no information is found, exception will be thrown.
3376 rajveer 869
 
3557 rajveer 870
        Parameters:
871
         - itemId
872
         - sourceId
873
        """
874
        try:
875
            return to_t_source_item_pricing(get_item_pricing_by_source(itemId, sourceId))
876
        finally:
877
            close_session()
878
 
879
    def addSourceItemPricing(self, sourceItemPricing):
880
        """
881
        Adds prices to be displayed corresponding to the item if user comes from a source.
882
 
883
        Parameters:
884
         - sourceItemPricing
885
        """
886
        try:
887
            add_source_item_pricing(sourceItemPricing)
888
        finally:
889
            close_session()
890
 
891
    def getAllSourcePricing(self, itemId):
892
        """
893
        Returns the list of source pricing information of an item.
894
        Raises an exception if item not found corresponding to itemId
895
 
896
        Parameters:
897
         - itemId
898
        """
899
        try:
900
            return [to_t_source_item_pricing(source_item_pricing) for source_item_pricing in get_all_source_pricing(itemId)]
901
#        return [to_t_item(item) for item in get_risky_items()]
902
        finally:
903
            close_session()
904
 
905
    def getItemForSource(self, item_id, sourceId):
906
        """
907
        Parameters:
908
         - item_id
909
         - sourceId
910
        """
911
        try:
912
            return to_t_item(get_item_for_source(item_id, sourceId))
913
        finally:
914
            close_session()
3872 chandransh 915
 
916
    def searchItemsInRange(self, searchTerms, offset, limit):
917
        """
918
        Searches items matching the the given terms in the catalog
3557 rajveer 919
 
3872 chandransh 920
        Parameters:
921
         - searchTerms
922
        """
923
        try:
924
            return [to_t_item(item) for item in search_items(searchTerms, offset, limit)]
925
        finally:
926
            close_session()
927
 
928
    def getSearchResultCount(self, searchTerms):
929
        """
930
        Gets the count of search results for the given search terms so that the user can go through all the pages.
931
 
932
        Parameters:
933
         - searchTerms
934
        """
935
        try:
936
            return get_search_result_count(searchTerms)
937
        finally:
938
            close_session()
939
 
4063 chandransh 940
    def getPendingOrdersInventory(self, vendorId):
4024 chandransh 941
        """
4063 chandransh 942
        Returns a list of inventory stock for items for which there are pending orders for the given vendor.
4024 chandransh 943
        """
944
        try:
4063 chandransh 945
            pending_items_inventory = get_pending_orders_inventory(vendorId)
4024 chandransh 946
            return [AvailableAndReservedStock(itemId = i[0], available=i[1], reserved=i[2], minimumStock=0) for i in pending_items_inventory]
947
        finally:
948
            close_session()
949
 
4295 varun.gupt 950
    def getProductNotifications(self, startDateTime):
951
        '''
952
        Returns a list of Product Notification objects each representing user requests for notification
953
        '''
954
        try:
955
            return [to_t_product_notification_request(notification) for notification in get_product_notifications(to_py_date(startDateTime))]
956
        finally:
957
            close_session()
958
 
959
    def getProductNotificationRequestCount(self, startDateTime):
960
        '''
961
        Returns list of items and the counts of product notification requests
962
        '''
963
        try:
964
            notification_request_counts = [(notification.item, count) for notification, count in get_product_notification_request_count(to_py_date(startDateTime))]
965
 
966
            return [to_t_product_notification_request_count(count) for count in notification_request_counts]
967
 
968
        finally:
969
            close_session()
970
 
3376 rajveer 971
    def isAlive(self, ):
972
        """
973
        For checking weather service is active alive or not. It also checks connectivity with database
974
        """
975
        try:
976
            return is_alive()
977
        finally:
978
            close_session()
979
 
766 rajveer 980
    def closeSession(self, ):
3376 rajveer 981
        """
982
        For closing the open session in sqlalchemy
983
        """
4332 anupam.sin 984
        close_session()
985
 
986
    def addVendor(self, vendor):
987
        """
988
        add a new vendor
989
        """
990
        try:
991
            return add_vendor(vendor)
992
        finally:
993
            close_session()
994
 
995
    def addWarehouseVendorMapping(self, warehouse_id, vendorId):
996
        """
997
        map given warehouse id to given vendor id
998
        """
999
        try:
1000
            return add_warehouse_vendor_mapping(warehouse_id, vendorId)
1001
        finally:
1002
            close_session()
1003
 
1004
    def getVendorsForWarehouse(self, warehouse_id):
1005
        """
1006
        get all vendors for the given warehouse_id
1007
        """
1008
        try:
1009
            vendors = get_vendors_for_warehouse(warehouse_id)
1010
            ret_vendors = []
1011
            for vendor in vendors:
1012
                if vendor:
1013
                    ret_vendors.append(to_t_vendor(vendor))
1014
            return ret_vendors
1015
        finally:
1016
            close_session()
1017
 
1018
    def getWarehousesForVendor(self, vendorId):
1019
        '''
1020
        get all warehouses for the given vendorId
1021
        '''
1022
        try:
1023
            warehouses = get_warehouses_for_vendor(vendorId)
1024
            ret_warehouses = []
1025
            for warehouse in warehouses:
1026
                if warehouse:
1027
                    ret_warehouses.append(to_t_warehouse(warehouse))
1028
            return ret_warehouses
1029
        finally:
4370 anupam.sin 1030
            close_session()
1031
 
1032
    def processPurchaseOrder(self, filename, vendorId):
1033
        '''
1034
        create purchase order for given filename
1035
        '''
1036
        workbook = xlrd.open_workbook(filename)
1037
        sheet = workbook.sheet_by_index(0)
1038
        num_rows = sheet.nrows
1039
        if(sheet.ncols != 2):
1040
            raise InventoryServiceException(101, "Sheet format Invalid")
1041
        catalogClient = CatalogClient().get_client()
1042
        lineitems = []
1043
        purchaseOrder = PurchaseOrder()
1044
        purchaseOrder.supplierId = vendorId
1045
        purchaseOrder.warehouseId = 7
1046
        totalCost = 0
1047
 
1048
        for rownum in range(1, num_rows):
1049
            itemId = sheet.row_values(rownum)[0]
1050
            quantity = sheet.row_values(rownum)[1]
1051
 
1052
            lineitem = LineItem()
1053
            item = catalogClient.getItem(itemId)
1054
            lineitem.itemId = item.id
1055
            lineitem.productGroup = item.productGroup
1056
            lineitem.brand = item.brand
1057
            lineitem.modelNumber = item.modelNumber
1058
            lineitem.modelName = item.modelName
1059
            lineitem.color = item.color
1060
            lineitem.quantity = quantity
1061
            lineitem.unfulfilledQuantity = quantity
1062
            try:
1063
                item_pricing = catalogClient.getItemPricing(itemId, vendorId)
1064
                lineitem.unitPrice = item_pricing.transferPrice
1065
            except:
1066
                raise InventoryServiceException(101, "Unable to get pricing for " + item.brand + " " + item.modelName \
1067
                                + " " + item.modelNumber + "(Item id : " + str(int(itemId)) + \
1068
                                ")" + " for VendorId : " + str(vendorId))
1069
            lineitem.fulfilled = 0
1070
 
1071
            totalCost += quantity*lineitem.unitPrice
1072
 
1073
            lineitems.append(lineitem)
1074
 
1075
        purchaseOrder.totalCost = totalCost
1076
        purchaseOrder.lineitems = lineitems
1077
 
1078
        whClient = WarehouseClient().get_client()
1079
        po_id = whClient.createPurchaseOrder(purchaseOrder)
1080
        return "POId:" + str(po_id)