Rev 4063 | Blame | Last modification | View Log | RSS feed
#!/usr/bin/python'''Creates a CSV report about availability and requirements of items.Created on 11-Nov-2011@author: Chandranshu'''import optparseimport csvfrom operator import itemgetterif __name__ == '__main__' and __package__ is None:import sysimport ossys.path.insert(0, os.getcwd())from shop2020.clients.CatalogClient import CatalogClientfrom shop2020.clients.TransactionClient import TransactionClientfrom shop2020.model.v1.catalog.impl.CategoryManager import CategoryManagercategories= {10002 : 'Handset',10003 : 'Handset',10004 : 'Handset',10005 : 'Handset',10010 : 'Tablet',10012 : 'Accessory',10013 : 'Accessory',10014 : 'Accessory',10015 : 'Accessory',10016 : 'Accessory',10017 : 'Accessory',10018 : 'Accessory',10019 : 'Accessory',10020 : 'Accessory',10021 : 'Accessory',10022 : 'Accessory',10023 : 'Accessory',10024 : 'Accessory',10025 : 'Accessory',10026 : 'Accessory',10050 : 'Laptop'}def main():parser = optparse.OptionParser()parser.add_option("-v", "--vendor", dest="vendorId",type="int", default=1,help="Create report for VENDOR",metavar="VENDOR")parser.set_usage("%prog [options] <output_file_name>")(options, args) = parser.parse_args()if len(args) != 1:parser.error("Missing argument: output file name")inventory_client = CatalogClient().get_client()stocks_for_items_with_pending_orders = inventory_client.getPendingOrdersInventory(options.vendorId)txn_client = TransactionClient().get_client()item_wise_risky_orders = txn_client.getItemWiseRiskyOrdersCount()writer = csv.writer(open(args[0], "wb"), delimiter='\t', quoting=csv.QUOTE_MINIMAL)writer.writerow(["Category", "Brand", "Model Name", "Model Number", "Color", "Pending Orders", "Minimum Stock Level", "Total Requirement", "Available", "Deficit", "Risky Orders", "Bare Minimum Reqd"])rowdata = []for stock in stocks_for_items_with_pending_orders:itemId = stock.itemIditem = inventory_client.getItem(itemId)category = categories[item.category]brand = item.brandmodel_name = item.modelName if item.modelName else ""model_number = item.modelNumbercolor = item.color if item.color else ""pending_orders = stock.reservedmin_stock_level = stock.minimumStocktotal_requirement = stock.reserved + stock.minimumStockavailable = stock.availabledeficit = total_requirement - availablerisky_orders = item_wise_risky_orders.get(itemId) if item_wise_risky_orders.has_key(itemId) else 0bare_minimum_required = risky_orders - availablerowdata.append((category, brand, model_name, model_number, color, pending_orders, min_stock_level, total_requirement, available, deficit, risky_orders, bare_minimum_required))sorted_rowdata = sorted(rowdata, key=itemgetter(0,1,2,3,4))writer.writerows(sorted_rowdata)if __name__ == '__main__':main()