fix: fiscal year can be shorter than 12 months (#23838)

* fix: replace unnecessary SQL query

* feat: checkbox "Is Short Year"

Also, set checkbox and dates only once.

* fix: toggle no longer necessary

Date fields use set_only_once.

* feat: short years can be less than 12 months

* fix: if short year, don't add 12 months to start date

* test: short year

* fix: move short fiscal year to test records
This commit is contained in:
Raffael Meyer 2020-11-15 05:02:24 +01:00 committed by GitHub
parent 188ecd7b39
commit 4bf09dd02b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 131 additions and 345 deletions

View File

@ -9,11 +9,7 @@ frappe.ui.form.on('Fiscal Year', {
} }
}, },
refresh: function (frm) { refresh: function (frm) {
let doc = frm.doc; if (!frm.doc.__islocal && (frm.doc.name != frappe.sys_defaults.fiscal_year)) {
frm.toggle_enable('year_start_date', doc.__islocal);
frm.toggle_enable('year_end_date', doc.__islocal);
if (!doc.__islocal && (doc.name != frappe.sys_defaults.fiscal_year)) {
frm.add_custom_button(__("Set as Default"), () => frm.events.set_as_default(frm)); frm.add_custom_button(__("Set as Default"), () => frm.events.set_as_default(frm));
frm.set_intro(__("To set this Fiscal Year as Default, click on 'Set as Default'")); frm.set_intro(__("To set this Fiscal Year as Default, click on 'Set as Default'"));
} else { } else {
@ -24,8 +20,10 @@ frappe.ui.form.on('Fiscal Year', {
return frm.call('set_as_default'); return frm.call('set_as_default');
}, },
year_start_date: function(frm) { year_start_date: function(frm) {
let year_end_date = if (!frm.doc.is_short_year) {
frappe.datetime.add_days(frappe.datetime.add_months(frm.doc.year_start_date, 12), -1); let year_end_date =
frm.set_value("year_end_date", year_end_date); frappe.datetime.add_days(frappe.datetime.add_months(frm.doc.year_start_date, 12), -1);
frm.set_value("year_end_date", year_end_date);
}
}, },
}); });

View File

@ -1,347 +1,126 @@
{ {
"allow_copy": 0, "actions": [],
"allow_guest_to_view": 0, "allow_import": 1,
"allow_import": 1, "autoname": "field:year",
"allow_rename": 0, "creation": "2013-01-22 16:50:25",
"autoname": "field:year", "description": "**Fiscal Year** represents a Financial Year. All accounting entries and other major transactions are tracked against **Fiscal Year**.",
"beta": 0, "doctype": "DocType",
"creation": "2013-01-22 16:50:25", "document_type": "Setup",
"custom": 0, "engine": "InnoDB",
"description": "**Fiscal Year** represents a Financial Year. All accounting entries and other major transactions are tracked against **Fiscal Year**.", "field_order": [
"docstatus": 0, "year",
"doctype": "DocType", "disabled",
"document_type": "Setup", "is_short_year",
"editable_grid": 0, "year_start_date",
"year_end_date",
"companies",
"auto_created"
],
"fields": [ "fields": [
{ {
"allow_bulk_edit": 0, "description": "For e.g. 2012, 2012-13",
"allow_on_submit": 0, "fieldname": "year",
"bold": 0, "fieldtype": "Data",
"collapsible": 0, "in_list_view": 1,
"columns": 0, "label": "Year Name",
"description": "For e.g. 2012, 2012-13", "oldfieldname": "year",
"fieldname": "year", "oldfieldtype": "Data",
"fieldtype": "Data", "reqd": 1,
"hidden": 0, "unique": 1
"ignore_user_permissions": 0, },
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Year Name",
"length": 0,
"no_copy": 0,
"oldfieldname": "year",
"oldfieldtype": "Data",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "default": "0",
"allow_on_submit": 0, "fieldname": "disabled",
"bold": 0, "fieldtype": "Check",
"collapsible": 0, "label": "Disabled"
"columns": 0, },
"fieldname": "disabled",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Disabled",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "year_start_date",
"allow_on_submit": 0, "fieldtype": "Date",
"bold": 0, "in_list_view": 1,
"collapsible": 0, "label": "Year Start Date",
"columns": 0, "no_copy": 1,
"fieldname": "year_start_date", "oldfieldname": "year_start_date",
"fieldtype": "Date", "oldfieldtype": "Date",
"hidden": 0, "reqd": 1,
"ignore_user_permissions": 0, "set_only_once": 1
"ignore_xss_filter": 0, },
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Year Start Date",
"length": 0,
"no_copy": 1,
"oldfieldname": "year_start_date",
"oldfieldtype": "Date",
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "year_end_date",
"allow_on_submit": 0, "fieldtype": "Date",
"bold": 0, "in_list_view": 1,
"collapsible": 0, "label": "Year End Date",
"columns": 0, "no_copy": 1,
"fieldname": "year_end_date", "reqd": 1,
"fieldtype": "Date", "set_only_once": 1
"hidden": 0, },
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Year End Date",
"length": 0,
"no_copy": 1,
"permlevel": 0,
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "fieldname": "companies",
"allow_on_submit": 0, "fieldtype": "Table",
"bold": 0, "label": "Companies",
"collapsible": 0, "options": "Fiscal Year Company"
"columns": 0, },
"fieldname": "companies",
"fieldtype": "Table",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 0,
"in_standard_filter": 0,
"label": "Companies",
"length": 0,
"no_copy": 0,
"options": "Fiscal Year Company",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{ {
"allow_bulk_edit": 0, "default": "0",
"allow_on_submit": 0, "fieldname": "auto_created",
"bold": 0, "fieldtype": "Check",
"collapsible": 0, "hidden": 1,
"columns": 0, "label": "Auto Created",
"default": "0", "no_copy": 1,
"fieldname": "auto_created", "print_hide": 1,
"fieldtype": "Check", "read_only": 1
"hidden": 1, },
"ignore_user_permissions": 0, {
"ignore_xss_filter": 0, "default": "0",
"in_filter": 0, "description": "Less than 12 months.",
"in_global_search": 0, "fieldname": "is_short_year",
"in_list_view": 0, "fieldtype": "Check",
"in_standard_filter": 0, "label": "Is Short Year",
"label": "Auto Created", "set_only_once": 1
"length": 0,
"no_copy": 1,
"permlevel": 0,
"precision": "",
"print_hide": 1,
"print_hide_if_no_value": 0,
"read_only": 1,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
} }
], ],
"has_web_view": 0, "icon": "fa fa-calendar",
"hide_heading": 0, "idx": 1,
"hide_toolbar": 0, "links": [],
"icon": "fa fa-calendar", "modified": "2020-11-05 12:16:53.081573",
"idx": 1, "modified_by": "Administrator",
"image_view": 0, "module": "Accounts",
"in_create": 0, "name": "Fiscal Year",
"is_submittable": 0, "owner": "Administrator",
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2018-04-25 14:21:41.273354",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Fiscal Year",
"owner": "Administrator",
"permissions": [ "permissions": [
{ {
"amend": 0, "create": 1,
"cancel": 0, "delete": 1,
"create": 1, "email": 1,
"delete": 1, "print": 1,
"email": 1, "read": 1,
"export": 0, "report": 1,
"if_owner": 0, "role": "System Manager",
"import": 0, "share": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"set_user_permissions": 0,
"share": 1,
"submit": 0,
"write": 1 "write": 1
}, },
{ {
"amend": 0, "read": 1,
"cancel": 0, "role": "Sales User"
"create": 0, },
"delete": 0,
"email": 0,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Sales User",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
},
{ {
"amend": 0, "read": 1,
"cancel": 0, "role": "Purchase User"
"create": 0, },
"delete": 0,
"email": 0,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Purchase User",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
},
{ {
"amend": 0, "read": 1,
"cancel": 0, "role": "Accounts User"
"create": 0, },
"delete": 0,
"email": 0,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Accounts User",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
},
{ {
"amend": 0, "read": 1,
"cancel": 0, "role": "Stock User"
"create": 0, },
"delete": 0,
"email": 0,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Stock User",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
},
{ {
"amend": 0, "read": 1,
"cancel": 0, "role": "Employee"
"create": 0,
"delete": 0,
"email": 0,
"export": 0,
"if_owner": 0,
"import": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Employee",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
} }
], ],
"quick_entry": 0, "show_name_in_global_search": 1,
"read_only": 0, "sort_field": "name",
"read_only_onload": 0, "sort_order": "DESC"
"show_name_in_global_search": 1,
"sort_field": "name",
"sort_order": "DESC",
"track_changes": 0,
"track_seen": 0
} }

View File

@ -36,6 +36,11 @@ class FiscalYear(Document):
frappe.throw(_("Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved.")) frappe.throw(_("Cannot change Fiscal Year Start Date and Fiscal Year End Date once the Fiscal Year is saved."))
def validate_dates(self): def validate_dates(self):
if self.is_short_year:
# Fiscal Year can be shorter than one year, in some jurisdictions
# under certain circumstances. For example, in the USA and Germany.
return
if getdate(self.year_start_date) > getdate(self.year_end_date): if getdate(self.year_start_date) > getdate(self.year_end_date):
frappe.throw(_("Fiscal Year Start Date should be one year earlier than Fiscal Year End Date"), frappe.throw(_("Fiscal Year Start Date should be one year earlier than Fiscal Year End Date"),
FiscalYearIncorrectDate) FiscalYearIncorrectDate)
@ -116,12 +121,8 @@ def auto_create_fiscal_year():
pass pass
def get_from_and_to_date(fiscal_year): def get_from_and_to_date(fiscal_year):
from_and_to_date_tuple = frappe.db.sql("""select year_start_date, year_end_date fields = [
from `tabFiscal Year` where name=%s""", (fiscal_year))[0] "year_start_date as from_date",
"year_end_date as to_date"
from_and_to_date = { ]
"from_date": from_and_to_date_tuple[0], return frappe.db.get_value("Fiscal Year", fiscal_year, fields, as_dict=1)
"to_date": from_and_to_date_tuple[1]
}
return from_and_to_date

View File

@ -11,6 +11,7 @@ test_records = frappe.get_test_records('Fiscal Year')
test_ignore = ["Company"] test_ignore = ["Company"]
class TestFiscalYear(unittest.TestCase): class TestFiscalYear(unittest.TestCase):
def test_extra_year(self): def test_extra_year(self):
if frappe.db.exists("Fiscal Year", "_Test Fiscal Year 2000"): if frappe.db.exists("Fiscal Year", "_Test Fiscal Year 2000"):
frappe.delete_doc("Fiscal Year", "_Test Fiscal Year 2000") frappe.delete_doc("Fiscal Year", "_Test Fiscal Year 2000")

View File

@ -1,4 +1,11 @@
[ [
{
"doctype": "Fiscal Year",
"year": "_Test Short Fiscal Year 2011",
"is_short_year": 1,
"year_end_date": "2011-04-01",
"year_start_date": "2011-12-31"
},
{ {
"doctype": "Fiscal Year", "doctype": "Fiscal Year",
"year": "_Test Fiscal Year 2012", "year": "_Test Fiscal Year 2012",