mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-04 04:39:11 +00:00
refactor: rename interest_amount to interest, dunning_level
This commit is contained in:
@@ -200,7 +200,7 @@ frappe.ui.form.on("Dunning", {
|
|||||||
if (frm.doc.dunning_type) {
|
if (frm.doc.dunning_type) {
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method:
|
method:
|
||||||
"erpnext.accounts.doctype.dunning.dunning.get_dunning_letter_text",
|
"erpnext.accounts.doctype.dunning.dunning.get_dunning_letter_text",
|
||||||
args: {
|
args: {
|
||||||
dunning_type: frm.doc.dunning_type,
|
dunning_type: frm.doc.dunning_type,
|
||||||
language: frm.doc.language,
|
language: frm.doc.language,
|
||||||
@@ -223,12 +223,12 @@ frappe.ui.form.on("Dunning", {
|
|||||||
frm.trigger("calculate_overdue_days");
|
frm.trigger("calculate_overdue_days");
|
||||||
},
|
},
|
||||||
rate_of_interest: function (frm) {
|
rate_of_interest: function (frm) {
|
||||||
frm.trigger("calculate_interest_amount");
|
frm.trigger("calculate_interest");
|
||||||
},
|
},
|
||||||
dunning_fee: function (frm) {
|
dunning_fee: function (frm) {
|
||||||
frm.trigger("calculate_totals");
|
frm.trigger("calculate_totals");
|
||||||
},
|
},
|
||||||
overdue_payments_add: function(frm) {
|
overdue_payments_add: function (frm) {
|
||||||
frm.trigger("calculate_totals");
|
frm.trigger("calculate_totals");
|
||||||
},
|
},
|
||||||
overdue_payments_remove: function (frm) {
|
overdue_payments_remove: function (frm) {
|
||||||
@@ -245,16 +245,16 @@ frappe.ui.form.on("Dunning", {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
calculate_interest_amount: function (frm) {
|
calculate_interest: function (frm) {
|
||||||
frm.doc.overdue_payments.forEach((row) => {
|
frm.doc.overdue_payments.forEach((row) => {
|
||||||
const interest_per_year = row.outstanding * frm.doc.rate_of_interest / 100;
|
const interest_per_day = frm.doc.rate_of_interest / 100 / 365;
|
||||||
const interest_amount = flt((interest_per_year * cint(row.overdue_days)) / 365 || 0, precision("interest_amount"));
|
const interest = flt((interest_per_day * row.outstanding * cint(row.overdue_days)) / 365 || 0, precision("interest"));
|
||||||
frappe.model.set_value(row.doctype, row.name, "interest_amount", interest_amount);
|
frappe.model.set_value(row.doctype, row.name, "interest", interest);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
calculate_totals: function (frm) {
|
calculate_totals: function (frm) {
|
||||||
const total_interest = frm.doc.overdue_payments
|
const total_interest = frm.doc.overdue_payments
|
||||||
.reduce((prev, cur) => prev + cur.interest_amount, 0);
|
.reduce((prev, cur) => prev + cur.interest, 0);
|
||||||
const total_outstanding = frm.doc.overdue_payments
|
const total_outstanding = frm.doc.overdue_payments
|
||||||
.reduce((prev, cur) => prev + cur.outstanding, 0);
|
.reduce((prev, cur) => prev + cur.outstanding, 0);
|
||||||
const dunning_amount = flt(total_interest + frm.doc.dunning_fee, precision("dunning_amount"));
|
const dunning_amount = flt(total_interest + frm.doc.dunning_fee, precision("dunning_amount"));
|
||||||
@@ -268,7 +268,7 @@ frappe.ui.form.on("Dunning", {
|
|||||||
make_payment_entry: function (frm) {
|
make_payment_entry: function (frm) {
|
||||||
return frappe.call({
|
return frappe.call({
|
||||||
method:
|
method:
|
||||||
"erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry",
|
"erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry",
|
||||||
args: {
|
args: {
|
||||||
dt: frm.doc.doctype,
|
dt: frm.doc.doctype,
|
||||||
dn: frm.doc.name,
|
dn: frm.doc.name,
|
||||||
@@ -282,7 +282,7 @@ frappe.ui.form.on("Dunning", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
frappe.ui.form.on("Overdue Payment", {
|
frappe.ui.form.on("Overdue Payment", {
|
||||||
interest_amount: function(frm, cdt, cdn) {
|
interest: function (frm, cdt, cdn) {
|
||||||
frm.trigger("calculate_totals");
|
frm.trigger("calculate_totals");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -24,10 +24,11 @@ class Dunning(AccountsController):
|
|||||||
self.income_account = frappe.db.get_value("Company", self.company, "default_income_account")
|
self.income_account = frappe.db.get_value("Company", self.company, "default_income_account")
|
||||||
|
|
||||||
def validate_overdue_payments(self):
|
def validate_overdue_payments(self):
|
||||||
|
daily_interest = self.rate_of_interest / 100 / 365
|
||||||
|
|
||||||
for row in self.overdue_payments:
|
for row in self.overdue_payments:
|
||||||
row.overdue_days = (getdate(self.posting_date) - getdate(row.due_date)).days or 0
|
row.overdue_days = (getdate(self.posting_date) - getdate(row.due_date)).days or 0
|
||||||
interest_per_year = flt(row.outstanding) * flt(self.rate_of_interest) / 100
|
row.interest = row.outstanding * daily_interest * row.overdue_days
|
||||||
row.interest_amount = (interest_per_year * cint(row.overdue_days)) / 365
|
|
||||||
|
|
||||||
def validate_totals(self):
|
def validate_totals(self):
|
||||||
self.total_outstanding = sum(row.outstanding for row in self.overdue_payments)
|
self.total_outstanding = sum(row.outstanding for row in self.overdue_payments)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
"field_order": [
|
"field_order": [
|
||||||
"sales_invoice",
|
"sales_invoice",
|
||||||
"payment_schedule",
|
"payment_schedule",
|
||||||
|
"dunning_level",
|
||||||
"payment_term",
|
"payment_term",
|
||||||
"section_break_15",
|
"section_break_15",
|
||||||
"description",
|
"description",
|
||||||
@@ -16,21 +17,18 @@
|
|||||||
"mode_of_payment",
|
"mode_of_payment",
|
||||||
"column_break_5",
|
"column_break_5",
|
||||||
"invoice_portion",
|
"invoice_portion",
|
||||||
"section_break_9",
|
"section_break_16",
|
||||||
"payment_amount",
|
"payment_amount",
|
||||||
"outstanding",
|
"outstanding",
|
||||||
"paid_amount",
|
"paid_amount",
|
||||||
"discounted_amount",
|
"discounted_amount",
|
||||||
"column_break_3",
|
"interest"
|
||||||
"base_payment_amount",
|
|
||||||
"interest_amount"
|
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"columns": 2,
|
"columns": 2,
|
||||||
"fieldname": "payment_term",
|
"fieldname": "payment_term",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Payment Term",
|
"label": "Payment Term",
|
||||||
"options": "Payment Term",
|
"options": "Payment Term",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
@@ -79,10 +77,6 @@
|
|||||||
"label": "Invoice Portion",
|
"label": "Invoice Portion",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname": "section_break_9",
|
|
||||||
"fieldtype": "Section Break"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"columns": 2,
|
"columns": 2,
|
||||||
"fieldname": "payment_amount",
|
"fieldname": "payment_amount",
|
||||||
@@ -116,24 +110,13 @@
|
|||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname": "column_break_3",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "base_payment_amount",
|
|
||||||
"fieldtype": "Currency",
|
|
||||||
"label": "Payment Amount (Company Currency)",
|
|
||||||
"options": "Company:company:default_currency",
|
|
||||||
"print_hide": 1,
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname": "sales_invoice",
|
"fieldname": "sales_invoice",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Sales Invoice",
|
"label": "Sales Invoice",
|
||||||
"options": "Sales Invoice",
|
"options": "Sales Invoice",
|
||||||
|
"read_only": 1,
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -151,17 +134,30 @@
|
|||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "interest_amount",
|
"default": "1",
|
||||||
|
"fieldname": "dunning_level",
|
||||||
|
"fieldtype": "Int",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Dunning Level",
|
||||||
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "section_break_16",
|
||||||
|
"fieldtype": "Section Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "interest",
|
||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Interest Amount",
|
"label": "Interest",
|
||||||
|
"options": "currency",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-09-17 12:10:42.278923",
|
"modified": "2021-09-23 13:48:27.898830",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Overdue Payment",
|
"name": "Overdue Payment",
|
||||||
|
|||||||
Reference in New Issue
Block a user