Subversion Repositories SmartDukaan

Rev

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