Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
16561 amit.gupta 1
from datetime import datetime
17233 amit.gupta 2
from email import encoders
3
from email.mime.base import MIMEBase
4
from email.mime.multipart import MIMEMultipart
5
from email.mime.text import MIMEText
16561 amit.gupta 6
from paramiko.client import SSHClient
14843 amit.gupta 7
import StringIO
8
import base64
9
import gzip
16561 amit.gupta 10
import logging
11
import os
12
import paramiko
14843 amit.gupta 13
import pymongo
16561 amit.gupta 14
import random
17233 amit.gupta 15
import smtplib
16561 amit.gupta 16
import socket
13572 kshitij.so 17
import time
14843 amit.gupta 18
import urllib
14736 kshitij.so 19
import urllib2
15906 kshitij.so 20
import urlparse
18092 manas 21
from Crypto.Hash import MD5
22
from Crypto.Cipher import DES
23
import string
18895 amit.gupta 24
from shop2020.clients.CRMClient import CRMClient
18709 manas 25
from shop2020.clients.UserClient import UserClient
26
from shop2020.thriftpy.crm.ttypes import SearchFilter, TicketCategory, Ticket, \
27
     Activity, TicketPriority, TicketStatus, ActivityType
18923 manas 28
from dtr.utils.MailSender import Email
14705 kshitij.so 29
#TODO Need to add messy stuff to conf.
17233 amit.gupta 30
 
31
 
32
SENDER = "cnc.center@shop2020.in"
33
PASSWORD = "5h0p2o2o"
34
SMTP_SERVER = "smtp.gmail.com"
35
SMTP_PORT = 587    
36
 
18092 manas 37
_password = 'dtr18Feb2015'
38
_salt = '\xA9\x9B\xC8\x32\x56\x35\xE3\x03'
39
_iterations = 19
17233 amit.gupta 40
 
18092 manas 41
ALPHABET = string.ascii_uppercase + string.ascii_lowercase + \
42
           string.digits + '-_'
43
ALPHABET_REVERSE = dict((c, i) for (i, c) in enumerate(ALPHABET))
44
BASE = len(ALPHABET)
45
SIGN_CHARACTER = '$'
17233 amit.gupta 46
 
14708 kshitij.so 47
con=None
18257 manas 48
conDtrData = None
19247 kshitij.so 49
conCms = None
14736 kshitij.so 50
headers = { 
51
            'User-agent':'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
52
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
53
            'Accept-Language' : 'en-US,en;q=0.8',                     
54
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
55
            'Connection':'keep-alive',
56
            'Accept-Encoding' : 'gzip,deflate,sdch'
57
        }
17340 kshitij.so 58
PROXY_MESH_LIVE = "ch.proxymesh.com:31280"
18153 kshitij.so 59
PROXY_MESH_GENERAL = "de.proxymesh.com:31280"
17273 kshitij.so 60
PROXY_FLIPKART = "117.240.187.35:3128"
15152 kshitij.so 61
 
14843 amit.gupta 62
PUSH_NOTIFICATION_URL='http://api.profittill.com/admin/users/push'
63
DTR_API_BASIC_AUTH = base64.encodestring('%s:%s' % ("dtr", "dtr18Feb2015")).replace('\n', '')
18871 manas 64
EMAIL_CRM_PUSH_URL = 'http://staging.profittill.com/feedbacks/crm_mail'
16371 amit.gupta 65
statusMap = {1:'Active',2:'EOL',3:'In Process',4:'Exclusive'}
17041 manish.sha 66
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6, 'HOMESHOP18.COM':7}
19514 manas 67
REVERSE_SOURCE_MAP = {1:"Amazon", 2:"Flipkart", 3:"Snapdeal", 4:"Spice", 5:"Shopclues", 6:"Paytm", 7:"HomeShop18"}
14747 kshitij.so 68
 
16398 amit.gupta 69
CB_INIT = 'Waiting Confirmation'
70
CB_PENDING = 'Pending'
71
CB_CREDIT_IN_PROCESS = 'Credit in process'
72
CB_CREDITED = 'Credited to wallet'
73
CB_NA = 'Not Applicable'
74
CB_APPROVED = 'Approved'
75
CB_REJECTED = 'Rejected'
76
CB_ONHOLD = 'On hold'
77
CB_CANCELLED = 'Cancelled'
78
 
16399 amit.gupta 79
ORDER_PLACED = 'Order Placed'
80
ORDER_DELIVERED = 'Delivered'
81
ORDER_SHIPPED = 'Shipped' #Lets see if we can make use of it
82
ORDER_CANCELLED = 'Cancelled'
16398 amit.gupta 83
 
16538 kshitij.so 84
AFFILIATE_OFFER_API= {1:"https://www.spicesafar.com/FreeBapp/fetchOffersSM?deviceId=%s&retailerCode=%d"}
85
AFFILIATE_OFFER_DESC_API = {1:"https://www.spicesafar.com/FreeBapp/individualOffersSM?deviceId=%s&offerId=%s&retailerCode=%d"}
16736 amit.gupta 86
CREDIT_TYPE_ORDER = "Order"
87
CREDIT_TYPE_APP = "App"
19451 manas 88
CREDIT_TYPE_REFUND = "Refund"
89
CREDIT_TYPE_OFFER = "Offer"
90
CREDIT_TYPE_ADJUSTMENT = "Adjustment"
17873 kshitij.so 91
SUB_CATEGORY_MAP = {7:'Memory Card',8:'Cable',9:'USB Lights',10:"Screen Magnifier",11:"Car Charger",12:"Power Bank",13:"Pendrive",14:"Combo",15:"Charger",16:"Bluetooth Headset",17:"Speaker", \
18648 kshitij.so 92
                    18:"Adapter",19:"Cases",20:"Screen Guard",21:"Earphone",22:"Card Reader",23:"Mobile Holder",24:"AUX Cable",25:"OTG Cable",26:"Selfie Stick",27:"Back Cover",28:"Tempered Glass",29:"Battery", \
19528 kshitij.so 93
                    30:"Usb Hub",31:"Portable Music Player",32:"Smart Watch",33:'Flip Cover',34:'Connector',35:'TV Remote',36:'Bumper Case'}
16399 amit.gupta 94
 
19247 kshitij.so 95
CATEGORY_MAP = {3:'Mobiles',5:'Tablets',6:'Accessories'}
19482 manas 96
REFUND_ADJUSTMENT_MAP={0:'Pending',1:'Approved',2:'Cancelled',3:'Credited'}
19247 kshitij.so 97
 
14705 kshitij.so 98
def get_mongo_connection(host='localhost', port=27017):
99
    global con
100
    if con is None:
101
        print "Establishing connection %s host and port %d" %(host,port)
102
        try:
103
            con = pymongo.MongoClient(host, port)
104
        except Exception, e:
105
            print e
106
            return None
107
    return con
108
 
18257 manas 109
def get_mongo_connection_dtr_data(host='45.33.50.227', port=27017):
110
    global conDtrData
111
    if conDtrData is None:
112
        print "Establishing connection %s host and port %d" %(host,port)
113
        try:
114
            conDtrData = pymongo.MongoClient(host, port)
115
        except Exception, e:
116
            print e
117
            return None
118
    return conDtrData
119
 
19247 kshitij.so 120
def get_mongo_connection_cms(host, port=27017):
121
    global conCms
122
    if conCms is None:
123
        print "Establishing connection %s host and port %d" %(host,port)
124
        try:
125
            conCms = pymongo.MongoClient(host, port)
126
        except Exception, e:
127
            print e
128
            return None
129
    return conCms
130
 
13572 kshitij.so 131
def to_java_date(py_timestamp):
132
    try:
133
        java_date =  int(time.mktime(py_timestamp.timetuple())) * 1000 + py_timestamp.microsecond / 1000
134
        return java_date
135
    except:
14705 kshitij.so 136
        return None
16631 manish.sha 137
 
138
def to_py_date(java_timestamp):
16658 manish.sha 139
    try:
16660 manish.sha 140
        date = datetime.fromtimestamp(java_timestamp / 1e3)
16658 manish.sha 141
    except:
142
        return None
143
 
16631 manish.sha 144
    return date
14705 kshitij.so 145
 
146
def getCashBack(skuId, source_id, category_id, mc, mongoHost):
17605 kshitij.so 147
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14705 kshitij.so 148
        populateCashBack(mc, mongoHost)
149
    itemCashBackMap = mc.get("item_cash_back")
150
    itemCashBack = itemCashBackMap.get(skuId)
151
    if itemCashBack is not None:
152
        return itemCashBack
153
    cashBackMap = mc.get("category_cash_back")
154
    sourceCashBack = cashBackMap.get(source_id)
155
    if sourceCashBack is not None and len(sourceCashBack) > 0:
156
        for cashBack in sourceCashBack:
157
            if cashBack.get(category_id) is None:
158
                continue
159
            else:
160
                return cashBack.get(category_id)
161
    else:
162
        return {}
163
 
164
def populateCashBack(mc, mongoHost):
165
    print "Populating cashback"
166
    cashBackMap = {}
167
    itemCashBackMap = {}
168
    cashBack = list(get_mongo_connection(host=mongoHost).Catalog.CategoryCashBack.find())
169
    for row in cashBack:
170
        temp_map = {}
171
        temp_list = []
172
        if cashBackMap.has_key(row['source_id']):
173
            arr = cashBackMap.get(row['source_id'])
174
            for val in arr:
175
                temp_list.append(val)
176
            temp_map[row['category_id']] = row
177
            temp_list.append(temp_map)
178
            cashBackMap[row['source_id']] = temp_list 
179
        else:
180
            temp_map[row['category_id']] = row
181
            temp_list.append(temp_map)
182
            cashBackMap[row['source_id']] = temp_list
183
    itemCashBack = list(get_mongo_connection(host=mongoHost).Catalog.ItemCashBack.find())
184
    for row in itemCashBack:
185
        if not itemCashBackMap.has_key(row['skuId']):
186
            itemCashBackMap[row['skuId']] = row
187
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
188
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
189
 
14736 kshitij.so 190
def ungzipResponse(r):
191
    headers = r.info()
192
    if headers.get('Content-Encoding')=='gzip':
193
        url_f = StringIO.StringIO(r.read())
194
        gz = gzip.GzipFile(fileobj=url_f)
195
        html = gz.read()
196
        gz.close()
197
        return html
198
    return r.read()
199
 
200
 
17267 kshitij.so 201
def fetchResponseUsingProxy(url, headers=headers, livePricing=None, proxy=True, flipkart=False):
17041 manish.sha 202
    if livePricing is None:
203
        PROXY_URL = PROXY_MESH_GENERAL
17267 kshitij.so 204
    elif flipkart:
205
        PROXY_URL = PROXY_FLIPKART
17041 manish.sha 206
    else:
207
        PROXY_URL = PROXY_MESH_LIVE
208
    if proxy:
209
        print PROXY_URL
210
        proxy = urllib2.ProxyHandler({'http': PROXY_URL})
211
        opener = urllib2.build_opener(proxy)
212
        urllib2.install_opener(opener)
14736 kshitij.so 213
    req = urllib2.Request(url,headers=headers)
214
    response = urllib2.urlopen(req)
215
    response_data = ungzipResponse(response)
216
    response.close()
217
    return response_data
218
 
14948 amit.gupta 219
def getCurrTimeStamp():
220
    return toTimeStamp(datetime.now())
221
 
222
def toTimeStamp(dateTimeObj):
223
    return int(time.mktime(dateTimeObj.timetuple()))
14987 amit.gupta 224
def fromTimeStamp(timestamp):
15166 amit.gupta 225
    return datetime.fromtimestamp(timestamp)
226
 
16499 kshitij.so 227
def getNlcPoints(deal):
228
    if not(deal.get('minNlc') and deal.get('maxNlc')):
229
        print "Raising exception minNlc, maxNlc not found for %d"%(deal.get('_id'))
15182 kshitij.so 230
        raise
16499 kshitij.so 231
    if deal.get('status') == 2:
15182 kshitij.so 232
        eolWeight = .60
233
    else:
234
        eolWeight = 1.0
16499 kshitij.so 235
    if deal.get('category_id') == 3:
15182 kshitij.so 236
        basePointPercentage = 5.0
237
        maxNlcPoints = 200
16499 kshitij.so 238
    elif deal.get('category_id') == 5:
15182 kshitij.so 239
        basePointPercentage = 8.0
240
        maxNlcPoints = 150
241
    else:
242
        basePointPercentage = 10.0
243
        maxNlcPoints = 150
16499 kshitij.so 244
    discFromMinNlc = float((deal.get('minNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
245
    discFromMaxNlc = float((deal.get('maxNlc') - (deal.get('available_price'))))/(deal.get('available_price')) *100
15182 kshitij.so 246
    print discFromMinNlc
247
    print discFromMaxNlc
248
    if discFromMinNlc > 0:
249
        nlcPoints = 100/basePointPercentage * discFromMinNlc
250
    elif discFromMinNlc < 0 and discFromMaxNlc > 0:
251
        nlcPoints = 0
252
    else:
253
        nlcPoints = 100/basePointPercentage * discFromMinNlc
254
    if (min(nlcPoints,maxNlcPoints)) > 0:
255
        nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
256
    else:
257
        nlcPoints = (min(nlcPoints,maxNlcPoints))
258
 
259
    return nlcPoints
260
 
15166 amit.gupta 261
def getLogger(filePath):
262
    lgr = logging.getLogger()
263
    lgr.setLevel(logging.DEBUG)
264
    fh = logging.FileHandler(filePath)
265
    fh.setLevel(logging.INFO)
266
    frmt = logging.Formatter('%(asctime)s - %(name)s - %(message)s')
267
    fh.setFormatter(frmt)
268
    lgr.addHandler(fh)
269
    return lgr
15868 kshitij.so 270
 
271
def removePriceFormatting(price_string):
272
    return price_string.strip().replace('Rs.', '').replace('Rs', '').replace(',', '').replace(' ', '').replace('&nbsp;', '').split('.')[0]
15906 kshitij.so 273
 
15950 kshitij.so 274
def transformUrl(url,source_id):
15906 kshitij.so 275
    if source_id == 5:
276
        finalUrl = urlparse.urlparse(url)
277
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, 'm.shopclues.com')).geturl()
15950 kshitij.so 278
    elif source_id ==1:
279
        return url
280
    elif source_id == 2:
281
        finalUrl = urlparse.urlparse(url)
282
        return finalUrl._replace(netloc=finalUrl.netloc.replace(finalUrl.hostname, socket.gethostbyname(finalUrl.hostname))).geturl()
17013 manish.sha 283
    elif source_id == 7:
284
        productId = url.split('product:')[1].split('/')[0]
285
        finalUrl = 'http://m.homeshop18.com/product.mobi?productId='+str(productId)
286
        return finalUrl
15906 kshitij.so 287
 
288
 
16421 amit.gupta 289
 
290
 
291
def find_between( s, first, last ):
292
    try:
293
        start = s.find( first ) + len( first )
294
        end = s.rfind( last, start )
295
        if start ==-1 or end ==-1:
296
            return ""
297
        return s[start:end]
298
    except ValueError:
299
        return ""
15950 kshitij.so 300
 
15906 kshitij.so 301
if __name__ == '__main__':
15950 kshitij.so 302
    print transformUrl("http://www.flipkart.com/redmi-2/p/itme8ygtcfax6w39",2)
17233 amit.gupta 303
 
304
def sendmail(email, message, title, *varargs):
305
    if email == "":
306
        return
307
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
308
    mailServer.ehlo()
309
    mailServer.starttls()
310
    mailServer.ehlo()
15906 kshitij.so 311
 
17233 amit.gupta 312
    # Create the container (outer) email message.
313
    msg = MIMEMultipart()
314
    msg['Subject'] = title
315
    msg.preamble = title
316
    html_msg = MIMEText(message, 'html')
317
    msg.attach(html_msg)
15906 kshitij.so 318
 
17233 amit.gupta 319
    #snapdeal more to be added here
320
    for fileName in varargs:
321
        snapdeal = MIMEBase('application', 'vnd.ms-excel')
322
        snapdeal.set_payload(file(fileName).read())
323
        encoders.encode_base64(snapdeal)
324
        snapdeal.add_header('Content-Disposition', 'attachment;filename=' + fileName)
325
        msg.attach(snapdeal)
326
 
327
 
328
    MAILTO = email 
329
    mailServer.login(SENDER, PASSWORD)
330
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
331
 
332
 
16561 amit.gupta 333
def readSSh(fileName):
334
    try:
335
        str1 = open(fileName).read()
336
        return str1
337
    except:
338
        ssh_client = SSHClient()
339
        str1 = ""
340
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
341
        ssh_client.connect('dtr', 22, 'root', 'ecip$dtrMay2014')
342
        sftp_client = ssh_client.open_sftp()
343
        try:
344
            if not os.path.exists(os.path.dirname(fileName)):
345
                os.makedirs(os.path.dirname(fileName))
346
            sftp_client.get(fileName, fileName)
347
            try:
348
                str1 = open(fileName).read()
349
                return str1
350
            finally:
351
                pass
352
        except:
353
            "could not read"
354
        return str1
18134 kshitij.so 355
 
18092 manas 356
def encryptMessage(plaintext_to_encrypt1):
357
    hasher = MD5.new()
358
    hasher.update(_password)
359
    hasher.update(_salt)
360
    result = hasher.digest()
361
    for i in range(1, _iterations):
362
        hasher = MD5.new()
363
        hasher.update(result)
364
        result = hasher.digest()
365
 
366
    padding = 8 - len(plaintext_to_encrypt1) % 8
367
    plaintext_to_encrypt1 += chr(padding) * padding
368
    encoder = DES.new(result[:8], DES.MODE_CBC, result[8:16])
369
    encrypted = encoder.encrypt(plaintext_to_encrypt1)
370
 
371
    check1 =  encrypted.encode('base64')
372
    return check1
373
 
374
def decryptMessage(encryptedData):
375
    padding = 8 - len(encryptedData) % 8
376
    encryptedData += chr(padding) * padding
377
    hasher = MD5.new()
378
    hasher.update(_password)
379
    hasher.update(_salt)
380
    result = hasher.digest()
381
    for i in range(1, _iterations):
382
        hasher = MD5.new()
383
        hasher.update(result)
384
        result = hasher.digest()
385
 
386
    encoder2 = DES.new(result[:8], DES.MODE_CBC, result[8:16])
387
    decodeString =  encoder2.decrypt(encryptedData.decode('base64'))
18094 manas 388
    return ''.join(e for e in decodeString if e.isalnum() or e is '/' or e is ':' or e is ',' or e is '.' or e is '=' or e is '?' or e is '_')
18092 manas 389
 
390
def num_encode(n):
391
    if n < 0:
392
        return SIGN_CHARACTER + num_encode(-n)
393
    s = []
394
    while True:
395
        n, r = divmod(n, BASE)
396
        s.append(ALPHABET[r])
397
        if n == 0: break
398
    return ''.join(reversed(s))
399
 
400
def num_decode(s):
401
    if s[0] == SIGN_CHARACTER:
402
        return -num_decode(s[1:])
403
    n = 0
404
    for c in s:
405
        n = n * BASE + ALPHABET_REVERSE[c]
406
    return n    
18156 amit.gupta 407
 
408
def todict(obj, classkey=None):
409
    if isinstance(obj, dict):
410
        data = {}
411
        for (k, v) in obj.items():
412
            data[k] = todict(v, classkey)
413
        return data
414
    elif hasattr(obj, "_ast"):
415
        return todict(obj._ast())
416
    elif hasattr(obj, "__iter__"):
417
        return [todict(v, classkey) for v in obj]
418
    elif hasattr(obj, "__dict__"):
419
        data = dict([(key, todict(value, classkey)) 
420
            for key, value in obj.__dict__.iteritems() 
421
            if not callable(value) and not key.startswith('_')])
422
        if classkey is not None and hasattr(obj, "__class__"):
423
            data[classkey] = obj.__class__.__name__
424
        return data
425
    else:
18440 amit.gupta 426
        return obj
427
 
428
def getSkuData(storeId, identifier):
429
    if storeId in (1,2,4,5,6):
430
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier, 'source_id':storeId})
431
    elif storeId == 3:
432
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier, 'source_id':storeId})
433
    return skuData
18630 manas 434
 
18636 manas 435
def sendCrmProjectMail(userId,disposition_description,disposition_comments):
436
    parameters = ("user_id", userId),("subject", disposition_description),("message",disposition_comments)
437
    parameters = urllib.urlencode(parameters)
18667 manas 438
    emailpushrequest = urllib2.Request(EMAIL_CRM_PUSH_URL, parameters, headers=headers)
439
    emailpushrequest.add_header("Authorization", "Basic %s" % DTR_API_BASIC_AUTH)
18860 manas 440
    connection = urllib2.urlopen(emailpushrequest)
441
    connection.close()
18709 manas 442
 
443
def generateCrmTicket(customerFeedBack):
18923 manas 444
    sendCrmProjectMailByDtr(customerFeedBack)
18845 kshitij.so 445
    crmServiceClient = CRMClient().get_client() 
446
    userServiceClient = UserClient().get_client()   
18709 manas 447
    ticket = Ticket()
448
    activity = Activity()
449
    ticket.creatorId = 1
450
    user = userServiceClient.getUserByEmail(customerFeedBack.get('email'))
451
    if 'Return or replacement pending' in customerFeedBack.get('subject'):
452
        ticket.category = TicketCategory.PROFITMANDI_REFUND_PROBLEM
453
        ticket.priority = TicketPriority.HIGH
454
    elif 'Product Quality issue' in customerFeedBack.get('subject'):
455
        ticket.category = TicketCategory.PROFITMANDI_PRODUCT_ISSUE
456
        ticket.priority = TicketPriority.HIGH
457
    elif 'Delayed Delivery' in customerFeedBack.get('subject'):
458
        ticket.category = TicketCategory.PROFITMANDI_DELAYED_DELIVERY
459
        ticket.priority = TicketPriority.HIGH
460
    elif 'Technical issue at Profitmandi' in customerFeedBack.get('subject'):
461
        ticket.category = TicketCategory.PROFITMANDI_TECHNICAL_PROBLEM
462
        ticket.priority = TicketPriority.HIGH
463
    else:
464
        ticket.category = TicketCategory.PROFITMANDI_OTHER
465
        ticket.priority = TicketPriority.MEDIUM
466
 
467
    ticket.description = 'User Specified Subject :- '+ customerFeedBack.get('subject') + ' | ' +  customerFeedBack.get('message')
468
    ticket.customerEmailId = customerFeedBack.get('email')
469
    if user is not None and user.userId !=-1:
470
        ticket.customerId = user.userId
18871 manas 471
    ticket.assigneeId=57
18709 manas 472
    ticket.status = TicketStatus.OPEN
18714 manas 473
    ticket.openDate = to_java_date(customerFeedBack.get('created'))
18709 manas 474
    ticket.customerMobileNumber = customerFeedBack.get('mobile_number')
475
    ticket.customerName = customerFeedBack.get('customer_name')  
476
    activity.creatorId = 1
477
    activity.ticketAssigneeId = ticket.assigneeId
478
    activity.type = ActivityType.PROFITMANDI_CRM_APP_TICKET
479
    activity.description = 'User Specified Subject :- '+ customerFeedBack.get('subject') + ' | ' +  customerFeedBack.get('message')
480
 
481
    activity.ticketCategory = ticket.category
482
    activity.ticketDescription = ticket.description
483
    activity.ticketPriority = ticket.priority
484
    activity.ticketStatus = ticket.status
485
    activity.customerEmailId = customerFeedBack.get('email')
486
    if user is not None and user.userId !=-1:
487
        activity.customerId  = user.userId
488
    activity.customerName = customerFeedBack.get('customer_name')
489
    activity.customerMobileNumber = customerFeedBack.get('mobile_number')
18715 manas 490
    activity.creationTimestamp = ticket.openDate
18709 manas 491
    activity.customerEmailId= customerFeedBack.get('email')
492
 
493
    if not crmServiceClient.isAlive():
18845 kshitij.so 494
        crmServiceClient = CRMClient().get_client()
18709 manas 495
 
496
    ticketId = crmServiceClient.insertTicket(ticket, activity)
497
 
498
    if ticketId > 0:
499
        return True
500
    else:
18923 manas 501
        return False
502
 
503
def sendCrmProjectMailByDtr(customerFeedback):
504
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
505
    mailServer.ehlo()
506
    mailServer.starttls()
507
    mailServer.ehlo()
508
    title=customerFeedback.get('subject')    
509
    msg = MIMEMultipart()
510
    msg['Subject'] = title
511
    msg.preamble = title
18925 manas 512
    message="User Id : " + str(customerFeedback.get('user_id'))
513
    message1="Email : " + str(customerFeedback.get('email'))
18923 manas 514
    message2="Mobile Number : " + str(customerFeedback.get('mobile_number'))
515
    message3="Subject : " + str(customerFeedback.get('subject'))
516
    message4="Message : " + str(customerFeedback.get('message'))
18925 manas 517
    html_msg = MIMEText(message+"<br><br>"+message1+"<br><br>"+message2+"<br><br>"+message3+"<br><br>"+message4, 'html')
18924 manas 518
    msg.attach(html_msg)
18927 manas 519
 
520
    MAILTO = ['rajneesh.arora@shop2020.in','amit.sirohi@shop2020.in','shailesh.kumar@shop2020.in','sandeep.sachdeva@shop2020.in','manas.kapoor@shop2020.in','chaitnaya.vats@shop2020.in','amit.gupta@shop2020.in']
521
    #MAILTO = ['manas.kapoor@saholic.com']
18923 manas 522
    mailServer.login(SENDER, PASSWORD)
523
    try:
524
        mailServer.sendmail(SENDER, MAILTO, msg.as_string())
525
    except:
526
        m = Email('localhost')
527
        mFrom = "dtr@shop2020.in"
528
        m.setFrom(mFrom)
529
        for receipient in MAILTO:
530
            m.addRecipient(receipient)
531
        m.setSubject(title)
532
        m.send()
533
    return