Subversion Repositories SmartDukaan

Rev

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