Subversion Repositories SmartDukaan

Rev

Rev 16931 | Rev 16964 | 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)
16933 manas 329
    worksheet.write(row, 6, 'DVOL', boldStyle)   
15228 manas 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
16933 manas 407
        print 'Total Sub order quantity', dateWiseOrderMap.get(x).count,' Flipkart Order', quantity
15551 manas 408
        worksheet.write(row,column,(dateWiseOrderMap.get(x).count)+quantity)
15228 manas 409
        column += 1
14772 kshitij.so 410
 
15228 manas 411
    row =0
412
    for x in sorted(dateWiseOrderMap):
413
        row += 1
414
        column = 7
15551 manas 415
        d = str(datetime.fromtimestamp(x/1000.0))
416
        dq=DV_QUERY%d[:10]
417
        cursor.execute(dq)
418
        result = cursor.fetchall()
419
        for r in result:
420
            quantity= r[0]   
421
            if quantity is None:
422
                quantity=0
423
        worksheet.write(row,column,(dateWiseOrderMap.get(x).value)+float(quantity))
15228 manas 424
        column += 1    
425
 
14772 kshitij.so 426
def generateMonthlyReport():
427
    monthSql = MONTH_QUERY
428
    mnruSql = MNRU_QUERY
429
    mauSql = MAU_QUERY
430
    mabSql = MAB_QUERY
431
    mtoSql = MTO_QUERY
432
 
433
    conn = getDbConnection()
434
 
435
    cursor = conn.cursor()
436
 
437
    cursor.execute(monthSql)
438
    result = cursor.fetchall()
439
    rb = open_workbook(TMP_FILE)
440
    wb = copy(rb)
441
    worksheet = workbook.add_sheet("Monthly")
442
    boldStyle = xlwt.XFStyle()
443
    f = xlwt.Font()
444
    f.bold = True
445
    boldStyle.font = f
446
    column = 0
447
    row = 0
448
    sumdata=17
449
    worksheet.write(row, 0, 'Month', boldStyle)
450
    worksheet.write(row, 1, 'MTRU', boldStyle)
451
    worksheet.write(row, 2, 'MNRU', boldStyle)
452
    worksheet.write(row, 3, 'MAU', boldStyle)
453
    worksheet.write(row, 4, 'MAB', boldStyle)
454
    worksheet.write(row, 5, 'MTO', boldStyle)
16933 manas 455
    worksheet.write(row, 6, 'MVOL', boldStyle)
15551 manas 456
    worksheet.write(row, 7, 'MTV', boldStyle)
457
 
14772 kshitij.so 458
    for r in result:
459
        row += 1
460
        column = 0
461
        for data in r :
462
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
463
            column += 1
464
 
465
    row = 0
466
    cursor.execute(mnruSql)
467
    result = cursor.fetchall()
468
    for r in result:
469
        row += 1
470
        column = 1
471
        for data in r :
472
            print "Data" + str(data)
473
            sumdata=sumdata+data
474
            print "Sum Data" + str(sumdata)
475
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
476
            column += 1
477
 
478
    row = 0
479
    cursor.execute(mnruSql)
480
    result = cursor.fetchall()
481
    for r in result:
482
        row += 1
483
        column = 2
484
        for data in r :
485
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
486
            column += 1        
487
 
488
    row = 0
489
    cursor.execute(mauSql)
490
    result = cursor.fetchall()
491
 
492
    for r in result:
493
        row += 1
494
        column = 3
495
        for data in r :
496
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
497
            column += 1
498
 
499
    row = 0
500
    cursor.execute(mabSql)
501
    result = cursor.fetchall()
502
 
503
    for r in result:
504
        row += 1
505
        column = 4
506
        for data in r :
507
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
508
            column += 1
509
 
510
    row = 0            
511
    cursor.execute(mtoSql)
512
    result = cursor.fetchall()
513
 
514
    for r in result:
515
        row += 1
516
        column = 5
517
        for data in r :
518
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
519
            column += 1
15551 manas 520
 
521
    row=0
14772 kshitij.so 522
 
15551 manas 523
    z=0    
524
    for x in sorted(monthWiseOrderMap):
525
        d = str(datetime.fromtimestamp(x/1000.0))
526
        nextday = (x/1000 + (monthMap.get(d[5:7]) * oneDay))*1000
527
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
528
        row += 1
529
        column = 6
530
        dq=WQ_QUERY % (d[:10],dnext[:10])
531
        cursor.execute(dq)
532
        result = cursor.fetchall()
533
        for r in result:
534
            quantity= r[0]
535
            if quantity is None:
536
                quantity=0
16933 manas 537
        print 'Total Sub order quantity Monthly', dateWiseOrderMap.get(x).count,' Flipkart Order', quantity        
15551 manas 538
        worksheet.write(row,column,(monthWiseOrderMap.get(x).count)+quantity)
539
        column += 1
540
 
541
    row =0
542
    for x in sorted(monthWiseOrderMap):
543
        row += 1
544
        column = 7
545
        d = str(datetime.fromtimestamp(x/1000.0))
546
        nextday = (x/1000 + (monthMap.get(d[5:7]) * oneDay))*1000
547
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
548
        dq=WV_QUERY % (d[:10],dnext[:10])
549
        cursor.execute(dq)
550
        result = cursor.fetchall()
551
        for r in result:
552
            quantity= r[0]
553
            if quantity is None:
554
                quantity=0
555
        worksheet.write(row,column,(monthWiseOrderMap.get(x).value)+float(quantity))
556
        column += 1  
14772 kshitij.so 557
    workbook.save(TMP_FILE)
14805 kshitij.so 558
    sendmail(["manas.kapoor@shop2020.in","rajneesh.arora@saholic.com"], "", TMP_FILE, SUBJECT)
15228 manas 559
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
14772 kshitij.so 560
 
561
def generateWeeklyReport():
562
    weekSql = WEEK_QUERY
563
    wnruSql = WNRU_QUERY
564
    wauSql = WAU_QUERY
565
    wabSql = WAB_QUERY
566
    wtoSql = WTO_QUERY
567
 
568
    conn = getDbConnection()
569
 
570
    cursor = conn.cursor()
571
 
572
    cursor.execute(weekSql)
573
    result = cursor.fetchall()
574
    rb = open_workbook(TMP_FILE)
575
    wb = copy(rb)
576
    worksheet = workbook.add_sheet("Weekly")
577
    boldStyle = xlwt.XFStyle()
578
    f = xlwt.Font()
579
    f.bold = True
580
    boldStyle.font = f
581
    column = 0
582
    row = 0
583
    sumdata=17
584
    worksheet.write(row, 0, 'Week', boldStyle)
585
    worksheet.write(row, 1, 'WTRU', boldStyle)
586
    worksheet.write(row, 2, 'WNRU', boldStyle)
587
    worksheet.write(row, 3, 'WAU', boldStyle)
588
    worksheet.write(row, 4, 'WAB', boldStyle)
589
    worksheet.write(row, 5, 'WTO', boldStyle)
16933 manas 590
    worksheet.write(row, 6, 'WVOL', boldStyle)
15228 manas 591
    worksheet.write(row, 7, 'WTV', boldStyle)
14772 kshitij.so 592
 
593
    for r in result:
594
        row += 1
595
        column = 0
596
        for data in r :
597
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
598
            column += 1
599
 
600
    row = 0
601
    cursor.execute(wnruSql)
602
    result = cursor.fetchall()
603
    for r in result:
604
        row += 1
605
        column = 1
606
        for data in r :
607
            print "Data" + str(data)
608
            sumdata=sumdata+data
609
            print "Sum Data" + str(sumdata)
610
            worksheet.write(row, column, int(sumdata) if type(sumdata) is float else sumdata, date_format if type(sumdata) is date else default_format)
611
            column += 1
612
 
613
    row = 0
614
    cursor.execute(wnruSql)
615
    result = cursor.fetchall()
616
    for r in result:
617
        row += 1
618
        column = 2
619
        for data in r :
620
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
621
            column += 1        
622
 
623
    row = 0
624
    cursor.execute(wauSql)
625
    result = cursor.fetchall()
626
 
627
    for r in result:
628
        row += 1
629
        column = 3
630
        for data in r :
631
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
632
            column += 1
633
 
634
    row = 0
635
    cursor.execute(wabSql)
636
    result = cursor.fetchall()
637
 
638
    for r in result:
639
        row += 1
640
        column = 4
641
        for data in r :
642
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
643
            column += 1
644
 
645
    row = 0            
646
    cursor.execute(wtoSql)
647
    result = cursor.fetchall()
648
 
649
    for r in result:
650
        row += 1
651
        column = 5
652
        for data in r :
653
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
654
            column += 1
15228 manas 655
 
656
    row = 0        
657
    for x in sorted(weekWiseOrderMap):
658
        row += 1
659
        column = 6
15551 manas 660
        d = str(datetime.fromtimestamp(x/1000.0))
661
        nextday=oneDay*7*1000+x
662
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
663
        dq=WQ_QUERY % (d[:10],dnext[:10])
664
        cursor.execute(dq)
665
        result = cursor.fetchall()
666
        for r in result:
667
            quantity= r[0]
668
            if quantity is None:
669
                quantity=0
16933 manas 670
        print 'Total Sub order quantity Weekly', dateWiseOrderMap.get(x).count,' Flipkart Order', quantity        
15551 manas 671
        worksheet.write(row,column,(weekWiseOrderMap.get(x).count)+quantity)
15228 manas 672
        column+=1
673
    row = 0
674
    for x in sorted(weekWiseOrderMap):
675
        row += 1
676
        column = 7
15551 manas 677
        d = str(datetime.fromtimestamp(x/1000.0))
678
        nextday=oneDay*7*1000+x
679
        dnext = str(datetime.fromtimestamp(nextday/1000.0))
680
        dq=WV_QUERY % (d[:10],dnext[:10])
681
        cursor.execute(dq)
682
        result = cursor.fetchall()
683
        for r in result:
684
            quantity= r[0]
685
            if quantity is None:
686
                quantity=0
687
        worksheet.write(row,column,(weekWiseOrderMap.get(x).value)+float(quantity))
15228 manas 688
        column+=1    
14772 kshitij.so 689
 
690
 
691
def sendmail(email, message, fileName, title):
692
    if email == "":
693
        return
694
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
695
    mailServer.ehlo()
696
    mailServer.starttls()
697
    mailServer.ehlo()
698
 
699
    # Create the container (outer) email message.
700
    msg = MIMEMultipart()
701
    msg['Subject'] = title
702
    msg.preamble = title
703
    html_msg = MIMEText(message, 'html')
704
    msg.attach(html_msg)
705
 
706
    fileMsg = MIMEBase('application', 'vnd.ms-excel')
707
    fileMsg.set_payload(file(TMP_FILE).read())
708
    encoders.encode_base64(fileMsg)
709
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
710
    msg.attach(fileMsg)
14805 kshitij.so 711
 
712
    MAILTO = ['manas.kapoor@saholic.com','rajneesh.arora@saholic.com']
15228 manas 713
    #MAILTO = ['manas.kapoor@saholic.com']
14772 kshitij.so 714
    mailServer.login(SENDER, PASSWORD)
715
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
716
 
15228 manas 717
class __Order:
718
 
719
    def __init__(self, count, value):
720
 
721
        self.count = count
722
        self.value = value
723
 
724
def get_mongo_connection(host='localhost', port=27017):
725
    global con
726
    if con is None:
727
        print "Establishing connection %s host and port %d" %(host,port)
728
        try:
729
            con = pymongo.MongoClient(host, port)
730
        except Exception, e:
731
            print e
732
            return None
733
    return con
734
 
735
def populateOrderMap():
736
    global dateWiseOrderMap
16931 manas 737
    allOrders = get_mongo_connection().Dtr.merchantOrder.find({'createdOnInt':{"$gte":cutOff},'storeId':{"$in":[1,3,4,5,6]}}).sort([('createdOnInt',pymongo.ASCENDING)])
15228 manas 738
    for orders in allOrders:
739
        if orders.get('orderId') not in order_ids:
740
            continue
741
        cdate = ((to_py_date(orders.get('createdOnInt') * 1000)))
742
        millisec = to_java_date(datetime(cdate.year, cdate.month, cdate.day))
743
        if dateWiseOrderMap.has_key(millisec):
744
            orderObj = dateWiseOrderMap.get(millisec)
745
            q, c = getSubOrderQuantity(orders.get('subOrders'))
746
            orderObj.count += q
747
            orderObj.value += c
748
        else:
749
            orderObj = __Order(None, None)
750
            q, c = getSubOrderQuantity(orders.get('subOrders'))
751
            orderObj.count = q
752
            orderObj.value = c 
753
            dateWiseOrderMap[millisec] = orderObj
754
 
15551 manas 755
 
756
 
15228 manas 757
def getSubOrderQuantity(subOrders):
758
    q = 0
759
    c = 0
760
    if subOrders is None:
761
        return q, c
762
    for subOrder in subOrders:
763
        q = q + int(subOrder.get('quantity'))
764
        try:
765
            c = c + float(subOrder.get('amountPaid').encode('utf-8'))
766
        except AttributeError:
767
            c = c + float(subOrder.get('amountPaid'))
768
    return q, c
769
 
770
def populateWeekWiseMap():
771
    global weekCutOff
772
    while(True):
773
        quantity, amount = 0 , 0
774
        for i in xrange(weekCutOff , (weekCutOff * 7)+1):
775
            orderObj = dateWiseOrderMap.get(i*1000)
776
            quantity += orderObj.count
777
            amount += orderObj.value
778
            i = i + oneDay
779
        weekWiseOrderMap[weekCutOff * 1000] = __Order(quantity, amount)
780
        weekCutOff = weekCutOff * 1000 * 7 + oneDay
781
        if weekCutOff >= to_py_date(datetime.now()):
782
            break
783
 
784
def populateWeekWiseMap1():
785
    global weekCutOff
786
    while(True):
787
        if weekCutOff *1000 >= to_java_date(datetime.now()):
788
            break
789
        init = weekCutOff
790
        breakPoint = weekCutOff + (6 * oneDay)
791
        quantity, amount = 0 , 0
792
        while(True):
793
            orderObj = dateWiseOrderMap.get(weekCutOff * 1000)
794
            if orderObj is not None:
795
                quantity += orderObj.count
796
                amount += orderObj.value
797
            weekCutOff = weekCutOff + oneDay
798
            if weekCutOff > breakPoint:
799
                weekWiseOrderMap[init * 1000] = __Order(quantity, amount)
800
                break 
801
 
802
def populateMonthWiseMap():
803
    global monthCutOff
804
    while(True):
805
        quantity, amount = 0 , 0
806
        for i in xrange(monthCutOff , (monthCutOff * 30)+1):
807
            orderObj = dateWiseOrderMap.get(i*1000)
808
            quantity += orderObj.count
809
            amount += orderObj.value
810
            i = i + oneDay
811
        weekWiseOrderMap[monthCutOff * 1000] = __Order(quantity, amount)
812
        monthCutOff = monthCutOff * 1000 * 30 + oneDay
813
        if monthCutOff >= to_py_date(datetime.now()):
814
            break
815
 
816
def populateMonthWiseMap1():
15551 manas 817
    global monthCutOff
15228 manas 818
    while(True):
15551 manas 819
 
820
        print monthCutOff *1000
821
        a=str(to_py_date(monthCutOff*1000))
822
        print 'Now ' + str(to_java_date(datetime.now()))
15228 manas 823
        print "**********************"
15551 manas 824
        if monthCutOff *1000 >= to_java_date(datetime.now()):
15228 manas 825
            print "Breaking outer while"
826
            break
15551 manas 827
        init = monthCutOff
828
        breakPoint = monthCutOff + (monthMap.get(a[5:7]) * oneDay)
829
        print breakPoint
15228 manas 830
        quantity, amount = 0 , 0
831
        while(True):
15551 manas 832
            print to_py_date(monthCutOff*1000)
833
            print "weekCutOff ",monthCutOff
15228 manas 834
            print "breakPoint ",breakPoint
15551 manas 835
            orderObj = dateWiseOrderMap.get(monthCutOff * 1000)
15228 manas 836
            if orderObj is None:
15551 manas 837
                print "None for ", to_py_date(monthCutOff * 1000)
15228 manas 838
            if orderObj is not None:
839
                quantity += orderObj.count
840
                amount += orderObj.value
15551 manas 841
            monthCutOff = monthCutOff + oneDay
842
            counter=0
843
            print counter+1
844
            if monthCutOff > breakPoint:
845
                monthWiseOrderMap[init * 1000] = __Order(quantity, amount)
15228 manas 846
                print "Breaking inner while"
847
                break 
848
 
849
def populateValidOrders():
850
    global order_ids
15244 manas 851
    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 852
    order_ids = list(zip(*allOrders)[0])
15244 manas 853
 
14772 kshitij.so 854
def main():
15228 manas 855
    populateValidOrders()
856
    populateOrderMap()
857
    populateWeekWiseMap1()
15551 manas 858
    populateMonthWiseMap1()
14772 kshitij.so 859
    generateDailyReport()
860
    generateWeeklyReport()
861
    generateMonthlyReport()
15228 manas 862
 
15551 manas 863
 
14772 kshitij.so 864
if __name__ == '__main__':
15551 manas 865
    main()