Subversion Repositories SmartDukaan

Rev

Rev 6501 | Rev 7594 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5494 anupam.sin 1
'''
2
Created on 25-Jun-2012
3
 
4
@author: anupam
5
'''
6
 
7
#!/usr/bin/python
8
 
9
import json
10
import urllib2, cookielib
11
import MySQLdb
12
import datetime
13
import sys
14
import smtplib
15
 
16
from email import encoders
17
from email.mime.text import MIMEText
18
from email.mime.base import MIMEBase
19
from email.mime.multipart import MIMEMultipart
20
from pyExcelerator import Workbook, Font, XFStyle
21
from datetime import date, timedelta
22
 
23
# Initialize db connection settings.
24
DB_HOST = "localhost"
25
DB_USER = "root"
26
DB_PASSWORD = "shop2020"
27
DB_NAME = "warehouse"
28
 
6550 rajveer 29
MAILTO = ['khushal.bhatia@shop2020.in', 'chaitnaya.vats@shop2020.in', 'rajneesh.arora@shop2020.in', 'chandan.kumar@shop2020.in', 'sandeep.sachdeva@shop2020.in', 'amar.kumar@shop2020.in', 'anupam.singh@shop2020.in']
5494 anupam.sin 30
SENDER = "cnc.center@shop2020.in"
31
PASSWORD = "5h0p2o2o"
32
SUBJECT = "Vendor Fulfilment Report"
33
SMTP_SERVER = "smtp.gmail.com"
34
SMTP_PORT = 587    
35
 
36
TMP_FILE="/tmp/vendor_fulfilment.xls"
37
 
38
def getDbConnection():
39
    return MySQLdb.connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
40
 
41
def closeConnection(conn):
42
    conn.close()
43
 
44
def getProductSaleData(fromDate, toDate):
45
    selectSql = '''SELECT s.name, 
46
                          CONCAT_WS(' ', l.brand, ifnull(l.modelname, ''), l.modelnumber, ifnull(l.color, '')) AS Product, 
47
                          SUM(l.quantity) AS `Qty Ordered`, 
48
                          SUM(l.unfulfilledQuantity) AS `Qty Unfulfilled` 
49
                          FROM lineitem l 
50
                          JOIN purchaseorder p ON l.purchaseOrder_id = p.id 
51
                          JOIN supplier s ON p.supplierId = s.id 
52
                          WHERE l.createdAt BETWEEN \'''' + fromDate + '''\' AND \'''' + toDate + '''\' GROUP BY s.name, l.itemId;'''
53
    conn = getDbConnection()
5506 anupam.sin 54
    #data = {}
5494 anupam.sin 55
    try:
56
        # prepare a cursor object using cursor() method
57
        cursor = conn.cursor()
58
        # Execute the SQL command
59
        # Fetch source id.
60
        cursor.execute(selectSql)
61
        result = cursor.fetchall()
5506 anupam.sin 62
 
5494 anupam.sin 63
    except Exception as e:
5506 anupam.sin 64
        print "Error: unable to fetch data"
65
        print e
5494 anupam.sin 66
 
5506 anupam.sin 67
    return result
5494 anupam.sin 68
 
69
def createXlsReport(wb, data, sheetNumber):
70
    if sheetNumber == 1:
71
        sheetName = "Yesterday"
72
    if sheetNumber == 2:
73
        sheetName = "MTD"
74
    worksheet = wb.add_sheet(sheetName)
75
    boldStyle = XFStyle()
76
    f = Font()
77
    f.bold = True
78
    boldStyle.font = f
79
 
5506 anupam.sin 80
    row = 0
81
 
82
    worksheet.write(row, 0, "VENDOR", boldStyle)
83
    worksheet.write(row, 1, "PRODUCT", boldStyle)
84
    worksheet.write(row, 2, "QTY REQUIRED", boldStyle)
85
    worksheet.write(row, 3, "QTY UNFULFILLED", boldStyle)
86
 
87
    row += 2
88
 
89
    for datum in data:
90
        worksheet.write(row, 0, datum[0])
91
        worksheet.write(row, 1, datum[1])
92
        worksheet.write(row, 2, datum[2])
93
        worksheet.write(row, 3, datum[3])
94
        row += 1
95
 
5494 anupam.sin 96
    wb.save(TMP_FILE)
97
 
98
def sendmail():
99
    mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
100
    mailServer.ehlo()
101
    mailServer.starttls()
102
    mailServer.ehlo()
103
 
104
    # Create the container (outer) email message.
105
    msg = MIMEMultipart()
106
    msg['Subject'] = SUBJECT + ' - ' + date.today().isoformat()
107
    msg['From'] = "PO@saholic.com"
108
    msg['To'] = 'sku-recipients@saholic.com'
109
    msg.preamble = SUBJECT + ' - ' + date.today().isoformat() 
110
 
111
    fileMsg = MIMEBase('application','vnd.ms-excel')
112
    fileMsg.set_payload(file(TMP_FILE).read())
113
    encoders.encode_base64(fileMsg)
114
    fileMsg.add_header('Content-Disposition','attachment;filename=Vendor-Fulfilment' + ' - ' + date.today().isoformat() + '.xls')
115
    msg.attach(fileMsg)
116
 
117
    mailServer.login(SENDER, PASSWORD)
118
    mailServer.sendmail(PASSWORD, MAILTO, msg.as_string())
119
 
120
def main():
121
    workbook = Workbook()
122
 
123
    timeNow = datetime.datetime.now()
124
    toDate = timeNow.strftime('%Y-%m-%d %H:%M:%S')
125
    fromDate = (timeNow - timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')
126
    data = getProductSaleData(fromDate, toDate)
127
    createXlsReport(workbook, data, 1)
5506 anupam.sin 128
 
5494 anupam.sin 129
    fromDate = datetime.datetime(datetime.datetime.now().year, datetime.datetime.now().month, 1, 0, 0, 0, 0)
130
    data = getProductSaleData(str(fromDate), str(toDate))
131
    createXlsReport(workbook, data, 2)
132
 
133
    sendmail()
134
 
135
if __name__ == '__main__':
136
    main()