From 03f4814bcc734eb1308646dcb7340c5c9425c981 Mon Sep 17 00:00:00 2001 From: Rizqi Date: Fri, 26 Jun 2026 13:07:19 +0700 Subject: [PATCH] feat: implement dynamic quarterly and semi-annual scheduling based on configurable start months --- gui_app.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/gui_app.py b/gui_app.py index fccc848..e20433f 100644 --- a/gui_app.py +++ b/gui_app.py @@ -212,8 +212,19 @@ def register_scheduler_job(info): day_val = monthly_day if str(day_val).isdigit(): day_val = max(1, min(28, int(day_val))) + + start_month = info.get('schedule_start_month') + if not start_month: + start_month = datetime.now().month + info['schedule_start_month'] = start_month + try: + save_jobs_db() + except Exception: + pass + + months = sorted([(start_month + i * 3 - 1) % 12 + 1 for i in range(4)]) trigger = CronTrigger( - month='*/3', + month=",".join(map(str, months)), day=day_val, hour=int(hour), minute=int(minute) ) @@ -222,8 +233,19 @@ def register_scheduler_job(info): day_val = monthly_day if str(day_val).isdigit(): day_val = max(1, min(28, int(day_val))) + + start_month = info.get('schedule_start_month') + if not start_month: + start_month = datetime.now().month + info['schedule_start_month'] = start_month + try: + save_jobs_db() + except Exception: + pass + + months = sorted([(start_month + i * 6 - 1) % 12 + 1 for i in range(2)]) trigger = CronTrigger( - month='*/6', + month=",".join(map(str, months)), day=day_val, hour=int(hour), minute=int(minute) ) @@ -1444,6 +1466,7 @@ def edit_job(jobid): except Exception: pass info['schedule_id'] = None + info['schedule_start_month'] = None # Update job config info['label'] = label