Subversion Repositories SmartDukaan

Rev

Rev 15771 | Rev 15773 | 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
15772 amit.gupta 21
import time
626 chandransh 22
 
23
if __name__ == '__main__' and __package__ is None:
24
    import sys
25
    import os
26
    sys.path.insert(0, os.getcwd())
27
 
28
 
9431 rajveer 29
def load_item_data(filename):
15729 amit.gupta 30
    message="Done successfully"
626 chandransh 31
    workbook = xlrd.open_workbook(filename)
32
    sheet = workbook.sheet_by_index(0)
33
    num_rows = sheet.nrows
9431 rajveer 34
    updatedOn = to_java_date(datetime.datetime.now())
35
    cclient = CatalogClient().get_client()
12650 amit.gupta 36
    tcategories = cclient.getAllCategories()
37
    parent_category_ids = [] 
38
    categoryMap = {}
15728 amit.gupta 39
    #0-Delhi 1-Maha 2-Blr 3-Ggn 4-Rajasthan 5-Telangana 6-Gujarat
40
 
12650 amit.gupta 41
    for tcategory in tcategories:
42
        if tcategory.parent_category_id not in parent_category_ids:
43
            parent_category_ids.append(tcategory.parent_category_id)
44
 
45
    for tcategory in tcategories:
46
        if tcategory.id not in parent_category_ids:
47
            categoryMap[tcategory.label] = tcategory.id
9431 rajveer 48
 
15769 amit.gupta 49
    message = ""
626 chandransh 50
    for rownum in range(1, num_rows):
15772 amit.gupta 51
        if (rownum-1)%5==0:
52
            print "Sleeping for 10 sec"
53
            time.sleep(10)
54
            cclient = CatalogClient().get_client()
55
            prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
56
            iclient = InventoryClient().get_client()
57
 
15728 amit.gupta 58
        states = {}
9431 rajveer 59
        try:
15728 amit.gupta 60
            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 61
            if isinstance(model_number, float):
62
                model_number = str(int(model_number))
5440 phani.kuma 63
 
9486 rajveer 64
 
9431 rajveer 65
            item = Item()
66
            item.productGroup = product_group
67
            item.brand = brand
68
            item.modelNumber = model_number
69
            item.modelName = model_name
70
            item.color = color
71
            item.mrp = round(mrp)
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)
15728 amit.gupta 86
            for key,val in states.iteritems():
87
                states[key] = val*100
15771 amit.gupta 88
 
9805 rajveer 89
            for c in (1,2,3,4,5):
90
                try:
91
                    item_id = cclient.addItem(item)
13042 amit.gupta 92
                    print "for row {1} item added\t{0}".format(item_id, rownum)
12650 amit.gupta 93
                    item.id = item_id
15728 amit.gupta 94
                    if len(states)>0:
95
                        for c2 in (1,2,3,4,5):
96
                            try:
97
                                cclient.updateItemStateVat(item_id, states)
98
                                break
99
                            except Exception as e:
100
                                cclient = CatalogClient().get_client()       
12650 amit.gupta 101
                    for c1 in (5,5,5,5,5):
102
                        try:
103
                            prodClient.addItem(item)
15728 amit.gupta 104
                            if len(states) > 0:
105
                                for c3 in (1,2,3,4,5):
106
                                    try:
107
                                        prodClient.updateItemStateVat(item_id, states)
108
                                        break
109
                                    except Exception as e:
110
                                        prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
12650 amit.gupta 111
                            break
112
                        except:
113
                            prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
9805 rajveer 114
                    break
115
                except Exception as e:
116
                    cclient = CatalogClient().get_client()       
1080 chandransh 117
 
9431 rajveer 118
            vip = VendorItemPricing()
119
            vip.itemId = item_id
120
            vip.dealerPrice = round(dp)
121
            vip.mop = round(mop)
122
            vip.nlc = round(nlc)
123
            vip.transferPrice = round(tp)
124
            vip.vendorId = preferred_vendor
9805 rajveer 125
            for c in (1,2,3,4,5):
126
                try:
127
                    iclient.addVendorItemPricing(vip)
128
                    break
129
                except Exception as e:
130
                    iclient = InventoryClient().get_client()
131
 
9486 rajveer 132
        except Exception as e:
133
            message = message + "\t" + str(brand) + "\t" + str(model_name) + "\t" + str(model_number) + "\t" + str(e.message) + "\n"
12654 amit.gupta 134
    print message
11539 amit.gupta 135
    mail("build@shop2020.in", "cafe@nes", ["amit.gupta@shop2020.in", "chandan.kumar@shop2020.in"], "Problem while adding items", message, [], [], [])    
626 chandransh 136
 
4725 phani.kuma 137
 
626 chandransh 138
def main():
139
    parser = optparse.OptionParser()
140
    parser.add_option("-f", "--file", dest="filename",
141
                   default="ItemList.xls", type="string",
142
                   help="Read the item list from FILE",
143
                   metavar="FILE")
144
    (options, args) = parser.parse_args()
145
    if len(args) != 0:
146
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
147
    filename = options.filename
9431 rajveer 148
    load_item_data(filename)
626 chandransh 149
 
150
if __name__ == '__main__':
13041 amit.gupta 151
    main()