Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
5414 phani.kuma 1
#!/usr/bin/python
2
# coding: ascii
3
'''
4
@author: Phani Kumar
5
'''
6
import optparse
7
import csv
8
import xlrd
9
import datetime
10
 
11
if __name__ == '__main__' and __package__ is None:
12
    import sys
13
    import os
14
    sys.path.insert(0, os.getcwd())
15
 
16
from shop2020.thriftpy.model.v1.catalog.ttypes import status
17
from shop2020.model.v1.catalog.impl import DataService
18
from shop2020.model.v1.catalog.impl.DataService import Item, Vendor, VendorItemPricing, VendorItemMapping
19
from elixir import *
20
from shop2020.utils.EmailAttachmentSender import get_attachment_part, mail
21
 
22
from_user = 'cnc.center@shop2020.in'
23
from_pwd = '5h0p2o2o'
24
to = ["chaitnaya.vats@shop2020.in", "ashutosh.saxena@shop2020.in", "asghar.bilgrami@shop2020.in", "pankaj.kankar@shop2020.in"]
25
 
26
def load_item_data(filename, vendorId):
27
    DataService.initialize('catalog')
28
 
29
    vendor = Vendor.get_by(id=vendorId)
30
    if vendor is None:
31
        raise Exception("No vendor found for the id: " + str(vendorId))
32
 
33
    workbook = xlrd.open_workbook(filename)
34
    sheet = workbook.sheet_by_index(0)
35
    num_rows = sheet.nrows
36
    new_items = []
37
    phased_out_items = []
38
    updated_items = []
39
    unchanged_items = []
40
 
41
    for rownum in range(1, num_rows):
42
        print sheet.row_values(rownum)
43
 
44
        product_group, brand, model_number, model_name, color,\
45
        dp, mrp, mop, xfer_price = sheet.row_values(rownum)[0:9]
46
 
47
        if isinstance(model_number, float):
48
            model_number = str(int(model_number))
49
 
50
        item = None
51
        vendor_item_pricing = None
52
 
53
        key = product_group.strip().lower() + '|' + brand.strip().lower() + '|' + model_number.strip().lower() + '|' + color.strip().lower()
54
        vendor_item_mapping = VendorItemMapping.get_by(vendor=vendor, item_key=key)
55
        if vendor_item_mapping:
56
            item = vendor_item_mapping.item
57
            if item is not None and item.status != status.PHASED_OUT:
58
                vendor_item_pricing = VendorItemPricing.get_by(vendor=vendor, item=item)
59
                if vendor_item_pricing is None:
60
                    updated_items.append(sheet.row_values(rownum)[0:9] + [None, item.mrp, None, None, item.sellingPrice])
61
                elif item.mrp != mrp or vendor_item_pricing.dealerPrice != dp or vendor_item_pricing.transfer_price != xfer_price or vendor_item_pricing.mop != mop:
62
                    updated_items.append(sheet.row_values(rownum)[0:9] + [vendor_item_pricing.dealerPrice, item.mrp, vendor_item_pricing.mop, vendor_item_pricing.transfer_price, item.sellingPrice])
63
                else:
64
                    unchanged_items.append(rownum)
65
            else:
66
                phased_out_items.append(rownum)
67
        else:
68
            new_items.append(rownum)
69
 
70
    write_report("/tmp/new_items.csv", new_items, sheet, False)
71
    write_report("/tmp/phased_out_items.csv", phased_out_items, sheet, False)
72
    write_report("/tmp/updated_items.csv", updated_items, sheet, True)
73
    write_report("/tmp/unchanged_items.csv", unchanged_items, sheet, False)
74
 
75
    attachment_part = [get_attachment_part("/tmp/new_items.csv"), get_attachment_part("/tmp/phased_out_items.csv"), get_attachment_part("/tmp/updated_items.csv"), get_attachment_part("/tmp/unchanged_items.csv")]
76
    mail(from_user, from_pwd, to, "Comparison report for " + os.path.basename(filename), "This is a system generated email.Please don't reply to it.", attachment_part)
77
 
78
def write_report(filename, items, sheet, is_item):
79
    '''
80
    Iterates through the items list and writes all the values to the specified
81
    filename in the CSV format. 'is_item' indicates whether the list consists
82
    of row numbers or complete row data.
83
    '''
84
    items_writer = csv.writer(open(filename, "wb"), delimiter=',', quoting=csv.QUOTE_ALL)
85
    items_writer.writerow(sheet.row_values(0)[0:9] + ['Old DP', 'Old MRP', 'Old FBP', 'Old TP', 'SP'])
86
    if is_item:
87
        #The list contains the complete rows.
88
        for item in items:
89
            print item
90
            items_writer.writerow([str(value) for value in item])
91
    else:
92
        #The list only has row numbers. We've to fetch the data ourselves.
93
        for i in items:
94
            print sheet.row_values(i)
95
            items_writer.writerow([str(value) for value in sheet.row_values(i)[0:9]])
96
 
97
def main():
98
    parser = optparse.OptionParser()
99
    parser.add_option("-f", "--file", dest="filename",
100
                   default="ItemList.xls", type="string",
101
                   help="Read the item list from FILE",
102
                   metavar="FILE")
103
    parser.add_option("-v", "--vendor", dest="vendor",
104
                      type="int",
105
                      help="Update the pricing information for VENDOR",
106
                      metavar="VENDOR")
107
    parser.set_defaults(vendor=1)
108
    (options, args) = parser.parse_args()
109
    if len(args) != 0:
110
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
111
    filename = options.filename
112
    load_item_data(filename, options.vendor)
113
 
114
if __name__ == '__main__':
115
    main()