diff --git a/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.json b/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.json index 6a73e4356dbdeec0bd8563f5f28e8b1a409514de..7820106682f73d66a6336017a77de935aff9e972 100644 --- a/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.json +++ b/erpnext/accounts/doctype/payment_terms_template/payment_terms_template.json @@ -1,84 +1,95 @@ { - "actions": [], - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:template_name", - "creation": "2017-08-10 15:34:28.058054", - "doctype": "DocType", - "editable_grid": 1, - "engine": "InnoDB", - "field_order": [ - "template_name", - "allocate_payment_based_on_payment_terms", - "terms" - ], - "fields": [ - { - "fieldname": "template_name", - "fieldtype": "Data", - "label": "Template Name", - "unique": 1 - }, - { - "fieldname": "terms", - "fieldtype": "Table", - "label": "Payment Terms", - "options": "Payment Terms Template Detail", - "reqd": 1 - }, - { - "default": "0", - "description": "If this checkbox is checked, paid amount will be splitted and allocated as per the amounts in payment schedule against each payment term", - "fieldname": "allocate_payment_based_on_payment_terms", - "fieldtype": "Check", - "label": "Allocate Payment Based On Payment Terms" - } - ], - "links": [], - "modified": "2020-04-01 15:35:18.112619", - "modified_by": "Administrator", - "module": "Accounts", - "name": "Payment Terms Template", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts User", - "share": 1, - "write": 1 - }, - { - "create": 1, - "delete": 1, - "email": 1, - "export": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Accounts Manager", - "share": 1, - "write": 1 - } - ], - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1 - } \ No newline at end of file + "actions": [], + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:template_name", + "creation": "2017-08-10 15:34:28.058054", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "template_name", + "allocate_payment_based_on_payment_terms", + "terms" + ], + "fields": [ + { + "fieldname": "template_name", + "fieldtype": "Data", + "label": "Template Name", + "unique": 1 + }, + { + "fieldname": "terms", + "fieldtype": "Table", + "label": "Payment Terms", + "options": "Payment Terms Template Detail", + "reqd": 1 + }, + { + "default": "0", + "description": "If this checkbox is checked, paid amount will be splitted and allocated as per the amounts in payment schedule against each payment term", + "fieldname": "allocate_payment_based_on_payment_terms", + "fieldtype": "Check", + "label": "Allocate Payment Based On Payment Terms" + } + ], + "links": [], + "modified": "2024-04-07 11:26:42.021585", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Payment Terms Template", + "naming_rule": "By fieldname", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "share": 1, + "write": 1 + }, + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "share": 1, + "write": 1 + }, + { + "email": 1, + "export": 1, + "print": 1, + "report": 1, + "role": "All", + "select": 1, + "share": 1 + } + ], + "sort_field": "creation", + "sort_order": "DESC", + "states": [], + "track_changes": 1 +} diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 7b402465d24f80432c2a3d619e8834467a760732..80aec45ae253253ffc274c6632e36b5abbd8b1a3 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -1090,7 +1090,12 @@ def get_rounded_tax_amount(itemised_tax, precision): row["tax_amount"] = flt(row["tax_amount"], precision) -class init_landed_taxes_and_totals(object): +@frappe.whitelist() +def get_rounding_tax_settings(): + return frappe.db.get_single_value("Accounts Settings", "round_row_wise_tax") + + +class init_landed_taxes_and_totals: def __init__(self, doc): self.doc = doc self.tax_field = "taxes" if self.doc.doctype == "Landed Cost Voucher" else "additional_costs" diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index e4b47f6fb216eba8cb8c1a453873458e40dbd088..f0af454772db70aec3f1065d7f70d308a87a0d08 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -210,10 +210,12 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { }); } - frappe.db.get_single_value("Accounts Settings", "round_row_wise_tax") - .then((round_row_wise_tax) => { - frappe.flags.round_row_wise_tax = round_row_wise_tax; - }) + frappe.call({ + method: "erpnext.controllers.taxes_and_totals.get_rounding_tax_settings", + callback: function(r) { + frappe.flags.round_off_settings = r.message; + } + }); } determine_exclusive_rate() { diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 5ae3b2dbfba6f93852cb6d1f4a72362e702f4d08..7b966c0febc04d33cbc91466b7db980fa3307334 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -274,9 +274,14 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } toggle_enable_for_stock_uom(field) { - frappe.db.get_single_value('Stock Settings', field) - .then(value => { - this.frm.fields_dict["items"].grid.toggle_enable("stock_qty", value); + frappe.call({ + method: 'erpnext.stock.doctype.stock_settings.stock_settings.get_enable_stock_uom_editing', + callback: (r) => { + if (r.message) { + var value = r.message[field]; + this.frm.fields_dict["items"].grid.toggle_enable("stock_qty", value); + } + } }); } diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index 32465fabdf41873ddfe839342edf1cb33d2d03ab..99a17a21d4c39d680dc3a84c29248b4f1ca0ebf8 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -101,17 +101,27 @@ frappe.ui.form.on("Sales Order", { } if (frm.doc.docstatus === 0) { - frappe.db.get_single_value("Stock Settings", "enable_stock_reservation").then((value) => { - if (!value) { - // If `Stock Reservation` is disabled in Stock Settings, set Reserve Stock to 0 and make the field read-only and hidden. - frm.set_value("reserve_stock", 0); - frm.set_df_property("reserve_stock", "read_only", 1); - frm.set_df_property("reserve_stock", "hidden", 1); - frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'hidden', 1); - frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'default', 0); - frm.fields_dict.items.grid.update_docfield_property('reserve_stock', 'read_only', 1); - } - }) + frappe.call({ + method: "erpnext.selling.doctype.sales_order.sales_order.get_stock_reservation_status", + callback: function (r) { + if (!r.message) { + frm.set_value("reserve_stock", 0); + frm.set_df_property("reserve_stock", "read_only", 1); + frm.set_df_property("reserve_stock", "hidden", 1); + frm.fields_dict.items.grid.update_docfield_property("reserve_stock", "hidden", 1); + frm.fields_dict.items.grid.update_docfield_property( + "reserve_stock", + "default", + 0 + ); + frm.fields_dict.items.grid.update_docfield_property( + "reserve_stock", + "read_only", + 1 + ); + } + }, + }); } } diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index e39d6f1d27fe96438580a5ee4af758366c037d0b..5067bc2ff027e386f84d508cfdd4ca42cf715fbf 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1903,3 +1903,8 @@ def get_work_order_items(sales_order, for_raw_material_request=0): ) return items + + +@frappe.whitelist() +def get_stock_reservation_status(): + return frappe.db.get_single_value("Stock Settings", "enable_stock_reservation") diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index a5df779940906179d979e1932fbaee228ee2cf01..7b5449bd8a4cce6e84a78d79541a86010d4cb93f 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.py +++ b/erpnext/stock/doctype/stock_settings/stock_settings.py @@ -307,3 +307,13 @@ def clean_all_descriptions(): clean_description = clean_html(item.description) if item.description != clean_description: frappe.db.set_value("Item", item.name, "description", clean_description) + + +@frappe.whitelist() +def get_enable_stock_uom_editing(): + return frappe.get_cached_value( + "Stock Settings", + None, + ["allow_to_edit_stock_uom_qty_for_sales", "allow_to_edit_stock_uom_qty_for_purchase"], + as_dict=1, + )