Subversion Repositories SmartDukaan

Rev

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 optparse
import csv
from operator import itemgetter

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

from shop2020.clients.CatalogClient import CatalogClient
from shop2020.clients.TransactionClient import TransactionClient
from shop2020.model.v1.catalog.impl.CategoryManager import CategoryManager

categories= {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.itemId
        item = inventory_client.getItem(itemId)
        
        category = categories[item.category]
        brand = item.brand
        model_name = item.modelName if item.modelName else ""
        model_number = item.modelNumber
        color = item.color if item.color else ""
        pending_orders = stock.reserved
        min_stock_level = stock.minimumStock
        total_requirement = stock.reserved + stock.minimumStock
        available = stock.available
        deficit = total_requirement - available
        risky_orders = item_wise_risky_orders.get(itemId) if item_wise_risky_orders.has_key(itemId) else 0
        bare_minimum_required = risky_orders - available
        
        rowdata.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()