Merge pull request #1816 from nabinhait/v4-hotfix
Stock Entry incoming rate
This commit is contained in:
commit
64a0eb42ed
@ -12,13 +12,14 @@ from erpnext.utilities.doctype.contact.contact import get_contact_details
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_party_details(party=None, account=None, party_type="Customer", company=None,
|
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,
|
def _get_party_details(party=None, account=None, party_type="Customer", company=None,
|
||||||
posting_date=None, price_list=None, currency=None, ignore_permissions=False):
|
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))
|
out = frappe._dict(set_account_and_due_date(party, account, party_type, company, posting_date, doctype))
|
||||||
|
|
||||||
party = out[party_type.lower()]
|
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
|
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):
|
def set_account_and_due_date(party, account, party_type, company, posting_date, doctype):
|
||||||
if not posting_date:
|
if doctype not in ["Sales Invoice", "Purchase Invoice"]:
|
||||||
# not an invoice
|
# not an invoice
|
||||||
return {
|
return {
|
||||||
party_type.lower(): party
|
party_type.lower(): party
|
||||||
|
|||||||
@ -25,6 +25,7 @@ erpnext.utils.get_party_details = function(frm, method, args, callback) {
|
|||||||
|
|
||||||
args.currency = frm.doc.currency;
|
args.currency = frm.doc.currency;
|
||||||
args.company = frm.doc.company;
|
args.company = frm.doc.company;
|
||||||
|
args.doctype = frm.doc.doctype;
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: method,
|
method: method,
|
||||||
args: args,
|
args: args,
|
||||||
|
|||||||
@ -241,14 +241,14 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({
|
|||||||
customer: function() {
|
customer: function() {
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.accounts.party.get_party_details",
|
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() {
|
supplier: function() {
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.accounts.party.get_party_details",
|
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 }
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -359,16 +359,17 @@ cur_frm.cscript.item_code = function(doc, cdt, cdn) {
|
|||||||
|
|
||||||
cur_frm.cscript.s_warehouse = function(doc, cdt, cdn) {
|
cur_frm.cscript.s_warehouse = function(doc, cdt, cdn) {
|
||||||
var d = locals[cdt][cdn];
|
var d = locals[cdt][cdn];
|
||||||
args = {
|
if(!d.bom_no) {
|
||||||
'item_code' : d.item_code,
|
args = {
|
||||||
'warehouse' : cstr(d.s_warehouse) || cstr(d.t_warehouse),
|
'item_code' : d.item_code,
|
||||||
'transfer_qty' : d.transfer_qty,
|
'warehouse' : cstr(d.s_warehouse) || cstr(d.t_warehouse),
|
||||||
'serial_no' : d.serial_no,
|
'transfer_qty' : d.transfer_qty,
|
||||||
'bom_no' : d.bom_no,
|
'serial_no' : d.serial_no,
|
||||||
'qty' : d.s_warehouse ? -1* d.qty : d.qty
|
'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;
|
cur_frm.cscript.t_warehouse = cur_frm.cscript.s_warehouse;
|
||||||
|
|||||||
@ -239,29 +239,25 @@ class StockEntry(StockController):
|
|||||||
|
|
||||||
def get_incoming_rate(self, args):
|
def get_incoming_rate(self, args):
|
||||||
incoming_rate = 0
|
incoming_rate = 0
|
||||||
if self.purpose == "Sales Return" and \
|
if self.purpose == "Sales Return":
|
||||||
(self.delivery_note_no or self.sales_invoice_no):
|
incoming_rate = self.get_incoming_rate_for_sales_return(args)
|
||||||
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)
|
|
||||||
else:
|
else:
|
||||||
incoming_rate = get_incoming_rate(args)
|
incoming_rate = get_incoming_rate(args)
|
||||||
|
|
||||||
return incoming_rate
|
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) 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))
|
||||||
|
incoming_rate = incoming_rate[0][0] if incoming_rate else 0.0
|
||||||
|
|
||||||
|
return incoming_rate
|
||||||
|
|
||||||
def validate_incoming_rate(self):
|
def validate_incoming_rate(self):
|
||||||
for d in self.get('mtn_details'):
|
for d in self.get('mtn_details'):
|
||||||
if d.t_warehouse:
|
if d.t_warehouse:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user