Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
14772 kshitij.so 1
'''
2
Created on Mar 10, 2015
3
 
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
15228 manas 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
15244 manas 27
from operator import or_
14772 kshitij.so 28
 
29
 
30
DB_HOST = "localhost"
31
DB_USER = "root"
32
DB_PASSWORD = "shop2020"
33
DB_NAME = "dtr"
34
TMP_FILE = "User_Activity_Report.xls"  
35
 
15228 manas 36
con = None
37
dateWiseOrderMap = {}
38
weekWiseOrderMap = {}
39
monthWiseOrderMap = {}
40
orderIds = []
41
cutOff = 1425839400
42
#cutOff = 1425234600
43
oneDay = 86400
44
monthCutOff = 1425148200
45
weekCutOff = 1425839400
46
#weekCutOff = 1425234600
47
 
48
DataService.initialize()
49
 
15551 manas 50
monthMap = {  '01':30,
51
            '02':28,
52
            '03':30,
53
            '04':29,
54
            '05':30,
55
            '06':29,
56
            '07':30,
57
            '08':30,
58
            '09':29,
59
            '10':30,
60
            '11':29,
61
            '12':30
62
        }
15228 manas 63
 
14772 kshitij.so 64
# KEY NAMES
65
SENDER = "cnc.center@shop2020.in"
66
PASSWORD = "5h0p2o2o"
15551 manas 67
SUBJECT = "User Activity Report for " + date.today().isoformat()
14772 kshitij.so 68
SMTP_SERVER = "smtp.gmail.com"
69
SMTP_PORT = 587    
70
 
71
DATE_QUERY="""
72
SELECT date(d.visited) from daily_visitors d 
15244 manas 73
join users u where u.id=d.user_id AND 
74
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 75
AND date(d.visited) > '2015-03-08' group by visited ;
76
"""
77
 
78
MONTH_QUERY="""
79
SELECT month(d.visited) from daily_visitors d 
15244 manas 80
join users u on u.id=d.user_id where 
81
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 82
group by month(d.visited);
83
"""
84
 
85
WEEK_QUERY="""
86
SELECT CONCAT(date(o.created), ' - ', date(o.created) + INTERVAL 6 DAY) AS week 
87
FROM  order_view o
15244 manas 88
JOIN users u ON u.id = o.user_id WHERE 
89
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 90
AND date(o.created) > '2015-03-08' 
91
GROUP BY WEEK(date(o.created))
92
ORDER BY WEEK(date(o.created))
93
"""
94
 
95
DNRU_QUERY="""
96
SELECT count(*) 
15244 manas 97
FROM users u WHERE 
98
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 99
AND date(u.created) > '2015-03-08'
100
group by date(u.created) 
101
order by date(u.created)
102
"""
103
 
104
DAU_QUERY="""
105
SELECT count(distinct d.user_id) 
15244 manas 106
FROM daily_visitors d join users u WHERE u.id=d.user_id 
107
AND (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 108
AND date(d.visited) > '2015-03-08' group by visited ;
109
"""
110
 
15551 manas 111
# DAB_QUERY="""
112
# SELECT COUNT(DISTINCT o.user_id ) 
113
# FROM  order_view o
114
# JOIN users u ON u.id = o.user_id WHERE 
115
# (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
116
# AND (o.STATUS =  'ORDER_CREATED' OR o.STATUS ='DETAIL_CREATED')
117
# AND date(o.created) > '2015-03-08' 
118
# group by date(o.created)
119
# order by date(o.created)
120
# """
14772 kshitij.so 121
DAB_QUERY="""
15551 manas 122
select count(DISTINCT s.user_id) from 
123
(SELECT created, id,user_id FROM  order_view where STATUS =  'ORDER_CREATED' OR STATUS ='DETAIL_CREATED' 
124
union  SELECT created, id,user_id FROM   flipkartorders where date(created)>'2015-03-22') s 
125
JOIN users u ON u.id = s.user_id WHERE   
126
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated = 1 
127
AND date(s.created) > '2015-03-08' 
128
GROUP by date(s.created)
129
ORDER by date(s.created);
14772 kshitij.so 130
"""
131
 
132
DTO_QUERY="""
15551 manas 133
select count(*) from 
134
(SELECT created, id,user_id FROM  order_view where STATUS =  'ORDER_CREATED' OR STATUS ='DETAIL_CREATED' 
135
union  SELECT created, id,ifnull(user_id,139) FROM   flipkartorders where date(created)>'2015-03-22') s 
136
JOIN users u ON u.id = s.user_id WHERE   
137
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated = 1 
138
AND date(s.created) > '2015-03-08' 
139
GROUP by date(s.created)
140
ORDER by date(s.created);
14772 kshitij.so 141
"""
15551 manas 142
# DTO_QUERY="""
143
# SELECT date(o.created),COUNT(*) 
144
# FROM  order_view o
145
# JOIN users u ON u.id = o.user_id WHERE 
146
# (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
147
# AND (o.STATUS =  'ORDER_CREATED' OR o.STATUS ='DETAIL_CREATED')
148
# AND date(o.created) > '2015-03-08' 
149
# GROUP BY DATE(o.created)
150
# order by date(o.created) 
151
#"""
14772 kshitij.so 152
 
153
MNRU_QUERY="""
15244 manas 154
SELECT count(*) FROM users u WHERE 
155
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 156
AND date(u.created) > '2015-03-08' 
157
group by month(u.created)
158
order by month(u.created) 
159
"""
160
 
161
MAU_QUERY="""
162
SELECT count(distinct d.user_id) 
15244 manas 163
FROM daily_visitors d join users u where u.id=d.user_id AND 
164
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 165
AND date(d.visited) > '2015-03-08' 
166
group by month(d.visited)
167
order by month(d.visited); 
168
"""
169
 
15551 manas 170
# MAB_QUERY="""
171
# SELECT COUNT(DISTINCT o.user_id ) 
172
# FROM  order_view o
173
# JOIN users u ON u.id = o.user_id where
174
# (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
175
# AND (o.STATUS =  'ORDER_CREATED' OR o.STATUS ='DETAIL_CREATED')
176
# AND date(o.created) > '2015-03-08' 
177
# group by month(o.created)
178
# order by month(o.created); 
179
# """
180
 
181
# MTO_QUERY="""
182
# SELECT COUNT( *) 
183
# FROM  order_view o
184
# JOIN users u ON u.id = o.user_id where
185
# (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
186
# AND (o.STATUS =  'ORDER_CREATED' OR o.STATUS ='DETAIL_CREATED')
187
# AND date(o.created) > '2015-03-08' 
188
# GROUP BY MONTH(o.created)
189
# order by month(o.created); 
190
# """
191
 
14772 kshitij.so 192
MAB_QUERY="""
15551 manas 193
select count(DISTINCT s.user_id) from 
194
(SELECT created, id,user_id FROM  order_view where STATUS =  'ORDER_CREATED' OR STATUS ='DETAIL_CREATED' 
195
union  SELECT created, id,user_id FROM   flipkartorders where date(created)>'2015-03-22') s 
196
JOIN users u ON u.id = s.user_id WHERE   (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1 
197
AND date(s.created) > '2015-03-08' 
198
GROUP by month(s.created)
199
order by month(s.created);
14772 kshitij.so 200
"""
201
MTO_QUERY="""
15551 manas 202
select count(*) from 
203
(SELECT created, id,user_id FROM  order_view where STATUS =  'ORDER_CREATED' OR STATUS ='DETAIL_CREATED' 
204
union  SELECT created, id,ifnull(user_id,139) FROM   flipkartorders where date(created)>'2015-03-22') s 
205
JOIN users u ON u.id = s.user_id WHERE   (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1 
206
AND date(s.created) > '2015-03-08' 
207
GROUP by month(s.created)
208
order by month(s.created);
14772 kshitij.so 209
"""
210
 
211
WNRU_QUERY="""
212
SELECT COUNT(*)
213
FROM users u WHERE 
15244 manas 214
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 215
AND date(u.created) > '2015-03-08' 
216
GROUP BY WEEK(date(u.created))
217
ORDER BY WEEK(date(u.created))
218
 
219
"""
220
WAU_QUERY="""
221
SELECT  COUNT(distinct d.user_id) AS total
15244 manas 222
FROM  daily_visitors d join users u where u.id=d.user_id AND 
223
(LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
14772 kshitij.so 224
AND date(d.visited) > '2015-03-08' 
225
GROUP BY WEEK(d.visited)
226
ORDER BY WEEK(d.visited)
227
"""
228
 
229
 
15551 manas 230
# WAB_QUERY="""
231
# SELECT COUNT( DISTINCT o.user_id ) 
232
# FROM  order_view o
233
# JOIN users u ON u.id = o.user_id WHERE
234
# (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
235
# AND (o.STATUS =  'ORDER_CREATED' OR o.STATUS ='DETAIL_CREATED')
236
# AND date(o.created) > '2015-03-08'  
237
# GROUP BY WEEK(date(o.created))
238
# ORDER BY WEEK(date(o.created))
239
# """
240
 
241
# WTO_QUERY="""
242
# SELECT COUNT(*)
243
# FROM  order_view o
244
# JOIN users u ON u.id = o.user_id WHERE 
245
# (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1
246
# AND (o.STATUS =  'ORDER_CREATED' OR o.STATUS ='DETAIL_CREATED')
247
# AND date(o.created) > '2015-03-08' 
248
# GROUP BY WEEK(date(o.created))
249
# ORDER BY WEEK(date(o.created))
250
# """
251
 
14772 kshitij.so 252
WAB_QUERY="""
15551 manas 253
select count(distinct user_id) from 
254
(SELECT created, id,user_id FROM  order_view where STATUS =  'ORDER_CREATED' OR STATUS ='DETAIL_CREATED' 
255
union  SELECT created, id,user_id FROM   flipkartorders where date(created)>'2015-03-22') s 
256
JOIN users u ON u.id = s.user_id WHERE   (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1 
257
AND date(s.created) > '2015-03-08' 
258
GROUP by week(s.created)
259
order by week(s.created);
14772 kshitij.so 260
"""
261
 
262
WTO_QUERY="""
15551 manas 263
select count(*) from 
264
(SELECT created, id,user_id FROM  order_view where STATUS =  'ORDER_CREATED' OR STATUS ='DETAIL_CREATED' 
265
union  SELECT created, id,ifnull(user_id,139) FROM   flipkartorders where date(created)>'2015-03-22') s 
266
JOIN users u ON u.id = s.user_id WHERE   (LOWER(u.referrer) NOT LIKE  'emp%' OR u.utm_campaign is not NULL) AND u.activated =1 
267
AND date(s.created) > '2015-03-08' 
268
GROUP by week(s.created)
269
order by week(s.created);
14772 kshitij.so 270
"""
271
 
15551 manas 272
DQ_QUERY="""
273
select sum(quantity) from flipkartorders where date(created)='%s';
274
"""
275
DV_QUERY="""
276
select sum(quantity*price) from flipkartorders where date(created)='%s';
277
"""
278
WQ_QUERY="""
279
select sum(quantity) from flipkartorders where date(created) between '%s' and '%s';
280
"""
281
WV_QUERY="""
282
select sum(quantity*price) from flipkartorders where date(created) between '%s' and '%s';
283
"""
14772 kshitij.so 284
 
285
date_format = xlwt.XFStyle()
286
date_format.num_format_str = 'yyyy/mm/dd'
287
 
288
datetime_format = xlwt.XFStyle()
289
datetime_format.num_format_str = 'yyyy/mm/dd HH:MM AM/PM'
290
 
291
default_format = xlwt.XFStyle()
292
 
293
 
294
def getDbConnection():
295
    return MySQLdb.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
296
 
297
 
298
def generateDailyReport():
299
    datesql= DATE_QUERY
300
    dnruSql = DNRU_QUERY
301
    dauSql = DAU_QUERY
302
    dabSql = DAB_QUERY
303
    dtoSql = DTO_QUERY
304
    conn = getDbConnection()
305
 
306
    # prepare a cursor object using cursor() method
307
    cursor = conn.cursor()
308
    # Execute the SQL command
309
    # Fetch source id.
310
    cursor.execute(datesql)
311
    result = cursor.fetchall()
312
    global workbook
313
    workbook = xlwt.Workbook()
314
    worksheet = workbook.add_sheet("User")
315
    boldStyle = xlwt.XFStyle()
316
    f = xlwt.Font()
317
    f.bold = True
318
    boldStyle.font = f
319
    column = 0
320
    row = 0
321
    sumdata=17
15228 manas 322
    global z
14772 kshitij.so 323
    worksheet.write(row, 0, 'Date', boldStyle)
324
    worksheet.write(row, 1, 'TRU', boldStyle)
325
    worksheet.write(row, 2, 'NRU', boldStyle)
326
    worksheet.write(row, 3, 'DAU', boldStyle)
327
    worksheet.write(row, 4, 'DAB', boldStyle)
328
    worksheet.write(row, 5, 'DTO', boldStyle)
15228 manas 329
    worksheet.write(row, 6, 'DSO', boldStyle)   
330
    worksheet.write(row, 7, 'DTV', boldStyle)
14772 kshitij.so 331
    for r in result:
332
        row += 1
333
        column = 0
334
        for data in r :
335
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
336
            column += 1
337
 
338
    row = 0
339
    cursor.execute(dnruSql)
340
    result = cursor.fetchall()
341
    for r in result:
342
        row += 1
343
        column = 1
344
        for data in r :
345
            print "Data" + str(data)
346
            sumdata=sumdata+data
347
            print "Sum Data" + str(sumdata)
348
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
349
            column += 1
350
 
351
    row = 0
352
    cursor.execute(dnruSql)
353
    result = cursor.fetchall()
354
    for r in result:
355
        row += 1
356
        column = 2
357
        for data in r :
358
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
359
            column += 1        
360
 
361
    row = 0
362
    cursor.execute(dauSql)
363
    result = cursor.fetchall()
364
 
365
    for r in result:
366
        row += 1
367
        column = 3
368
        for data in r :
369
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
370
            column += 1
371
 
372
    row = 0
373
    cursor.execute(dabSql)
374
    result = cursor.fetchall()
375
 
376
    for r in result:
377
        row += 1
378
        column = 4
379
        for data in r :
380
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
381
            column += 1
382
 
383
    row = 0            
384
    cursor.execute(dtoSql)
385
    result = cursor.fetchall()
386
    for r in result:
387
        row += 1
388
        column = 5
389
        for data in r :
390
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
391
            column += 1
15228 manas 392
 
393
    row=0
14772 kshitij.so 394
 
15228 manas 395
    z=0    
396
    for x in sorted(dateWiseOrderMap):
397
        row += 1
398
        column = 6
15551 manas 399
        d = str(datetime.fromtimestamp(x/1000.0))
400
        dq=DQ_QUERY%d[:10]
401
        cursor.execute(dq)
402
        result = cursor.fetchall()
403
        for r in result:
404
            quantity= r[0]   
405
            if quantity is None:
406
                quantity=0
407
        worksheet.write(row,column,(dateWiseOrderMap.get(x).count)+quantity)
15228 manas 408
        column += 1
14772 kshitij.so 409
 
15228 manas 410
    row =0
411
    for x in sorted(dateWiseOrderMap):
412
        row += 1
413
        column = 7
15551 manas 414
        d = str(datetime.fromtimestamp(x/1000.0))
415
        dq=DV_QUERY%d[:10]
416
        cursor.execute(dq)
417
        result = cursor.fetchall()
418
        for r in result:
419
            quantity= r[0]   
420
            if quantity is None:
421
                quantity=0
422
        worksheet.write(row,column,(dateWiseOrderMap.get(x).value)+float(quantity))
15228 manas 423
        column += 1    
424
 
14772 kshitij.so 425
def generateMonthlyReport():
426
    monthSql = MONTH_QUERY
427
    mnruSql = MNRU_QUERY
428
    mauSql = MAU_QUERY
429
    mabSql = MAB_QUERY
430
    mtoSql = MTO_QUERY
431
 
432
    conn = getDbConnection()
433
 
434
    cursor = conn.cursor()
435
 
436
    cursor.execute(monthSql)
437
    result = cursor.fetchall()
438
    rb = open_workbook(TMP_FILE)
439
    wb = copy(rb)
440
    worksheet = workbook.add_sheet("Monthly")
441
    boldStyle = xlwt.XFStyle()
442
    f = xlwt.Font()
443
    f.bold = True
444
    boldStyle.font = f
445
    column = 0
446
    row = 0
447
    sumdata=17
448
    worksheet.write(row, 0, 'Month', boldStyle)
449
    worksheet.write(row, 1, 'MTRU', boldStyle)
450
    worksheet.write(row, 2, 'MNRU', boldStyle)
451
    worksheet.write(row, 3, 'MAU', boldStyle)
452
    worksheet.write(row, 4, 'MAB', boldStyle)
453
    worksheet.write(row, 5, 'MTO', boldStyle)
15551 manas 454
    worksheet.write(row, 6, 'MTS', boldStyle)
455
    worksheet.write(row, 7, 'MTV', boldStyle)
456
 
14772 kshitij.so 457
    for r in result:
458
        row += 1
459
        column = 0
460
        for data in r :
461
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
462
            column += 1
463
 
464
    row = 0
465
    cursor.execute(mnruSql)
466
    result = cursor.fetchall()
467
    for r in result:
468
        row += 1
469
        column = 1
470
        for data in r :
471
            print "Data" + str(data)
472
            sumdata=sumdata+data
473
            print "Sum Data" + str(sumdata)
474
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
475
            column += 1
476
 
477
    row = 0
478
    cursor.execute(mnruSql)
479
    result = cursor.fetchall()
480
    for r in result:
481
        row += 1
482
        column = 2
483
        for data in r :
484
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
485
            column += 1        
486
 
487
    row = 0
488
    cursor.execute(mauSql)
489
    result = cursor.fetchall()
490
 
491
    for r in result:
492
        row += 1
493
        column = 3
494
        for data in r :
495
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
496
            column += 1
497
 
498
    row = 0
499
    cursor.execute(mabSql)
500
    result = cursor.fetchall()
501
 
502
    for r in result:
503
        row += 1
504
        column = 4
505
        for data in r :
506
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
507
            column += 1
508
 
509
    row = 0            
510
    cursor.execute(mtoSql)
511
    result = cursor.fetchall()
512
 
513
    for r in result:
514
        row += 1
515
        column = 5
516
        for data in r :
517
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
518
            column += 1
15551 manas 519
 
520
    row=0
14772 kshitij.so 521
 
15551 manas 522
    z=0    
523
    for x in sorted(monthWiseOrderMap):
524
        d = str(datetime.fromtimestamp(x/1000.0))
525
        nextday = (x/1000 + (monthMap.get(d[5:7]) * oneDay))*1000
526
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
527
        row += 1
528
        column = 6
529
        dq=WQ_QUERY % (d[:10],dnext[:10])
530
        cursor.execute(dq)
531
        result = cursor.fetchall()
532
        for r in result:
533
            quantity= r[0]
534
            if quantity is None:
535
                quantity=0
536
        worksheet.write(row,column,(monthWiseOrderMap.get(x).count)+quantity)
537
        column += 1
538
 
539
    row =0
540
    for x in sorted(monthWiseOrderMap):
541
        row += 1
542
        column = 7
543
        d = str(datetime.fromtimestamp(x/1000.0))
544
        nextday = (x/1000 + (monthMap.get(d[5:7]) * oneDay))*1000
545
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
546
        dq=WV_QUERY % (d[:10],dnext[:10])
547
        cursor.execute(dq)
548
        result = cursor.fetchall()
549
        for r in result:
550
            quantity= r[0]
551
            if quantity is None:
552
                quantity=0
553
        worksheet.write(row,column,(monthWiseOrderMap.get(x).value)+float(quantity))
554
        column += 1  
14772 kshitij.so 555
    workbook.save(TMP_FILE)
14805 kshitij.so 556
    sendmail(["manas.kapoor@shop2020.in","rajneesh.arora@saholic.com"], "", TMP_FILE, SUBJECT)
15228 manas 557
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
14772 kshitij.so 558
 
559
def generateWeeklyReport():
560
    weekSql = WEEK_QUERY
561
    wnruSql = WNRU_QUERY
562
    wauSql = WAU_QUERY
563
    wabSql = WAB_QUERY
564
    wtoSql = WTO_QUERY
565
 
566
    conn = getDbConnection()
567
 
568
    cursor = conn.cursor()
569
 
570
    cursor.execute(weekSql)
571
    result = cursor.fetchall()
572
    rb = open_workbook(TMP_FILE)
573
    wb = copy(rb)
574
    worksheet = workbook.add_sheet("Weekly")
575
    boldStyle = xlwt.XFStyle()
576
    f = xlwt.Font()
577
    f.bold = True
578
    boldStyle.font = f
579
    column = 0
580
    row = 0
581
    sumdata=17
582
    worksheet.write(row, 0, 'Week', boldStyle)
583
    worksheet.write(row, 1, 'WTRU', boldStyle)
584
    worksheet.write(row, 2, 'WNRU', boldStyle)
585
    worksheet.write(row, 3, 'WAU', boldStyle)
586
    worksheet.write(row, 4, 'WAB', boldStyle)
587
    worksheet.write(row, 5, 'WTO', boldStyle)
15228 manas 588
    worksheet.write(row, 6, 'WTS', boldStyle)
589
    worksheet.write(row, 7, 'WTV', boldStyle)
14772 kshitij.so 590
 
591
    for r in result:
592
        row += 1
593
        column = 0
594
        for data in r :
595
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
596
            column += 1
597
 
598
    row = 0
599
    cursor.execute(wnruSql)
600
    result = cursor.fetchall()
601
    for r in result:
602
        row += 1
603
        column = 1
604
        for data in r :
605
            print "Data" + str(data)
606
            sumdata=sumdata+data
607
            print "Sum Data" + str(sumdata)
608
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
609
            column += 1
610
 
611
    row = 0
612
    cursor.execute(wnruSql)
613
    result = cursor.fetchall()
614
    for r in result:
615
        row += 1
616
        column = 2
617
        for data in r :
618
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
619
            column += 1        
620
 
621
    row = 0
622
    cursor.execute(wauSql)
623
    result = cursor.fetchall()
624
 
625
    for r in result:
626
        row += 1
627
        column = 3
628
        for data in r :
629
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
630
            column += 1
631
 
632
    row = 0
633
    cursor.execute(wabSql)
634
    result = cursor.fetchall()
635
 
636
    for r in result:
637
        row += 1
638
        column = 4
639
        for data in r :
640
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
641
            column += 1
642
 
643
    row = 0            
644
    cursor.execute(wtoSql)
645
    result = cursor.fetchall()
646
 
647
    for r in result:
648
        row += 1
649
        column = 5
650
        for data in r :
651
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
652
            column += 1
15228 manas 653
 
654
    row = 0        
655
    for x in sorted(weekWiseOrderMap):
656
        row += 1
657
        column = 6
15551 manas 658
        d = str(datetime.fromtimestamp(x/1000.0))
659
        nextday=oneDay*7*1000+x
660
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
661
        dq=WQ_QUERY % (d[:10],dnext[:10])
662
        cursor.execute(dq)
663
        result = cursor.fetchall()
664
        for r in result:
665
            quantity= r[0]
666
            if quantity is None:
667
                quantity=0
668
        worksheet.write(row,column,(weekWiseOrderMap.get(x).count)+quantity)
15228 manas 669
        column+=1
670
    row = 0
671
    for x in sorted(weekWiseOrderMap):
672
        row += 1
673
        column = 7
15551 manas 674
        d = str(datetime.fromtimestamp(x/1000.0))
675
        nextday=oneDay*7*1000+x
676
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
677
        dq=WV_QUERY % (d[:10],dnext[:10])
678
        cursor.execute(dq)
679
        result = cursor.fetchall()
680
        for r in result:
681
            quantity= r[0]
682
            if quantity is None:
683
                quantity=0
684
        worksheet.write(row,column,(weekWiseOrderMap.get(x).value)+float(quantity))
15228 manas 685
        column+=1    
14772 kshitij.so 686
 
687
 
688
def sendmail(email, message, fileName, title):
689
    if email == "":
690
        return
691
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
692
    mailServer.ehlo()
693
    mailServer.starttls()
694
    mailServer.ehlo()
695
 
696
    # Create the container (outer) email message.
697
    msg = MIMEMultipart()
698
    msg['Subject'] = title
699
    msg.preamble = title
700
    html_msg = MIMEText(message, 'html')
701
    msg.attach(html_msg)
702
 
703
    fileMsg = MIMEBase('application', 'vnd.ms-excel')
704
    fileMsg.set_payload(file(TMP_FILE).read())
705
    encoders.encode_base64(fileMsg)
706
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
707
    msg.attach(fileMsg)
14805 kshitij.so 708
 
709
    MAILTO = ['manas.kapoor@saholic.com','rajneesh.arora@saholic.com']
15228 manas 710
    #MAILTO = ['manas.kapoor@saholic.com']
14772 kshitij.so 711
    mailServer.login(SENDER, PASSWORD)
712
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
713
 
15228 manas 714
class __Order:
715
 
716
    def __init__(self, count, value):
717
 
718
        self.count = count
719
        self.value = value
720
 
721
def get_mongo_connection(host='localhost', port=27017):
722
    global con
723
    if con is None:
724
        print "Establishing connection %s host and port %d" %(host,port)
725
        try:
726
            con = pymongo.MongoClient(host, port)
727
        except Exception, e:
728
            print e
729
            return None
730
    return con
731
 
732
def populateOrderMap():
733
    global dateWiseOrderMap
15551 manas 734
    allOrders = get_mongo_connection().Dtr.merchantOrder.find({'createdOnInt':{"$gte":cutOff},'storeId':{"$in":[1,3,4]}}).sort([('createdOnInt',pymongo.ASCENDING)])
15228 manas 735
    for orders in allOrders:
736
        if orders.get('orderId') not in order_ids:
737
            continue
738
        cdate = ((to_py_date(orders.get('createdOnInt') * 1000)))
739
        millisec = to_java_date(datetime(cdate.year, cdate.month, cdate.day))
740
        if dateWiseOrderMap.has_key(millisec):
741
            orderObj = dateWiseOrderMap.get(millisec)
742
            q, c = getSubOrderQuantity(orders.get('subOrders'))
743
            orderObj.count += q
744
            orderObj.value += c
745
        else:
746
            orderObj = __Order(None, None)
747
            q, c = getSubOrderQuantity(orders.get('subOrders'))
748
            orderObj.count = q
749
            orderObj.value = c 
750
            dateWiseOrderMap[millisec] = orderObj
751
 
15551 manas 752
 
753
 
15228 manas 754
def getSubOrderQuantity(subOrders):
755
    q = 0
756
    c = 0
757
    if subOrders is None:
758
        return q, c
759
    for subOrder in subOrders:
760
        q = q + int(subOrder.get('quantity'))
761
        try:
762
            c = c + float(subOrder.get('amountPaid').encode('utf-8'))
763
        except AttributeError:
764
            c = c + float(subOrder.get('amountPaid'))
765
    return q, c
766
 
767
def populateWeekWiseMap():
768
    global weekCutOff
769
    while(True):
770
        quantity, amount = 0 , 0
771
        for i in xrange(weekCutOff , (weekCutOff * 7)+1):
772
            orderObj = dateWiseOrderMap.get(i*1000)
773
            quantity += orderObj.count
774
            amount += orderObj.value
775
            i = i + oneDay
776
        weekWiseOrderMap[weekCutOff * 1000] = __Order(quantity, amount)
777
        weekCutOff = weekCutOff * 1000 * 7 + oneDay
778
        if weekCutOff >= to_py_date(datetime.now()):
779
            break
780
 
781
def populateWeekWiseMap1():
782
    global weekCutOff
783
    while(True):
784
        if weekCutOff *1000 >= to_java_date(datetime.now()):
785
            break
786
        init = weekCutOff
787
        breakPoint = weekCutOff + (6 * oneDay)
788
        quantity, amount = 0 , 0
789
        while(True):
790
            orderObj = dateWiseOrderMap.get(weekCutOff * 1000)
791
            if orderObj is not None:
792
                quantity += orderObj.count
793
                amount += orderObj.value
794
            weekCutOff = weekCutOff + oneDay
795
            if weekCutOff > breakPoint:
796
                weekWiseOrderMap[init * 1000] = __Order(quantity, amount)
797
                break 
798
 
799
def populateMonthWiseMap():
800
    global monthCutOff
801
    while(True):
802
        quantity, amount = 0 , 0
803
        for i in xrange(monthCutOff , (monthCutOff * 30)+1):
804
            orderObj = dateWiseOrderMap.get(i*1000)
805
            quantity += orderObj.count
806
            amount += orderObj.value
807
            i = i + oneDay
808
        weekWiseOrderMap[monthCutOff * 1000] = __Order(quantity, amount)
809
        monthCutOff = monthCutOff * 1000 * 30 + oneDay
810
        if monthCutOff >= to_py_date(datetime.now()):
811
            break
812
 
813
def populateMonthWiseMap1():
15551 manas 814
    global monthCutOff
15228 manas 815
    while(True):
15551 manas 816
 
817
        print monthCutOff *1000
818
        a=str(to_py_date(monthCutOff*1000))
819
        print 'Now ' + str(to_java_date(datetime.now()))
15228 manas 820
        print "**********************"
15551 manas 821
        if monthCutOff *1000 >= to_java_date(datetime.now()):
15228 manas 822
            print "Breaking outer while"
823
            break
15551 manas 824
        init = monthCutOff
825
        breakPoint = monthCutOff + (monthMap.get(a[5:7]) * oneDay)
826
        print breakPoint
15228 manas 827
        quantity, amount = 0 , 0
828
        while(True):
15551 manas 829
            print to_py_date(monthCutOff*1000)
830
            print "weekCutOff ",monthCutOff
15228 manas 831
            print "breakPoint ",breakPoint
15551 manas 832
            orderObj = dateWiseOrderMap.get(monthCutOff * 1000)
15228 manas 833
            if orderObj is None:
15551 manas 834
                print "None for ", to_py_date(monthCutOff * 1000)
15228 manas 835
            if orderObj is not None:
836
                quantity += orderObj.count
837
                amount += orderObj.value
15551 manas 838
            monthCutOff = monthCutOff + oneDay
839
            counter=0
840
            print counter+1
841
            if monthCutOff > breakPoint:
842
                monthWiseOrderMap[init * 1000] = __Order(quantity, amount)
15228 manas 843
                print "Breaking inner while"
844
                break 
845
 
846
def populateValidOrders():
847
    global order_ids
15244 manas 848
    allOrders = session.query(Orders.id).join((Users,Orders.user_id==Users.id)).filter(or_(~(func.lower(Users.referrer)).like('emp%'),Users.utm_campaign != None)).all()
15228 manas 849
    order_ids = list(zip(*allOrders)[0])
15244 manas 850
 
14772 kshitij.so 851
def main():
15228 manas 852
    populateValidOrders()
853
    populateOrderMap()
854
    populateWeekWiseMap1()
15551 manas 855
    populateMonthWiseMap1()
14772 kshitij.so 856
    generateDailyReport()
857
    generateWeeklyReport()
858
    generateMonthlyReport()
15228 manas 859
 
15551 manas 860
 
14772 kshitij.so 861
if __name__ == '__main__':
15551 manas 862
    main()