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