From 0c33b0e9d4c4bc6644ffc33f1078aa85547f1305 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 6 Nov 2012 14:37:03 +0530 Subject: [PATCH] gross profit overloaded query --- .../gross_profit/gross_profit.py | 41 +++++++++++-------- .../gross_profit/gross_profit.sql | 10 +++++ 2 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 selling/search_criteria/gross_profit/gross_profit.sql diff --git a/selling/search_criteria/gross_profit/gross_profit.py b/selling/search_criteria/gross_profit/gross_profit.py index ba3425eccc..02a4949cf0 100644 --- a/selling/search_criteria/gross_profit/gross_profit.py +++ b/selling/search_criteria/gross_profit/gross_profit.py @@ -14,22 +14,26 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Add Columns -# ------------ + from __future__ import unicode_literals from webnotes.utils import flt -colnames[colnames.index('Rate*')] = 'Rate' -col_idx['Rate'] = col_idx['Rate*'] -col_idx.pop('Rate*') -colnames[colnames.index('Amount*')] = 'Amount' -col_idx['Amount'] = col_idx['Amount*'] -col_idx.pop('Amount*') - columns = [ - ['Purchase Cost','Currency','150px',''], - ['Gross Profit','Currency','150px',''], - ['Gross Profit (%)','Currrency','150px',''] + ['Delivery Note', 'Link', '120px', 'Delivery Note'], + ['Posting Date', 'Date', '120px', ''], + ['Posting Time', 'Data', '120px', ''], + ['Item Code', 'Link', '120px', 'Item'], + ['Item Name', 'Data', '120px', ''], + ['Description', 'Data', '120px', ''], + ['Warehouse', 'Link', '120px', 'Warehouse'], + ['Project Name', 'Link', '120px', 'Project'], + ['Quantity', 'Currency', '120px', ''], + ['Rate', 'Currency', '120px', ''], + ['Amount', 'Currency', '120px', ''], + #['DN Item Row Id', 'Data', '120px', ''], + ['Purchase Cost', 'Currency', '150px', ''], + ['Gross Profit', 'Currency', '150px', ''], + ['Gross Profit (%)', 'Currrency', '150px', ''] ] for c in columns: @@ -41,7 +45,7 @@ for c in columns: sle = sql(""" select - actual_qty, incoming_rate, voucher_no, item_code, warehouse + actual_qty, incoming_rate, voucher_no, item_code, warehouse, voucher_detail_no from `tabStock Ledger Entry` where @@ -50,7 +54,7 @@ sle = sql(""" order by posting_date desc, posting_time desc, name desc """, as_dict=1) -def get_purchase_cost(dn, item, wh, qty): +def get_purchase_cost(dn, item, wh, qty, dn_item_row_id): from webnotes.utils import flt global sle purchase_cost = 0 @@ -61,13 +65,15 @@ def get_purchase_cost(dn, item, wh, qty): packing_items = [[item, qty]] for d in sle: if d['voucher_no'] == dn and [d['item_code'], flt(abs(d['actual_qty']))] in packing_items: - purchase_cost += flt(d['incoming_rate'])*flt(abs(d['actual_qty'])) + if not d['voucher_detail_no'] or d['voucher_detail_no'] == dn_item_row_id: + purchase_cost += flt(d['incoming_rate'])*flt(abs(d['actual_qty'])) return purchase_cost out, tot_amount, tot_pur_cost = [], 0, 0 for r in res: - purchase_cost = get_purchase_cost(r[col_idx['ID']], r[col_idx['Item Code']], \ - r[col_idx['Warehouse']], r[col_idx['Quantity']]) + purchase_cost = get_purchase_cost(r[col_idx['Delivery Note']], r[col_idx['Item Code']], \ + r[col_idx['Warehouse']], r[col_idx['Quantity']], r[-1]) + r.pop(-1) r.append(purchase_cost) gp = flt(r[col_idx['Amount']]) - flt(purchase_cost) @@ -79,7 +85,6 @@ for r in res: tot_amount += flt(r[col_idx['Amount']]) tot_pur_cost += flt(purchase_cost) - # Add Total Row l_row = ['' for i in range(len(colnames))] l_row[col_idx['Project Name']] = 'TOTALS' diff --git a/selling/search_criteria/gross_profit/gross_profit.sql b/selling/search_criteria/gross_profit/gross_profit.sql new file mode 100644 index 0000000000..f59ea6a03a --- /dev/null +++ b/selling/search_criteria/gross_profit/gross_profit.sql @@ -0,0 +1,10 @@ +SELECT + dn.name, dn.posting_date, dn.posting_time, dn_item.item_code, + dn_item.item_name, dn_item.description, dn_item.warehouse, + dn.project_name, dn_item.qty, dn_item.basic_rate, dn_item.amount, dn_item.name +FROM + `tabDelivery Note Item` dn_item, `tabDelivery Note` dn +WHERE + dn.docstatus = 1 + AND dn_item.parent = dn.name +ORDER BY dn.name DESC \ No newline at end of file