From 1dfcc7557ae44cf669b1d1829ba1ae7c575f6651 Mon Sep 17 00:00:00 2001 From: Akhilesh Darjee Date: Tue, 15 Oct 2013 13:54:39 +0530 Subject: [PATCH] [fix] fetch difference account and cost center on selecting item in stock entry --- .../doctype/sales_invoice/sales_invoice.js | 23 ++--- stock/doctype/stock_entry/stock_entry.js | 86 +++++++++++++------ stock/doctype/stock_entry/stock_entry.py | 6 +- 3 files changed, 71 insertions(+), 44 deletions(-) diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js index 46e336f029..4d4f4b7ee0 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -349,7 +349,7 @@ if (sys_defaults.auto_accounting_for_stock) { // warehouse in detail table //---------------------------- -cur_frm.fields_dict['entries'].grid.get_field('warehouse').get_query= function(doc, cdt, cdn) { +cur_frm.fields_dict['entries'].grid.get_field('warehouse').get_query = function(doc, cdt, cdn) { var d = locals[cdt][cdn]; return{ filters:[ @@ -370,36 +370,29 @@ cur_frm.fields_dict["entries"].grid.get_field("cost_center").get_query = functio } } -cur_frm.cscript.income_account = function(doc, cdt, cdn){ +cur_frm.cscript.income_account = function(doc, cdt, cdn) { cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "income_account"); } -cur_frm.cscript.expense_account = function(doc, cdt, cdn){ +cur_frm.cscript.expense_account = function(doc, cdt, cdn) { cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "expense_account"); } +cur_frm.cscript.cost_center = function(doc, cdt, cdn) { + cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "cost_center"); +} + cur_frm.cscript.copy_account_in_all_row = function(doc, cdt, cdn, fieldname) { var d = locals[cdt][cdn]; if(d[fieldname]){ var cl = getchildren('Sales Invoice Item', doc.name, cur_frm.cscript.fname, doc.doctype); - for(var i = 0; i < cl.length; i++){ + for(var i = 0; i < cl.length; i++) { if(!cl[i][fieldname]) cl[i][fieldname] = d[fieldname]; } } refresh_field(cur_frm.cscript.fname); } -cur_frm.cscript.cost_center = function(doc, cdt, cdn){ - var d = locals[cdt][cdn]; - if(d.cost_center){ - var cl = getchildren('Sales Invoice Item', doc.name, cur_frm.cscript.fname, doc.doctype); - for(var i = 0; i < cl.length; i++){ - if(!cl[i].cost_center) cl[i].cost_center = d.cost_center; - } - } - refresh_field(cur_frm.cscript.fname); -} - cur_frm.cscript.on_submit = function(doc, cdt, cdn) { if(cint(wn.boot.notification_settings.sales_invoice)) { cur_frm.email_doc(wn.boot.notification_settings.sales_invoice_message); diff --git a/stock/doctype/stock_entry/stock_entry.js b/stock/doctype/stock_entry/stock_entry.js index 4695fdb22c..26ad62925a 100644 --- a/stock/doctype/stock_entry/stock_entry.js +++ b/stock/doctype/stock_entry/stock_entry.js @@ -1,6 +1,9 @@ // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. // License: GNU General Public License v3. See license.txt +cur_frm.cscript.tname = "Stock Entry Detail"; +cur_frm.cscript.fname = "mtn_details"; + wn.require("public/app/js/controllers/stock_controller.js"); wn.provide("erpnext.stock"); @@ -112,12 +115,6 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ } }, - entries_add: function(doc, cdt, cdn) { - var row = wn.model.get_doc(cdt, cdn); - this.frm.script_manager.copy_from_first_row("mtn_details", row, - ["expense_account", "cost_center"]); - }, - clean_up: function() { // Clear Production Order record from locals, because it is updated via Stock Entry if(this.frm.doc.production_order && @@ -224,6 +221,8 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ mtn_details_add: function(doc, cdt, cdn) { var row = wn.model.get_doc(cdt, cdn); + this.frm.script_manager.copy_from_first_row("mtn_details", row, + ["expense_account", "cost_center"]); if(!row.s_warehouse) row.s_warehouse = this.frm.doc.from_warehouse; if(!row.t_warehouse) row.t_warehouse = this.frm.doc.to_warehouse; @@ -260,24 +259,29 @@ cur_frm.cscript.toggle_related_fields = function(doc) { } } -cur_frm.cscript.delivery_note_no = function(doc,cdt,cdn){ - if(doc.delivery_note_no) return get_server_fields('get_cust_values','','',doc,cdt,cdn,1); +cur_frm.cscript.delivery_note_no = function(doc, cdt, cdn) { + if(doc.delivery_note_no) + return get_server_fields('get_cust_values', '', '', doc, cdt, cdn, 1); } -cur_frm.cscript.sales_invoice_no = function(doc,cdt,cdn){ - if(doc.sales_invoice_no) return get_server_fields('get_cust_values','','',doc,cdt,cdn,1); +cur_frm.cscript.sales_invoice_no = function(doc, cdt, cdn) { + if(doc.sales_invoice_no) + return get_server_fields('get_cust_values', '', '', doc, cdt, cdn, 1); } -cur_frm.cscript.customer = function(doc,cdt,cdn){ - if(doc.customer) return get_server_fields('get_cust_addr','','',doc,cdt,cdn,1); +cur_frm.cscript.customer = function(doc, cdt, cdn) { + if(doc.customer) + return get_server_fields('get_cust_addr', '', '', doc, cdt, cdn, 1); } -cur_frm.cscript.purchase_receipt_no = function(doc,cdt,cdn){ - if(doc.purchase_receipt_no) return get_server_fields('get_supp_values','','',doc,cdt,cdn,1); +cur_frm.cscript.purchase_receipt_no = function(doc, cdt, cdn) { + if(doc.purchase_receipt_no) + return get_server_fields('get_supp_values', '', '', doc, cdt, cdn, 1); } -cur_frm.cscript.supplier = function(doc,cdt,cdn){ - if(doc.supplier) return get_server_fields('get_supp_addr','','',doc,cdt,cdn,1); +cur_frm.cscript.supplier = function(doc, cdt, cdn) { + if(doc.supplier) + return get_server_fields('get_supp_addr', '', '', doc, cdt, cdn, 1); } @@ -314,13 +318,17 @@ cur_frm.fields_dict['mtn_details'].grid.get_field('batch_no').get_query = functi cur_frm.cscript.item_code = function(doc, cdt, cdn) { var d = locals[cdt][cdn]; args = { - 'item_code' : d.item_code, - 'warehouse' : cstr(d.s_warehouse) || cstr(d.t_warehouse), - 'transfer_qty' : d.transfer_qty, - 'serial_no' : d.serial_no, - 'bom_no' : d.bom_no + 'item_code' : d.item_code, + 'warehouse' : cstr(d.s_warehouse) || cstr(d.t_warehouse), + 'transfer_qty' : d.transfer_qty, + 'serial_no' : d.serial_no, + 'bom_no' : d.bom_no, + 'expense_account' : d.expense_account, + 'cost_center' : d.cost_center, + 'company' : cur_frm.doc.company }; - return get_server_fields('get_item_details',JSON.stringify(args),'mtn_details',doc,cdt,cdn,1); + return get_server_fields('get_item_details', JSON.stringify(args), + 'mtn_details', doc, cdt, cdn, 1); } cur_frm.cscript.s_warehouse = function(doc, cdt, cdn) { @@ -343,7 +351,8 @@ cur_frm.cscript.uom = function(doc, cdt, cdn) { var d = locals[cdt][cdn]; if(d.uom && d.item_code){ var arg = {'item_code':d.item_code, 'uom':d.uom, 'qty':d.qty} - return get_server_fields('get_uom_details',JSON.stringify(arg),'mtn_details', doc, cdt, cdn, 1); + return get_server_fields('get_uom_details', JSON.stringify(arg), + 'mtn_details', doc, cdt, cdn, 1); } } @@ -354,15 +363,36 @@ cur_frm.cscript.validate = function(doc, cdt, cdn) { } cur_frm.cscript.validate_items = function(doc) { - cl = getchildren('Stock Entry Detail',doc.name,'mtn_details'); + cl = getchildren('Stock Entry Detail', doc.name, 'mtn_details'); if (!cl.length) { alert("Item table can not be blank"); validated = false; } } -cur_frm.fields_dict.customer.get_query = function(doc,cdt,cdn) { - return{ query:"controllers.queries.customer_query" } } +cur_frm.cscript.expense_account = function(doc, cdt, cdn) { + cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "expense_account"); +} -cur_frm.fields_dict.supplier.get_query = function(doc,cdt,cdn) { - return{ query:"controllers.queries.supplier_query" } } +cur_frm.cscript.cost_center = function(doc, cdt, cdn) { + cur_frm.cscript.copy_account_in_all_row(doc, cdt, cdn, "cost_center"); +} + +cur_frm.cscript.copy_account_in_all_row = function(doc, cdt, cdn, fieldname) { + var d = locals[cdt][cdn]; + if(d[fieldname]){ + var cl = getchildren('Stock Entry Detail', doc.name, cur_frm.cscript.fname, doc.doctype); + for(var i = 0; i < cl.length; i++) { + if(!cl[i][fieldname]) cl[i][fieldname] = d[fieldname]; + } + } + refresh_field(cur_frm.cscript.fname); +} + +cur_frm.fields_dict.customer.get_query = function(doc, cdt, cdn) { + return{ query:"controllers.queries.customer_query" } +} + +cur_frm.fields_dict.supplier.get_query = function(doc, cdt, cdn) { + return{ query:"controllers.queries.supplier_query" } +} \ No newline at end of file diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py index 7d8130cc85..735584685a 100644 --- a/stock/doctype/stock_entry/stock_entry.py +++ b/stock/doctype/stock_entry/stock_entry.py @@ -369,7 +369,8 @@ class DocType(StockController): def get_item_details(self, arg): arg = json.loads(arg) - item = sql("""select stock_uom, description, item_name from `tabItem` + item = sql("""select stock_uom, description, item_name, + purchase_account, cost_center from `tabItem` where name = %s and (ifnull(end_of_life,'')='' or end_of_life ='0000-00-00' or end_of_life > now())""", (arg.get('item_code')), as_dict = 1) if not item: @@ -380,6 +381,9 @@ class DocType(StockController): 'stock_uom' : item and item[0]['stock_uom'] or '', 'description' : item and item[0]['description'] or '', 'item_name' : item and item[0]['item_name'] or '', + 'expense_account' : item and item[0]['purchase_account'] or arg["expense_account"] \ + or webnotes.conn.get_value("Company", arg["company"], "default_expense_account"), + 'cost_center' : item and item[0]['cost_center'] or arg["cost_center"], 'qty' : 0, 'transfer_qty' : 0, 'conversion_factor' : 1,