Subversion Repositories SmartDukaan

Rev

Rev 15506 | Rev 15514 | 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)
15513 manas 612
 
613
                    if totalVerifiedLinkSent==0:
614
                        worksheet.write(25+23,columnId,0,center_alignment)
615
                    else:
616
                        worksheet.write(25+23,columnId,totalVerifiedLinkSent-converted,center_alignment)    
15402 manas 617
                    conn.close()
15438 manas 618
#                     datesql=AGENT_FRESH_QUERY_LINKS_NOT_CONVERTED%(agentId)
619
#                     conn = getDbConnection()
620
#                     
621
#                     cursor = conn.cursor()
622
#                     cursor.execute(datesql)
623
#                     result = cursor.fetchall()
624
#                     loginTime=0
625
#                     for r in result:
626
#                         worksheet.write(25+23,columnId,r[0],center_alignment)    
15402 manas 627
 
15394 manas 628
                agentId+=1
629
                columnId+=1
630
    workbook.save(TMP_FILE)    
631
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
632
 
633
def generateFollowUpCallingReport():
634
    datesql=FOLLOW_UP_QUERY 
635
    conn = getDbConnection()
636
 
637
    cursor = conn.cursor()
638
    cursor.execute(datesql)
639
    result = cursor.fetchall()
640
    rb = open_workbook(TMP_FILE,formatting_info=True)
641
    workbook = copy(rb)
642
 
643
    worksheet = workbook.add_sheet("FollowUp")
644
    boldStyle = xlwt.XFStyle()
645
    newStyle= xlwt.XFStyle()
646
    style = xlwt.XFStyle()
647
    pattern = xlwt.Pattern()
648
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
649
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
650
    style.pattern = pattern
651
    f = xlwt.Font()
652
    f.bold = True
653
    boldStyle.font = f
654
 
655
    column = 0
656
    row = 0
657
    currentList=[]
658
 
659
    worksheet.write(0,0,'Call Disposition Type',style)
660
    worksheet.write(0,1,'Count',style)
661
 
662
    worksheet.write(1, column, 'Call Later', newStyle)
663
    worksheet.write(2,column, 'Ringing No Answer', newStyle)
664
    worksheet.write(3,column, 'Not Reachable', newStyle)
665
    worksheet.write(4,column, 'Switched Off', newStyle)
666
    worksheet.write(5,column, 'Retailer Not Interested', newStyle)
667
    worksheet.write(6,column, 'Already Profitmandi user', boldStyle)   
668
    worksheet.write(7,column, 'Verified Link Sent', boldStyle)
15409 manas 669
    worksheet.write(8,column, 'Accessory Retailer', newStyle)
670
    worksheet.write(9,column, 'Service Center Retailer', newStyle)
671
    worksheet.write(10,column, 'Not Retailer', boldStyle)   
672
    worksheet.write(11,column, 'Recharge Retailer', boldStyle)
673
    worksheet.write(12,column, 'Contactable Data (%)', newStyle)
674
    worksheet.write(13,column, 'Non Contactable Data (%)', newStyle)
675
    worksheet.write(14,column, 'Agents Logged In', style)
676
    worksheet.write(15,column, 'Average Login Time (In Hrs)', style)
677
    worksheet.write(16,column, 'Total Dialed Out', style)
678
    worksheet.write(17,column, 'Average Dialed Out per agent', style)
679
    worksheet.write(18,column, 'Average Call Duration (In Hrs)', style)
680
    worksheet.write(19,column, 'Average Handling Time (In Hrs)', style)
681
    worksheet.write(20,column, 'Average Idle Time (In Hrs)', style)
15394 manas 682
 
683
    contactableData=0
684
    nonContactableData=0
685
    totalDispositions=0
15402 manas 686
 
15394 manas 687
    for r in result:
688
        row = followUpDispositionMap.get(r[0])+1
15399 manas 689
        if followUpDispositionMap.get(r[0]) == 1 or followUpDispositionMap.get(r[0]) == 2 or followUpDispositionMap.get(r[0]) == 3:
15394 manas 690
            nonContactableData+=int(r[1])
691
        else:
692
            contactableData+=r[1] 
693
        currentList.append(str(row))
694
        column = 1
15402 manas 695
        worksheet.write(row, column, r[1],center_alignment)
15394 manas 696
 
697
    remainingList = list(set(followUpList) - set(currentList))
15402 manas 698
 
15394 manas 699
    for i,val in enumerate(remainingList):
700
        row = int(val)
15402 manas 701
 
15394 manas 702
        column = 1
15402 manas 703
        worksheet.write(row, column, 0,center_alignment)
15505 manas 704
 
15394 manas 705
    totalDispositions=contactableData+nonContactableData
15505 manas 706
    if totalDispositions >0:
707
        worksheet.write(12,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
708
        worksheet.write(13,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
709
 
15394 manas 710
 
711
    conn.close()
712
    datesql=FOLLOW_UP_QUERY_LOGIN_TIME 
713
    conn = getDbConnection()
714
 
715
    cursor = conn.cursor()
716
    cursor.execute(datesql)
717
    result = cursor.fetchall()
718
    agentLoginList=[]
719
    averageLoginTime=0
720
    loginTime=0
721
    for r in result:
722
        loginTime+=r[1].seconds
723
        agentLoginList.append(str(r[0]))
15505 manas 724
    if len(list(set(agentLoginList))) > 0:
725
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
726
        hours=averageLoginTime/3600
727
        minutesLeft=(averageLoginTime%3600)/60
728
        worksheet.write(14,1,len(list(set(agentLoginList))),center_alignment)
729
        worksheet.write(15,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
730
        worksheet.write(16,1,totalDispositions,center_alignment)
731
        worksheet.write(17,1,(contactableData+nonContactableData)/len(list(set(agentLoginList))),center_alignment)
732
        conn.close()
733
        datesql=FOLLOW_UP_QUERY_DURATION
734
        conn = getDbConnection()
735
 
736
        cursor = conn.cursor()
737
        cursor.execute(datesql)
738
        result = cursor.fetchall()
739
        for r in result:
740
            totalCallDuration= r[0]
741
        averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
742
        hours=averageCallDuration/3600
743
        minutesLeft=(averageCallDuration%3600)/60    
744
        worksheet.write(18,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
745
        conn.close()
746
 
747
        datesql=FOLLOW_UP_QUERY_AHT
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
758
        worksheet.write(19,1,len(list(set(agentLoginList))),center_alignment)
759
        conn.close()
760
 
761
        datesql=FOLLOW_UP_QUERY_AIT
762
        conn = getDbConnection()
763
        cursor = conn.cursor()
764
        cursor.execute(datesql)
765
        result = cursor.fetchall()
766
        loginTime=0
767
        for r in result:
768
            loginTime+=r[0]
769
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
770
        hours=averageLoginTime/3600
771
        minutesLeft=(averageLoginTime%3600)/60
772
        worksheet.write(20,1,len(list(set(agentLoginList))),center_alignment)
15402 manas 773
    workbook.save(TMP_FILE)  
15394 manas 774
 
775
def generateAgentWiseFollowupCallingReport():
776
 
777
    agentId=3
778
    rb = open_workbook(TMP_FILE,formatting_info=True)
779
    workbook = copy(rb)
780
    numberOfSheets=rb.nsheets
781
    sheet=rb.sheet_by_index(numberOfSheets-1)
782
    worksheet = workbook.get_sheet(numberOfSheets-1)
783
    boldStyle = xlwt.XFStyle()
784
    newStyle= xlwt.XFStyle()
785
    style = xlwt.XFStyle()
786
    pattern = xlwt.Pattern()
787
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
788
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
789
    style.pattern = pattern
790
    f = xlwt.Font()
791
    f.bold = True
792
    boldStyle.font = f
793
 
794
    column = agentId
795
    row = 25
796
    worksheet.write(row,column-1,'Call Disposition Type',style)
797
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
798
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
799
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
800
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
801
    worksheet.write(row+5,column-1, 'Retailer Not Interested', newStyle)
802
    worksheet.write(row+6,column-1, 'Already Profitmandi user', boldStyle)   
803
    worksheet.write(row+7,column-1, 'Verified Link Sent', boldStyle)
15409 manas 804
    worksheet.write(row+8,column-1, 'Accessory Retailer', newStyle)
805
    worksheet.write(row+9,column-1, 'Service Center Retailer', newStyle)
806
    worksheet.write(row+10,column-1, 'Not retailer', style)
807
    worksheet.write(row+11,column-1, 'Recharge Retailer', style)
808
    worksheet.write(row+12,column-1, 'Contactable Data (%)', newStyle)
809
    worksheet.write(row+13,column-1, 'Non Contactable Data (%)', newStyle)
810
    worksheet.write(row+14,column-1, 'Total Dialed Out', style)
811
    worksheet.write(row+15,column-1, 'Login Time (In Hrs)', style)
812
    worksheet.write(row+16,column-1, 'Call Duration (In Hrs)', style)
813
    worksheet.write(row+17,column-1, 'Handling Time (In Hrs)', style)
814
    worksheet.write(row+18,column-1, 'Idle Time (In Hrs)', style)
15394 manas 815
    columnId=agentId
816
    while True:
15407 manas 817
            if agentId >20 :
15394 manas 818
                break
819
            else: 
820
                datesql=AGENT_FOLLOW_UP_QUERY %(agentId)
821
                conn = getDbConnection()
822
 
823
                cursor = conn.cursor()
824
                cursor.execute(datesql)
825
                result = cursor.fetchall()
826
 
827
                currentList=[]
828
                contactableData=0
829
                nonContactableData=0
830
                if cursor.rowcount ==0:
831
                    agentId+=1
832
                    continue    
833
                else:
15402 manas 834
 
15394 manas 835
                    for r in result:
836
                        row = followUpDispositionMap.get(r[0])+26
15402 manas 837
                        if followUpDispositionMap.get(r[0]) == 1 or followUpDispositionMap.get(r[0]) == 2 or followUpDispositionMap.get(r[0]) == 3 :
15394 manas 838
                            nonContactableData+=int(r[1])
839
                        else:
840
                            contactableData+=r[1] 
841
                        currentList.append(str(followUpDispositionMap.get(r[0])+1))
842
                        column = agentId
15402 manas 843
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 844
                    remainingList = list(set(followUpList) - set(currentList))
845
 
846
                    for i,val in enumerate(remainingList):
847
                        row = int(val)+25
848
                        column = agentId
15402 manas 849
                        worksheet.write(row, columnId, 0,center_alignment)
15394 manas 850
                    totalDialedOut = contactableData+nonContactableData
15505 manas 851
                    if totalDialedOut>0:
852
                        worksheet.write(25+12,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
853
                        worksheet.write(25+13,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
854
                        worksheet.write(25+14,columnId,totalDialedOut,center_alignment)
15394 manas 855
                    conn.close()
856
 
857
                    name_query=AGENT_NAME_QUERY %(agentId)
858
                    conn = getDbConnection()
859
                    column=agentId
860
                    cursor = conn.cursor()
861
                    cursor.execute(name_query)
862
                    result = cursor.fetchall()
863
                    for r in result:
864
                        worksheet.write(25,columnId,r,style)
865
 
866
                    conn.close()
867
 
868
 
869
                    name_query=AGENT_FOLLOW_UP_QUERY_LOGIN_TIME %(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].seconds
878
 
879
                    hours=loginTime/3600
880
                    minutesLeft=(loginTime%3600)/60
15409 manas 881
                    worksheet.write(25+15,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 882
                    conn.close()
883
 
884
                    name_query=AGENT_FOLLOW_UP_QUERY_DURATION %(agentId)
885
                    conn = getDbConnection()
886
                    column=agentId
887
                    cursor = conn.cursor()
888
                    cursor.execute(name_query)
889
                    result = cursor.fetchall()
890
                    loginTime=0
891
                    for r in result:
892
                        loginTime+=r[0]
893
                    hours=loginTime/3600
894
                    minutesLeft=(loginTime%3600)/60
15409 manas 895
                    worksheet.write(25+16,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 896
                    conn.close()
897
 
15402 manas 898
                    name_query=AGENT_FOLLOW_UP_QUERY_AHT %(agentId)
899
                    conn = getDbConnection()
900
                    column=agentId
901
                    cursor = conn.cursor()
902
                    cursor.execute(name_query)
903
                    result = cursor.fetchall()
904
                    loginTime=0
905
                    for r in result:
906
                        loginTime+=r[0]
907
                    hours=loginTime/3600
908
                    minutesLeft=(loginTime%3600)/60
15409 manas 909
                    worksheet.write(25+17,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15402 manas 910
                    conn.close()
911
 
912
                    name_query=AGENT_FOLLOW_UP_QUERY_AIT %(agentId)
913
                    conn = getDbConnection()
914
                    column=agentId
915
                    cursor = conn.cursor()
916
                    cursor.execute(name_query)
917
                    result = cursor.fetchall()
918
                    loginTime=0
919
                    for r in result:
920
                        loginTime+=r[0]
921
                    hours=loginTime/3600
922
                    minutesLeft=(loginTime%3600)/60
15409 manas 923
                    worksheet.write(25+18,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15402 manas 924
                    conn.close()
925
 
15394 manas 926
                agentId+=1
927
                columnId+=1
928
    workbook.save(TMP_FILE)    
929
 
930
def generateOnBoardingCallingReport():
931
    datesql=ONBOARDING_QUERY 
932
    conn = getDbConnection()
933
 
934
    cursor = conn.cursor()
935
    cursor.execute(datesql)
936
    result = cursor.fetchall()
937
    rb = open_workbook(TMP_FILE,formatting_info=True)
938
    workbook = copy(rb)
939
 
940
    worksheet = workbook.add_sheet("Onboarding")
941
    boldStyle = xlwt.XFStyle()
942
    newStyle= xlwt.XFStyle()
943
    style = xlwt.XFStyle()
944
    pattern = xlwt.Pattern()
945
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
946
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
947
    style.pattern = pattern
948
    f = xlwt.Font()
949
    f.bold = True
950
    boldStyle.font = f
951
 
952
    column = 0
953
    row = 0
954
    currentList=[]
15513 manas 955
    if len(result)==0:
956
        print 'No Data'
957
        pass
958
    else:
959
        worksheet.write(0,0,'Call Disposition Type',style)
960
        worksheet.write(0,1,'Count',style)
961
        worksheet.write(1, column, 'Call Later', newStyle)
962
        worksheet.write(2,column, 'Ringing No Answer', newStyle)
963
        worksheet.write(3,column, 'Not Reachable', newStyle)
964
        worksheet.write(4,column, 'Switched Off', newStyle)
965
        worksheet.write(5,column, 'Successful', newStyle)
966
        worksheet.write(6,column, 'Contactable Data', newStyle)
967
        worksheet.write(7,column, 'Non Contactable Data', newStyle)
968
        worksheet.write(8,column, 'Agents Logged In', style)
969
        worksheet.write(9,column, 'Average Login Time (In Hrs)', style)
970
        worksheet.write(10,column, 'Total Dialed Out', style)
971
        worksheet.write(11,column, 'Average Dialed Out per agent', style)
972
        worksheet.write(12,column, 'Average Call Duration (In Hrs)', style)
973
        worksheet.write(13,column, 'Average Handling Time (In Hrs)', style)
974
        worksheet.write(14,column, 'Average Idle Time (In Hrs)', style)
975
 
976
        contactableData=0
977
        nonContactableData=0
978
        totalDispositions=0
979
        for r in result:
980
            row = onBoardingDispositionMap.get(r[0])+1
981
            if onBoardingDispositionMap.get(r[0]) == 1 or onBoardingDispositionMap.get(r[0]) == 2 or onBoardingDispositionMap.get(r[0]) == 3:
982
                nonContactableData+=int(r[1])
983
            else:
984
                contactableData+=r[1] 
985
            currentList.append(str(row))
986
            column = 1
987
            worksheet.write(row, column, r[1],center_alignment)
988
 
989
        remainingList = list(set(onBoardingList) - set(currentList))
990
 
991
        for i,val in enumerate(remainingList):
992
            row = int(val)
993
            column = 1
994
            worksheet.write(row, column, 0,center_alignment)
995
        totalDispositions=contactableData+nonContactableData
996
        worksheet.write(6,1,round((contactableData/float(totalDispositions))*100,2),center_alignment)
997
        worksheet.write(7,1,round((nonContactableData/float(totalDispositions))*100,2),center_alignment)
998
 
999
 
1000
        conn.close()
1001
        datesql=ONBOARDING_QUERY_LOGIN_TIME 
1002
        conn = getDbConnection()
1003
 
1004
        cursor = conn.cursor()
1005
        cursor.execute(datesql)
1006
        result = cursor.fetchall()
1007
        agentLoginList=[]
1008
        averageLoginTime=0
1009
        loginTime=0
1010
        for r in result:
1011
            loginTime+=r[1].seconds
1012
            agentLoginList.append(str(r[0]))
1013
        averageLoginTime=loginTime/len(list(set(agentLoginList)))
1014
        hours=averageLoginTime/3600
1015
        minutesLeft=(averageLoginTime%3600)/60
1016
        worksheet.write(8,1,len(list(set(agentLoginList))),center_alignment)
1017
        worksheet.write(9,1,str(hours) + ':'+ str(minutesLeft),center_alignment)   
1018
        worksheet.write(10,1,totalDispositions,center_alignment)
1019
        worksheet.write(11,1,(contactableData+nonContactableData)/len(list(set(agentLoginList))),center_alignment)
1020
        conn.close()
1021
        datesql=ONBOARDING_QUERY_DURATION
1022
        conn = getDbConnection()
1023
 
1024
        cursor = conn.cursor()
1025
        cursor.execute(datesql)
1026
        result = cursor.fetchall()
1027
        for r in result:
1028
            totalCallDuration= r[0]
1029
        averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
1030
        hours=averageCallDuration/3600
1031
        minutesLeft=(averageCallDuration%3600)/60    
1032
        worksheet.write(12,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
1033
 
1034
        conn.close()
1035
        datesql=ONBOARDING_QUERY_AHT
1036
        conn = getDbConnection()
1037
 
1038
        cursor = conn.cursor()
1039
        cursor.execute(datesql)
1040
        result = cursor.fetchall()
1041
        for r in result:
1042
            totalCallDuration= r[0]
1043
        averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))    
1044
        hours=averageCallDuration/3600
1045
        minutesLeft=(averageCallDuration%3600)/60    
1046
        worksheet.write(13,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
1047
        conn.close()
1048
        datesql=ONBOARDING_QUERY_AIT
1049
        conn = getDbConnection()
1050
 
1051
        cursor = conn.cursor()
1052
        cursor.execute(datesql)
1053
        result = cursor.fetchall()
1054
        for r in result:
1055
            totalCallDuration= r[0]
1056
        averageCallDuration=totalCallDuration/len(list(set(agentLoginList)))
1057
        hours=averageCallDuration/3600
1058
        minutesLeft=(averageCallDuration%3600)/60    
1059
        worksheet.write(14,1,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)
1060
        workbook.save(TMP_FILE)
15394 manas 1061
 
1062
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)        
1063
 
1064
 
1065
def generateAgentWiseOnboardingCallingReport():
1066
 
1067
    agentId=3
1068
    rb = open_workbook(TMP_FILE,formatting_info=True)
1069
    workbook = copy(rb)
1070
    numberOfSheets=rb.nsheets
15402 manas 1071
 
15394 manas 1072
    sheet=rb.sheet_by_index(numberOfSheets-1)
1073
    worksheet = workbook.get_sheet(numberOfSheets-1)
1074
    boldStyle = xlwt.XFStyle()
1075
    newStyle= xlwt.XFStyle()
1076
    style = xlwt.XFStyle()
1077
    pattern = xlwt.Pattern()
1078
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
1079
    pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow']
1080
    style.pattern = pattern
1081
    f = xlwt.Font()
1082
    f.bold = True
1083
    boldStyle.font = f
1084
 
1085
    column = agentId
1086
    row = 25
1087
 
1088
    worksheet.write(row,column-1,'Call Disposition Type',style)
1089
    worksheet.write(row+1, column-1, 'Call Later', newStyle)
1090
    worksheet.write(row+2,column-1, 'Ringing No Answer', newStyle)
1091
    worksheet.write(row+3,column-1, 'Not Reachable', newStyle)
1092
    worksheet.write(row+4,column-1, 'Switched Off', newStyle)
1093
    worksheet.write(row+5,column-1, 'Successful', newStyle)
1094
    worksheet.write(row+6,column-1, 'Contactable Data', newStyle)
1095
    worksheet.write(row+7,column-1, 'Non Contactable Data', newStyle)
1096
    worksheet.write(row+8,column-1, 'Total Dialed Out', style)
1097
    worksheet.write(row+9,column-1, 'Login Time (In Hrs)', style)
1098
    worksheet.write(row+10,column-1, 'Call Duration (In Hrs)', style)
15402 manas 1099
    worksheet.write(row+11,column-1, 'Handling Time (In Hrs)', style)
1100
    worksheet.write(row+12,column-1, 'Idle Time (In Hrs)', style)
15394 manas 1101
    columnId=agentId
1102
    while True:
15407 manas 1103
            if agentId >20 :
15394 manas 1104
                break
1105
            else: 
1106
                datesql=AGENT_ONBOARDING_QUERY %(agentId)
1107
                conn = getDbConnection()
1108
 
1109
                cursor = conn.cursor()
1110
                cursor.execute(datesql)
1111
                result = cursor.fetchall()
1112
 
1113
                currentList=[]
1114
                contactableData=0
1115
                nonContactableData=0
1116
                if cursor.rowcount ==0:
1117
                    agentId+=1
1118
                    continue    
1119
                else:
15402 manas 1120
 
15394 manas 1121
                    for r in result:
1122
                        row = onBoardingDispositionMap.get(r[0])+26
1123
                        if onBoardingDispositionMap.get(r[0]) == 1 or onBoardingDispositionMap.get(r[0]) == 2 or onBoardingDispositionMap.get(r[0]) == 3 or followUpDispositionMap.get(r[0]) == 4:
1124
                            nonContactableData+=int(r[1])
1125
                        else:
1126
                            contactableData+=r[1] 
1127
                        currentList.append(str(onBoardingDispositionMap.get(r[0])+1))
1128
                        column = agentId
15402 manas 1129
                        worksheet.write(row, columnId, r[1],center_alignment)
15394 manas 1130
                    remainingList = list(set(onBoardingList) - set(currentList))
1131
 
1132
                    for i,val in enumerate(remainingList):
1133
                        row = int(val)+25
1134
                        column = agentId
15402 manas 1135
                        worksheet.write(row, columnId, 0,center_alignment)
15394 manas 1136
                    totalDialedOut = contactableData+nonContactableData
15402 manas 1137
                    worksheet.write(25+6,columnId,round((contactableData/float(totalDialedOut))*100,2),center_alignment)
1138
                    worksheet.write(25+7,columnId,round((nonContactableData/float(totalDialedOut))*100,2),center_alignment)
1139
                    worksheet.write(25+8,columnId,totalDialedOut,center_alignment)
15394 manas 1140
                    conn.close()
1141
 
1142
                    name_query=AGENT_NAME_QUERY %(agentId)
1143
                    conn = getDbConnection()
1144
                    column=agentId
1145
                    cursor = conn.cursor()
1146
                    cursor.execute(name_query)
1147
                    result = cursor.fetchall()
1148
                    for r in result:
1149
                        worksheet.write(25,columnId,r,style)
1150
                    conn.close()
1151
 
1152
 
15402 manas 1153
                    name_query=AGENT_ONBOARDING_QUERY_LOGIN_TIME %(agentId)
15394 manas 1154
                    conn = getDbConnection()
1155
                    column=agentId
1156
                    cursor = conn.cursor()
1157
                    cursor.execute(name_query)
1158
                    result = cursor.fetchall()
1159
                    loginTime=0
1160
                    for r in result:
1161
                        loginTime+=r[0].seconds
1162
 
1163
                    hours=loginTime/3600
1164
                    minutesLeft=(loginTime%3600)/60
15402 manas 1165
                    worksheet.write(25+9,columnId,str(hours)+':'+str(minutesLeft),center_alignment)    
15394 manas 1166
                    conn.close()
1167
 
15402 manas 1168
                    name_query=AGENT_ONBOARDING_QUERY_DURATION %(agentId)
15394 manas 1169
                    conn = getDbConnection()
1170
                    column=agentId
1171
                    cursor = conn.cursor()
1172
                    cursor.execute(name_query)
1173
                    result = cursor.fetchall()
1174
                    loginTime=0
1175
                    for r in result:
1176
                        loginTime+=r[0]
1177
                    hours=loginTime/3600
1178
                    minutesLeft=(loginTime%3600)/60
15402 manas 1179
                    worksheet.write(25+10,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
15394 manas 1180
                    conn.close()
1181
 
15402 manas 1182
                    name_query=AGENT_ONBOARDING_QUERY_AHT %(agentId)
1183
                    conn = getDbConnection()
1184
                    column=agentId
1185
                    cursor = conn.cursor()
1186
                    cursor.execute(name_query)
1187
                    result = cursor.fetchall()
1188
                    loginTime=0
1189
                    for r in result:
1190
                        loginTime+=r[0]
1191
                    hours=loginTime/3600
1192
                    minutesLeft=(loginTime%3600)/60
1193
                    worksheet.write(25+11,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
1194
                    conn.close()
1195
 
1196
                    name_query=AGENT_ONBOARDING_QUERY_AIT %(agentId)
1197
                    conn = getDbConnection()
1198
                    column=agentId
1199
                    cursor = conn.cursor()
1200
                    cursor.execute(name_query)
1201
                    result = cursor.fetchall()
1202
                    loginTime=0
1203
                    for r in result:
1204
                        loginTime+=r[0]
1205
                    hours=loginTime/3600
1206
                    minutesLeft=(loginTime%3600)/60
1207
                    worksheet.write(25+12,columnId,str(int(hours))+':'+str(int(minutesLeft)),center_alignment)    
1208
                    conn.close()
1209
 
15394 manas 1210
                agentId+=1
1211
                columnId+=1
1212
    workbook.save(TMP_FILE)          
1213
 
1214
 
1215
 
1216
def main():
1217
    generateFreshCallingReport()
1218
    generateAgentWiseFreshCallingReport()
1219
    generateFollowUpCallingReport()
1220
    generateAgentWiseFollowupCallingReport()
1221
    generateOnBoardingCallingReport()
1222
    generateAgentWiseOnboardingCallingReport()
15505 manas 1223
    #sendmail(["manas.kapoor@shop2020.in","amit.sirohi@shop2020.in","rajneesh.arora@saholic.com","ritesh.chauhan@shop2020.in", "shailesh.kumar@shop2020.in"], "", TMP_FILE, SUBJECT)
1224
    sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
15402 manas 1225
 
15394 manas 1226
def sendmail(email, message, fileName, title):
1227
    if email == "":
1228
        return
1229
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
1230
    mailServer.ehlo()
1231
    mailServer.starttls()
1232
    mailServer.ehlo()
1233
 
1234
    # Create the container (outer) email message.
1235
    msg = MIMEMultipart()
1236
    msg['Subject'] = title
1237
    msg.preamble = title
15441 manas 1238
    message="Total Activations :" + str(TotalActivations)
1239
    message1="Links Converted :" + str(Converted)
1240
    message2="Total Agents Logged In :" + str(AgentsLoggedIn)
15442 manas 1241
    html_msg = MIMEText(message+"<br>"+message1+"<br>"+message2, 'html')
15394 manas 1242
    msg.attach(html_msg)
1243
 
1244
    fileMsg = MIMEBase('application', 'vnd.ms-excel')
1245
    fileMsg.set_payload(file(TMP_FILE).read())
1246
    encoders.encode_base64(fileMsg)
1247
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
1248
    msg.attach(fileMsg)
15402 manas 1249
 
15505 manas 1250
    #MAILTO = ['manas.kapoor@saholic.com','amit.sirohi@shop2020.in','rajneesh.arora@saholic.com', 'ritesh.chauhan@shop2020.in', 'shailesh.kumar@shop2020.in']
1251
    MAILTO = ['manas.kapoor@saholic.com']
15394 manas 1252
    mailServer.login(SENDER, PASSWORD)
1253
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
1254
 
1255
if __name__ == '__main__':
1256
    main()