From fc8b0dc1f3aaba73175286ea6f752f81b6f1e971 Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Wed, 19 Mar 2025 15:58:24 +0100 Subject: [PATCH] fix: Update existing ScheduledJobType records instead of deleting them and creating new records on migrate --- .../scheduled_job_type/scheduled_job_type.py | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py b/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py index e2013ff871..edc236d96e 100644 --- a/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py +++ b/frappe/core/doctype/scheduled_job_type/scheduled_job_type.py @@ -237,24 +237,34 @@ def insert_event_jobs(events: list, event_type: str) -> list: return event_jobs -def insert_single_event(frequency: str, event: str, cron_format: str | None = None): - cron_expr = {"cron_format": cron_format} if cron_format else {} - +def insert_single_event(frequency: str, event: str, cron_format: str | None = ""): try: frappe.get_attr(event) except Exception as e: click.secho(f"{event} is not a valid method: {e}", fg="yellow") + return - doc = frappe.get_doc( - { - "doctype": "Scheduled Job Type", - "method": event, - "cron_format": cron_format, - "frequency": frequency, - } - ) + doc: ScheduledJobType + + if job_name := frappe.db.exists("Scheduled Job Type", {"method": event}): + doc = frappe.get_doc("Scheduled Job Type", job_name) + + # Update only frequency and cron_format fields if they are different + # Maintain existing values of other fields + if doc.frequency != frequency or doc.cron_format != cron_format: + doc.cron_format = cron_format + doc.frequency = frequency + doc.save() + else: + doc = frappe.get_doc( + { + "doctype": "Scheduled Job Type", + "method": event, + "cron_format": cron_format, + "frequency": frequency, + } + ) - if not frappe.db.exists("Scheduled Job Type", {"method": event, "frequency": frequency, **cron_expr}): savepoint = "scheduled_job_type_creation" try: frappe.db.savepoint(savepoint)