diff options
| author | UMTS at Teleco <crt@teleco.ch> | 2025-12-13 02:48:13 +0100 |
|---|---|---|
| committer | UMTS at Teleco <crt@teleco.ch> | 2025-12-13 02:48:13 +0100 |
| commit | e52b8e1c2e110d0feb74feb7905c2ff064b51d55 (patch) | |
| tree | 3090814e422250e07e72cf1c83241ffd95cf20f7 /config/functions.toml | |
Diffstat (limited to 'config/functions.toml')
| -rw-r--r-- | config/functions.toml | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/config/functions.toml b/config/functions.toml new file mode 100644 index 0000000..deb487b --- /dev/null +++ b/config/functions.toml @@ -0,0 +1,45 @@ +# auto generation of things +[auto_generation] + +[auto_generation.assets] +field = "asset_numeric_id" +type = "numeric" +length = 8 +range_min = 10000000 +range_max = 99999999 +max_attempts = 10 +# on what event seckel api schould try to generate auto gen value incaase client send empty value +on_action = "insert" + +[scheduled_queries] + +# Single idempotent task that sets the correct state atomically to avoid double-trigger inserts +[[scheduled_queries.tasks]] +name = "sync_overdue_and_stolen" +description = "Atomically set lending_status to Overdue (1-13 days late) or Stolen (>=14 days late) only if it changed" +query = """ + -- Use max lateness per asset to avoid flip-flopping due to multiple open lending rows + -- Removed issue_tracker check from WHERE clause to avoid MySQL trigger conflict + UPDATE assets a + INNER JOIN ( + SELECT lh.asset_id, MAX(DATEDIFF(CURDATE(), lh.due_date)) AS days_late + FROM lending_history lh + WHERE lh.return_date IS NULL + AND lh.due_date IS NOT NULL + GROUP BY lh.asset_id + ) late ON a.id = late.asset_id + SET a.lending_status = CASE + WHEN a.asset_type IN ('N','B') AND late.days_late >= 14 THEN 'Stolen' + WHEN a.asset_type IN ('N','B') AND late.days_late BETWEEN 1 AND 13 THEN 'Overdue' + ELSE a.lending_status + END + WHERE a.asset_type IN ('N','B') + AND ( + (late.days_late >= 14 AND a.lending_status <> 'Stolen') + OR + (late.days_late BETWEEN 1 AND 13 AND a.lending_status <> 'Overdue') + ) +""" +interval_minutes = 2 +run_on_startup = true +enabled = true
\ No newline at end of file |
