Subversion Repositories SmartDukaan

Rev

Rev 14871 | Rev 15231 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 14871 Rev 15228
Line 15... Line 15...
15
from xlwt.Workbook import Workbook
15
from xlwt.Workbook import Workbook
16
import MySQLdb
16
import MySQLdb
17
import smtplib
17
import smtplib
18
import time
18
import time
19
import xlwt
19
import xlwt
20
 
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
21
 
27
 
22
 
28
 
23
DB_HOST = "localhost"
29
DB_HOST = "localhost"
24
DB_USER = "root"
30
DB_USER = "root"
25
DB_PASSWORD = "shop2020"
31
DB_PASSWORD = "shop2020"
26
DB_NAME = "dtr"
32
DB_NAME = "dtr"
27
TMP_FILE = "User_Activity_Report.xls"  
33
TMP_FILE = "User_Activity_Report.xls"  
28
 
34
 
-
 
35
con = None
-
 
36
dateWiseOrderMap = {}
-
 
37
weekWiseOrderMap = {}
-
 
38
monthWiseOrderMap = {}
-
 
39
orderIds = []
-
 
40
cutOff = 1425839400
-
 
41
#cutOff = 1425234600
-
 
42
oneDay = 86400
-
 
43
monthCutOff = 1425148200
-
 
44
weekCutOff = 1425839400
-
 
45
#weekCutOff = 1425234600
-
 
46
 
-
 
47
DataService.initialize()
-
 
48
 
-
 
49
 
29
# KEY NAMES
50
# KEY NAMES
30
SENDER = "cnc.center@shop2020.in"
51
SENDER = "cnc.center@shop2020.in"
31
PASSWORD = "5h0p2o2o"
52
PASSWORD = "5h0p2o2o"
32
SUBJECT = "User Activity Report for" + date.today().isoformat()
53
SUBJECT = "User Activity Report for" + date.today().isoformat()
33
SMTP_SERVER = "smtp.gmail.com"
54
SMTP_SERVER = "smtp.gmail.com"
Line 205... Line 226...
205
    f.bold = True
226
    f.bold = True
206
    boldStyle.font = f
227
    boldStyle.font = f
207
    column = 0
228
    column = 0
208
    row = 0
229
    row = 0
209
    sumdata=17
230
    sumdata=17
-
 
231
    global z
210
    worksheet.write(row, 0, 'Date', boldStyle)
232
    worksheet.write(row, 0, 'Date', boldStyle)
211
    worksheet.write(row, 1, 'TRU', boldStyle)
233
    worksheet.write(row, 1, 'TRU', boldStyle)
212
    worksheet.write(row, 2, 'NRU', boldStyle)
234
    worksheet.write(row, 2, 'NRU', boldStyle)
213
    worksheet.write(row, 3, 'DAU', boldStyle)
235
    worksheet.write(row, 3, 'DAU', boldStyle)
214
    worksheet.write(row, 4, 'DAB', boldStyle)
236
    worksheet.write(row, 4, 'DAB', boldStyle)
215
    worksheet.write(row, 5, 'DTO', boldStyle)
237
    worksheet.write(row, 5, 'DTO', boldStyle)
216
   
-
 
-
 
238
    worksheet.write(row, 6, 'DSO', boldStyle)   
-
 
239
    worksheet.write(row, 7, 'DTV', boldStyle)
217
    for r in result:
240
    for r in result:
218
        row += 1
241
        row += 1
219
        column = 0
242
        column = 0
220
        for data in r :
243
        for data in r :
221
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
244
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
Line 274... Line 297...
274
        row += 1
297
        row += 1
275
        column = 5
298
        column = 5
276
        for data in r :
299
        for data in r :
277
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
300
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
278
            column += 1
301
            column += 1
-
 
302
    
-
 
303
    row=0
279
 
304
 
-
 
305
    z=0    
-
 
306
    for x in sorted(dateWiseOrderMap):
-
 
307
        row += 1
-
 
308
        column = 6
-
 
309
        worksheet.write(row,column,dateWiseOrderMap.get(x).count)
-
 
310
        column += 1
280
 
311
 
-
 
312
    row =0
-
 
313
    for x in sorted(dateWiseOrderMap):
-
 
314
        row += 1
-
 
315
        column = 7
-
 
316
        worksheet.write(row,column,dateWiseOrderMap.get(x).value)
-
 
317
        column += 1    
-
 
318
        
281
def generateMonthlyReport():
319
def generateMonthlyReport():
282
    monthSql = MONTH_QUERY
320
    monthSql = MONTH_QUERY
283
    mnruSql = MNRU_QUERY
321
    mnruSql = MNRU_QUERY
284
    mauSql = MAU_QUERY
322
    mauSql = MAU_QUERY
285
    mabSql = MAB_QUERY
323
    mabSql = MAB_QUERY
Line 372... Line 410...
372
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
410
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
373
            column += 1
411
            column += 1
374
 
412
 
375
    workbook.save(TMP_FILE)
413
    workbook.save(TMP_FILE)
376
    sendmail(["manas.kapoor@shop2020.in","rajneesh.arora@saholic.com"], "", TMP_FILE, SUBJECT)
414
    sendmail(["manas.kapoor@shop2020.in","rajneesh.arora@saholic.com"], "", TMP_FILE, SUBJECT)
377
 
-
 
-
 
415
    #sendmail(["manas.kapoor@shop2020.in"], "", TMP_FILE, SUBJECT)
378
 
416
 
379
def generateWeeklyReport():
417
def generateWeeklyReport():
380
    weekSql = WEEK_QUERY
418
    weekSql = WEEK_QUERY
381
    wnruSql = WNRU_QUERY
419
    wnruSql = WNRU_QUERY
382
    wauSql = WAU_QUERY
420
    wauSql = WAU_QUERY
Line 403... Line 441...
403
    worksheet.write(row, 1, 'WTRU', boldStyle)
441
    worksheet.write(row, 1, 'WTRU', boldStyle)
404
    worksheet.write(row, 2, 'WNRU', boldStyle)
442
    worksheet.write(row, 2, 'WNRU', boldStyle)
405
    worksheet.write(row, 3, 'WAU', boldStyle)
443
    worksheet.write(row, 3, 'WAU', boldStyle)
406
    worksheet.write(row, 4, 'WAB', boldStyle)
444
    worksheet.write(row, 4, 'WAB', boldStyle)
407
    worksheet.write(row, 5, 'WTO', boldStyle)
445
    worksheet.write(row, 5, 'WTO', boldStyle)
408
   
-
 
-
 
446
    worksheet.write(row, 6, 'WTS', boldStyle)
-
 
447
    worksheet.write(row, 7, 'WTV', boldStyle)
409
   
448
   
410
    for r in result:
449
    for r in result:
411
        row += 1
450
        row += 1
412
        column = 0
451
        column = 0
413
        for data in r :
452
        for data in r :
Line 467... Line 506...
467
        row += 1
506
        row += 1
468
        column = 5
507
        column = 5
469
        for data in r :
508
        for data in r :
470
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
509
            worksheet.write(row, column, int(data) if type(data) is float else data, date_format if type(data) is date else default_format)
471
            column += 1
510
            column += 1
-
 
511
            
-
 
512
    row = 0        
-
 
513
    for x in sorted(weekWiseOrderMap):
-
 
514
        row += 1
-
 
515
        column = 6
-
 
516
        worksheet.write(row,column,weekWiseOrderMap.get(x).count)
-
 
517
        column+=1
-
 
518
    row = 0
-
 
519
    for x in sorted(weekWiseOrderMap):
-
 
520
        row += 1
-
 
521
        column = 7
-
 
522
        worksheet.write(row,column,weekWiseOrderMap.get(x).value)
-
 
523
        column+=1    
472
 
524
 
473
 
525
 
474
def sendmail(email, message, fileName, title):
526
def sendmail(email, message, fileName, title):
475
    if email == "":
527
    if email == "":
476
        return
528
        return
Line 491... Line 543...
491
    encoders.encode_base64(fileMsg)
543
    encoders.encode_base64(fileMsg)
492
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
544
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
493
    msg.attach(fileMsg)
545
    msg.attach(fileMsg)
494
    
546
    
495
    MAILTO = ['manas.kapoor@saholic.com','rajneesh.arora@saholic.com']
547
    MAILTO = ['manas.kapoor@saholic.com','rajneesh.arora@saholic.com']
-
 
548
    #MAILTO = ['manas.kapoor@saholic.com']
496
    mailServer.login(SENDER, PASSWORD)
549
    mailServer.login(SENDER, PASSWORD)
497
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
550
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
498
 
551
 
-
 
552
class __Order:
-
 
553
    
-
 
554
    def __init__(self, count, value):
-
 
555
        
-
 
556
        self.count = count
-
 
557
        self.value = value
-
 
558
 
-
 
559
def get_mongo_connection(host='localhost', port=27017):
-
 
560
    global con
-
 
561
    if con is None:
-
 
562
        print "Establishing connection %s host and port %d" %(host,port)
-
 
563
        try:
-
 
564
            con = pymongo.MongoClient(host, port)
-
 
565
        except Exception, e:
-
 
566
            print e
-
 
567
            return None
-
 
568
    return con
-
 
569
 
-
 
570
def populateOrderMap():
-
 
571
    global dateWiseOrderMap
-
 
572
    allOrders = get_mongo_connection().Dtr.merchantOrder.find({'createdOnInt':{"$gte":cutOff}}).sort([('createdOnInt',pymongo.ASCENDING)])
-
 
573
    for orders in allOrders:
-
 
574
        if orders.get('orderId') not in order_ids:
-
 
575
            continue
-
 
576
        cdate = ((to_py_date(orders.get('createdOnInt') * 1000)))
-
 
577
        millisec = to_java_date(datetime(cdate.year, cdate.month, cdate.day))
-
 
578
        if dateWiseOrderMap.has_key(millisec):
-
 
579
            orderObj = dateWiseOrderMap.get(millisec)
-
 
580
            q, c = getSubOrderQuantity(orders.get('subOrders'))
-
 
581
            orderObj.count += q
-
 
582
            orderObj.value += c
-
 
583
        else:
-
 
584
            orderObj = __Order(None, None)
-
 
585
            q, c = getSubOrderQuantity(orders.get('subOrders'))
-
 
586
            orderObj.count = q
-
 
587
            orderObj.value = c 
-
 
588
            dateWiseOrderMap[millisec] = orderObj
-
 
589
            
-
 
590
def getSubOrderQuantity(subOrders):
-
 
591
    q = 0
-
 
592
    c = 0
-
 
593
    if subOrders is None:
-
 
594
        return q, c
-
 
595
    for subOrder in subOrders:
-
 
596
        q = q + int(subOrder.get('quantity'))
-
 
597
        try:
-
 
598
            c = c + float(subOrder.get('amountPaid').encode('utf-8'))
-
 
599
        except AttributeError:
-
 
600
            c = c + float(subOrder.get('amountPaid'))
-
 
601
    return q, c
-
 
602
 
-
 
603
def populateWeekWiseMap():
-
 
604
    global weekCutOff
-
 
605
    while(True):
-
 
606
        quantity, amount = 0 , 0
-
 
607
        for i in xrange(weekCutOff , (weekCutOff * 7)+1):
-
 
608
            orderObj = dateWiseOrderMap.get(i*1000)
-
 
609
            quantity += orderObj.count
-
 
610
            amount += orderObj.value
-
 
611
            i = i + oneDay
-
 
612
        weekWiseOrderMap[weekCutOff * 1000] = __Order(quantity, amount)
-
 
613
        weekCutOff = weekCutOff * 1000 * 7 + oneDay
-
 
614
        if weekCutOff >= to_py_date(datetime.now()):
-
 
615
            break
-
 
616
        
-
 
617
def populateWeekWiseMap1():
-
 
618
    global weekCutOff
-
 
619
    while(True):
-
 
620
        #print weekCutOff *1000
-
 
621
        #print to_java_date(datetime.now())
-
 
622
        #print "**********************"
-
 
623
        if weekCutOff *1000 >= to_java_date(datetime.now()):
-
 
624
            #print "Breaking outer while"
-
 
625
            break
-
 
626
        init = weekCutOff
-
 
627
        breakPoint = weekCutOff + (6 * oneDay)
-
 
628
        quantity, amount = 0 , 0
-
 
629
        while(True):
-
 
630
            #print to_py_date(weekCutOff*1000)
-
 
631
            #print "weekCutOff ",weekCutOff
-
 
632
            #print "breakPoint ",breakPoint
-
 
633
            orderObj = dateWiseOrderMap.get(weekCutOff * 1000)
-
 
634
            if orderObj is not None:
-
 
635
                quantity += orderObj.count
-
 
636
                amount += orderObj.value
-
 
637
            weekCutOff = weekCutOff + oneDay
-
 
638
            if weekCutOff > breakPoint:
-
 
639
                weekWiseOrderMap[init * 1000] = __Order(quantity, amount)
-
 
640
                #print "Breaking inner while"
-
 
641
                break 
-
 
642
 
-
 
643
def populateMonthWiseMap():
-
 
644
    global monthCutOff
-
 
645
    while(True):
-
 
646
        quantity, amount = 0 , 0
-
 
647
        for i in xrange(monthCutOff , (monthCutOff * 30)+1):
-
 
648
            orderObj = dateWiseOrderMap.get(i*1000)
-
 
649
            quantity += orderObj.count
-
 
650
            amount += orderObj.value
-
 
651
            i = i + oneDay
-
 
652
        weekWiseOrderMap[monthCutOff * 1000] = __Order(quantity, amount)
-
 
653
        monthCutOff = monthCutOff * 1000 * 30 + oneDay
-
 
654
        if monthCutOff >= to_py_date(datetime.now()):
-
 
655
            break
-
 
656
 
-
 
657
def populateMonthWiseMap1():
-
 
658
    global weekCutOff
-
 
659
    while(True):
-
 
660
        print weekCutOff *1000
-
 
661
        print to_java_date(datetime.now())
-
 
662
        print "**********************"
-
 
663
        if weekCutOff *1000 >= to_java_date(datetime.now()):
-
 
664
            print "Breaking outer while"
-
 
665
            break
-
 
666
        init = weekCutOff
-
 
667
        breakPoint = weekCutOff + (6 * oneDay)
-
 
668
        quantity, amount = 0 , 0
-
 
669
        while(True):
-
 
670
            print to_py_date(weekCutOff*1000)
-
 
671
            print "weekCutOff ",weekCutOff
-
 
672
            print "breakPoint ",breakPoint
-
 
673
            orderObj = dateWiseOrderMap.get(weekCutOff * 1000)
-
 
674
            if orderObj is None:
-
 
675
                print "None for ", to_py_date(weekCutOff * 1000)
-
 
676
            if orderObj is not None:
-
 
677
                quantity += orderObj.count
-
 
678
                amount += orderObj.value
-
 
679
            weekCutOff = weekCutOff + oneDay
-
 
680
            if weekCutOff > breakPoint:
-
 
681
                weekWiseOrderMap[init * 1000] = __Order(quantity, amount)
-
 
682
                print "Breaking inner while"
-
 
683
                break 
-
 
684
            
-
 
685
def populateValidOrders():
-
 
686
    global order_ids
-
 
687
    allOrders = session.query(Orders.id).join((Users,Orders.user_id==Users.id)).filter(~(func.lower(Users.referrer)).like('emp%')).filter(Orders.status=='ORDER_CREATED').all()
-
 
688
    order_ids = list(zip(*allOrders)[0])
-
 
689
    
499
def main():
690
def main():
500
    #date = raw_input('Enter a date name: ')
691
    #date = raw_input('Enter a date name: ')
-
 
692
    populateValidOrders()
-
 
693
    populateOrderMap()
-
 
694
    populateWeekWiseMap1()
501
    generateDailyReport()
695
    generateDailyReport()
502
    generateWeeklyReport()
696
    generateWeeklyReport()
503
    generateMonthlyReport()
697
    generateMonthlyReport()
504
 
698
    
505
if __name__ == '__main__':
699
if __name__ == '__main__':
506
    main()
700
    main()
507
 
701
 
508
 
702