fix: Set asset purchase amount based on qty and valuation_rate
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index e676560..798d4ff 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -1104,17 +1104,6 @@
item=item,
)
)
-
- # update gross amount of asset bought through this document
- assets = frappe.db.get_all(
- "Asset", filters={"purchase_invoice": self.name, "item_code": item.item_code}
- )
- for asset in assets:
- frappe.db.set_value("Asset", asset.name, "gross_purchase_amount", flt(item.valuation_rate))
- frappe.db.set_value(
- "Asset", asset.name, "purchase_receipt_amount", flt(item.valuation_rate)
- )
-
if (
self.auto_accounting_for_stock
and self.is_opening == "No"
@@ -1156,17 +1145,24 @@
item.item_tax_amount, item.precision("item_tax_amount")
)
+ if item.is_fixed_asset and item.landed_cost_voucher_amount:
+ self.update_gross_purchase_amount_for_linked_assets(item)
+
+ def update_gross_purchase_amount_for_linked_assets(self, item):
assets = frappe.db.get_all(
"Asset",
filters={"purchase_invoice": self.name, "item_code": item.item_code},
fields=["name", "asset_quantity"],
)
for asset in assets:
+ purchase_amount = flt(item.valuation_rate) * asset.asset_quantity
frappe.db.set_value(
- "Asset", asset.name, "gross_purchase_amount", flt(item.valuation_rate) * asset.asset_quantity
- )
- frappe.db.set_value(
- "Asset", asset.name, "purchase_receipt_amount", flt(item.valuation_rate) * asset.asset_quantity
+ "Asset",
+ asset.name,
+ {
+ "gross_purchase_amount": purchase_amount,
+ "purchase_receipt_amount": purchase_amount,
+ },
)
def make_stock_adjustment_entry(
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 58fd6d4..02e7a9b 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -571,10 +571,16 @@
indicator: 'red'
});
}
- frm.set_value('gross_purchase_amount', item.base_net_rate + item.item_tax_amount);
- frm.set_value('purchase_receipt_amount', item.base_net_rate + item.item_tax_amount);
- item.asset_location && frm.set_value('location', item.asset_location);
+ var is_grouped_asset = frappe.db.get_value('Item', item.item_code, 'is_grouped_asset');
+ var asset_quantity = is_grouped_asset ? item.qty : 1;
+ var purchase_amount = flt(item.valuation_rate * asset_quantity, precision('gross_purchase_amount'));
+
+ frm.set_value('gross_purchase_amount', purchase_amount);
+ frm.set_value('purchase_receipt_amount', purchase_amount);
+ frm.set_value('asset_quantity', asset_quantity);
frm.set_value('cost_center', item.cost_center || purchase_doc.cost_center);
+ if(item.asset_location) { frm.set_value('location', item.asset_location); }
+
},
set_depreciation_rate: function(frm, row) {
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 572fa51..fb68010 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -744,11 +744,8 @@
item_data = frappe.db.get_value(
"Item", row.item_code, ["asset_naming_series", "asset_category"], as_dict=1
)
-
- if is_grouped_asset:
- purchase_amount = flt(row.base_amount + row.item_tax_amount)
- else:
- purchase_amount = flt(row.base_rate + row.item_tax_amount)
+ asset_quantity = row.qty if is_grouped_asset else 1
+ purchase_amount = flt(row.valuation_rate) * asset_quantity
asset = frappe.get_doc(
{
@@ -764,7 +761,7 @@
"calculate_depreciation": 0,
"purchase_receipt_amount": purchase_amount,
"gross_purchase_amount": purchase_amount,
- "asset_quantity": row.qty if is_grouped_asset else 1,
+ "asset_quantity": asset_quantity,
"purchase_receipt": self.name if self.doctype == "Purchase Receipt" else None,
"purchase_invoice": self.name if self.doctype == "Purchase Invoice" else None,
}
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index c7e36e9..9c382a5 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -719,7 +719,7 @@
):
warehouse_with_no_account.append(d.warehouse or d.rejected_warehouse)
- if d.is_fixed_asset:
+ if d.is_fixed_asset and d.landed_cost_voucher_amount:
self.update_assets(d, d.valuation_rate)
if warehouse_with_no_account:
@@ -852,11 +852,14 @@
)
for asset in assets:
+ purchase_amount = flt(valuation_rate) * asset.asset_quantity
frappe.db.set_value(
- "Asset", asset.name, "gross_purchase_amount", flt(valuation_rate) * asset.asset_quantity
- )
- frappe.db.set_value(
- "Asset", asset.name, "purchase_receipt_amount", flt(valuation_rate) * asset.asset_quantity
+ "Asset",
+ asset.name,
+ {
+ "gross_purchase_amount": purchase_amount,
+ "purchase_receipt_amount": purchase_amount,
+ },
)
def update_status(self, status):