# Changelog - Claude Code This file documents all changes made to this project via Claude Code. ## [2026-02-05] ### Added - Autotask customer mapping now auto-searches for similar company names when opening unmapped customers: - Automatically populates search box with customer name - Displays matching Autotask companies as suggestions - Speeds up mapping process by eliminating manual search for most customers - Autotask "Link existing ticket" now supports cross-company ticket search: - Added `query_tickets_by_number()` to search tickets by number across all companies - When searching with a ticket number (e.g., "T20260205.0001"), results include: - Tickets from the customer's company (primary results) - Matching tickets from other companies (for overarching issues) - Enables linking tickets for multi-company infrastructure issues ### Changed - Autotask resolve confirmation and note messages now correctly indicate ticket closure status: - Frontend confirmation dialog explains conditional closure based on time entries - Backend route checks time entries before creating note and generates dynamic message: - "ticket will be closed in Autotask" when no time entries exist - "ticket remains open in Autotask due to existing time entries" when time entries exist - Route docstring updated to reflect conditional status update behaviour ### Added - Autotask conditional ticket status update based on time entries (API contract section 9): - `query_time_entries_by_ticket_id()` - Query time entries for a ticket via POST /TimeEntries/query - `update_ticket_resolution_safe()` now checks for time entries and conditionally sets status: - If NO time entries exist: sets status to 5 (Complete) with completedDate and resolvedDateTime - If time entries exist: keeps current status unchanged (ticket remains open) ### Fixed - Automatic mail import can now be disabled in Settings after being enabled (fixed unchecked checkbox not being processed) - Autotask "Link existing" search box now clears when opening the modal instead of retaining previous search text - Autotask customer mapping search box now clears when opening the edit modal instead of retaining previous search text - Autotask ticket resolution update now correctly preserves exact field values from GET response in PUT payload. The `issueType`, `subIssueType`, and `source` fields are copied with their exact values (including null) from the GET response, as required by Autotask API. Previously these fields were being skipped or modified. ### Added - Restored Autotask PSA integration from branch `v20260203-13-autotask-resolution-item-wrapper`: - `integrations/autotask/client.py` - Autotask REST API client with full support for: - Zone information discovery - Ticket CRUD operations (create, get, update) - Ticket notes via `/Tickets/{id}/Notes` endpoint - Safe resolution updates preserving stabilizing fields - Query support for companies, tickets, time entries, deleted ticket logs - Reference data retrieval (queues, ticket sources, priorities, statuses) - `ticketing_utils.py` - Utilities for internal ticket management and Autotask linkage - Database migrations for Autotask fields: - `SystemSettings`: Autotask connection settings, defaults, and cached reference data - `Customer`: Autotask company mapping fields - `JobRun`: Autotask ticket linkage and deletion tracking fields - `Ticket`: Resolution origin tracking - Settings UI for Autotask configuration (connection test, reference data sync) - Run Checks integration for Autotask ticket creation - Customers page with Autotask company mapping - Documentation files for Autotask integration design and implementation - Added `docs/autotask_rest_api.md` - Validated Autotask REST API contract based on Postman testing ## [2026-02-04] ### Added - `docs/changelog-claude.md` - Changelog file for tracking changes made via Claude Code - Setting to enable/disable daily dashboard redirect requirement (Settings > General > Navigation) - New `require_daily_dashboard_visit` column in `SystemSettings` model - Migration in `migrations.py` to add the column - Toggle in Settings General page under new "Navigation" card - Default value is OFF (disabled) - users can navigate directly to any page ### Changed - Converted changelog to English (all project documentation must be in English) - Documented branch naming convention and build workflow in Claude memory - Filled README.md with comprehensive project documentation based on source code analysis ### Performance - Added database indexes migration (`migrations.py`) for frequently queried foreign key columns: - `JobRun`: indexes on `job_id`, `job_id+run_at`, `job_id+reviewed_at`, `mail_message_id` - `MailMessage`: indexes on `job_id`, `location`, `job_id+location` - `MailObject`: index on `mail_message_id` - `TicketScope`: indexes on `ticket_id`, `job_id` - `RemarkScope`: indexes on `remark_id`, `job_id` - Fixed N+1 query in `_recompute_override_flags_for_runs()` - batch loads all jobs instead of per-run queries - Optimized Daily Jobs page with batch queries: - Batch load all today's runs for all jobs in single query - Batch infer weekly schedules for all jobs (was per-job query) - Batch infer monthly schedules for jobs without weekly schedule - Batch load ticket/remark indicators for all jobs