From ae0d753cade7b5c2c771b5529617600ea9fa0ef9 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 18 Jun 2014 14:42:22 +0530 Subject: [PATCH 1/4] Valuation rate and amount for fg item --- .../stock/doctype/stock_entry/stock_entry.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index a42a865cbb..510b395ae4 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -359,16 +359,17 @@ cur_frm.cscript.item_code = function(doc, cdt, cdn) { cur_frm.cscript.s_warehouse = 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, - 'qty' : d.s_warehouse ? -1* d.qty : d.qty + if(!d.bom_no) { + 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, + 'qty' : d.s_warehouse ? -1* d.qty : d.qty + } + return get_server_fields('get_warehouse_details', JSON.stringify(args), + 'mtn_details', doc, cdt, cdn, 1); } - return get_server_fields('get_warehouse_details', JSON.stringify(args), - 'mtn_details', doc, cdt, cdn, 1); } cur_frm.cscript.t_warehouse = cur_frm.cscript.s_warehouse; From a7da6e148018aeaf0e3e29055745040382fb087a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 18 Jun 2014 15:12:03 +0530 Subject: [PATCH 2/4] Incoming rate for sales return --- .../stock/doctype/stock_entry/stock_entry.py | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 38c7521e36..0321dcfeb7 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -239,29 +239,24 @@ class StockEntry(StockController): def get_incoming_rate(self, args): incoming_rate = 0 - if self.purpose == "Sales Return" and \ - (self.delivery_note_no or self.sales_invoice_no): - sle = frappe.db.sql("""select name, posting_date, posting_time, - actual_qty, stock_value, warehouse from `tabStock Ledger Entry` - where voucher_type = %s and voucher_no = %s and - item_code = %s limit 1""", - ((self.delivery_note_no and "Delivery Note" or "Sales Invoice"), - self.delivery_note_no or self.sales_invoice_no, args.item_code), as_dict=1) - if sle: - args.update({ - "posting_date": sle[0].posting_date, - "posting_time": sle[0].posting_time, - "sle": sle[0].name, - "warehouse": sle[0].warehouse, - }) - previous_sle = get_previous_sle(args) - incoming_rate = (flt(sle[0].stock_value) - flt(previous_sle.get("stock_value"))) / \ - flt(sle[0].actual_qty) + if self.purpose == "Sales Return": + incoming_rate = self.get_incoming_rate_for_sales_return(args) else: incoming_rate = get_incoming_rate(args) return incoming_rate + def get_incoming_rate_for_sales_return(self, args): + incoming_rate = 0.0 + if self.delivery_note_no or self.sales_invoice_no: + incoming_rate = frappe.db.sql("""select abs(ifnull(stock_value_difference, 0) / actual_qty) + from `tabStock Ledger Entry` + where voucher_type = %s and voucher_no = %s and item_code = %s limit 1""", + ((self.delivery_note_no and "Delivery Note" or "Sales Invoice"), + self.delivery_note_no or self.sales_invoice_no, args.item_code))[0][0] + + return incoming_rate + def validate_incoming_rate(self): for d in self.get('mtn_details'): if d.t_warehouse: From e7c2f74a078980fc7be5fedb82279d74ca541714 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 18 Jun 2014 16:40:08 +0530 Subject: [PATCH 3/4] Stocvk entry incoming rate for sales return --- erpnext/stock/doctype/stock_entry/stock_entry.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 0321dcfeb7..297542b50f 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -248,12 +248,13 @@ class StockEntry(StockController): def get_incoming_rate_for_sales_return(self, args): incoming_rate = 0.0 - if self.delivery_note_no or self.sales_invoice_no: + if (self.delivery_note_no or self.sales_invoice_no) and args.get("item_code"): incoming_rate = frappe.db.sql("""select abs(ifnull(stock_value_difference, 0) / actual_qty) from `tabStock Ledger Entry` where voucher_type = %s and voucher_no = %s and item_code = %s limit 1""", ((self.delivery_note_no and "Delivery Note" or "Sales Invoice"), - self.delivery_note_no or self.sales_invoice_no, args.item_code))[0][0] + self.delivery_note_no or self.sales_invoice_no, args.item_code)) + incoming_rate = incoming_rate[0][0] if incoming_rate else 0.0 return incoming_rate From 4d7c4fc0f40d5ff745cf1a3f6fead56e9680f702 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 18 Jun 2014 16:40:27 +0530 Subject: [PATCH 4/4] Get party details fixes --- erpnext/accounts/party.py | 13 +++++++------ erpnext/public/js/utils/party.js | 1 + erpnext/stock/doctype/stock_entry/stock_entry.js | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 9792da1b26..cd172f1902 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -12,13 +12,14 @@ from erpnext.utilities.doctype.contact.contact import get_contact_details @frappe.whitelist() def get_party_details(party=None, account=None, party_type="Customer", company=None, - posting_date=None, price_list=None, currency=None): + posting_date=None, price_list=None, currency=None, doctype=None): - return _get_party_details(party, account, party_type, company, posting_date, price_list, currency) + return _get_party_details(party, account, party_type, + company, posting_date, price_list, currency, doctype) def _get_party_details(party=None, account=None, party_type="Customer", company=None, - posting_date=None, price_list=None, currency=None, ignore_permissions=False): - out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date)) + posting_date=None, price_list=None, currency=None, doctype=None, ignore_permissions=False): + out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date, doctype)) party = out[party_type.lower()] @@ -106,8 +107,8 @@ def set_price_list(out, party, party_type, given_price_list): out["selling_price_list" if party.doctype=="Customer" else "buying_price_list"] = price_list -def set_account_and_due_date(party, account, party_type, company, posting_date): - if not posting_date: +def set_account_and_due_date(party, account, party_type, company, posting_date, doctype): + if doctype not in ["Sales Invoice", "Purchase Invoice"]: # not an invoice return { party_type.lower(): party diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js index 40db97feb8..c9b1206cc1 100644 --- a/erpnext/public/js/utils/party.js +++ b/erpnext/public/js/utils/party.js @@ -25,6 +25,7 @@ erpnext.utils.get_party_details = function(frm, method, args, callback) { args.currency = frm.doc.currency; args.company = frm.doc.company; + args.doctype = frm.doc.doctype; frappe.call({ method: method, args: args, diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index 510b395ae4..959739225e 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -241,14 +241,14 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ customer: function() { return this.frm.call({ method: "erpnext.accounts.party.get_party_details", - args: { party: this.frm.doc.customer, party_type:"Customer" } + args: { party: this.frm.doc.customer, party_type:"Customer", doctype: this.frm.doc.doctype } }); }, supplier: function() { return this.frm.call({ method: "erpnext.accounts.party.get_party_details", - args: { party: this.frm.doc.supplier, party_type:"Supplier" } + args: { party: this.frm.doc.supplier, party_type:"Supplier", doctype: this.frm.doc.doctype } }); },