Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
4998 anupam.sin 1
'''
2
Created on 10-Apr-2012
3
 
4
@author: anupam
5
'''
6
 
7
#!/usr/bin/python
8
 
9
"""
10
 This Script polls transaction database to see if a new order was placed since last time.
11
"""
12
 
13
import MySQLdb
14
import sys
15
import smtplib
16
 
17
from email import encoders
18
from email.mime.text import MIMEText
19
from email.mime.base import MIMEBase
20
from email.mime.multipart import MIMEMultipart
21
from datetime import date
22
 
23
 
24
DB_HOST = "192.168.190.113"
25
DB_USER = "root"
26
DB_PASSWORD = "shop2020"
27
DB_NAME = "transaction"
28
 
29
FILENAME = "/tmp/lastMaxOrderId"
30
MAILTO = ['anupam.singh@shop2020.in', 'amar.kumar@shop2020.in', 'pankaj.kankar@shop2020.in', 'varun.gupta@shop2020.in']
31
SENDER = "help@shop2020.in"
32
PASSWORD = "5h0p2o2o"
33
SMTP_SERVER = "smtp.gmail.com"
34
SMTP_PORT = 587    
35
 
36
def getDbConnection():
37
    return MySQLdb.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
38
 
39
def closeConnection(conn):
40
    conn.close()
41
 
42
def getOrderTableStatus(lastSavedOrderId):
43
    maxOrderId = lastSavedOrderId
44
    codFlag = False
45
    prepaidFlag = False
46
    paymentOK = False
47
    # Prepare SQL query.
48
    selectSql = "select o.id, o.cod, p.status from transaction.`order` o join payment.payment p on (o.transaction_id = p.merchantTxnId) where o.id > " + lastSavedOrderId
49
    conn = getDbConnection()
50
    try:
51
        # prepare a cursor object using cursor() method
52
        cursor = conn.cursor()
53
 
54
        # Fetch.
55
        cursor.execute(selectSql)
56
        result = cursor.fetchall()
57
        for r in result :
58
            orderId = r[0]
59
            isCod = r[1]
60
            paymentStatus = r[2]
61
            if orderId > int(maxOrderId) :
62
                maxOrderId = str(orderId)
63
            if isCod :
64
                codFlag = True
65
            else :
66
                prepaidFlag = True
67
            if paymentStatus in [1,2] :
68
                paymentOK = True
69
            print maxOrderId, isCod, paymentStatus
70
    except Exception as e:
71
            print "Error: unable to fetch data"
72
            print e
73
 
74
    return maxOrderId, codFlag, prepaidFlag, paymentOK
75
 
76
def sendmail(subject):
77
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
78
    mailServer.ehlo()
79
    mailServer.starttls()
80
    mailServer.ehlo()
81
 
82
    # Create the container (outer) email message.
83
    msg = MIMEMultipart()
84
    msg['Subject'] = subject + ' - ' + date.today().isoformat()
85
    msg['From'] = "hadb2@saholic.com"
86
    msg['To'] = 'recipients@saholic.com'
87
    msg.preamble = subject + ' - ' + date.today().isoformat() 
88
 
89
    mailServer.login(SENDER, PASSWORD)
90
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
91
 
92
def main():
93
    try :
94
        f = open(FILENAME, "r")
95
        orderIdinFile = f.read()
96
        f.close()
97
    except Exception as e :
98
        subject = 'File not found'
99
        sendmail(subject)
100
        exit(1)
101
 
102
    newOrderId, codFlag, prepaidFlag, paymentOK = getOrderTableStatus(orderIdinFile)
103
    sendmailFlag = False
104
    if not prepaidFlag :
105
        subject = 'No prepaid orders were placed since last check'
106
        sendmailFlag = True
107
    if not codFlag :
108
        subject = 'No COD orders were placed since last check'
109
        sendmailFlag = True
110
    if not paymentOK :
111
        subject = 'There were no successful payments since last check'
112
        sendmailFlag = True
113
    if newOrderId == orderIdinFile:
114
        subject = 'WARNING : No orders were placed since last check'
115
        sendmailFlag = True
116
    else :
117
        try :
118
            f = open(FILENAME, "w")
119
            f.write(str(newOrderId))
120
            f.close()
121
        except Exception as e :
122
            print e
123
    if sendmailFlag :
124
        sendmail(subject)
125
 
126
if __name__ == '__main__':
127
    main()