feat(ollama): implement case creation rewrite with strict rules
fix(sync): include phone number in economic customer sync
fix(migrations): clean up orphan links before enforcing foreign keys in email threading schema
feat(migrations): add support for physical patch-panel layouts and update related constraints
feat(migrations): add start port number for physical patch panels
feat(migrations): introduce display order for physical panels
feat(migrations): link wall outlets to switch hardware
feat(migrations): allow optional label and customer for wall outlets
feat(migrations): create hardware network links table
feat(migrations): add location display order for hardware assets
feat(migrations): create UISP devices and link to hardware assets
- Added customer_id and contact_id filters to the list_opportunities endpoint for improved querying.
- Implemented a redirect for opportunity detail pages to a new format.
- Refactored SubscriptionMatrixService to load invoices from a local snapshot instead of an external service, improving performance and reliability.
- Updated settings to include 'pipeline' as a case type and added a new section for managing ignored product texts in the invoice error finder.
- Introduced a new user_sag_create_preferences table to store per-user default case types for new cases.
- Enhanced frontend settings page with invoice error finder configuration options and improved handling of ignored product texts.
- Added migrations to support new features, including resolved status for invoice error finder issues and user-specific case type preferences.
- Implement tests for the internet connections module, covering routes, IP range creation, and connection validation.
- Add tests for the Invoice2DataService to validate extraction from GlobalConnect invoices.
- Create tests for subscription network provisioning, ensuring proper handling of network items and IP allocations.
- Include validation checks for subtotal mismatches and ensure error handling for missing IP selections.
- Added a new section in the settings frontend for managing time multiplier presets, including UI for adding, displaying, and saving presets.
- Introduced a new function to normalize and load time multiplier presets from settings.
- Updated the worklog submission process to include a selected multiplier preset and its corresponding rate multiplier.
- Enhanced the worklog model to support additional fields: extra_billed_hours, extended_support_flag, rate_multiplier, manual_hourly_rate, manual_rounded_hours, and rounding_override_reason.
- Implemented backend validation to ensure that time entries linked to prepaid cards cannot be edited if the card is in a locked status.
- Added database migration to introduce new columns and constraints for the worklog and time entry tables.
- Added bug reporting API router to main application.
- Enhanced screenshot functionality in bug-report.js with timeout handling and dynamic loading of html2canvas library.
- Improved screenshot capture strategies and error handling for better user experience.
- Updated modal handling for bug reports to include screenshot previews and status messages.
- Refactored code for better readability and maintainability.
feat: implement user-specific case status and preferences
- Created migration to allow dynamic case statuses in sag_sager table.
- Added user_sag_list_preferences table for per-user preferences on case list filters.
- Introduced user_menu_preferences table to manage per-user menu visibility preferences with triggers for updated_at timestamps.
- Implemented a new HTML page for generating service contract reports.
- Added CSS styles for report layout and components.
- Developed JavaScript functionality for loading customers and contracts, fetching report data, and rendering metrics and cases.
- Included buttons for downloading reports in PDF and Excel formats.
docs: Create Route Auth Audit for route access control
- Generated an audit report detailing route access requirements.
- Classified routes based on authentication needs and documented them in a markdown file.
feat: Introduce buzzwords and mission projects tables in the database
- Created `buzzwords` and `sag_buzzwords` tables for managing keywords related to SAG cases.
- Established `mission_projects`, `mission_project_milestones`, and `mission_project_blockers` tables for project management.
- Updated `sag_sager` table to link with mission projects and milestones, including necessary foreign key constraints.
- Added a new modal for reporting bugs, including fields for describing the issue and attaching files.
- Implemented backend API for creating bug reports, including rate limiting and metadata logging.
- Introduced a new database table to track bug report submissions for auditing purposes.
- Enhanced the frontend to capture screenshots automatically and allow manual file uploads.
- Added error handling and user feedback for the bug reporting process.
- Updated existing templates and scripts to integrate the new bug reporting functionality.
- Added task template and task template items tables to the database.
- Introduced case template runs and run items tables for tracking template executions.
- Created a new JavaScript module for task template selection with a modal interface.
- Integrated tag actions to open the task template selector modal upon tag addition.
- Updated backend to resolve tag actions and return them in the response when adding tags.
- Enhanced the tag picker to handle actions and trigger the appropriate modal.
- Added permissions and group permissions for managing task templates.
- Updated links in index_old.html, varekob_salg.html, log.html, opportunities.html, detail.html, and various frontend files to point to the new versioned sag URLs.
- Modified reminder_notification_service.py to reflect the new sag URL structure in notifications.
- Added FedEx shipment management functionality, including API client, service layer, and router for handling FedEx bookings, tracking, and cancellations.
- Created database migration for FedEx shipments, including tables for shipments, packages, and tracking events.
- Improved error handling when adding tags by parsing JSON response safely.
- Added support for legacy tag addition via the /sag/{id}/tags endpoint for case context.
- Enhanced user feedback for tag addition errors and success notifications.
- Removed outdated design_forslag_top3_ny_side.html file.
- Updated bottom-bar.js to add back button functionality for better navigation.
- Introduced new sidebar layout in design_forslag_1_sidebar.html for enhanced information display.
- Created design_forslag_2_kompakt.html featuring a compact action ribbon for streamlined interactions.
- Developed design_forslag_3_kort.html implementing a widget cards dashboard for a cleaner overview of case details.
- Created `sag_recent_cases` table to persist recently opened cases per user for quick access in the bottom bar.
- Added pause/resume support in `tmodule_times` by introducing `paused_at` and `pause_total_seconds` columns.
- Established `user_notes` table for personal user notes with indexing for active and updated notes, along with a trigger to update the `updated_at` timestamp on modifications.
Co-authored-by: Copilot <copilot@github.com>
- Added QuickRentCreateInput model to handle quick-rent requests.
- Introduced quick_rent_preview endpoint to check existing subscriptions.
- Created quick_rent_hardware endpoint to manage rental subscriptions, asset bindings, and startup order drafts.
- Updated SQL queries to ensure proper data retrieval and handling.
- Added default rental price columns to hardware_assets table via migration.
- Enhanced UI in sag templates for better user experience and accessibility.
- Refactored existing code for improved readability and maintainability.
- Added endpoints to link and unlink customers to vendors, including validation for relationship types.
- Implemented a UI for managing linked customers in the vendor detail view.
- Introduced a search feature for customers when linking to vendors.
- Updated database schema to support customer-vendor relationships with necessary constraints and indices.
- Added migration scripts for new tables and fields related to supplier invoices and customer-vendor links.
- Modified bottom bar visibility in the frontend for improved user experience.
- Implemented a new bottom bar feature in `bottom-bar.js` that fetches and displays various notifications and statuses in real-time.
- Added functions for handling visibility, state updates, and user interactions within the bottom bar.
- Introduced WebSocket connection for real-time updates and fallback polling mechanism.
- Created a manual testing script `test_manual.py` to validate API endpoints for the manual module.
- Included tests for various paths to ensure expected responses from the server.
- Added endpoints to list, upsert, and delete AnyDesk IDs associated with cases.
- Introduced normalization for AnyDesk IDs and ensured case existence checks.
- Enhanced session management with quick-connect functionality and local session synchronization.
- Created a new job for syncing AnyDesk sessions from a local endpoint.
- Added database migration for the new `sag_anydesk_ids` table to store AnyDesk IDs per case.
- Implemented admin page for manual articles with fields for title, module, difficulty, tags, summary, content, steps, and relations.
- Added preview functionality for markdown content.
- Created list view for recent manuals with edit and view options.
- Developed detail view for individual manuals displaying content, steps, and related guides.
- Established database schema for manual articles, steps, and relations with appropriate indexing.
- Seeded initial manual articles and steps for core functionalities.
- Normalized newline characters in existing manual content.
- Added additional manuals and steps for enhanced user guidance.
- Added filtering for cases based on start date in `sager_liste`.
- Improved fallback relation tree rendering in `sag_detaljer` when tree builder fails.
- Normalized relation types in `RelationService` for consistency.
- Updated relation type display in templates with new styles and improved semantics.
- Enhanced customer handling in detail view with edit functionality.
- Updated various labels for clarity in the UI.
- Added new buttons for deferred status shortcuts in the detail view.
- Improved tag picker resilience by decoupling from optional tag group API.
- Introduced a global search button and modal for enhanced user experience.
- Added a new section for displaying email results in the global search modal.
- Implemented functionality to fetch and display emails based on user queries.
- Updated the UI to include a reminders button and improved accessibility features.
fix: Update docker-compose to allow reload configuration
- Changed ENABLE_RELOAD environment variable to default to true for easier development.
chore: Update requirements for new dependencies
- Added brother_ql, pyzbar, and pypdfium2 to requirements for label printing and PDF processing.
feat: Implement Brother label printing service
- Created a new service for printing labels using Brother QL printers.
- Supports direct printing of case hardware labels with customizable layouts.
feat: Add Vaultwarden service for credential management
- Implemented a service to interact with Vaultwarden for secure credential storage and retrieval.
sql: Add migrations for email thread keys and document tokens
- Created migrations to backfill email thread keys and manage document tokens for work orders.
- Introduced new tables and updated existing structures to support token-based linking of scanned documents.
sql: Import links into the database
- Added a script to import a predefined set of links into the database with associated categories.
- Implemented subscription creation, updating, and rendering in script_9.js.
- Added functions for handling subscription line items, product selection, and total calculations.
- Integrated AnyDesk API for session management in test_anydesk.py.
- Created REST client test requests for API endpoints in api.http.
- Developed a script to check ESET machine status and save details in tmp_check_eset_machine.py.
- Updated the index.html template to include a new column for "Næste todo" in the sag table.
- Added new JavaScript functions to load and manage case statuses in settings.html, including normalization and rendering of statuses.
- Introduced a new tag search feature in tags_admin.html, allowing users to filter tags by name, type, and module with pagination support.
- Enhanced the backend router.py to include a new endpoint for listing tag usage across modules with server-side filtering and pagination.
- Improved the overall UI and UX of the tag administration page, including responsive design adjustments and better error handling.
- Created migration 146 to seed case type tags with various categories and keywords.
- Created migration 147 to seed brand and type tags, including a comprehensive list of brands and case types.
- Added migration 148 to introduce a new column `is_next` in `sag_todo_steps` for persistent next-task selection.
- Implemented a new script `run_migrations.py` to facilitate running SQL migrations against the PostgreSQL database with options for dry runs and error handling.
- Added CaseAnalysisService for analyzing case text using Ollama LLM.
- Integrated AI analysis into the QuickCreate modal for automatic case creation.
- Created HTML structure for QuickCreate modal with dynamic fields for title, description, customer, priority, technician, and tags.
- Implemented customer search functionality with debounce for efficient querying.
- Added priority field to sag_sager table with migration for consistency in case management.
- Introduced caching mechanism in CaseAnalysisService to optimize repeated analyses.
- Enhanced error handling and user feedback in the QuickCreate modal.