Subversion Repositories SmartDukaan

Rev

Rev 94 | Rev 122 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 94 Rev 103
Line 4... Line 4...
4
@author: ashish
4
@author: ashish
5
'''
5
'''
6
from elixir import *
6
from elixir import *
7
from shop2020.model.v1.catalog.impl import DataService
7
from shop2020.model.v1.catalog.impl import DataService
8
from shop2020.model.v1.catalog.impl.DataService import Category, Item, Vendor,\
8
from shop2020.model.v1.catalog.impl.DataService import Category, Item, Vendor,\
9
    Warehouse, ItemInventoryHistory, CurrentInventorySnapshot
9
    Warehouse, ItemInventoryHistory, CurrentInventorySnapshot, ItemInfo,\
-
 
10
    ItemChangeLog
10
from shop2020.thriftpy.model.v1.catalog.ttypes import Category as TCategory,\
11
from shop2020.thriftpy.model.v1.catalog.ttypes import Category as TCategory,\
11
    CatalogServiceException
12
    CatalogServiceException
12
from shop2020.thriftpy.model.v1.catalog.ttypes import Item as TItem
13
from shop2020.thriftpy.model.v1.catalog.ttypes import Item as TItem
13
from shop2020.thriftpy.model.v1.catalog.ttypes import Vendor as TVendor
14
from shop2020.thriftpy.model.v1.catalog.ttypes import Vendor as TVendor
14
from shop2020.thriftpy.model.v1.catalog.ttypes import Warehouse as TWarehouse
15
from shop2020.thriftpy.model.v1.catalog.ttypes import Warehouse as TWarehouse
15
import datetime
16
import datetime
-
 
17
from shop2020.utils.Utils import status_active, status_added, status_retired
16
 
18
 
17
 
19
 
18
def initialize():
20
def initialize():
19
    DataService.initialize()
21
    DataService.initialize()
20
    
22
    
Line 35... Line 37...
35
    category = Category.get_by(id=category_id)
37
    category = Category.get_by(id=category_id)
36
    if not category:
38
    if not category:
37
        raise CatalogServiceException(108, "Some unforeseen error while obtaining")
39
        raise CatalogServiceException(108, "Some unforeseen error while obtaining")
38
    return category.items
40
    return category.items
39
 
41
 
-
 
42
def get_all_items(is_active):
-
 
43
    if is_active:
-
 
44
        return Item.get_by(status=status_active)
-
 
45
    else:
-
 
46
        return Item.query.all()
-
 
47
    
-
 
48
def get_all_items_by_status(status):
-
 
49
    if not status:
-
 
50
        #return all items
-
 
51
        return get_all_items(False)
-
 
52
    else:
-
 
53
        return Item.get_by(status=status).all()
-
 
54
 
40
def get_Item(item_id):
55
def get_Item(item_id):
41
    return Item.get_by(id=item_id)
56
    return Item.get_by(id=item_id)
42
 
57
 
-
 
58
def get_all_vendors():
-
 
59
    return Vendor.query.all()
-
 
60
 
-
 
61
def get_all_active_vendors():
-
 
62
    return Vendor.get_by(status=status_active).all()
-
 
63
 
43
def get_Vendor(vendor_id):
64
def get_Vendor(vendor_id):
44
    return Vendor.get_by(id=vendor_id)
65
    return Vendor.get_by(id=vendor_id)
45
 
66
 
46
def get_Warehouse(warehouse_id):
67
def get_Warehouse(warehouse_id):
47
    return Warehouse.get_by(id=warehouse_id)
68
    return Warehouse.get_by(id=warehouse_id)
48
 
69
 
49
def get_all_warehouses_for_item(item_id):
70
def get_all_warehouses_for_item(item_id):
50
    item = get_Item(item_id)
71
    item = get_Item(item_id)
51
    if not item:
72
    if not item:
52
        raise CatalogServiceException(108, "Some unforeseen error while obtaining item")
73
        raise CatalogServiceException(108, "Some unforeseen error while obtaining item")
53
    return item.get_all_warehouses
74
    return item.get_all_warehouses()
54
 
75
 
55
def add_warehouse(warehouse):
76
def add_warehouse(warehouse):
-
 
77
    if not warehouse:
-
 
78
        raise CatalogServiceException(108, "Bad warehouse")
56
    warehouse = TWarehouse()
79
    if get_Warehouse(warehouse.id):
-
 
80
        #warehouse is already present.
-
 
81
        raise CatalogServiceException(101, "Warehouse already present")
-
 
82
    
57
    ds_warehouse = Warehouse()
83
    ds_warehouse = Warehouse()
58
    ds_warehouse.id = warehouse.id
84
    ds_warehouse.id = warehouse.id
59
    ds_warehouse.location = warehouse.location
85
    ds_warehouse.location = warehouse.location
-
 
86
    ds_warehouse.status = status_active
-
 
87
    ds_warehouse.addedOn = datetime.datetime.now()
60
    session.commit()
88
    session.commit()
-
 
89
    return ds_warehouse.id
61
 
90
 
62
def add_vendor(vendor):
91
def add_vendor(vendor):
-
 
92
    if get_Vendor(vendor.id):
-
 
93
        raise CatalogServiceException(101, "Vendor already present")
63
    ds_vendor = Vendor()
94
    ds_vendor = Vendor()
64
    if not vendor:
95
    if not vendor:
65
        raise CatalogServiceException(108, "Bad vendor in request")
96
        raise CatalogServiceException(108, "Bad vendor in request")
66
    ds_vendor.id = vendor.id
97
    ds_vendor.id = vendor.id
67
    ds_vendor.name = vendor.name
98
    ds_vendor.name = vendor.name
68
    session.commit()
99
    session.commit()
-
 
100
    return ds_vendor.id
69
 
101
 
-
 
102
def add_item(item):
-
 
103
    if not item:
-
 
104
        raise CatalogServiceException(108, "Bad item in request")
-
 
105
    if get_Item(item.id):
-
 
106
        raise CatalogServiceException(101, "Item already exists")
-
 
107
    
-
 
108
    ds_item = Item()
-
 
109
    ds_item.id = item.id
-
 
110
    ds_item.status = status_added
-
 
111
    ds_item.addedOn = datetime.datetime.now()
-
 
112
    ds_item.price = item.price
-
 
113
    if item.otherInfo:
-
 
114
        for k,v in item.otherInfo.iteritems():
-
 
115
            info = ItemInfo()
-
 
116
            info.key = k
-
 
117
            info.value = v
-
 
118
            ds_item.iteminfo.append(info)
-
 
119
    #check if categories present. If yes, add them to system
-
 
120
    if item.categories:
-
 
121
        for category_id in item.categories:
-
 
122
            category = get_category(category_id)
-
 
123
            if category:
-
 
124
                ds_item.category.append(category)
-
 
125
            else:
-
 
126
                raise CatalogServiceException(108, "Category not found ".category_id)
-
 
127
    session.commit();
-
 
128
    return ds_item.id
-
 
129
    
70
def add_category(category):
130
def add_category(category):
71
    try: 
131
    try: 
72
        ds_category = Category()
132
        ds_category = Category()
73
        
133
        
74
        ds_category.id = category.id
134
        ds_category.id = category.id
Line 79... Line 139...
79
            ds_category.parent= Category.get_by(id=category.parent_id)
139
            ds_category.parent= Category.get_by(id=category.parent_id)
80
        
140
        
81
        if category.childCategories:
141
        if category.childCategories:
82
            for child in category.childCategories:
142
            for child in category.childCategories:
83
                ds_category.children.append(get_category(child))
143
                ds_category.children.append(get_category(child))
-
 
144
        ds_category.status = status_active
84
        #save the category now
145
        #save the category now
85
        session.commit()
146
        session.commit()
86
        return True
147
        return ds_category.id
87
    except:
148
    except:
88
        return False
149
        return 0
89
 
150
 
90
def add_item_to_category(id, item):
151
def add_item_to_category(id, item):
91
    category = get_category(id)
152
    category = get_category(id)
92
    if not category:
153
    if not category:
93
        raise CatalogServiceException(101, "no such category exists")
154
        raise CatalogServiceException(101, "no such category exists")
94
    if not item:
155
    if not item:
95
        raise CatalogServiceException(104, "bad item")
156
        raise CatalogServiceException(104, "bad item")
96
    try:
157
    try:
97
        ds_item = Item()
158
        item_id = add_item(item)
98
        ds_item.category = category
-
 
99
        ds_item.id = item.id
159
        added_item = get_Item(item_id)
100
        ds_item.name = item.name
160
        added_item.categories.append(category)
101
        session.commit()
161
        session.commit()
102
        return True
162
        return item_id
103
    except:
163
    except:
104
        return False
164
        raise CatalogServiceException(101, "intenral error")
105
    
165
    
-
 
166
def add_item_to_category_by_id(category_id, item_id):
-
 
167
    category = get_category(category_id)
-
 
168
    item = get_Item(item_id)
-
 
169
    if not category:
-
 
170
        raise CatalogServiceException(101, "no such category exists")
-
 
171
    if not item:
-
 
172
        raise CatalogServiceException(104, "bad item")
-
 
173
    item.categories.append(category)
-
 
174
    session.commit()
-
 
175
 
106
def update_inventory(item_id, warehouse_id, quantity, timestamp):
176
def update_inventory(item_id, warehouse_id, quantity, timestamp):
107
    item = get_Item(item_id)
177
    item = get_Item(item_id)
108
    warehouse = get_Warehouse(warehouse_id) 
178
    warehouse = get_Warehouse(warehouse_id) 
109
    time = datetime.datetime.fromtimestamp(timestamp)
179
    time = datetime.datetime.fromtimestamp(timestamp)
110
    
180
    
Line 131... Line 201...
131
    inventory = Item.get_by(id=item_id).currentInventory
201
    inventory = Item.get_by(id=item_id).currentInventory
132
    if not inventory:
202
    if not inventory:
133
        raise CatalogServiceException(108, "Some unforeseen error while updating inventory")
203
        raise CatalogServiceException(108, "Some unforeseen error while updating inventory")
134
    return inventory
204
    return inventory
135
 
205
 
136
def get_item_attributes(item_id):
206
def retire_category(category_id):
-
 
207
    
-
 
208
    if not category_id:
-
 
209
        raise CatalogServiceException(101, "Bad category id")
-
 
210
    category = get_category(category_id)
-
 
211
    
-
 
212
    if not category:
-
 
213
        raise CatalogServiceException(108, "Category not present")
-
 
214
    
-
 
215
    category.status = status_retired
-
 
216
    
-
 
217
    session.commit()
-
 
218
    
-
 
219
def retire_warehouse(warehouse_id):
-
 
220
    if not warehouse_id:
-
 
221
        raise CatalogServiceException(101, "Bad warehouse id")
-
 
222
    warehouse = get_Warehouse(warehouse_id)
-
 
223
    if not warehouse:
-
 
224
        raise CatalogServiceException(108, "warehouse id not present")
-
 
225
    warehouse.status = status_retired;
-
 
226
    session.commit()
-
 
227
    
-
 
228
def retire_vendor(vendor_id):
-
 
229
    if not vendor_id:
-
 
230
        raise CatalogServiceException(101, "bad vendor id")
-
 
231
    vendor = get_Vendor(vendor_id)
-
 
232
    
-
 
233
    if not vendor:
-
 
234
        raise CatalogServiceException(108, "vendor id not present")
-
 
235
    
-
 
236
    vendor.status = status_retired
-
 
237
    session.commit()
137
    pass
238
    
-
 
239
def retire_item(item_id):
-
 
240
    if not item_id:
-
 
241
        raise CatalogServiceException(101, "bad item id")
-
 
242
    item = get_Item(item_id)
-
 
243
    if not item:
-
 
244
        raise CatalogServiceException(108, "item id not present")
-
 
245
    item.status = status_retired
-
 
246
    session.commit()
138
 
247
 
-
 
248
def start_item_on(item_id, timestamp):
-
 
249
    if not item_id:
-
 
250
        raise CatalogServiceException(101, "bad item id")
-
 
251
    item = get_Item(item_id)
-
 
252
    if not item:
-
 
253
        raise CatalogServiceException(108, "item id not present")
-
 
254
    
-
 
255
    item.status = status_active
-
 
256
    item.startDate = datetime.datetime.fromtimestamp(timestamp)
-
 
257
    add_status_change_log(item, status_active)
-
 
258
    session.commit()
-
 
259
    
-
 
260
def retire_item_on(item_id, timestamp):
-
 
261
    if not item_id:
-
 
262
        raise CatalogServiceException(101, "bad item id")
-
 
263
    item = get_Item(item_id)
-
 
264
    if not item:
-
 
265
        raise CatalogServiceException(108, "item id not present")
-
 
266
    
-
 
267
    item.status = status_retired
-
 
268
    item.retireDate = datetime.datetime.fromtimestamp(timestamp)
-
 
269
    add_status_change_log(item, status_retired)
-
 
270
    session.commit()
-
 
271
    
-
 
272
def add_status_change_log(item, new_status):
-
 
273
    item_change_log = ItemChangeLog()
-
 
274
    item_change_log.new_status = new_status
-
 
275
    item_change_log.old_status = item.status
-
 
276
    item_change_log.timestamp = datetime.datetime.now()
-
 
277
    item_change_log.item = item
-
 
278
    session.commit()
-
 
279
    
-
 
280
def change_item_status(item_id, new_status):
-
 
281
    if not item_id:
-
 
282
        raise CatalogServiceException(101, "bad item id")
-
 
283
    item = get_Item(item_id)
-
 
284
    if not item:
-
 
285
        raise CatalogServiceException(108, "item id not present")
-
 
286
    
-
 
287
    item.status = status_retired
-
 
288
    add_status_change_log(item, status_retired)
-
 
289
    session.commit()
-
 
290
    
-
 
291
def get_item_availability_for_warehouse(warehouse_id, item_id):
-
 
292
    if not warehouse_id:
-
 
293
        raise CatalogServiceException(101, "bad warehouse_id")
-
 
294
    if not item_id:
-
 
295
        raise CatalogServiceException(101, "bad item_id")
-
 
296
    
-
 
297
    warehouse = get_Warehouse(warehouse_id)
-
 
298
    if not warehouse:
-
 
299
        raise CatalogServiceException(108, "warehouse does not exist")
-
 
300
    item = get_Item(item_id)
-
 
301
    
-
 
302
    if not item:
-
 
303
            raise CatalogServiceException(108, "item does not exist")
-
 
304
    current_inventory_snapshot = CurrentInventorySnapshot.query.filter(CurrentInventorySnapshot.warehouse.id == warehouse_id, CurrentInventorySnapshot.item.id == item_id).one()
-
 
305
    if not current_inventory_snapshot:
-
 
306
        return 0
-
 
307
    else:
-
 
308
        return current_inventory_snapshot.availibility
-
 
309