Subversion Repositories SmartDukaan

Rev

Rev 6794 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5944 mandeep.dh 1
#!/usr/bin/python
2
 
3
'''
4
Creates a CSV report about availability and requirements of items.
5
 
6
Created on 11-Nov-2011
7
Updated on 02-Jan-2012
8
 
9
@author: Chandranshu
10
@author: Rajveer
11
'''
5956 mandeep.dh 12
from operator import itemgetter
13
from shop2020.clients.CatalogClient import CatalogClient
14
from shop2020.clients.InventoryClient import InventoryClient
15
from shop2020.clients.TransactionClient import TransactionClient
16
from shop2020.model.v1.catalog.impl.CategoryManager import CategoryManager
17
import operator
5944 mandeep.dh 18
import optparse
19
import xlwt
20
 
21
 
22
if __name__ == '__main__' and __package__ is None:
23
    import sys
24
    import os
25
    sys.path.insert(0, os.getcwd())
26
 
27
categories={}
28
catm = CategoryManager()
29
root_category = catm.getCategory(10000)
30
for child_cat_id in root_category.children_category_ids:
31
    category = catm.getCategory(child_cat_id)
32
    for cat_id in category.children_category_ids:
33
        categories[cat_id] = category.display_name
34
categories[10010] = 'Handsets' 
35
 
36
def main():
37
    parser = optparse.OptionParser()
38
    parser.add_option("-v", "--vendor", dest="vendorId",
39
                      type="int", default=1,
40
                      help="Create report for VENDOR",
41
                      metavar="VENDOR")
42
 
43
    parser.set_usage("%prog [options] <output_file_name>")
44
    (options, args) = parser.parse_args()
45
 
46
    if len(args) != 1:
47
        parser.error("Missing argument: output file name")
48
 
5956 mandeep.dh 49
    inventory_client = InventoryClient().get_client()
5944 mandeep.dh 50
    stocks_for_items_with_pending_orders = inventory_client.getPendingOrdersInventory(options.vendorId)
51
 
52
    txn_client = TransactionClient().get_client()
53
    item_wise_risky_orders = txn_client.getItemWiseRiskyOrdersCount()
54
    #[OrderStatus.SUBMITTED_FOR_PROCESSING, OrderStatus.INVENTORY_LOW, OrderStatus.LOW_INV_PO_RAISED, OrderStatus.LOW_INV_REVERSAL_IN_PROCESS]
8303 amar.kumar 55
    pending_orders = txn_client.getOrdersInBatch([3,5,35,36], 0, 0, 0, 0)
5944 mandeep.dh 56
 
57
 
58
    old_order_ids = []
59
    #f = open('/tmp/orderfile', 'r+')
60
    #for line in f:
61
    #    old_order_ids.append(int(line))
62
    #    print line
63
 
64
    item_quantity_list = {}
65
    for order in pending_orders:
6793 rajveer 66
        if order.warehouse_id not in [1,2,3,4,5,6,9]:
5944 mandeep.dh 67
            continue
68
        if order.id in old_order_ids:
69
            continue
70
        #f.write(str(order.id)+"\n")    
71
        lineitem = order.lineitems[0]
72
        if item_quantity_list.has_key(lineitem.item_id):
73
            item_quantity_list[lineitem.item_id] = item_quantity_list[lineitem.item_id] + lineitem.quantity
74
        else:
75
            item_quantity_list[lineitem.item_id] = lineitem.quantity 
76
 
77
    print item_quantity_list
78
 
79
 
80
 
81
    wbk = xlwt.Workbook()
82
    sheet = wbk.add_sheet('main')
83
 
84
    heading_xf = xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center')
85
    sheet.set_panes_frozen(True)
86
    sheet.set_horz_split_pos(1)
87
    sheet.set_remove_splits(True)
88
 
89
    excel_integer_format = '0'
90
    integer_style = xlwt.XFStyle()
91
    integer_style.num_format_str = excel_integer_format
92
 
93
    sheet.write(0, 0, "Item ID", heading_xf)
94
    sheet.write(0, 1, "Category", heading_xf)
95
    sheet.write(0, 2, "Brand", heading_xf)
96
    sheet.write(0, 3, "Model Name", heading_xf)
97
    sheet.write(0, 4, "Model Number", heading_xf)
98
    sheet.write(0, 5, "Color", heading_xf)
99
    sheet.write(0, 6, "Total Requirement", heading_xf)
100
    sheet.write(0, 7, "Actual Availability", heading_xf)
101
    sheet.write(0, 8, "Computed Availability", heading_xf)
102
    sheet.write(0, 9, "Remarks", heading_xf)
103
    sheet.write(0, 10, "9D2", heading_xf)
104
    sheet.write(0, 11, "901", heading_xf)
105
    sheet.write(0, 12, "9D1", heading_xf)
106
    sheet.write(0, 13, "9C7", heading_xf)
6794 rajveer 107
    sheet.write(0, 14, "9I5", heading_xf)
5944 mandeep.dh 108
    sheet.write(0, 15, "Pending Orders", heading_xf)
109
    sheet.write(0, 16, "Minimum Stock Level", heading_xf)
110
    sheet.write(0, 17, "Risky Orders", heading_xf)
111
    sheet.write(0, 18, "Deficit", heading_xf)
112
 
113
 
114
    xls_fields = []    
115
    i = 1
116
    for stock in stocks_for_items_with_pending_orders:
117
        itemId = stock.itemId
118
        if not item_quantity_list.has_key(itemId):
119
            continue
120
 
5956 mandeep.dh 121
        catalog_client = CatalogClient().get_client()
122
        item = catalog_client.getItem(itemId)
5944 mandeep.dh 123
 
124
        category = categories[item.category]
125
        brand = item.brand
126
        model_name = item.modelName if item.modelName else ""
127
        model_number = item.modelNumber
128
        color = item.color if item.color else ""
129
        #pending_orders = stock.reserved
130
        pending_orders = item_quantity_list.get(itemId)
131
        min_stock_level = stock.minimumStock
132
        total_requirement = pending_orders + stock.minimumStock
133
        available = stock.available
134
        if total_requirement > available:
135
            deficit = total_requirement - available
136
        else:
137
            deficit = 0
138
        risky_orders = item_wise_risky_orders.get(itemId) if item_wise_risky_orders.has_key(itemId) else 0
139
        if risky_orders > available:
140
            bare_minimum_required = risky_orders - available
141
        else:
142
            bare_minimum_required = 0
143
 
144
        xls_field = {}
145
        xls_field['itemId'] = itemId
146
        xls_field['category'] = category
147
        xls_field['brand'] = brand
148
        xls_field['model_name'] = model_name
149
        xls_field['model_number'] = model_number
150
        xls_field['color'] = color
151
        xls_field['total_requirement'] = total_requirement
152
        xls_field['available'] = available
153
        xls_field['pending_orders'] = pending_orders
154
        xls_field['min_stock_level'] = min_stock_level
155
        xls_field['risky_orders'] = risky_orders
156
        xls_field['deficit'] = deficit
157
        xls_fields.append(xls_field)
158
 
159
    sorted_x = sorted(xls_fields, key=operator.itemgetter('category'))
160
 
161
    for xls_field in sorted_x:
162
        lineNo = str(i + 1)
163
        sheet.write(i, 0, xls_field.get('itemId'))
164
        sheet.write(i, 1, xls_field.get('category'))
165
        sheet.write(i, 2, xls_field.get('brand'))
166
        sheet.write(i, 3, xls_field.get('model_name'))
167
        sheet.write(i, 4, xls_field.get('model_number'))
168
        sheet.write(i, 5, xls_field.get('color'))
169
        sheet.write(i, 6, xls_field.get('total_requirement'))
170
        sheet.write(i, 7, xlwt.Formula('K' + lineNo + '+L' + lineNo + '+M' + lineNo + '+N' + lineNo + '+O' + lineNo))
171
        sheet.write(i, 8, xls_field.get('available'))
172
        sheet.write(i, 9, "")
173
        sheet.write(i, 10, 0)
174
        sheet.write(i, 11, 0)
175
        sheet.write(i, 12, 0)
176
        sheet.write(i, 13, 0)
177
        sheet.write(i, 14, 0)
178
        sheet.write(i, 15, xls_field.get('pending_orders'))
179
        sheet.write(i, 16, xls_field.get('min_stock_level'))
180
        sheet.write(i, 17, xls_field.get('risky_orders'))
181
        sheet.write(i, 18, xls_field.get('deficit'))
182
 
183
        i = i + 1
184
 
185
    wbk.save(args[0])
186
 
187
if __name__ == '__main__':
188
    main()