Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
18363 amit.gupta 1
#!/usr/bin/python
2
# coding: ascii
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.
6
 
7
@author: Chandranshu
8
'''
9
from datetime import timedelta
10
from elixir import *
11
from multiprocessing import Process, Queue
12
from shop2020.clients.CatalogClient import CatalogClient
13
from shop2020.clients.InventoryClient import InventoryClient
14
from shop2020.thriftpy.model.v1.catalog.ttypes import Item
15
from shop2020.thriftpy.model.v1.inventory.ttypes import VendorItemPricing
16
from shop2020.utils.EmailAttachmentSender import mail
17
from shop2020.utils.Utils import to_java_date
18
import csv
19
import datetime
20
import optparse
21
import time
22
import traceback
23
import xlrd
24
 
25
if __name__ == '__main__' and __package__ is None:
26
    import sys
27
    import os
28
    sys.path.insert(0, os.getcwd())
29
 
30
 
31
def load_item_data(filename, lineNumber=None):
32
    message="Done successfully"
33
    workbook = xlrd.open_workbook(filename)
34
    sheet = workbook.sheet_by_index(0)
35
    num_rows = sheet.nrows
36
    updatedOn = to_java_date(datetime.datetime.now())
37
    cclient = CatalogClient().get_client()
38
    prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
39
    iclient = InventoryClient().get_client()
40
 
41
    tcategories = cclient.getAllCategories()
42
    parent_category_ids = [] 
43
    categoryMap = {}
44
    #0-Delhi 1-Maha 2-Blr 3-Ggn 4-Rajasthan 5-Telangana 6-Gujarat
45
 
46
    for tcategory in tcategories:
47
        if tcategory.parent_category_id not in parent_category_ids:
48
            parent_category_ids.append(tcategory.parent_category_id)
49
 
50
    for tcategory in tcategories:
51
        if tcategory.id not in parent_category_ids:
52
            categoryMap[tcategory.label] = tcategory.id
53
 
54
    message = ""
55
 
56
    if lineNumber is None:
57
        start = 1
58
        end = num_rows
59
    else:
18365 amit.gupta 60
        lineNumber = int(lineNumber)
18363 amit.gupta 61
        start = lineNumber
62
        end = min(lineNumber + 3, num_rows)    
63
    for rownum in range(start, end):
64
        states = {}
65
        try:
66
            itemID, 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:22]
67
            if isinstance(model_number, float):
68
                model_number = str(int(model_number))
69
 
70
 
71
            item = Item()
72
            item.productGroup = product_group
73
            item.brand = brand
74
            item.modelNumber = model_number
75
            item.modelName = model_name
76
            item.color = color
77
            try:
78
                item.mrp = round(mrp)
79
            except:
80
                pass
81
            #if item is risky
82
            if categoryMap.has_key(category_name.strip()):
83
                item.category = categoryMap[category_name.strip()]
84
                item.itemStatus = 8
85
            else:
86
                print "can't find {0} at row {1}".format(category_name, rownum)
87
                continue
88
            item.sellingPrice = round(sp)
89
            item.startDate = long(to_java_date(datetime.datetime(1899, 12, 30) + timedelta(days=int(start_date))))
90
            item.preferredVendor = preferred_vendor
91
            item.risky = int(risky)
92
            item.weight = weight
93
            item.updatedOn = updatedOn
94
            item.type = int(item_type)
95
            for key in states.keys():
96
                val = states[key]
97
                if val !='':
98
                    states[key] = val*100
99
                else:
100
                    del states[key]
101
 
102
            for c in (1,2,3,4,5):
103
                print "newitemid:", item.id
104
                try:
105
                    item_id = cclient.addItem(item)
106
                    print "for row {1} item added\t{0}".format(item_id, rownum)
107
                    print "newitemid:", item_id, "olditemid:", itemID
108
                    item.id = item_id
109
                    if len(states)>0:
110
                        for c2 in (1,2,3,4,5):
111
                            try:
112
                                cclient.updateItemStateVat(item_id, states)
113
                                print "break 0"
114
                                break
115
                            except Exception as e:
116
                                cclient = CatalogClient().get_client()       
117
                    for c1 in (5,5,5,5,5):
118
                        try:
119
                            prodClient.addItem(item)
120
                            if len(states) > 0:
121
                                for c3 in (1,2,3,4,5):
122
                                    try:
123
                                        prodClient.updateItemStateVat(item_id, states)
124
                                        print "break 1"
125
                                        break
126
                                    except Exception as e:
127
                                        prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
128
                            print "break 2"
129
                            break
130
                        except:
131
                            prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
132
                    print "break 3"    
133
                    break
134
                except Exception as e:
135
                    cclient = CatalogClient().get_client()       
136
            vip = VendorItemPricing()
137
            vip.itemId = item_id
138
            vip.dealerPrice = round(dp)
139
            vip.mop = round(mop)
140
            vip.nlc = round(nlc)
141
            vip.transferPrice = round(tp)
142
            vip.vendorId = preferred_vendor
143
            for c in (1,2,3,4,5):
144
                try:
145
                    iclient.addVendorItemPricing(vip)
146
                    break
147
                except Exception as e:
148
                    iclient = InventoryClient().get_client()
149
 
150
        except:
151
            traceback.print_exc()
152
            message = message + "\t" + str(brand) + "\t" + str(model_name) + "\t" + str(model_number) + "\t" + "\n"
153
    print message
154
    mail("build@shop2020.in", "cafe@nes", ["amit.gupta@shop2020.in", "chandan.kumar@shop2020.in"], "Problem while adding items", message, [], [], [])    
155
    print "Successfully updated the item list information."
156
 
157
 
158
def main():
159
    parser = optparse.OptionParser()
160
    parser.add_option("-f", "--file", dest="filename", 
161
                   default="ItemList.xls", type="string",
162
                   help="Read the item list from FILE",
163
                   metavar="FILE")
164
    parser.add_option("-l", "--line", dest="linenumber", 
165
                   default="ItemList.xls", type="string",
166
                   help="Line to start from",
167
                   metavar="FILE")
168
    (options, args) = parser.parse_args()
169
    if len(args) != 0:
170
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
171
    filename = options.filename
172
    linenumber = options.linenumber
173
    load_item_data(filename, linenumber)
174
 
175
if __name__ == '__main__':
176
    main()