Subversion Repositories SmartDukaan

Rev

Rev 1991 | Rev 2065 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
94 ashish 1
'''
2
Created on 23-Mar-2010
3
 
4
@author: ashish
5
'''
6
from elixir import *
7
from shop2020.model.v1.catalog.impl import DataService
122 ashish 8
from shop2020.model.v1.catalog.impl.DataService import Item, \
103 ashish 9
    Warehouse, ItemInventoryHistory, CurrentInventorySnapshot, ItemInfo,\
1368 chandransh 10
    ItemChangeLog, Category, EntityIDGenerator, VendorItemPricing,\
1991 ankur.sing 11
    VendorItemMapping, Vendor
122 ashish 12
from shop2020.thriftpy.model.v1.catalog.ttypes import \
13
    InventoryServiceException, status
602 chandransh 14
from shop2020.model.v1.catalog.impl.Convertors import to_t_item
94 ashish 15
import datetime
871 chandransh 16
import sys
602 chandransh 17
from shop2020.utils.Utils import log_entry, to_py_date
621 chandransh 18
from sqlalchemy import desc, asc
1970 rajveer 19
from shop2020.model.v1.catalog.impl.CategoryManager import CategoryManager
1991 ankur.sing 20
from sqlalchemy.sql.expression import and_
94 ashish 21
 
22
def initialize():
23
    DataService.initialize()
24
 
25
 
103 ashish 26
def get_all_items(is_active):
27
    if is_active:
766 rajveer 28
        items = Item.query.filter_by(status= status.ACTIVE).all()
103 ashish 29
    else:
766 rajveer 30
        items = Item.query.all()
31
    return items
32
 
103 ashish 33
def get_all_items_by_status(status):
34
    if not status:
35
        #return all items
766 rajveer 36
        items = get_all_items(False)
103 ashish 37
    else:
766 rajveer 38
        items = Item.query.filter_by(status=status).all()
39
    return items
103 ashish 40
 
635 rajveer 41
def get_item(item_id):
766 rajveer 42
    item = Item.get_by(id=item_id)
43
    return item
94 ashish 44
 
635 rajveer 45
def get_items_by_catalog_id(catalog_id):
447 rajveer 46
    query = Item.query.filter_by(catalog_item_id=catalog_id)
437 rajveer 47
    try:
635 rajveer 48
        items = query.all()
49
        return get_thrift_item_list(items)
1399 rajveer 50
    except Exception as ex:
51
        print ex
437 rajveer 52
        raise InventoryServiceException(109, "Item not found")
53
 
576 chandransh 54
def is_active(item_id):
55
    try:
635 rajveer 56
        item = get_item(item_id)
576 chandransh 57
        return item.status == status.ACTIVE
58
    except InventoryServiceException:
59
        return False
2035 rajveer 60
 
61
def get_item_status_description(itemId):
62
    item = get_item(itemId)
63
    return item.status_description
563 chandransh 64
 
94 ashish 65
def get_Warehouse(warehouse_id):
66
    return Warehouse.get_by(id=warehouse_id)
67
 
122 ashish 68
def get_all_warehouses_by_status(status):
69
    if not status:
766 rajveer 70
        warehouses = Warehouse.query.all()
122 ashish 71
    else:
851 chandransh 72
        warehouses = Warehouse.query.filter_by(status=status).all()
73
    return warehouses
122 ashish 74
 
94 ashish 75
def get_all_warehouses_for_item(item_id):
635 rajveer 76
    item = get_item(item_id)
94 ashish 77
    if not item:
122 ashish 78
        raise InventoryServiceException(108, "Some unforeseen error while obtaining item")
79
    return item.get_all_warehouses
94 ashish 80
 
122 ashish 81
def get_all_items_for_warehouse(warehouse_id):
82
    warehouse = get_Warehouse(warehouse_id)
83
    if not warehouse:
84
        raise InventoryServiceException(108, "bad warehouse")
85
    return warehouse.all_items
86
 
94 ashish 87
def add_warehouse(warehouse):
103 ashish 88
    if not warehouse:
122 ashish 89
        raise InventoryServiceException(108, "Bad warehouse")
103 ashish 90
    if get_Warehouse(warehouse.id):
91
        #warehouse is already present.
122 ashish 92
        raise InventoryServiceException(101, "Warehouse already present")
103 ashish 93
 
94 ashish 94
    ds_warehouse = Warehouse()
95
    ds_warehouse.id = warehouse.id
96
    ds_warehouse.location = warehouse.location
122 ashish 97
    ds_warehouse.status = status.ACTIVE
103 ashish 98
    ds_warehouse.addedOn = datetime.datetime.now()
483 rajveer 99
    ds_warehouse.lastCheckedOn = datetime.datetime.now()
100
    ds_warehouse.tinNumber = warehouse.tinNumber
101
    ds_warehouse.pincode = warehouse.pincode
102
    if warehouse.vendorString:
103
        ds_warehouse.vendorString = warehouse.vendorString
94 ashish 104
    session.commit()
103 ashish 105
    return ds_warehouse.id
94 ashish 106
 
122 ashish 107
def update_item(item):
108
    if not item:
109
        raise InventoryServiceException(108, "Bad item in request")
110
 
111
    if not item.id:
609 chandransh 112
        raise InventoryServiceException(101, "Missing id for update")
122 ashish 113
 
635 rajveer 114
    ds_item = get_item(item.id)
122 ashish 115
 
116
    if not ds_item:
609 chandransh 117
        raise InventoryServiceException(101, "Item missing in our database")
122 ashish 118
 
963 chandransh 119
    if item.productGroup:
120
        ds_item.product_group = item.productGroup 
121
    if item.brand:
122
        ds_item.brand = item.brand
511 rajveer 123
    if item.modelName:
124
        ds_item.model_name = item.modelName
125
    if item.modelNumber:
126
        ds_item.model_number = item.modelNumber
609 chandransh 127
    if item.color:
128
        ds_item.color = item.color
483 rajveer 129
    if item.category:
130
        ds_item.category = item.category
131
    if item.comments:
132
        ds_item.comments = item.comments
511 rajveer 133
 
122 ashish 134
    if item.catalogItemId:
135
        ds_item.catalog_item_id = item.catalogItemId
483 rajveer 136
 
137
    if item.mrp:
138
        ds_item.mrp = item.mrp
139
    if item.mop:
140
        ds_item.mop = item.mop
141
    if item.sellingPrice:
142
        ds_item.sellingPrice = item.sellingPrice
609 chandransh 143
    if item.dealerPrice:
144
        ds_item.dealerPrice = item.dealerPrice
122 ashish 145
    if item.weight:
146
        ds_item.weight = item.weight
511 rajveer 147
    if item.itemStatus:
148
        ds_item.status = item.itemStatus
2035 rajveer 149
    if item.status_description:
150
        ds_item.status_description = item.status_description
122 ashish 151
 
511 rajveer 152
    if item.startDate:
153
        ds_item.startDate = item.startDate
154
    if item.retireDate:
155
        ds_item.retireDate = item.retireDate
156
 
122 ashish 157
    if item.featureId:
158
        ds_item.feature_id = item.featureId
159
    if item.featureDescription:
160
        ds_item.feature_description = item.featureDescription
161
 
609 chandransh 162
    if item.bestDealText:
163
        ds_item.bestDealText = item.bestDealText
164
    if item.bestDealValue:
165
        ds_item.bestDealValue = item.bestDealValue
166
 
167
    ds_item.updated_on = datetime.datetime.now()
122 ashish 168
    session.commit();
169
    return ds_item.id
94 ashish 170
 
103 ashish 171
def add_item(item):
172
    if not item:
122 ashish 173
        raise InventoryServiceException(108, "Bad item in request")
635 rajveer 174
    if get_item(item.id):
122 ashish 175
        raise InventoryServiceException(101, "Item already exists")
483 rajveer 176
 
103 ashish 177
    ds_item = Item()
122 ashish 178
    if item.id:
179
        ds_item.id = item.id
963 chandransh 180
    if item.productGroup:
181
        ds_item.product_group = item.productGroup
182
    if item.brand:
183
        ds_item.brand = item.brand
515 rajveer 184
    if item.modelName:
185
        ds_item.model_name = item.modelName
186
    if item.modelNumber:
187
        ds_item.model_number = item.modelNumber
609 chandransh 188
    if item.color:
189
        ds_item.color = item.color
483 rajveer 190
    if item.category:
191
        ds_item.category = item.category
192
    if item.comments:
193
        ds_item.comments = item.comments
194
 
122 ashish 195
    if item.catalogItemId:
196
        ds_item.catalog_item_id = item.catalogItemId
2035 rajveer 197
    if item.status_description:
198
        ds_item.status_description = item.status_description
122 ashish 199
    if item.itemStatus:
200
        ds_item.status = item.itemStatus
2035 rajveer 201
    else: #If new item is added without status it will have status as IN_PROCESS
122 ashish 202
        ds_item.status = status.IN_PROCESS
2035 rajveer 203
        ds_item.status_description = "This item is in process."
204
 
103 ashish 205
    ds_item.addedOn = datetime.datetime.now()
609 chandransh 206
    ds_item.updatedOn = datetime.datetime.now()
207
 
483 rajveer 208
    if item.mrp:
209
        ds_item.mrp = item.mrp
210
    if item.mop:
211
        ds_item.mop = item.mop
212
    if item.sellingPrice:
213
        ds_item.sellingPrice = item.sellingPrice
609 chandransh 214
    if item.dealerPrice:
215
        ds_item.dealerPrice = item.dealerPrice
122 ashish 216
    if item.weight:
217
        ds_item.weight = item.weight
218
 
219
    if item.featureId:
220
        ds_item.feature_id = item.featureId
221
    if item.featureDescription:
222
        ds_item.feature_description = item.featureDescription
223
 
103 ashish 224
    if item.otherInfo:
225
        for k,v in item.otherInfo.iteritems():
226
            info = ItemInfo()
227
            info.key = k
228
            info.value = v
229
            ds_item.iteminfo.append(info)
230
    #check if categories present. If yes, add them to system
122 ashish 231
 
609 chandransh 232
    if item.bestDealValue:
233
        ds_item.bestDealValue = item.bestDealValue
234
    if item.bestDealText:
235
        ds_item.bestDealText = item.bestDealText
236
 
103 ashish 237
    session.commit();
609 chandransh 238
    return ds_item.id       
103 ashish 239
 
483 rajveer 240
def update_inventory(warehouse_id, timestamp, availability):
241
    warehouse = get_Warehouse(warehouse_id)
242
    if not warehouse:
243
        raise InventoryServiceException(107, "Warehouse? Where?")
244
 
245
    time = datetime.datetime.now()
246
    warehouse.lastCheckedOn = time
247
    warehouse.vendorString = timestamp
1368 chandransh 248
    vendor = warehouse.vendor
483 rajveer 249
 
1368 chandransh 250
    for item_key, quantity in availability.iteritems():
483 rajveer 251
        try:
1368 chandransh 252
            vendor_item_mapping = VendorItemMapping.query.filter_by(vendor=vendor, item_key=item_key).one();
253
            item = vendor_item_mapping.item
494 rajveer 254
        except:
255
            continue  
256
        try:
483 rajveer 257
            item_inventory_history = ItemInventoryHistory()
258
            item_inventory_history.warehouse = warehouse
259
            item_inventory_history.item = item
260
            item_inventory_history.timestamp = time
261
            item_inventory_history.availibility = quantity
262
 
263
            current_inventory_snapshot = CurrentInventorySnapshot.get_by(item=item, warehouse=warehouse)
264
            if not current_inventory_snapshot:
265
                current_inventory_snapshot = CurrentInventorySnapshot()
266
                current_inventory_snapshot.item = item
267
                current_inventory_snapshot.warehouse = warehouse
268
                current_inventory_snapshot.availibility = 0
871 chandransh 269
                current_inventory_snapshot.reserved = 0
483 rajveer 270
            # added the difference in the current inventory    
271
            current_inventory_snapshot.availibility = current_inventory_snapshot.availibility + quantity
272
        except:
273
            raise InventoryServiceException(108, "Some unforeseen error while updating inventory")
274
    session.commit() 
275
 
94 ashish 276
def get_item_inventoy(item_id):
277
 
278
    inventory = Item.get_by(id=item_id).currentInventory
279
    if not inventory:
122 ashish 280
        raise InventoryServiceException(108, "Some unforeseen error while updating inventory")
94 ashish 281
    return inventory
282
 
635 rajveer 283
def get_item_inventory_by_item_id(item_id):
284
    inventory = Item.get_by(id=item_id).currentInventory
379 ashish 285
    if not inventory:
286
        raise InventoryServiceException(108, "Some unforeseen error while updating inventory")
287
    return inventory
288
 
103 ashish 289
 
290
def retire_warehouse(warehouse_id):
291
    if not warehouse_id:
122 ashish 292
        raise InventoryServiceException(101, "Bad warehouse id")
103 ashish 293
    warehouse = get_Warehouse(warehouse_id)
294
    if not warehouse:
122 ashish 295
        raise InventoryServiceException(108, "warehouse id not present")
296
    warehouse.status = status.DELETED;
103 ashish 297
    session.commit()
298
 
299
def retire_item(item_id):
300
    if not item_id:
122 ashish 301
        raise InventoryServiceException(101, "bad item id")
635 rajveer 302
    item = get_item(item_id)
103 ashish 303
    if not item:
122 ashish 304
        raise InventoryServiceException(108, "item id not present")
305
    item.status = status.PHASED_OUT
306
    item.retireDate = datetime.datetime.now()
103 ashish 307
    session.commit()
122 ashish 308
 
309
#need to implement threads based solution here
103 ashish 310
def start_item_on(item_id, timestamp):
311
    if not item_id:
122 ashish 312
        raise InventoryServiceException(101, "bad item id")
635 rajveer 313
    item = get_item(item_id)
103 ashish 314
    if not item:
122 ashish 315
        raise InventoryServiceException(108, "item id not present")
103 ashish 316
 
122 ashish 317
    item.status = status.ACTIVE
318
    item.startDate = datetime.datetime.fromtimestamp(to_py_date(timestamp))
319
    add_status_change_log(item, status.ACTIVE)
103 ashish 320
    session.commit()
321
 
122 ashish 322
#need to implement threads here
103 ashish 323
def retire_item_on(item_id, timestamp):
324
    if not item_id:
122 ashish 325
        raise InventoryServiceException(101, "bad item id")
635 rajveer 326
    item = get_item(item_id)
103 ashish 327
    if not item:
122 ashish 328
        raise InventoryServiceException(108, "item id not present")
103 ashish 329
 
122 ashish 330
    item.status = status.PHASED_OUT
331
    item.retireDate = datetime.datetime.fromtimestamp(to_py_date(timestamp))
332
    add_status_change_log(item, status.PHASED_OUT)
103 ashish 333
    session.commit()
334
 
335
def add_status_change_log(item, new_status):
336
    item_change_log = ItemChangeLog()
337
    item_change_log.new_status = new_status
338
    item_change_log.old_status = item.status
339
    item_change_log.timestamp = datetime.datetime.now()
340
    item_change_log.item = item
341
    session.commit()
342
 
343
def change_item_status(item_id, new_status):
344
    if not item_id:
122 ashish 345
        raise InventoryServiceException(101, "bad item id")
635 rajveer 346
    item = get_item(item_id)
103 ashish 347
    if not item:
122 ashish 348
        raise InventoryServiceException(108, "item id not present")
103 ashish 349
 
122 ashish 350
    item.status = new_status
351
    add_status_change_log(item, new_status)
103 ashish 352
    session.commit()
353
 
354
def get_item_availability_for_warehouse(warehouse_id, item_id):
355
    if not warehouse_id:
122 ashish 356
        raise InventoryServiceException(101, "bad warehouse_id")
103 ashish 357
    if not item_id:
122 ashish 358
        raise InventoryServiceException(101, "bad item_id")
103 ashish 359
 
360
    warehouse = get_Warehouse(warehouse_id)
361
    if not warehouse:
122 ashish 362
        raise InventoryServiceException(108, "warehouse does not exist")
635 rajveer 363
    item = get_item(item_id)
504 rajveer 364
 
103 ashish 365
    if not item:
766 rajveer 366
        raise InventoryServiceException(108, "item does not exist")
122 ashish 367
 
494 rajveer 368
    query = CurrentInventorySnapshot.query.filter_by(warehouse_id = warehouse_id)
504 rajveer 369
    query = query.filter_by(item_id = item.id)
494 rajveer 370
    try:
371
        current_inventory_snapshot = query.one()
871 chandransh 372
        return current_inventory_snapshot.availibility - current_inventory_snapshot.reserved
494 rajveer 373
    except:
374
        return 0
375
    """
376
    current_inventory_snapshot = CurrentInventorySnapshot.query.filter(CurrentInventorySnapshot.warehouse_id == warehouse_id, CurrentInventorySnapshot.item_id == item_id).one()
103 ashish 377
    if not current_inventory_snapshot:
378
        return 0
379
    else:
380
        return current_inventory_snapshot.availibility
494 rajveer 381
    """
643 chandransh 382
 
871 chandransh 383
def reserve_item_in_warehouse(item_id, warehouse_id, quantity):    
384
    if not warehouse_id:
385
        raise InventoryServiceException(101, "bad warehouse_id")
386
    if not item_id:
387
        raise InventoryServiceException(101, "bad item_id")
388
 
389
    query = CurrentInventorySnapshot.query.filter_by(warehouse_id = warehouse_id, item_id = item_id)
390
    try:
391
        current_inventory_snapshot = query.one()
392
        current_inventory_snapshot.reserved = current_inventory_snapshot.reserved + quantity
393
        session.commit()
394
        return True
395
    except:
396
        print "Unexpected error:", sys.exc_info()[0]
397
        return False
398
 
399
def reduce_reservation_count(item_id, warehouse_id, quantity):
400
    if not warehouse_id:
401
        raise InventoryServiceException(101, "bad warehouse_id")
402
    if not item_id:
403
        raise InventoryServiceException(101, "bad item_id")
404
 
405
    query = CurrentInventorySnapshot.query.filter_by(warehouse_id = warehouse_id, item_id = item_id)
406
    try:
407
        current_inventory_snapshot = query.one()
408
        current_inventory_snapshot.reserved = current_inventory_snapshot.reserved - quantity
409
        session.commit()
410
        return True
411
    except:
412
        print "Unexpected error:", sys.exc_info()[0]
413
        return False
414
 
723 chandransh 415
def mark_item_as_content_complete(entity_id):
416
    content_complete_status = status.CONTENT_COMPLETE
1294 chandransh 417
    items = Item.query.filter_by(catalog_item_id=entity_id, status=status.IN_PROCESS).all()
723 chandransh 418
    current_timestamp = datetime.datetime.now()
419
    for item in items:
420
        item_change_log = ItemChangeLog()
421
        item_change_log.old_status = item.status
422
        item_change_log.new_status = content_complete_status
423
        item_change_log.timestamp = current_timestamp
424
        item_change_log.item = item
425
 
426
        item.status = content_complete_status
427
        item.updatedOn = current_timestamp
428
    session.commit()
429
    return True
1294 chandransh 430
 
643 chandransh 431
def get_item_availability_for_location(warehouse_loc, item_id):
432
    if warehouse_loc is None:
433
        raise InventoryServiceException(101, "Bad Warehouse Location")
434
    if not item_id:
1416 chandransh 435
        raise InventoryServiceException(101, "Bad Item id")
643 chandransh 436
 
1416 chandransh 437
    item = Item.get_by(id=item_id)
643 chandransh 438
    warehouses = Warehouse.query.filter_by(logisticsLocation=warehouse_loc).all()
439
    warehouse_ids = [warehouse.id for warehouse in warehouses]
440
    warehouse_retid = -1
441
    global_availability = 0
442
    for warehouse_id in warehouse_ids:
785 rajveer 443
        try:
871 chandransh 444
            current_inventory_snapshot = CurrentInventorySnapshot.query.filter_by(warehouse_id = warehouse_id, item_id = item_id).one()
445
            availability = current_inventory_snapshot.availibility - current_inventory_snapshot.reserved
785 rajveer 446
        except:
447
            availability = 0    
643 chandransh 448
        if availability > global_availability:
449
            warehouse_retid = warehouse_id
450
            global_availability = availability
451
    if warehouse_retid == -1:
759 chandransh 452
        # This is the case when all warehouses have exhausted their
453
        # inventory of this item or no warehouse is available in this
454
        # location.
1416 chandransh 455
        warehouse_retid = int(item.preferredWarehouse)
643 chandransh 456
    return [warehouse_retid, global_availability]
457
 
122 ashish 458
def get_warehouses_for_item(item_id):
643 chandransh 459
 
122 ashish 460
    if not item_id:
461
        raise InventoryServiceException(101, "bad item_id")
635 rajveer 462
    item = get_item(item_id)
122 ashish 463
 
464
    if not item:
465
        raise InventoryServiceException(101, "bad item")
466
 
483 rajveer 467
    warehouses = item.currentInventory.warehouse
501 rajveer 468
    return warehouses
469
 
626 chandransh 470
def get_best_sellers(start_index, stop_index, category=-1):
1926 rajveer 471
    query = get_best_sellers_query(category, None)
1098 chandransh 472
    best_sellers = query.all()[start_index:stop_index]
621 chandransh 473
    return get_thrift_item_list(best_sellers)
474
 
475
def get_best_sellers_count(category):
1926 rajveer 476
    count = get_best_sellers_query(category, None).count()
1120 rajveer 477
    if count is None:
478
        count = 0
766 rajveer 479
    return count
621 chandransh 480
 
1926 rajveer 481
def get_best_sellers_catalog_ids(start_index, stop_index, brand, category=-1):
482
    query = get_best_sellers_query(category, brand)
1098 chandransh 483
    best_sellers = query.all()[start_index:stop_index]
621 chandransh 484
    return [item.catalog_item_id for item in best_sellers]
1926 rajveer 485
 
1970 rajveer 486
def get_child_categories(category):
487
    cm = CategoryManager()
488
    return cm.getCategory(category).children_category_ids
489
 
1926 rajveer 490
def get_best_sellers_query(category, brand):
1098 chandransh 491
    query = Item.query.filter_by(status=status.ACTIVE).filter(Item.bestSellingRank != None)
626 chandransh 492
    if category != -1:
1970 rajveer 493
        all_categories = [category]
494
        child_categories = get_child_categories(category)
495
        if child_categories is not None:
496
            all_categories = all_categories + child_categories 
497
        query = query.filter(Item.category.in_(all_categories))
1926 rajveer 498
    if brand is not None:
499
        query = query.filter_by(brand=brand)
1098 chandransh 500
    query = query.order_by(asc(Item.bestSellingRank))
621 chandransh 501
    return query
609 chandransh 502
 
1098 chandransh 503
def get_best_deals(category=-1):
1926 rajveer 504
    query = get_best_deals_query(category, None)
1098 chandransh 505
    items = query.all()
609 chandransh 506
    return get_thrift_item_list(items)
507
 
1098 chandransh 508
def get_best_deals_count(category=-1):
1926 rajveer 509
    count = get_best_deals_query(category, None).count()
1120 rajveer 510
    if count is None:
511
        count = 0
766 rajveer 512
    return count
501 rajveer 513
 
1926 rajveer 514
def get_best_deals_catalog_ids(start_index, stop_index, brand, category=-1):
515
    query = get_best_deals_query(category, brand)
1098 chandransh 516
    best_deal_items = query.all()[start_index:stop_index]
517
    return [item.catalog_item_id for item in best_deal_items]
518
 
1926 rajveer 519
def get_best_deals_query(category, brand):
1098 chandransh 520
    query = Item.query.filter_by(status=status.ACTIVE).filter(Item.bestDealValue != None)
626 chandransh 521
    if category != -1:
1970 rajveer 522
        all_categories = [category]
523
        child_categories = get_child_categories(category)
524
        if child_categories is not None:
525
            all_categories = all_categories + child_categories 
526
        query = query.filter(Item.category.in_(all_categories))
1926 rajveer 527
    if brand is not None:
528
        query = query.filter_by(brand=brand)
1098 chandransh 529
    query = query.group_by(Item.catalog_item_id).order_by(desc(Item.bestDealValue))
530
    return query
609 chandransh 531
 
1098 chandransh 532
def get_latest_arrivals(limit, category=-1):
1926 rajveer 533
    query = get_latest_arrivals_query(category, None)
1098 chandransh 534
    items = query.all()[0:limit]
609 chandransh 535
    return get_thrift_item_list(items)
598 chandransh 536
 
1098 chandransh 537
def get_latest_arrivals_count(limit, category=-1):
1926 rajveer 538
    count = get_latest_arrivals_query(category, None).count()
1120 rajveer 539
    if count is None:
540
        count = 0
541
    count = min(count, limit)
766 rajveer 542
    return count
602 chandransh 543
 
1926 rajveer 544
def get_latest_arrivals_catalog_ids(start_index, stop_index, brand, category=-1):
545
    query = get_latest_arrivals_query(category, brand)
1098 chandransh 546
    latest_arrivals = query.all()[start_index:stop_index]
547
    return [item.catalog_item_id for item in latest_arrivals]
548
 
1926 rajveer 549
def get_latest_arrivals_query(category, brand):
1098 chandransh 550
    query = Item.query.filter_by(status=status.ACTIVE)
626 chandransh 551
    if category != -1:
1970 rajveer 552
        all_categories = [category]
553
        child_categories = get_child_categories(category)
554
        if child_categories is not None:
555
            all_categories = all_categories + child_categories 
556
        query = query.filter(Item.category.in_(all_categories))
1926 rajveer 557
    if brand is not None:
558
        query = query.filter_by(brand=brand)
1098 chandransh 559
    query = query.group_by(Item.catalog_item_id).order_by(desc(Item.startDate))
560
    return query
609 chandransh 561
 
562
def get_thrift_item_list(items):
1098 chandransh 563
    return [to_t_item(item) for item in items if item != None]
635 rajveer 564
 
1155 rajveer 565
def generate_new_entity_id():
566
    generator =  EntityIDGenerator.query.one()
567
    id = generator.id + 1
568
    generator.id = id
569
    session.commit()
570
    return id
571
 
635 rajveer 572
def put_category_object(object):
573
    category = Category.get_by(id=1)
574
    if category is None:
575
        category = Category()
576
    category.object = object    
577
    session.commit()
578
    return True
579
 
580
def get_category_object():
766 rajveer 581
    object = Category.get_by(id=1).object
582
    return object
583
 
1341 chandransh 584
def get_item_pricing(item_id, warehouse_id):
585
    item = Item.query.filter_by(id=item_id).first()
586
    if item is None:
587
        raise InventoryServiceException(101, "Bad Item")
588
 
589
    warehouse = get_Warehouse(warehouse_id)
590
    if not warehouse:
591
        raise InventoryServiceException(108, "Bad Warehouse")
592
    vendor = warehouse.vendor
593
 
594
    try:
595
        item_pricing = VendorItemPricing.query.filter_by(vendor=vendor, item=item).one()
1347 chandransh 596
        return item_pricing
1341 chandransh 597
    except sqlalchemy.orm.exc.MultipleResultsFound:
598
        raise InventoryServiceException(110, "Multiple pricing information present for Vendor: " + vendor.name + " and Item: " + str(item_id))
599
    except sqlalchemy.orm.exc.NoResultFound:
600
        raise InventoryServiceException(111, "Missing pricing information for Vendor: " + vendor.name + " and Item: " + str(item_id))
601
 
1970 rajveer 602
def add_category(t_category):
603
    category = Category.get_by(id=t_category.id)
604
    if category is None:
605
        category = Category()
606
    category.id = t_category.id 
607
    category.label = t_category.label
608
    category.description = t_category.description
609
    category.parent_category_id = t_category.parent_category_id 
610
    session.commit()
611
    return True
612
 
613
def get_category(id):
614
    return Category.query.filter_by(id=id).first()
615
 
616
def get_all_categories():
617
    return Category.query.all()
618
 
1991 ankur.sing 619
 
620
def get_all_item_pricing(item_id):
621
    item = Item.query.filter_by(id=item_id).first()
622
    if item is None:
623
        raise InventoryServiceException(101, "Bad Item")
624
    item_pricing = VendorItemPricing.query.filter_by(item=item).all()
625
    return item_pricing
626
 
627
def update_vendor_pricing(vendorItemPricing):
628
    if not vendorItemPricing:
629
        raise InventoryServiceException(108, "Bad vendorItemPricing in request")
630
    vendorId = vendorItemPricing.vendorId
631
    itemId = vendorItemPricing.itemId
632
    if not itemId:
633
        raise InventoryServiceException(101, "Missing item id for update")
634
 
635
    if not vendorId:
636
        raise InventoryServiceException(101, "Missing vendor id for update")
637
 
638
    try:
639
        vendor = Vendor.query.filter_by(id=vendorId).one()
640
    except:
641
        raise InventoryServiceException(101, "Vendor not found for vendorId " + str(vendorId))
642
 
643
    try:
644
        item = Item.query.filter_by(id=itemId).one()
645
    except:
646
        raise InventoryServiceException(101, "Item not found for vendorId " + str(itemId))
647
 
648
    try:
649
        ds_vendorItemPricing = VendorItemPricing.query.filter(and_(VendorItemPricing.vendor==vendor, VendorItemPricing.item==item)).one()
650
    except:
651
        raise InventoryServiceException(101, "VendorItemPricing not found for vendorId " + str(vendorId) + " and itemId " + str(itemId))
652
 
653
    if vendorItemPricing.mop:
654
        ds_vendorItemPricing.mop = vendorItemPricing.mop
655
    if vendorItemPricing.dealerPrice:
656
        ds_vendorItemPricing.dealerPrice = vendorItemPricing.dealerPrice
657
    if vendorItemPricing.transferPrice:
658
        ds_vendorItemPricing.transferPrice = vendorItemPricing.transferPrice
659
 
660
    session.commit()
661
    return
662
 
766 rajveer 663
def close_session():
664
    if session.is_active:
665
        print "session is active. closing it."
1399 rajveer 666
        session.close()