Subversion Repositories SmartDukaan

Rev

Rev 5003 | Rev 5011 | Go to most recent revision | Details | Compare with Previous | 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
5006 anupam.sin 47
    orderStatusFlag = False
4998 anupam.sin 48
    # Prepare SQL query.
5006 anupam.sin 49
    selectSql = "select o.id, o.cod, o.status, p.status from transaction.`order` o join payment.payment p on (o.transaction_id = p.merchantTxnId) where o.id > " + lastSavedOrderId
4998 anupam.sin 50
    conn = getDbConnection()
51
    try:
52
        # prepare a cursor object using cursor() method
53
        cursor = conn.cursor()
54
 
55
        # Fetch.
56
        cursor.execute(selectSql)
57
        result = cursor.fetchall()
58
        for r in result :
59
            orderId = r[0]
60
            isCod = r[1]
5006 anupam.sin 61
            orderStatus = r[2]
62
            paymentStatus = r[3]
4998 anupam.sin 63
            if orderId > int(maxOrderId) :
64
                maxOrderId = str(orderId)
65
            if isCod :
66
                codFlag = True
67
            else :
68
                prepaidFlag = True
5006 anupam.sin 69
            if paymentStatus in [0,1,2,4] :
4998 anupam.sin 70
                paymentOK = True
5006 anupam.sin 71
            if orderStatus > 1 :
72
                orderStatusFlag = True
4998 anupam.sin 73
    except Exception as e:
74
            print "Error: unable to fetch data"
75
            print e
76
 
5006 anupam.sin 77
    return maxOrderId, codFlag, prepaidFlag, paymentOK, orderStatusFlag
4998 anupam.sin 78
 
79
def sendmail(subject):
80
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
81
    mailServer.ehlo()
82
    mailServer.starttls()
83
    mailServer.ehlo()
84
 
85
    # Create the container (outer) email message.
86
    msg = MIMEMultipart()
87
    msg['Subject'] = subject + ' - ' + date.today().isoformat()
88
    msg['From'] = "hadb2@saholic.com"
89
    msg['To'] = 'recipients@saholic.com'
90
    msg.preamble = subject + ' - ' + date.today().isoformat() 
91
 
92
    mailServer.login(SENDER, PASSWORD)
93
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
94
 
95
def main():
96
    try :
97
        f = open(FILENAME, "r")
98
        orderIdinFile = f.read()
99
        f.close()
100
    except Exception as e :
101
        subject = 'File not found'
102
        sendmail(subject)
103
        exit(1)
104
 
5006 anupam.sin 105
    newOrderId, codFlag, prepaidFlag, paymentOK, orderStatusFlag = getOrderTableStatus(orderIdinFile)
4998 anupam.sin 106
    sendmailFlag = False
107
    if not prepaidFlag :
108
        subject = 'No prepaid orders were placed since last check'
109
        sendmailFlag = True
110
    if not codFlag :
111
        subject = 'No COD orders were placed since last check'
112
        sendmailFlag = True
113
    if not paymentOK :
114
        subject = 'There were no successful payments since last check'
115
        sendmailFlag = True
5006 anupam.sin 116
    if not orderStatusFlag :
117
        subject = 'There were no orders placed since last check whose status was other than PAYMENT_PENDING and PAYMENT_FAILED'
118
        sendmailFlag = True
4998 anupam.sin 119
    if newOrderId == orderIdinFile:
120
        subject = 'WARNING : No orders were placed since last check'
121
        sendmailFlag = True
122
    else :
123
        try :
124
            f = open(FILENAME, "w")
125
            f.write(str(newOrderId))
126
            f.close()
127
        except Exception as e :
128
            print e
129
    if sendmailFlag :
130
        sendmail(subject)
131
 
132
if __name__ == '__main__':
133
    main()