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