mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-15 11:09:17 +00:00
Merge pull request #48831 from frappe/version-14-hotfix
chore: release v14
This commit is contained in:
@@ -781,7 +781,7 @@ class PurchaseInvoice(BuyingController):
|
|||||||
self.get_provisional_accounts()
|
self.get_provisional_accounts()
|
||||||
|
|
||||||
for item in self.get("items"):
|
for item in self.get("items"):
|
||||||
if flt(item.base_net_amount):
|
if flt(item.base_net_amount) or (self.get("update_stock") and item.valuation_rate):
|
||||||
account_currency = get_account_currency(item.expense_account)
|
account_currency = get_account_currency(item.expense_account)
|
||||||
if item.item_code:
|
if item.item_code:
|
||||||
frappe.get_cached_value("Item", item.item_code, "asset_category")
|
frappe.get_cached_value("Item", item.item_code, "asset_category")
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ from frappe.utils import (
|
|||||||
nowdate,
|
nowdate,
|
||||||
)
|
)
|
||||||
from pypika import Order
|
from pypika import Order
|
||||||
|
from pypika.functions import Coalesce
|
||||||
from pypika.terms import ExistsCriterion
|
from pypika.terms import ExistsCriterion
|
||||||
|
|
||||||
import erpnext
|
import erpnext
|
||||||
@@ -2197,6 +2198,8 @@ def run_ledger_health_checks():
|
|||||||
def build_qb_match_conditions(doctype, user=None) -> list:
|
def build_qb_match_conditions(doctype, user=None) -> list:
|
||||||
match_filters = build_match_conditions(doctype, user, False)
|
match_filters = build_match_conditions(doctype, user, False)
|
||||||
criterion = []
|
criterion = []
|
||||||
|
apply_strict_user_permissions = frappe.get_system_settings("apply_strict_user_permissions")
|
||||||
|
|
||||||
if match_filters:
|
if match_filters:
|
||||||
from frappe import qb
|
from frappe import qb
|
||||||
|
|
||||||
@@ -2205,6 +2208,12 @@ def build_qb_match_conditions(doctype, user=None) -> list:
|
|||||||
for filter in match_filters:
|
for filter in match_filters:
|
||||||
for d, names in filter.items():
|
for d, names in filter.items():
|
||||||
fieldname = d.lower().replace(" ", "_")
|
fieldname = d.lower().replace(" ", "_")
|
||||||
criterion.append(_dt[fieldname].isin(names))
|
field = _dt[fieldname]
|
||||||
|
|
||||||
|
cond = field.isin(names)
|
||||||
|
if not apply_strict_user_permissions:
|
||||||
|
cond = (Coalesce(field, "") == "") | field.isin(names)
|
||||||
|
|
||||||
|
criterion.append(cond)
|
||||||
|
|
||||||
return criterion
|
return criterion
|
||||||
|
|||||||
@@ -76,6 +76,7 @@
|
|||||||
"fieldname": "completion_date",
|
"fieldname": "completion_date",
|
||||||
"fieldtype": "Datetime",
|
"fieldtype": "Datetime",
|
||||||
"label": "Completion Date",
|
"label": "Completion Date",
|
||||||
|
"mandatory_depends_on": "eval:doc.repair_status==\"Completed\"",
|
||||||
"no_copy": 1
|
"no_copy": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -264,7 +265,7 @@
|
|||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2022-08-16 15:55:25.023471",
|
"modified": "2025-07-29 15:14:34.044564",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Assets",
|
"module": "Assets",
|
||||||
"name": "Asset Repair",
|
"name": "Asset Repair",
|
||||||
@@ -302,10 +303,11 @@
|
|||||||
"write": 1
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"row_format": "Dynamic",
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"states": [],
|
"states": [],
|
||||||
"title_field": "asset_name",
|
"title_field": "asset_name",
|
||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 1
|
"track_seen": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import add_months, cint, flt, getdate, time_diff_in_hours
|
from frappe.utils import add_months, cint, flt, get_link_to_form, getdate, time_diff_in_hours
|
||||||
|
|
||||||
import erpnext
|
import erpnext
|
||||||
from erpnext.accounts.general_ledger import make_gl_entries
|
from erpnext.accounts.general_ledger import make_gl_entries
|
||||||
@@ -20,6 +20,20 @@ class AssetRepair(AccountsController):
|
|||||||
self.set_stock_items_cost()
|
self.set_stock_items_cost()
|
||||||
self.calculate_total_repair_cost()
|
self.calculate_total_repair_cost()
|
||||||
|
|
||||||
|
def validate_asset(self):
|
||||||
|
if self.asset_doc.status in ("Sold", "Fully Depreciated", "Scrapped"):
|
||||||
|
frappe.throw(
|
||||||
|
_("Asset {0} is in {1} status and cannot be repaired.").format(
|
||||||
|
get_link_to_form("Asset", self.asset), self.asset_doc.status
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def validate_dates(self):
|
||||||
|
if self.completion_date and (getdate(self.failure_date) > getdate(self.completion_date)):
|
||||||
|
frappe.throw(
|
||||||
|
_("Completion Date can not be before Failure Date. Please adjust the dates accordingly.")
|
||||||
|
)
|
||||||
|
|
||||||
def update_status(self):
|
def update_status(self):
|
||||||
if self.repair_status == "Pending":
|
if self.repair_status == "Pending":
|
||||||
frappe.db.set_value("Asset", self.asset, "status", "Out of Order")
|
frappe.db.set_value("Asset", self.asset, "status", "Out of Order")
|
||||||
@@ -195,7 +209,7 @@ class AssetRepair(AccountsController):
|
|||||||
"voucher_type": self.doctype,
|
"voucher_type": self.doctype,
|
||||||
"voucher_no": self.name,
|
"voucher_no": self.name,
|
||||||
"cost_center": self.cost_center,
|
"cost_center": self.cost_center,
|
||||||
"posting_date": getdate(),
|
"posting_date": self.completion_date,
|
||||||
"against_voucher_type": "Purchase Invoice",
|
"against_voucher_type": "Purchase Invoice",
|
||||||
"against_voucher": self.purchase_invoice,
|
"against_voucher": self.purchase_invoice,
|
||||||
"company": self.company,
|
"company": self.company,
|
||||||
@@ -214,7 +228,7 @@ class AssetRepair(AccountsController):
|
|||||||
"voucher_type": self.doctype,
|
"voucher_type": self.doctype,
|
||||||
"voucher_no": self.name,
|
"voucher_no": self.name,
|
||||||
"cost_center": self.cost_center,
|
"cost_center": self.cost_center,
|
||||||
"posting_date": getdate(),
|
"posting_date": self.completion_date,
|
||||||
"company": self.company,
|
"company": self.company,
|
||||||
},
|
},
|
||||||
item=self,
|
item=self,
|
||||||
@@ -248,7 +262,7 @@ class AssetRepair(AccountsController):
|
|||||||
"voucher_type": self.doctype,
|
"voucher_type": self.doctype,
|
||||||
"voucher_no": self.name,
|
"voucher_no": self.name,
|
||||||
"cost_center": self.cost_center,
|
"cost_center": self.cost_center,
|
||||||
"posting_date": getdate(),
|
"posting_date": self.completion_date,
|
||||||
"company": self.company,
|
"company": self.company,
|
||||||
},
|
},
|
||||||
item=self,
|
item=self,
|
||||||
@@ -265,7 +279,7 @@ class AssetRepair(AccountsController):
|
|||||||
"voucher_type": self.doctype,
|
"voucher_type": self.doctype,
|
||||||
"voucher_no": self.name,
|
"voucher_no": self.name,
|
||||||
"cost_center": self.cost_center,
|
"cost_center": self.cost_center,
|
||||||
"posting_date": getdate(),
|
"posting_date": self.completion_date,
|
||||||
"against_voucher_type": "Stock Entry",
|
"against_voucher_type": "Stock Entry",
|
||||||
"against_voucher": self.stock_entry,
|
"against_voucher": self.stock_entry,
|
||||||
"company": self.company,
|
"company": self.company,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.utils import flt, nowdate
|
from frappe.utils import add_days, flt, nowdate
|
||||||
|
|
||||||
from erpnext.assets.doctype.asset.asset import (
|
from erpnext.assets.doctype.asset.asset import (
|
||||||
get_asset_account,
|
get_asset_account,
|
||||||
@@ -288,6 +288,7 @@ def create_asset_repair(**args):
|
|||||||
|
|
||||||
if args.submit:
|
if args.submit:
|
||||||
asset_repair.repair_status = "Completed"
|
asset_repair.repair_status = "Completed"
|
||||||
|
asset_repair.completion_date = add_days(args.failure_date, 1)
|
||||||
asset_repair.cost_center = frappe.db.get_value("Company", asset.company, "cost_center")
|
asset_repair.cost_center = frappe.db.get_value("Company", asset.company, "cost_center")
|
||||||
|
|
||||||
if args.stock_consumption:
|
if args.stock_consumption:
|
||||||
|
|||||||
Reference in New Issue
Block a user