Subversion Repositories SmartDukaan

Rev

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

#!/usr/bin/python
# coding: ascii
'''
This script is used to load item details in the catalog database.
It's now mostly used for Accessories since they come in huge numbers.

@author: Chandranshu
'''
from elixir import *
from shop2020.thriftpy.model.v1.catalog.ttypes import Item
import csv
import datetime
from datetime import timedelta
import optparse
import xlrd
from shop2020.clients.CatalogClient import CatalogClient
from shop2020.clients.InventoryClient import InventoryClient
from shop2020.thriftpy.model.v1.inventory.ttypes import VendorItemPricing
from shop2020.utils.Utils import to_java_date
from shop2020.utils.EmailAttachmentSender import mail

if __name__ == '__main__' and __package__ is None:
    import sys
    import os
    sys.path.insert(0, os.getcwd())


def load_item_data(filename):
    workbook = xlrd.open_workbook(filename)
    sheet = workbook.sheet_by_index(0)
    num_rows = sheet.nrows
    updatedOn = to_java_date(datetime.datetime.now())
    cclient = CatalogClient().get_client()
    tcategories = cclient.getAllCategories()
    parent_category_ids = [] 
    categoryMap = {}
    for tcategory in tcategories:
        if tcategory.parent_category_id not in parent_category_ids:
            parent_category_ids.append(tcategory.parent_category_id)
    
    for tcategory in tcategories:
        if tcategory.id not in parent_category_ids:
            categoryMap[tcategory.label] = tcategory.id
    prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
    iclient = InventoryClient().get_client()
        
    for rownum in range(1, num_rows):
        #print sheet.row_values(rownum)
        message = ""
        try:
            product_group, category_name, brand, model_number, model_name, color, mrp, sp, mop, dp, tp, nlc, start_date, preferred_vendor, risky, weight, item_type = sheet.row_values(rownum)[0:17]
            if isinstance(model_number, float):
                model_number = str(int(model_number))
            
            
            item = Item()
            item.productGroup = product_group
            item.brand = brand
            item.modelNumber = model_number
            item.modelName = model_name
            item.color = color
            item.mrp = round(mrp)
            #if item is risky
            if categoryMap.has_key(category_name.strip()):
                item.category = categoryMap[category_name.strip()]
                item.itemStatus = 8
            else:
                print "can't find {0} at row {1}".format(category_name, rownum)
                continue
            item.sellingPrice = round(sp)
            item.startDate = long(to_java_date(datetime.datetime(1899, 12, 30) + timedelta(days=int(start_date))))
            item.preferredVendor = preferred_vendor
            item.risky = int(risky)
            item.weight = weight
            item.updatedOn = updatedOn
            item.type = int(item_type)
            for c in (1,2,3,4,5):
                try:
                    item_id = cclient.addItem(item)
                    print "for row {1} item added\t{0}".format(item_id, rownum)
                    item.id = item_id
                    for c1 in (5,5,5,5,5):
                        try:
                            prodClient.addItem(item)
                            break
                        except:
                            prodClient = CatalogClient("catalog_service_server_host_prod").get_client()
                    break
                except Exception as e:
                    cclient = CatalogClient().get_client()       
            
            vip = VendorItemPricing()
            vip.itemId = item_id
            vip.dealerPrice = round(dp)
            vip.mop = round(mop)
            vip.nlc = round(nlc)
            vip.transferPrice = round(tp)
            vip.vendorId = preferred_vendor
            for c in (1,2,3,4,5):
                try:
                    iclient.addVendorItemPricing(vip)
                    break
                except Exception as e:
                    iclient = InventoryClient().get_client()
                    
        except Exception as e:
            message = message + "\t" + str(brand) + "\t" + str(model_name) + "\t" + str(model_number) + "\t" + str(e.message) + "\n"
    print message
    mail("build@shop2020.in", "cafe@nes", ["amit.gupta@shop2020.in", "chandan.kumar@shop2020.in"], "Problem while adding items", message, [], [], [])    


def main():
    parser = optparse.OptionParser()
    parser.add_option("-f", "--file", dest="filename",
                   default="ItemList.xls", type="string",
                   help="Read the item list from FILE",
                   metavar="FILE")
    (options, args) = parser.parse_args()
    if len(args) != 0:
        parser.error("You've supplied extra arguments. Are you sure you want to run this program?")
    filename = options.filename
    load_item_data(filename)

if __name__ == '__main__':
    main()