mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-31 18:59:08 +00:00
Merge pull request #51125 from frappe/version-14-hotfix
chore: release v14
This commit is contained in:
@@ -19,7 +19,7 @@ frappe.ui.form.on("Currency Exchange Settings", {
|
|||||||
to: "{to_currency}",
|
to: "{to_currency}",
|
||||||
};
|
};
|
||||||
add_param(frm, r.message, params, result);
|
add_param(frm, r.message, params, result);
|
||||||
} else if (frm.doc.service_provider == "frankfurter.dev") {
|
} else if (["frankfurter.app", "frankfurter.dev"].includes(frm.doc.service_provider)) {
|
||||||
let result = ["rates", "{to_currency}"];
|
let result = ["rates", "{to_currency}"];
|
||||||
let params = {
|
let params = {
|
||||||
base: "{from_currency}",
|
base: "{from_currency}",
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class CurrencyExchangeSettings(Document):
|
|||||||
self.append("req_params", {"key": "date", "value": "{transaction_date}"})
|
self.append("req_params", {"key": "date", "value": "{transaction_date}"})
|
||||||
self.append("req_params", {"key": "from", "value": "{from_currency}"})
|
self.append("req_params", {"key": "from", "value": "{from_currency}"})
|
||||||
self.append("req_params", {"key": "to", "value": "{to_currency}"})
|
self.append("req_params", {"key": "to", "value": "{to_currency}"})
|
||||||
elif self.service_provider == "frankfurter.dev":
|
elif self.service_provider in ("frankfurter.dev", "frankfurter.app"):
|
||||||
self.set("result_key", [])
|
self.set("result_key", [])
|
||||||
self.set("req_params", [])
|
self.set("req_params", [])
|
||||||
|
|
||||||
@@ -80,9 +80,11 @@ class CurrencyExchangeSettings(Document):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_api_endpoint(service_provider: str | None = None, use_http: bool = False):
|
def get_api_endpoint(service_provider: str | None = None, use_http: bool = False):
|
||||||
if service_provider and service_provider in ["exchangerate.host", "frankfurter.dev"]:
|
if service_provider and service_provider in ["exchangerate.host", "frankfurter.dev", "frankfurter.app"]:
|
||||||
if service_provider == "exchangerate.host":
|
if service_provider == "exchangerate.host":
|
||||||
api = "api.exchangerate.host/convert"
|
api = "api.exchangerate.host/convert"
|
||||||
|
elif service_provider == "frankfurter.app":
|
||||||
|
api = "api.frankfurter.app/{transaction_date}"
|
||||||
elif service_provider == "frankfurter.dev":
|
elif service_provider == "frankfurter.dev":
|
||||||
api = "api.frankfurter.dev/v1/{transaction_date}"
|
api = "api.frankfurter.dev/v1/{transaction_date}"
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "rate",
|
"fieldname": "rate",
|
||||||
"fieldtype": "Int",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
@@ -199,7 +199,7 @@
|
|||||||
"collapsible": 0,
|
"collapsible": 0,
|
||||||
"columns": 0,
|
"columns": 0,
|
||||||
"fieldname": "amount",
|
"fieldname": "amount",
|
||||||
"fieldtype": "Int",
|
"fieldtype": "Currency",
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
@@ -221,7 +221,7 @@
|
|||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
@@ -324,7 +324,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2018-01-10 18:32:36.201124",
|
"modified": "2025-12-10 08:06:40.611761",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Share Balance",
|
"name": "Share Balance",
|
||||||
@@ -339,4 +339,4 @@
|
|||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 0
|
"track_seen": 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1532,11 +1532,7 @@ def get_straight_line_or_manual_depr_amount(asset, row, schedule_idx, number_of_
|
|||||||
# if the Depreciation Schedule is being prepared for the first time
|
# if the Depreciation Schedule is being prepared for the first time
|
||||||
else:
|
else:
|
||||||
if row.daily_prorata_based:
|
if row.daily_prorata_based:
|
||||||
amount = (
|
amount = flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life)
|
||||||
flt(asset.gross_purchase_amount)
|
|
||||||
- flt(asset.opening_accumulated_depreciation)
|
|
||||||
- flt(row.expected_value_after_useful_life)
|
|
||||||
)
|
|
||||||
total_days = (
|
total_days = (
|
||||||
date_diff(
|
date_diff(
|
||||||
get_last_day(
|
get_last_day(
|
||||||
@@ -1548,7 +1544,11 @@ def get_straight_line_or_manual_depr_amount(asset, row, schedule_idx, number_of_
|
|||||||
),
|
),
|
||||||
add_days(
|
add_days(
|
||||||
get_last_day(
|
get_last_day(
|
||||||
add_months(row.depreciation_start_date, -1 * row.frequency_of_depreciation)
|
add_months(
|
||||||
|
row.depreciation_start_date,
|
||||||
|
(row.frequency_of_depreciation * (asset.number_of_depreciations_booked + 1))
|
||||||
|
* -1,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
1,
|
1,
|
||||||
),
|
),
|
||||||
@@ -1571,11 +1571,9 @@ def get_straight_line_or_manual_depr_amount(asset, row, schedule_idx, number_of_
|
|||||||
|
|
||||||
return daily_depr_amount * (date_diff(to_date, from_date) + 1)
|
return daily_depr_amount * (date_diff(to_date, from_date) + 1)
|
||||||
else:
|
else:
|
||||||
return (
|
return (flt(asset.gross_purchase_amount) - flt(row.expected_value_after_useful_life)) / flt(
|
||||||
flt(asset.gross_purchase_amount)
|
row.total_number_of_depreciations
|
||||||
- flt(asset.opening_accumulated_depreciation)
|
)
|
||||||
- flt(row.expected_value_after_useful_life)
|
|
||||||
) / flt(row.total_number_of_depreciations - asset.number_of_depreciations_booked)
|
|
||||||
|
|
||||||
|
|
||||||
def get_shift_depr_amount(asset, row, schedule_idx):
|
def get_shift_depr_amount(asset, row, schedule_idx):
|
||||||
|
|||||||
@@ -660,7 +660,7 @@ class TestDepreciationMethods(AssetSetup):
|
|||||||
available_for_use_date="2030-06-06",
|
available_for_use_date="2030-06-06",
|
||||||
is_existing_asset=1,
|
is_existing_asset=1,
|
||||||
number_of_depreciations_booked=2,
|
number_of_depreciations_booked=2,
|
||||||
opening_accumulated_depreciation=47095.89,
|
opening_accumulated_depreciation=47178.08,
|
||||||
expected_value_after_useful_life=10000,
|
expected_value_after_useful_life=10000,
|
||||||
depreciation_start_date="2032-12-31",
|
depreciation_start_date="2032-12-31",
|
||||||
total_number_of_depreciations=3,
|
total_number_of_depreciations=3,
|
||||||
@@ -668,7 +668,7 @@ class TestDepreciationMethods(AssetSetup):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(asset.status, "Draft")
|
self.assertEqual(asset.status, "Draft")
|
||||||
expected_schedules = [["2032-12-31", 42904.11, 90000.0]]
|
expected_schedules = [["2032-12-31", 30000.0, 77178.08], ["2033-06-06", 12821.92, 90000.0]]
|
||||||
schedules = [
|
schedules = [
|
||||||
[cstr(d.schedule_date), flt(d.depreciation_amount, 2), d.accumulated_depreciation_amount]
|
[cstr(d.schedule_date), flt(d.depreciation_amount, 2), d.accumulated_depreciation_amount]
|
||||||
for d in asset.get("schedules")
|
for d in asset.get("schedules")
|
||||||
|
|||||||
@@ -377,4 +377,4 @@ execute:frappe.db.set_single_value("Accounts Settings", "receivable_payable_fetc
|
|||||||
erpnext.patches.v14_0.set_update_price_list_based_on
|
erpnext.patches.v14_0.set_update_price_list_based_on
|
||||||
erpnext.patches.v14_0.rename_group_by_to_categorize_by_in_custom_reports
|
erpnext.patches.v14_0.rename_group_by_to_categorize_by_in_custom_reports
|
||||||
erpnext.patches.v14_0.update_full_name_in_contract
|
erpnext.patches.v14_0.update_full_name_in_contract
|
||||||
erpnext.patches.v16_0.update_currency_exchange_settings_for_frankfurter
|
erpnext.patches.v16_0.update_currency_exchange_settings_for_frankfurter #2025-12-11
|
||||||
|
|||||||
@@ -2,8 +2,13 @@ import frappe
|
|||||||
|
|
||||||
|
|
||||||
def execute():
|
def execute():
|
||||||
|
settings_meta = frappe.get_meta("Currency Exchange Settings")
|
||||||
settings = frappe.get_doc("Currency Exchange Settings")
|
settings = frappe.get_doc("Currency Exchange Settings")
|
||||||
if settings.service_provider != "frankfurter.app":
|
|
||||||
|
if (
|
||||||
|
"frankfurter.dev" not in settings_meta.get_options("service_provider").split("\n")
|
||||||
|
or settings.service_provider != "frankfurter.app"
|
||||||
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
settings.service_provider = "frankfurter.dev"
|
settings.service_provider = "frankfurter.dev"
|
||||||
|
|||||||
@@ -309,8 +309,9 @@ class TransactionDeletionRecord(Document):
|
|||||||
self.db_set("error_log", None)
|
self.db_set("error_log", None)
|
||||||
|
|
||||||
def get_doctypes_to_be_ignored_list(self):
|
def get_doctypes_to_be_ignored_list(self):
|
||||||
singles = frappe.get_all("DocType", filters={"issingle": 1}, pluck="name")
|
doctypes_to_be_ignored_list = frappe.get_all(
|
||||||
doctypes_to_be_ignored_list = singles
|
"DocType", or_filters=[["issingle", "=", 1], ["is_virtual", "=", 1]], pluck="name"
|
||||||
|
)
|
||||||
for doctype in self.doctypes_to_be_ignored:
|
for doctype in self.doctypes_to_be_ignored:
|
||||||
doctypes_to_be_ignored_list.append(doctype.doctype_name)
|
doctypes_to_be_ignored_list.append(doctype.doctype_name)
|
||||||
|
|
||||||
|
|||||||
@@ -158,7 +158,7 @@ def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20, ord
|
|||||||
customer = contact_doc.get_link_for("Customer")
|
customer = contact_doc.get_link_for("Customer")
|
||||||
|
|
||||||
ignore_permissions = False
|
ignore_permissions = False
|
||||||
if is_website_user():
|
if is_website_user() and user != "Guest":
|
||||||
if not filters:
|
if not filters:
|
||||||
filters = {}
|
filters = {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user