mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 16:34:46 +00:00
Revert "fix: link Purchase Invoice and Receipt Items to Asset"
This commit is contained in:
@@ -1267,11 +1267,7 @@ class PurchaseInvoice(BuyingController):
|
|||||||
def update_gross_purchase_amount_for_linked_assets(self, item):
|
def update_gross_purchase_amount_for_linked_assets(self, item):
|
||||||
assets = frappe.db.get_all(
|
assets = frappe.db.get_all(
|
||||||
"Asset",
|
"Asset",
|
||||||
filters={
|
filters={"purchase_invoice": self.name, "item_code": item.item_code},
|
||||||
"purchase_invoice": self.name,
|
|
||||||
"item_code": item.item_code,
|
|
||||||
"purchase_invoice_item": ("in", [item.name, ""]),
|
|
||||||
},
|
|
||||||
fields=["name", "asset_quantity"],
|
fields=["name", "asset_quantity"],
|
||||||
)
|
)
|
||||||
for asset in assets:
|
for asset in assets:
|
||||||
|
|||||||
@@ -670,11 +670,6 @@ frappe.ui.form.on("Asset", {
|
|||||||
if (item.asset_location) {
|
if (item.asset_location) {
|
||||||
frm.set_value("location", item.asset_location);
|
frm.set_value("location", item.asset_location);
|
||||||
}
|
}
|
||||||
if (doctype === "Purchase Receipt") {
|
|
||||||
frm.set_value("purchase_receipt_item", item.name);
|
|
||||||
} else if (doctype === "Purchase Invoice") {
|
|
||||||
frm.set_value("purchase_invoice_item", item.name);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -33,16 +33,14 @@
|
|||||||
"dimension_col_break",
|
"dimension_col_break",
|
||||||
"purchase_details_section",
|
"purchase_details_section",
|
||||||
"purchase_receipt",
|
"purchase_receipt",
|
||||||
"purchase_receipt_item",
|
|
||||||
"purchase_invoice",
|
"purchase_invoice",
|
||||||
"purchase_invoice_item",
|
|
||||||
"purchase_date",
|
|
||||||
"available_for_use_date",
|
"available_for_use_date",
|
||||||
|
"total_asset_cost",
|
||||||
|
"additional_asset_cost",
|
||||||
"column_break_23",
|
"column_break_23",
|
||||||
"gross_purchase_amount",
|
"gross_purchase_amount",
|
||||||
"asset_quantity",
|
"asset_quantity",
|
||||||
"additional_asset_cost",
|
"purchase_date",
|
||||||
"total_asset_cost",
|
|
||||||
"section_break_23",
|
"section_break_23",
|
||||||
"calculate_depreciation",
|
"calculate_depreciation",
|
||||||
"column_break_33",
|
"column_break_33",
|
||||||
@@ -538,20 +536,6 @@
|
|||||||
"fieldname": "opening_number_of_booked_depreciations",
|
"fieldname": "opening_number_of_booked_depreciations",
|
||||||
"fieldtype": "Int",
|
"fieldtype": "Int",
|
||||||
"label": "Opening Number of Booked Depreciations"
|
"label": "Opening Number of Booked Depreciations"
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "purchase_receipt_item",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 1,
|
|
||||||
"label": "Purchase Receipt Item",
|
|
||||||
"options": "Purchase Receipt Item"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "purchase_invoice_item",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 1,
|
|
||||||
"label": "Purchase Invoice Item",
|
|
||||||
"options": "Purchase Invoice Item"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"idx": 72,
|
"idx": 72,
|
||||||
@@ -595,7 +579,7 @@
|
|||||||
"link_fieldname": "target_asset"
|
"link_fieldname": "target_asset"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"modified": "2024-08-26 23:28:29.095139",
|
"modified": "2024-08-01 16:39:09.340973",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset",
|
"name": "Asset",
|
||||||
|
|||||||
@@ -94,9 +94,7 @@ class Asset(AccountsController):
|
|||||||
purchase_amount: DF.Currency
|
purchase_amount: DF.Currency
|
||||||
purchase_date: DF.Date | None
|
purchase_date: DF.Date | None
|
||||||
purchase_invoice: DF.Link | None
|
purchase_invoice: DF.Link | None
|
||||||
purchase_invoice_item: DF.Link | None
|
|
||||||
purchase_receipt: DF.Link | None
|
purchase_receipt: DF.Link | None
|
||||||
purchase_receipt_item: DF.Link | None
|
|
||||||
split_from: DF.Link | None
|
split_from: DF.Link | None
|
||||||
status: DF.Literal[
|
status: DF.Literal[
|
||||||
"Draft",
|
"Draft",
|
||||||
|
|||||||
@@ -824,8 +824,6 @@ class BuyingController(SubcontractingController):
|
|||||||
"asset_quantity": asset_quantity,
|
"asset_quantity": asset_quantity,
|
||||||
"purchase_receipt": self.name if self.doctype == "Purchase Receipt" else None,
|
"purchase_receipt": self.name if self.doctype == "Purchase Receipt" else None,
|
||||||
"purchase_invoice": self.name if self.doctype == "Purchase Invoice" else None,
|
"purchase_invoice": self.name if self.doctype == "Purchase Invoice" else None,
|
||||||
"purchase_receipt_item": row.name if self.doctype == "Purchase Receipt" else None,
|
|
||||||
"purchase_invoice_item": row.name if self.doctype == "Purchase Invoice" else None,
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -379,4 +379,3 @@ erpnext.patches.v15_0.drop_index_posting_datetime_from_sle
|
|||||||
erpnext.patches.v15_0.add_disassembly_order_stock_entry_type #1
|
erpnext.patches.v15_0.add_disassembly_order_stock_entry_type #1
|
||||||
erpnext.patches.v15_0.set_standard_stock_entry_type
|
erpnext.patches.v15_0.set_standard_stock_entry_type
|
||||||
erpnext.patches.v15_0.set_difference_amount_in_asset_value_adjustment
|
erpnext.patches.v15_0.set_difference_amount_in_asset_value_adjustment
|
||||||
erpnext.patches.v15_0.link_purchase_item_to_asset_doc
|
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
import frappe
|
|
||||||
|
|
||||||
|
|
||||||
def execute():
|
|
||||||
if frappe.db.has_column("Asset", "purchase_invoice_item") and frappe.db.has_column(
|
|
||||||
"Asset", "purchase_receipt_item"
|
|
||||||
):
|
|
||||||
# Get all assets with their related Purchase Invoice and Purchase Receipt
|
|
||||||
assets = frappe.get_all(
|
|
||||||
"Asset",
|
|
||||||
filters={"docstatus": 0},
|
|
||||||
fields=[
|
|
||||||
"name",
|
|
||||||
"item_code",
|
|
||||||
"purchase_invoice",
|
|
||||||
"purchase_receipt",
|
|
||||||
"gross_purchase_amount",
|
|
||||||
"asset_quantity",
|
|
||||||
"purchase_invoice_item",
|
|
||||||
"purchase_receipt_item",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
for asset in assets:
|
|
||||||
# Get Purchase Invoice Items
|
|
||||||
if asset.purchase_invoice and not asset.purchase_invoice_item:
|
|
||||||
purchase_invoice_item = get_linked_item(
|
|
||||||
"Purchase Invoice Item",
|
|
||||||
asset.purchase_invoice,
|
|
||||||
asset.item_code,
|
|
||||||
asset.gross_purchase_amount,
|
|
||||||
asset.asset_quantity,
|
|
||||||
)
|
|
||||||
frappe.db.set_value("Asset", asset.name, "purchase_invoice_item", purchase_invoice_item)
|
|
||||||
|
|
||||||
# Get Purchase Receipt Items
|
|
||||||
if asset.purchase_receipt and not asset.purchase_receipt_item:
|
|
||||||
purchase_receipt_item = get_linked_item(
|
|
||||||
"Purchase Receipt Item",
|
|
||||||
asset.purchase_receipt,
|
|
||||||
asset.item_code,
|
|
||||||
asset.gross_purchase_amount,
|
|
||||||
asset.asset_quantity,
|
|
||||||
)
|
|
||||||
frappe.db.set_value("Asset", asset.name, "purchase_receipt_item", purchase_receipt_item)
|
|
||||||
|
|
||||||
|
|
||||||
def get_linked_item(doctype, parent, item_code, amount, quantity):
|
|
||||||
items = frappe.get_all(
|
|
||||||
doctype,
|
|
||||||
filters={
|
|
||||||
"parenttype": doctype.replace(" Item", ""),
|
|
||||||
"parent": parent,
|
|
||||||
"item_code": item_code,
|
|
||||||
},
|
|
||||||
fields=["name", "rate", "amount", "qty", "landed_cost_voucher_amount"],
|
|
||||||
)
|
|
||||||
if len(items) == 1:
|
|
||||||
# If only one item exists, return it directly
|
|
||||||
return items[0].name
|
|
||||||
|
|
||||||
for item in items:
|
|
||||||
landed_cost = item.get("landed_cost_voucher_amount", 0)
|
|
||||||
# Check if the asset is grouped
|
|
||||||
if quantity > 1:
|
|
||||||
if item.amount + landed_cost == amount and item.qty == quantity:
|
|
||||||
return item.name
|
|
||||||
elif item.qty == quantity:
|
|
||||||
return item.name
|
|
||||||
else:
|
|
||||||
if item.rate + (landed_cost / item.qty) == amount:
|
|
||||||
return item.name
|
|
||||||
|
|
||||||
return items[0].name if items else None
|
|
||||||
@@ -828,11 +828,7 @@ class PurchaseReceipt(BuyingController):
|
|||||||
def update_assets(self, item, valuation_rate):
|
def update_assets(self, item, valuation_rate):
|
||||||
assets = frappe.db.get_all(
|
assets = frappe.db.get_all(
|
||||||
"Asset",
|
"Asset",
|
||||||
filters={
|
filters={"purchase_receipt": self.name, "item_code": item.item_code},
|
||||||
"purchase_receipt": self.name,
|
|
||||||
"item_code": item.item_code,
|
|
||||||
"purchase_receipt_item": ("in", [item.name, ""]),
|
|
||||||
},
|
|
||||||
fields=["name", "asset_quantity"],
|
fields=["name", "asset_quantity"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1533,7 +1533,7 @@ def get_previous_sle_of_current_voucher(args, operator="<", exclude_current_vouc
|
|||||||
operator = "<="
|
operator = "<="
|
||||||
voucher_condition = f"and creation < '{creation}'"
|
voucher_condition = f"and creation < '{creation}'"
|
||||||
|
|
||||||
sle = frappe.db.sql( # nosemgrep
|
sle = frappe.db.sql(
|
||||||
f"""
|
f"""
|
||||||
select *, posting_datetime as "timestamp"
|
select *, posting_datetime as "timestamp"
|
||||||
from `tabStock Ledger Entry`
|
from `tabStock Ledger Entry`
|
||||||
@@ -1630,7 +1630,6 @@ def get_stock_ledger_entries(
|
|||||||
if extra_cond:
|
if extra_cond:
|
||||||
conditions += f"{extra_cond}"
|
conditions += f"{extra_cond}"
|
||||||
|
|
||||||
# nosemgrep
|
|
||||||
return frappe.db.sql(
|
return frappe.db.sql(
|
||||||
"""
|
"""
|
||||||
select *, posting_datetime as "timestamp"
|
select *, posting_datetime as "timestamp"
|
||||||
@@ -1746,7 +1745,7 @@ def get_valuation_rate(
|
|||||||
return batch_obj.get_incoming_rate()
|
return batch_obj.get_incoming_rate()
|
||||||
|
|
||||||
# Get valuation rate from last sle for the same item and warehouse
|
# Get valuation rate from last sle for the same item and warehouse
|
||||||
if last_valuation_rate := frappe.db.sql( # nosemgrep
|
if last_valuation_rate := frappe.db.sql(
|
||||||
"""select valuation_rate
|
"""select valuation_rate
|
||||||
from `tabStock Ledger Entry` force index (item_warehouse)
|
from `tabStock Ledger Entry` force index (item_warehouse)
|
||||||
where
|
where
|
||||||
@@ -1826,7 +1825,7 @@ def update_qty_in_future_sle(args, allow_negative_stock=False):
|
|||||||
detail = next_stock_reco_detail[0]
|
detail = next_stock_reco_detail[0]
|
||||||
datetime_limit_condition = get_datetime_limit_condition(detail)
|
datetime_limit_condition = get_datetime_limit_condition(detail)
|
||||||
|
|
||||||
frappe.db.sql( # nosemgrep
|
frappe.db.sql(
|
||||||
f"""
|
f"""
|
||||||
update `tabStock Ledger Entry`
|
update `tabStock Ledger Entry`
|
||||||
set qty_after_transaction = qty_after_transaction + {qty_shift}
|
set qty_after_transaction = qty_after_transaction + {qty_shift}
|
||||||
@@ -1992,8 +1991,8 @@ def is_negative_with_precision(neg_sle, is_batch=False):
|
|||||||
return qty_deficit < 0 and abs(qty_deficit) > 0.0001
|
return qty_deficit < 0 and abs(qty_deficit) > 0.0001
|
||||||
|
|
||||||
|
|
||||||
def get_future_sle_with_negative_qty(sle_args):
|
def get_future_sle_with_negative_qty(args):
|
||||||
return frappe.db.sql( # nosemgrep
|
return frappe.db.sql(
|
||||||
"""
|
"""
|
||||||
select
|
select
|
||||||
qty_after_transaction, posting_date, posting_time,
|
qty_after_transaction, posting_date, posting_time,
|
||||||
@@ -2009,13 +2008,13 @@ def get_future_sle_with_negative_qty(sle_args):
|
|||||||
order by posting_date asc, posting_time asc
|
order by posting_date asc, posting_time asc
|
||||||
limit 1
|
limit 1
|
||||||
""",
|
""",
|
||||||
sle_args,
|
args,
|
||||||
as_dict=1,
|
as_dict=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_future_sle_with_negative_batch_qty(sle_args):
|
def get_future_sle_with_negative_batch_qty(args):
|
||||||
return frappe.db.sql( # nosemgrep
|
return frappe.db.sql(
|
||||||
"""
|
"""
|
||||||
with batch_ledger as (
|
with batch_ledger as (
|
||||||
select
|
select
|
||||||
@@ -2035,7 +2034,7 @@ def get_future_sle_with_negative_batch_qty(sle_args):
|
|||||||
and posting_datetime >= %(posting_datetime)s
|
and posting_datetime >= %(posting_datetime)s
|
||||||
limit 1
|
limit 1
|
||||||
""",
|
""",
|
||||||
sle_args,
|
args,
|
||||||
as_dict=1,
|
as_dict=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user