feat: separated discount accounting settings for sales and purchase
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.json b/erpnext/buying/doctype/buying_settings/buying_settings.json
index 50321ba..90e6975 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.json
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.json
@@ -20,6 +20,7 @@
"maintain_same_rate",
"allow_multiple_items",
"bill_for_rejected_quantity_in_purchase_invoice",
+ "enable_discount_accounting",
"subcontract",
"backflush_raw_materials_of_subcontract_based_on",
"column_break_11",
@@ -133,6 +134,13 @@
{
"fieldname": "column_break_12",
"fieldtype": "Column Break"
+ },
+ {
+ "default": "0",
+ "description": "If enabled, additional ledger entries will be made for discounts in a separate Discount Account",
+ "fieldname": "enable_discount_accounting",
+ "fieldtype": "Check",
+ "label": "Enable Discount Accounting"
}
],
"icon": "fa fa-cog",
@@ -140,7 +148,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
- "modified": "2022-01-27 17:57:58.367048",
+ "modified": "2022-04-08 07:48:12.632498",
"modified_by": "Administrator",
"module": "Buying",
"name": "Buying Settings",
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.py b/erpnext/buying/doctype/buying_settings/buying_settings.py
index 5507254..4d266e1 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.py
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.py
@@ -6,9 +6,14 @@
import frappe
from frappe.model.document import Document
+from frappe.custom.doctype.property_setter.property_setter import make_property_setter
+from frappe.utils import cint
class BuyingSettings(Document):
+ def on_update(self):
+ self.toggle_discount_accounting_fields()
+
def validate(self):
for key in ["supplier_group", "supp_master_name", "maintain_same_rate", "buying_price_list"]:
frappe.db.set_default(key, self.get(key, ""))
@@ -21,3 +26,60 @@
self.get("supp_master_name") == "Naming Series",
hide_name_field=False,
)
+
+ def toggle_discount_accounting_fields(self):
+ enable_discount_accounting = cint(self.enable_discount_accounting)
+
+ make_property_setter(
+ "Purchase Invoice Item",
+ "discount_account",
+ "hidden",
+ not (enable_discount_accounting),
+ "Check",
+ validate_fields_for_doctype=False,
+ )
+ if enable_discount_accounting:
+ make_property_setter(
+ "Purchase Invoice Item",
+ "discount_account",
+ "mandatory_depends_on",
+ "eval: doc.discount_amount",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
+ else:
+ make_property_setter(
+ "Purchase Invoice Item",
+ "discount_account",
+ "mandatory_depends_on",
+ "",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
+
+ make_property_setter(
+ "Purchase Invoice",
+ "additional_discount_account",
+ "hidden",
+ not (enable_discount_accounting),
+ "Check",
+ validate_fields_for_doctype=False,
+ )
+ if enable_discount_accounting:
+ make_property_setter(
+ "Purchase Invoice",
+ "additional_discount_account",
+ "mandatory_depends_on",
+ "eval: doc.discount_amount",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
+ else:
+ make_property_setter(
+ "Purchase Invoice",
+ "additional_discount_account",
+ "mandatory_depends_on",
+ "",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
\ No newline at end of file
diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.json b/erpnext/selling/doctype/selling_settings/selling_settings.json
index 7c4a3f6..2c880ee 100644
--- a/erpnext/selling/doctype/selling_settings/selling_settings.json
+++ b/erpnext/selling/doctype/selling_settings/selling_settings.json
@@ -27,7 +27,8 @@
"column_break_5",
"allow_multiple_items",
"allow_against_multiple_purchase_orders",
- "hide_tax_id"
+ "hide_tax_id",
+ "enable_discount_accounting"
],
"fields": [
{
@@ -164,6 +165,13 @@
"fieldname": "editable_bundle_item_rates",
"fieldtype": "Check",
"label": "Calculate Product Bundle Price based on Child Items' Rates"
+ },
+ {
+ "default": "0",
+ "description": "If enabled, additional ledger entries will be made for discounts in a separate Discount Account",
+ "fieldname": "enable_discount_accounting",
+ "fieldtype": "Check",
+ "label": "Enable Discount Accounting"
}
],
"icon": "fa fa-cog",
@@ -171,7 +179,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
- "modified": "2022-02-04 15:41:59.939261",
+ "modified": "2022-04-08 07:48:48.074220",
"modified_by": "Administrator",
"module": "Selling",
"name": "Selling Settings",
diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py
index 29e4712..c656c52 100644
--- a/erpnext/selling/doctype/selling_settings/selling_settings.py
+++ b/erpnext/selling/doctype/selling_settings/selling_settings.py
@@ -14,6 +14,7 @@
def on_update(self):
self.toggle_hide_tax_id()
self.toggle_editable_rate_for_bundle_items()
+ self.toggle_discount_accounting_fields()
def validate(self):
for key in [
@@ -58,3 +59,60 @@
"Check",
validate_fields_for_doctype=False,
)
+
+ def toggle_discount_accounting_fields(self):
+ enable_discount_accounting = cint(self.enable_discount_accounting)
+
+ make_property_setter(
+ "Sales Invoice Item",
+ "discount_account",
+ "hidden",
+ not (enable_discount_accounting),
+ "Check",
+ validate_fields_for_doctype=False,
+ )
+ if enable_discount_accounting:
+ make_property_setter(
+ "Sales Invoice Item",
+ "discount_account",
+ "mandatory_depends_on",
+ "eval: doc.discount_amount",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
+ else:
+ make_property_setter(
+ "Sales Invoice Item",
+ "discount_account",
+ "mandatory_depends_on",
+ "",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
+
+ make_property_setter(
+ "Sales Invoice",
+ "additional_discount_account",
+ "hidden",
+ not (enable_discount_accounting),
+ "Check",
+ validate_fields_for_doctype=False,
+ )
+ if enable_discount_accounting:
+ make_property_setter(
+ "Sales Invoice",
+ "additional_discount_account",
+ "mandatory_depends_on",
+ "eval: doc.discount_amount",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
+ else:
+ make_property_setter(
+ "Sales Invoice",
+ "additional_discount_account",
+ "mandatory_depends_on",
+ "",
+ "Code",
+ validate_fields_for_doctype=False,
+ )
\ No newline at end of file