Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
557 chandransh 1
'''
2
Created on 20-Jul-2010
3
 
4
@author: ashish
5
'''
6
from shop2020.thriftpy.model.v1.user.ttypes import WidgetException as WException
7
from shop2020.thriftpy.model.v1.user.ttypes import WidgetType as WType
772 rajveer 8
from shop2020.model.v1.user.impl.Dataservice import Widget, Item, WidgetItem
557 chandransh 9
from elixir import *
947 varun.gupt 10
from sqlalchemy import desc
11
from sqlalchemy.orm import join, contains_eager
557 chandransh 12
import datetime
13
 
14
def get_widget_by_id(id):
15
    return Widget.get_by(id=id)
16
 
17
def get_item_by_id(id):
18
    return Item.get_by(id=id)
19
 
20
def get_item_by_item_id(item_id):
21
    return Item.get_by(item_id=item_id)
22
 
23
def get_widget_item(item, widget):
24
    try:
25
        query = WidgetItem.query.filter_by(item=item)
26
        query = query.filter_by(widget=widget)
27
        return query.one()
28
    except:
29
        return None
30
 
31
def add_widget(widget):
32
    if not widget:
33
        raise WException(101, "Cannot add null widget")
34
 
35
    if widget.id:
36
        raise WException(101, "id is already assigned")
37
 
38
    w = Widget()
39
    if widget.customer_id:
40
        w.customer_id = widget.customer_id
41
    w.type = widget.type
42
    w.name = widget.name
772 rajveer 43
    w.enabled = True
557 chandransh 44
 
45
    session.commit()
46
 
47
    for item in widget.items:
48
        w_item = get_item_by_item_id(item.item_id)
49
        if not w_item:
50
            #item is not present in system, we need to add the item
51
            w_item = Item()
52
            w_item.item_id = item.item_id
772 rajveer 53
            w_item.enabled = True
557 chandransh 54
            session.commit()
55
        #create a widgetitem mapping here now
56
        widget_item = get_widget_item(w_item, w)
57
        if not widget_item:
58
            widget_item = WidgetItem()
59
            widget_item.widget = w
60
            widget_item.item = w_item
61
 
62
        widget_item.added_on = datetime.datetime.now()
63
        session.commit()
64
 
65
def add_items_to_widget(widget_id, items):
66
    widget = get_widget_by_id(widget_id)
67
    if not widget:
68
        raise WException(101, "Widget not found")
772 rajveer 69
    for itemid in items:
70
        item = get_item_by_item_id(itemid)
71
        if item is None:
72
            item = Item()
73
            item.item_id = itemid
74
            item.enabled = True
557 chandransh 75
            session.commit()
76
 
772 rajveer 77
        #check if widgetitem is already present
78
        witem = get_widget_item(item, widget)
79
        if not witem:
80
            witem = WidgetItem()
81
            witem.widget = widget
82
            witem.item = item
83
        witem.added_on = datetime.datetime.now()
84
        session.commit()
85
 
86
 
87
 
88
def get_my_research_widget(userId):
89
    query = Widget.query.filter_by(user_id=userId)
557 chandransh 90
    query = query.filter_by(type=WType.MY_RESEARCH)
91
    query = query.filter_by(enabled=1)
92
    try:
93
        widget = query.one()
94
    except:
95
        widget = None
96
 
97
    if not widget:
98
        #research widget not present            
99
        widget = Widget()
100
        widget.type = WType.MY_RESEARCH
772 rajveer 101
        widget.enabled = True
102
        widget.user_id = userId
557 chandransh 103
        widget.name = "My Research"
104
        session.commit()
105
    return widget
106
 
772 rajveer 107
def update_my_research(userId, itemId):
557 chandransh 108
    isNew = False
109
    #get my research widget 
772 rajveer 110
    research_widget = get_my_research_widget(userId)
557 chandransh 111
    #search for item id
772 rajveer 112
    item = get_item_by_item_id(itemId)
557 chandransh 113
    if not item:
114
        #Ideally it should throw an exception, but we are allowing additions here for now.
115
        item = Item()
772 rajveer 116
        item.item_id = itemId
117
        item.enabled = True
557 chandransh 118
        session.commit()
119
    witem = get_widget_item(item, research_widget)
120
    if not witem:
121
        witem = WidgetItem()
122
        witem.widget = research_widget
123
        witem.item = item
124
        isNew = True
125
    witem.added_on = datetime.datetime.now()
126
    session.commit()
127
    return isNew
128
 
129
def delete_item_from_widget(widget_id, item_id):
130
    widget = get_widget_by_id(widget_id)
131
    item = get_item_by_item_id(item_id)
132
    if not item:
133
        #ideally it should throw an exception, but we are returning simply
134
        return
135
    query = WidgetItem.query.filter_by(item=item)
136
    query = query.filter_by(widget=widget)
137
    witem = query.one()
138
    witem.delete()
139
    session.commit()
140
    return
141
 
772 rajveer 142
def delete_item_from_my_research(userId, itemId):
557 chandransh 143
    #get my research widget 
772 rajveer 144
    research_widget = get_my_research_widget(userId)
557 chandransh 145
    #search for item id
772 rajveer 146
    delete_item_from_widget(research_widget.id, itemId )
147
 
557 chandransh 148
 
149
def update_widget(widget_id, enabled):
150
    widget = get_widget_by_id(widget_id)
151
    if not widget:
152
        raise WException(101, "widget not present")
153
    if enabled:
772 rajveer 154
        widget.enabled = True
557 chandransh 155
    else:
772 rajveer 156
        widget.enabled = False
557 chandransh 157
    session.commit()
158
 
159
 
772 rajveer 160
def get_widget_by_user_id(type, userId, enabled):
557 chandransh 161
    try:
162
        query = Widget.query.filter_by(type = type)
772 rajveer 163
        query = query.filter_by(userId=userId)
557 chandransh 164
 
165
        if enabled:
772 rajveer 166
            query = query.filter_by(enabled=enabled)
557 chandransh 167
 
168
        return query.one()
772 rajveer 169
    except:
557 chandransh 170
        raise WException(101, "no widget found")
171
 
172
 
821 vikas 173
def get_my_research(userId):
174
    query = Widget.query.filter_by(user_id=userId)
175
    query = query.filter_by(type=WType.MY_RESEARCH)
176
    query = query.filter_by(enabled=1)
557 chandransh 177
    try:
821 vikas 178
        widget = query.one()
557 chandransh 179
    except:
821 vikas 180
        widget = None
181
 
182
    if not widget:
183
        #browse history not present            
184
        widget = Widget()
185
        widget.type = WType.MY_RESEARCH
186
        widget.enabled = True
187
        widget.user_id = userId
188
        widget.name = "My Research"
189
        session.commit()
190
    return widget
557 chandransh 191
 
772 rajveer 192
def get_browse_history(userId):
947 varun.gupt 193
 
194
    query = session.query(WidgetItem).join(Widget).join(Item)
195
    query = query.filter(Widget.user_id == userId).filter(Widget.type == WType.BROWSE_HISTORY).filter(Widget.enabled == 1)
196
    query = query.order_by(desc(WidgetItem.added_on)).limit(10)
197
    widgetitems = query.options(contains_eager(WidgetItem.widget)).options(contains_eager(WidgetItem.item)).all()
821 vikas 198
 
947 varun.gupt 199
    widget = Widget()
200
    widget.type = WType.BROWSE_HISTORY
201
    widget.enabled = True
202
    widget.user_id = userId
203
    widget.name = "Browse History"
204
 
205
    if widgetitems is not None:
206
        for widgetitem in widgetitems:
207
            if widget.id is None:
208
                widget.id = widgetitem.widget.id
209
            widget.items.append(widgetitem)
210
    else:
821 vikas 211
        session.commit()
212
    return widget
557 chandransh 213
 
772 rajveer 214
def update_browse_history(userId, itemId):
215
    query = Widget.query.filter_by(user_id = userId)
216
    query = query.filter_by(type = WType.BROWSE_HISTORY) 
217
    try:
218
        current_widget = query.one()
219
    except:
220
        current_widget = Widget()
221
        current_widget.user_id = userId
222
        current_widget.enabled = True
223
        current_widget.type = WType.BROWSE_HISTORY
224
        current_widget.name = "Browse History"
225
    session.commit()
226
    items = []
227
    items.append(itemId)
228
    add_items_to_widget(current_widget.id, items)
229
 
230
def merge_browse_history(fromUserId, toUserId):
231
    pass
232
 
233
def close_session():
234
    if session.is_active:
235
        print "session is active. closing it."
236
        session.close()
237
 
238
'''
557 chandransh 239
def get_ratings(user_id, item_id):
240
    query = Ratings.query.filter_by(item_id = item_id)
241
    type_ratings = query.all()
242
    if user_id:
243
        query = UserRatings.query.filter_by(item_id = item_id)
244
        query = query.filter_by(user_id = user_id)
245
        try:
246
            user_rating = query.one()
247
        except:
248
            return type_ratings, None
249
        return type_ratings, user_rating
250
    return type_ratings, None
251
 
252
def update_ratings(user_id, item_id, rating, type):
253
    if user_id:
254
        if type == RType.USER_CURRENT:
255
            query = UserRatings.query.filter_by(item_id = item_id)
256
            query = query.filter_by(user_id = user_id)
257
            try:
258
                user_rating = query.one()
259
            except:
260
                user_rating = UserRatings()
261
                user_rating.user_id = user_id
262
                user_rating.item_id = item_id
263
            user_rating.rating = rating
264
            session.commit()
265
 
266
            #update cumulative ratings
267
            query = UserRatings.query.filter_by(item_id = item_id)
268
            ratings = query.all()
269
            user_count = len(ratings)
270
 
271
            query = Ratings.query.filter_by(item_id = item_id)
272
            query = Ratings.query.filter_by(type = RType.USER_ALL)
273
            try:
274
                current_rating = query.one()
275
                new_rating = (current_rating.rating*(user_count -1) + rating)/user_count
276
                current_rating.rating = new_rating
277
            except:
278
                current_rating = Ratings()
279
                current_rating.type= RType.USER_ALL
280
                current_rating.item_id = item_id
281
                current_rating.rating = rating
282
 
283
            session.commit()
284
    else:
285
        query = Ratings.query.filter_by(item_id = item_id)
286
        query = Ratings.query.filter_by(type = type)
287
        try:
288
            current_rating = query.one()
289
            current_rating.rating = rating
290
        except:
291
            current_rating = Ratings()
292
            current_rating.type= type
293
            current_rating.item_id = item_id
294
            current_rating.rating = rating
295
 
296
        session.commit()
772 rajveer 297
'''