Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
130 ashish 1
'''
2
Created on 28-Apr-2010
3
 
4
@author: ashish
5
'''
12696 amit.gupta 6
from elixir import session
130 ashish 7
from shop2020.model.v1.user.impl import Dataservice
12696 amit.gupta 8
from shop2020.model.v1.user.impl.CartDataAccessors import create_cart
9
from shop2020.model.v1.user.impl.Dataservice import User, UserCommunication, \
10
    Address, Affiliate, Tracker, TrackLog, MasterAffiliate, UserWidgetItem, \
18764 kshitij.so 11
    FacebookUser, UserSource, PrivateDealUser, Counter, AccessTokenizer, PrivateDealUserAddressMapping, \
12
    Line
12696 amit.gupta 13
from shop2020.thriftpy.model.v1.user.ttypes import UserContextException, \
14
    AuthenticationException, Sex, WidgetType as WType
2981 rajveer 15
from shop2020.utils.Utils import log_entry, to_py_date
12696 amit.gupta 16
from sqlalchemy import desc, select
17
from sqlalchemy.sql import and_
12722 amit.gupta 18
from sqlalchemy.sql.expression import or_
2981 rajveer 19
import datetime
15251 manish.sha 20
import os, binascii
18764 kshitij.so 21
from shop2020.model.v1.user.impl.Converters import to_t_line
18973 amit.gupta 22
tinStates = ['Delhi']
18960 amit.gupta 23
CounterStateMap = {"Andhra Pradesh":"AP",
24
                    "Arunachal Pradesh":"AR",
25
                    "Assam":"AS",
26
                    "Bihar":"BR",
27
                    "Chhattisgarh":"CT",
28
                    "Goa":"GA",
29
                    "Gujarat":"GJ",
30
                    "Haryana":"HR",
31
                    "Himachal Pradesh":"HP",
32
                    "Jammu and Kashmir":"JK",
33
                    "Jharkhand":"JH",
34
                    "Karnataka":"KA",
35
                    "Kerala":"KL",
36
                    "Madhya Pradesh":"MP",
37
                    "Maharashtra":"MH",
38
                    "Manipur":"MN",
39
                    "Meghalaya":"ML",
40
                    "Mizoram":"MZ",
41
                    "Nagaland":"NL",
42
                    "Odisha":"OR",
43
                    "Punjab":"PB",
44
                    "Rajasthan":"RJ",
45
                    "Sikkim":"SK",
46
                    "Tamil Nadu":"TN",
47
                    "Telangana":"TS",
48
                    "Tripura":"TR",
49
                    "Uttarakhand":"UT",
50
                    "Uttar Pradesh":"UP",
51
                    "West Bengal":"WB",
52
                    "Andaman and Nicobar Islands":"AN",
53
                    "Chandigarh":"CH",
54
                    "Dadra and Nagar Haveli":"DN",
55
                    "Daman and Diu":"DD",
56
                    "Delhi":"DL",
57
                    "Lakshadweep":"LD",
58
                    "Puducherry":"PY",
59
                    "Pondicherry":"PY"
60
                    }
12696 amit.gupta 61
 
3187 rajveer 62
def initialize(dbname='user', db_hostname="localhost"):
130 ashish 63
    log_entry("initialize@DataAccessor", "Initializing data service")
3187 rajveer 64
    Dataservice.initialize(dbname, db_hostname)
557 chandransh 65
 
5326 rajveer 66
def create_anonymous_user(jsession_id):
576 chandransh 67
    user=User.get_by(jsession_id=jsession_id)
5036 rajveer 68
    #user=User.query.with_lockmode("update").filter_by(jsession_id=jsession_id)
576 chandransh 69
    if not user is None:
70
        return user
5326 rajveer 71
    cart = create_cart()
557 chandransh 72
    user = User()
73
    anonymous_str = "anonymous"
576 chandransh 74
    user.email = jsession_id + "@anonymous.com"
557 chandransh 75
    user.password = anonymous_str
76
    user.name = anonymous_str
77
    user.communication_email = jsession_id + "@anonymous.com"
78
    user.jsession_id = jsession_id
79
    user.is_anonymous = True
80
    user.sex = Sex.WONT_SAY
5326 rajveer 81
    user.active_cart = cart
3499 mandeep.dh 82
    user.trust_level = 0
5326 rajveer 83
    user.active_since = datetime.datetime.now()
2747 chandransh 84
    session.commit()
557 chandransh 85
 
86
    return user
87
 
88
def get_user_by_id(user_id):
89
    return User.get_by(id=user_id)
90
 
5326 rajveer 91
def get_user_by_cart_id(cart_id):
92
    return User.get_by(active_cart_id=cart_id)
93
 
3032 mandeep.dh 94
def get_user_by_mobile_number(mobile_number):
95
    return User.get_by(mobile_number=mobile_number)
96
 
1491 vikas 97
def get_user_by_email(email):
98
    return User.get_by(email=email)
99
 
5326 rajveer 100
def create_user(user_to_add):
7825 amar.kumar 101
    user = User.get_by(email=user_to_add.email)
102
    if user:
13661 amit.gupta 103
        if user.password == user_to_add.password  or user_to_add.password == "":
104
            if user_to_add.password == "":
105
                add_private_deal_user(user.id)
7825 amar.kumar 106
            return user
107
        else:
108
            raise UserContextException(109, "User already exists with this email id.")
5326 rajveer 109
 
110
    cart = create_cart()
111
 
557 chandransh 112
    user = User()
113
    user.email = user_to_add.email
114
    user.password = user_to_add.password
115
    user.name = user_to_add.name
116
    user.communication_email = user_to_add.communicationEmail
117
    user.jsession_id = user_to_add.jsessionId
118
    user.is_anonymous = False
119
    user.sex = user_to_add.sex
567 rajveer 120
    user.date_of_birth = user_to_add.dateOfBirth
5326 rajveer 121
    user.active_cart = cart
567 rajveer 122
    user.mobile_number = user_to_add.mobileNumber
2020 vikas 123
    user.source = user_to_add.source
2815 vikas 124
    user.source_start_time = to_py_date(user_to_add.sourceStartTime)
3499 mandeep.dh 125
    user.trust_level = 0
5326 rajveer 126
    user.active_since = datetime.datetime.now()
12696 amit.gupta 127
    addresses = []
128
    if user_to_add.addresses:
129
        address = user_to_add.addresses[0]
130
        address_to_add = Address()
131
        address_to_add.line_1 = address.line1
132
        address_to_add.line_2 = address.line2
133
        address_to_add.landmark = address.landmark
134
        address_to_add.city = address.city
135
        address_to_add.country = address.country
136
        address_to_add.state = address.state
137
        address_to_add.pin = address.pin
138
        address_to_add.type = address.type
139
        address_to_add.name = address.name
140
        address_to_add.phone = address.phone
141
        address_to_add.added_on = to_py_date(address.addedOn)
142
        address_to_add.enabled = True
143
        address_to_add.user = user
144
        address_to_add.type = 1
145
        address_to_add.added_on = datetime.datetime.now()
146
        addresses.append(address_to_add)
147
        user.addresses = addresses
8201 rajveer 148
    us = UserSource()
149
    us.user = user
150
    us.source_id = 1
151
    if user_to_add.sourceId:
152
        us.source_id = user_to_add.sourceId
7883 rajveer 153
 
154
    if user_to_add.isFacebookUser:
155
        fuser = FacebookUser()
156
        fuser.facebook_access_token = user_to_add.facebookAccessToken
157
        fuser.facebook_id = user_to_add.facebookId
158
        fuser.user = user
130 ashish 159
    session.commit()
12696 amit.gupta 160
    if user_to_add.addresses:
161
        user.default_address_id = user.addresses[0].id
162
    session.commit()
14819 amit.gupta 163
 
164
    if user_to_add.password == "":
165
        add_private_deal_user(user.id)
557 chandransh 166
    return user
130 ashish 167
 
168
#===============================================================================
169
# Need to provide the update apis here for relevant fields in PrimaryInfo.
170
#===============================================================================
557 chandransh 171
def update_user(user_to_update):
594 rajveer 172
    if not user_to_update.userId:
415 ashish 173
        raise UserContextException(110, "user does not exist")
594 rajveer 174
    user = get_user_by_id(user_to_update.userId)
175
    user.email = user_to_update.email
176
    user.password = user_to_update.password
177
    user.name = user_to_update.name
178
    user.communication_email = user_to_update.communicationEmail
179
    user.jsession_id = user_to_update.jsessionId
180
    user.is_anonymous = user_to_update.isAnonymous
181
    user.sex = user_to_update.sex
182
    user.date_of_birth = user_to_update.dateOfBirth
183
    user.mobile_number = user_to_update.mobileNumber
7883 rajveer 184
    if user_to_update.isFacebookUser:
7884 rajveer 185
        if user.fbusers and user.fbusers[0]:
186
            fuser = user.fbusers[0]
187
        else:
188
            fuser = FacebookUser()
7883 rajveer 189
        if user_to_update.facebookAccessToken is not None:
190
            fuser.facebook_access_token = user_to_update.facebookAccessToken
191
        if user_to_update.facebookId is not None:
192
            fuser.facebook_id = user_to_update.facebookId
193
        fuser.user = user
415 ashish 194
    session.commit()
594 rajveer 195
    return user
415 ashish 196
 
557 chandransh 197
def authenticate_user(user_handle, password):
198
    user = User.get_by(email=user_handle)
130 ashish 199
    if not user:
557 chandransh 200
        raise AuthenticationException("This email address is not registered.", 102)
130 ashish 201
 
557 chandransh 202
    if user.password == get_db_password(password):
203
        return user
130 ashish 204
    else:
205
        raise AuthenticationException("Wrong username or password", 102)
206
 
207
def user_exists(email):
413 rajveer 208
    try:
557 chandransh 209
        user = User.get_by(email=email)
210
        if user:
211
            return True
212
        else:
213
            return False
413 rajveer 214
    except:
130 ashish 215
        return False
216
 
567 rajveer 217
def add_address_for_user(address, user_id, set_default):
557 chandransh 218
    user = get_user_by_id(user_id)
766 rajveer 219
 
130 ashish 220
    if not user:
221
        raise_user_exception(user_id)
222
    if not address:
223
        raise UserContextException(103,"Address cannot be null")
224
 
225
    address_to_add = Address()
226
    address_to_add.line_1 = address.line1
227
    address_to_add.line_2 = address.line2
228
    address_to_add.landmark = address.landmark
229
    address_to_add.city = address.city
230
    address_to_add.country = address.country
231
    address_to_add.state = address.state
232
    address_to_add.pin = address.pin
233
    address_to_add.type = address.type
414 ashish 234
    address_to_add.name = address.name
235
    address_to_add.phone = address.phone
18966 amit.gupta 236
    address_to_add.added_on = datetime.datetime.now()
130 ashish 237
    address_to_add.enabled = True
557 chandransh 238
    address_to_add.user = user
130 ashish 239
    session.commit()
509 rajveer 240
 
557 chandransh 241
    if set_default is True:
242
        user.default_address_id = address_to_add.id
567 rajveer 243
    #set default address if nothing is default    
244
    if user.default_address_id is None:
245
        user.default_address_id = address_to_add.id
246
 
557 chandransh 247
    session.commit()
513 rajveer 248
 
567 rajveer 249
    return address_to_add.id
513 rajveer 250
 
130 ashish 251
def remove_address_for_user(user_id, address_id):
252
    address = get_address(address_id) 
253
 
254
    if not address:
557 chandransh 255
        raise UserContextException(103, "Address not found")
256
    if address.user.id != user_id:
257
        raise UserContextException(104, "This address belongs to some other user")
130 ashish 258
    address.enabled = False
10714 amit.gupta 259
    user = User.get_by(id=user_id)
260
    if user.default_address_id == address_id:
261
        firstValidAddress = Address.query.filter_by(user_id = user_id, enabled=True).first()
262
        if firstValidAddress is None:
263
            user.default_address_id = None
264
        else:
265
            user.default_address_id = firstValidAddress.id
130 ashish 266
    session.commit()
267
    return True
268
 
269
def set_user_as_logged_in(user_id, time_stamp):
5326 rajveer 270
    user = User.get_by(id=user_id)
130 ashish 271
 
5326 rajveer 272
    if not user:
557 chandransh 273
        raise_user_exception(user_id)
130 ashish 274
 
275
    if not time_stamp:
5326 rajveer 276
        user.last_login = datetime.datetime.now()
557 chandransh 277
    else:
5326 rajveer 278
        user.last_login = to_py_date(time_stamp)
130 ashish 279
    session.commit()
280
    return True
281
 
557 chandransh 282
def set_user_as_logged_out(user_id, time_stamp):
5326 rajveer 283
    user = User.get_by(id=user_id)
130 ashish 284
 
5326 rajveer 285
    if not user:
130 ashish 286
        raise_user_exception(user_id)
287
 
288
    if not time_stamp:
5326 rajveer 289
        user.last_logout = datetime.datetime.now()
557 chandransh 290
    else:
5326 rajveer 291
        user.last_logout = to_py_date(time_stamp)
130 ashish 292
    session.commit()
293
    return True
294
 
557 chandransh 295
def set_default_address(user_id, address_id):
296
    user = get_user_by_id(user_id)
297
    address = Address.get_by(id=address_id)
298
    if not user:
299
        raise_user_exception(user_id)
300
    if not address:
301
        raise UserContextException(103, "Address not found")
302
    if address.user.id != user.id:
303
        raise UserContextException(104, "This address belongs to some other user")
304
 
305
    user.default_address_id = address_id 
306
    session.commit()
307
 
594 rajveer 308
def update_password(user_id, old_password, new_password):
557 chandransh 309
    user = get_user_by_id(user_id)
130 ashish 310
 
311
    if not user:
312
        raise_user_exception(user_id)
313
 
594 rajveer 314
    if user.password != old_password:
315
        return False
316
 
317
    if check_for_valid_password(new_password):
318
        user.password = get_db_password(new_password)
130 ashish 319
        session.commit()
320
        return True
321
    else:
322
        return False
1273 varun.gupt 323
 
324
 
325
def create_user_communication(user_id, email, communication_type, order_id, awb, product, subject, message):
326
 
327
    user_communication = UserCommunication()
328
    user_communication.user_id = user_id
329
    user_communication.communication_type = communication_type
1743 varun.gupt 330
 
331
    if order_id > 0:
332
        user_communication.order_id = order_id
1273 varun.gupt 333
    user_communication.airwaybill_no = awb
334
    user_communication.reply_to = email
335
    user_communication.product_name = product
336
    user_communication.subject = subject
337
    user_communication.message = message
1301 varun.gupt 338
    user_communication.communication_timestamp = datetime.datetime.now()
1273 varun.gupt 339
    session.commit()
3206 mandeep.dh 340
    return True
341
 
1583 varun.gupt 342
def get_user_communication_by_id(user_communication_id):
343
    return UserCommunication.get_by(id = user_communication_id)
344
 
345
def get_user_communication_by_user(user_communication_user_id):
1607 vikas 346
    return UserCommunication.query.filter_by(user_id = user_communication_user_id).order_by(-UserCommunication.id).all()
1583 varun.gupt 347
 
348
def get_all_user_communications():
1863 vikas 349
    return UserCommunication.query.order_by(-UserCommunication.id).all()
1583 varun.gupt 350
 
5407 amar.kumar 351
def remove_user_communication(commId):
352
    UserCommunication.query.filter_by(id=commId).delete()
353
    session.commit()
354
 
1859 vikas 355
def create_master_affiliate(name, added_on):
1845 vikas 356
    master_affiliate = MasterAffiliate()
357
    master_affiliate.name = name
1859 vikas 358
    master_affiliate.added_on = to_py_date(added_on)
1845 vikas 359
    session.commit()
360
    return master_affiliate
361
 
1899 vikas 362
def get_all_master_affiliates():
363
    return MasterAffiliate.query.all()
364
 
1845 vikas 365
def get_master_affiliate_by_id(id):
366
    return MasterAffiliate.get_by(id = id)
367
 
368
def get_master_affiliate_by_name(name):
369
    return MasterAffiliate.get_by(name = name)
370
 
1859 vikas 371
def create_affiliate(name, url, master_affiliate_id, added_on):
1845 vikas 372
    affiliate = Affiliate()
373
    affiliate.name = name
374
    if url is not None:
375
        affiliate.url = url
376
    affiliate.master_affiliate_id = master_affiliate_id
1859 vikas 377
    affiliate.added_on = to_py_date(added_on)
1845 vikas 378
    session.commit()
379
    return affiliate
380
 
381
def get_affiliate_by_id(id):
382
    return Affiliate.get_by(id = id)
383
 
384
def get_affiliate_by_name(name):
385
    return Affiliate.get_by(name = name)
386
 
387
def get_affiliates_by_master_affiliate(master_affiliate_id):
388
    return MasterAffiliate.get_by(id =  master_affiliate_id).affiliates
389
 
390
def get_tracker_by_id(id):
391
    return Tracker.get_by(id = id)
392
 
1996 vikas 393
def add_track_log(affiliate_id, user_id, event, url, data, added_on):
1845 vikas 394
    track_log = TrackLog()
1996 vikas 395
    track_log.affiliate_id = affiliate_id
1845 vikas 396
    if user_id:
397
        track_log.user_id = user_id
3378 vikas 398
    track_log.event_id = event
1845 vikas 399
    if url:
400
        track_log.url = url
401
    if data:
1859 vikas 402
        track_log.data = data
403
    track_log.added_on = to_py_date(added_on)
1845 vikas 404
    session.commit()
405
    return track_log.id
406
 
407
def get_track_log_by_id(id):
408
    return TrackLog.get_by(id = id)
409
 
3293 vikas 410
def get_track_logs_by_affiliate(affiliate_id, start_date, end_date):
411
    query = TrackLog.query
412
 
413
    if affiliate_id:
414
        query = query.filter(TrackLog.affiliate_id == affiliate_id)
415
    if start_date:
416
        query = query.filter(TrackLog.added_on >= to_py_date(start_date))
417
    if end_date:
418
        query = query.filter(TrackLog.added_on <= to_py_date(end_date))
419
    return query.all()
1845 vikas 420
 
421
def get_track_logs_by_user(user_id):
422
    return TrackLog.query.filter(TrackLog.user_id == user_id).all()
423
 
1996 vikas 424
def get_track_logs(affiliate_id, user_id, event, url):
1845 vikas 425
    query = TrackLog.query
426
 
1996 vikas 427
    if affiliate_id:
428
        query = query.filter(TrackLog.affiliate_id == affiliate_id)
429
    if user_id:
430
        query = query.filter(TrackLog.user_id == user_id)
1845 vikas 431
    if event:
432
        query = query.filter(TrackLog.event == event)
433
    if url:
434
        query = query.filter(TrackLog.url == url)
435
    return query.all()
436
 
437
 
557 chandransh 438
def get_address(address_id):
439
    address = Address.get_by(id=address_id)
18735 manish.sha 440
    addressMapping = PrivateDealUserAddressMapping.query.filter_by(user_id = address.user_id,address_id=address_id).first()
441
    if addressMapping is None:
442
        return address, {}, {}
443
    else:
444
        return address, {address_id:addressMapping.taxInvoiceAvailable}, {address_id:addressMapping.creditOptionAvailable}
557 chandransh 445
 
884 rajveer 446
def forgot_password(email, password):
447
    try:
448
        user = User.get_by(email=email)
449
        if user:
450
            user.password = password
900 rajveer 451
            session.commit()
884 rajveer 452
            return True
453
        else:
454
            return False
455
    except:
456
        return False
457
 
594 rajveer 458
def get_all_addresses_for_user(userId):
18735 manish.sha 459
    addresses = Address.query.filter_by(user_id = userId, enabled=True).all()
18530 manish.sha 460
    privateDealUser = get_private_deal_user(userId)
18735 manish.sha 461
    taxInvoiceMap = {}
462
    creditOptionMap = {}
18530 manish.sha 463
    if privateDealUser is None:
18735 manish.sha 464
        return addresses, taxInvoiceMap, creditOptionMap
465
    else:
466
        addressMappings = PrivateDealUserAddressMapping.query.filter_by(user_id = userId).all()
467
        for mapping in addressMappings:
468
            taxInvoiceMap[mapping.address_id] = mapping.taxInvoiceAvailable
469
            creditOptionMap[mapping.address_id] = mapping.creditOptionAvailable
470
        for address in addresses:
471
            if not taxInvoiceMap.has_key(address.id):
472
                taxInvoiceMap[address.id] = False
473
            if not creditOptionMap.has_key(address.id):
474
                creditOptionMap[address.id] = False 
475
        return addresses, taxInvoiceMap, creditOptionMap
476
    '''
477
    privateDealUser = get_private_deal_user(userId)
478
    if privateDealUser is None:
18530 manish.sha 479
        return Address.query.filter_by(user_id = userId, enabled=True).all()
480
    else:
18634 manish.sha 481
        if privateDealUser.counter:
482
            if privateDealUser.counter.documentVerified:
483
                return Address.query.filter_by(user_id = userId, enabled=True).all()
484
            else:
485
                return Address.query.filter_by(id=privateDealUser.counter.addressId).all()
486
    return Address.query.filter_by(user_id = userId, enabled=True).all()
18735 manish.sha 487
    '''
581 rajveer 488
 
785 rajveer 489
def get_default_address_id(userId):
18603 manish.sha 490
    user = get_user_by_id(userId)
18735 manish.sha 491
    if user is None:
492
        return 0
493
    if user.default_address_id is None:
494
        return 0
495
    return user.default_address_id
496
    '''
18530 manish.sha 497
    privateDealUser = get_private_deal_user(userId)
498
    if privateDealUser is None:
499
        if user.default_address_id is None:
500
            return 0
501
    else:
18603 manish.sha 502
        if privateDealUser.counter: 
18634 manish.sha 503
            return privateDealUser.counter.addressId
504
        else:
505
            if user.default_address_id is None:
506
                return 0
507
    return user.default_address_id
18735 manish.sha 508
    '''
581 rajveer 509
 
785 rajveer 510
def get_default_pincode(user_id):
18740 manish.sha 511
    user = get_user_by_id(user_id)
512
    if not user:
513
        raise_user_exception(user_id)
514
    default_address_id = user.default_address_id
515
    if default_address_id:
516
        address = Address.get_by(id=default_address_id)
517
        default_pincode = address.pin 
518
    else:
519
        default_pincode = '110001' 
520
    return default_pincode
521
    '''
18646 manish.sha 522
    default_address_id = get_default_address_id(user_id)
785 rajveer 523
    if default_address_id:
524
        address = Address.get_by(id=default_address_id)
525
        default_pincode = address.pin 
526
    else:
18646 manish.sha 527
        default_pincode = '110001'
18740 manish.sha 528
    return default_pincode
529
    '''     
1596 ankur.sing 530
 
531
def get_user_count(user_type):
532
    if user_type is None:
533
        return User.query.count()
534
    else:
535
        return User.query.filter_by(is_anonymous = user_type).count()
785 rajveer 536
 
1891 ankur.sing 537
def get_users(user_type, start_date, end_date):
5326 rajveer 538
    query = session.query(User)
1891 ankur.sing 539
    if start_date != -1:
5326 rajveer 540
        query = query.filter(User.active_since >= to_py_date(start_date))
1891 ankur.sing 541
    if end_date != -1:
5326 rajveer 542
        query = query.filter(User.active_since <= to_py_date(end_date))
1891 ankur.sing 543
    if user_type is not None:
544
        query = query.filter(User.is_anonymous == user_type)
545
    return query.all()
1673 ankur.sing 546
 
130 ashish 547
#=============================================================================
548
# Helper functions 
549
#=============================================================================
550
 
551
'''
552
This function returns the password as stored in the db
553
'''    
554
def get_db_password(password):
555
    return password
556
 
557
def check_for_valid_password(password):
558
    if not password:
559
        raise UserContextException(105,"password cannot be null")
560
    return True
561
#------------------------------------------------------------------------------ 
562
 
563
#===============================================================================
564
# raises the UserContextException
565
#===============================================================================
566
def raise_user_exception(user_id):
766 rajveer 567
    raise UserContextException(101, "no such user in system %d" %(user_id))
568
 
2981 rajveer 569
def get_my_research_items(userId):
570
    query = UserWidgetItem.query.filter_by(userId=userId)
571
    query = query.filter_by(widgetId=WType.MY_RESEARCH)
572
    query = query.order_by(desc(UserWidgetItem.addedOn))
573
    widgetItems = query.all()
574
    return [widgetItem.itemId for widgetItem in widgetItems]
575
 
576
def get_browse_history_items(userId):
577
    query = UserWidgetItem.query.filter_by(userId=userId)
578
    query = query.filter_by(widgetId=WType.BROWSE_HISTORY)
579
    query = query.order_by(desc(UserWidgetItem.addedOn)).limit(10)
580
    widgetItems = query.all()
581
    return [widgetItem.itemId for widgetItem in widgetItems]
582
 
583
def update_my_research(userId, itemId):
584
    isNew = False
585
    query = UserWidgetItem.query.filter_by(userId=userId)
586
    query = query.filter_by(widgetId=WType.MY_RESEARCH)
587
    query = query.filter_by(itemId=itemId)
588
    widgetItem = query.first()
589
    if not widgetItem:
590
        isNew = True
591
        widgetItem = UserWidgetItem()
592
        widgetItem.userId = userId
593
        widgetItem.widgetId = WType.MY_RESEARCH
594
        widgetItem.itemId = itemId  
595
    widgetItem.addedOn = datetime.datetime.now()
596
    session.commit()
597
    return isNew
598
 
599
def update_browse_history(userId, itemId):
600
    query = UserWidgetItem.query.filter_by(userId=userId)
601
    query = query.filter_by(widgetId=WType.BROWSE_HISTORY)
602
    query = query.filter_by(itemId=itemId)
603
    widgetItem = query.first()
604
    if not widgetItem:
605
        widgetItem = UserWidgetItem()
606
        widgetItem.userId = userId
607
        widgetItem.widgetId = WType.BROWSE_HISTORY
608
        widgetItem.itemId = itemId
609
    widgetItem.addedOn = datetime.datetime.now()
610
    session.commit()
611
 
612
def delete_item_from_my_research(userId, itemId):
613
    query = UserWidgetItem.query.filter_by(userId=userId)
614
    query = query.filter_by(widgetId=WType.MY_RESEARCH)
615
    query = query.filter_by(itemId=itemId)
616
    widgetItem = query.first()
617
    if widgetItem:
618
        widgetItem.delete()
619
        session.commit()
620
    else:
11499 amit.gupta 621
        print "Not item in my research to delete with itemId " + str(itemId)
2981 rajveer 622
 
3499 mandeep.dh 623
def increase_trust_level(userId, trustLevelDelta):
624
    user = User.query.filter_by(id = userId).with_lockmode('update').first()
625
    user.trust_level += trustLevelDelta
626
    session.commit()
627
 
5407 amar.kumar 628
def get_trust_level(userId):
629
    user = User.query.filter_by(id = userId).first()
630
    return user.trust_level
5623 anupam.sin 631
 
632
def get_user_emails(start_date, end_date):
633
    emails = select([User.table.c.communication_email], and_(User.table.c.active_since >= start_date, User.table.c.active_since <= end_date, User.table.c.is_anonymous==0)).execute()
634
    email_addresses = []
5407 amar.kumar 635
 
5623 anupam.sin 636
    for email in emails:
637
        email_addresses.append(str(email[0]))
638
 
639
    return email_addresses
7825 amar.kumar 640
 
11679 vikram.rag 641
def is_private_deal_user(userId):
642
    try:
18608 amit.gupta 643
        user = PrivateDealUser.get_by(id=userId)
11679 vikram.rag 644
        if user is None:
645
            return False
646
        elif not user.isActive:
647
            return False
648
        else:
649
            return True
650
    except:
651
        print("Error : Unable to get details for User Id : " + str(userId))
652
        return False
653
    finally:
654
        close_session()
655
 
11890 kshitij.so 656
def add_private_deal_user(userId):
18608 amit.gupta 657
    user = PrivateDealUser.get_by(id=userId)
11890 kshitij.so 658
    if user is None:
659
        try:
660
            pd = PrivateDealUser()
661
            pd.id = userId
662
            pd.created_on = datetime.datetime.now()
663
            pd.isActive = True
13401 manish.sha 664
            pd.bulkShipmentAmountLimit=50000
18590 manish.sha 665
            pd.creditorAssigned = False
18735 manish.sha 666
            pd.tinVerified = False
11890 kshitij.so 667
            session.commit()
668
            return True
669
        except Exception as e:
670
            print "Unable to add user to private deals",e
671
            return False
672
    else:
13661 amit.gupta 673
        return True
11679 vikram.rag 674
 
11890 kshitij.so 675
def change_private_deal_user_status(userId,isActive):
18608 amit.gupta 676
    user = PrivateDealUser.get_by(id=userId)
11890 kshitij.so 677
    if user is None:
678
        return False
679
    else:
680
        user.isActive = isActive
681
        session.commit()
682
        return True
683
 
684
def get_private_deal_user(userId):
18608 amit.gupta 685
    return PrivateDealUser.get_by(id=userId)
11890 kshitij.so 686
 
12696 amit.gupta 687
def register_counter(tCounter, userId):
18951 amit.gupta 688
    try:
689
        firstValidAddress = Address.query.filter_by(id=tCounter.address).first()
690
    except:
691
        pass
692
    if not firstValidAddress:
693
        firstValidAddress = Address.query.filter_by(user_id = userId, enabled=True).first()
12696 amit.gupta 694
    counter = Counter()
695
    _setCounter(counter, tCounter, firstValidAddress)
18951 amit.gupta 696
    pDealUser = PrivateDealUser.query.filter_by(id=userId).first()
697
    if not pDealUser:
698
        pDealUser = PrivateDealUser() 
699
        pDealUser.created_on = datetime.datetime.now()
700
        pDealUser.bulkShipmentAmountLimit=50000
12696 amit.gupta 701
    pDealUser.counter = counter
18951 amit.gupta 702
    pDealUser.tinVerified = True if tCounter.documentVerified else False
12696 amit.gupta 703
    pDealUser.tin = tCounter.tin
704
    pDealUser.isActive = True
705
    session.commit()
706
    m = {}
707
    m['counter_code'] = counter.code
708
    return m 
709
 
710
def _setCounter(counter,tCounter,address):
711
    counter.name = tCounter.name
712
    counter.ownerName = tCounter.ownerName
713
    counter.createdOn = datetime.datetime.now()
714
    counter.email = tCounter.email
715
    counter.mobile = tCounter.mobile
716
    counter.addressId = address.id
12790 amit.gupta 717
    counter.dob = tCounter.dob
18951 amit.gupta 718
    counter.tin = tCounter.tin
719
    counter.documentVerified = tCounter.documentVerified
18966 amit.gupta 720
    if counter.documentVerified:
721
        pduaddress = PrivateDealUserAddressMapping()
722
        pduaddress.address_id = address.id
723
        pduaddress.creditOptionAvailable = False
724
        pduaddress.user_id = address.user_id
18973 amit.gupta 725
        if address.state in tinStates:
726
            pduaddress.taxInvoiceAvailable = True
727
        else:
728
            pduaddress.taxInvoiceAvailable = False
18951 amit.gupta 729
    counter.verificationType = tCounter.verificationType
730
    counter.verifiedOn = datetime.datetime.now() 
12696 amit.gupta 731
    query = Counter.query.filter(Counter.code.like(CounterStateMap[address.state] + '%')).order_by(Counter.id.desc())
732
    lastStateCounter = query.first()
733
    if lastStateCounter:
12698 amit.gupta 734
        counter.code = CounterStateMap[address.state] + str(int(lastStateCounter.code[2:])+1).zfill(6)
12696 amit.gupta 735
    else:
12698 amit.gupta 736
        counter.code = CounterStateMap[address.state] + "000001"
12696 amit.gupta 737
    counter.striker = tCounter.striker
738
    if tCounter.alternateMobile:
739
        counter.alternateMobile = tCounter.alternateMobile
740
    if tCounter.spCounterSize:
741
        counter.spCounterSize = tCounter.spCounterSize
742
    if tCounter.fpCounterSize:
743
        counter.fpCounterSize = tCounter.fpCounterSize
12722 amit.gupta 744
 
745
def search_counter(type1, searchString):
746
    if type1=="counter_code":
747
        return Counter.query.filter(Counter.code==searchString).all()
748
    elif type1=="mobile":
749
        return Counter.query.filter(or_(Counter.alternateMobile==searchString, Counter.mobile==searchString)).all()
750
    elif type1=="email":
751
        return Counter.query.filter(Counter.email==searchString).all()
752
    elif type1=="counter_name":
753
        return Counter.query.filter(Counter.name.like("%" + searchString + "%")).all()
18982 amit.gupta 754
    elif type1=="tin":
755
        return Counter.query.filter(Counter.tin==searchString).all()
12722 amit.gupta 756
    else:
757
        return []
18977 amit.gupta 758
def get_counter_by_user_id(user_id):
759
    pdu = PrivateDealUser.query.filter(PrivateDealUser.id==user_id).first()
760
    if pdu is None:
761
        return None
762
    else:
763
        return pdu.counter
12722 amit.gupta 764
 
765
def get_all_users_by_counter(counterid):
766
    dealers = PrivateDealUser.query.filter(PrivateDealUser.counter_id == counterid).all()
767
    dealerids = [dealer.id for dealer in dealers]
768
    print dealerids  
769
    if len(dealerids) > 0:
770
        return User.query.filter(User.id.in_(dealerids)).all()
771
    return []
772
 
15251 manish.sha 773
def get_active_access_token_for_user(userId, source):
774
    user = get_private_deal_user(userId)
775
    if user is not None:
776
        accessTokenObj = AccessTokenizer.query.filter(AccessTokenizer.userId==userId).filter(AccessTokenizer.source==source).filter(AccessTokenizer.expired==False).filter(AccessTokenizer.expiredTime>datetime.datetime.now()).first()
777
        if accessTokenObj is not None:
778
            return accessTokenObj.tokenString
779
        else:
780
            accessTokenObj = AccessTokenizer()
781
            accessTokenObj.userId = userId
782
            accessTokenObj.source = source
783
            accessTokenObj.tokenString = binascii.b2a_hex(os.urandom(15))
784
            accessTokenObj.expiredTime = datetime.datetime.now()+datetime.timedelta(minutes=10)
785
            accessTokenObj.expired = False
786
            session.commit()
787
            return accessTokenObj.tokenString
788
    else:
789
        return 'Invalid User'
790
 
791
def validate_access_token(accessToken):
792
    accessTokenObj = AccessTokenizer.query.filter(AccessTokenizer.tokenString==accessToken).filter(AccessTokenizer.expired==False).filter(AccessTokenizer.expiredTime>datetime.datetime.now()).first()
793
    if accessTokenObj is not None:
794
        accessTokenObj.expired = True
795
        session.commit()
796
        return True
797
    else:
798
        return False
12722 amit.gupta 799
 
18634 manish.sha 800
def is_address_editable_for_counter(userId):
18530 manish.sha 801
    privateDealUser = get_private_deal_user(userId)
802
    if privateDealUser is None:
18634 manish.sha 803
        return True
18530 manish.sha 804
    else:
18634 manish.sha 805
        if privateDealUser.counter:
806
            if privateDealUser.counter.documentVerified:
807
                return True
808
            else:
809
                return False  
810
    return True 
18530 manish.sha 811
 
812
def get_billing_address_for_user(userId):
813
    privateDealUser = get_private_deal_user(userId)
18656 amit.gupta 814
    if privateDealUser is None:
18743 manish.sha 815
        return None, {}, {}
18656 amit.gupta 816
    if privateDealUser.counter:
817
        return get_address(privateDealUser.counter.addressId)
18530 manish.sha 818
    else:
18743 manish.sha 819
        return None, {}, {}
12696 amit.gupta 820
 
18590 manish.sha 821
def is_creditor_assigned(userId):
822
    try:
823
        privateDealUser = get_private_deal_user(userId)
824
        if privateDealUser.creditorAssigned:
825
            return True
826
        else:
827
            return False
828
    except:
829
        return False
830
 
18735 manish.sha 831
def is_tax_invoice_enabled_user(userId):
832
    try:
833
        privateDealUser = get_private_deal_user(userId)
834
        if privateDealUser.tin and privateDealUser.tinVerified:
835
            return True
836
        else:
837
            return False
838
    except:
839
        return False
18764 kshitij.so 840
 
841
def get_cart_by_value(cartIds):
842
    returnMap = {}
843
    lines = Line.query.filter(Line.cart_id.in_(cartIds)).all()
844
    for line in lines:
845
        if returnMap.has_key(line.cart_id):
846
            returnMap.get(line.cart_id).append(to_t_line(line))
847
        else:
848
            returnMap[line.cart_id] = [to_t_line(line)]
849
    return returnMap
18735 manish.sha 850
 
766 rajveer 851
def close_session():
852
    if session.is_active:
853
        print "session is active. closing it."
3376 rajveer 854
        session.close()
855
 
856
def is_alive():
857
    try:
858
        session.query(User.id).limit(1).one()
859
        return True
860
    except:
18764 kshitij.so 861
        return False
862
 
863
if __name__ == '__main__':
864
    Dataservice.initialize()
865
    print (get_cart_by_value([1005394]))