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()
1617 rajveer 94
        return widget
557 chandransh 95
    except:
1617 rajveer 96
        return None
557 chandransh 97
 
98
 
772 rajveer 99
def update_my_research(userId, itemId):
557 chandransh 100
    isNew = False
101
    #get my research widget 
772 rajveer 102
    research_widget = get_my_research_widget(userId)
1617 rajveer 103
 
104
    if not research_widget:
105
        #research widget not present            
106
        research_widget = Widget()
107
        research_widget.type = WType.MY_RESEARCH
108
        research_widget.enabled = True
109
        research_widget.user_id = userId
110
        research_widget.name = "My Research"
111
        session.commit()
112
 
557 chandransh 113
    #search for item id
772 rajveer 114
    item = get_item_by_item_id(itemId)
557 chandransh 115
    if not item:
116
        #Ideally it should throw an exception, but we are allowing additions here for now.
117
        item = Item()
772 rajveer 118
        item.item_id = itemId
119
        item.enabled = True
557 chandransh 120
        session.commit()
121
    witem = get_widget_item(item, research_widget)
122
    if not witem:
123
        witem = WidgetItem()
124
        witem.widget = research_widget
125
        witem.item = item
126
        isNew = True
127
    witem.added_on = datetime.datetime.now()
128
    session.commit()
129
    return isNew
130
 
131
def delete_item_from_widget(widget_id, item_id):
132
    widget = get_widget_by_id(widget_id)
133
    item = get_item_by_item_id(item_id)
134
    if not item:
135
        #ideally it should throw an exception, but we are returning simply
136
        return
137
    query = WidgetItem.query.filter_by(item=item)
138
    query = query.filter_by(widget=widget)
139
    witem = query.one()
140
    witem.delete()
141
    session.commit()
142
    return
143
 
772 rajveer 144
def delete_item_from_my_research(userId, itemId):
557 chandransh 145
    #get my research widget 
772 rajveer 146
    research_widget = get_my_research_widget(userId)
557 chandransh 147
    #search for item id
772 rajveer 148
    delete_item_from_widget(research_widget.id, itemId )
149
 
557 chandransh 150
 
151
def update_widget(widget_id, enabled):
152
    widget = get_widget_by_id(widget_id)
153
    if not widget:
154
        raise WException(101, "widget not present")
155
    if enabled:
772 rajveer 156
        widget.enabled = True
557 chandransh 157
    else:
772 rajveer 158
        widget.enabled = False
557 chandransh 159
    session.commit()
160
 
161
 
772 rajveer 162
def get_widget_by_user_id(type, userId, enabled):
557 chandransh 163
    try:
164
        query = Widget.query.filter_by(type = type)
772 rajveer 165
        query = query.filter_by(userId=userId)
557 chandransh 166
 
167
        if enabled:
772 rajveer 168
            query = query.filter_by(enabled=enabled)
557 chandransh 169
 
170
        return query.one()
772 rajveer 171
    except:
557 chandransh 172
        raise WException(101, "no widget found")
173
 
174
 
821 vikas 175
def get_my_research(userId):
176
    query = Widget.query.filter_by(user_id=userId)
177
    query = query.filter_by(type=WType.MY_RESEARCH)
178
    query = query.filter_by(enabled=1)
557 chandransh 179
    try:
821 vikas 180
        widget = query.one()
1617 rajveer 181
        return widget
557 chandransh 182
    except:
1626 rajveer 183
        widget = Widget()
184
        widget.type = WType.MY_RESEARCH
185
        widget.enabled = True
186
        widget.user_id = userId
187
        widget.name = "My Research"
188
        return widget
821 vikas 189
 
557 chandransh 190
 
772 rajveer 191
def get_browse_history(userId):
947 varun.gupt 192
 
193
    query = session.query(WidgetItem).join(Widget).join(Item)
194
    query = query.filter(Widget.user_id == userId).filter(Widget.type == WType.BROWSE_HISTORY).filter(Widget.enabled == 1)
195
    query = query.order_by(desc(WidgetItem.added_on)).limit(10)
196
    widgetitems = query.options(contains_eager(WidgetItem.widget)).options(contains_eager(WidgetItem.item)).all()
821 vikas 197
 
947 varun.gupt 198
    widget = Widget()
199
    widget.type = WType.BROWSE_HISTORY
200
    widget.enabled = True
201
    widget.user_id = userId
202
    widget.name = "Browse History"
203
 
204
    if widgetitems is not None:
205
        for widgetitem in widgetitems:
206
            if widget.id is None:
207
                widget.id = widgetitem.widget.id
208
            widget.items.append(widgetitem)
209
    else:
821 vikas 210
        session.commit()
211
    return widget
557 chandransh 212
 
772 rajveer 213
def update_browse_history(userId, itemId):
214
    query = Widget.query.filter_by(user_id = userId)
215
    query = query.filter_by(type = WType.BROWSE_HISTORY) 
216
    try:
217
        current_widget = query.one()
218
    except:
219
        current_widget = Widget()
220
        current_widget.user_id = userId
221
        current_widget.enabled = True
222
        current_widget.type = WType.BROWSE_HISTORY
223
        current_widget.name = "Browse History"
224
    session.commit()
225
    items = []
226
    items.append(itemId)
227
    add_items_to_widget(current_widget.id, items)
228
 
229
def merge_browse_history(fromUserId, toUserId):
230
    pass
231
 
232
def close_session():
233
    if session.is_active:
234
        print "session is active. closing it."
235
        session.close()
236
 
237
'''
557 chandransh 238
def get_ratings(user_id, item_id):
239
    query = Ratings.query.filter_by(item_id = item_id)
240
    type_ratings = query.all()
241
    if user_id:
242
        query = UserRatings.query.filter_by(item_id = item_id)
243
        query = query.filter_by(user_id = user_id)
244
        try:
245
            user_rating = query.one()
246
        except:
247
            return type_ratings, None
248
        return type_ratings, user_rating
249
    return type_ratings, None
250
 
251
def update_ratings(user_id, item_id, rating, type):
252
    if user_id:
253
        if type == RType.USER_CURRENT:
254
            query = UserRatings.query.filter_by(item_id = item_id)
255
            query = query.filter_by(user_id = user_id)
256
            try:
257
                user_rating = query.one()
258
            except:
259
                user_rating = UserRatings()
260
                user_rating.user_id = user_id
261
                user_rating.item_id = item_id
262
            user_rating.rating = rating
263
            session.commit()
264
 
265
            #update cumulative ratings
266
            query = UserRatings.query.filter_by(item_id = item_id)
267
            ratings = query.all()
268
            user_count = len(ratings)
269
 
270
            query = Ratings.query.filter_by(item_id = item_id)
271
            query = Ratings.query.filter_by(type = RType.USER_ALL)
272
            try:
273
                current_rating = query.one()
274
                new_rating = (current_rating.rating*(user_count -1) + rating)/user_count
275
                current_rating.rating = new_rating
276
            except:
277
                current_rating = Ratings()
278
                current_rating.type= RType.USER_ALL
279
                current_rating.item_id = item_id
280
                current_rating.rating = rating
281
 
282
            session.commit()
283
    else:
284
        query = Ratings.query.filter_by(item_id = item_id)
285
        query = Ratings.query.filter_by(type = type)
286
        try:
287
            current_rating = query.one()
288
            current_rating.rating = rating
289
        except:
290
            current_rating = Ratings()
291
            current_rating.type= type
292
            current_rating.item_id = item_id
293
            current_rating.rating = rating
294
 
295
        session.commit()
772 rajveer 296
'''