diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py index 86083114403..befc9189016 100644 --- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py @@ -4,7 +4,7 @@ import frappe from dateutil.relativedelta import relativedelta -from frappe import _ +from frappe import _, cint from frappe.model.document import Document from frappe.utils import add_days, add_years, cstr, getdate @@ -89,6 +89,7 @@ class FiscalYear(Document): ) +<<<<<<< HEAD @frappe.whitelist() <<<<<<< HEAD def check_duplicate_fiscal_year(doc): @@ -110,14 +111,27 @@ def check_duplicate_fiscal_year(doc): @frappe.whitelist() ======= >>>>>>> 74ac28fc70 (refactor: `Fiscal Year` DocType cleanup) +======= +>>>>>>> 4c76786ce4 (fix(`fiscal_year`): `Fiscal Year` auto-generation and notification) def auto_create_fiscal_year(): - for d in frappe.db.sql( - """select name from `tabFiscal Year` where year_end_date = date_add(current_date, interval 3 day)""" - ): + fy = frappe.qb.DocType("Fiscal Year") + + # Skipped auto-creating Short Year, as it has very rare use case. + # Reference: https://www.irs.gov/businesses/small-businesses-self-employed/tax-years (US) + follow_up_date = add_days(getdate(), days=3) + fiscal_year = ( + frappe.qb.from_(fy) + .select(fy.name) + .where((fy.year_end_date == follow_up_date) & (fy.is_short_year == 0)) + .run() + ) + + for d in fiscal_year: try: current_fy = frappe.get_doc("Fiscal Year", d[0]) - new_fy = frappe.copy_doc(current_fy, ignore_no_copy=False) + new_fy = frappe.new_doc("Fiscal Year") + new_fy.disabled = cint(current_fy.disabled) new_fy.year_start_date = add_days(current_fy.year_end_date, 1) new_fy.year_end_date = add_years(current_fy.year_end_date, 1) @@ -125,6 +139,10 @@ def auto_create_fiscal_year(): start_year = cstr(new_fy.year_start_date.year) end_year = cstr(new_fy.year_end_date.year) new_fy.year = start_year if start_year == end_year else (start_year + "-" + end_year) + + for row in current_fy.companies: + new_fy.append("companies", {"company": row.company}) + new_fy.auto_created = 1 new_fy.insert(ignore_permissions=True) diff --git a/erpnext/accounts/notification/notification_for_new_fiscal_year/notification_for_new_fiscal_year.html b/erpnext/accounts/notification/notification_for_new_fiscal_year/notification_for_new_fiscal_year.html new file mode 100644 index 00000000000..542070ab6f2 --- /dev/null +++ b/erpnext/accounts/notification/notification_for_new_fiscal_year/notification_for_new_fiscal_year.html @@ -0,0 +1,43 @@ +

{{ _("New Fiscal Year - {0}").format(doc.name) }}

+ +

{{ _("A new fiscal year has been automatically created.") }}

+ +

{{ _("Fiscal Year Details") }}

+ + + + + + + + + + + + + + + {% if doc.companies|length > 0 %} + + + + + {% for idx in range(1, doc.companies|length) %} + + + + {% endfor %} + {% endif %} +
{{ _("Year Name") }}{{ doc.name }}
{{ _("Start Date") }}{{ frappe.format_value(doc.year_start_date) }}
{{ _("End Date") }}{{ frappe.format_value(doc.year_end_date) }}
+ {% if doc.companies|length < 2 %} + {{ _("Company") }} + {% else %} + {{ _("Companies") }} + {% endif %} + {{ doc.companies[0].company }}
{{ doc.companies[idx].company }}
+ +{% if doc.disabled %} +

{{ _("The fiscal year has been automatically created in a Disabled state to maintain consistency with the previous fiscal year's status.") }}

+{% endif %} + +

{{ _("Please review the {0} configuration and complete any required financial setup activities.").format(frappe.utils.get_link_to_form("Fiscal Year", doc.name, frappe.bold("Fiscal Year"))) }}

\ No newline at end of file diff --git a/erpnext/accounts/notification/notification_for_new_fiscal_year/notification_for_new_fiscal_year.json b/erpnext/accounts/notification/notification_for_new_fiscal_year/notification_for_new_fiscal_year.json index 4c7faf4f65b..abcbb790a12 100644 --- a/erpnext/accounts/notification/notification_for_new_fiscal_year/notification_for_new_fiscal_year.json +++ b/erpnext/accounts/notification/notification_for_new_fiscal_year/notification_for_new_fiscal_year.json @@ -1,7 +1,8 @@ { "attach_print": 0, "channel": "Email", - "condition": "doc.auto_created", + "condition": "doc.auto_created == 1", + "condition_type": "Python", "creation": "2018-04-25 14:19:05.440361", "days_in_advance": 0, "docstatus": 0, @@ -11,8 +12,15 @@ "event": "New", "idx": 0, "is_standard": 1, +<<<<<<< HEAD "message": "

{{_(\"Fiscal Year\")}}

\n\n

{{ _(\"New fiscal year created :- \") }} {{ doc.name }}

", "modified": "2018-04-25 14:30:38.588534", +======= + "message": "

{{ _(\"New Fiscal Year - {0}\").format(doc.name) }}

\n\n

{{ _(\"A new fiscal year has been automatically created.\") }}

\n\n

{{ _(\"Fiscal Year Details\") }}

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n {% if doc.companies|length > 0 %}\n \n \n \n \n {% for idx in range(1, doc.companies|length) %}\n \n \n \n {% endfor %}\n {% endif %}\n
{{ _(\"Year Name\") }}{{ doc.name }}
{{ _(\"Start Date\") }}{{ frappe.format_value(doc.year_start_date) }}
{{ _(\"End Date\") }}{{ frappe.format_value(doc.year_end_date) }}
\n {% if doc.companies|length < 2 %}\n {{ _(\"Company\") }}\n {% else %}\n {{ _(\"Companies\") }}\n {% endif %}\n {{ doc.companies[0].company }}
{{ doc.companies[idx].company }}
\n\n{% if doc.disabled %}\n

{{ _(\"The fiscal year has been automatically created in a Disabled state to maintain consistency with the previous fiscal year's status.\") }}

\n{% endif %}\n\n

{{ _(\"Please review the {0} configuration and complete any required financial setup activities.\").format(frappe.utils.get_link_to_form(\"Fiscal Year\", doc.name, frappe.bold(\"Fiscal Year\"))) }}

", + "message_type": "HTML", + "minutes_offset": 0, + "modified": "2026-02-21 12:14:54.736795", +>>>>>>> 4c76786ce4 (fix(`fiscal_year`): `Fiscal Year` auto-generation and notification) "modified_by": "Administrator", "module": "Accounts", "name": "Notification for new fiscal year", @@ -25,5 +33,12 @@ "email_by_role": "Accounts Manager" } ], +<<<<<<< HEAD "subject": "Notification for new fiscal year {{ doc.name }}" -} \ No newline at end of file +} +======= + "send_system_notification": 0, + "send_to_all_assignees": 0, + "subject": "{{ _(\"New Fiscal Year {0} - Review Required\").format(doc.name) }}" +} +>>>>>>> 4c76786ce4 (fix(`fiscal_year`): `Fiscal Year` auto-generation and notification)