Subversion Repositories SmartDukaan

Rev

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