Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
15394 manas 1
'''
2
Created on 27-May-2015
3
@author: kshitij
4
'''
5
from datetime import date, datetime, timedelta
6
from dtr.storage.Mysql import getOrdersAfterDate, \
7
    getOrdersByTag
8
from email import encoders
9
from email.mime.base import MIMEBase
10
from email.mime.multipart import MIMEMultipart
11
from email.mime.text import MIMEText
12
from pymongo.mongo_client import MongoClient
13
from xlrd import open_workbook
14
from xlutils.copy import copy
15
from xlwt.Workbook import Workbook
16
import MySQLdb
17
import smtplib
18
import time
19
import xlwt
20
import pymongo
21
from shop2020.utils.Utils import to_py_date, to_java_date
22
from datetime import datetime
23
from elixir import *
24
from dtr.storage import DataService
25
from dtr.storage.DataService import Orders, Users, CallHistory
26
from sqlalchemy.sql.expression import func
27
 
28
DB_HOST = "localhost"
29
DB_USER = "root"
30
DB_PASSWORD = "shop2020"
31
DB_NAME = "dtr"
32
TMP_FILE = "/tmp/CRM_OutBound_Report.xls"  
33
 
34
con = None
35
 
15407 manas 36
SENDER = "adwords@shop2020.in"
37
PASSWORD = "adwords_shop2020"
38
SUBJECT = "CRM Outbound Report for " + str(date.today() - timedelta(days=1))
15394 manas 39
SMTP_SERVER = "smtp.gmail.com"
40
SMTP_PORT = 587    
41
 
42
date_format = xlwt.XFStyle()
43
date_format.num_format_str = 'yyyy/mm/dd'
44
 
45
datetime_format = xlwt.XFStyle()
46
datetime_format.num_format_str = 'yyyy/mm/dd HH:MM AM/PM'
47
 
48
default_format = xlwt.XFStyle()
49
freshList=['1','2','3','4','5','6','7','8','9','10','11','12','13']
15409 manas 50
followUpList=['1','2','3','4','5','6','7','8','9','10']
15394 manas 51
onBoardingList=['1','2','3','4','5'] 
52
dispositionMap = {  'call_later':0,
53
                    'ringing_no_answer':1,
54
                    'not_reachable':2,
55
                    'switch_off':3,
56
                    'invalid_no':4,
57
                    'wrong_no':5,
58
                    'hang_up':6,
59
                    'retailer_not_interested':7,
60
                    'alreadyuser':8,
61
                    'verified_link_sent':9,
62
                    'accessory_retailer':10,
63
                    'service_center_retailer':11,
64
                    'not_retailer':12, 
65
                    'recharge_retailer':13,
66
                    'onboarded':14
67
                }
68
followUpDispositionMap = {  'call_later':0,
69
                    'ringing_no_answer':1,
70
                    'not_reachable':2,
71
                    'switch_off':3,
72
                    'retailer_not_interested':4,
73
                    'alreadyuser':5,
74
                    'verified_link_sent':6,
15409 manas 75
                    'accessory_retailer':7,
76
                    'service_center_retailer':8,
77
                    'not_retailer':9, 
78
                    'recharge_retailer':10
15394 manas 79
                }
80
onBoardingDispositionMap = {  'call_later':0,
81
                    'ringing_no_answer':1,
82
                    'not_reachable':2,
83
                    'switch_off':3,
84
                    'onboarded':4,
85
                }
86
 
15402 manas 87
# FRESH_QUERY="""
88
# select call_disposition,count(1) from 
89
# (select * from (select * from callhistory where date(created)=date(now()) 
90
# and call_type ='fresh' order by created desc) 
91
# as a group by retailer_id) 
92
# a1 group by date(created), call_disposition;
93
# """
15394 manas 94
FRESH_QUERY="""
95
select call_disposition,count(1) from 
15407 manas 96
(select * from (select * from callhistory where date(created)=date(now() - INTERVAL 1 DAY) 
15394 manas 97
and call_type ='fresh' order by created desc) 
98
as a group by retailer_id) 
99
a1 group by date(created), call_disposition;
100
"""
101
AGENT_FRESH_QUERY="""
102
select call_disposition,count(1) from 
15407 manas 103
(select * from (select * from callhistory where date(created)=date(now() - INTERVAL 1 DAY) 
15394 manas 104
and call_type ='fresh' and agent_id=%s order by created desc) 
105
as a group by retailer_id) 
106
a1 group by date(created), call_disposition,agent_id;
107
"""
108
AGENT_NAME_QUERY="""
109
select name from agents where id=%s
110
"""
111
FRESH_QUERY_LOGIN_TIME="""
15407 manas 112
select agent_id,TIMEDIFF(logoutTime,loginTime) from agentlogintimings where role='fresh' and date(created)=date(now() - INTERVAL 1 DAY);
15394 manas 113
"""
114
FRESH_QUERY_DURATION="""
15407 manas 115
select sum(duration_sec) from callhistory where call_type ='fresh' and date(created)=date(now() - INTERVAL 1 DAY);
15394 manas 116
"""
15402 manas 117
FRESH_QUERY_AHT="""
15407 manas 118
select timestampdiff(second, callhistory.last_fetch_time, created) from callhistory where last_fetch_time is not null and call_type='fresh' and date(created)=date(now() - INTERVAL 1 DAY );
15402 manas 119
"""
120
FRESH_QUERY_AIT="""
15407 manas 121
select timestampdiff(second, last_action_time, created) from fetchdatahistory where call_type='fresh' and date(created)=date(now() - INTERVAL 1 DAY);
15402 manas 122
"""
15455 manas 123
#select count(*) from retailerlinks where date(activated) is not null and date(activated)=date(now() - interval 1 day);
15402 manas 124
FRESH_QUERY_LINKS_CONVERTED="""
15455 manas 125
select count(*) from users u join retailerlinks rl on (rl.code =upper( u.referrer) or rl.code=u.utm_campaign) where date(rl.activated)=date(now()- interval 1 day);
15402 manas 126
"""
127
FRESH_QUERY_LINKS_NOT_CONVERTED="""
15407 manas 128
select count(*) from retailerlinks where date(activated) is null and date(created)=date(now() - interval 1 day);
15402 manas 129
"""
15418 manas 130
FRESH_AGENTS_CALLED_COUNT="""
131
select distinct(agent_id) from callhistory where call_type='fresh' and date(created) = date(now()-interval 1 day);
132
"""
133
 
15415 manas 134
TOTAL_ACTIVATIONS="""
15418 manas 135
select count(1) from users where (lower(referrer)  not in('emp01','crm01','crm02','fos01','crm03','crm04') or lower(utm_campaign) not in('emp01','crm01','crm02','fos01','crm03','crm04')) and date(created) = date(now()-interval 1 day)
15415 manas 136
"""
15402 manas 137
 
15394 manas 138
AGENT_FRESH_QUERY_LOGIN_TIME="""
15407 manas 139
select TIMEDIFF(logoutTime,loginTime) from agentlogintimings where role='fresh' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15394 manas 140
"""
141
AGENT_FRESH_QUERY_DURATION="""
15407 manas 142
select sum(duration_sec) from callhistory where call_type ='fresh' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15394 manas 143
"""
15402 manas 144
AGENT_FRESH_QUERY_AHT="""
15407 manas 145
select timestampdiff(second, callhistory.last_fetch_time, created) from callhistory where last_fetch_time is not null and call_type='fresh' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15402 manas 146
"""
147
AGENT_FRESH_QUERY_AIT="""
15407 manas 148
select timestampdiff(second, last_action_time, created) from fetchdatahistory where call_type='fresh' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15402 manas 149
"""
150
AGENT_FRESH_QUERY_LINKS_CONVERTED="""
15455 manas 151
select count(*) from users u join retailerlinks rl on (rl.code =upper( u.referrer) or rl.code=u.utm_campaign) where date(rl.activated)=date(now()- interval 1 day) and agent_id=%s;
15402 manas 152
"""
153
AGENT_FRESH_QUERY_LINKS_NOT_CONVERTED="""
15407 manas 154
select count(*) from retailerlinks where date(activated) is null and date(created)=date(now() - interval 1 day) and agent_id=%s;
15402 manas 155
"""
15394 manas 156
 
15402 manas 157
 
15394 manas 158
FOLLOW_UP_QUERY="""
159
select call_disposition,count(1) from 
15407 manas 160
(select * from (select * from callhistory where date(created)=date(now() - INTERVAL 1 DAY) 
15394 manas 161
and call_type ='followup' order by created desc) 
162
as a group by retailer_id) 
163
a1 group by date(created), call_disposition;
164
"""
165
AGENT_FOLLOW_UP_QUERY="""
166
select call_disposition,count(1) from 
15407 manas 167
(select * from (select * from callhistory where date(created)=date(now() - INTERVAL 1 DAY)
15394 manas 168
and call_type ='followup' and agent_id=%s order by created desc) 
169
as a group by retailer_id) 
170
a1 group by date(created), call_disposition,agent_id;
171
"""
172
FOLLOW_UP_QUERY_LOGIN_TIME="""
15407 manas 173
select agent_id,TIMEDIFF(logoutTime,loginTime) from agentlogintimings where role='followup' and date(created)=date(now() - INTERVAL 1 DAY);
15394 manas 174
"""
175
FOLLOW_UP_QUERY_DURATION="""
15407 manas 176
select sum(duration_sec) from callhistory where call_type ='followup' and date(created)=date(now() - INTERVAL 1 DAY);
15394 manas 177
"""
15402 manas 178
FOLLOW_UP_QUERY_AHT="""
15407 manas 179
select timestampdiff(second, callhistory.last_fetch_time, created) from callhistory where last_fetch_time is not null and call_type='followup' and date(created)=date(now() - INTERVAL 1 DAY );
15402 manas 180
"""
181
FOLLOW_UP_QUERY_AIT="""
15407 manas 182
select timestampdiff(second, last_action_time, created) from fetchdatahistory where call_type='followup' and date(created)=date(now() - INTERVAL 1 DAY);
15402 manas 183
"""
15418 manas 184
FOLLOW_UP_AGENTS_CALLED_COUNT="""
185
select count(distinct(agent_id)) from callhistory where call_type='followup' and date(created) = date(now()-interval 1 day);
186
"""
15394 manas 187
AGENT_FOLLOW_UP_QUERY_LOGIN_TIME="""
15407 manas 188
select TIMEDIFF(logoutTime,loginTime) from agentlogintimings where role='followup' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15394 manas 189
"""
190
AGENT_FOLLOW_UP_QUERY_DURATION="""
15407 manas 191
select sum(duration_sec) from callhistory where call_type ='followup' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15394 manas 192
"""
15402 manas 193
AGENT_FOLLOW_UP_QUERY_AHT="""
15407 manas 194
select timestampdiff(second, callhistory.last_fetch_time, created) from callhistory where last_fetch_time is not null and call_type='followup' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15402 manas 195
"""
196
AGENT_FOLLOW_UP_QUERY_AIT="""
15407 manas 197
select timestampdiff(second, last_action_time, created) from fetchdatahistory where call_type='followup' and date(created)=date(now() - INTERVAL 1 DAY)  and agent_id=%s;
15402 manas 198
"""
15394 manas 199
 
15402 manas 200
 
15394 manas 201
ONBOARDING_QUERY="""
202
select call_disposition,count(1) from 
15407 manas 203
(select * from (select * from callhistory where date(created)=date(now() - INTERVAL 1 DAY) 
15394 manas 204
and call_type ='onboarding' order by created desc) 
205
as a group by retailer_id) 
206
a1 group by date(created), call_disposition;
207
"""
15402 manas 208
ONBOARDING_QUERY_LOGIN_TIME="""
15407 manas 209
select agent_id,TIMEDIFF(logoutTime,loginTime) from agentlogintimings where role='onboarding' and date(created)=date(now() - INTERVAL 1 DAY);
15402 manas 210
"""
211
ONBOARDING_QUERY_DURATION="""
15407 manas 212
select sum(duration_sec) from callhistory where call_type ='onboarding' and date(created)=date(now() - INTERVAL 1 DAY);
15402 manas 213
"""
214
ONBOARDING_QUERY_AHT="""
15407 manas 215
select timestampdiff(second, callhistory.last_fetch_time, created) from callhistory where last_fetch_time is not null and call_type='onboarding' and date(created)=date(now() - INTERVAL 1 DAY );
15402 manas 216
"""
217
ONBOARDING_QUERY_AIT="""
15407 manas 218
select timestampdiff(second, last_action_time, created) from fetchdatahistory where call_type='onboarding' and date(created)=date(now() - INTERVAL 1 DAY);
15402 manas 219
"""
15418 manas 220
ONBOARDING_AGENTS_CALLED_COUNT="""
221
select count(distinct(agent_id)) from callhistory where call_type='onboarding' and date(created) = date(now()-interval 1 day);
222
"""
15402 manas 223
 
15394 manas 224
AGENT_ONBOARDING_QUERY="""
225
select call_disposition,count(1) from 
15407 manas 226
(select * from (select * from callhistory where date(created)=date(now() - INTERVAL 1 DAY)
15394 manas 227
and call_type ='onboarding' and agent_id=%s order by created desc) 
228
as a group by retailer_id) 
229
a1 group by date(created), call_disposition,agent_id;
230
"""
231
AGENT_ONBOARDING_QUERY_LOGIN_TIME="""
15407 manas 232
select TIMEDIFF(logoutTime,loginTime) from agentlogintimings where role='onboarding' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15394 manas 233
"""
234
AGENT_ONBOARDING_QUERY_DURATION="""
15407 manas 235
select sum(duration_sec) from callhistory where call_type ='onboarding' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15394 manas 236
"""
15402 manas 237
AGENT_ONBOARDING_QUERY_AHT="""
15407 manas 238
select timestampdiff(second, callhistory.last_fetch_time, created) from callhistory where last_fetch_time is not null and call_type='onboarding' and date(created)=date(now() - INTERVAL 1 DAY ) and agent_id=%s;
15402 manas 239
"""
240
AGENT_ONBOARDING_QUERY_AIT="""
15407 manas 241
select timestampdiff(second, last_action_time, created) from fetchdatahistory where call_type='onboarding' and date(created)=date(now() - INTERVAL 1 DAY)  and agent_id=%s;
15402 manas 242
"""
243
AGENT_ONBOARDING_QUERY_AIT="""
15407 manas 244
select timestampdiff(second, last_action_time, created) from fetchdatahistory where call_type='onboarding' and date(created)=date(now() - INTERVAL 1 DAY) and agent_id=%s;
15402 manas 245
"""
15394 manas 246
 
15402 manas 247
center_alignment=xlwt.easyxf("align: horiz center")
15394 manas 248
 
249
 
15402 manas 250
 
15394 manas 251
def getDbConnection():
252
    return MySQLdb.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
253
 
254
 
255
def generateFreshCallingReport():
256
    datesql=FRESH_QUERY 
257
    conn = getDbConnection()
258
 
259
    cursor = conn.cursor()
260
    cursor.execute(datesql)
261
    result = cursor.fetchall()
262
    global workbook
263
    workbook = xlwt.Workbook()
264
    worksheet = workbook.add_sheet("Fresh")
265
    boldStyle = xlwt.XFStyle()
266
    newStyle= xlwt.XFStyle()
267
    style = xlwt.XFStyle()
268
    pattern = xlwt.Pattern()
269
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
270
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
271
    style.pattern = pattern
272
    f = xlwt.Font()
273
    f.bold = True
274
    boldStyle.font = f
275
 
276
    column = 0
277
    row = 0
278
    currentList=[]
279
 
280
    worksheet.write(0,0,'Call Disposition Type',style)
281
    worksheet.write(0,1,'Count',style)
282
 
283
    worksheet.write(1, column, 'Call Later', newStyle)
284
    worksheet.write(2,column, 'Ringing No Answer', newStyle)
285
    worksheet.write(3,column, 'Not Reachable', newStyle)
286
    worksheet.write(4,column, 'Switched Off', newStyle)
287
    worksheet.write(5,column, 'Invalid Number', newStyle)
288
    worksheet.write(6,column, 'Wrong Number', newStyle)
289
    worksheet.write(7,column, 'Hang Up', newStyle)
290
    worksheet.write(8,column, 'Retailer Not Interested', newStyle)
291
    worksheet.write(9,column, 'Already Profitmandi user', boldStyle)   
292
    worksheet.write(10,column, 'Verified Link Sent', boldStyle)
293
    worksheet.write(11,column, 'Accessory Retailer', newStyle)
294
    worksheet.write(12,column, 'Service Center Retailer', newStyle)
295
    worksheet.write(13,column, 'Not a Retailer', newStyle)
296
    worksheet.write(14,column, 'Recharge Retailer', newStyle)
15402 manas 297
    worksheet.write(15,column, 'Contactable Data (%)', newStyle)
298
    worksheet.write(16,column, 'Non Contactable Data (%)', newStyle)
15394 manas 299
    worksheet.write(17,column, 'Agents Logged In', style)
300
    worksheet.write(18,column, 'Average Login Time (In Hrs)', style)
301
    worksheet.write(19,column, 'Total Dialed Out', style)
302
    worksheet.write(20,column, 'Average Dialed Out per agent', style)
303
    worksheet.write(21,column, 'Average Call Duration (In Hrs)', style)
15402 manas 304
    worksheet.write(22,column, 'Average Handling Time (In Hrs)', style)
305
    worksheet.write(23,column, 'Average Idle Time (In Hrs)', style)
306
    worksheet.write(24,column, 'Links Converted', style)
307
    worksheet.write(25,column, 'Link sent yet to be converted', style)
15415 manas 308
    worksheet.write(26,column, 'Total activations', style)
15394 manas 309
    contactableData=0
310
    nonContactableData=0
311
 
312
    for r in result:
15437 manas 313
        if dispositionMap.get(r[0]) == 9:
314
            totalVerifiedLinkSent=int(r[1])
15394 manas 315
        row = dispositionMap.get(r[0])+1
316
        if dispositionMap.get(r[0]) == 1 or dispositionMap.get(r[0]) == 2 or dispositionMap.get(r[0]) == 3 or dispositionMap.get(r[0]) == 4:
317
            nonContactableData+=int(r[1])
318
        else:
319
            contactableData+=r[1] 
320
        currentList.append(str(row))
321
        column = 1
15402 manas 322
        worksheet.write(row, column, r[1],center_alignment)
15394 manas 323
 
324
    remainingList = list(set(freshList) - set(currentList))
325
    for i,val in enumerate(remainingList):
326
        row = int(val)
327
        column = 1
15402 manas 328
        worksheet.write(row, column, 0,center_alignment)
15394 manas 329
    totalDispositions=contactableData+nonContactableData
330
 
15402 manas 331
    worksheet.write(15,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
332
    worksheet.write(16,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
15394 manas 333
 
15418 manas 334
    conn.close()
15402 manas 335
 
15418 manas 336
    datesql=FRESH_AGENTS_CALLED_COUNT 
337
    conn = getDbConnection()
338
    cursor = conn.cursor()
339
    cursor.execute(datesql)
340
    result = cursor.fetchall()
341
    agentLoginList=[]
342
    for r in result:
343
        agentLoginList.append(str(r[0]))
344
 
15394 manas 345
    conn.close()
15418 manas 346
 
347
    datesql=FRESH_QUERY_LOGIN_TIME
15394 manas 348
    conn = getDbConnection()
349
    cursor = conn.cursor()
350
    cursor.execute(datesql)
351
    result = cursor.fetchall()
352
    loginTime=0
353
    for r in result:
354
        loginTime+=r[1].seconds
355
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
356
    hours=averageLoginTime/3600
357
    minutesLeft=(averageLoginTime%3600)/60
15402 manas 358
    worksheet.write(17,1,len(list(set(agentLoginList))),center_alignment)
359
    worksheet.write(18,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
360
    worksheet.write(19,1,totalDispositions,center_alignment)
361
    worksheet.write(20,1,totalDispositions/float(len(list(set(agentLoginList)))),center_alignment)
15394 manas 362
    conn.close()
363
    datesql=FRESH_QUERY_DURATION
364
    conn = getDbConnection()
365
 
366
    cursor = conn.cursor()
367
    cursor.execute(datesql)
368
    result = cursor.fetchall()
369
    for r in result:
370
        totalCallDuration= r[0]
371
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
372
    hours=averageCallDuration/3600
373
    minutesLeft=(averageCallDuration%3600)/60    
15402 manas 374
    worksheet.write(21,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
15394 manas 375
 
15402 manas 376
    conn.close()
377
    datesql=FRESH_QUERY_AHT
378
    conn = getDbConnection()
379
 
380
    cursor = conn.cursor()
381
    cursor.execute(datesql)
382
    result = cursor.fetchall()
383
    loginTime=0
384
    for r in result:
385
        loginTime+=r[0]
386
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
387
    hours=averageLoginTime/3600
388
    minutesLeft=(averageLoginTime%3600)/60
389
    worksheet.write(22,1,len(list(set(agentLoginList))),center_alignment)
390
 
391
    conn.close()
392
    datesql=FRESH_QUERY_AIT
393
    conn = getDbConnection()
394
 
395
    cursor = conn.cursor()
396
    cursor.execute(datesql)
397
    result = cursor.fetchall()
398
    loginTime=0
399
    for r in result:
15481 amit.gupta 400
        if r[0] is not None:
401
            loginTime+=r[0]
15402 manas 402
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
403
    hours=averageLoginTime/3600
404
    minutesLeft=(averageLoginTime%3600)/60
405
    worksheet.write(23,1,len(list(set(agentLoginList))),center_alignment)
406
 
407
    conn.close()
408
    datesql=FRESH_QUERY_LINKS_CONVERTED
409
    conn = getDbConnection()
15441 manas 410
    global Converted
411
    global AgentsLoggedIn
412
    AgentsLoggedIn=len(list(set(agentLoginList)))
15402 manas 413
    cursor = conn.cursor()
414
    cursor.execute(datesql)
415
    result = cursor.fetchall()
416
    loginTime=0
417
    for r in result:
15441 manas 418
        Converted=r[0]
15402 manas 419
        worksheet.write(24,1,r[0],center_alignment)
15441 manas 420
    worksheet.write(25,1,totalVerifiedLinkSent-Converted,center_alignment)
15402 manas 421
    conn.close()
422
 
15415 manas 423
    datesql=TOTAL_ACTIVATIONS
424
    conn = getDbConnection()
15441 manas 425
    global TotalActivations
15415 manas 426
    cursor = conn.cursor()
427
    cursor.execute(datesql)
428
    result = cursor.fetchall()
429
    loginTime=0
430
    for r in result:
15441 manas 431
        TotalActivations=r[0]
15415 manas 432
        worksheet.write(26,1,r[0],center_alignment)    
433
 
15394 manas 434
    workbook.save(TMP_FILE)
435
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
436
 
437
 
438
def generateAgentWiseFreshCallingReport():
439
 
440
    agentId=3
441
    rb = open_workbook(TMP_FILE,formatting_info=True)
442
    workbook = copy(rb)
443
    numberOfSheets=rb.nsheets
444
    sheet=rb.sheet_by_index(numberOfSheets-1)
445
    worksheet = workbook.get_sheet(numberOfSheets-1)
446
 
447
    boldStyle = xlwt.XFStyle()
448
    newStyle= xlwt.XFStyle()
449
    style = xlwt.XFStyle()
450
    pattern = xlwt.Pattern()
451
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
452
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
453
    style.pattern = pattern
454
    f = xlwt.Font()
455
    f.bold = True
456
    boldStyle.font = f
457
 
458
    column = agentId
459
    row = 25
460
    worksheet.write(row,column-1,'Call Disposition Type',style)
461
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
462
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
463
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
464
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
465
    worksheet.write(row+5,column-1, 'Invalid Number', newStyle)
466
    worksheet.write(row+6,column-1, 'Wrong Number', newStyle)
467
    worksheet.write(row+7,column-1, 'Hang Up', newStyle)
468
    worksheet.write(row+8,column-1, 'Retailer Not Interested', newStyle)
469
    worksheet.write(row+9,column-1, 'Already Profitmandi user', boldStyle)   
470
    worksheet.write(row+10,column-1, 'Verified Link Sent', boldStyle)
471
    worksheet.write(row+11,column-1, 'Accessory Retailer', newStyle)
472
    worksheet.write(row+12,column-1, 'Service Center Retailer', newStyle)
473
    worksheet.write(row+13,column-1, 'Not a Retailer', newStyle)
474
    worksheet.write(row+14,column-1, 'Recharge Retailer', newStyle)
15402 manas 475
    worksheet.write(row+15,column-1, 'Contactable Data (%)', newStyle)
476
    worksheet.write(row+16,column-1, 'Non Contactable Data (%)', newStyle)
15394 manas 477
    worksheet.write(row+17,column-1, 'Total Dialed Out', style)
478
    worksheet.write(row+18,column-1, 'Login Time (In Hrs)', style)
479
    worksheet.write(row+19,column-1, 'Call Duration (In Hrs)', style)
15402 manas 480
    worksheet.write(row+20,column-1, 'Handling Time (In Hrs)', style)
481
    worksheet.write(row+21,column-1, 'Idle Time (In Hrs)', style)
482
    worksheet.write(row+22,column-1, 'Links Converted', style)
483
    worksheet.write(row+23,column-1, 'Link sent yet to be converted', style)        
15394 manas 484
    columnId=agentId
485
    while True:
15407 manas 486
            if agentId >20 :
15394 manas 487
                break
488
            else: 
489
                datesql=AGENT_FRESH_QUERY %(agentId)
490
                conn = getDbConnection()
491
 
492
                cursor = conn.cursor()
493
                cursor.execute(datesql)
494
                result = cursor.fetchall()
495
 
496
                currentList=[]
497
                contactableData=0
498
                nonContactableData=0
499
                if cursor.rowcount ==0:
500
 
501
                    agentId+=1
502
                    continue    
503
                else:
504
                    for r in result:
15438 manas 505
                        if dispositionMap.get(r[0]) == 9:
506
                            totalVerifiedLinkSent=int(r[1])
15394 manas 507
                        row = dispositionMap.get(r[0])+26
508
                        if dispositionMap.get(r[0]) == 1 or dispositionMap.get(r[0]) == 2 or dispositionMap.get(r[0]) == 3 or dispositionMap.get(r[0]) == 4:
509
                            nonContactableData+=int(r[1])
510
                        else:
511
                            contactableData+=r[1] 
512
                        currentList.append(str(dispositionMap.get(r[0])))
513
                        column = agentId
514
                        remainingList = list(set(freshList) - set(currentList))
515
 
15402 manas 516
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 517
                        for i,val in enumerate(remainingList):
518
                            row = int(val)+26
519
                            column = agentId
15402 manas 520
                            worksheet.write(row, columnId, 0,center_alignment)
15394 manas 521
                    totalDialedOut = contactableData+nonContactableData
15402 manas 522
                    worksheet.write(25+15,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
523
                    worksheet.write(25+16,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
524
                    worksheet.write(25+17,columnId,totalDialedOut,center_alignment)
15394 manas 525
                    conn.close()
526
 
527
                    name_query=AGENT_NAME_QUERY %(agentId)
528
                    conn = getDbConnection()
529
                    column=agentId
530
                    cursor = conn.cursor()
531
                    cursor.execute(name_query)
532
                    result = cursor.fetchall()
533
                    for r in result:
534
                        worksheet.write(25,columnId,r,style)
535
 
536
                    conn.close()
537
 
538
 
539
                    name_query=AGENT_FRESH_QUERY_LOGIN_TIME %(agentId)
540
                    conn = getDbConnection()
541
                    column=agentId
542
                    cursor = conn.cursor()
543
                    cursor.execute(name_query)
544
                    result = cursor.fetchall()
545
                    loginTime=0
546
                    for r in result:
547
                        loginTime+=r[0].seconds
548
 
549
                    hours=loginTime/3600
550
                    minutesLeft=(loginTime%3600)/60
15402 manas 551
                    worksheet.write(25+18,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 552
                    conn.close()
553
 
554
                    name_query=AGENT_FRESH_QUERY_DURATION %(agentId)
555
                    conn = getDbConnection()
556
                    column=agentId
557
                    cursor = conn.cursor()
558
                    cursor.execute(name_query)
559
                    result = cursor.fetchall()
560
                    loginTime=0
561
                    for r in result:
562
                        loginTime+=r[0]
563
                    hours=loginTime/3600
564
                    minutesLeft=(loginTime%3600)/60
15402 manas 565
                    worksheet.write(25+19,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 566
                    conn.close()
567
 
15402 manas 568
                    name_query=AGENT_FRESH_QUERY_AHT %(agentId)
569
                    conn = getDbConnection()
570
                    column=agentId
571
                    cursor = conn.cursor()
572
                    cursor.execute(name_query)
573
                    result = cursor.fetchall()
574
                    loginTime=0
575
                    for r in result:
576
                        loginTime+=r[0]
577
                    hours=loginTime/3600
578
                    minutesLeft=(loginTime%3600)/60
579
                    worksheet.write(25+20,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
580
                    conn.close()
581
 
582
                    name_query=AGENT_FRESH_QUERY_AIT %(agentId)
583
                    conn = getDbConnection()
584
                    column=agentId
585
                    cursor = conn.cursor()
586
                    cursor.execute(name_query)
587
                    result = cursor.fetchall()
588
                    loginTime=0
589
                    for r in result:
590
                        loginTime+=r[0]
591
                    hours=loginTime/3600
592
                    minutesLeft=(loginTime%3600)/60
593
                    worksheet.write(25+21,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
594
                    conn.close()
595
 
596
                    datesql=AGENT_FRESH_QUERY_LINKS_CONVERTED%(agentId)
597
                    conn = getDbConnection()
598
 
599
                    cursor = conn.cursor()
600
                    cursor.execute(datesql)
601
                    result = cursor.fetchall()
602
                    loginTime=0
603
                    for r in result:
15438 manas 604
                        #worksheet.write(25+22,columnId,r[0],center_alignment)
605
                        converted=r[0]
15402 manas 606
                        worksheet.write(25+22,columnId,r[0],center_alignment)
15438 manas 607
                    worksheet.write(25+23,columnId,totalVerifiedLinkSent-converted,center_alignment)    
15402 manas 608
                    conn.close()
15438 manas 609
#                     datesql=AGENT_FRESH_QUERY_LINKS_NOT_CONVERTED%(agentId)
610
#                     conn = getDbConnection()
611
#                     
612
#                     cursor = conn.cursor()
613
#                     cursor.execute(datesql)
614
#                     result = cursor.fetchall()
615
#                     loginTime=0
616
#                     for r in result:
617
#                         worksheet.write(25+23,columnId,r[0],center_alignment)    
15402 manas 618
 
15394 manas 619
                agentId+=1
620
                columnId+=1
621
    workbook.save(TMP_FILE)    
622
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
623
 
624
def generateFollowUpCallingReport():
625
    datesql=FOLLOW_UP_QUERY 
626
    conn = getDbConnection()
627
 
628
    cursor = conn.cursor()
629
    cursor.execute(datesql)
630
    result = cursor.fetchall()
631
    rb = open_workbook(TMP_FILE,formatting_info=True)
632
    workbook = copy(rb)
633
 
634
    worksheet = workbook.add_sheet("FollowUp")
635
    boldStyle = xlwt.XFStyle()
636
    newStyle= xlwt.XFStyle()
637
    style = xlwt.XFStyle()
638
    pattern = xlwt.Pattern()
639
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
640
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
641
    style.pattern = pattern
642
    f = xlwt.Font()
643
    f.bold = True
644
    boldStyle.font = f
645
 
646
    column = 0
647
    row = 0
648
    currentList=[]
649
 
650
    worksheet.write(0,0,'Call Disposition Type',style)
651
    worksheet.write(0,1,'Count',style)
652
 
653
    worksheet.write(1, column, 'Call Later', newStyle)
654
    worksheet.write(2,column, 'Ringing No Answer', newStyle)
655
    worksheet.write(3,column, 'Not Reachable', newStyle)
656
    worksheet.write(4,column, 'Switched Off', newStyle)
657
    worksheet.write(5,column, 'Retailer Not Interested', newStyle)
658
    worksheet.write(6,column, 'Already Profitmandi user', boldStyle)   
659
    worksheet.write(7,column, 'Verified Link Sent', boldStyle)
15409 manas 660
    worksheet.write(8,column, 'Accessory Retailer', newStyle)
661
    worksheet.write(9,column, 'Service Center Retailer', newStyle)
662
    worksheet.write(10,column, 'Not Retailer', boldStyle)   
663
    worksheet.write(11,column, 'Recharge Retailer', boldStyle)
664
    worksheet.write(12,column, 'Contactable Data (%)', newStyle)
665
    worksheet.write(13,column, 'Non Contactable Data (%)', newStyle)
666
    worksheet.write(14,column, 'Agents Logged In', style)
667
    worksheet.write(15,column, 'Average Login Time (In Hrs)', style)
668
    worksheet.write(16,column, 'Total Dialed Out', style)
669
    worksheet.write(17,column, 'Average Dialed Out per agent', style)
670
    worksheet.write(18,column, 'Average Call Duration (In Hrs)', style)
671
    worksheet.write(19,column, 'Average Handling Time (In Hrs)', style)
672
    worksheet.write(20,column, 'Average Idle Time (In Hrs)', style)
15394 manas 673
 
674
    contactableData=0
675
    nonContactableData=0
676
    totalDispositions=0
15402 manas 677
 
15394 manas 678
    for r in result:
679
        row = followUpDispositionMap.get(r[0])+1
15399 manas 680
        if followUpDispositionMap.get(r[0]) == 1 or followUpDispositionMap.get(r[0]) == 2 or followUpDispositionMap.get(r[0]) == 3:
15394 manas 681
            nonContactableData+=int(r[1])
682
        else:
683
            contactableData+=r[1] 
684
        currentList.append(str(row))
685
        column = 1
15402 manas 686
        worksheet.write(row, column, r[1],center_alignment)
15394 manas 687
 
688
    remainingList = list(set(followUpList) - set(currentList))
15402 manas 689
 
15394 manas 690
    for i,val in enumerate(remainingList):
691
        row = int(val)
15402 manas 692
 
15394 manas 693
        column = 1
15402 manas 694
        worksheet.write(row, column, 0,center_alignment)
15394 manas 695
    totalDispositions=contactableData+nonContactableData
15409 manas 696
    worksheet.write(12,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
697
    worksheet.write(13,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
15394 manas 698
 
699
 
700
    conn.close()
701
    datesql=FOLLOW_UP_QUERY_LOGIN_TIME 
702
    conn = getDbConnection()
703
 
704
    cursor = conn.cursor()
705
    cursor.execute(datesql)
706
    result = cursor.fetchall()
707
    agentLoginList=[]
708
    averageLoginTime=0
709
    loginTime=0
710
    for r in result:
711
        loginTime+=r[1].seconds
712
        agentLoginList.append(str(r[0]))
713
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
714
    hours=averageLoginTime/3600
715
    minutesLeft=(averageLoginTime%3600)/60
15409 manas 716
    worksheet.write(14,1,len(list(set(agentLoginList))),center_alignment)
717
    worksheet.write(15,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
718
    worksheet.write(16,1,totalDispositions,center_alignment)
719
    worksheet.write(17,1,(contactableData+nonContactableData)/len(list(set(agentLoginList))),center_alignment)
15394 manas 720
    conn.close()
721
    datesql=FOLLOW_UP_QUERY_DURATION
722
    conn = getDbConnection()
723
 
724
    cursor = conn.cursor()
725
    cursor.execute(datesql)
726
    result = cursor.fetchall()
727
    for r in result:
728
        totalCallDuration= r[0]
729
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
730
    hours=averageCallDuration/3600
731
    minutesLeft=(averageCallDuration%3600)/60    
15409 manas 732
    worksheet.write(18,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
15402 manas 733
    conn.close()
734
 
735
    datesql=FOLLOW_UP_QUERY_AHT
736
    conn = getDbConnection()
737
    cursor = conn.cursor()
738
    cursor.execute(datesql)
739
    result = cursor.fetchall()
740
    loginTime=0
741
    for r in result:
742
        loginTime+=r[0]
743
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
744
    hours=averageLoginTime/3600
745
    minutesLeft=(averageLoginTime%3600)/60
15409 manas 746
    worksheet.write(19,1,len(list(set(agentLoginList))),center_alignment)
15402 manas 747
    conn.close()
748
 
749
    datesql=FOLLOW_UP_QUERY_AIT
750
    conn = getDbConnection()
751
    cursor = conn.cursor()
752
    cursor.execute(datesql)
753
    result = cursor.fetchall()
754
    loginTime=0
755
    for r in result:
756
        loginTime+=r[0]
757
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
758
    hours=averageLoginTime/3600
759
    minutesLeft=(averageLoginTime%3600)/60
15409 manas 760
    worksheet.write(20,1,len(list(set(agentLoginList))),center_alignment)
15402 manas 761
    workbook.save(TMP_FILE)  
15394 manas 762
 
763
def generateAgentWiseFollowupCallingReport():
764
 
765
    agentId=3
766
    rb = open_workbook(TMP_FILE,formatting_info=True)
767
    workbook = copy(rb)
768
    numberOfSheets=rb.nsheets
769
    sheet=rb.sheet_by_index(numberOfSheets-1)
770
    worksheet = workbook.get_sheet(numberOfSheets-1)
771
    boldStyle = xlwt.XFStyle()
772
    newStyle= xlwt.XFStyle()
773
    style = xlwt.XFStyle()
774
    pattern = xlwt.Pattern()
775
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
776
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
777
    style.pattern = pattern
778
    f = xlwt.Font()
779
    f.bold = True
780
    boldStyle.font = f
781
 
782
    column = agentId
783
    row = 25
784
    worksheet.write(row,column-1,'Call Disposition Type',style)
785
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
786
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
787
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
788
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
789
    worksheet.write(row+5,column-1, 'Retailer Not Interested', newStyle)
790
    worksheet.write(row+6,column-1, 'Already Profitmandi user', boldStyle)   
791
    worksheet.write(row+7,column-1, 'Verified Link Sent', boldStyle)
15409 manas 792
    worksheet.write(row+8,column-1, 'Accessory Retailer', newStyle)
793
    worksheet.write(row+9,column-1, 'Service Center Retailer', newStyle)
794
    worksheet.write(row+10,column-1, 'Not retailer', style)
795
    worksheet.write(row+11,column-1, 'Recharge Retailer', style)
796
    worksheet.write(row+12,column-1, 'Contactable Data (%)', newStyle)
797
    worksheet.write(row+13,column-1, 'Non Contactable Data (%)', newStyle)
798
    worksheet.write(row+14,column-1, 'Total Dialed Out', style)
799
    worksheet.write(row+15,column-1, 'Login Time (In Hrs)', style)
800
    worksheet.write(row+16,column-1, 'Call Duration (In Hrs)', style)
801
    worksheet.write(row+17,column-1, 'Handling Time (In Hrs)', style)
802
    worksheet.write(row+18,column-1, 'Idle Time (In Hrs)', style)
15394 manas 803
    columnId=agentId
804
    while True:
15407 manas 805
            if agentId >20 :
15394 manas 806
                break
807
            else: 
808
                datesql=AGENT_FOLLOW_UP_QUERY %(agentId)
809
                conn = getDbConnection()
810
 
811
                cursor = conn.cursor()
812
                cursor.execute(datesql)
813
                result = cursor.fetchall()
814
 
815
                currentList=[]
816
                contactableData=0
817
                nonContactableData=0
818
                if cursor.rowcount ==0:
819
                    agentId+=1
820
                    continue    
821
                else:
15402 manas 822
 
15394 manas 823
                    for r in result:
824
                        row = followUpDispositionMap.get(r[0])+26
15402 manas 825
                        if followUpDispositionMap.get(r[0]) == 1 or followUpDispositionMap.get(r[0]) == 2 or followUpDispositionMap.get(r[0]) == 3 :
15394 manas 826
                            nonContactableData+=int(r[1])
827
                        else:
828
                            contactableData+=r[1] 
829
                        currentList.append(str(followUpDispositionMap.get(r[0])+1))
830
                        column = agentId
15402 manas 831
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 832
                    remainingList = list(set(followUpList) - set(currentList))
833
 
834
                    for i,val in enumerate(remainingList):
835
                        row = int(val)+25
836
                        column = agentId
15402 manas 837
                        worksheet.write(row, columnId, 0,center_alignment)
15394 manas 838
                    totalDialedOut = contactableData+nonContactableData
15409 manas 839
                    worksheet.write(25+12,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
840
                    worksheet.write(25+13,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
841
                    worksheet.write(25+14,columnId,totalDialedOut,center_alignment)
15394 manas 842
                    conn.close()
843
 
844
                    name_query=AGENT_NAME_QUERY %(agentId)
845
                    conn = getDbConnection()
846
                    column=agentId
847
                    cursor = conn.cursor()
848
                    cursor.execute(name_query)
849
                    result = cursor.fetchall()
850
                    for r in result:
851
                        worksheet.write(25,columnId,r,style)
852
 
853
                    conn.close()
854
 
855
 
856
                    name_query=AGENT_FOLLOW_UP_QUERY_LOGIN_TIME %(agentId)
857
                    conn = getDbConnection()
858
                    column=agentId
859
                    cursor = conn.cursor()
860
                    cursor.execute(name_query)
861
                    result = cursor.fetchall()
862
                    loginTime=0
863
                    for r in result:
864
                        loginTime+=r[0].seconds
865
 
866
                    hours=loginTime/3600
867
                    minutesLeft=(loginTime%3600)/60
15409 manas 868
                    worksheet.write(25+15,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 869
                    conn.close()
870
 
871
                    name_query=AGENT_FOLLOW_UP_QUERY_DURATION %(agentId)
872
                    conn = getDbConnection()
873
                    column=agentId
874
                    cursor = conn.cursor()
875
                    cursor.execute(name_query)
876
                    result = cursor.fetchall()
877
                    loginTime=0
878
                    for r in result:
879
                        loginTime+=r[0]
880
                    hours=loginTime/3600
881
                    minutesLeft=(loginTime%3600)/60
15409 manas 882
                    worksheet.write(25+16,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 883
                    conn.close()
884
 
15402 manas 885
                    name_query=AGENT_FOLLOW_UP_QUERY_AHT %(agentId)
886
                    conn = getDbConnection()
887
                    column=agentId
888
                    cursor = conn.cursor()
889
                    cursor.execute(name_query)
890
                    result = cursor.fetchall()
891
                    loginTime=0
892
                    for r in result:
893
                        loginTime+=r[0]
894
                    hours=loginTime/3600
895
                    minutesLeft=(loginTime%3600)/60
15409 manas 896
                    worksheet.write(25+17,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15402 manas 897
                    conn.close()
898
 
899
                    name_query=AGENT_FOLLOW_UP_QUERY_AIT %(agentId)
900
                    conn = getDbConnection()
901
                    column=agentId
902
                    cursor = conn.cursor()
903
                    cursor.execute(name_query)
904
                    result = cursor.fetchall()
905
                    loginTime=0
906
                    for r in result:
907
                        loginTime+=r[0]
908
                    hours=loginTime/3600
909
                    minutesLeft=(loginTime%3600)/60
15409 manas 910
                    worksheet.write(25+18,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15402 manas 911
                    conn.close()
912
 
15394 manas 913
                agentId+=1
914
                columnId+=1
915
    workbook.save(TMP_FILE)    
916
 
917
def generateOnBoardingCallingReport():
918
    datesql=ONBOARDING_QUERY 
919
    conn = getDbConnection()
920
 
921
    cursor = conn.cursor()
922
    cursor.execute(datesql)
923
    result = cursor.fetchall()
924
    rb = open_workbook(TMP_FILE,formatting_info=True)
925
    workbook = copy(rb)
926
 
927
    worksheet = workbook.add_sheet("Onboarding")
928
    boldStyle = xlwt.XFStyle()
929
    newStyle= xlwt.XFStyle()
930
    style = xlwt.XFStyle()
931
    pattern = xlwt.Pattern()
932
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
933
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
934
    style.pattern = pattern
935
    f = xlwt.Font()
936
    f.bold = True
937
    boldStyle.font = f
938
 
939
    column = 0
940
    row = 0
941
    currentList=[]
942
 
943
    worksheet.write(0,0,'Call Disposition Type',style)
944
    worksheet.write(0,1,'Count',style)
945
    worksheet.write(1, column, 'Call Later', newStyle)
946
    worksheet.write(2,column, 'Ringing No Answer', newStyle)
947
    worksheet.write(3,column, 'Not Reachable', newStyle)
948
    worksheet.write(4,column, 'Switched Off', newStyle)
949
    worksheet.write(5,column, 'Successful', newStyle)
950
    worksheet.write(6,column, 'Contactable Data', newStyle)
951
    worksheet.write(7,column, 'Non Contactable Data', newStyle)
952
    worksheet.write(8,column, 'Agents Logged In', style)
953
    worksheet.write(9,column, 'Average Login Time (In Hrs)', style)
954
    worksheet.write(10,column, 'Total Dialed Out', style)
955
    worksheet.write(11,column, 'Average Dialed Out per agent', style)
956
    worksheet.write(12,column, 'Average Call Duration (In Hrs)', style)
15402 manas 957
    worksheet.write(13,column, 'Average Handling Time (In Hrs)', style)
958
    worksheet.write(14,column, 'Average Idle Time (In Hrs)', style)
15394 manas 959
 
960
    contactableData=0
961
    nonContactableData=0
962
    totalDispositions=0
963
    for r in result:
964
        row = onBoardingDispositionMap.get(r[0])+1
965
        if onBoardingDispositionMap.get(r[0]) == 1 or onBoardingDispositionMap.get(r[0]) == 2 or onBoardingDispositionMap.get(r[0]) == 3:
966
            nonContactableData+=int(r[1])
967
        else:
968
            contactableData+=r[1] 
969
        currentList.append(str(row))
970
        column = 1
15402 manas 971
        worksheet.write(row, column, r[1],center_alignment)
15394 manas 972
 
973
    remainingList = list(set(onBoardingList) - set(currentList))
15402 manas 974
 
15394 manas 975
    for i,val in enumerate(remainingList):
976
        row = int(val)
977
        column = 1
15402 manas 978
        worksheet.write(row, column, 0,center_alignment)
15394 manas 979
    totalDispositions=contactableData+nonContactableData
15402 manas 980
    worksheet.write(6,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
981
    worksheet.write(7,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
15394 manas 982
 
983
 
984
    conn.close()
985
    datesql=ONBOARDING_QUERY_LOGIN_TIME 
986
    conn = getDbConnection()
987
 
988
    cursor = conn.cursor()
989
    cursor.execute(datesql)
990
    result = cursor.fetchall()
991
    agentLoginList=[]
992
    averageLoginTime=0
993
    loginTime=0
994
    for r in result:
995
        loginTime+=r[1].seconds
996
        agentLoginList.append(str(r[0]))
997
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
998
    hours=averageLoginTime/3600
999
    minutesLeft=(averageLoginTime%3600)/60
15402 manas 1000
    worksheet.write(8,1,len(list(set(agentLoginList))),center_alignment)
1001
    worksheet.write(9,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
1002
    worksheet.write(10,1,totalDispositions,center_alignment)
1003
    worksheet.write(11,1,(contactableData+nonContactableData)/len(list(set(agentLoginList))),center_alignment)
15394 manas 1004
    conn.close()
1005
    datesql=ONBOARDING_QUERY_DURATION
1006
    conn = getDbConnection()
1007
 
1008
    cursor = conn.cursor()
1009
    cursor.execute(datesql)
1010
    result = cursor.fetchall()
1011
    for r in result:
1012
        totalCallDuration= r[0]
1013
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
1014
    hours=averageCallDuration/3600
1015
    minutesLeft=(averageCallDuration%3600)/60    
15402 manas 1016
    worksheet.write(12,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
1017
 
1018
    conn.close()
1019
    datesql=ONBOARDING_QUERY_AHT
1020
    conn = getDbConnection()
1021
 
1022
    cursor = conn.cursor()
1023
    cursor.execute(datesql)
1024
    result = cursor.fetchall()
1025
    for r in result:
1026
        totalCallDuration= r[0]
1027
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
1028
    hours=averageCallDuration/3600
1029
    minutesLeft=(averageCallDuration%3600)/60    
1030
    worksheet.write(13,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
1031
    conn.close()
1032
    datesql=ONBOARDING_QUERY_AIT
1033
    conn = getDbConnection()
1034
 
1035
    cursor = conn.cursor()
1036
    cursor.execute(datesql)
1037
    result = cursor.fetchall()
1038
    for r in result:
1039
        totalCallDuration= r[0]
1040
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))
1041
    hours=averageCallDuration/3600
1042
    minutesLeft=(averageCallDuration%3600)/60    
1043
    worksheet.write(14,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
15394 manas 1044
    workbook.save(TMP_FILE)
15402 manas 1045
 
15394 manas 1046
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
1047
 
1048
 
1049
def generateAgentWiseOnboardingCallingReport():
1050
 
1051
    agentId=3
1052
    rb = open_workbook(TMP_FILE,formatting_info=True)
1053
    workbook = copy(rb)
1054
    numberOfSheets=rb.nsheets
15402 manas 1055
 
15394 manas 1056
    sheet=rb.sheet_by_index(numberOfSheets-1)
1057
    worksheet = workbook.get_sheet(numberOfSheets-1)
1058
    boldStyle = xlwt.XFStyle()
1059
    newStyle= xlwt.XFStyle()
1060
    style = xlwt.XFStyle()
1061
    pattern = xlwt.Pattern()
1062
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
1063
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
1064
    style.pattern = pattern
1065
    f = xlwt.Font()
1066
    f.bold = True
1067
    boldStyle.font = f
1068
 
1069
    column = agentId
1070
    row = 25
1071
 
1072
    worksheet.write(row,column-1,'Call Disposition Type',style)
1073
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
1074
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
1075
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
1076
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
1077
    worksheet.write(row+5,column-1, 'Successful', newStyle)
1078
    worksheet.write(row+6,column-1, 'Contactable Data', newStyle)
1079
    worksheet.write(row+7,column-1, 'Non Contactable Data', newStyle)
1080
    worksheet.write(row+8,column-1, 'Total Dialed Out', style)
1081
    worksheet.write(row+9,column-1, 'Login Time (In Hrs)', style)
1082
    worksheet.write(row+10,column-1, 'Call Duration (In Hrs)', style)
15402 manas 1083
    worksheet.write(row+11,column-1, 'Handling Time (In Hrs)', style)
1084
    worksheet.write(row+12,column-1, 'Idle Time (In Hrs)', style)
15394 manas 1085
    columnId=agentId
1086
    while True:
15407 manas 1087
            if agentId >20 :
15394 manas 1088
                break
1089
            else: 
1090
                datesql=AGENT_ONBOARDING_QUERY %(agentId)
1091
                conn = getDbConnection()
1092
 
1093
                cursor = conn.cursor()
1094
                cursor.execute(datesql)
1095
                result = cursor.fetchall()
1096
 
1097
                currentList=[]
1098
                contactableData=0
1099
                nonContactableData=0
1100
                if cursor.rowcount ==0:
1101
                    agentId+=1
1102
                    continue    
1103
                else:
15402 manas 1104
 
15394 manas 1105
                    for r in result:
1106
                        row = onBoardingDispositionMap.get(r[0])+26
1107
                        if onBoardingDispositionMap.get(r[0]) == 1 or onBoardingDispositionMap.get(r[0]) == 2 or onBoardingDispositionMap.get(r[0]) == 3 or followUpDispositionMap.get(r[0]) == 4:
1108
                            nonContactableData+=int(r[1])
1109
                        else:
1110
                            contactableData+=r[1] 
1111
                        currentList.append(str(onBoardingDispositionMap.get(r[0])+1))
1112
                        column = agentId
15402 manas 1113
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 1114
                    remainingList = list(set(onBoardingList) - set(currentList))
1115
 
1116
                    for i,val in enumerate(remainingList):
1117
                        row = int(val)+25
1118
                        column = agentId
15402 manas 1119
                        worksheet.write(row, columnId, 0,center_alignment)
15394 manas 1120
                    totalDialedOut = contactableData+nonContactableData
15402 manas 1121
                    worksheet.write(25+6,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
1122
                    worksheet.write(25+7,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
1123
                    worksheet.write(25+8,columnId,totalDialedOut,center_alignment)
15394 manas 1124
                    conn.close()
1125
 
1126
                    name_query=AGENT_NAME_QUERY %(agentId)
1127
                    conn = getDbConnection()
1128
                    column=agentId
1129
                    cursor = conn.cursor()
1130
                    cursor.execute(name_query)
1131
                    result = cursor.fetchall()
1132
                    for r in result:
1133
                        worksheet.write(25,columnId,r,style)
1134
                    conn.close()
1135
 
1136
 
15402 manas 1137
                    name_query=AGENT_ONBOARDING_QUERY_LOGIN_TIME %(agentId)
15394 manas 1138
                    conn = getDbConnection()
1139
                    column=agentId
1140
                    cursor = conn.cursor()
1141
                    cursor.execute(name_query)
1142
                    result = cursor.fetchall()
1143
                    loginTime=0
1144
                    for r in result:
1145
                        loginTime+=r[0].seconds
1146
 
1147
                    hours=loginTime/3600
1148
                    minutesLeft=(loginTime%3600)/60
15402 manas 1149
                    worksheet.write(25+9,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 1150
                    conn.close()
1151
 
15402 manas 1152
                    name_query=AGENT_ONBOARDING_QUERY_DURATION %(agentId)
15394 manas 1153
                    conn = getDbConnection()
1154
                    column=agentId
1155
                    cursor = conn.cursor()
1156
                    cursor.execute(name_query)
1157
                    result = cursor.fetchall()
1158
                    loginTime=0
1159
                    for r in result:
1160
                        loginTime+=r[0]
1161
                    hours=loginTime/3600
1162
                    minutesLeft=(loginTime%3600)/60
15402 manas 1163
                    worksheet.write(25+10,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 1164
                    conn.close()
1165
 
15402 manas 1166
                    name_query=AGENT_ONBOARDING_QUERY_AHT %(agentId)
1167
                    conn = getDbConnection()
1168
                    column=agentId
1169
                    cursor = conn.cursor()
1170
                    cursor.execute(name_query)
1171
                    result = cursor.fetchall()
1172
                    loginTime=0
1173
                    for r in result:
1174
                        loginTime+=r[0]
1175
                    hours=loginTime/3600
1176
                    minutesLeft=(loginTime%3600)/60
1177
                    worksheet.write(25+11,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
1178
                    conn.close()
1179
 
1180
                    name_query=AGENT_ONBOARDING_QUERY_AIT %(agentId)
1181
                    conn = getDbConnection()
1182
                    column=agentId
1183
                    cursor = conn.cursor()
1184
                    cursor.execute(name_query)
1185
                    result = cursor.fetchall()
1186
                    loginTime=0
1187
                    for r in result:
1188
                        loginTime+=r[0]
1189
                    hours=loginTime/3600
1190
                    minutesLeft=(loginTime%3600)/60
1191
                    worksheet.write(25+12,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
1192
                    conn.close()
1193
 
15394 manas 1194
                agentId+=1
1195
                columnId+=1
1196
    workbook.save(TMP_FILE)          
1197
 
1198
 
1199
 
1200
def main():
1201
    generateFreshCallingReport()
1202
    generateAgentWiseFreshCallingReport()
1203
    generateFollowUpCallingReport()
1204
    generateAgentWiseFollowupCallingReport()
1205
    generateOnBoardingCallingReport()
1206
    generateAgentWiseOnboardingCallingReport()
15478 amit.gupta 1207
    sendmail(["manas.kapoor@shop2020.in","amit.sirohi@shop2020.in","rajneesh.arora@saholic.com","ritesh.chauhan@shop2020.in", "shailesh.kumar@shop2020.in"], "", TMP_FILE, SUBJECT)
1208
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
15402 manas 1209
 
15394 manas 1210
def sendmail(email, message, fileName, title):
1211
    if email == "":
1212
        return
1213
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
1214
    mailServer.ehlo()
1215
    mailServer.starttls()
1216
    mailServer.ehlo()
1217
 
1218
    # Create the container (outer) email message.
1219
    msg = MIMEMultipart()
1220
    msg['Subject'] = title
1221
    msg.preamble = title
15441 manas 1222
    message="Total Activations :" + str(TotalActivations)
1223
    message1="Links Converted :" + str(Converted)
1224
    message2="Total Agents Logged In :" + str(AgentsLoggedIn)
15442 manas 1225
    html_msg = MIMEText(message+"<br>"+message1+"<br>"+message2, 'html')
15394 manas 1226
    msg.attach(html_msg)
1227
 
1228
    fileMsg = MIMEBase('application', 'vnd.ms-excel')
1229
    fileMsg.set_payload(file(TMP_FILE).read())
1230
    encoders.encode_base64(fileMsg)
1231
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
1232
    msg.attach(fileMsg)
15402 manas 1233
 
15478 amit.gupta 1234
    MAILTO = ['manas.kapoor@saholic.com','amit.sirohi@shop2020.in','rajneesh.arora@saholic.com', 'ritesh.chauhan@shop2020.in', 'shailesh.kumar@shop2020.in']
1235
    #MAILTO = ['manas.kapoor@saholic.com']
15394 manas 1236
    mailServer.login(SENDER, PASSWORD)
1237
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
1238
 
1239
if __name__ == '__main__':
1240
    main()