Subversion Repositories SmartDukaan

Rev

Rev 15505 | Rev 15513 | 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
15506 manas 263
    totalVerifiedLinkSent=0
15394 manas 264
    workbook = xlwt.Workbook()
265
    worksheet = workbook.add_sheet("Fresh")
266
    boldStyle = xlwt.XFStyle()
267
    newStyle= xlwt.XFStyle()
268
    style = xlwt.XFStyle()
269
    pattern = xlwt.Pattern()
270
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
271
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
272
    style.pattern = pattern
273
    f = xlwt.Font()
274
    f.bold = True
275
    boldStyle.font = f
276
 
277
    column = 0
278
    row = 0
279
    currentList=[]
280
 
281
    worksheet.write(0,0,'Call Disposition Type',style)
282
    worksheet.write(0,1,'Count',style)
283
 
284
    worksheet.write(1, column, 'Call Later', newStyle)
285
    worksheet.write(2,column, 'Ringing No Answer', newStyle)
286
    worksheet.write(3,column, 'Not Reachable', newStyle)
287
    worksheet.write(4,column, 'Switched Off', newStyle)
288
    worksheet.write(5,column, 'Invalid Number', newStyle)
289
    worksheet.write(6,column, 'Wrong Number', newStyle)
290
    worksheet.write(7,column, 'Hang Up', newStyle)
291
    worksheet.write(8,column, 'Retailer Not Interested', newStyle)
292
    worksheet.write(9,column, 'Already Profitmandi user', boldStyle)   
293
    worksheet.write(10,column, 'Verified Link Sent', boldStyle)
294
    worksheet.write(11,column, 'Accessory Retailer', newStyle)
295
    worksheet.write(12,column, 'Service Center Retailer', newStyle)
296
    worksheet.write(13,column, 'Not a Retailer', newStyle)
297
    worksheet.write(14,column, 'Recharge Retailer', newStyle)
15402 manas 298
    worksheet.write(15,column, 'Contactable Data (%)', newStyle)
299
    worksheet.write(16,column, 'Non Contactable Data (%)', newStyle)
15394 manas 300
    worksheet.write(17,column, 'Agents Logged In', style)
301
    worksheet.write(18,column, 'Average Login Time (In Hrs)', style)
302
    worksheet.write(19,column, 'Total Dialed Out', style)
303
    worksheet.write(20,column, 'Average Dialed Out per agent', style)
304
    worksheet.write(21,column, 'Average Call Duration (In Hrs)', style)
15402 manas 305
    worksheet.write(22,column, 'Average Handling Time (In Hrs)', style)
306
    worksheet.write(23,column, 'Average Idle Time (In Hrs)', style)
307
    worksheet.write(24,column, 'Links Converted', style)
308
    worksheet.write(25,column, 'Link sent yet to be converted', style)
15415 manas 309
    worksheet.write(26,column, 'Total activations', style)
15394 manas 310
    contactableData=0
311
    nonContactableData=0
312
 
313
    for r in result:
15437 manas 314
        if dispositionMap.get(r[0]) == 9:
315
            totalVerifiedLinkSent=int(r[1])
15394 manas 316
        row = dispositionMap.get(r[0])+1
317
        if dispositionMap.get(r[0]) == 1 or dispositionMap.get(r[0]) == 2 or dispositionMap.get(r[0]) == 3 or dispositionMap.get(r[0]) == 4:
318
            nonContactableData+=int(r[1])
319
        else:
320
            contactableData+=r[1] 
321
        currentList.append(str(row))
322
        column = 1
15402 manas 323
        worksheet.write(row, column, r[1],center_alignment)
15394 manas 324
 
325
    remainingList = list(set(freshList) - set(currentList))
326
    for i,val in enumerate(remainingList):
327
        row = int(val)
328
        column = 1
15402 manas 329
        worksheet.write(row, column, 0,center_alignment)
15394 manas 330
    totalDispositions=contactableData+nonContactableData
331
 
15502 amit.gupta 332
    if totalDispositions > 0:
333
        worksheet.write(15,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
334
        worksheet.write(16,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
15394 manas 335
 
15418 manas 336
    conn.close()
15402 manas 337
 
15418 manas 338
    datesql=FRESH_AGENTS_CALLED_COUNT 
339
    conn = getDbConnection()
340
    cursor = conn.cursor()
341
    cursor.execute(datesql)
342
    result = cursor.fetchall()
343
    agentLoginList=[]
344
    for r in result:
345
        agentLoginList.append(str(r[0]))
346
 
15394 manas 347
    conn.close()
15505 manas 348
 
349
    if len(list(set(agentLoginList))) > 0:    
350
        datesql=FRESH_QUERY_LOGIN_TIME
351
        conn = getDbConnection()
352
        cursor = conn.cursor()
353
        cursor.execute(datesql)
354
        result = cursor.fetchall()
355
        loginTime=0
356
        for r in result:
357
            loginTime+=r[1].seconds
358
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
359
        hours=averageLoginTime/3600
360
        minutesLeft=(averageLoginTime%3600)/60
361
        worksheet.write(17,1,len(list(set(agentLoginList))),center_alignment)
362
        worksheet.write(18,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
363
        worksheet.write(19,1,totalDispositions,center_alignment)
364
        worksheet.write(20,1,totalDispositions/float(len(list(set(agentLoginList)))),center_alignment)
365
        conn.close()
366
        datesql=FRESH_QUERY_DURATION
367
        conn = getDbConnection()
15418 manas 368
 
15505 manas 369
        cursor = conn.cursor()
370
        cursor.execute(datesql)
371
        result = cursor.fetchall()
372
        for r in result:
373
            totalCallDuration= r[0]
374
        averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
375
        hours=averageCallDuration/3600
376
        minutesLeft=(averageCallDuration%3600)/60    
377
        worksheet.write(21,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
378
 
379
        conn.close()
380
        datesql=FRESH_QUERY_AHT
381
        conn = getDbConnection()
382
 
383
        cursor = conn.cursor()
384
        cursor.execute(datesql)
385
        result = cursor.fetchall()
386
        loginTime=0
387
        for r in result:
15481 amit.gupta 388
            loginTime+=r[0]
15505 manas 389
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
390
        hours=averageLoginTime/3600
391
        minutesLeft=(averageLoginTime%3600)/60
392
        worksheet.write(22,1,len(list(set(agentLoginList))),center_alignment)
393
 
394
        conn.close()
395
        datesql=FRESH_QUERY_AIT
396
        conn = getDbConnection()
397
 
398
        cursor = conn.cursor()
399
        cursor.execute(datesql)
400
        result = cursor.fetchall()
401
        loginTime=0
402
        for r in result:
403
            if r[0] is not None:
404
                loginTime+=r[0]
405
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
406
        hours=averageLoginTime/3600
407
        minutesLeft=(averageLoginTime%3600)/60
408
        worksheet.write(23,1,len(list(set(agentLoginList))),center_alignment)
409
        conn.close()
410
 
15402 manas 411
    datesql=FRESH_QUERY_LINKS_CONVERTED
412
    conn = getDbConnection()
15441 manas 413
    global Converted
414
    global AgentsLoggedIn
415
    AgentsLoggedIn=len(list(set(agentLoginList)))
15402 manas 416
    cursor = conn.cursor()
417
    cursor.execute(datesql)
418
    result = cursor.fetchall()
419
    loginTime=0
420
    for r in result:
15441 manas 421
        Converted=r[0]
15402 manas 422
        worksheet.write(24,1,r[0],center_alignment)
15441 manas 423
    worksheet.write(25,1,totalVerifiedLinkSent-Converted,center_alignment)
15402 manas 424
    conn.close()
425
 
15415 manas 426
    datesql=TOTAL_ACTIVATIONS
427
    conn = getDbConnection()
15441 manas 428
    global TotalActivations
15415 manas 429
    cursor = conn.cursor()
430
    cursor.execute(datesql)
431
    result = cursor.fetchall()
432
    loginTime=0
433
    for r in result:
15441 manas 434
        TotalActivations=r[0]
15415 manas 435
        worksheet.write(26,1,r[0],center_alignment)    
436
 
15394 manas 437
    workbook.save(TMP_FILE)
438
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
439
 
440
 
441
def generateAgentWiseFreshCallingReport():
442
 
443
    agentId=3
444
    rb = open_workbook(TMP_FILE,formatting_info=True)
445
    workbook = copy(rb)
446
    numberOfSheets=rb.nsheets
447
    sheet=rb.sheet_by_index(numberOfSheets-1)
448
    worksheet = workbook.get_sheet(numberOfSheets-1)
449
 
450
    boldStyle = xlwt.XFStyle()
451
    newStyle= xlwt.XFStyle()
452
    style = xlwt.XFStyle()
453
    pattern = xlwt.Pattern()
454
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
455
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
456
    style.pattern = pattern
457
    f = xlwt.Font()
458
    f.bold = True
459
    boldStyle.font = f
460
 
461
    column = agentId
462
    row = 25
463
    worksheet.write(row,column-1,'Call Disposition Type',style)
464
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
465
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
466
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
467
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
468
    worksheet.write(row+5,column-1, 'Invalid Number', newStyle)
469
    worksheet.write(row+6,column-1, 'Wrong Number', newStyle)
470
    worksheet.write(row+7,column-1, 'Hang Up', newStyle)
471
    worksheet.write(row+8,column-1, 'Retailer Not Interested', newStyle)
472
    worksheet.write(row+9,column-1, 'Already Profitmandi user', boldStyle)   
473
    worksheet.write(row+10,column-1, 'Verified Link Sent', boldStyle)
474
    worksheet.write(row+11,column-1, 'Accessory Retailer', newStyle)
475
    worksheet.write(row+12,column-1, 'Service Center Retailer', newStyle)
476
    worksheet.write(row+13,column-1, 'Not a Retailer', newStyle)
477
    worksheet.write(row+14,column-1, 'Recharge Retailer', newStyle)
15402 manas 478
    worksheet.write(row+15,column-1, 'Contactable Data (%)', newStyle)
479
    worksheet.write(row+16,column-1, 'Non Contactable Data (%)', newStyle)
15394 manas 480
    worksheet.write(row+17,column-1, 'Total Dialed Out', style)
481
    worksheet.write(row+18,column-1, 'Login Time (In Hrs)', style)
482
    worksheet.write(row+19,column-1, 'Call Duration (In Hrs)', style)
15402 manas 483
    worksheet.write(row+20,column-1, 'Handling Time (In Hrs)', style)
484
    worksheet.write(row+21,column-1, 'Idle Time (In Hrs)', style)
485
    worksheet.write(row+22,column-1, 'Links Converted', style)
486
    worksheet.write(row+23,column-1, 'Link sent yet to be converted', style)        
15394 manas 487
    columnId=agentId
488
    while True:
15407 manas 489
            if agentId >20 :
15394 manas 490
                break
491
            else: 
492
                datesql=AGENT_FRESH_QUERY %(agentId)
493
                conn = getDbConnection()
494
 
495
                cursor = conn.cursor()
496
                cursor.execute(datesql)
497
                result = cursor.fetchall()
498
 
499
                currentList=[]
500
                contactableData=0
501
                nonContactableData=0
502
                if cursor.rowcount ==0:
503
 
504
                    agentId+=1
505
                    continue    
506
                else:
507
                    for r in result:
15438 manas 508
                        if dispositionMap.get(r[0]) == 9:
509
                            totalVerifiedLinkSent=int(r[1])
15394 manas 510
                        row = dispositionMap.get(r[0])+26
511
                        if dispositionMap.get(r[0]) == 1 or dispositionMap.get(r[0]) == 2 or dispositionMap.get(r[0]) == 3 or dispositionMap.get(r[0]) == 4:
512
                            nonContactableData+=int(r[1])
513
                        else:
514
                            contactableData+=r[1] 
515
                        currentList.append(str(dispositionMap.get(r[0])))
516
                        column = agentId
517
                        remainingList = list(set(freshList) - set(currentList))
518
 
15402 manas 519
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 520
                        for i,val in enumerate(remainingList):
521
                            row = int(val)+26
522
                            column = agentId
15402 manas 523
                            worksheet.write(row, columnId, 0,center_alignment)
15394 manas 524
                    totalDialedOut = contactableData+nonContactableData
15505 manas 525
                    if totalDialedOut > 0:
526
                        worksheet.write(25+15,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
527
                        worksheet.write(25+16,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
528
                        worksheet.write(25+17,columnId,totalDialedOut,center_alignment)
15394 manas 529
                    conn.close()
530
 
531
                    name_query=AGENT_NAME_QUERY %(agentId)
532
                    conn = getDbConnection()
533
                    column=agentId
534
                    cursor = conn.cursor()
535
                    cursor.execute(name_query)
536
                    result = cursor.fetchall()
537
                    for r in result:
538
                        worksheet.write(25,columnId,r,style)
539
 
540
                    conn.close()
541
 
542
 
543
                    name_query=AGENT_FRESH_QUERY_LOGIN_TIME %(agentId)
544
                    conn = getDbConnection()
545
                    column=agentId
546
                    cursor = conn.cursor()
547
                    cursor.execute(name_query)
548
                    result = cursor.fetchall()
549
                    loginTime=0
550
                    for r in result:
551
                        loginTime+=r[0].seconds
552
 
553
                    hours=loginTime/3600
554
                    minutesLeft=(loginTime%3600)/60
15402 manas 555
                    worksheet.write(25+18,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 556
                    conn.close()
557
 
558
                    name_query=AGENT_FRESH_QUERY_DURATION %(agentId)
559
                    conn = getDbConnection()
560
                    column=agentId
561
                    cursor = conn.cursor()
562
                    cursor.execute(name_query)
563
                    result = cursor.fetchall()
564
                    loginTime=0
565
                    for r in result:
566
                        loginTime+=r[0]
567
                    hours=loginTime/3600
568
                    minutesLeft=(loginTime%3600)/60
15402 manas 569
                    worksheet.write(25+19,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 570
                    conn.close()
571
 
15402 manas 572
                    name_query=AGENT_FRESH_QUERY_AHT %(agentId)
573
                    conn = getDbConnection()
574
                    column=agentId
575
                    cursor = conn.cursor()
576
                    cursor.execute(name_query)
577
                    result = cursor.fetchall()
578
                    loginTime=0
579
                    for r in result:
580
                        loginTime+=r[0]
581
                    hours=loginTime/3600
582
                    minutesLeft=(loginTime%3600)/60
583
                    worksheet.write(25+20,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
584
                    conn.close()
585
 
586
                    name_query=AGENT_FRESH_QUERY_AIT %(agentId)
587
                    conn = getDbConnection()
588
                    column=agentId
589
                    cursor = conn.cursor()
590
                    cursor.execute(name_query)
591
                    result = cursor.fetchall()
592
                    loginTime=0
593
                    for r in result:
15482 amit.gupta 594
                        if r[0] is not None:
595
                            loginTime+=r[0]
15402 manas 596
                    hours=loginTime/3600
597
                    minutesLeft=(loginTime%3600)/60
598
                    worksheet.write(25+21,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
599
                    conn.close()
600
 
601
                    datesql=AGENT_FRESH_QUERY_LINKS_CONVERTED%(agentId)
602
                    conn = getDbConnection()
603
 
604
                    cursor = conn.cursor()
605
                    cursor.execute(datesql)
606
                    result = cursor.fetchall()
607
                    loginTime=0
608
                    for r in result:
15438 manas 609
                        #worksheet.write(25+22,columnId,r[0],center_alignment)
610
                        converted=r[0]
15402 manas 611
                        worksheet.write(25+22,columnId,r[0],center_alignment)
15438 manas 612
                    worksheet.write(25+23,columnId,totalVerifiedLinkSent-converted,center_alignment)    
15402 manas 613
                    conn.close()
15438 manas 614
#                     datesql=AGENT_FRESH_QUERY_LINKS_NOT_CONVERTED%(agentId)
615
#                     conn = getDbConnection()
616
#                     
617
#                     cursor = conn.cursor()
618
#                     cursor.execute(datesql)
619
#                     result = cursor.fetchall()
620
#                     loginTime=0
621
#                     for r in result:
622
#                         worksheet.write(25+23,columnId,r[0],center_alignment)    
15402 manas 623
 
15394 manas 624
                agentId+=1
625
                columnId+=1
626
    workbook.save(TMP_FILE)    
627
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
628
 
629
def generateFollowUpCallingReport():
630
    datesql=FOLLOW_UP_QUERY 
631
    conn = getDbConnection()
632
 
633
    cursor = conn.cursor()
634
    cursor.execute(datesql)
635
    result = cursor.fetchall()
636
    rb = open_workbook(TMP_FILE,formatting_info=True)
637
    workbook = copy(rb)
638
 
639
    worksheet = workbook.add_sheet("FollowUp")
640
    boldStyle = xlwt.XFStyle()
641
    newStyle= xlwt.XFStyle()
642
    style = xlwt.XFStyle()
643
    pattern = xlwt.Pattern()
644
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
645
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
646
    style.pattern = pattern
647
    f = xlwt.Font()
648
    f.bold = True
649
    boldStyle.font = f
650
 
651
    column = 0
652
    row = 0
653
    currentList=[]
654
 
655
    worksheet.write(0,0,'Call Disposition Type',style)
656
    worksheet.write(0,1,'Count',style)
657
 
658
    worksheet.write(1, column, 'Call Later', newStyle)
659
    worksheet.write(2,column, 'Ringing No Answer', newStyle)
660
    worksheet.write(3,column, 'Not Reachable', newStyle)
661
    worksheet.write(4,column, 'Switched Off', newStyle)
662
    worksheet.write(5,column, 'Retailer Not Interested', newStyle)
663
    worksheet.write(6,column, 'Already Profitmandi user', boldStyle)   
664
    worksheet.write(7,column, 'Verified Link Sent', boldStyle)
15409 manas 665
    worksheet.write(8,column, 'Accessory Retailer', newStyle)
666
    worksheet.write(9,column, 'Service Center Retailer', newStyle)
667
    worksheet.write(10,column, 'Not Retailer', boldStyle)   
668
    worksheet.write(11,column, 'Recharge Retailer', boldStyle)
669
    worksheet.write(12,column, 'Contactable Data (%)', newStyle)
670
    worksheet.write(13,column, 'Non Contactable Data (%)', newStyle)
671
    worksheet.write(14,column, 'Agents Logged In', style)
672
    worksheet.write(15,column, 'Average Login Time (In Hrs)', style)
673
    worksheet.write(16,column, 'Total Dialed Out', style)
674
    worksheet.write(17,column, 'Average Dialed Out per agent', style)
675
    worksheet.write(18,column, 'Average Call Duration (In Hrs)', style)
676
    worksheet.write(19,column, 'Average Handling Time (In Hrs)', style)
677
    worksheet.write(20,column, 'Average Idle Time (In Hrs)', style)
15394 manas 678
 
679
    contactableData=0
680
    nonContactableData=0
681
    totalDispositions=0
15402 manas 682
 
15394 manas 683
    for r in result:
684
        row = followUpDispositionMap.get(r[0])+1
15399 manas 685
        if followUpDispositionMap.get(r[0]) == 1 or followUpDispositionMap.get(r[0]) == 2 or followUpDispositionMap.get(r[0]) == 3:
15394 manas 686
            nonContactableData+=int(r[1])
687
        else:
688
            contactableData+=r[1] 
689
        currentList.append(str(row))
690
        column = 1
15402 manas 691
        worksheet.write(row, column, r[1],center_alignment)
15394 manas 692
 
693
    remainingList = list(set(followUpList) - set(currentList))
15402 manas 694
 
15394 manas 695
    for i,val in enumerate(remainingList):
696
        row = int(val)
15402 manas 697
 
15394 manas 698
        column = 1
15402 manas 699
        worksheet.write(row, column, 0,center_alignment)
15505 manas 700
 
15394 manas 701
    totalDispositions=contactableData+nonContactableData
15505 manas 702
    if totalDispositions >0:
703
        worksheet.write(12,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
704
        worksheet.write(13,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
705
 
15394 manas 706
 
707
    conn.close()
708
    datesql=FOLLOW_UP_QUERY_LOGIN_TIME 
709
    conn = getDbConnection()
710
 
711
    cursor = conn.cursor()
712
    cursor.execute(datesql)
713
    result = cursor.fetchall()
714
    agentLoginList=[]
715
    averageLoginTime=0
716
    loginTime=0
717
    for r in result:
718
        loginTime+=r[1].seconds
719
        agentLoginList.append(str(r[0]))
15505 manas 720
    if len(list(set(agentLoginList))) > 0:
721
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
722
        hours=averageLoginTime/3600
723
        minutesLeft=(averageLoginTime%3600)/60
724
        worksheet.write(14,1,len(list(set(agentLoginList))),center_alignment)
725
        worksheet.write(15,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
726
        worksheet.write(16,1,totalDispositions,center_alignment)
727
        worksheet.write(17,1,(contactableData+nonContactableData)/len(list(set(agentLoginList))),center_alignment)
728
        conn.close()
729
        datesql=FOLLOW_UP_QUERY_DURATION
730
        conn = getDbConnection()
731
 
732
        cursor = conn.cursor()
733
        cursor.execute(datesql)
734
        result = cursor.fetchall()
735
        for r in result:
736
            totalCallDuration= r[0]
737
        averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
738
        hours=averageCallDuration/3600
739
        minutesLeft=(averageCallDuration%3600)/60    
740
        worksheet.write(18,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
741
        conn.close()
742
 
743
        datesql=FOLLOW_UP_QUERY_AHT
744
        conn = getDbConnection()
745
        cursor = conn.cursor()
746
        cursor.execute(datesql)
747
        result = cursor.fetchall()
748
        loginTime=0
749
        for r in result:
750
            loginTime+=r[0]
751
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
752
        hours=averageLoginTime/3600
753
        minutesLeft=(averageLoginTime%3600)/60
754
        worksheet.write(19,1,len(list(set(agentLoginList))),center_alignment)
755
        conn.close()
756
 
757
        datesql=FOLLOW_UP_QUERY_AIT
758
        conn = getDbConnection()
759
        cursor = conn.cursor()
760
        cursor.execute(datesql)
761
        result = cursor.fetchall()
762
        loginTime=0
763
        for r in result:
764
            loginTime+=r[0]
765
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
766
        hours=averageLoginTime/3600
767
        minutesLeft=(averageLoginTime%3600)/60
768
        worksheet.write(20,1,len(list(set(agentLoginList))),center_alignment)
15402 manas 769
    workbook.save(TMP_FILE)  
15394 manas 770
 
771
def generateAgentWiseFollowupCallingReport():
772
 
773
    agentId=3
774
    rb = open_workbook(TMP_FILE,formatting_info=True)
775
    workbook = copy(rb)
776
    numberOfSheets=rb.nsheets
777
    sheet=rb.sheet_by_index(numberOfSheets-1)
778
    worksheet = workbook.get_sheet(numberOfSheets-1)
779
    boldStyle = xlwt.XFStyle()
780
    newStyle= xlwt.XFStyle()
781
    style = xlwt.XFStyle()
782
    pattern = xlwt.Pattern()
783
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
784
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
785
    style.pattern = pattern
786
    f = xlwt.Font()
787
    f.bold = True
788
    boldStyle.font = f
789
 
790
    column = agentId
791
    row = 25
792
    worksheet.write(row,column-1,'Call Disposition Type',style)
793
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
794
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
795
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
796
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
797
    worksheet.write(row+5,column-1, 'Retailer Not Interested', newStyle)
798
    worksheet.write(row+6,column-1, 'Already Profitmandi user', boldStyle)   
799
    worksheet.write(row+7,column-1, 'Verified Link Sent', boldStyle)
15409 manas 800
    worksheet.write(row+8,column-1, 'Accessory Retailer', newStyle)
801
    worksheet.write(row+9,column-1, 'Service Center Retailer', newStyle)
802
    worksheet.write(row+10,column-1, 'Not retailer', style)
803
    worksheet.write(row+11,column-1, 'Recharge Retailer', style)
804
    worksheet.write(row+12,column-1, 'Contactable Data (%)', newStyle)
805
    worksheet.write(row+13,column-1, 'Non Contactable Data (%)', newStyle)
806
    worksheet.write(row+14,column-1, 'Total Dialed Out', style)
807
    worksheet.write(row+15,column-1, 'Login Time (In Hrs)', style)
808
    worksheet.write(row+16,column-1, 'Call Duration (In Hrs)', style)
809
    worksheet.write(row+17,column-1, 'Handling Time (In Hrs)', style)
810
    worksheet.write(row+18,column-1, 'Idle Time (In Hrs)', style)
15394 manas 811
    columnId=agentId
812
    while True:
15407 manas 813
            if agentId >20 :
15394 manas 814
                break
815
            else: 
816
                datesql=AGENT_FOLLOW_UP_QUERY %(agentId)
817
                conn = getDbConnection()
818
 
819
                cursor = conn.cursor()
820
                cursor.execute(datesql)
821
                result = cursor.fetchall()
822
 
823
                currentList=[]
824
                contactableData=0
825
                nonContactableData=0
826
                if cursor.rowcount ==0:
827
                    agentId+=1
828
                    continue    
829
                else:
15402 manas 830
 
15394 manas 831
                    for r in result:
832
                        row = followUpDispositionMap.get(r[0])+26
15402 manas 833
                        if followUpDispositionMap.get(r[0]) == 1 or followUpDispositionMap.get(r[0]) == 2 or followUpDispositionMap.get(r[0]) == 3 :
15394 manas 834
                            nonContactableData+=int(r[1])
835
                        else:
836
                            contactableData+=r[1] 
837
                        currentList.append(str(followUpDispositionMap.get(r[0])+1))
838
                        column = agentId
15402 manas 839
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 840
                    remainingList = list(set(followUpList) - set(currentList))
841
 
842
                    for i,val in enumerate(remainingList):
843
                        row = int(val)+25
844
                        column = agentId
15402 manas 845
                        worksheet.write(row, columnId, 0,center_alignment)
15394 manas 846
                    totalDialedOut = contactableData+nonContactableData
15505 manas 847
                    if totalDialedOut>0:
848
                        worksheet.write(25+12,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
849
                        worksheet.write(25+13,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
850
                        worksheet.write(25+14,columnId,totalDialedOut,center_alignment)
15394 manas 851
                    conn.close()
852
 
853
                    name_query=AGENT_NAME_QUERY %(agentId)
854
                    conn = getDbConnection()
855
                    column=agentId
856
                    cursor = conn.cursor()
857
                    cursor.execute(name_query)
858
                    result = cursor.fetchall()
859
                    for r in result:
860
                        worksheet.write(25,columnId,r,style)
861
 
862
                    conn.close()
863
 
864
 
865
                    name_query=AGENT_FOLLOW_UP_QUERY_LOGIN_TIME %(agentId)
866
                    conn = getDbConnection()
867
                    column=agentId
868
                    cursor = conn.cursor()
869
                    cursor.execute(name_query)
870
                    result = cursor.fetchall()
871
                    loginTime=0
872
                    for r in result:
873
                        loginTime+=r[0].seconds
874
 
875
                    hours=loginTime/3600
876
                    minutesLeft=(loginTime%3600)/60
15409 manas 877
                    worksheet.write(25+15,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 878
                    conn.close()
879
 
880
                    name_query=AGENT_FOLLOW_UP_QUERY_DURATION %(agentId)
881
                    conn = getDbConnection()
882
                    column=agentId
883
                    cursor = conn.cursor()
884
                    cursor.execute(name_query)
885
                    result = cursor.fetchall()
886
                    loginTime=0
887
                    for r in result:
888
                        loginTime+=r[0]
889
                    hours=loginTime/3600
890
                    minutesLeft=(loginTime%3600)/60
15409 manas 891
                    worksheet.write(25+16,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 892
                    conn.close()
893
 
15402 manas 894
                    name_query=AGENT_FOLLOW_UP_QUERY_AHT %(agentId)
895
                    conn = getDbConnection()
896
                    column=agentId
897
                    cursor = conn.cursor()
898
                    cursor.execute(name_query)
899
                    result = cursor.fetchall()
900
                    loginTime=0
901
                    for r in result:
902
                        loginTime+=r[0]
903
                    hours=loginTime/3600
904
                    minutesLeft=(loginTime%3600)/60
15409 manas 905
                    worksheet.write(25+17,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15402 manas 906
                    conn.close()
907
 
908
                    name_query=AGENT_FOLLOW_UP_QUERY_AIT %(agentId)
909
                    conn = getDbConnection()
910
                    column=agentId
911
                    cursor = conn.cursor()
912
                    cursor.execute(name_query)
913
                    result = cursor.fetchall()
914
                    loginTime=0
915
                    for r in result:
916
                        loginTime+=r[0]
917
                    hours=loginTime/3600
918
                    minutesLeft=(loginTime%3600)/60
15409 manas 919
                    worksheet.write(25+18,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15402 manas 920
                    conn.close()
921
 
15394 manas 922
                agentId+=1
923
                columnId+=1
924
    workbook.save(TMP_FILE)    
925
 
926
def generateOnBoardingCallingReport():
927
    datesql=ONBOARDING_QUERY 
928
    conn = getDbConnection()
929
 
930
    cursor = conn.cursor()
931
    cursor.execute(datesql)
932
    result = cursor.fetchall()
933
    rb = open_workbook(TMP_FILE,formatting_info=True)
934
    workbook = copy(rb)
935
 
936
    worksheet = workbook.add_sheet("Onboarding")
937
    boldStyle = xlwt.XFStyle()
938
    newStyle= xlwt.XFStyle()
939
    style = xlwt.XFStyle()
940
    pattern = xlwt.Pattern()
941
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
942
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
943
    style.pattern = pattern
944
    f = xlwt.Font()
945
    f.bold = True
946
    boldStyle.font = f
947
 
948
    column = 0
949
    row = 0
950
    currentList=[]
951
 
952
    worksheet.write(0,0,'Call Disposition Type',style)
953
    worksheet.write(0,1,'Count',style)
954
    worksheet.write(1, column, 'Call Later', newStyle)
955
    worksheet.write(2,column, 'Ringing No Answer', newStyle)
956
    worksheet.write(3,column, 'Not Reachable', newStyle)
957
    worksheet.write(4,column, 'Switched Off', newStyle)
958
    worksheet.write(5,column, 'Successful', newStyle)
959
    worksheet.write(6,column, 'Contactable Data', newStyle)
960
    worksheet.write(7,column, 'Non Contactable Data', newStyle)
961
    worksheet.write(8,column, 'Agents Logged In', style)
962
    worksheet.write(9,column, 'Average Login Time (In Hrs)', style)
963
    worksheet.write(10,column, 'Total Dialed Out', style)
964
    worksheet.write(11,column, 'Average Dialed Out per agent', style)
965
    worksheet.write(12,column, 'Average Call Duration (In Hrs)', style)
15402 manas 966
    worksheet.write(13,column, 'Average Handling Time (In Hrs)', style)
967
    worksheet.write(14,column, 'Average Idle Time (In Hrs)', style)
15394 manas 968
 
969
    contactableData=0
970
    nonContactableData=0
971
    totalDispositions=0
972
    for r in result:
973
        row = onBoardingDispositionMap.get(r[0])+1
974
        if onBoardingDispositionMap.get(r[0]) == 1 or onBoardingDispositionMap.get(r[0]) == 2 or onBoardingDispositionMap.get(r[0]) == 3:
975
            nonContactableData+=int(r[1])
976
        else:
977
            contactableData+=r[1] 
978
        currentList.append(str(row))
979
        column = 1
15402 manas 980
        worksheet.write(row, column, r[1],center_alignment)
15394 manas 981
 
982
    remainingList = list(set(onBoardingList) - set(currentList))
15402 manas 983
 
15394 manas 984
    for i,val in enumerate(remainingList):
985
        row = int(val)
986
        column = 1
15402 manas 987
        worksheet.write(row, column, 0,center_alignment)
15394 manas 988
    totalDispositions=contactableData+nonContactableData
15402 manas 989
    worksheet.write(6,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
990
    worksheet.write(7,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
15394 manas 991
 
992
 
993
    conn.close()
994
    datesql=ONBOARDING_QUERY_LOGIN_TIME 
995
    conn = getDbConnection()
996
 
997
    cursor = conn.cursor()
998
    cursor.execute(datesql)
999
    result = cursor.fetchall()
1000
    agentLoginList=[]
1001
    averageLoginTime=0
1002
    loginTime=0
1003
    for r in result:
1004
        loginTime+=r[1].seconds
1005
        agentLoginList.append(str(r[0]))
1006
    averageLoginTime=loginTime/len(list(set(agentLoginList)))
1007
    hours=averageLoginTime/3600
1008
    minutesLeft=(averageLoginTime%3600)/60
15402 manas 1009
    worksheet.write(8,1,len(list(set(agentLoginList))),center_alignment)
1010
    worksheet.write(9,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
1011
    worksheet.write(10,1,totalDispositions,center_alignment)
1012
    worksheet.write(11,1,(contactableData+nonContactableData)/len(list(set(agentLoginList))),center_alignment)
15394 manas 1013
    conn.close()
1014
    datesql=ONBOARDING_QUERY_DURATION
1015
    conn = getDbConnection()
1016
 
1017
    cursor = conn.cursor()
1018
    cursor.execute(datesql)
1019
    result = cursor.fetchall()
1020
    for r in result:
1021
        totalCallDuration= r[0]
1022
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
1023
    hours=averageCallDuration/3600
1024
    minutesLeft=(averageCallDuration%3600)/60    
15402 manas 1025
    worksheet.write(12,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
1026
 
1027
    conn.close()
1028
    datesql=ONBOARDING_QUERY_AHT
1029
    conn = getDbConnection()
1030
 
1031
    cursor = conn.cursor()
1032
    cursor.execute(datesql)
1033
    result = cursor.fetchall()
1034
    for r in result:
1035
        totalCallDuration= r[0]
1036
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
1037
    hours=averageCallDuration/3600
1038
    minutesLeft=(averageCallDuration%3600)/60    
1039
    worksheet.write(13,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
1040
    conn.close()
1041
    datesql=ONBOARDING_QUERY_AIT
1042
    conn = getDbConnection()
1043
 
1044
    cursor = conn.cursor()
1045
    cursor.execute(datesql)
1046
    result = cursor.fetchall()
1047
    for r in result:
1048
        totalCallDuration= r[0]
1049
    averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))
1050
    hours=averageCallDuration/3600
1051
    minutesLeft=(averageCallDuration%3600)/60    
1052
    worksheet.write(14,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
15394 manas 1053
    workbook.save(TMP_FILE)
15402 manas 1054
 
15394 manas 1055
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
1056
 
1057
 
1058
def generateAgentWiseOnboardingCallingReport():
1059
 
1060
    agentId=3
1061
    rb = open_workbook(TMP_FILE,formatting_info=True)
1062
    workbook = copy(rb)
1063
    numberOfSheets=rb.nsheets
15402 manas 1064
 
15394 manas 1065
    sheet=rb.sheet_by_index(numberOfSheets-1)
1066
    worksheet = workbook.get_sheet(numberOfSheets-1)
1067
    boldStyle = xlwt.XFStyle()
1068
    newStyle= xlwt.XFStyle()
1069
    style = xlwt.XFStyle()
1070
    pattern = xlwt.Pattern()
1071
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
1072
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
1073
    style.pattern = pattern
1074
    f = xlwt.Font()
1075
    f.bold = True
1076
    boldStyle.font = f
1077
 
1078
    column = agentId
1079
    row = 25
1080
 
1081
    worksheet.write(row,column-1,'Call Disposition Type',style)
1082
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
1083
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
1084
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
1085
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
1086
    worksheet.write(row+5,column-1, 'Successful', newStyle)
1087
    worksheet.write(row+6,column-1, 'Contactable Data', newStyle)
1088
    worksheet.write(row+7,column-1, 'Non Contactable Data', newStyle)
1089
    worksheet.write(row+8,column-1, 'Total Dialed Out', style)
1090
    worksheet.write(row+9,column-1, 'Login Time (In Hrs)', style)
1091
    worksheet.write(row+10,column-1, 'Call Duration (In Hrs)', style)
15402 manas 1092
    worksheet.write(row+11,column-1, 'Handling Time (In Hrs)', style)
1093
    worksheet.write(row+12,column-1, 'Idle Time (In Hrs)', style)
15394 manas 1094
    columnId=agentId
1095
    while True:
15407 manas 1096
            if agentId >20 :
15394 manas 1097
                break
1098
            else: 
1099
                datesql=AGENT_ONBOARDING_QUERY %(agentId)
1100
                conn = getDbConnection()
1101
 
1102
                cursor = conn.cursor()
1103
                cursor.execute(datesql)
1104
                result = cursor.fetchall()
1105
 
1106
                currentList=[]
1107
                contactableData=0
1108
                nonContactableData=0
1109
                if cursor.rowcount ==0:
1110
                    agentId+=1
1111
                    continue    
1112
                else:
15402 manas 1113
 
15394 manas 1114
                    for r in result:
1115
                        row = onBoardingDispositionMap.get(r[0])+26
1116
                        if onBoardingDispositionMap.get(r[0]) == 1 or onBoardingDispositionMap.get(r[0]) == 2 or onBoardingDispositionMap.get(r[0]) == 3 or followUpDispositionMap.get(r[0]) == 4:
1117
                            nonContactableData+=int(r[1])
1118
                        else:
1119
                            contactableData+=r[1] 
1120
                        currentList.append(str(onBoardingDispositionMap.get(r[0])+1))
1121
                        column = agentId
15402 manas 1122
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 1123
                    remainingList = list(set(onBoardingList) - set(currentList))
1124
 
1125
                    for i,val in enumerate(remainingList):
1126
                        row = int(val)+25
1127
                        column = agentId
15402 manas 1128
                        worksheet.write(row, columnId, 0,center_alignment)
15394 manas 1129
                    totalDialedOut = contactableData+nonContactableData
15402 manas 1130
                    worksheet.write(25+6,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
1131
                    worksheet.write(25+7,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
1132
                    worksheet.write(25+8,columnId,totalDialedOut,center_alignment)
15394 manas 1133
                    conn.close()
1134
 
1135
                    name_query=AGENT_NAME_QUERY %(agentId)
1136
                    conn = getDbConnection()
1137
                    column=agentId
1138
                    cursor = conn.cursor()
1139
                    cursor.execute(name_query)
1140
                    result = cursor.fetchall()
1141
                    for r in result:
1142
                        worksheet.write(25,columnId,r,style)
1143
                    conn.close()
1144
 
1145
 
15402 manas 1146
                    name_query=AGENT_ONBOARDING_QUERY_LOGIN_TIME %(agentId)
15394 manas 1147
                    conn = getDbConnection()
1148
                    column=agentId
1149
                    cursor = conn.cursor()
1150
                    cursor.execute(name_query)
1151
                    result = cursor.fetchall()
1152
                    loginTime=0
1153
                    for r in result:
1154
                        loginTime+=r[0].seconds
1155
 
1156
                    hours=loginTime/3600
1157
                    minutesLeft=(loginTime%3600)/60
15402 manas 1158
                    worksheet.write(25+9,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 1159
                    conn.close()
1160
 
15402 manas 1161
                    name_query=AGENT_ONBOARDING_QUERY_DURATION %(agentId)
15394 manas 1162
                    conn = getDbConnection()
1163
                    column=agentId
1164
                    cursor = conn.cursor()
1165
                    cursor.execute(name_query)
1166
                    result = cursor.fetchall()
1167
                    loginTime=0
1168
                    for r in result:
1169
                        loginTime+=r[0]
1170
                    hours=loginTime/3600
1171
                    minutesLeft=(loginTime%3600)/60
15402 manas 1172
                    worksheet.write(25+10,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 1173
                    conn.close()
1174
 
15402 manas 1175
                    name_query=AGENT_ONBOARDING_QUERY_AHT %(agentId)
1176
                    conn = getDbConnection()
1177
                    column=agentId
1178
                    cursor = conn.cursor()
1179
                    cursor.execute(name_query)
1180
                    result = cursor.fetchall()
1181
                    loginTime=0
1182
                    for r in result:
1183
                        loginTime+=r[0]
1184
                    hours=loginTime/3600
1185
                    minutesLeft=(loginTime%3600)/60
1186
                    worksheet.write(25+11,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
1187
                    conn.close()
1188
 
1189
                    name_query=AGENT_ONBOARDING_QUERY_AIT %(agentId)
1190
                    conn = getDbConnection()
1191
                    column=agentId
1192
                    cursor = conn.cursor()
1193
                    cursor.execute(name_query)
1194
                    result = cursor.fetchall()
1195
                    loginTime=0
1196
                    for r in result:
1197
                        loginTime+=r[0]
1198
                    hours=loginTime/3600
1199
                    minutesLeft=(loginTime%3600)/60
1200
                    worksheet.write(25+12,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
1201
                    conn.close()
1202
 
15394 manas 1203
                agentId+=1
1204
                columnId+=1
1205
    workbook.save(TMP_FILE)          
1206
 
1207
 
1208
 
1209
def main():
1210
    generateFreshCallingReport()
1211
    generateAgentWiseFreshCallingReport()
1212
    generateFollowUpCallingReport()
1213
    generateAgentWiseFollowupCallingReport()
1214
    generateOnBoardingCallingReport()
1215
    generateAgentWiseOnboardingCallingReport()
15505 manas 1216
    #sendmail(["manas.kapoor@shop2020.in","amit.sirohi@shop2020.in","rajneesh.arora@saholic.com","ritesh.chauhan@shop2020.in", "shailesh.kumar@shop2020.in"], "", TMP_FILE, SUBJECT)
1217
    sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
15402 manas 1218
 
15394 manas 1219
def sendmail(email, message, fileName, title):
1220
    if email == "":
1221
        return
1222
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
1223
    mailServer.ehlo()
1224
    mailServer.starttls()
1225
    mailServer.ehlo()
1226
 
1227
    # Create the container (outer) email message.
1228
    msg = MIMEMultipart()
1229
    msg['Subject'] = title
1230
    msg.preamble = title
15441 manas 1231
    message="Total Activations :" + str(TotalActivations)
1232
    message1="Links Converted :" + str(Converted)
1233
    message2="Total Agents Logged In :" + str(AgentsLoggedIn)
15442 manas 1234
    html_msg = MIMEText(message+"<br>"+message1+"<br>"+message2, 'html')
15394 manas 1235
    msg.attach(html_msg)
1236
 
1237
    fileMsg = MIMEBase('application', 'vnd.ms-excel')
1238
    fileMsg.set_payload(file(TMP_FILE).read())
1239
    encoders.encode_base64(fileMsg)
1240
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
1241
    msg.attach(fileMsg)
15402 manas 1242
 
15505 manas 1243
    #MAILTO = ['manas.kapoor@saholic.com','amit.sirohi@shop2020.in','rajneesh.arora@saholic.com', 'ritesh.chauhan@shop2020.in', 'shailesh.kumar@shop2020.in']
1244
    MAILTO = ['manas.kapoor@saholic.com']
15394 manas 1245
    mailServer.login(SENDER, PASSWORD)
1246
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
1247
 
1248
if __name__ == '__main__':
1249
    main()