Commit Graph

390 Commits

Author SHA1 Message Date
ea7c5e29c5 Add v0.1.27 release notes to changelog files 2026-02-23 15:39:04 +01:00
9ecbbdd523 Update technical docs and stop tracking Python cache artifacts 2026-02-23 15:13:18 +01:00
a450817b78 Show Customers and Jobs on navbar for Viewer role 2026-02-23 15:06:54 +01:00
03de2d294c Adjust navbar: keep Cove Accounts visible and move Daily Jobs to More 2026-02-23 15:03:48 +01:00
7905e988c7 Compress navbar with More dropdown for non-admin links 2026-02-23 15:00:40 +01:00
abd98f5bc6 Move admin-only navbar links into Admin dropdown and revert forced collapse 2026-02-23 14:57:35 +01:00
2cd704182c Force navbar collapse on split-screen desktop widths 2026-02-23 14:52:44 +01:00
40ffe3656e Fix navbar overflow on split-screen desktop layouts 2026-02-23 14:41:11 +01:00
8e847e802b Mark Entra SSO docs as untested in Backupchecks 2026-02-23 14:36:31 +01:00
b992d6382a Add Entra security group access restriction for SSO 2026-02-23 14:30:42 +01:00
6bf81bd730 Add documentation page for Microsoft Entra SSO setup 2026-02-23 14:23:15 +01:00
5274286c04 Add Microsoft Entra SSO authentication flow 2026-02-23 14:20:22 +01:00
47bb4ee4f0 Deduplicate Cove runs per job instead of globally 2026-02-23 12:15:18 +01:00
8fe3f99e40 Improve linked Cove import feedback and timestamp fallback 2026-02-23 12:04:43 +01:00
f68f92e63a Trigger immediate Cove import on link and enrich run details 2026-02-23 11:57:39 +01:00
06abd8c7a3 Fix Cove workstation/server type heuristic 2026-02-23 11:17:38 +01:00
a0abd3d58e Differentiate Cove server/workstation types and show computer name 2026-02-23 11:14:41 +01:00
7803b7647c Improve Cove accounts typing and datasource readability 2026-02-23 11:10:48 +01:00
0c5adf17ab Fix Cove Run import button submission in settings 2026-02-23 11:02:56 +01:00
9b19283c97 Add Cove Accounts inbox-style flow for linking accounts to jobs
- CoveAccount staging model: all Cove accounts upserted from API;
  unmatched accounts visible on /cove/accounts before job linking
- cove_importer.py: always upserts accounts, creates JobRuns only for
  accounts with a linked job (deduplication via external_id)
- routes_cove.py: GET /cove/accounts, POST link/unlink routes
- cove_accounts.html: inbox-style page with Bootstrap modals for
  creating new jobs or linking to existing ones
- Nav bar: Cove Accounts link for admin/operator when cove_enabled
- DB migration: migrate_cove_accounts_table() for staging table

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 10:40:54 +01:00
c045240001 Add manual Cove import trigger (Run import now button)
- New route POST /settings/cove/run-now calls run_cove_import()
  directly and shows result as flash message
- Settings > Integrations > Cove: "Run import now" button visible
  when partner_id is known (connection confirmed)
- Status bar shows partner ID, last import timestamp or "No import yet"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 10:28:33 +01:00
3bd8178464 Fix Cove importer: correct API payload format and response parsing
- Login: use lowercase username/password params and id="jsonrpc"
- Login: visa is at top-level of response (not inside result)
- EnumerateAccountStatistics: use lowercase query param, RecordsCount
  instead of RecordCount, remove DisplayColumns (not needed)
- _flatten_settings: Settings items are single-key dicts like
  {"D09F00": "5"}, not {Key: ..., Value: ...} - use dict.update()
- _cove_enumerate: unwrap nested result and handle Accounts key
- _process_account: AccountId is top-level field, not from Settings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 10:21:01 +01:00
2f1cc20263 Add Cove Data Protection full integration
- New models: SystemSettings gets 8 cove_* fields, Job gets
  cove_account_id, JobRun gets source_type and external_id
- Migration migrate_cove_integration() adds all new DB columns and
  a deduplication index on job_runs.external_id
- cove_importer.py: Cove API login, paginated EnumerateAccountStatistics,
  deduplication via external_id, JobRun creation, per-datasource
  run_object_links persistence (Files&Folders, VssMsSql, M365, etc.)
- cove_importer_service.py: background thread, same pattern as
  auto_importer_service, respects cove_import_interval_minutes
- __init__.py: starts cove_importer thread on app startup
- routes_settings.py: Cove form handling (POST), has_cove_password
  variable, new AJAX route /settings/cove/test-connection
- routes_jobs.py: new route /jobs/<id>/set-cove-account,
  cove_enabled passed to job_detail template
- settings.html: Cove card in Integrations tab with AJAX test button
- job_detail.html: Cove Integration card with Account ID input

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 10:13:34 +01:00
38f0f8954e Fix remark visibility in run alerts 2026-02-19 14:14:44 +01:00
2ee5db8882 Auto-commit local changes before build (2026-02-19 13:45:13) 2026-02-19 13:45:13 +01:00
ea244193e0 Hide non-backup 3CX informational jobs from Run Checks 2026-02-19 13:44:46 +01:00
441f5a8e50 Handle 3CX update mails as informational runs 2026-02-19 13:27:52 +01:00
e0e8ed2b0d Auto-commit local changes before build (2026-02-19 12:57:34) 2026-02-19 12:57:34 +01:00
53b028ef78 Add optional Autotask ID import toggle 2026-02-19 12:56:45 +01:00
f2c0d0b36a Auto-commit local changes before build (2026-02-16 16:58:07) 2026-02-16 16:58:07 +01:00
652da5e117 Add remarks to global search results 2026-02-16 16:57:51 +01:00
c8e7491c94 Add Daily Jobs note to search results 2026-02-16 16:54:26 +01:00
e5da01cfbb Auto-commit local changes before build (2026-02-16 16:50:14) 2026-02-16 16:50:14 +01:00
b46010dbc2 Forward global search filters to overview pages 2026-02-16 16:49:47 +01:00
f90b2bdcf6 Keep search pagination at current section 2026-02-16 16:32:23 +01:00
2beba3bc9d Auto-commit local changes before build (2026-02-16 16:27:14) 2026-02-16 16:27:14 +01:00
ded71cb50f Improve daily jobs search metadata and modal link 2026-02-16 16:26:56 +01:00
dc3eb2f73c Auto-commit local changes before build (2026-02-16 16:19:53) 2026-02-16 16:19:53 +01:00
8a8f957c9f Add per-section pagination to global search 2026-02-16 16:19:26 +01:00
fcce3b8854 Fix search template section items iteration 2026-02-16 16:09:22 +01:00
7476ebcbe3 Add role-aware global grouped search 2026-02-16 16:05:47 +01:00
dca117ed79 Add customer-to-jobs filtering navigation 2026-02-16 15:12:10 +01:00
b5cf91d5f2 Fix checkboxes auto-selecting after page reload on Inbox and Run Checks
Added autocomplete="off" attribute to all checkboxes to prevent browser from
automatically restoring checkbox states after page reload.

Changes:
- Inbox page: Added autocomplete="off" to select-all and row checkboxes
- Run Checks page: Added autocomplete="off" to select-all and row checkboxes

This fixes the issue where after deleting items, the browser would automatically
re-select the same number of checkboxes that were previously selected, causing
unwanted selections on the reloaded page.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-13 11:00:21 +01:00
6468cbbc74 Fix Autotask and internal tickets not linking to missed runs
Added ticket linking to missed runs by calling link_open_internal_tickets_to_run
after creating missed JobRun records in _ensure_missed_runs_for_job function.

Changes:
- Added import for link_open_internal_tickets_to_run in routes_run_checks.py
- Added db.session.flush() and ticket linking call after creating weekly missed runs
- Added db.session.flush() and ticket linking call after creating monthly missed runs
- Ensures missed runs receive same ticket propagation as email-based runs

This fixes the issue where missed runs were not showing linked internal tickets
or Autotask tickets, while error/warning runs from emails were working correctly.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-13 10:52:00 +01:00
2e0baa4e35 Fix copy ticket button not working in Edge on Job Details page
Moved clipboard functions (copyToClipboard, fallbackCopy, showCopyFeedback)
inside IIFE scope for proper closure access. Edge browser is stricter than
Firefox about scope resolution - functions must be in same scope as event
listeners that call them.

Previously these functions were in global scope while event listeners were
in IIFE scope, which worked in Firefox but failed silently in Edge.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 11:52:32 +01:00
c5cf07f4e5 Fix tickets not showing in Run Checks modal detail view
Extended /api/job-runs/<run_id>/alerts endpoint to include both:
- Tickets explicitly linked to run via ticket_job_runs (audit trail)
- Tickets linked to job via ticket_scopes (active on run date)

Previously only ticket_job_runs was queried, causing newly created
tickets to not appear in the Meldingen section of the Run Checks modal.
They would only appear after being resolved (which creates a
ticket_job_runs entry). Now both sources are queried and duplicates
are prevented.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 10:53:00 +01:00
35ec337c54 Add copy ticket button to Job Details and improve cross-browser copy functionality
Changes:
- Added copy ticket button (⧉) next to ticket numbers in Job Details modal
- Implemented robust cross-browser clipboard copy mechanism:
  1. Modern navigator.clipboard API (works in HTTPS contexts)
  2. Legacy document.execCommand('copy') fallback (works in older browsers)
  3. Prompt fallback as last resort
- Applied improved copy function to both Run Checks and Job Details pages
- Copy now works directly in all browsers (Firefox, Edge, Chrome) without popup

This eliminates the manual copy step in Edge that previously required a popup.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:04:21 +01:00
0510613708 Fix: Allow admins to view screenshots of deleted feedback items
Two fixes:
1. Improved deleted item row styling (opacity + background)
2. Allow feedback_attachment route to serve images from deleted items (admin only)

Before: Screenshots shown as links only (2026-02-10_13_29_39.png)
After: Screenshots shown as images/thumbnails

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 13:46:24 +01:00
fc99f17db3 Add admin view for deleted feedback items + permanent delete
User request: Allow admins to view deleted items and permanently
delete them (hard delete) to clean up database and remove screenshots.

Features:
1. Admin-only "Show deleted" checkbox on feedback list
2. Deleted items shown with gray background + "Deleted" badge
3. Permanent delete button (only for soft-deleted items)
4. Hard delete removes item + all attachments from database
5. Admins can view detail pages of deleted items

Backend (routes_feedback.py):
- Added show_deleted parameter (admin only)
- Modified feedback_page query to optionally include deleted items
- Added deleted_at, deleted_by to query results
- Modified feedback_detail to allow admins to view deleted items
- New route: feedback_permanent_delete (hard delete)
  - Only works on already soft-deleted items (safety check)
  - Uses db.session.delete() - CASCADE removes attachments
  - Shows attachment count in confirmation message

Frontend:
- feedback.html:
  - "Show deleted items" checkbox (auto-submits form)
  - Deleted items: gray background (table-secondary)
  - Shows deleted timestamp
  - "Permanent Delete" button in Actions column
  - Confirmation dialog warns about permanent deletion
- feedback_detail.html:
  - "Deleted" badge in header
  - Actions sidebar shows warning + "Permanent Delete" button
  - Normal actions (resolve/delete) hidden for deleted items

Benefits:
- Audit trail preserved with soft delete
- Database can be cleaned up later by removing old deleted items
- Screenshots (BYTEA) don't accumulate forever
- Two-stage safety: soft delete → permanent delete

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 13:40:53 +01:00
1a506c0713 Fix: Add FeedbackAttachment to routes_shared imports
Missing import caused NameError when creating feedback with screenshots.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 13:30:47 +01:00