Subversion Repositories SmartDukaan

Rev

Rev 22358 | Rev 22628 | 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):
22358 ashik.ali 252
    address, a, b  = get_address(address_id) 
130 ashish 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)
22358 ashik.ali 440
 
18735 manish.sha 441
    addressMapping = PrivateDealUserAddressMapping.query.filter_by(user_id = address.user_id,address_id=address_id).first()
442
    if addressMapping is None:
443
        return address, {}, {}
444
    else:
445
        return address, {address_id:addressMapping.taxInvoiceAvailable}, {address_id:addressMapping.creditOptionAvailable}
557 chandransh 446
 
19889 manas 447
def get_counter_name(user_ids):
448
    result = session.query(PrivateDealUserAddressMapping,Address).join((Address,PrivateDealUserAddressMapping.address_id==Address.id)).filter(PrivateDealUserAddressMapping.user_id.in_(user_ids)).filter(PrivateDealUserAddressMapping.creditOptionAvailable==1).all()
449
    userCounterMap = {}
450
    if result is not None:
451
        for r in result:
452
            if userCounterMap.has_key(r.PrivateDealUserAddressMapping.user_id):
453
                pass
454
            else:
455
                userCounterMap[r.PrivateDealUserAddressMapping.user_id] = r.Address.name
456
    return userCounterMap
457
 
884 rajveer 458
def forgot_password(email, password):
459
    try:
460
        user = User.get_by(email=email)
461
        if user:
462
            user.password = password
900 rajveer 463
            session.commit()
884 rajveer 464
            return True
465
        else:
466
            return False
467
    except:
468
        return False
469
 
594 rajveer 470
def get_all_addresses_for_user(userId):
18735 manish.sha 471
    addresses = Address.query.filter_by(user_id = userId, enabled=True).all()
18530 manish.sha 472
    privateDealUser = get_private_deal_user(userId)
18735 manish.sha 473
    taxInvoiceMap = {}
474
    creditOptionMap = {}
18530 manish.sha 475
    if privateDealUser is None:
18735 manish.sha 476
        return addresses, taxInvoiceMap, creditOptionMap
477
    else:
478
        addressMappings = PrivateDealUserAddressMapping.query.filter_by(user_id = userId).all()
479
        for mapping in addressMappings:
480
            taxInvoiceMap[mapping.address_id] = mapping.taxInvoiceAvailable
481
            creditOptionMap[mapping.address_id] = mapping.creditOptionAvailable
482
        for address in addresses:
483
            if not taxInvoiceMap.has_key(address.id):
484
                taxInvoiceMap[address.id] = False
485
            if not creditOptionMap.has_key(address.id):
486
                creditOptionMap[address.id] = False 
487
        return addresses, taxInvoiceMap, creditOptionMap
488
    '''
489
    privateDealUser = get_private_deal_user(userId)
490
    if privateDealUser is None:
18530 manish.sha 491
        return Address.query.filter_by(user_id = userId, enabled=True).all()
492
    else:
18634 manish.sha 493
        if privateDealUser.counter:
494
            if privateDealUser.counter.documentVerified:
495
                return Address.query.filter_by(user_id = userId, enabled=True).all()
496
            else:
497
                return Address.query.filter_by(id=privateDealUser.counter.addressId).all()
498
    return Address.query.filter_by(user_id = userId, enabled=True).all()
18735 manish.sha 499
    '''
581 rajveer 500
 
785 rajveer 501
def get_default_address_id(userId):
18603 manish.sha 502
    user = get_user_by_id(userId)
18735 manish.sha 503
    if user is None:
504
        return 0
505
    if user.default_address_id is None:
506
        return 0
507
    return user.default_address_id
508
    '''
18530 manish.sha 509
    privateDealUser = get_private_deal_user(userId)
510
    if privateDealUser is None:
511
        if user.default_address_id is None:
512
            return 0
513
    else:
18603 manish.sha 514
        if privateDealUser.counter: 
18634 manish.sha 515
            return privateDealUser.counter.addressId
516
        else:
517
            if user.default_address_id is None:
518
                return 0
519
    return user.default_address_id
18735 manish.sha 520
    '''
581 rajveer 521
 
785 rajveer 522
def get_default_pincode(user_id):
18740 manish.sha 523
    user = get_user_by_id(user_id)
524
    if not user:
525
        raise_user_exception(user_id)
526
    default_address_id = user.default_address_id
527
    if default_address_id:
528
        address = Address.get_by(id=default_address_id)
529
        default_pincode = address.pin 
530
    else:
531
        default_pincode = '110001' 
532
    return default_pincode
533
    '''
18646 manish.sha 534
    default_address_id = get_default_address_id(user_id)
785 rajveer 535
    if default_address_id:
536
        address = Address.get_by(id=default_address_id)
537
        default_pincode = address.pin 
538
    else:
18646 manish.sha 539
        default_pincode = '110001'
18740 manish.sha 540
    return default_pincode
541
    '''     
1596 ankur.sing 542
 
543
def get_user_count(user_type):
544
    if user_type is None:
545
        return User.query.count()
546
    else:
547
        return User.query.filter_by(is_anonymous = user_type).count()
785 rajveer 548
 
1891 ankur.sing 549
def get_users(user_type, start_date, end_date):
5326 rajveer 550
    query = session.query(User)
1891 ankur.sing 551
    if start_date != -1:
5326 rajveer 552
        query = query.filter(User.active_since >= to_py_date(start_date))
1891 ankur.sing 553
    if end_date != -1:
5326 rajveer 554
        query = query.filter(User.active_since <= to_py_date(end_date))
1891 ankur.sing 555
    if user_type is not None:
556
        query = query.filter(User.is_anonymous == user_type)
557
    return query.all()
1673 ankur.sing 558
 
130 ashish 559
#=============================================================================
560
# Helper functions 
561
#=============================================================================
562
 
563
'''
564
This function returns the password as stored in the db
565
'''    
566
def get_db_password(password):
567
    return password
568
 
569
def check_for_valid_password(password):
570
    if not password:
571
        raise UserContextException(105,"password cannot be null")
572
    return True
573
#------------------------------------------------------------------------------ 
574
 
575
#===============================================================================
576
# raises the UserContextException
577
#===============================================================================
578
def raise_user_exception(user_id):
766 rajveer 579
    raise UserContextException(101, "no such user in system %d" %(user_id))
580
 
2981 rajveer 581
def get_my_research_items(userId):
582
    query = UserWidgetItem.query.filter_by(userId=userId)
583
    query = query.filter_by(widgetId=WType.MY_RESEARCH)
584
    query = query.order_by(desc(UserWidgetItem.addedOn))
585
    widgetItems = query.all()
586
    return [widgetItem.itemId for widgetItem in widgetItems]
587
 
588
def get_browse_history_items(userId):
589
    query = UserWidgetItem.query.filter_by(userId=userId)
590
    query = query.filter_by(widgetId=WType.BROWSE_HISTORY)
591
    query = query.order_by(desc(UserWidgetItem.addedOn)).limit(10)
592
    widgetItems = query.all()
593
    return [widgetItem.itemId for widgetItem in widgetItems]
594
 
595
def update_my_research(userId, itemId):
596
    isNew = False
597
    query = UserWidgetItem.query.filter_by(userId=userId)
598
    query = query.filter_by(widgetId=WType.MY_RESEARCH)
599
    query = query.filter_by(itemId=itemId)
600
    widgetItem = query.first()
601
    if not widgetItem:
602
        isNew = True
603
        widgetItem = UserWidgetItem()
604
        widgetItem.userId = userId
605
        widgetItem.widgetId = WType.MY_RESEARCH
606
        widgetItem.itemId = itemId  
607
    widgetItem.addedOn = datetime.datetime.now()
608
    session.commit()
609
    return isNew
610
 
611
def update_browse_history(userId, itemId):
612
    query = UserWidgetItem.query.filter_by(userId=userId)
613
    query = query.filter_by(widgetId=WType.BROWSE_HISTORY)
614
    query = query.filter_by(itemId=itemId)
615
    widgetItem = query.first()
616
    if not widgetItem:
617
        widgetItem = UserWidgetItem()
618
        widgetItem.userId = userId
619
        widgetItem.widgetId = WType.BROWSE_HISTORY
620
        widgetItem.itemId = itemId
621
    widgetItem.addedOn = datetime.datetime.now()
622
    session.commit()
623
 
624
def delete_item_from_my_research(userId, itemId):
625
    query = UserWidgetItem.query.filter_by(userId=userId)
626
    query = query.filter_by(widgetId=WType.MY_RESEARCH)
627
    query = query.filter_by(itemId=itemId)
628
    widgetItem = query.first()
629
    if widgetItem:
630
        widgetItem.delete()
631
        session.commit()
632
    else:
11499 amit.gupta 633
        print "Not item in my research to delete with itemId " + str(itemId)
2981 rajveer 634
 
3499 mandeep.dh 635
def increase_trust_level(userId, trustLevelDelta):
636
    user = User.query.filter_by(id = userId).with_lockmode('update').first()
637
    user.trust_level += trustLevelDelta
638
    session.commit()
639
 
5407 amar.kumar 640
def get_trust_level(userId):
641
    user = User.query.filter_by(id = userId).first()
642
    return user.trust_level
5623 anupam.sin 643
 
644
def get_user_emails(start_date, end_date):
645
    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()
646
    email_addresses = []
5407 amar.kumar 647
 
5623 anupam.sin 648
    for email in emails:
649
        email_addresses.append(str(email[0]))
650
 
651
    return email_addresses
7825 amar.kumar 652
 
11679 vikram.rag 653
def is_private_deal_user(userId):
654
    try:
18608 amit.gupta 655
        user = PrivateDealUser.get_by(id=userId)
11679 vikram.rag 656
        if user is None:
657
            return False
658
        elif not user.isActive:
659
            return False
660
        else:
661
            return True
662
    except:
663
        print("Error : Unable to get details for User Id : " + str(userId))
664
        return False
665
    finally:
666
        close_session()
667
 
11890 kshitij.so 668
def add_private_deal_user(userId):
18608 amit.gupta 669
    user = PrivateDealUser.get_by(id=userId)
11890 kshitij.so 670
    if user is None:
671
        try:
672
            pd = PrivateDealUser()
673
            pd.id = userId
674
            pd.created_on = datetime.datetime.now()
675
            pd.isActive = True
13401 manish.sha 676
            pd.bulkShipmentAmountLimit=50000
18590 manish.sha 677
            pd.creditorAssigned = False
18735 manish.sha 678
            pd.tinVerified = False
11890 kshitij.so 679
            session.commit()
680
            return True
681
        except Exception as e:
682
            print "Unable to add user to private deals",e
683
            return False
684
    else:
13661 amit.gupta 685
        return True
11679 vikram.rag 686
 
11890 kshitij.so 687
def change_private_deal_user_status(userId,isActive):
18608 amit.gupta 688
    user = PrivateDealUser.get_by(id=userId)
11890 kshitij.so 689
    if user is None:
690
        return False
691
    else:
692
        user.isActive = isActive
693
        session.commit()
694
        return True
695
 
696
def get_private_deal_user(userId):
18608 amit.gupta 697
    return PrivateDealUser.get_by(id=userId)
11890 kshitij.so 698
 
12696 amit.gupta 699
def register_counter(tCounter, userId):
18951 amit.gupta 700
    try:
701
        firstValidAddress = Address.query.filter_by(id=tCounter.address).first()
702
    except:
703
        pass
704
    if not firstValidAddress:
705
        firstValidAddress = Address.query.filter_by(user_id = userId, enabled=True).first()
12696 amit.gupta 706
    counter = Counter()
707
    _setCounter(counter, tCounter, firstValidAddress)
18951 amit.gupta 708
    pDealUser = PrivateDealUser.query.filter_by(id=userId).first()
709
    if not pDealUser:
710
        pDealUser = PrivateDealUser() 
711
        pDealUser.created_on = datetime.datetime.now()
712
        pDealUser.bulkShipmentAmountLimit=50000
12696 amit.gupta 713
    pDealUser.counter = counter
18951 amit.gupta 714
    pDealUser.tinVerified = True if tCounter.documentVerified else False
12696 amit.gupta 715
    pDealUser.tin = tCounter.tin
716
    pDealUser.isActive = True
717
    session.commit()
718
    m = {}
719
    m['counter_code'] = counter.code
720
    return m 
721
 
722
def _setCounter(counter,tCounter,address):
723
    counter.name = tCounter.name
724
    counter.ownerName = tCounter.ownerName
725
    counter.createdOn = datetime.datetime.now()
726
    counter.email = tCounter.email
727
    counter.mobile = tCounter.mobile
728
    counter.addressId = address.id
12790 amit.gupta 729
    counter.dob = tCounter.dob
21908 amit.gupta 730
    counter.gstin = tCounter.gstin
18951 amit.gupta 731
    counter.documentVerified = tCounter.documentVerified
21967 amit.gupta 732
#    if counter.documentVerified:
733
#        pduaddress = PrivateDealUserAddressMapping()
734
#        pduaddress.address_id = address.id
735
#        pduaddress.creditOptionAvailable = False
736
#        pduaddress.user_id = address.user_id
737
#        if address.state in tinStates:
738
#            pduaddress.taxInvoiceAvailable = True
739
#        else:
740
#            pduaddress.taxInvoiceAvailable = False
18951 amit.gupta 741
    counter.verificationType = tCounter.verificationType
742
    counter.verifiedOn = datetime.datetime.now() 
12696 amit.gupta 743
    query = Counter.query.filter(Counter.code.like(CounterStateMap[address.state] + '%')).order_by(Counter.id.desc())
744
    lastStateCounter = query.first()
745
    if lastStateCounter:
12698 amit.gupta 746
        counter.code = CounterStateMap[address.state] + str(int(lastStateCounter.code[2:])+1).zfill(6)
12696 amit.gupta 747
    else:
12698 amit.gupta 748
        counter.code = CounterStateMap[address.state] + "000001"
12696 amit.gupta 749
    counter.striker = tCounter.striker
750
    if tCounter.alternateMobile:
751
        counter.alternateMobile = tCounter.alternateMobile
752
    if tCounter.spCounterSize:
753
        counter.spCounterSize = tCounter.spCounterSize
754
    if tCounter.fpCounterSize:
755
        counter.fpCounterSize = tCounter.fpCounterSize
12722 amit.gupta 756
 
757
def search_counter(type1, searchString):
758
    if type1=="counter_code":
759
        return Counter.query.filter(Counter.code==searchString).all()
760
    elif type1=="mobile":
761
        return Counter.query.filter(or_(Counter.alternateMobile==searchString, Counter.mobile==searchString)).all()
762
    elif type1=="email":
763
        return Counter.query.filter(Counter.email==searchString).all()
764
    elif type1=="counter_name":
765
        return Counter.query.filter(Counter.name.like("%" + searchString + "%")).all()
18982 amit.gupta 766
    elif type1=="tin":
767
        return Counter.query.filter(Counter.tin==searchString).all()
12722 amit.gupta 768
    else:
769
        return []
18977 amit.gupta 770
def get_counter_by_user_id(user_id):
771
    pdu = PrivateDealUser.query.filter(PrivateDealUser.id==user_id).first()
772
    if pdu is None:
773
        return None
774
    else:
775
        return pdu.counter
12722 amit.gupta 776
 
777
def get_all_users_by_counter(counterid):
778
    dealers = PrivateDealUser.query.filter(PrivateDealUser.counter_id == counterid).all()
779
    dealerids = [dealer.id for dealer in dealers]
780
    print dealerids  
781
    if len(dealerids) > 0:
782
        return User.query.filter(User.id.in_(dealerids)).all()
783
    return []
784
 
15251 manish.sha 785
def get_active_access_token_for_user(userId, source):
786
    user = get_private_deal_user(userId)
787
    if user is not None:
788
        accessTokenObj = AccessTokenizer.query.filter(AccessTokenizer.userId==userId).filter(AccessTokenizer.source==source).filter(AccessTokenizer.expired==False).filter(AccessTokenizer.expiredTime>datetime.datetime.now()).first()
789
        if accessTokenObj is not None:
790
            return accessTokenObj.tokenString
791
        else:
792
            accessTokenObj = AccessTokenizer()
793
            accessTokenObj.userId = userId
794
            accessTokenObj.source = source
795
            accessTokenObj.tokenString = binascii.b2a_hex(os.urandom(15))
796
            accessTokenObj.expiredTime = datetime.datetime.now()+datetime.timedelta(minutes=10)
797
            accessTokenObj.expired = False
798
            session.commit()
799
            return accessTokenObj.tokenString
800
    else:
801
        return 'Invalid User'
802
 
803
def validate_access_token(accessToken):
804
    accessTokenObj = AccessTokenizer.query.filter(AccessTokenizer.tokenString==accessToken).filter(AccessTokenizer.expired==False).filter(AccessTokenizer.expiredTime>datetime.datetime.now()).first()
805
    if accessTokenObj is not None:
806
        accessTokenObj.expired = True
807
        session.commit()
808
        return True
809
    else:
810
        return False
12722 amit.gupta 811
 
18634 manish.sha 812
def is_address_editable_for_counter(userId):
18530 manish.sha 813
    privateDealUser = get_private_deal_user(userId)
814
    if privateDealUser is None:
18634 manish.sha 815
        return True
18530 manish.sha 816
    else:
18634 manish.sha 817
        if privateDealUser.counter:
818
            if privateDealUser.counter.documentVerified:
819
                return True
820
            else:
821
                return False  
822
    return True 
18530 manish.sha 823
 
824
def get_billing_address_for_user(userId):
825
    privateDealUser = get_private_deal_user(userId)
18656 amit.gupta 826
    if privateDealUser is None:
18743 manish.sha 827
        return None, {}, {}
18656 amit.gupta 828
    if privateDealUser.counter:
829
        return get_address(privateDealUser.counter.addressId)
18530 manish.sha 830
    else:
18743 manish.sha 831
        return None, {}, {}
12696 amit.gupta 832
 
18590 manish.sha 833
def is_creditor_assigned(userId):
834
    try:
835
        privateDealUser = get_private_deal_user(userId)
836
        if privateDealUser.creditorAssigned:
837
            return True
838
        else:
839
            return False
840
    except:
841
        return False
842
 
18735 manish.sha 843
def is_tax_invoice_enabled_user(userId):
844
    try:
845
        privateDealUser = get_private_deal_user(userId)
846
        if privateDealUser.tin and privateDealUser.tinVerified:
847
            return True
848
        else:
849
            return False
850
    except:
851
        return False
18764 kshitij.so 852
 
19182 amit.gupta 853
def tax_invoice_available(address_id):
854
    addressMapping = PrivateDealUserAddressMapping.query.filter_by(address_id=address_id).first()
855
    return True if addressMapping and addressMapping.taxInvoiceAvailable else False
856
 
22358 ashik.ali 857
 
858
def update_address(t_address):
859
    address, o1, o2 = get_address(t_address.id)
860
    if address:
861
        address.line_1 = t_address.line1
862
        address.line_2  = t_address.line2
863
        address.city = t_address.city
864
        address.pin = t_address.pin
865
        address.state = t_address.state
866
        session.commit()
22364 ashik.ali 867
        return True
868
    return False
22358 ashik.ali 869
 
22364 ashik.ali 870
def update_counter(t_counter):
871
    counter=Counter.get_by(id=t_counter.id)
872
    if counter:
873
        counter.gstin = t_counter.gstin
874
        counter.documentVerified  = t_counter.documentVerified
875
        session.commit()  
876
        return True  
877
    return False
878
 
18764 kshitij.so 879
def get_cart_by_value(cartIds):
880
    returnMap = {}
881
    lines = Line.query.filter(Line.cart_id.in_(cartIds)).all()
882
    for line in lines:
883
        if returnMap.has_key(line.cart_id):
884
            returnMap.get(line.cart_id).append(to_t_line(line))
885
        else:
886
            returnMap[line.cart_id] = [to_t_line(line)]
887
    return returnMap
18735 manish.sha 888
 
766 rajveer 889
def close_session():
890
    if session.is_active:
891
        print "session is active. closing it."
3376 rajveer 892
        session.close()
893
 
894
def is_alive():
895
    try:
896
        session.query(User.id).limit(1).one()
897
        return True
898
    except:
18764 kshitij.so 899
        return False
900
 
901
if __name__ == '__main__':
902
    Dataservice.initialize()
19889 manas 903
    print (get_cart_by_value([1005394]))