Subversion Repositories SmartDukaan

Rev

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