Merge pull request #36578 from ruthra-kumar/toggle_uom_hiding_on_print
fix: unhide `uom` and `stock_uom` fields in print view
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.json b/erpnext/accounts/doctype/journal_entry/journal_entry.json
index 80e7222..80df0ff 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.json
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.json
@@ -9,6 +9,7 @@
"engine": "InnoDB",
"field_order": [
"entry_type_and_date",
+ "is_system_generated",
"title",
"voucher_type",
"naming_series",
@@ -88,7 +89,7 @@
"label": "Entry Type",
"oldfieldname": "voucher_type",
"oldfieldtype": "Select",
- "options": "Journal Entry\nInter Company Journal Entry\nBank Entry\nCash Entry\nCredit Card Entry\nDebit Note\nCredit Note\nContra Entry\nExcise Entry\nWrite Off Entry\nOpening Entry\nDepreciation Entry\nExchange Rate Revaluation\nExchange Gain Or Loss\nDeferred Revenue\nDeferred Expense",
+ "options": "Journal Entry\nInter Company Journal Entry\nBank Entry\nCash Entry\nCredit Card Entry\nDebit Note\nCredit Note\nContra Entry\nExcise Entry\nWrite Off Entry\nOpening Entry\nDepreciation Entry\nExchange Rate Revaluation\nExchange Gain Or Loss\nDeferred Revenue\nDeferred Expense\nReversal Of ITC",
"reqd": 1,
"search_index": 1
},
@@ -533,57 +534,28 @@
"label": "Process Deferred Accounting",
"options": "Process Deferred Accounting",
"read_only": 1
+ },
+ {
+ "default": "0",
+ "depends_on": "eval:doc.is_system_generated == 1;",
+ "fieldname": "is_system_generated",
+ "fieldtype": "Check",
+ "label": "Is System Generated",
+ "no_copy": 1,
+ "read_only": 1
}
],
"icon": "fa fa-file-text",
"idx": 176,
"is_submittable": 1,
"links": [],
- "modified": "2023-03-01 14:58:59.286591",
+ "modified": "2023-08-10 14:32:22.366895",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Journal Entry",
"naming_rule": "By \"Naming Series\" field",
"owner": "Administrator",
- "permissions": [
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Accounts User",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "amend": 1,
- "cancel": 1,
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "import": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Accounts Manager",
- "share": 1,
- "submit": 1,
- "write": 1
- },
- {
- "email": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Auditor"
- }
- ],
+ "permissions": [],
"search_fields": "voucher_type,posting_date, due_date, cheque_no",
"sort_field": "modified",
"sort_order": "DESC",
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 22e092c..85ef6f7 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -797,6 +797,9 @@
def create_remarks(self):
r = []
+ if self.flags.skip_remarks_creation:
+ return
+
if self.user_remark:
r.append(_("Note: {0}").format(self.user_remark))
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index ea06e0e..3a9e80a 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -6,7 +6,7 @@
from frappe import _, msgprint, qb
from frappe.model.document import Document
from frappe.query_builder.custom import ConstantColumn
-from frappe.utils import flt, get_link_to_form, getdate, nowdate, today
+from frappe.utils import flt, fmt_money, get_link_to_form, getdate, nowdate, today
import erpnext
from erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation import (
@@ -657,6 +657,7 @@
"reference_name": inv.against_voucher,
"cost_center": erpnext.get_default_cost_center(company),
"exchange_rate": inv.exchange_rate,
+ "user_remark": f"{fmt_money(flt(inv.allocated_amount), currency=company_currency)} against {inv.against_voucher}",
},
{
"account": inv.account,
@@ -671,6 +672,7 @@
"reference_name": inv.voucher_no,
"cost_center": erpnext.get_default_cost_center(company),
"exchange_rate": inv.exchange_rate,
+ "user_remark": f"{fmt_money(flt(inv.allocated_amount), currency=company_currency)} from {inv.voucher_no}",
},
],
}
@@ -678,6 +680,9 @@
jv.flags.ignore_mandatory = True
jv.flags.ignore_exchange_rate = True
+ jv.remark = None
+ jv.flags.skip_remarks_creation = True
+ jv.is_system_generated = True
jv.submit()
if inv.difference_amount != 0:
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 04ec7be..2060c6c 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -478,7 +478,9 @@
@frappe.whitelist()
def get_manual_depreciation_entries(self):
- (_, _, depreciation_expense_account) = get_depreciation_accounts(self)
+ (_, _, depreciation_expense_account) = get_depreciation_accounts(
+ self.asset_category, self.company
+ )
gle = frappe.qb.DocType("GL Entry")
@@ -821,10 +823,10 @@
def make_journal_entry(asset_name):
asset = frappe.get_doc("Asset", asset_name)
(
- fixed_asset_account,
+ _,
accumulated_depreciation_account,
depreciation_expense_account,
- ) = get_depreciation_accounts(asset)
+ ) = get_depreciation_accounts(asset.asset_category, asset.company)
depreciation_cost_center, depreciation_series = frappe.get_cached_value(
"Company", asset.company, ["depreciation_cost_center", "series_for_depreciation_entry"]
diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py
index 0588065..e2a4b29 100644
--- a/erpnext/assets/doctype/asset/depreciation.py
+++ b/erpnext/assets/doctype/asset/depreciation.py
@@ -4,6 +4,8 @@
import frappe
from frappe import _
+from frappe.query_builder import Order
+from frappe.query_builder.functions import Max, Min
from frappe.utils import (
add_months,
cint,
@@ -43,11 +45,48 @@
failed_asset_names = []
error_log_names = []
- for asset_name in get_depreciable_assets(date):
- asset_doc = frappe.get_doc("Asset", asset_name)
+ depreciable_asset_depr_schedules_data = get_depreciable_asset_depr_schedules_data(date)
+
+ credit_and_debit_accounts_for_asset_category_and_company = {}
+ depreciation_cost_center_and_depreciation_series_for_company = (
+ get_depreciation_cost_center_and_depreciation_series_for_company()
+ )
+
+ accounting_dimensions = get_checks_for_pl_and_bs_accounts()
+
+ for asset_depr_schedule_data in depreciable_asset_depr_schedules_data:
+ (
+ asset_depr_schedule_name,
+ asset_name,
+ asset_category,
+ asset_company,
+ sch_start_idx,
+ sch_end_idx,
+ ) = asset_depr_schedule_data
+
+ if (
+ asset_category,
+ asset_company,
+ ) not in credit_and_debit_accounts_for_asset_category_and_company:
+ credit_and_debit_accounts_for_asset_category_and_company.update(
+ {
+ (asset_category, asset_company): get_credit_and_debit_accounts_for_asset_category_and_company(
+ asset_category, asset_company
+ ),
+ }
+ )
try:
- make_depreciation_entry_for_all_asset_depr_schedules(asset_doc, date)
+ make_depreciation_entry(
+ asset_depr_schedule_name,
+ date,
+ sch_start_idx,
+ sch_end_idx,
+ credit_and_debit_accounts_for_asset_category_and_company[(asset_category, asset_company)],
+ depreciation_cost_center_and_depreciation_series_for_company[asset_company],
+ accounting_dimensions,
+ )
+
frappe.db.commit()
except Exception as e:
frappe.db.rollback()
@@ -62,18 +101,36 @@
frappe.db.commit()
-def get_depreciable_assets(date):
- return frappe.db.sql_list(
- """select distinct a.name
- from tabAsset a, `tabAsset Depreciation Schedule` ads, `tabDepreciation Schedule` ds
- where a.name = ads.asset and ads.name = ds.parent and a.docstatus=1 and ads.docstatus=1
- and a.status in ('Submitted', 'Partially Depreciated')
- and a.calculate_depreciation = 1
- and ds.schedule_date<=%s
- and ifnull(ds.journal_entry, '')=''""",
- date,
+def get_depreciable_asset_depr_schedules_data(date):
+ a = frappe.qb.DocType("Asset")
+ ads = frappe.qb.DocType("Asset Depreciation Schedule")
+ ds = frappe.qb.DocType("Depreciation Schedule")
+
+ res = (
+ frappe.qb.from_(ads)
+ .join(a)
+ .on(ads.asset == a.name)
+ .join(ds)
+ .on(ads.name == ds.parent)
+ .select(ads.name, a.name, a.asset_category, a.company, Min(ds.idx) - 1, Max(ds.idx))
+ .where(a.calculate_depreciation == 1)
+ .where(a.docstatus == 1)
+ .where(ads.docstatus == 1)
+ .where(a.status.isin(["Submitted", "Partially Depreciated"]))
+ .where(ds.journal_entry.isnull())
+ .where(ds.schedule_date <= date)
+ .groupby(ads.name)
+ .orderby(a.creation, order=Order.desc)
)
+ acc_frozen_upto = get_acc_frozen_upto()
+ if acc_frozen_upto:
+ res = res.where(ds.schedule_date > acc_frozen_upto)
+
+ res = res.run()
+
+ return res
+
def make_depreciation_entry_for_all_asset_depr_schedules(asset_doc, date=None):
for row in asset_doc.get("finance_books"):
@@ -83,8 +140,60 @@
make_depreciation_entry(asset_depr_schedule_name, date)
+def get_acc_frozen_upto():
+ acc_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto")
+
+ if not acc_frozen_upto:
+ return
+
+ frozen_accounts_modifier = frappe.db.get_single_value(
+ "Accounts Settings", "frozen_accounts_modifier"
+ )
+
+ if frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator":
+ return getdate(acc_frozen_upto)
+
+ return
+
+
+def get_credit_and_debit_accounts_for_asset_category_and_company(asset_category, company):
+ (
+ _,
+ accumulated_depreciation_account,
+ depreciation_expense_account,
+ ) = get_depreciation_accounts(asset_category, company)
+
+ credit_account, debit_account = get_credit_and_debit_accounts(
+ accumulated_depreciation_account, depreciation_expense_account
+ )
+
+ return (credit_account, debit_account)
+
+
+def get_depreciation_cost_center_and_depreciation_series_for_company():
+ company_names = frappe.db.get_all("Company", pluck="name")
+
+ res = {}
+
+ for company_name in company_names:
+ depreciation_cost_center, depreciation_series = frappe.get_cached_value(
+ "Company", company_name, ["depreciation_cost_center", "series_for_depreciation_entry"]
+ )
+ res.update({company_name: (depreciation_cost_center, depreciation_series)})
+
+ return res
+
+
@frappe.whitelist()
-def make_depreciation_entry(asset_depr_schedule_name, date=None):
+def make_depreciation_entry(
+ asset_depr_schedule_name,
+ date=None,
+ sch_start_idx=None,
+ sch_end_idx=None,
+ credit_and_debit_accounts=None,
+ depreciation_cost_center_and_depreciation_series=None,
+ accounting_dimensions=None,
+):
frappe.has_permission("Journal Entry", throw=True)
if not date:
@@ -92,100 +201,144 @@
asset_depr_schedule_doc = frappe.get_doc("Asset Depreciation Schedule", asset_depr_schedule_name)
- asset_name = asset_depr_schedule_doc.asset
+ asset = frappe.get_doc("Asset", asset_depr_schedule_doc.asset)
- asset = frappe.get_doc("Asset", asset_name)
- (
- fixed_asset_account,
- accumulated_depreciation_account,
- depreciation_expense_account,
- ) = get_depreciation_accounts(asset)
+ if credit_and_debit_accounts:
+ credit_account, debit_account = credit_and_debit_accounts
+ else:
+ credit_account, debit_account = get_credit_and_debit_accounts_for_asset_category_and_company(
+ asset.asset_category, asset.company
+ )
- depreciation_cost_center, depreciation_series = frappe.get_cached_value(
- "Company", asset.company, ["depreciation_cost_center", "series_for_depreciation_entry"]
- )
+ if depreciation_cost_center_and_depreciation_series:
+ depreciation_cost_center, depreciation_series = depreciation_cost_center_and_depreciation_series
+ else:
+ depreciation_cost_center, depreciation_series = frappe.get_cached_value(
+ "Company", asset.company, ["depreciation_cost_center", "series_for_depreciation_entry"]
+ )
depreciation_cost_center = asset.cost_center or depreciation_cost_center
- accounting_dimensions = get_checks_for_pl_and_bs_accounts()
+ if not accounting_dimensions:
+ accounting_dimensions = get_checks_for_pl_and_bs_accounts()
- for d in asset_depr_schedule_doc.get("depreciation_schedule"):
- if not d.journal_entry and getdate(d.schedule_date) <= getdate(date):
- je = frappe.new_doc("Journal Entry")
- je.voucher_type = "Depreciation Entry"
- je.naming_series = depreciation_series
- je.posting_date = d.schedule_date
- je.company = asset.company
- je.finance_book = asset_depr_schedule_doc.finance_book
- je.remark = "Depreciation Entry against {0} worth {1}".format(asset_name, d.depreciation_amount)
+ depreciation_posting_error = None
- credit_account, debit_account = get_credit_and_debit_accounts(
- accumulated_depreciation_account, depreciation_expense_account
+ for d in asset_depr_schedule_doc.get("depreciation_schedule")[
+ sch_start_idx or 0 : sch_end_idx or len(asset_depr_schedule_doc.get("depreciation_schedule"))
+ ]:
+ try:
+ _make_journal_entry_for_depreciation(
+ asset_depr_schedule_doc,
+ asset,
+ date,
+ d,
+ sch_start_idx,
+ sch_end_idx,
+ depreciation_cost_center,
+ depreciation_series,
+ credit_account,
+ debit_account,
+ accounting_dimensions,
)
-
- credit_entry = {
- "account": credit_account,
- "credit_in_account_currency": d.depreciation_amount,
- "reference_type": "Asset",
- "reference_name": asset.name,
- "cost_center": depreciation_cost_center,
- }
-
- debit_entry = {
- "account": debit_account,
- "debit_in_account_currency": d.depreciation_amount,
- "reference_type": "Asset",
- "reference_name": asset.name,
- "cost_center": depreciation_cost_center,
- }
-
- for dimension in accounting_dimensions:
- if asset.get(dimension["fieldname"]) or dimension.get("mandatory_for_bs"):
- credit_entry.update(
- {
- dimension["fieldname"]: asset.get(dimension["fieldname"])
- or dimension.get("default_dimension")
- }
- )
-
- if asset.get(dimension["fieldname"]) or dimension.get("mandatory_for_pl"):
- debit_entry.update(
- {
- dimension["fieldname"]: asset.get(dimension["fieldname"])
- or dimension.get("default_dimension")
- }
- )
-
- je.append("accounts", credit_entry)
-
- je.append("accounts", debit_entry)
-
- je.flags.ignore_permissions = True
- je.flags.planned_depr_entry = True
- je.save()
-
- d.db_set("journal_entry", je.name)
-
- if not je.meta.get_workflow():
- je.submit()
- idx = cint(asset_depr_schedule_doc.finance_book_id)
- row = asset.get("finance_books")[idx - 1]
- row.value_after_depreciation -= d.depreciation_amount
- row.db_update()
-
- asset.db_set("depr_entry_posting_status", "Successful")
+ frappe.db.commit()
+ except Exception as e:
+ frappe.db.rollback()
+ depreciation_posting_error = e
asset.set_status()
- return asset_depr_schedule_doc
+ if not depreciation_posting_error:
+ asset.db_set("depr_entry_posting_status", "Successful")
+ return asset_depr_schedule_doc
+
+ raise depreciation_posting_error
-def get_depreciation_accounts(asset):
+def _make_journal_entry_for_depreciation(
+ asset_depr_schedule_doc,
+ asset,
+ date,
+ depr_schedule,
+ sch_start_idx,
+ sch_end_idx,
+ depreciation_cost_center,
+ depreciation_series,
+ credit_account,
+ debit_account,
+ accounting_dimensions,
+):
+ if not (sch_start_idx and sch_end_idx) and not (
+ not depr_schedule.journal_entry and getdate(depr_schedule.schedule_date) <= getdate(date)
+ ):
+ return
+
+ je = frappe.new_doc("Journal Entry")
+ je.voucher_type = "Depreciation Entry"
+ je.naming_series = depreciation_series
+ je.posting_date = depr_schedule.schedule_date
+ je.company = asset.company
+ je.finance_book = asset_depr_schedule_doc.finance_book
+ je.remark = "Depreciation Entry against {0} worth {1}".format(
+ asset.name, depr_schedule.depreciation_amount
+ )
+
+ credit_entry = {
+ "account": credit_account,
+ "credit_in_account_currency": depr_schedule.depreciation_amount,
+ "reference_type": "Asset",
+ "reference_name": asset.name,
+ "cost_center": depreciation_cost_center,
+ }
+
+ debit_entry = {
+ "account": debit_account,
+ "debit_in_account_currency": depr_schedule.depreciation_amount,
+ "reference_type": "Asset",
+ "reference_name": asset.name,
+ "cost_center": depreciation_cost_center,
+ }
+
+ for dimension in accounting_dimensions:
+ if asset.get(dimension["fieldname"]) or dimension.get("mandatory_for_bs"):
+ credit_entry.update(
+ {
+ dimension["fieldname"]: asset.get(dimension["fieldname"])
+ or dimension.get("default_dimension")
+ }
+ )
+
+ if asset.get(dimension["fieldname"]) or dimension.get("mandatory_for_pl"):
+ debit_entry.update(
+ {
+ dimension["fieldname"]: asset.get(dimension["fieldname"])
+ or dimension.get("default_dimension")
+ }
+ )
+
+ je.append("accounts", credit_entry)
+ je.append("accounts", debit_entry)
+
+ je.flags.ignore_permissions = True
+ je.flags.planned_depr_entry = True
+ je.save()
+
+ depr_schedule.db_set("journal_entry", je.name)
+
+ if not je.meta.get_workflow():
+ je.submit()
+ idx = cint(asset_depr_schedule_doc.finance_book_id)
+ row = asset.get("finance_books")[idx - 1]
+ row.value_after_depreciation -= depr_schedule.depreciation_amount
+ row.db_update()
+
+
+def get_depreciation_accounts(asset_category, company):
fixed_asset_account = accumulated_depreciation_account = depreciation_expense_account = None
accounts = frappe.db.get_value(
"Asset Category Account",
- filters={"parent": asset.asset_category, "company_name": asset.company},
+ filters={"parent": asset_category, "company_name": company},
fieldname=[
"fixed_asset_account",
"accumulated_depreciation_account",
@@ -201,7 +354,7 @@
if not accumulated_depreciation_account or not depreciation_expense_account:
accounts = frappe.get_cached_value(
- "Company", asset.company, ["accumulated_depreciation_account", "depreciation_expense_account"]
+ "Company", company, ["accumulated_depreciation_account", "depreciation_expense_account"]
)
if not accumulated_depreciation_account:
@@ -216,7 +369,7 @@
):
frappe.throw(
_("Please set Depreciation related Accounts in Asset Category {0} or Company {1}").format(
- asset.asset_category, asset.company
+ asset_category, company
)
)
@@ -565,8 +718,8 @@
def get_asset_details(asset, finance_book=None):
- fixed_asset_account, accumulated_depr_account, depr_expense_account = get_depreciation_accounts(
- asset
+ fixed_asset_account, accumulated_depr_account, _ = get_depreciation_accounts(
+ asset.asset_category, asset.company
)
disposal_account, depreciation_cost_center = get_disposal_account_and_cost_center(asset.company)
depreciation_cost_center = asset.cost_center or depreciation_cost_center
diff --git a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
index a1f0473..823b6e9 100644
--- a/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
+++ b/erpnext/assets/doctype/asset_value_adjustment/asset_value_adjustment.py
@@ -64,10 +64,10 @@
def make_depreciation_entry(self):
asset = frappe.get_doc("Asset", self.asset)
(
- fixed_asset_account,
+ _,
accumulated_depreciation_account,
depreciation_expense_account,
- ) = get_depreciation_accounts(asset)
+ ) = get_depreciation_accounts(asset.asset_category, asset.company)
depreciation_cost_center, depreciation_series = frappe.get_cached_value(
"Company", asset.company, ["depreciation_cost_center", "series_for_depreciation_entry"]
@@ -78,9 +78,7 @@
je.naming_series = depreciation_series
je.posting_date = self.date
je.company = self.company
- je.remark = _("Depreciation Entry against {0} worth {1}").format(
- self.asset, self.difference_amount
- )
+ je.remark = "Depreciation Entry against {0} worth {1}".format(self.asset, self.difference_amount)
je.finance_book = self.finance_book
credit_entry = {
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
index 158334f..fbfc1ac 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json
@@ -273,7 +273,9 @@
"fieldname": "html_llwp",
"fieldtype": "HTML",
"options": "<p>In your <b>Email Template</b>, you can use the following special variables:\n</p>\n<ul>\n <li>\n <code>{{ update_password_link }}</code>: A link where your supplier can set a new password to log into your portal.\n </li>\n <li>\n <code>{{ portal_link }}</code>: A link to this RFQ in your supplier portal.\n </li>\n <li>\n <code>{{ supplier_name }}</code>: The company name of your supplier.\n </li>\n <li>\n <code>{{ contact.salutation }} {{ contact.last_name }}</code>: The contact person of your supplier.\n </li><li>\n <code>{{ user_fullname }}</code>: Your full name.\n </li>\n </ul>\n<p></p>\n<p>Apart from these, you can access all values in this RFQ, like <code>{{ message_for_supplier }}</code> or <code>{{ terms }}</code>.</p>",
- "read_only": 1
+ "print_hide": 1,
+ "read_only": 1,
+ "report_hide": 1
},
{
"default": "1",
@@ -287,7 +289,7 @@
"index_web_pages_for_search": 1,
"is_submittable": 1,
"links": [],
- "modified": "2023-07-27 16:41:48.468873",
+ "modified": "2023-08-08 16:30:10.870429",
"modified_by": "Administrator",
"module": "Buying",
"name": "Request for Quotation",
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index d5eb464..44c68dc 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -429,7 +429,6 @@
"erpnext.controllers.accounts_controller.update_invoice_status",
"erpnext.accounts.doctype.fiscal_year.fiscal_year.auto_create_fiscal_year",
"erpnext.projects.doctype.task.task.set_tasks_as_overdue",
- "erpnext.assets.doctype.asset.depreciation.post_depreciation_entries",
"erpnext.stock.doctype.serial_no.serial_no.update_maintenance_status",
"erpnext.buying.doctype.supplier_scorecard.supplier_scorecard.refresh_scorecards",
"erpnext.setup.doctype.company.company.cache_companies_monthly_sales_history",
@@ -454,6 +453,7 @@
"erpnext.setup.doctype.email_digest.email_digest.send",
"erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.auto_update_latest_price_in_all_boms",
"erpnext.crm.utils.open_leads_opportunities_based_on_todays_event",
+ "erpnext.assets.doctype.asset.depreciation.post_depreciation_entries",
],
"monthly_long": [
"erpnext.accounts.deferred_revenue.process_deferred_accounting",
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index d53bace..d035ad6 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -262,7 +262,6 @@
erpnext.patches.v15_0.saudi_depreciation_warning
erpnext.patches.v15_0.delete_saudi_doctypes
erpnext.patches.v14_0.show_loan_management_deprecation_warning
-erpnext.patches.v14_0.update_subscription_details
execute:frappe.rename_doc("Report", "TDS Payable Monthly", "Tax Withholding Details", force=True)
[post_model_sync]
@@ -322,6 +321,7 @@
erpnext.patches.v14_0.update_closing_balances #14-07-2023
execute:frappe.db.set_single_value("Accounts Settings", "merge_similar_account_heads", 0)
erpnext.patches.v14_0.update_reference_type_in_journal_entry_accounts
+erpnext.patches.v14_0.update_subscription_details
# below migration patches should always run last
erpnext.patches.v14_0.migrate_gl_to_payment_ledger
execute:frappe.delete_doc_if_exists("Report", "Tax Detail")
diff --git a/erpnext/patches/v14_0/update_subscription_details.py b/erpnext/patches/v14_0/update_subscription_details.py
index 729ac18..58ab16d 100644
--- a/erpnext/patches/v14_0/update_subscription_details.py
+++ b/erpnext/patches/v14_0/update_subscription_details.py
@@ -10,7 +10,7 @@
frappe.db.set_value(
subscription_invoice.document_type,
subscription_invoice.invoice,
- "Subscription",
+ "subscription",
subscription_invoice.parent,
)
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index f4682c1..fa207ec 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -18,6 +18,7 @@
});
},
setup: function(frm) {
+ frm.__rename_queue = "long";
erpnext.company.setup_queries(frm);
frm.set_query("parent_company", function() {
diff --git a/erpnext/stock/report/item_shortage_report/item_shortage_report.py b/erpnext/stock/report/item_shortage_report/item_shortage_report.py
index 9fafe91..4bd9a10 100644
--- a/erpnext/stock/report/item_shortage_report/item_shortage_report.py
+++ b/erpnext/stock/report/item_shortage_report/item_shortage_report.py
@@ -40,7 +40,12 @@
item.item_name,
item.description,
)
- .where((bin.projected_qty < 0) & (wh.name == bin.warehouse) & (bin.item_code == item.name))
+ .where(
+ (item.disabled == 0)
+ & (bin.projected_qty < 0)
+ & (wh.name == bin.warehouse)
+ & (bin.item_code == item.name)
+ )
.orderby(bin.projected_qty)
)