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
7
from shop2020.utils.Utils import log_entry
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, \
635 rajveer 14
    retire_item_on, get_item_inventory_by_item_id, get_items_by_catalog_id,\
1308 chandransh 15
    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 16
    is_active, get_best_sellers_catalog_ids, get_best_sellers_count, put_category_object,\
871 chandransh 17
    get_category_object, mark_item_as_content_complete,\
1341 chandransh 18
    reserve_item_in_warehouse, reduce_reservation_count, generate_new_entity_id,\
2116 ankur.sing 19
    get_all_item_pricing, add_vendor_pricing, \
2035 rajveer 20
    get_item_pricing, get_category, get_all_categories, add_category,\
2116 ankur.sing 21
    get_item_status_description, get_all_vendors, check_vendor_item_mapping,\
22
    get_item_mappings, add_vendor_item_mapping, check_similar_item
122 ashish 23
from shop2020.model.v1.catalog.impl.Convertors import to_t_item,\
2065 ankur.sing 24
    to_t_item_inventory, to_t_warehouse, to_t_vendor_item_pricing, to_t_category,\
2116 ankur.sing 25
    to_t_vendor, to_t_vendor_item_mapping
122 ashish 26
from shop2020.thriftpy.model.v1.catalog.ttypes import status,\
27
    InventoryServiceException
599 chandransh 28
from shop2020.config.client.ConfigClient import ConfigClient
122 ashish 29
 
30
 
31
class InventoryServiceHandler:
32
    '''
33
    classdocs
34
    '''
599 chandransh 35
 
1249 chandransh 36
    def __init__(self, dbname='catalog'):
122 ashish 37
        '''
38
        Constructor
39
        '''
1249 chandransh 40
        DataService.initialize(dbname)
599 chandransh 41
        try:
621 chandransh 42
            config_client = ConfigClient()
43
            self.latest_arrivals_limit = int(config_client.get_property("LATEST_ARRIVALS_LIMIT"));
44
            self.best_sellers_limit = int(config_client.get_property("BEST_SELLERS_LIMIT"))
599 chandransh 45
        except:
621 chandransh 46
            self.latest_arrivals_limit = 50
47
            self.best_sellers_limit = 50
122 ashish 48
 
49
    #DONE
50
    def addItem(self, item):
51
        """
52
        Availability and inventory attributes
53
 
54
        Parameters:
55
         - item
56
        """
57
        log_entry(self, "addItem called")
785 rajveer 58
        try:
59
            return add_item(item)
60
        finally:
61
            close_session()
122 ashish 62
 
63
    def addWarehouse(self, warehouse):
64
        """
65
        Parameters:
66
         - warehouse
67
        """
68
        log_entry(self, "addWarehouse called")
785 rajveer 69
        try:
70
            return add_warehouse(warehouse)
71
        finally:
72
            close_session()
122 ashish 73
 
483 rajveer 74
 
75
    def updateInventory(self, warehouse_id, timestamp, availability):
122 ashish 76
        """
77
        Parameters:
78
         - warehouse_id
79
         - timestamp
483 rajveer 80
         - availability
122 ashish 81
        """
82
        log_entry(self, "update Inventory called")
785 rajveer 83
        try:
84
            return update_inventory(warehouse_id, timestamp, availability)
85
        finally:
86
            close_session()
87
 
88
 
635 rajveer 89
    def isActive(self, item_id):
563 chandransh 90
        """
91
        Parameters:
635 rajveer 92
         - item_id
563 chandransh 93
        """
785 rajveer 94
        try:
95
            return is_active(item_id)
96
        finally:
97
            close_session()
122 ashish 98
 
2035 rajveer 99
    def getItemStatusDescription(self, itemId):
100
        """
101
        Parameters:
102
         - itemId
103
        """
104
        try:
105
            return get_item_status_description(itemId)
106
        finally:
107
            close_session()
108
 
122 ashish 109
    def retireWarehouse(self, warehouse_id):
110
        """
111
        Parameters:
112
         - warehouse_id
113
        """
114
        log_entry(self, "retire warehouse called")
785 rajveer 115
        try:
116
            return retire_warehouse(warehouse_id)
117
        finally:
118
            close_session()
119
 
122 ashish 120
 
121
    def retireItem(self, item_id):
122
        """
123
        Parameters:
124
        - item_id
125
        """
126
        log_entry(self, "retire item called")
785 rajveer 127
        try:
128
            return retire_item(item_id)
129
        finally:
130
            close_session()
122 ashish 131
 
132
    def startItemOn(self, item_id, timestamp):
133
        """
134
        Parameters:
135
         - item_id
136
         - timestamp
137
        """
785 rajveer 138
        try:
139
            start_item_on(item_id, timestamp)
140
        finally:
141
            close_session()
122 ashish 142
 
143
    def retireItemOn(self, item_id, timestamp):
144
        """
145
        Parameters:
146
         - item_id
147
         - timestamp
148
        """
785 rajveer 149
        try:
150
            retire_item_on(item_id, timestamp)
151
        finally:
152
            close_session()
122 ashish 153
 
154
    def changeItemStatus(self, item_id, timestamp, newstatus):
155
        """
156
        Parameters:
157
         - item_id
158
         - timestamp
159
         - newstatus
160
        """
161
        log_entry(self, "change item status called")
785 rajveer 162
        try:
163
            return change_item_status(item_id, newstatus)
164
        finally:
165
            close_session()
122 ashish 166
 
785 rajveer 167
 
122 ashish 168
    def getItem(self, item_id):
169
        """
170
        Parameters:
171
         - item_id
172
        """
173
        log_entry(self, "item requested")
785 rajveer 174
        try:
2065 ankur.sing 175
            item = to_t_item( get_item(item_id))
176
            return item
785 rajveer 177
        finally:
178
            close_session()
379 ashish 179
 
635 rajveer 180
    def getItemsByCatalogId(self, catalog_item_id):
379 ashish 181
        """
182
        Parameters:
183
        - catalog_item_id
184
        """
386 ashish 185
        log_entry(self, "item requested")
766 rajveer 186
        try:
187
            return get_items_by_catalog_id(catalog_item_id)
188
        finally:
189
            close_session()
122 ashish 190
 
483 rajveer 191
 
122 ashish 192
    def getAllItems(self, isActive):
193
        """
194
        Parameters:
195
         - isActive
196
        """
197
        log_entry(self, "all items requested")
766 rajveer 198
        try:
199
            items = get_all_items(isActive)
200
            ret_items = []
201
            for item in items:
202
                if item:
203
                    ret_items.append(to_t_item(item))
204
            return ret_items
205
        finally:
206
            close_session()
207
 
122 ashish 208
    def getAllItemsByStatus(self, itemStatus):
209
        """
210
        Parameters:
211
         - itemStatus
212
        """
213
        log_entry(self, "all items requested")
766 rajveer 214
        try:
215
            items = get_all_items_by_status(itemStatus)
216
            ret_items = []
217
            for item in items:
218
                if item:
219
                    ret_items.append(to_t_item(item))
220
            return ret_items
221
        finally:
222
            close_session()
122 ashish 223
 
224
    def getItemInventory(self, item_id):
225
        """
226
        Parameters:
227
        - item_id
228
        """
229
        log_entry(self, "item inventory requested")
766 rajveer 230
        try:
231
            inventory = get_item_inventoy(item_id)
232
            return to_t_item_inventory(inventory, item_id)
233
        finally:
234
            close_session()
122 ashish 235
 
635 rajveer 236
    def getItemInventoryByItemId(self, item_id):
237
        """
238
        Parameters:
239
         - item_id
240
        """
241
        log_entry(self, "item inventory requested")
766 rajveer 242
        try:
243
            inventory = get_item_inventory_by_item_id(item_id)
244
            return to_t_item_inventory(inventory, item_id)
245
        finally:
246
            close_session()
635 rajveer 247
 
248
    '''
379 ashish 249
    def getItemInventoryByCatalogId(self, item_id):
250
        """
251
        Parameters:
252
         - item_id
253
        """
383 ashish 254
        log_entry(self, "item inventory requested")
255
        inventory = get_item_inventory_by_catalog_id(item_id)
256
        return to_t_item_inventory(inventory, item_id)
635 rajveer 257
    '''
258
 
379 ashish 259
 
643 chandransh 260
    def getItemAvailabilityAtLocation(self, warehouse_loc, item_id):
261
        """
262
        Returns the id of the warehouse with the largest inventory of the item and the inventory size. The size of list will always be 2.
263
 
264
        Parameters:
265
         - warehouse_loc
266
         - item_id
267
        """
766 rajveer 268
        try:
269
            return get_item_availability_for_location(warehouse_loc, item_id)
270
        finally:
271
            close_session()
272
 
122 ashish 273
    def getItemAvailibilityAtWarehouse(self, warehouse_id, item_id):
274
        """
275
        Parameters:
276
         - warehouse_id
277
         - item_id
278
        """
279
        log_entry(self, "item availability at warehouse requested")
766 rajveer 280
        try:
281
            return get_item_availability_for_warehouse(warehouse_id, item_id)
282
        finally:
283
            close_session()
284
 
2080 rajveer 285
    def markItemAsContentComplete(self, entityId, category, brand, modelName, modelNumber):
286
        """
287
        Parameters:
288
         - entityId
289
         - category
290
         - brand
291
         - modelName
292
         - modelNumber
293
        """
294
        try:
295
            return mark_item_as_content_complete(entityId, category, brand, modelName, modelNumber)
296
        finally:
297
            close_session()
2075 rajveer 298
 
299
 
122 ashish 300
    def getItemInventoryHistory(self, id, item_id, warehouse_id, from_date, to_date):
301
        """
302
        Parameters:
303
         - id
304
         - item_id
305
         - warehouse_id
306
         - from_date
307
         - to_date
308
        """
309
        pass
310
 
311
    def getAllWarehouses(self, isActive):
312
        """
313
        Parameters:
314
        - isActive
315
        """
766 rajveer 316
        try:
317
            if isActive:
318
                warehouses = get_all_warehouses_by_status(status.ACTIVE)
319
            else:
320
                warehouses = get_all_warehouses_by_status(None)
321
 
322
            ret_warehouses = []
323
 
324
            for warehouse in warehouses:
325
                ret_warehouses.append(to_t_warehouse(warehouse))
326
            return ret_warehouses
327
        finally:
328
            close_session()
329
 
122 ashish 330
    def getWarehouse(self, warehouse_id):
331
        """
332
        Parameters:
333
         - warehouse_id
334
        """
335
        log_entry(self, "get warehouse call")
766 rajveer 336
        try:
337
            warehouse = get_Warehouse(warehouse_id)
338
            if warehouse:
339
                return to_t_warehouse(warehouse)
340
            else:
341
                raise InventoryServiceException(101, "no such warehouse")
342
        finally:
343
            close_session()
344
 
122 ashish 345
    def getAllWarehousesForItem(self, item_id):
346
        """
347
        Parameters:
348
         - item_id
349
        """
350
        log_entry(self, "getting all warehouses for item")
766 rajveer 351
        try:
352
            all_warehouses = get_all_warehouses_for_item(item_id)
353
            t_warehouses = []
354
            for warehouse in all_warehouses:
355
                t_warehouses.append(to_t_warehouse(warehouse))
356
            return t_warehouses
357
        finally:
358
            close_session()
359
 
122 ashish 360
    def getAllItemsForWarehouse(self, warehouse_id):
361
        """
362
        Parameters:
363
         - warehouse_id
364
        """
365
        log_entry(self, "getting all items for warehouse")
766 rajveer 366
        try:
367
            all_items = get_all_items_for_warehouse(warehouse_id)
368
            t_items = []
369
            for item in all_items:
370
                t_items.append(to_t_item(item))
371
            return t_items
372
        finally:
373
            close_session()
871 chandransh 374
 
375
    def reserveItemInWarehouse(self, itemId, warehouseId, quantity):
376
        """
377
        Increases the reservation count for an item in a warehouse. Should always succeed normally.
378
 
379
        Parameters:
380
         - itemId
381
         - warehouseId
382
        """
383
        log_entry(self, "reserveItemInWarehouse called")
384
        try:
385
            return reserve_item_in_warehouse(itemId, warehouseId, quantity)
386
        finally:
387
            close_session()
388
 
389
    def reduceReservationCount(self, itemId, warehouseId, quantity):
390
        """
391
        Decreases the reservation count for an item in a warehouse. Should always succeed normally.
392
 
393
        Parameters:
394
         - itemId
395
         - warehouseId
396
        """
397
        log_entry(self, "reduceReservationCount called")
398
        try:
399
            return reduce_reservation_count(itemId, warehouseId, quantity)
400
        finally:
401
            close_session()
766 rajveer 402
 
122 ashish 403
    def updateItem(self, item):
404
        """
405
        Parameters:
406
         - item
407
        """
408
        log_entry(self, "addItem called")
766 rajveer 409
        try:
410
            return update_item(item)
411
        finally:
412
            close_session()
413
 
626 chandransh 414
    def getBestSellers(self, start_index=0, total_items=None, category=-1):
766 rajveer 415
        try:
416
            if total_items is None:
417
                total_items = self.best_sellers_limit
418
            stop_index = start_index + total_items
419
            return get_best_sellers(start_index, stop_index, category)
420
        finally:
421
            close_session()
422
 
1926 rajveer 423
    def getBestSellersCatalogIds(self, start_index, total_items, brand, category=-1):
548 rajveer 424
        """
425
        Parameters:
426
         - beginIndex
427
         - totalItems
428
        """
766 rajveer 429
        try:
430
            if total_items is None:
431
                total_items = self.best_sellers_limit
432
            stop_index = start_index + total_items
1926 rajveer 433
            return get_best_sellers_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 434
        finally:
435
            close_session()
436
 
591 chandransh 437
    def getBestSellersCount(self, ):
766 rajveer 438
        try:
2093 chandransh 439
            return get_best_sellers_count()
766 rajveer 440
        finally:
441
            close_session()
442
 
591 chandransh 443
    def getBestDeals(self,):
766 rajveer 444
        try:
445
            return get_best_deals()
446
        finally:
447
            close_session()
448
 
1926 rajveer 449
    def getBestDealsCatalogIds(self, start_index, total_items, brand,category=-1):
548 rajveer 450
        """
451
        Parameters:
452
         - beginIndex
453
         - totalItems
454
        """
766 rajveer 455
        try:
456
            stop_index = start_index + total_items
1926 rajveer 457
            return get_best_deals_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 458
        finally:
459
            close_session()
460
 
591 chandransh 461
    def getBestDealsCount(self, ):
766 rajveer 462
        try:
463
            return get_best_deals_count()
464
        finally:
465
            close_session()
466
 
591 chandransh 467
    def getLatestArrivals(self,):
766 rajveer 468
        try:
469
            return get_latest_arrivals(self.latest_arrivals_limit)
470
        finally:
471
            close_session()
472
 
1926 rajveer 473
    def getLatestArrivalsCatalogIds(self, start_index, total_items, brand, category=-1):
548 rajveer 474
        """
475
        Parameters:
476
         - beginIndex
477
         - totalItems
478
        """
766 rajveer 479
        try:
480
            if start_index > self.latest_arrivals_limit:
481
                return []
482
            stop_index = start_index + total_items
483
            if stop_index > self.latest_arrivals_limit:
484
                stop_index = self.latest_arrivals_limit
1926 rajveer 485
            return get_latest_arrivals_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 486
        finally:
487
            close_session()
488
 
591 chandransh 489
    def getLatestArrivalsCount(self, ):
766 rajveer 490
        try:
491
            return get_latest_arrivals_count(self.latest_arrivals_limit)
492
        finally:
493
            close_session()
591 chandransh 494
 
1334 chandransh 495
    def getItemPricing(self, itemId, warehouseId):
496
        """
497
        Returns the pricing information of an item associated with the vendor of the given warehouse.
498
        Raises an exception if either the item, vendor or the associated pricing information can't be found.
499
 
500
        Parameters:
501
         - itemId
502
         - warehouseId
503
        """
1341 chandransh 504
        try:
1347 chandransh 505
            return to_t_vendor_item_pricing(get_item_pricing(itemId, warehouseId))
1341 chandransh 506
        finally:
507
            close_session()
1991 ankur.sing 508
 
509
 
510
    def getAllItemPricing(self, itemId):
511
        """
512
        Returns list of the pricing information of an item associated an item.
513
        Raises an exception if the item can't be found.
514
 
515
        Parameters:
516
         - itemId
517
        """
518
        try:
519
            return [to_t_vendor_item_pricing(vid) for vid in get_all_item_pricing(itemId)]
520
        finally:
521
            close_session()
1334 chandransh 522
 
1155 rajveer 523
    def generateNewEntityID(self, ):
524
        try:
525
            return generate_new_entity_id()
526
        finally:
527
            close_session()
528
 
635 rajveer 529
    def putCategoryObject(self, object):
530
        """
531
        Parameters:
532
         - object
533
        """
766 rajveer 534
        try:
535
            return put_category_object(object)
536
        finally:
537
            close_session()
538
 
635 rajveer 539
    def getCategoryObject(self, ):
766 rajveer 540
        try:
541
            return get_category_object()
542
        finally:
543
            close_session()
1970 rajveer 544
 
545
    def addCategory(self, category):
546
        """
547
        Parameters:
548
         - category
549
        """
550
        try:
551
            return add_category(category)
552
        finally:
553
            close_session()
554
 
555
    def getCategory(self, id):
556
        """
557
        Parameters:
558
         - id
559
        """
560
        try:
561
            return to_t_category(get_category(id))
562
        finally:
563
            close_session()
564
 
565
    def getAllCategories(self, ):
566
        try:
567
            categories = get_all_categories()
568
            return [to_t_category(category) for category in categories]
569
        finally:
570
            close_session()
571
 
572
 
2116 ankur.sing 573
    def addVendorItemPricing(self, vendorItemPricing):
1991 ankur.sing 574
        """
2116 ankur.sing 575
        Adds vendor prices corresponding to the item. If pricing already exists then updates the prices. 
1991 ankur.sing 576
        Raises an exception if either the item or vendor can't be found corresponding to their ids.
577
 
578
        Parameters:
579
         - vendorItemPricing
580
        """
581
        log_entry(self, "updateVendorItemPricing called")
582
        try:
2116 ankur.sing 583
            return add_vendor_pricing(vendorItemPricing)
1991 ankur.sing 584
        finally:
585
            close_session()
586
 
2065 ankur.sing 587
    def getAllVendors(self, ):
588
        """
589
        Return list of all vendors
590
        """
591
        return [to_t_vendor(v) for v in get_all_vendors()]
2116 ankur.sing 592
 
593
    def itemExists(self, productGroup, brand, modelNumber, color, vendorId, category):
594
        try:
595
            return check_vendor_item_mapping(productGroup, brand, modelNumber, color, vendorId, category)
596
        finally:
597
            close_session()
2065 ankur.sing 598
 
2116 ankur.sing 599
    def addVendorItemMapping(self, vendorItemMapping):
600
        """
601
        Adds vendor item mapping. Updates the key it the mapping already exists.
602
 
603
        Parameters:
604
         - vendorItemMapping
605
        """
606
        log_entry(self, "addVendorItemMapping called")
607
        try:
608
            return add_vendor_item_mapping(vendorItemMapping)
609
        finally:
610
            close_session()
611
 
612
    def getVendorItemMappings(self, itemId):
613
        """
614
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
615
        Raises an exception if item not found corresponding to itemId
616
 
617
        Parameters:
618
         - itemId
619
        """
620
        try:
2120 ankur.sing 621
            item_mappings = get_item_mappings(itemId)
622
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
2116 ankur.sing 623
        finally:
624
            close_session()
625
 
626
    def checkSimilarItem(self, productGroup, brand, modelNumber, color):
627
        """
628
        Checks if similar item exists (with same ProductGroup, Brand, ModelNumber, Color)
629
        If yes, returns the itemId else returns 0
630
 
631
        Parameters:
632
         - productGroup
633
         - brand
634
         - modelNumber
635
         - color
636
        """
637
        try:
638
            return check_similar_item(productGroup, brand, modelNumber, color)
639
        finally:
640
            close_session()
641
 
642
 
766 rajveer 643
    def closeSession(self, ):
644
        close_session()