Subversion Repositories SmartDukaan

Rev

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