Subversion Repositories SmartDukaan

Rev

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