Commit Graph

53 Commits

Author SHA1 Message Date
f539d62daf Add Synology monthly drive health report parser
Add parser for Synology monthly drive health reports with support for both
Dutch and English notifications. Reports are classified as informational
and excluded from schedule learning and reporting logic.

Features:
- Recognizes Dutch ("Maandelijks schijfintegriteitsrapport", "Gezond") and
  English ("Monthly Drive Health Report", "Healthy") variants
- Extracts hostname from subject or body ("Van/From NAS-HOSTNAME")
- Automatic status detection: Healthy/Gezond/No problem detected → Success,
  otherwise → Warning
- Backup type: "Health Report", Job name: "Monthly Drive Health"
- Added registry entry (order 237) for /parsers page visibility

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 17:02:08 +01:00
b6a85d1c8e Extend Synology DSM update parser with automatic installation announcement patterns
Add detection patterns for DSM update notifications that announce automatic
installation ("belangrijke DSM-update", "kritieke oplossingen", "wordt
automatisch geïnstalleerd", "is beschikbaar op"). This is the fourth variant
of DSM update notifications now handled by the same Updates parser job.

All changes maintain backward compatibility by extending existing pattern lists.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 16:45:23 +01:00
5549323ff2 Extend Synology Active Backup for Business parser for skipped tasks
Extended the parser to recognize backup tasks that were skipped/ignored
because a previous backup was still running. These are treated as Warning
status for monitoring purposes.

Changes:
- Extended _ABB_COMPLETED_RE regex to match "genegeerd" (NL) and "skipped"/"ignored" (EN)
- Added "van deze taak" pattern for Dutch phrasing variations
- Added status detection for skipped tasks (Warning with "Skipped" message)
- All existing patterns remain functional (backward compatible)
- Updated changelog

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 16:25:27 +01:00
b4aa7ef2f6 Extend Synology Updates parser for new DSM update available notifications
Extended the parser to recognize DSM update available notifications in addition
to update cancelled and package out-of-date notifications. All variants fall
under same Updates job type for unified monitoring.

Changes:
- Added "new DSM update", "Auto Update has detected", "new version of DSM", "Update & Restore" to detection patterns
- Extended hostname extraction regex to match "detected on HOSTNAME"
- Now recognizes three notification types: update cancelled, packages out-of-date, update available
- All existing patterns remain functional (backward compatible)
- Updated changelog

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 16:03:11 +01:00
9576d1047e Extend Synology Updates parser to recognize out-of-date package notifications
Extended the parser to recognize both DSM update cancelled notifications AND
out-of-date package notifications under the same "Updates" job type, as they
can appear together in combined notifications.

Changes:
- Added "Packages on", "out-of-date", "Package Center" to detection patterns
- Extended hostname extraction regex to match "Packages on HOSTNAME" and "running on HOSTNAME"
- Both notification types now fall under same job (backup_type: Updates)
- All existing patterns remain functional (backward compatible)
- Updated changelog

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 15:58:08 +01:00
a05dbab574 Extend Synology DSM update parser with additional detection patterns
Extended the parser to recognize more email variants for Synology DSM
automatic update cancelled notifications while maintaining backward
compatibility with existing patterns.

Changes:
- Added "Automatische DSM-update" and "DSM-update op" to detection patterns
- Extended hostname extraction regex to match "DSM-update op HOSTNAME" and "DSM update on HOSTNAME"
- All existing patterns remain functional (backward compatible)
- Updated changelog

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 15:41:20 +01:00
0827fddaa5 Add Synology DSM update parser and remove customer names from registry
Added parser registry entry for Synology DSM automatic update cancelled
notifications. These are informational messages that don't participate in
schedule learning or reporting logic.

Also removed real customer names from parser registry examples to prevent
customer information from being stored in the codebase. Replaced with
generic placeholders like NAS-HOSTNAME, SERVER-HOSTNAME, VM-HOSTNAME.

Changes:
- Added synology_dsm_update parser entry in registry.py (order 236)
- Parser matches on DSM-update/DSM update in subject and automatic/automatische in body
- Returns backup_software: Synology, backup_type: Updates, informational status
- Replaced customer names in NTFS Auditing example (bouter.nl → example.local)
- Replaced customer names in QNAP example (BETSIES-NAS01 → NAS-HOSTNAME)
- Replaced customer names in NAKIVO example (kuiperbv.nl → VM-HOSTNAME)
- Updated changelog

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 15:36:40 +01:00
9197c311f2 Fix responsive navbar overlapping content on smaller screens
Added dynamic padding adjustment that measures the actual navbar height and
applies it to the main content padding-top. This prevents the navbar from
overlapping page content when it becomes taller on narrow screens.

Changes:
- Removed fixed padding-top: 80px from main content
- Added id="main-content" to main element for JavaScript targeting
- Added JavaScript function that measures navbar.offsetHeight
- Function applies dynamic padding-top with 20px buffer for spacing
- Triggers on: page load, window load, window resize (debounced), navbar collapse toggle
- Includes fallback to 80px if measurement fails
- Updated changelog

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 15:11:47 +01:00
26848998e1 Fix test email generator to use correct Veeam format and consistent job name
Changed test emails to use proper Veeam Backup Job format that matches parser
expectations. All test emails now use the same job name "Test-Backup-Job" so
they appear as different runs of the same job, enabling proper status testing.

Changes:
- Switched from multiple backup software to Veeam only for simplicity
- Fixed subject format to: Veeam Backup Job "Test-Backup-Job" finished with Success/WARNING/Failed
- Fixed body format to include: Backup job: Test-Backup-Job
- All 3 emails per set use same job name but different dates
- Added realistic VM objects (VM-APP01, VM-DB01, VM-WEB01) with status details
- Each set shows different failure scenarios for testing
- Updated changelog description

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 14:54:42 +01:00
19ef9dc32a Update test email generator with fixed sets and separate buttons
Changed from configurable count input to three separate buttons for
success, warning, and error test emails. Each button generates exactly
3 emails with consistent data for reproducible testing.

Changes:
- Updated routes_settings.py to use fixed email sets instead of random data
- Changed route from /settings/test-emails/generate to /settings/test-emails/generate/<status_type>
- Created three predefined email sets (success, warning, error) with fixed content
- Updated settings.html UI to show three separate buttons instead of count input
- Each set contains 3 emails simulating Veeam, Synology, and NAKIVO backups
- Updated changelog with detailed description

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 14:44:19 +01:00
96092517b4 Add test email generator for testing and development
Added feature to generate test emails in inbox for testing purposes:
- Simulates backup notifications from Veeam, Synology, and NAKIVO
- Configurable count (1-50 emails)
- Random job names, statuses, and timestamps
- Emails are parser-compatible for testing inbox approval workflow
- Useful for testing orphaned jobs cleanup and other maintenance ops
- Admin-only feature in Settings → Maintenance

Templates include:
- Veeam: Various job statuses with detailed backup info
- Synology: Backup task notifications
- NAKIVO: Job completion reports

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 14:37:02 +01:00
7f8dffa3ae Add preview page for orphaned jobs before deletion
Added verification step before deleting orphaned jobs:
- New GET endpoint /settings/jobs/orphaned to preview the list
- Shows detailed table with job name, backup software/type, customer ID,
  run count, and email count
- "Preview orphaned jobs" button on maintenance page
- Delete button on preview page shows exact count
- Summary shows total jobs, runs, and emails to be deleted

This allows admins to verify which jobs will be deleted before
taking the destructive action.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 14:07:12 +01:00
60c7e89dc2 Add cleanup orphaned jobs maintenance option
Added new maintenance option in Settings → Maintenance to delete
jobs that are no longer linked to an existing customer (customer_id
is NULL or customer doesn't exist).

Features:
- Finds all jobs without valid customer link
- Deletes jobs, runs, and related emails permanently
- Cleans up auxiliary tables (ticket_job_runs, remark_job_runs,
  scopes, overrides)
- Provides feedback on deleted items count
- Logs action to audit log

Use case: When customers are removed, their jobs and emails should
be completely removed from the database.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 13:46:07 +01:00
b0efa7f21d Remove customer name from Autotask ticket titles
Changed ticket title format from:
  [Backupchecks] Customer Name - Job Name - Status
To:
  [Backupchecks] Job Name - Status

Customer information is already available in the ticket's company
field, making it redundant in the title and causing unnecessarily
long ticket titles.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 13:34:21 +01:00
58dd2ce831 Fix Autotask ticket description being cleared on resolve
When resolving Autotask tickets via the update_ticket_resolution_safe
function, the description field was not included in the PUT payload,
causing it to be set to NULL by Autotask.

Fixed by adding "description" to the optional_fields list so it is
preserved from the GET response and included in the PUT request.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 11:39:48 +01:00
7a3c8c9c51 Add v0.1.23 to website changelog
Added v0.1.23 entry to changelog.py with structured Python format:
- Documentation System (Core Infrastructure, 13 completed pages, accuracy improvements)
- Audit Logging (Renaming to AuditLog, expanded event coverage)
- Timezone-Aware Display (local_datetime filter, all pages updated)
- Autotask Improvements (usability, settings organization, data portability)
- Environment Identification (sandbox banner feature)
- Job Visibility Filtering (archived/inactive customer filtering)
- Repository Security (.gitignore for .claude directory)
- Bug Fixes (imports, datetime handling, documentation corrections)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 09:35:39 +01:00
cdbb45fcfb Update changelog with v0.1.23 release notes
Consolidated all changes from 2026-02-06 through 2026-02-08:
- Documentation System (33 pages, 13 with full content)
- Audit Logging enhancements (settings, export, import)
- Timezone-aware datetime display across all pages
- Autotask improvements (direct links, auto-load, collapsible text)
- Environment identification (sandbox banner)
- Job visibility filtering (archived/inactive)
- Multiple bug fixes and documentation corrections

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 09:28:13 +01:00
53445ab2a4 Correct Autotask integration description in Remarks & Tickets
Fixed to clarify that Autotask integration supports MANUAL ticket creation
(not automatic creation on failures). The integration exists and handles:
- Manual ticket creation in Autotask from Run Checks modal
- Synchronization between BackupChecks and Autotask tickets
- Automatic resolution when Autotask tickets are resolved/deleted

Removed incorrect claim about automatic ticket creation on failures.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 20:36:06 +01:00
89f4c65e3e Remove non-existent automatic ticket creation from Remarks & Tickets
Removed entire "Integration with Autotask" section that incorrectly
described automatic ticket creation for backup failures. This feature
does not exist and is not planned.

Changes:
- Removed section explaining automatic ticket creation in Autotask
- Removed link to Autotask Integration from Next Steps
- Updated changelog with removal

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 20:34:46 +01:00
c58855a1a6 Fix per-job review mechanism in Backup Review documentation
Corrected documentation to accurately reflect that review is done per-JOB
(not per individual run). When marking a job as reviewed, ALL runs within
that job are marked simultaneously and the job disappears from Run Checks.

Changes:
- Run Checks Modal: Removed non-existent "reviewed indicator", clarified
  per-job review in Page Layout callout, updated Mark as Reviewed section
  to explain all runs for job are marked together, changed bulk review from
  "select multiple run checkboxes" to "select multiple job checkboxes",
  updated Unmark Reviewed to reflect per-job unmarking, removed incorrect
  statement that successful runs are automatically reviewed
- Approving Backups: Updated bulk review section from "runs" to "jobs" for
  consistency with per-job review mechanism
- Changelog: Updated with all per-job review fixes

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 20:00:10 +01:00
c0fe9e2d4d Fix critical inaccuracies in Backup Review documentation
Corrected workflow based on user feedback:
- ALL runs must be marked as reviewed (including successes with overrides/tickets)
- Run Checks is THE primary daily tool (not Daily Jobs)
- Added blue badge for override-applied runs (not green)
- Goal: completely empty Run Checks page
- Added bulk review functionality for efficiency
- Rewrote Complete Workflow Example to focus on Run Checks
- Daily Jobs may be deprecated (only for viewing schedules)

Changed files:
- approving-backups.html: Stage 6/7 corrections, new workflow example
- daily-jobs.html: Added blue override badge, clarified secondary role
- run-checks-modal.html: Emphasized primary role, added bulk review
- overrides.html: Blue badge instead of green for overrides

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 19:37:53 +01:00
5e7080a96c Complete Backup Review documentation section (5 pages)
Added comprehensive documentation for the Backup Review workflow:
- Daily Jobs View: Schedule inference, status tracking, override/ticket/remark indicators
- Run Checks Modal: Detailed review interface with objects, email content, Autotask info
- Overrides & Exceptions: Global and object-level override rules with match criteria
- Remarks & Tickets: Issue tracking with scopes, filtering, and lifecycle management
- Approving Backups: Complete workflow from email import to review completion

All content based on actual code implementation - no fabricated features.
Progress: 19 of 33 pages complete (58%)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 18:51:42 +01:00
258aff8ffb Remove fabricated parser management features from Mail Parsing docs
Major corrections to Mail Parsing documentation - removed non-existent features:

Parsers Page Location:
- Fixed: "Parsers" page (separate navigation page), NOT "Settings → Parsers"
- Location corrected throughout document

Parser Information Table:
- REMOVED "Enabled" column (doesn't exist, suggested false capability)
- Added callout: "Read-Only Parser List" - parsers cannot be managed via UI

REMOVED Entire Section: "Enabling and Disabling Parsers"
- This feature DOES NOT EXIST
- Completely fabricated content about enabling/disabling parsers
- Removed all references to checkbox controls
- Removed all instructions about disabling parsers for troubleshooting

Re-parsing Emails:
- Clarified: ONLY "Re-parse all" available (not individual re-parse)
- Updated "When to Re-parse" - all actions done by developer, not users
- Removed "parser was disabled" scenario (impossible)

Custom Parsers Callout:
- Changed from "create one yourself" to "contact support"
- Emphasized: ONLY developer can create parsers
- Removed references to Python development skills

Troubleshooting Sections:
- REMOVED all references to "check if parser is enabled" (impossible)
- REMOVED "disable parser temporarily to test" (impossible)
- Changed to: "contact support with .eml files"
- Fixed all "Settings → Parsers" references to just "Parsers page"

REMOVED: "AI-Powered Parsing" Future Enhancement
- Completely fabricated claim about LLM parsing consideration
- NOT in planning, NOT being considered
- No source for this false information

Best Practices:
- REMOVED "Test new parsers" (users can't add parsers!)
- REMOVED "Keep parsers enabled" (users can't disable them!)
- Added: "Report parsing issues promptly to support"
- Focus on what users CAN do, not fabricated capabilities

All fabricated features removed. Documentation now reflects actual UI.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 17:20:14 +01:00
8bbdb86f79 Multiple accuracy fixes for Inbox Management documentation
Critical corrections based on actual UI behavior:

Email Detail Modal Layout:
- Fixed layout description: TWO-COLUMN (not top/middle/bottom)
- Left side: Metadata + action buttons + parsed objects
- Right side: Email body in iframe
- Updated screenshot caption to reflect left/right layout

Action Buttons (Left Side):
- REMOVED "Re-parse" from modal (doesn't exist in modal!)
- Only available buttons: Approve, Delete, Download .eml
- Re-parse is ONLY on inbox page, not in modal

Approving Emails:
- FIXED: Job name is READ-ONLY during approval (cannot be edited!)
- Only customer selection is editable
- Added callout: "Job Name Cannot Be Changed"
- Removed all references to "edit job name" or "adjust job name"

Re-parsing Emails:
- REMOVED "Re-parse Single Email" section (doesn't exist!)
- Only "Re-parse all" available on inbox page
- Added callout: "No Individual Re-parse"
- Workaround: Delete unwanted emails, re-parse all, re-import

Deleting Emails:
- Fixed location: "Deleted Mails" page (Admin only)
- NOT in "Settings → Maintenance"
- It's a separate navigation page

Inbox Filters and Search:
- REMOVED entire section (not in planning, won't be implemented)
- No false expectations about future filtering features

Troubleshooting Unparsed Emails:
- FIXED: Parsers can ONLY be created by BackupChecks developer
- Users CANNOT create custom parsers
- Added warning callout about parser creation
- Instructions: Contact support with .eml samples

Best Practices:
- Removed "Edit job names during approval" (impossible!)
- Added "Verify parsed job names" - contact support if wrong
- Updated to reflect actual capabilities

All corrections ensure documentation matches actual UI behavior.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:57:10 +01:00
7d72b7ddee Major fix: Inbox only shows unapproved emails, not approved ones
Critical corrections to Inbox Management documentation:

Overview & Page Layout:
- Clarified: Inbox displays only UNAPPROVED emails
- Added callout: "Inbox Shows Only Unapproved Emails"
- Explained: Approved emails immediately disappear from inbox
- Inbox is a staging area for emails awaiting approval/deletion

Email Detail Modal - Metadata Section:
- REMOVED incorrect fields that don't exist for inbox emails:
  * "Customer: If already approved..." (approved emails aren't in inbox!)
  * "Approved: Checkmark..." (no checkmark - they disappear when approved!)
- Added list of action buttons (Approve, Re-parse, Delete, Download .eml)

What Happens After Approval:
- Changed "moved out of inbox" to "immediately disappears from inbox"
- Added: Future emails are "automatically approved and linked WITHOUT
  appearing in the inbox" - they go directly to operational views
- New callout: "Approved Emails Don't Return" explaining auto-approval flow

Inbox Filters and Search:
- Changed "all imported emails" to "all UNAPPROVED imported emails"

Common Workflows - Setting Up New Customer:
- Updated step 5: "approved emails disappear from inbox"
- Added step 6: Jobs appear in Jobs/Daily Jobs/Run Checks pages
- Updated step 7: Future reports auto-approved, never appear in inbox

This accurately reflects that the inbox is ONLY for unapproved emails.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:41:56 +01:00
1b9252a800 Fix Inbox Management: EML link and add email detail screenshot
Corrections to Inbox Management documentation:

Table Columns:
- Fixed EML column description: "Download link" instead of "Checkmark (✓)"
- Clarified: "blank if not stored" for emails without stored .eml file

Email Detail Modal section:
- Added screenshot (approve-job.png) showing the email detail modal
- Screenshot displays: metadata section, email body, and approval interface
- Figure caption explains all visible components
- Screenshot reused from earlier documentation (already created)

These corrections accurately reflect the actual UI behavior.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:36:54 +01:00
4c09135b84 Fix: Clarify single Save Settings button used twice in workflow
Corrected Mail Import Setup documentation to accurately reflect UI:

Step 2.3: "Save Settings (Again)" instead of "Save Final Configuration"
- Clarified there is only ONE "Save settings" button on the page
- Same button is clicked TWICE: once after credentials, once after folders
- Added warning callout: "Same Button, Two Steps"
- Emphasized this is the same button from Step 2.1, not a separate button

Future Improvement note updated:
- Specifically mentions clicking same button twice is not obvious
- Suggests possible solutions: separate sections with distinct save buttons,
  or visual feedback about which step user is on

This accurately reflects the current UI where a single "Save settings" button
serves double duty, which will be improved in a future version for clarity.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:19:34 +01:00
3a3e2fde58 Clarify two-step workflow for Mail Import folder configuration
Enhanced Mail Import Setup documentation to clarify configuration workflow:

Step 2.1 (Enter Graph Credentials):
- Added warning callout: Must save credentials FIRST before folder configuration
- Credentials must be saved and page refreshed before Step 2.2 works

Step 2.2 (Configure Mail Folders):
- Added prerequisite: Ensure credentials saved and page refreshed
- Clarified folder browser popup AUTOMATICALLY loads folder structure
- Emphasized: Don't type paths manually - click folders in popup
- Folder browser connects to Microsoft Graph and retrieves folders
- Added callout: Folder browser auto-generates correct path format
- Added note about planned UI improvement for clearer workflow

Step 2.3 (Save Final Configuration):
- Renamed from "Save Settings" to "Save Final Configuration"
- Clarified this is the SECOND save (first was in 2.1)
- Added tip callout explaining two-step save process
- Enhanced error checking list (credentials, folders, access policy)

This clarifies the actual user workflow where credentials enable folder browsing.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:16:04 +01:00
80f4052756 Enhance Mail Import Setup with Application Access Policy security
Enhanced Mail Import Setup documentation with additional security measures:
- Step 1.3: Start with Mail.Read only (read-only) for initial testing
- Step 1.4 (NEW): Restrict access to one mailbox via Application Access Policy
  - Exchange PowerShell commands to create and test policy
  - Ensures app can only access backup mailbox, not all tenant mailboxes
  - Marked as "Optional but Recommended" following principle of least privilege
- Step 1.5: Add Mail.ReadWrite after testing (moved from 1.3)
- Updated Security Best Practices section to emphasize mailbox restriction
- Added security notes about starting read-only and rotating secrets (12 months)

Based on setup documented in /docker/develop/HOWTO-CREATE-GRAPH-APP.md

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 16:00:55 +01:00
24cca64824 Complete Mail & Import documentation section (4 pages)
Added comprehensive documentation for the Mail & Import section:
- Mail Import Setup: Microsoft Graph API configuration, Azure AD app registration,
  folder setup, troubleshooting, and security best practices
- Inbox Management: Email review workflow, approval process, re-parsing,
  deletion, and common workflows
- Mail Parsing: Parser system explanation, supported backup software,
  match criteria, execution order, and troubleshooting
- Auto-Import Configuration: Automatic import scheduling, intervals, batch sizes,
  auto-approval logic, manual import, and monitoring

Updated TODO-documentation.md to reflect progress (14 of 33 pages, 42% complete)
Updated changelog-claude.md with detailed content descriptions

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 15:44:51 +01:00
5896614637 Complete Customers & Jobs documentation section (4 pages)
Added comprehensive documentation for customer and job management:

- Managing Customers:
  - Customer creation with contact information
  - Editing customer details
  - Active/inactive status and impact on job visibility
  - Autotask company mapping workflow with auto-search
  - CSV export/import for backup and migration
  - Delete operations with warnings
  - Job count indicators (red/bold when zero)

- Configuring Jobs:
  - Inbox-based approval workflow (cannot manually create jobs)
  - Mail Parser automatic configuration of all job fields
  - Reparse All functionality for batch processing
  - Job archiving vs deletion
  - Job lifecycle stages
  - Common questions and limitations

- Approved Jobs:
  - Jobs list overview with status indicators
  - Job detail page information
  - Editable vs parser-determined fields
  - Archive/unarchive workflow
  - JSON export/import via Settings > Maintenance
  - Status indicators (success/failed/warning/no runs)

- Job Schedules:
  - Automatic schedule learning from historical runs
  - Schedule types (daily/weekly/monthly/irregular)
  - Minimum data requirements (3-5 runs)
  - Daily Jobs integration and expected run detection
  - Schedule accuracy scenarios
  - Troubleshooting schedule issues

All pages include tables, callouts, cross-references, and practical examples.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 12:46:08 +01:00
3f75ab87cd Streamline Profile Settings documentation to reflect actual functionality
- Updated page description: only password change available in User Settings
- Added screenshot reference for user-settings.png
- Clarified theme selector location: navigation bar (between username and logout)
- Clarified role selector location: navigation bar (not in settings page)
- Simplified profile information: username and assigned roles (read-only)
- Removed non-existent Notification Preferences section
- Removed Session Information section (not displayed)
- Enhanced troubleshooting section with specific password change issues
- Maintained Data Privacy and Password sections

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 12:34:02 +01:00
a4d9c4f312 Auto-commit local changes before build (2026-02-08 12:23:44) 2026-02-08 12:23:44 +01:00
908785ee73 Add documentation system Phase 1 - Core infrastructure
- Created documentation blueprint (doc_bp) with routes and navigation
- Added documentation menu item (📖) to navbar for all users
- Implemented hierarchical navigation with 9 sections, 33 pages
- Created base layout with sidebar, breadcrumb, and prev/next navigation
- Added documentation.css with dark mode support
- Created first 3 getting-started pages (what-is-backupchecks, first-login, quick-start)
- Updated changelog

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-08 10:59:45 +01:00
45ba50ecfa Expand audit logging to settings, export, and import operations
This commit completes the audit logging expansion by adding comprehensive
logging for critical system operations:

- Settings: Log changes to General, Mail, and Autotask settings with
  before/after values (passwords excluded for security)
- Exports: Log customer and jobs exports with format and record counts
- Imports: Log customer and jobs imports with operation statistics

Also updated UI to reflect "System Audit Log" nomenclature instead of
"Admin activity" for better semantic clarity.

All audit events use structured event_type identifiers and JSON details
for easy filtering and analysis.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 21:38:52 +01:00
8e8b7a4412 Implement timezone-aware datetime display across all pages
All datetime fields now automatically convert from UTC (database storage)
to the configured UI timezone (Settings > General > UI Timezone) for display.

Changes:
- Added local_datetime Jinja2 template filter in app/__init__.py
  - Converts UTC datetime to UI timezone using zoneinfo.ZoneInfo
  - Accepts optional strftime format parameter (default: '%Y-%m-%d %H:%M:%S')
  - Returns empty string for None values
  - Falls back to UTC display if conversion fails
- Updated all datetime displays across 15+ templates:
  - customers.html: autotask_last_sync_at
  - settings.html: autotask_last_sync_at
  - feedback.html, feedback_detail.html: created_at, updated_at, resolved_at
  - logging.html: created_at
  - overrides.html: start_at, end_at
  - archived_jobs.html: archived_at
  - tickets.html, ticket_detail.html: resolved_at, run_at
  - inbox.html, inbox_deleted.html, admin_all_mail.html: received_at, parsed_at, deleted_at
  - job_detail.html: run_at, reviewed_at
  - remark_detail.html: run_at
  - settings_news_reads.html: read_at
- Database values remain in UTC for consistency
- Default timezone: Europe/Amsterdam (configurable via SystemSettings.ui_timezone)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 00:12:59 +01:00
3bacb55590 Add Autotask company mapping to export/import functionality
Extended both customer and jobs export/import to preserve Autotask
company mappings during data migration and system reset workflows.

Changes:
- Customer export (CSV): Added autotask_company_id and autotask_company_name columns
- Customer import (CSV): Reads and applies Autotask mapping fields, resets sync status
- Jobs export (JSON): Includes Autotask fields in customers array
- Jobs import (JSON): Processes customers array with Autotask mappings before jobs
- Backwards compatible: Old exports without Autotask fields continue to work
- Import feedback: Shows both created and updated customer counts

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 00:03:15 +01:00
f27e956b6f Restore complete consolidated changelog for 2026-02-06
Merged all changes from today's branches into complete changelog:
- Sandbox environment indicator (v20260206-01-04)
- Branch merge and cleanup (v20260206-05)
- Filter archived/deleted jobs (v20260206-06)
- Autotask settings improvements (v20260206-07)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 23:29:52 +01:00
d8ddec1fb1 Add direct Autotask ticket link in Run Checks modal
Added "Open in Autotask" button next to ticket number in Run Checks modal
for quick navigation to the ticket in Autotask PSA.

Changes:
- Enhanced renderAutotaskInfo() function in run_checks.html
- Button appears only when autotask_ticket_id exists
- Opens in new tab with proper Autotask URL format
- Styled as small outline button for compact layout
- URL format: https://ww19.autotask.net/Mvc/ServiceDesk/TicketDetail.mvc?workspace=False&ids[0]={id}&ticketId={id}

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 13:08:11 +01:00
d08fbfecd4 Expand changelog entry with detailed implementation description
Added comprehensive breakdown of the Sandbox environment indicator feature
including all modified components (database, backend, frontend, CSS) with
specific technical details for better documentation and understanding.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 12:53:45 +01:00
0bf1151f01 Add Sandbox/Development environment indicator feature
This commit adds a new setting that displays a visual "SANDBOX" banner
when the environment is marked as development or sandbox.

Changes:
- Add is_sandbox_environment boolean column to SystemSettings model
- Add database migration for automatic schema update
- Add Environment section in Settings > General with toggle switch
- Create sandbox.css with diagonal banner styling (non-interactive)
- Inject system_settings into all template contexts
- Add sandbox banner to base.html layout
- Update changelog with feature description

The banner appears as a red diagonal ribbon in the top-left corner and
uses pointer-events: none to remain non-interactive while keeping
underlying elements clickable.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 12:51:53 +01:00
0e5294d1fa Add collapsible text functionality to Overall remark and Remark fields
Added ellipsis-field class to both "Overall remark" and "Remark" fields in
the Run Checks modal. This prevents long text from pushing action buttons
(like Autotask ticket creation) out of view. Users can click the field to
expand/collapse the full text.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 11:35:13 +01:00
66ee14ca18 Change Autotask link modal button label from "Refresh" to "Search"
The button in the "Link existing Autotask ticket" modal performed a search
operation but was labeled "Refresh", which was confusing. Renamed to "Search"
to accurately reflect its functionality.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 11:10:58 +01:00
b007b9459b Update changelog-claude.md with detailed changelog redesign documentation 2026-02-05 23:28:03 +01:00
1d9f3662a1 Fix automatic mail import unable to be disabled once enabled
Fixed bug where unchecked automatic mail import checkbox was not
processed by the backend, preventing users from disabling the
automatic import after enabling it.

Root cause: HTML forms do not send unchecked checkbox values. The
existing check `if "auto_import_enabled" in request.form` would skip
updating the setting when the checkbox was unchecked.

Solution: Added import_form_touched flag to detect when the import
settings form is submitted, then update the checkbox value based on
presence (checked) or absence (unchecked) in form data.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 22:15:38 +01:00
9388ec4c01 Improve Autotask customer mapping with auto-search
Added automatic search for similar company names when opening unmapped
customers in the edit modal. This speeds up the mapping process by
eliminating manual searches.

Changes:
- Clear search box when opening customer edit modal
- Auto-populate search with customer name for unmapped customers
- Automatically display matching Autotask companies as suggestions
- Refactor search logic into reusable performAutotaskSearch() function

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 21:39:02 +01:00
873b22f225 Clear search box when opening Autotask Link existing modal
Fixed issue where the search input retained previous search text when
reopening the Link existing modal. The search box now always starts
empty for a better user experience.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 21:26:14 +01:00
077e1fb176 Add cross-company ticket search for overarching issues
The "Link existing ticket" dialog now searches across all companies when
a ticket number is entered, enabling linking of overarching issues.

Changes:
- Added query_tickets_by_number() to Autotask client
- Route searches both customer's company and cross-company when ticket number detected
- Results are combined and deduplicated (customer tickets shown first)
- Enables linking multi-company infrastructure issues to any job

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 17:01:43 +01:00
cc76068206 Make Autotask resolve messages dynamic based on time entries
The resolve confirmation dialog and ticket notes now correctly indicate
whether the ticket will be closed or remain open based on time entry check.

Changes:
- Frontend: Updated confirmation message to explain conditional closure
- Backend: Check time entries before creating note
- Dynamic message in ticket note:
  * "ticket will be closed in Autotask" (no time entries)
  * "ticket remains open in Autotask due to existing time entries" (has time entries)
- Updated route docstring to reflect conditional status behaviour

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 16:46:43 +01:00
9b905fa24f Add conditional ticket status update based on time entries
Implements API contract section 9: ticket resolution workflow with
conditional status updates based on time entry existence.

- Added query_time_entries_by_ticket_id() for POST /TimeEntries/query
- update_ticket_resolution_safe() now checks time entries:
  * No time entries: sets status to 5 (Complete)
  * Has time entries: keeps current status (ticket remains open)

This ensures tickets are only auto-closed when appropriate per the
validated Autotask API workflow.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 16:35:28 +01:00