Merge branch 'develop' into enable-discount-accounting
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
index 703e93c..676c6a8 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
@@ -12,6 +12,7 @@
"role_allowed_to_over_bill",
"make_payment_via_journal_entry",
"column_break_11",
+ "enable_discount_accounting",
"check_supplier_invoice_uniqueness",
"unlink_payment_on_cancellation_of_invoice",
"automatically_fetch_payment_terms",
@@ -261,6 +262,12 @@
"fieldname": "post_change_gl_entries",
"fieldtype": "Check",
"label": "Create Ledger Entries for Change Amount"
+ },
+ {
+ "default": "0",
+ "fieldname": "enable_discount_accounting",
+ "fieldtype": "Check",
+ "label": "Enable Discount Accounting"
}
],
"icon": "icon-cog",
@@ -268,7 +275,7 @@
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
- "modified": "2021-06-17 20:26:03.721202",
+ "modified": "2021-07-05 14:56:19.820731",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Accounts Settings",
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py
index ac4a2d6..9e33eb3 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py
@@ -21,6 +21,7 @@
self.validate_stale_days()
self.enable_payment_schedule_in_print()
+ self.toggle_discount_accounting_fields()
def validate_stale_days(self):
if not self.allow_stale and cint(self.stale_days) <= 0:
@@ -33,3 +34,9 @@
for doctype in ("Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"):
make_property_setter(doctype, "due_date", "print_hide", show_in_print, "Check", validate_fields_for_doctype=False)
make_property_setter(doctype, "payment_schedule", "print_hide", 0 if show_in_print else 1, "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)
+ make_property_setter("Item", "default_discount_account", "hidden", not(enable_discount_accounting), "Check", validate_fields_for_doctype=False)
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index bb55651..8672e7b 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -510,6 +510,14 @@
}
});
+// Discount Account in Details Table
+// --------------------------------
+cur_frm.set_query("discount_account", "items", function(doc) {
+ return{
+ query: "erpnext.controllers.queries.get_income_account",
+ filters: {'company': doc.company}
+ }
+});
// Cost Center in Details Table
// -----------------------------
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 55a5b99..15e7951 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -845,6 +845,7 @@
self.allocate_advance_taxes(gl_entries)
self.make_item_gl_entries(gl_entries)
+ self.make_discount_gl_entries(gl_entries)
# merge gl entries before adding pos entries
gl_entries = merge_similar_entries(gl_entries)
@@ -958,6 +959,40 @@
erpnext.is_perpetual_inventory_enabled(self.company):
gl_entries += super(SalesInvoice, self).get_gl_entries()
+ def make_discount_gl_entries(self, gl_entries):
+ enable_discount_accounting = cint(frappe.db.get_single_value('Accounts Settings', 'enable_discount_accounting'))
+
+ if enable_discount_accounting:
+ for item in self.get("items"):
+ if item.get('discount_amount') and item.get('discount_account'):
+ account_currency = get_account_currency(item.discount_account)
+ gl_entries.append(
+ self.get_gl_dict({
+ "account": item.discount_account,
+ "against": self.customer,
+ "debit": flt(item.discount_amount),
+ "debit_in_account_currency": flt(item.discount_amount),
+ "cost_center": self.cost_center,
+ "project": self.project
+ }, account_currency, item=self)
+ )
+
+ income_account = (item.income_account
+ if (not item.enable_deferred_revenue or self.is_return)
+ else item.deferred_revenue_account)
+
+ account_currency = get_account_currency(income_account)
+ gl_entries.append(
+ self.get_gl_dict({
+ "account": income_account,
+ "against": self.customer,
+ "credit": flt(item.discount_amount),
+ "credit_in_account_currency": flt(item.discount_amount),
+ "cost_center": item.cost_center,
+ "project": item.project or self.project
+ }, account_currency, item=item)
+ )
+
def make_loyalty_point_redemption_gle(self, gl_entries):
if cint(self.redeem_loyalty_points):
gl_entries.append(
diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
index 8e6952a..b65903b 100644
--- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
+++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
@@ -63,6 +63,7 @@
"finance_book",
"col_break4",
"expense_account",
+ "discount_account",
"deferred_revenue",
"deferred_revenue_account",
"service_stop_date",
@@ -821,12 +822,18 @@
"no_copy": 1,
"options": "currency",
"read_only": 1
+ },
+ {
+ "fieldname": "discount_account",
+ "fieldtype": "Link",
+ "label": "Discount Account",
+ "options": "Account"
}
],
"idx": 1,
"istable": 1,
"links": [],
- "modified": "2021-02-23 01:05:22.123527",
+ "modified": "2021-07-05 15:07:22.857128",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Sales Invoice Item",
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index 6fed9ef..f1c413e 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -91,6 +91,7 @@
"is_sales_item",
"column_break3",
"max_discount",
+ "default_discount_account",
"deferred_revenue",
"deferred_revenue_account",
"enable_deferred_revenue",
@@ -1058,6 +1059,12 @@
"fieldname": "website_image_alt",
"fieldtype": "Data",
"label": "Image Description"
+ },
+ {
+ "fieldname": "default_discount_account",
+ "fieldtype": "Link",
+ "label": "Default Discount Account",
+ "options": "Account"
}
],
"has_web_view": 1,
@@ -1067,7 +1074,7 @@
"index_web_pages_for_search": 1,
"links": [],
"max_attachments": 1,
- "modified": "2021-03-18 14:04:38.575519",
+ "modified": "2021-07-06 00:46:15.878648",
"modified_by": "Administrator",
"module": "Stock",
"name": "Item",
@@ -1138,4 +1145,4 @@
"sort_order": "DESC",
"title_field": "item_name",
"track_changes": 1
-}
+}
\ No newline at end of file
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index ca174a3..662ca37 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -288,6 +288,7 @@
"warehouse": warehouse,
"income_account": get_default_income_account(args, item_defaults, item_group_defaults, brand_defaults),
"expense_account": expense_account or get_default_expense_account(args, item_defaults, item_group_defaults, brand_defaults) ,
+ "discount_account": None or get_default_discount_account(args, item_defaults),
"cost_center": get_default_cost_center(args, item_defaults, item_group_defaults, brand_defaults),
'has_serial_no': item.has_serial_no,
'has_batch_no': item.has_batch_no,
@@ -590,6 +591,10 @@
or brand.get("expense_account")
or args.expense_account)
+def get_default_discount_account(args, item_defaults):
+ return (item_defaults.default_discount_account
+ or args.discount_account)
+
def get_default_deferred_account(args, item, fieldname=None):
if item.get("enable_deferred_revenue") or item.get("enable_deferred_expense"):
return (item.get(fieldname)