Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13884 kshitij.so 1
import pymongo
2
import xlwt
3
from datetime import datetime
4
from email.mime.multipart import MIMEMultipart
5
import email.encoders
6
import smtplib
7
 
8
con = None
9
 
14416 kshitij.so 10
statusMap = {1:'Active',2:'EOL',3:'In Process',4:'Exclusive'}
11
 
13884 kshitij.so 12
class __SkuInfo:
13
 
14
    def __init__(self, _id, skuBundleId, category_id, mrp, available_price, source_id, rank, maxNlc, minNlc, schemeAmount, minDiscount, \
16020 kshitij.so 15
                 maxDiscount, discountType, dp, nlcPoints, bestSellerPoints, totalPoints,in_stock,maxprice,showDeal, catalogBestSellerPoints, prepaidDeal):
13884 kshitij.so 16
        self._id = _id
17
        self.skuBundleId = skuBundleId
18
        self.category_id = category_id
19
        self.mrp = mrp
20
        self.available_price = available_price
21
        self.source_id = source_id
22
        self.rank = rank
23
        self.maxNlc = maxNlc
24
        self.minNlc = minNlc
25
        self.schemeAmount = schemeAmount
26
        self.minDiscount = minDiscount
27
        self.maxDiscount = maxDiscount
28
        self.discountType = discountType
29
        self.dp = dp
30
        self.nlcPoints = nlcPoints
31
        self.bestSellerPoints = bestSellerPoints
32
        self.totalPoints = totalPoints
33
        self.in_stock = in_stock
13906 kshitij.so 34
        self.maxprice = maxprice
14115 kshitij.so 35
        self.showDeal = showDeal
16020 kshitij.so 36
        self.catalogBestSellerPoints = catalogBestSellerPoints
37
        self.prepaidDeal = prepaidDeal  
13884 kshitij.so 38
 
39
def get_mongo_connection(host='localhost', port=27017):
40
    global con
41
    if con is None:
42
        print "Establishing connection %s host and port %d" %(host,port)
43
        try:
44
            con = pymongo.MongoClient(host, port)
45
        except Exception, e:
46
            print e
47
            return None
48
    return con
49
 
13904 kshitij.so 50
def writeSheet():
51
    p = []
13884 kshitij.so 52
    data = get_mongo_connection().Catalog.Deals.find().sort([('totalPoints',pymongo.DESCENDING)])
53
    print data.count()
54
    for x in data:
16027 kshitij.so 55
        if x['source_id'] == 5 and x['rank'] ==0:
56
            continue
13884 kshitij.so 57
        s_info = __SkuInfo(x['_id'], x['skuBundleId'], x['category_id'],x['mrp'],x['available_price'],x['source_id'],x['rank'],x['maxNlc'], \
58
                           x['minNlc'], x['schemeAmount'],x['minDiscount'],x['maxDiscount'],x['discountType'],x['dp'],x['nlcPoints'],x['bestSellerPoints'], \
16020 kshitij.so 59
                           x['totalPoints'],x['in_stock'],x['maxprice'],x['showDeal'],x['catalogBestSellerPoints'],x['prepaidDeal'])
13884 kshitij.so 60
        p.append(s_info)
13904 kshitij.so 61
 
13884 kshitij.so 62
    wbk = xlwt.Workbook()
63
    sheet = wbk.add_sheet('Deals')
64
    xstr = lambda s: s or ""
65
    heading_xf = xlwt.easyxf('font: bold on; align: wrap off, vert centre, horiz center')
66
 
67
    excel_integer_format = '0'
68
    integer_style = xlwt.XFStyle()
69
    integer_style.num_format_str = excel_integer_format
70
 
71
    sheet.write(0, 0, "Item ID", heading_xf)
72
    sheet.write(0, 1, "Catalog Item Id", heading_xf)
73
    sheet.write(0, 2, "Category", heading_xf)
74
    sheet.write(0, 3, "Brand", heading_xf)
75
    sheet.write(0, 4, "Product Name", heading_xf)
76
    sheet.write(0, 5, "Item Status", heading_xf)
77
    sheet.write(0, 6, "Stock Status", heading_xf)
78
    sheet.write(0, 7, "MarketPlace", heading_xf)
79
    sheet.write(0, 8, "MarketPlace Identifier", heading_xf)
80
    sheet.write(0, 9, "MarketPlace Secondary Identifier", heading_xf)
81
    sheet.write(0, 10, "Product Name (Marketplace)", heading_xf)
82
    sheet.write(0, 11, "Url", heading_xf)
83
    sheet.write(0, 12, "Price", heading_xf)
14812 kshitij.so 84
    sheet.write(0, 13, "Mrp", heading_xf)
85
    sheet.write(0, 14, "DP", heading_xf)
86
    sheet.write(0, 15, "Scheme Amount", heading_xf)
87
    sheet.write(0, 16, "Discount Type", heading_xf)
88
    sheet.write(0, 17, "Min Discount", heading_xf)
89
    sheet.write(0, 18, "Max Discount", heading_xf)
90
    sheet.write(0, 19, "Max Nlc", heading_xf)
91
    sheet.write(0, 20, "Min Nlc", heading_xf)
92
    sheet.write(0, 21, "Max Price", heading_xf)
93
    sheet.write(0, 22, "Rank", heading_xf)
94
    sheet.write(0, 23, "Nlc Points", heading_xf)
95
    sheet.write(0, 24, "Best Seller Points", heading_xf)
96
    sheet.write(0, 25, "Catalog Best Seller Points", heading_xf)
97
    sheet.write(0, 26, "Total Points", heading_xf)
16020 kshitij.so 98
    sheet.write(0, 27, "COD Deal", heading_xf)
99
    sheet.write(0, 28, "Prepaid Deal", heading_xf)
13884 kshitij.so 100
 
101
    it = 1
102
    for x in p:
103
        y = list(get_mongo_connection().Catalog.MasterData.find({'_id':x._id}))
104
        sheet.write(it, 0, x._id)
105
        sheet.write(it, 1, x.skuBundleId)
106
        if x.category_id == 3:
107
            category = 'Mobiles'
108
        else:
109
            category = 'Tablets'
110
        sheet.write(it, 2, category)
111
        sheet.write(it, 3, y[0]['brand'])
112
        sheet.write(it, 4, y[0]['product_name'])
14416 kshitij.so 113
        sheet.write(it, 5, statusMap.get(y[0]['status']))
13884 kshitij.so 114
        if y[0]['in_stock'] ==1:
115
            sheet.write(it, 6, 'In Stock')
116
        else:
117
            sheet.write(it, 6, 'Out Of Stock')
118
        sheet.write(it, 7, y[0]['source'])
119
        sheet.write(it, 8, y[0]['identifier'])
120
        sheet.write(it, 9, y[0]['secondaryIdentifier'])
121
        sheet.write(it, 10, y[0]['source_product_name'])
14860 kshitij.so 122
        sheet.write(it, 11, y[0]['marketPlaceUrl'])
13884 kshitij.so 123
        sheet.write(it, 12, y[0]['available_price'])
14812 kshitij.so 124
        sheet.write(it, 13, x.mrp)
125
        sheet.write(it, 14, x.dp)
126
        sheet.write(it, 15, x.schemeAmount)
127
        sheet.write(it, 16, x.discountType)
128
        sheet.write(it, 17, x.minDiscount)
129
        sheet.write(it, 18, x.maxDiscount)
130
        sheet.write(it, 19, x.maxNlc)
131
        sheet.write(it, 20, x.minNlc)
132
        sheet.write(it, 21, x.maxprice)
133
        sheet.write(it, 22, x.rank)
134
        sheet.write(it, 23, x.nlcPoints)
135
        sheet.write(it, 24, x.bestSellerPoints)
136
        sheet.write(it, 25, x.catalogBestSellerPoints)
137
        sheet.write(it, 26, x.totalPoints)
138
        sheet.write(it, 27, x.showDeal)
16020 kshitij.so 139
        sheet.write(it, 28, x.prepaidDeal)
13884 kshitij.so 140
        it+=1
141
    filename = "/tmp/deal-data"+str(datetime.now())+".xls" 
142
    wbk.save(filename)
143
    smtpServer = smtplib.SMTP('localhost')
13909 kshitij.so 144
    #smtpServer.set_debuglevel(1)
13884 kshitij.so 145
    sender = 'dtr@shop2020.in'
13896 kshitij.so 146
    #recipients = ['kshitij.sood@saholic.com']
13884 kshitij.so 147
    msg = MIMEMultipart()
148
    msg['Subject'] = "DTR Deals data" + ' - ' + str(datetime.now())
149
    msg['From'] = sender
13896 kshitij.so 150
    recipients = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com','manoj.kumar@saholic.com']
13884 kshitij.so 151
    msg['To'] = ",".join(recipients)
152
    fileMsg = email.mime.base.MIMEBase('application','vnd.ms-excel')
153
    fileMsg.set_payload(file(filename).read())
154
    email.encoders.encode_base64(fileMsg)
13898 kshitij.so 155
    fileMsg.add_header('Content-Disposition','attachment;filename=Deal_Sheet_Dtr.xls')
13884 kshitij.so 156
    msg.attach(fileMsg)
157
    try:
158
        smtpServer.sendmail(sender, recipients, msg.as_string())
159
        print "Successfully sent email"
160
    except:
161
        print "Error: unable to send email."
162
 
13893 kshitij.so 163
def sendMail():
13884 kshitij.so 164
    writeSheet()
165
 
13893 kshitij.so 166
def main():
167
    sendMail()
168
 
13884 kshitij.so 169
if __name__=='__main__':
170
    main()