fix: incorrect stock value in return case (#23102)
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"actions": [],
|
|
||||||
"autoname": "hash",
|
"autoname": "hash",
|
||||||
"creation": "2013-05-22 12:43:10",
|
"creation": "2013-05-22 12:43:10",
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
@@ -82,6 +81,7 @@
|
|||||||
"item_tax_rate",
|
"item_tax_rate",
|
||||||
"bom",
|
"bom",
|
||||||
"include_exploded_items",
|
"include_exploded_items",
|
||||||
|
"purchase_invoice_item",
|
||||||
"col_break6",
|
"col_break6",
|
||||||
"purchase_order",
|
"purchase_order",
|
||||||
"po_detail",
|
"po_detail",
|
||||||
@@ -769,12 +769,21 @@
|
|||||||
"collapsible": 1,
|
"collapsible": 1,
|
||||||
"fieldname": "col_break7",
|
"fieldname": "col_break7",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "eval:parent.update_stock == 1",
|
||||||
|
"fieldname": "purchase_invoice_item",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
|
"label": "Purchase Invoice Item",
|
||||||
|
"no_copy": 1,
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"modified": "2020-08-20 11:48:01.398356",
|
||||||
"modified": "2020-04-22 10:37:35.103176",
|
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Purchase Invoice Item",
|
"name": "Purchase Invoice Item",
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"actions": [],
|
|
||||||
"autoname": "hash",
|
"autoname": "hash",
|
||||||
"creation": "2013-06-04 11:02:19",
|
"creation": "2013-06-04 11:02:19",
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
@@ -87,6 +86,7 @@
|
|||||||
"edit_references",
|
"edit_references",
|
||||||
"sales_order",
|
"sales_order",
|
||||||
"so_detail",
|
"so_detail",
|
||||||
|
"sales_invoice_item",
|
||||||
"column_break_74",
|
"column_break_74",
|
||||||
"delivery_note",
|
"delivery_note",
|
||||||
"dn_detail",
|
"dn_detail",
|
||||||
@@ -790,12 +790,22 @@
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"label": "Project",
|
"label": "Project",
|
||||||
"options": "Project"
|
"options": "Project"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "eval:parent.update_stock == 1",
|
||||||
|
"fieldname": "sales_invoice_item",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"ignore_user_permissions": 1,
|
||||||
|
"label": "Sales Invoice Item",
|
||||||
|
"no_copy": 1,
|
||||||
|
"print_hide": 1,
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-07-18 12:24:41.749986",
|
"modified": "2020-08-20 11:24:41.749986",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Sales Invoice Item",
|
"name": "Sales Invoice Item",
|
||||||
|
|||||||
@@ -559,9 +559,19 @@ class BuyingController(StockController):
|
|||||||
"serial_no": cstr(d.serial_no).strip()
|
"serial_no": cstr(d.serial_no).strip()
|
||||||
})
|
})
|
||||||
if self.is_return:
|
if self.is_return:
|
||||||
original_incoming_rate = frappe.db.get_value("Stock Ledger Entry",
|
filters = {
|
||||||
{"voucher_type": "Purchase Receipt", "voucher_no": self.return_against,
|
"voucher_type": self.doctype,
|
||||||
"item_code": d.item_code}, "incoming_rate")
|
"voucher_no": self.return_against,
|
||||||
|
"item_code": d.item_code
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.doctype == "Purchase Invoice" and self.update_stock
|
||||||
|
and d.get("purchase_invoice_item")):
|
||||||
|
filters["voucher_detail_no"] = d.purchase_invoice_item
|
||||||
|
elif self.doctype == "Purchase Receipt" and d.get("purchase_receipt_item"):
|
||||||
|
filters["voucher_detail_no"] = d.purchase_receipt_item
|
||||||
|
|
||||||
|
original_incoming_rate = frappe.db.get_value("Stock Ledger Entry", filters, "incoming_rate")
|
||||||
|
|
||||||
sle.update({
|
sle.update({
|
||||||
"outgoing_rate": original_incoming_rate
|
"outgoing_rate": original_incoming_rate
|
||||||
|
|||||||
@@ -281,6 +281,8 @@ def make_return_doc(doctype, source_name, target_doc=None):
|
|||||||
target_doc.rejected_warehouse = source_doc.rejected_warehouse
|
target_doc.rejected_warehouse = source_doc.rejected_warehouse
|
||||||
target_doc.po_detail = source_doc.po_detail
|
target_doc.po_detail = source_doc.po_detail
|
||||||
target_doc.pr_detail = source_doc.pr_detail
|
target_doc.pr_detail = source_doc.pr_detail
|
||||||
|
target_doc.purchase_invoice_item = source_doc.name
|
||||||
|
|
||||||
elif doctype == "Delivery Note":
|
elif doctype == "Delivery Note":
|
||||||
target_doc.against_sales_order = source_doc.against_sales_order
|
target_doc.against_sales_order = source_doc.against_sales_order
|
||||||
target_doc.against_sales_invoice = source_doc.against_sales_invoice
|
target_doc.against_sales_invoice = source_doc.against_sales_invoice
|
||||||
@@ -296,6 +298,7 @@ def make_return_doc(doctype, source_name, target_doc=None):
|
|||||||
target_doc.so_detail = source_doc.so_detail
|
target_doc.so_detail = source_doc.so_detail
|
||||||
target_doc.dn_detail = source_doc.dn_detail
|
target_doc.dn_detail = source_doc.dn_detail
|
||||||
target_doc.expense_account = source_doc.expense_account
|
target_doc.expense_account = source_doc.expense_account
|
||||||
|
target_doc.sales_invoice_item = source_doc.name
|
||||||
if default_warehouse_for_sales_return:
|
if default_warehouse_for_sales_return:
|
||||||
target_doc.warehouse = default_warehouse_for_sales_return
|
target_doc.warehouse = default_warehouse_for_sales_return
|
||||||
|
|
||||||
|
|||||||
@@ -217,7 +217,9 @@ class SellingController(StockController):
|
|||||||
'target_warehouse': p.target_warehouse,
|
'target_warehouse': p.target_warehouse,
|
||||||
'company': self.company,
|
'company': self.company,
|
||||||
'voucher_type': self.doctype,
|
'voucher_type': self.doctype,
|
||||||
'allow_zero_valuation': d.allow_zero_valuation_rate
|
'allow_zero_valuation': d.allow_zero_valuation_rate,
|
||||||
|
'sales_invoice_item': d.get("sales_invoice_item"),
|
||||||
|
'delivery_note_item': d.get("dn_detail")
|
||||||
}))
|
}))
|
||||||
else:
|
else:
|
||||||
il.append(frappe._dict({
|
il.append(frappe._dict({
|
||||||
@@ -233,7 +235,9 @@ class SellingController(StockController):
|
|||||||
'target_warehouse': d.target_warehouse,
|
'target_warehouse': d.target_warehouse,
|
||||||
'company': self.company,
|
'company': self.company,
|
||||||
'voucher_type': self.doctype,
|
'voucher_type': self.doctype,
|
||||||
'allow_zero_valuation': d.allow_zero_valuation_rate
|
'allow_zero_valuation': d.allow_zero_valuation_rate,
|
||||||
|
'sales_invoice_item': d.get("sales_invoice_item"),
|
||||||
|
'delivery_note_item': d.get("dn_detail")
|
||||||
}))
|
}))
|
||||||
return il
|
return il
|
||||||
|
|
||||||
@@ -302,7 +306,11 @@ class SellingController(StockController):
|
|||||||
d.conversion_factor = get_conversion_factor(d.item_code, d.uom).get("conversion_factor") or 1.0
|
d.conversion_factor = get_conversion_factor(d.item_code, d.uom).get("conversion_factor") or 1.0
|
||||||
return_rate = 0
|
return_rate = 0
|
||||||
if cint(self.is_return) and self.return_against and self.docstatus==1:
|
if cint(self.is_return) and self.return_against and self.docstatus==1:
|
||||||
return_rate = self.get_incoming_rate_for_return(d.item_code, self.return_against)
|
against_document_no = (d.get("sales_invoice_item")
|
||||||
|
if self.doctype == "Sales Invoice" else d.get("delivery_note_item"))
|
||||||
|
|
||||||
|
return_rate = self.get_incoming_rate_for_return(d.item_code,
|
||||||
|
self.return_against, against_document_no)
|
||||||
|
|
||||||
# On cancellation or if return entry submission, make stock ledger entry for
|
# On cancellation or if return entry submission, make stock ledger entry for
|
||||||
# target warehouse first, to update serial no values properly
|
# target warehouse first, to update serial no values properly
|
||||||
|
|||||||
@@ -301,14 +301,19 @@ class StockController(AccountsController):
|
|||||||
|
|
||||||
return serialized_items
|
return serialized_items
|
||||||
|
|
||||||
def get_incoming_rate_for_return(self, item_code, against_document):
|
def get_incoming_rate_for_return(self, item_code, against_document, against_document_no=None):
|
||||||
incoming_rate = 0.0
|
incoming_rate = 0.0
|
||||||
|
cond = ''
|
||||||
if against_document and item_code:
|
if against_document and item_code:
|
||||||
|
if against_document_no:
|
||||||
|
cond = " and voucher_detail_no = %s" %(frappe.db.escape(against_document_no))
|
||||||
|
|
||||||
incoming_rate = frappe.db.sql("""select abs(stock_value_difference / actual_qty)
|
incoming_rate = frappe.db.sql("""select abs(stock_value_difference / actual_qty)
|
||||||
from `tabStock Ledger Entry`
|
from `tabStock Ledger Entry`
|
||||||
where voucher_type = %s and voucher_no = %s
|
where voucher_type = %s and voucher_no = %s
|
||||||
and item_code = %s limit 1""",
|
and item_code = %s {0} limit 1""".format(cond),
|
||||||
(self.doctype, against_document, item_code))
|
(self.doctype, against_document, item_code))
|
||||||
|
|
||||||
incoming_rate = incoming_rate[0][0] if incoming_rate else 0.0
|
incoming_rate = incoming_rate[0][0] if incoming_rate else 0.0
|
||||||
|
|
||||||
return incoming_rate
|
return incoming_rate
|
||||||
|
|||||||
Reference in New Issue
Block a user