Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
626 chandransh 1
#!/usr/bin/python
5440 phani.kuma 2
# coding: ascii
4090 chandransh 3
'''
4
This script is used to load item details in the catalog database.
5
It's now mostly used for Accessories since they come in huge numbers.
1080 chandransh 6
 
4090 chandransh 7
@author: Chandranshu
8
'''
5971 mandeep.dh 9
from elixir import *
9431 rajveer 10
from shop2020.thriftpy.model.v1.catalog.ttypes import Item
5971 mandeep.dh 11
import csv
12
import datetime
9431 rajveer 13
from datetime import timedelta
626 chandransh 14
import optparse
15
import xlrd
9431 rajveer 16
from shop2020.clients.CatalogClient import CatalogClient
17
from shop2020.clients.InventoryClient import InventoryClient
18
from shop2020.thriftpy.model.v1.inventory.ttypes import VendorItemPricing
19
from shop2020.utils.Utils import to_java_date
20
from shop2020.utils.EmailAttachmentSender import mail
626 chandransh 21
 
22
if __name__ == '__main__' and __package__ is None:
23
    import sys
24
    import os
25
    sys.path.insert(0, os.getcwd())
26
 
27
 
9431 rajveer 28
def load_item_data(filename):
626 chandransh 29
    workbook = xlrd.open_workbook(filename)
30
    sheet = workbook.sheet_by_index(0)
31
    num_rows = sheet.nrows
9431 rajveer 32
    updatedOn = to_java_date(datetime.datetime.now())
33
    cclient = CatalogClient().get_client()
12650 amit.gupta 34
    tcategories = cclient.getAllCategories()
35
    parent_category_ids = [] 
36
    categoryMap = {}
15728 amit.gupta 37
    #0-Delhi 1-Maha 2-Blr 3-Ggn 4-Rajasthan 5-Telangana 6-Gujarat
38
 
12650 amit.gupta 39
    for tcategory in tcategories:
40
        if tcategory.parent_category_id not in parent_category_ids:
41
            parent_category_ids.append(tcategory.parent_category_id)
42
 
43
    for tcategory in tcategories:
44
        if tcategory.id not in parent_category_ids:
45
            categoryMap[tcategory.label] = tcategory.id
46
    prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
9431 rajveer 47
    iclient = InventoryClient().get_client()
48
 
626 chandransh 49
    for rownum in range(1, num_rows):
13040 amit.gupta 50
        #print sheet.row_values(rownum)
9431 rajveer 51
        message = ""
15728 amit.gupta 52
        states = {}
9431 rajveer 53
        try:
15728 amit.gupta 54
            product_group, category_name, brand, model_number, model_name, color, mrp, sp, mop, dp, tp, nlc, start_date, preferred_vendor, risky, weight, item_type, states[0], states[3], states[1], states[2]  = sheet.row_values(rownum)[0:21]
9431 rajveer 55
            if isinstance(model_number, float):
56
                model_number = str(int(model_number))
5440 phani.kuma 57
 
9486 rajveer 58
 
9431 rajveer 59
            item = Item()
60
            item.productGroup = product_group
61
            item.brand = brand
62
            item.modelNumber = model_number
63
            item.modelName = model_name
64
            item.color = color
65
            item.mrp = round(mrp)
12650 amit.gupta 66
            #if item is risky
13044 amit.gupta 67
            if categoryMap.has_key(category_name.strip()):
12650 amit.gupta 68
                item.category = categoryMap[category_name.strip()]
69
                item.itemStatus = 8
13044 amit.gupta 70
            else:
71
                print "can't find {0} at row {1}".format(category_name, rownum)
13045 amit.gupta 72
                continue
9431 rajveer 73
            item.sellingPrice = round(sp)
74
            item.startDate = long(to_java_date(datetime.datetime(1899, 12, 30) + timedelta(days=int(start_date))))
13041 amit.gupta 75
            item.preferredVendor = preferred_vendor
12650 amit.gupta 76
            item.risky = int(risky)
9431 rajveer 77
            item.weight = weight
78
            item.updatedOn = updatedOn
79
            item.type = int(item_type)
15728 amit.gupta 80
            for key,val in states.iteritems():
81
                states[key] = val*100
9805 rajveer 82
            for c in (1,2,3,4,5):
83
                try:
84
                    item_id = cclient.addItem(item)
13042 amit.gupta 85
                    print "for row {1} item added\t{0}".format(item_id, rownum)
12650 amit.gupta 86
                    item.id = item_id
15728 amit.gupta 87
                    if len(states)>0:
88
                        for c2 in (1,2,3,4,5):
89
                            try:
90
                                cclient.updateItemStateVat(item_id, states)
91
                                break
92
                            except Exception as e:
93
                                cclient = CatalogClient().get_client()       
12650 amit.gupta 94
                    for c1 in (5,5,5,5,5):
95
                        try:
96
                            prodClient.addItem(item)
15728 amit.gupta 97
                            if len(states) > 0:
98
                                for c3 in (1,2,3,4,5):
99
                                    try:
100
                                        prodClient.updateItemStateVat(item_id, states)
101
                                        break
102
                                    except Exception as e:
103
                                        prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
12650 amit.gupta 104
                            break
105
                        except:
106
                            prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
9805 rajveer 107
                    break
108
                except Exception as e:
109
                    cclient = CatalogClient().get_client()       
1080 chandransh 110
 
9431 rajveer 111
            vip = VendorItemPricing()
112
            vip.itemId = item_id
113
            vip.dealerPrice = round(dp)
114
            vip.mop = round(mop)
115
            vip.nlc = round(nlc)
116
            vip.transferPrice = round(tp)
117
            vip.vendorId = preferred_vendor
9805 rajveer 118
            for c in (1,2,3,4,5):
119
                try:
120
                    iclient.addVendorItemPricing(vip)
121
                    break
122
                except Exception as e:
123
                    iclient = InventoryClient().get_client()
124
 
9486 rajveer 125
        except Exception as e:
126
            message = message + "\t" + str(brand) + "\t" + str(model_name) + "\t" + str(model_number) + "\t" + str(e.message) + "\n"
12654 amit.gupta 127
    print message
11539 amit.gupta 128
    mail("build@shop2020.in", "cafe@nes", ["amit.gupta@shop2020.in", "chandan.kumar@shop2020.in"], "Problem while adding items", message, [], [], [])    
626 chandransh 129
 
4725 phani.kuma 130
 
626 chandransh 131
def main():
132
    parser = optparse.OptionParser()
133
    parser.add_option("-f", "--file", dest="filename",
134
                   default="ItemList.xls", type="string",
135
                   help="Read the item list from FILE",
136
                   metavar="FILE")
137
    (options, args) = parser.parse_args()
138
    if len(args) != 0:
139
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
140
    filename = options.filename
9431 rajveer 141
    load_item_data(filename)
626 chandransh 142
 
143
if __name__ == '__main__':
13041 amit.gupta 144
    main()