Subversion Repositories SmartDukaan

Rev

Rev 15850 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
15849 amit.gupta 1
'''
2
Created on Jul 10, 2015
3
 
4
@author: amit
5
'''
6
from datetime import date
7
from dtr.reports.usersegmentation import sendmail
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
import MySQLdb
13
import datetime
14
import smtplib
15
import traceback
16
import xlwt
17
 
18
'''
19
Created on Mar 10, 2015
20
 
21
@author: amit
22
'''
23
 
24
 
25
 
26
DB_HOST = "localhost"
27
DB_USER = "root"
28
DB_PASSWORD = "shop2020"
29
DB_NAME = "dtr"
30
TMP_FILE = "/tmp/cohortreport.xls"  
31
 
32
# KEY NAMES
33
SENDER = "cnc.center@shop2020.in"
34
PASSWORD = "5h0p2o2o"
35
SUBJECT = "DTR User Segmentation report for " + date.today().isoformat()
36
SMTP_SERVER = "smtp.gmail.com"
37
SMTP_PORT = 587
38
activeuser="""select year(u.created) creationyear,month(u.created) creationmonth, uu.yearly, uu.monthly,count(*) from users u join (select user_id, year(created) yearly, month(created) monthly from (select user_id, created from order_view where status in ('ORDER_CREATED', 'DETAIL_CREATED') union all (select user_id, created from flipkartorders where date(created) >'2015-03-22') order by created desc) as a1 group by a1.user_id, year(a1.created),month(a1.created)) uu on u.id = uu.user_id where u.activated = 1 and (lower(u.referrer) not like 'emp%' or u.utm_campaign is not null) group by year(u.created), month(u.created), uu.yearly, uu.monthly;"""
39
 
40
buyer="""select year(u.created) creationyear, month(u.created) creationmonth, uu.yearly, uu.monthly,count(*) from users u join (select user_id, year(created) yearly,month(created) monthly  from user_urls group by user_id, year(created), month(created)) uu on u.id = uu.user_id where u.activated = 1 and (lower(u.referrer) not like 'emp%' or u.utm_campaign is not null) group by year(u.created), month(u.created),uu.yearly, uu.monthly;"""
41
 
42
activegroup = """select year(created) creationmonth,month(created) creationmonth, a.yearly, a.monthly, count(*) from (select u.usergroup_id, min(u.created) created, uu.yearly,uu.monthly from users u join (select user_id, year(created) yearly,month(created) monthly  from user_urls group by user_id,  year(created),month(created)) uu on u.id = uu.user_id where u.activated = 1 and (lower(u.referrer) not like 'emp%' or u.utm_campaign is not null)  group by u.usergroup_id, uu.yearly, uu.monthly) a group by year(created), month(created), a.yearly, a.monthly;"""
43
 
44
 
45
buyergroup = """select year(created) creationmonth, month(created) creationmonth, a.yearly, a.monthly, count(*) from (select u.usergroup_id, min(u.created) created, uu.yearly,uu.monthly from users u join (select user_id, year(created) yearly, month(created) monthly from order_view where status in ('ORDER_CREATED', 'DETAIL_CREATED') union all select user_id, year(created) yearly, month(created) monthly from flipkartorders where date(created) >'2015-03-22' group by user_id, year(created), month(created)) uu on u.id = uu.user_id where u.activated = 1 and (lower(u.referrer) not like 'emp%' or u.utm_campaign is not null)  group by u.usergroup_id, uu.monthly) a group by year(created), month(created),a.yearly,a.monthly;"""
46
 
47
months = {0:"Jan",1:"Feb",2:"Mar",3:"Apr",4:"May",5:"Jun",6:"Jul",7:"Aug",8:"Sep",9:"Oct",10:"Nov",11:"Dec"}
48
 
49
def getDbConnection():
50
    return MySQLdb.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
51
 
52
boldStyle = xlwt.XFStyle()
53
f = xlwt.Font()
54
f.bold = True
55
boldStyle.font = f
56
 
57
def main():
58
    conn = getDbConnection()
59
    workbook = xlwt.Workbook()
60
    worksheet = workbook.add_sheet("Cohort Analysis")
61
    try:
62
        cursor = conn.cursor()
63
        cursor.execute(activeuser)
64
        result = cursor.fetchall()
65
        nextrow = parseResultToSheet(worksheet,result, "Active Users", 0)
66
        cursor = conn.cursor()
67
        cursor.execute(buyer)
68
        result = cursor.fetchall()
69
        nextrow = parseResultToSheet(worksheet,result, "Buyers", nextrow)
70
        cursor = conn.cursor()
71
        cursor.execute(activegroup)
72
        result = cursor.fetchall()
73
        nextrow = parseResultToSheet(worksheet,result, "Active Groups", nextrow)
74
        cursor = conn.cursor()
75
        cursor.execute(buyergroup)
76
        result = cursor.fetchall()
77
        parseResultToSheet(worksheet,result, "Buyer Groups", nextrow)
78
 
79
        workbook.save("/tmp/cohortreport.xls")
80
        sendmail([], "", "/tmp/cohortreport.xls", "Report for Cohort analysis")
81
    finally:
82
        conn.close()
83
 
84
def parseResultToSheet(sheet, result, title, startrow):
85
    sheet.write(startrow, 0, title, boldStyle)
86
    x=startrow
87
    y=0
88
    creationMap={}
89
    activityMap={}
90
    for row in result:
91
        creationym = ("%s %s")%(row[0], months[row[1]])
92
        activityym =  ("%s %s")%(row[2], months[row[3]])
93
        if creationym not in creationMap:
94
            x += 1
95
            creationMap[creationym] = x
96
            sheet.write(x,0, creationym, boldStyle)
97
        if activityym not in activityMap:
98
            y+=1
99
            activityMap[activityym] = y
100
            sheet.write(startrow,y, activityym,boldStyle)
101
 
102
        sheet.write(creationMap[creationym],activityMap[activityym], row[4])
103
    return x+2
104
 
105
def sendmail(email, message, fileName, title):
106
    if email == "":
107
        return
108
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
109
    mailServer.ehlo()
110
    mailServer.starttls()
111
    mailServer.ehlo()
112
 
113
    # Create the container (outer) email message.
114
    msg = MIMEMultipart()
115
    msg['Subject'] = title
116
    msg.preamble = title
117
    html_msg = MIMEText(message, 'html')
118
    msg.attach(html_msg)
119
 
120
    fileMsg = MIMEBase('application', 'vnd.ms-excel')
121
    fileMsg.set_payload(file(TMP_FILE).read())
122
    encoders.encode_base64(fileMsg)
123
    fileMsg.add_header('Content-Disposition', 'attachment;filename=' + fileName)
124
    msg.attach(fileMsg)
125
    email.append('amit.gupta@shop2020.in')
126
    MAILTO = email 
127
    mailServer.login(SENDER, PASSWORD)
128
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
129
 
130
 
131
if __name__ == '__main__':
132
    main()