Change Log

Version: 1.1.9
Current Version
1.1.9

[latest_version]="1.1.9"

[1.1.9] - 2025-11-03

Fixed

  • Event Review Save Timeout: Fixed 504 Gateway Timeout error when saving event reviews by moving expensive rating calculations to asynchronous background jobs
  • Event Review Infinite Loop: Fixed infinite observer loop caused by EventReview::updateCalculatedRating() triggering the updated observer repeatedly
  • Events Index Filter: Fixed "Upcoming Events" filter in Events I'm Hosting section to properly exclude completed and cancelled events from the upcoming view

Enhanced

  • Event Review Performance: Implemented UpdateBusinessRatingJob to handle business rating calculations asynchronously, preventing request timeouts
  • Event Review Observer: Refactored EventReviewObserver to dispatch background jobs instead of performing synchronous operations during HTTP requests
  • Observer Safety: Updated EventReview::updateCalculatedRating() to use saveQuietly() to prevent triggering observers during rating updates

Technical Improvements

  • Background Job System: Added UpdateBusinessRatingJob for asynchronous business rating updates with comprehensive error logging
  • Response Optimization: Simplified JSON responses in EventReviewController to return only essential data, preventing circular reference issues
  • Event Status Filtering: Added client-side status checking in events index to respect event status (completed/cancelled) when filtering upcoming events
  • Comprehensive Debugging: Added extensive logging throughout the review save process for troubleshooting (EventReviewController, EventReviewObserver, UpdateBusinessRatingJob)

Developer Experience

  • Debug Logging: Added detailed console and server-side logging for event review save operations to aid in troubleshooting
  • Queue Worker: Configured queue worker to process rating update jobs with 3 retry attempts and 90-second timeout

[1.1.8] - 2025-11-02

Added

  • Multi-Factor Authentication (MFA) System: Comprehensive two-factor authentication system with TOTP and email verification options
  • MFA Admin Controls: Administrators can reset user MFA settings from the users list, forcing re-registration on next login
  • MFA Test Suite: Complete test coverage with 17 passing tests (59 assertions) covering all MFA functionality
  • Recovery Codes: 8 single-use recovery codes generated for each user with hashed storage for security
  • MFA Challenge Flow: Session-based verification tracking with proper redirect handling for authenticated users
  • MFA Settings Page: Dedicated /mfa route for users to manage their authentication settings
  • Security Navigation Link: Added "Security" link to user profile dropdown for easy access to MFA settings

Enhanced

  • Mandatory MFA: MFA is now required system-wide - users cannot disable it and must set up on first login
  • TOTP Support: Full Time-based One-Time Password (TOTP) implementation via Google2FA with 32-character secrets (160-bit entropy)
  • Email MFA Option: Alternative email-based verification with 6-digit codes that expire in 10 minutes
  • QR Code Generation: Server-side SVG QR code generation using BaconQRCode library for reliable display
  • Password Protection: Sensitive operations (regenerate recovery codes) require password confirmation
  • Activity Logging: All MFA-related actions (setup, reset, disable) logged to activity log with full audit trail

Security Features

  • Encrypted Secrets: TOTP secrets encrypted at rest in database
  • Hashed Codes: Recovery codes and email verification codes stored as bcrypt hashes
  • Time Windows: TOTP verification allows ±60 second window (2 windows) for clock drift
  • Single-Use Recovery: Recovery codes automatically consumed after use, remaining codes still valid
  • Session Verification: MFA verification tracked in session, requiring re-verification on new sessions

Technical Improvements

  • MfaController: Complete controller with 14 methods handling all MFA operations (setup, verify, challenge, reset)
  • RequireMfaVerification Middleware: Custom middleware enforcing mandatory MFA with intelligent redirect logic
  • MfaCodeEmail Notification: Queued email notification for sending verification codes
  • Test Infrastructure: Base TestCase updated to auto-bypass MFA for existing tests, preventing test failures
  • WithMfaBypass Trait: Flexible trait for tests requiring MFA verification testing
  • Migration Update: Changed mfa_email_code from varchar(10) to text to accommodate hashed values

User Interface

  • MFA Setup Wizard: Step-by-step TOTP setup with QR code scanning and manual entry option
  • Challenge Page: Clean verification interface with separate UI for TOTP vs email verification
  • Recovery Codes Display: User-friendly display with download, copy, and print functionality
  • Status Indicators: Clear visual feedback showing current MFA method and status
  • Error Handling: Comprehensive error messages and validation feedback throughout MFA flows

Admin Features

  • Reset MFA Button: Added to users list in Actions column (only shown for users with MFA enabled)
  • Force Re-registration: Reset functionality clears all MFA data, requiring user setup on next login
  • Activity Tracking: MFA reset actions logged with user details and previous MFA configuration

Database Changes

  • Migration 2025_11_01_104649: Added 6 MFA fields to users table
    • mfa_enabled (boolean, default false)
    • mfa_type (enum: 'email', 'totp', nullable)
    • mfa_secret (text, encrypted TOTP secret)
    • mfa_recovery_codes (json, hashed codes)
    • mfa_email_code (text, hashed email verification code)
    • mfa_email_code_expires_at (timestamp)

Routes Added

  • GET /mfa - MFA settings dashboard
  • GET /mfa/enable-totp - TOTP setup wizard
  • POST /mfa/verify-totp - Verify TOTP code
  • POST /mfa/enable-email - Enable email-based MFA
  • POST /mfa/regenerate-codes - Generate new recovery codes
  • GET /mfa/challenge - MFA verification challenge
  • POST /mfa/verify - Verify MFA code (TOTP/email/recovery)
  • POST /mfa/resend-email-code - Resend email verification code
  • POST /users/{id}/reset-mfa - Admin reset user MFA

Dependencies Added

  • pragmarx/google2fa-laravel ^2.3 - TOTP implementation
  • bacon/bacon-qr-code ^3.0 - QR code generation

Testing

  • 17 Test Cases: Complete coverage of MFA functionality
    • User redirection flows
    • TOTP setup and verification
    • Email MFA setup and verification
    • Recovery code generation and usage
    • MFA challenge verification
    • Admin reset functionality
    • Session-based verification
    • UI state validation
  • Test Helpers: createUserWithMfa() and automatic MFA bypass for non-MFA tests
  • All Tests Passing: 100% success rate with proper isolation

Notes

This is a major security enhancement release introducing mandatory two-factor authentication across the entire system. All users must configure MFA (TOTP or email) to access the application. The implementation follows security best practices with encrypted secrets, hashed codes, and comprehensive audit logging. Server-side QR code generation ensures reliable TOTP setup across all devices. The test suite provides complete coverage ensuring the MFA system functions correctly and securely.

[1.1.7] - 2025-11-01

Added

  • Dashboard Widget Customization: Users can now customize which widgets appear on their dashboard with settings modal
  • Widget Preferences Persistence: Dashboard widget preferences stored in user preferences JSON column
  • Discount Code Type Filtering: Discount codes now support applicable_types field to restrict usage to subscriptions or add-ons
  • Featured Period Discount Tracking: Featured event periods now record discount code, amount, and type for reporting

Fixed

  • Dashboard Loading Error: Restored proper DashboardController route that was replaced with temporary debug closure, fixing "Undefined variable $userBusinesses" error
  • Free Add-on Purchase Flow: Add-on purchases with 100% discount codes now skip Stripe payment processing entirely and directly activate the featured period
  • Purchase Modal State: Fixed modal not closing after successful 100% discount add-on purchase, properly resetting button state and refreshing data
  • Query Optimization Middleware: Re-enabled and simplified query logging functionality for development environments
  • Code Formatting: Applied PSR-12 formatting standards across factories, seeders, controllers, and tests

Enhanced

  • Event Organiser Directory: Directory now excludes businesses the logged in user is associated with, providing a cleaner focus on discovering new event organisers
  • Add-on Purchase UX: Improved user experience for free add-ons with immediate activation and appropriate success messaging
  • Dashboard Performance: Widgets only load data when enabled, improving performance for customized dashboards
  • Discount Code Management: Enhanced discount code creation/editing with applicable type selection (subscriptions, add-ons, or both)
  • Subscription Auto-Apply: Automatic discount code application now checks applicable_types to ensure valid usage

Technical Improvements

  • User Model: Added preferences field with dashboard widget management methods (getDashboardWidgets(), updateDashboardWidgets())
  • DiscountCode Model: Added applicable_types array field with validation methods (isApplicableToSubscriptions(), isApplicableToAddOns())
  • FeaturedEventPeriod Model: Added discount tracking fields and is_active attribute appended to JSON serialization
  • FeaturedEventController: Added $0 total check to bypass Stripe checkout session creation when final price is $0 after discount
  • DashboardController: Conditional widget data loading based on user preferences, added updateWidgets() endpoint
  • EventOrganiserController: Implemented user business exclusion logic using BusinessStaff relationships for directory filtering
  • Route Configuration: Restored dashboard route to use DashboardController with proper auth middleware, added widget update endpoint
  • Bootstrap Configuration: Re-enabled QueryOptimizationMiddleware, removed temporary debugging middleware
  • Logging Channels: Added dedicated channels for debug, performance, database, redis, and auth logging
  • Code Quality: Standardized code formatting across 40+ files including controllers, models, factories, seeders, and tests

Database Migrations

  • 2025_11_01_012108: Add preferences JSON column to users table
  • 2025_11_01_062644: Add applicable_types JSON column to discount_codes table
  • 2025_11_01_063216: Add discount tracking fields to featured_event_periods table

Notes

This is a comprehensive release consolidating dashboard customization features, discount code enhancements, and critical bug fixes. Users gain full control over their dashboard layout while discount codes become more flexible with type-specific applicability. The free add-on purchase flow is streamlined to skip payment processing when appropriate. Code quality improvements and formatting standardization enhance maintainability across the entire codebase.

[1.1.6] - 2025-11-01

Added

  • Unified Tasks & Notifications Page: Tasks index page now displays both tasks and event notifications in separate tabs for centralized task management
  • Notification Threading: Full two-way communication support allowing businesses and stallholders to reply to notifications and view conversation threads
  • Dashboard Notifications Widget: Added "Unread Messages" widget showing top 5 unread notifications with priority indicators and quick access to full threads
  • Invoice Task Links: Direct links from tasks to related invoices with "View Invoice" buttons for payment tasks on both task list and detail pages
  • Orphaned Task Prevention: Automatic cleanup of invoice-related tasks when invoices are deleted to prevent orphaned records

Enhanced

  • Task Page Navigation: Renamed "My Tasks" to "My Tasks & Notifications" with tabbed interface supporting filtering and pagination on each tab
  • Dashboard Layout: Restructured dashboard grid with "My Businesses" section now spanning 2 columns next to "Unread Messages" widget for better space utilization
  • Notification Display: Notifications show priority icons, message previews, sender information, and timestamps with clickable items opening conversation threads
  • Task Detail Pages: Added comprehensive invoice information display including invoice number, amount, status, and due date with direct payment links
  • Tab State Persistence: Improved tab switching to properly maintain active tab state when applying filters on notifications

Fixed

  • Tab Switching Bug: Fixed notification tab not staying active after applying filters by improving JavaScript tab state management
  • Orphaned Invoice Tasks: Resolved issue where 7-9 tasks remained in database pointing to deleted invoices (IDs 4, 5, 7, 8, 9, 10, 11, 12, 13)
  • EventInvoiceObserver: Implemented proper task cleanup in deleted() method to prevent future orphaned records when invoices are removed
  • Task Assignment Cleanup: Verified task_assignments table properly cascades deletes preventing orphaned assignment records

Technical Improvements

  • EventNotification Model: Added parent_id to fillable array and implemented relationship methods (parent(), replies(), allReplies()) for conversation threading
  • Database Migration: Created migration to add parent_id column to event_notifications table with foreign key constraint and cascade delete
  • TaskController: Enhanced index() method to fetch and filter event notifications with read/unread status and priority filtering support
  • EventNotificationController: Added reply() and thread() methods for handling notification responses and conversation retrieval
  • DashboardController: Added top 5 unread notifications query with comprehensive error handling and relationship eager loading
  • Observer Pattern: Fixed EventInvoiceObserver to delete related tasks when invoices are deleted, with audit logging for tracking

Database Cleanup

  • Orphaned Tasks Removal: Deleted 9 orphaned task records (related to invoice IDs 10, 11, 12) that were pointing to non-existent invoices
  • Data Integrity Verification: Confirmed all remaining invoice tasks (12 records) reference valid invoices and have proper task assignments

Notes

This release completes the notification threading system and unifies task and notification management into a single interface. Users can now view all tasks and messages in one place, reply to notifications to create threaded conversations, and quickly see unread messages from the dashboard. The fix for orphaned invoice tasks ensures data integrity and prevents similar issues in the future through proper observer implementation.

[1.1.5] - 2025-11-01

Added

  • Subscription Health Check: Automated daily sync of event subscription counts to ensure database accuracy (runs at 2:00 AM)
  • Discrepancy Detection: Enhanced sync command with automatic detection and logging of subscription count mismatches
  • Discrepancy Reporting: Detailed logging to Laravel log files when subscription counts don't match actual event data
  • Summary Reports: Console output showing total businesses checked, discrepancies found, and visual indicators for matching counts

Enhanced

  • Subscription Sync Command: Improved subscription:sync-event-counts command with better output formatting and warnings for discrepancies
  • Command Output: Added visual indicators (✓) for businesses with matching counts and warnings for discrepancies
  • Scheduled Task Management: Migrated all scheduled tasks from app/Console/Kernel.php to routes/console.php using Laravel 11 syntax

Fixed

  • Event Subscription Count Display: Fixed issue where Events Subscription count showed 0 when business had 2 registered events (business ID: 3a57c397-5f86-42e7-969f-2541156afb3c)
  • Scheduled Task Execution: Resolved issue where scheduled tasks defined in Kernel.php weren't running by moving them to routes/console.php

Technical Improvements

  • Scheduled Tasks Architecture: All scheduled tasks now properly defined in routes/console.php with descriptive names and purposes
  • Task Scheduling: Consolidated 10+ scheduled tasks including events, subscriptions, invoices, tasks, and health checks
  • Health Monitoring: Added comprehensive subscription count health check to prevent future sync issues
  • Code Organization: Cleaned up app/Console/Kernel.php with proper documentation noting Laravel 11 approach
  • Logging Infrastructure: Structured logging for subscription discrepancies with business ID, name, and count differences

Configuration

  • Subscription Sync Schedule: Daily health check at 2:00 AM to verify subscription count accuracy
  • Command Output Logging: All scheduled commands append output to storage/logs/scheduled-commands.log
  • Discrepancy Logging: Subscription count mismatches logged to storage/logs/laravel.log with detailed context

Notes

This release adds automated health monitoring for subscription counts with daily scheduled verification. The system now proactively detects and corrects any discrepancies between stored counts and actual event data, while maintaining the performance benefits of cached counts. All scheduled tasks have been migrated to Laravel 11's modern routing-based approach for better maintainability.

[1.1.4] - 2025-10-25

Enhanced

  • Event Tile Layout: Simplified Upcoming Events tiles on public landing page for cleaner, more focused display
  • Featured Event Interaction: Made entire featured event carousel slides clickable for better user experience
  • Location Display: Event tiles now display full address information (address, suburb, state, postcode) with location pin icon
  • Automatic Discount Codes: Discount codes linked to a business now automatically apply during subscription creation and plan changes without requiring manual entry. Only valid, non-expired codes with remaining usage are applied. If multiple codes exist, the oldest is used first

Fixed

  • Event Tile Location: Fixed location display to use actual database fields (address, suburb, state, postcode) instead of non-existent location field
  • Featured Carousel Location: Updated featured event carousel to display proper address information using correct database fields
  • Theme Compliance: Replaced hardcoded colors (bg-white, text-white, border-white) with DaisyUI semantic tokens in hero section for proper light/dark theme support

Removed

  • Event Tile Logo: Removed logo/avatar from Upcoming Events tiles to reduce visual clutter
  • Event Tile Description: Removed event description from tiles for more concise presentation
  • Event Tile Business Name: Removed business/organizer name from tiles to focus on essential event information
  • Event Tile Button: Removed redundant "Show Details" button as entire tile is now clickable

Technical Improvements

  • Click Handling: Implemented proper event propagation handling to prevent double-clicking on featured carousel buttons
  • Cursor Indication: Added cursor-pointer class to featured event slides for better UX feedback

[1.1.3] - 2025-10-20

Added

  • Featured Events System: Complete paid featured events add-on system allowing event organizers to feature their events on the landing page for maximum visibility ($49.99 for 7 days)
  • Featured Events Carousel: Auto-rotating carousel on public landing page showcasing featured events with 5-second transitions and smooth animations using AlpineJS
  • Geolocation Integration: IPInfo.io integration for location-based event recommendations with fallback to nearby events when no featured events exist
  • Featured Event Periods: Database tracking of featured event periods with start/end dates and active status for proper feature management
  • Subscription Add-On System: Flexible add-on architecture for subscription enhancements with pricing, duration, and metadata support
  • Featured Badge: Visual "Featured" badge indicator on carousel slides for paid featured events
  • Geolocation Testing: Development route /test-geolocation with test_ip parameter for simulating different locations during development
  • Enhanced Hero Section: Improved landing page hero with animated gradient backgrounds and compelling call-to-action buttons

Enhanced

  • Landing Page Navigation: Replaced text-based site name with new ManageEvents_Logo.jpg image logo in top-left corner for better branding
  • Event Discovery: Smart fallback system shows nearby events based on user location when no featured events are active
  • Carousel Design: Full-width responsive carousel with header background images, centered text overlays, and adaptive styling
  • Text Readability: Backdrop blur effects and semi-transparent dark overlays on carousel text for perfect readability over any background image
  • Background Display: Full background image display without cropping or scaling, maintaining original image dimensions
  • Button Positioning: "View Event Details" button positioned in bottom-right corner of carousel with proper z-index layering
  • Featured Badge Placement: Moved featured badge to top-left corner to avoid conflicting with action buttons
  • Heading Size: Increased carousel heading size to text-4xl/text-6xl for better visual impact and hierarchy
  • Carousel Controls: Simplified carousel navigation with dot indicators only (removed arrow buttons) for cleaner interface

Fixed

  • Background Image Loading: Resolved S3 URL 403 Forbidden errors by prioritizing public disk storage over S3 for header backgrounds
  • Storage Disk Fallback: Implemented proper fallback logic checking public disk first, then S3 for all event images
  • Column Name Error: Fixed SQL error changing event_description to eventdescription in search functionality (HomePageController:178)
  • Carousel Display: Corrected carousel layout to properly show full background images without cutoff or cropping
  • Text Centering: Fixed event details alignment to properly center heading, badges, and information across carousel
  • Badge Styling: Updated date, location, and business badges to use DaisyUI badge components with consistent styling
  • Button Visibility: Ensured "View Event Details" button remains visible and accessible in bottom-right corner
  • AlpineJS Loading: Added AlpineJS CDN to enable carousel interactivity and auto-rotation functionality
  • Event Filtering: Added upcoming() scope to featured events query to only show events with future dates
  • Public Event Visibility: Fixed events not appearing by ensuring public = 1 flag is properly set

Technical Improvements

  • Database Migrations: Created subscription_add_ons and featured_event_periods tables with proper relationships and constraints
  • Model Relationships: Added featuredPeriods, activeFeaturedPeriod, and add-on relationships to Event model
  • Query Scopes: Implemented featured() and upcoming() query scopes for efficient featured event filtering
  • Seeders: Database seeder for featured event add-on pricing ($49.99, 7 days duration) with proper Stripe product configuration
  • HomePageController: Enhanced with featured event logic, geolocation support, and nearby event fallback system
  • Cache Management: Proper view cache clearing and configuration management throughout development
  • Storage Architecture: Multi-disk storage support with intelligent fallback between public disk and S3/Wasabi
  • Component Updates: Updated application-logo component to reference new logo file path

Configuration

  • IPInfo.io Setup: Added IPINFO_TOKEN environment variable and configuration in config/services.php:58-60
  • Logo Update: New site logo stored at public/images/ManageEvents_Logo.jpg referenced in application-logo component
  • .env.example: Updated with IPInfo.io token configuration and documentation for geolocation feature

Notes

This release introduces a complete featured events system enabling event organizers to gain maximum visibility through paid featured placement on the landing page. The carousel showcases events with beautiful full-width displays, adaptive text overlays, and smooth auto-rotation. Location-based recommendations ensure users always see relevant content, even when no featured events are active. The new branding with ManageEvents logo strengthens site identity across all public pages.

[1.1.2] - 2025-10-09

Added

  • Theme Compliance Tools: Pre-commit hook (.githooks/pre-commit) to automatically detect hardcoded colors before commits
  • Theme Check Command: Laravel artisan command php artisan theme:check to scan entire codebase for theme violations with auto-fix capability
  • Comprehensive Browser Tests: Expanded test suite (tests/Browser/ThemeComplianceTest.php) covering 10+ pages in both light and dark themes
  • Developer Documentation: Complete theme development guidelines (.docs/development/theme-guidelines.md) with DO's, DON'Ts, and component examples
  • Testing Documentation: Theme compliance audit report, testing gaps postmortem, and visual regression testing setup guide
  • Prevention System: Multi-layered approach with pre-commit validation, CI/CD integration, and automated testing

Fixed

  • Event Form Builder: Fixed hardcoded colors breaking dark theme in form builder page (resources/views/events/forms/show.blade.php)
  • Event Form Preview: Fixed all form fields, buttons, and containers to work in both themes (resources/views/events/forms/preview.blade.php)
  • Event Form Settings: Fixed form inputs, labels, and buttons for theme compliance (resources/views/events/forms/edit.blade.php)
  • Event Application Details: Fixed status badges, modals, forms, notes, and timeline display (resources/views/events/applications/show.blade.php)
  • Event Tags Management: Fixed Add/Edit tag modals and application statistics in events page (resources/views/events/show.blade.php)
  • Dashboard Components: Fixed pending invites section hardcoded colors (resources/views/dashboard.blade.php)
  • Reports Modal: Fixed export buttons and close button colors (resources/views/reports/index.blade.php)
  • Mobile Navigation: Fixed hamburger menu and user info display in dark theme (resources/views/layouts/navigation.blade.php)
  • Button Components: Converted primary button from 91 characters of hardcoded styles to theme-aware DaisyUI classes (resources/views/components/primary-button.blade.php)
  • 40+ View Files: Systematically fixed hardcoded bg-white, bg-gray-*, text-gray-*, and dark: variants across authentication, components, business, events, profile, and report views

Enhanced

  • DaisyUI Integration: All pages now use semantic color tokens (bg-base-100, text-base-content) instead of hardcoded colors
  • Theme Switching: Seamless light/dark theme transitions across entire application with no visual artifacts
  • Developer Experience: Pre-commit hook provides immediate feedback with suggested fixes when violations are detected
  • Automated Testing: Browser tests automatically verify theme compliance on major pages with screenshot capabilities
  • Code Quality: Reduced maintenance burden by using DaisyUI's built-in theme system instead of manual dark: variants

Technical Improvements

  • Git Hooks Configuration: Configured .githooks directory with executable pre-commit validation script
  • Artisan Commands: New CheckThemeCompliance command with --fix, -v, and --json options for CI/CD integration
  • Test Coverage: Browser tests now cover dashboard, business, events, forms (builder/preview/edit), applications, reports, and profile pages
  • Documentation System: Comprehensive .docs directory with testing strategies, compliance audits, and developer guidelines
  • Regex Patterns: Advanced pattern matching for detecting and removing dark: variants, hardcoded colors, and theme-breaking styles
  • Auto-fix Logic: Intelligent replacement system that converts hardcoded colors to semantic tokens and removes unnecessary dark: variants

Documentation

  • Theme Compliance Summary (.docs/THEME-COMPLIANCE-SUMMARY.md): Complete overview of all fixes and tools
  • Theme Guidelines (.docs/development/theme-guidelines.md): Developer guide with patterns, examples, and code review checklist
  • Compliance Audit (.docs/testing/theme-compliance-audit.md): Detailed audit report with issues, locations, and recommendations
  • Testing Gaps Postmortem (.docs/testing/theme-testing-gaps-postmortem.md): Analysis of why issues were missed and prevention strategies
  • Visual Regression Setup (.docs/testing/visual-regression-testing-setup.md): Complete guide for Percy.io and BackstopJS implementation

Notes

This release represents a comprehensive theme compliance overhaul ensuring consistent user experience across light and dark modes. All critical pages have been fixed, prevention tools are in place, and future regressions are protected against through pre-commit hooks, automated testing, and developer documentation. The codebase now follows DaisyUI best practices with semantic tokens throughout.

[1.1.1] - 2025-09-24

Added

  • Report System Email Listeners: Implemented SMTP2GO email logging and mail failure tracking listeners for better email debugging
  • Enhanced Report Testing: Added comprehensive test suite with 295+ test cases covering all report functionality
  • Report UI Modal Controls: Added improved modal functionality for report filtering and display

Enhanced

  • Report Controller: Significantly enhanced with improved filtering, pagination, and modal-based UI interactions
  • Report Templates Seeder: Refactored for better organization and maintainability
  • Email System: Added plain text to HTML conversion for SMTP2GO compatibility
  • Notification System: Improved password reset notifications with better formatting

Changed

  • Changelog UI: Simplified changelog display by removing status badges and header cards for cleaner presentation
  • Changelog Formatting: Improved spacing between bullet points and text for better readability
  • Changelog Content Filtering: Now filters out header text and description from markdown display

Fixed

  • Report System: Various fixes to report generation, filtering, and display logic
  • Email Failures: Added proper logging and error handling for email sending failures

[1.1.0] - 2025-09-10

Added

  • Report System Section Name Support: Added section name field to report system with proper database field configuration
  • Comprehensive Report Testing: Created extensive test suite to validate all existing reports across different contexts and scopes
  • Field Dropdown Sorting: Report builder filter fields are now sorted alphabetically for better usability

Enhanced

  • Report Field Seeder: Updated seeder to include section name field with correct table and column mappings
  • Report Field Validation: Improved validation to ensure all report fields match actual database schema

Fixed

  • Section Name Display: Fixed SQL error where section name column was showing blank values due to incorrect field key configuration
  • Database Field Mapping: Corrected event_sections field mapping from non-existent 'section_name' column to correct 'name' column
  • Report Configuration: Updated existing reports to use correct field keys for section name display
  • Test Infrastructure: Fixed test database schema issues with proper UUID handling and column name validation

Technical Improvements

  • Report Query Optimization: Ensured proper join paths between event_sites, event_sections, and related tables
  • Database Consistency: Removed duplicate/incorrect section name fields from report_fields table
  • Test Coverage: Added comprehensive validation for all report table combinations, filter operators, and business contexts

[1.0.11] - 2025-09-09

Added

  • Stripe Invoice Integration: Complete Stripe invoice system with itemized line items and GL codes for accounting reconciliation
  • Manual Payment Status Check: "Check Payment Status" button for event organizers to manually verify Stripe invoice payments
  • Automated Payment Polling: Hourly background job that automatically checks all sent invoices for payment status updates
  • Batch Processing System: Efficient batch processing of invoice payment checks with configurable batch sizes and API rate limiting
  • Enhanced Email System: Fixed navigation authentication issues for public invoice views preventing payment processing failures

Enhanced

  • Payment Tracking: Dual approach combining manual checking and automated polling ensures no payments are missed
  • Stripe Integration: Uses proper Stripe invoices instead of checkout sessions for professional itemized billing
  • GL Code Metadata: Product GL codes included in Stripe invoice metadata for seamless accounting reconciliation
  • Admin Interface: Added payment status check buttons in invoice management interface with real-time feedback
  • Task Automation: Automatic completion of payment tasks when invoices are marked as paid
  • Error Handling: Comprehensive error handling for Stripe API interactions and payment processing

Fixed

  • Public Invoice Access: Fixed authentication issues in navigation preventing public invoice pages from loading
  • Payment URL Handling: JavaScript now properly handles both payment_url (Stripe invoices) and checkout_url (checkout sessions)
  • Background Processing: Scheduled command processes all sent invoices in batches during single hourly runs
  • CSRF Protection: Proper CSRF exclusions for webhook endpoints and public payment processing

Changed

  • Invoice Creation: Stripe invoices now created with local invoice numbers for consistent numbering across systems
  • Payment Detection: No webhook configuration required - uses API polling for payment status detection
  • Scheduled Tasks: Payment checking runs hourly and processes all sent invoices regardless of age
  • Command Options: Updated invoice check command with batch processing and configurable limits

[1.0.10] - 2025-09-08

Added

  • Payment Options Display: Added checkboxes on business details page to show if Stripe Integration and Bank Transfer are enabled
  • ABN Re-lookup Feature: Added "Re-lookup" button on business edit page to refresh company details from ABR register
  • Email Invitations for Staff: Staff invitations now send email notifications with accept/decline links
  • Cancel Button: Added cancel button to business edit page for better navigation

Changed

  • Business Details Label: Changed "Company Details" to "Business Details" on both show and edit pages for consistency
  • ABN Field Behavior: Company Name and ABN fields are now read-only when business was set up with an ABN
  • ABN Field Visibility: ABN field is hidden on edit page if business was created without an ABN
  • Staff Invitation Flow: Users with pending invites see them first in dashboard instead of being redirected to create business

Fixed

  • Form Field Errors: Fixed SQL errors when adding product selection fields to application forms by properly handling terms_content field
  • JavaScript Field Management: Terms content field is now properly disabled for non-terms field types preventing submission errors

[1.0.9] - 2025-09-05

Added

  • Comprehensive Refund System: Full Stripe refund integration with invoice status tracking and audit trail
  • Invoice History Tracking: Complete audit trail for all invoice changes with detailed metadata and user tracking
  • Advanced Payment Processing: Enhanced Stripe Checkout integration with comprehensive payment tracking
  • Payment Success Callbacks: Automatic invoice status updates with full Stripe transaction details capture
  • Dual Payment Options: Stripe card payments and bank transfer options for flexible payment methods
  • Invoice History Modal: Professional timeline view of all invoice changes with user attribution and timestamps
  • Database Status Constraints: Added 'refunded' status to invoice status validation constraints
  • Enhanced Invoice Actions: Status-based action buttons with role-based permissions (SuperAdmin vs Event Organizers)
  • ABN Uniqueness Validation: Prevents creation of duplicate businesses with same ABN by checking in Step 1 before ABR lookup, with access request system for existing businesses
  • Business Access Request System: Users can request access to join existing businesses when attempting to register with an already-used ABN with task-based approval workflow
  • Task Type System: Added type column to tasks table for better task categorization and specific logic handling with automatic migration-based categorization
  • Task Type UI Elements: Type-specific action buttons (Allow/Deny) for business access requests with proper permission checks

Enhanced

  • Invoice Actions UI: Improved button spacing with centered, evenly-spaced action icons
  • Payment Flow Optimization: Streamlined payment process removing redundant card collection steps
  • Invoice Status Management: Complete lifecycle support including refunded status with proper badge styling
  • Error Handling: Comprehensive error handling for payment processing and invoice operations
  • User Experience: Modal-based invoice history with professional timeline layout and responsive design
  • Security: Role-based action permissions - regular users see cancel buttons, SuperAdmins see delete for unpaid invoices
  • Data Integrity: Comprehensive Stripe payment data storage including transaction IDs, amounts, currencies, and receipt URLs
  • Cache Management: Business cache automatically cleared when granting access via task requests ensuring immediate visibility of staff changes

Fixed

  • Invoice Edit Functionality: Resolved route model binding errors preventing invoice editing
  • Payment Processing: Fixed CSRF token issues with public payment endpoints by moving to dedicated API routes
  • Invoice Generation: Resolved "Error loading available products" by creating proper event-scoped product endpoints
  • Database Constraints: Fixed refunded status validation allowing proper invoice status transitions
  • JavaScript Errors: Resolved SVG parsing errors in refund button icons
  • Invoice History Queries: Fixed column name mismatch using correct 'created_at' instead of 'changed_at'
  • Action Button Consistency: Standardized cancel vs delete actions with appropriate confirmation messages
  • Refund Processing: Fixed "This invoice has already been refunded" error on reissued invoices by clearing refund information when new payments are processed
  • Immediate User Feedback: Restored instant invoice list refresh after user actions (send, edit, cancel, delete) while maintaining background auto-refresh
  • Address Lookup: Fixed postal address lookup on business create page to properly populate Address field with park names and venue names from OpenStreetMap data
  • Business Payment Options: Fixed badge text on business edit page to correctly show "Owners & Admins" instead of "Owners Only" for Payment Options section
  • Business Subscription Display: Fixed subscription display issue after free trial registration by setting correct "trialing" status instead of "active" during business creation
  • Business Access Request Processing: Fixed "array offset on null" error when approving access requests by adding proper metadata validation and extraction from task descriptions
  • Task Type Migration: Added database migration to automatically categorize existing tasks based on content patterns ensuring consistency across all environments
  • Business Registration Flow: Fixed business registration redirect to go directly to created business instead of business listing, and removed non-functional subscription selection from registration form

Technical Improvements

  • Database Migrations: Added invoice status constraint updates, Stripe refund field tracking, task type column, and automated task categorization
  • API Endpoints: New routes for invoice history, event-scoped product availability, and business access request handling
  • Controller Methods: Enhanced EventInvoiceController with history tracking and refund processing, TaskController with access request approval/denial
  • Frontend Architecture: Improved JavaScript function organization with proper error handling and type-specific task UI
  • Payment Integration: Full Stripe API integration for payments, refunds, and transaction tracking
  • Task Management: Comprehensive task type system with metadata support for context-aware task handling

[1.0.8]

Added

  • Invoice Settings Configuration: Expandable settings section for configuring default invoice due dates
  • Flexible Due Date Management: Two calculation methods - days from invoice issue or days before event date
  • GST Registration System: Business-level GST registration with automatic tax calculations
  • Conditional GST Display: Invoices show/hide GST fields based on business registration status
  • Standalone Invoice Creation: Event organisers can create product-only invoices without site fees
  • Enhanced Invoice Generation: Only processes stalls allocated to sites without existing invoices
  • Real-time Due Date Preview: Instant calculation preview when configuring invoice settings
  • Route Caching Fix: Resolved 404 errors for available-stalls API endpoint
  • Sequential Invoice Numbering: Global system-wide sequential invoice numbering with format INV{YEAR}-{6-digit-number}
  • Send Invoice Functionality: Email-ready invoice sending system with status tracking

Enhanced

  • Invoice Calculation Logic: Automatic GST inclusion/exclusion based on business registration
  • Business Forms: Added GST Registered checkbox to create, edit, and view forms with database integration
  • Due Date Automation: All invoice creation now uses event-specific default due date settings
  • Product Selection Modal: Improved height and user experience for better visibility
  • Settings Interface: Collapsible settings panel with intuitive configuration options
  • Create Invoice Modal: Complete redesign to match Edit Invoice layout with professional grid system and GST-aware totals
  • Invoice Actions: Added Send Invoice button to Actions column with loading states and tooltips
  • Invoice Totals Calculation: Real-time GST calculation with proper show/hide logic for registered businesses

Fixed

  • Route Cache Issues: Cleared routing problems affecting invoice creation functionality
  • Invoice Data Loading: Improved authentication and error handling for AJAX requests
  • GST Calculations: Proper conditional logic for tax application based on business status
  • Database Migrations: Clean field additions with proper rollback support
  • Notification System: Re-enabled and fixed task notifications with proper error handling
  • Invoice Modal Layout: Consistent layout between Create and Edit modals with proper product management

[1.0.7]

Added

  • Comprehensive Invoice Management System: Complete CRUD operations for event invoices with automatic generation
  • Invoice Editing Modal: Real-time calculations for site fees and products with comprehensive editing capabilities
  • Product Selection Modal: Category grouping and filtering of already selected products with enhanced UX
  • Multi-site Assignment: Algorithm for large stalls in fixed-price sections with adjacent site finding logic
  • Stripe Integration: Business payment processing with API key management and event payment acceptance
  • Terms & Conditions Field: Rich text editor for event forms with required acceptance validation
  • Applications Tab: Added to business stalls view with comprehensive application management and filtering
  • Address Search Enhancement: OpenStreetMap Nominatim integration replacing deprecated Google Places API
  • Venue Type Detection: Intelligent parsing for events with venue type badges and emoji indicators
  • Task Management Observer: Automatic task lifecycle management with EventApplicationObserver pattern
  • Authorization System: Enhanced security checks to prevent unauthorized access to organizer views
  • Section Column: Added to invoices table showing section name before site name
  • Invoice Status Tracking: Full lifecycle support (draft, sent, paid, overdue, cancelled) with visual indicators

Enhanced

  • Dashboard Improvements: Role-based sections for stall holders and event organizers with better navigation
  • Application System: Show all stall applications on events index with color-coded status badges
  • Business Integration: Stripe API configuration section with role-based access control (Owner/Admin/SuperAdmin only)
  • Bulk Site Management: Allocation-aware operations with improved section tile refresh
  • Product Query Scope: Updated to include business-level products in application forms
  • Application Flow: Redirect to events list after submission with proper navigation controls
  • Business Creation: Enhanced wizard excluding soft-deleted businesses from duplicate checks
  • Address Autocomplete: Added to business create, edit, and event edit forms
  • Invoice Workflow: Comprehensive product management with automatic total calculations
  • Site Assignment Logic: Accommodate stalls larger than individual sites in fixed-price sections
  • Subscription Management: Modal-based subscription creation with integrated Stripe processing

Fixed

  • Dropdown Menu Z-index: Site tile dropdown menus no longer cut off by collapse sections
  • Invoice Data Loading: Authentication headers and proper error handling for AJAX requests
  • JavaScript Type Conversion: Fixed .toFixed() calls on string values from database
  • Object Serialization: Resolved "[object Object]" display issues in product selection modal
  • Category Grouping: Product selection modal shows proper category names instead of objects
  • Draft Application Loading: Fixed to open in edit mode with properly saved data
  • Route Model Binding: Resolved EventApplication primary key issues
  • Product Selection Validation: Added client and server-side validation for quantity limits
  • Authorization Issues: Temporarily disabled missing BusinessPolicy to fix access problems
  • Insurance Document Display: Fixed document type and coverage display on application responses
  • Task Completion: Resolved issues when applications are submitted
  • Business Stall Form: Improved layout with better field alignment

[1.0.6]

Enhanced

  • Improved event sections management with inline section details and site management
  • Enhanced site pricing calculations to properly reflect different pricing models (per square metre, per frontage, fixed price)
  • Added comprehensive site dropdown actions including View Details, Edit, and Delete functionality
  • Implemented bulk site editing capabilities allowing users to select multiple sites and update properties simultaneously
  • Added bulk site selection with "Select All" functionality and real-time selection counters
  • Enhanced modal-based site management workflow for seamless editing without page navigation
  • Improved site status display and editing with proper validation and safety checks
  • Added Edit Section button positioning and functionality for better user experience

Fixed

  • Resolved site dropdown action issues where only "Assign Stall Holder" was functional
  • Fixed site price calculations to properly calculate based on section pricing type (area × rate for per_sqm pricing)
  • Fixed recurring UUID/slug routing conflicts by standardizing on UUID routing throughout the system
  • Resolved "Route not defined" errors during bulk site creation operations
  • Fixed section update failures caused by model binding inconsistencies
  • Corrected site status loading in edit modals to display current status instead of defaulting to "Available"
  • Fixed site details modal and edit modal functionality with proper section context
  • Resolved tab persistence issues ensuring users stay on the correct tab after operations

[1.0.5]

Added

  • Multi-step business registration with ABN lookup with the Australia Business Register
  • Event notification system for organisers to communicate with stall holders
  • Enhanced application tagging with searchable dropdowns

Changed

  • Business registration now uses a two-step process for better user experience

Fixed

  • Login redirect issues resolved
  • Fixed AI document validation introducing spaces into document numbers where none exist in original PDF by improving text extraction and AI prompts
  • Enhanced PDF text extraction to preserve document number formatting and prevent spacing artifacts during OCR processing
  • Added specific AI instructions to treat document numbers like 'ABC123456' and 'ABC 123456' as matches, with proper normalization
  • Fixed business page scroll positioning issue where pages loaded part way down when navigating with hash fragments like #businessdetails
  • Prevented default browser hash scrolling behavior and ensured pages consistently load at top position
  • Enhanced tab switching to maintain scroll position and prevent unwanted page jumps during navigation
  • Fixed Laravel error "Method PendingResourceRegistration::scopeBindings does not exist" by removing incorrect route binding syntax incompatible with Laravel 12
  • Fixed "options.0 field must be a string" validation error when creating form fields that don't require options
  • Fixed application form fields not displaying by adding comprehensive error handling and success messages
  • Added validation error display for form field creation to help users identify submission issues
  • Fixed document validation styling to only highlight the validation badge green instead of entire row background
  • Fixed dark mode text color issues and bullet points not displaying in Event Description using comprehensive Tailwind arbitrary property selectors
  • Fixed bullet points and list formatting in Event Description with explicit list-disc, list-decimal, and list-item classes
  • Fixed recurring 404 error on public event pages by preserving event status and publication settings in Event Description form
  • Fixed Event Description form resetting event status to draft - now preserves current status, public visibility, and other critical fields
  • Fixed rich text bullet points not displaying properly in Event Description with improved Tailwind prose styling
  • Fixed Event Description update method to only modify intended fields and prevent unintended data overwrites
  • Fixed event description being cleared when updating event from forms that don't include description field
  • Fixed tab persistence when saving event description - now correctly returns to Event Description tab after save
  • Added missing hidden fields to Event Description form to prevent data loss during updates

Enhanced

  • Changed Events I'm Attending links to direct to public event pages instead of management views for better user experience
  • Implemented comprehensive database query optimization across Events, Business, and Event Detail pages reducing query counts by 50-70%
  • Enhanced CacheService with additional eager loading for subscriptions, events, and staff relationships to minimize N+1 queries
  • Optimized EventsController index method with bulk review count queries and proper relationship preloading
  • Enhanced BusinessController to use cached relationships instead of separate database queries for better performance
  • Optimized EventApplicationController with comprehensive eager loading for business, event, form, response, and note relationships
  • Updated event Applications tab from card-style to table display with status statistics and filtering
  • Improved application timeline with chronological ordering and proper foreign key relationships
  • Enhanced application responses popup with business information, stall details, and current document sections
  • Updated EventApplication model with proper timeline relationship and audit trail integration
  • Fixed document validation status display to show "Reviewed" vs "Pending Review" instead of generic "Pending"
  • Replaced mock data in Event Reviews with real database-driven content showing approved applications
  • Enhanced EventsController to provide real review statistics and reviewable business data
  • Updated EventReviewController to handle AJAX requests with JSON responses including calculated ratings
  • Converted both Add and Edit Product functionality to use inline modals instead of separate pages for seamless user experience
  • Added comprehensive Add Product modal with all form fields including pricing, stock, and settings
  • Added comprehensive Edit Product modal with pre-populated fields and dynamic form action URLs
  • Updated Add Product buttons on products index page to redirect to main event Products tab with modal functionality
  • Removed View Details link from product dropdown menu to maintain consistent inline management experience
  • Complete inline product management workflow - create, edit, and delete all within Products tab without external navigation
  • Added "Back to {Business Name}" navigation link on event details page above tab headings for easy return to business profile
  • Repositioned Event Description section on public event pages - now appears between Event Schedule and Applications Open for better content flow
  • Enhanced Products tab with inline product management - now displays complete product overview with categories, pricing, stock status, and management options directly in tab instead of redirecting to separate page
  • Added rich text support for event descriptions with Quill editor in event create/edit forms and proper HTML rendering on public event pages
  • Added event description display to event view/show screen with proper rich text HTML rendering
  • Added SuperAdmin delete event functionality with authorization - delete buttons available on Business Events screen and Event Listing screen
  • Updated spelling from "Organizer" to "Organiser" throughout the application for Australian English consistency
  • Fixed subscription event counting logic to only count events that occur during the subscription period, preventing historical events from counting against current subscription limits
  • Removed event staff management from event level - staff will be managed at business level instead
  • Converted Products, Sections and Application Forms from buttons to tabs on event show page for better navigation
  • Added date filter to public event search allowing users to find events running on a specific date
  • Enhanced Sections tab with inline section management - now displays complete section overview with stats, occupancy, and management options directly in tab instead of redirecting to separate page
  • Moved Event Description to dedicated tab in event show page with inline rich text editing - removed from create/edit forms as it's managed separately for better workflow
  • AI document validation now includes enhanced date matching using DD/MM/YYYY comparison to prevent false mismatches due to format differences
  • Improved text extraction and cleaning process to reduce "corrupted text" warnings in AI document validation
  • Business creation form now conditionally shows "Appear on Stall Holder List" option only when a paid stall holder subscription plan is selected
  • Improved mobile responsiveness across all pages with better button spacing, form controls, modal sizing, and text handling
  • Document validation status now shows green background for fully validated documents (AI validation with all matches or SuperAdmin manual validation)
  • Added SuperAdmin manual validation functionality for business documents - allows 100% manual verification with audit logging
  • Public event pages now only show active events with publish date <= today for improved content quality
  • Removed Event Status display from public event profile pages to reduce clutter
  • Removed "Operating" badge from Event Schedule in public view while keeping Setup and Pack Down badges
  • Added interactive Google Maps display for event addresses with direct link to Google Maps
  • Implemented automatic event publishing system with observer pattern and scheduled command - events automatically become public when status is active and publish date is reached
  • Added event logo upload functionality with display on landing page, event profile pages, and event management header
  • Fixed event date display to include month name and made badges larger for better readability (e.g., "17-18 Oct 2025" instead of "17-18, 2025")
  • Fixed 403 authorization error on event forms pages by implementing EventPolicy with proper business logic authorization
  • Resolved 404 error on public event pages by ensuring events are properly published when meeting publication criteria
  • Changed "Applications Open" to "Stall Holder Applications Open" on public event pages for better clarity
  • Verified and ensured event schedule displays dates and times in proper format (date with day on line 1, opening times on line 2)
  • Fixed "Call to a member function format() on string" error in event edit and show pages by properly formatting time strings
  • Updated event logo storage to use s3/Wasabi instead of public folder for consistency with other file uploads
  • Improved logo upload help text formatting in event edit page with proper line breaks and styling
  • Added star rating display for business stalls based on event-level review ratings with review count
  • Fixed business events redirect after editing - users now return to business events tab instead of general events listing

[1.0.4]

Added

  • Event cloning functionality
  • Vendor search directory

Fixed

  • Complete event application form builder system with 13 field types (text, textarea, email, phone, number, date, time, file, URL, dropdown, radio, checkbox, headings)
  • Comprehensive application management with status workflow (draft, submitted, under review, approved, rejected, waitlisted)
  • Communication system with notes and status change tracking
  • Advanced event creation form with multi-day management interface

Enhanced

  • Event listing page now shows review status with progress indicators and completion badges
  • Events with outstanding reviews remain visible in "upcoming" filter even after end date
  • Business Documents management including the use of AI to compare stored values and AI interpretted values from the uploaded document

[1.0.3]

Added

  • Implement Discount Codes for providing discounts on subscriptions
  • Stall rating system with 5-star reviews and feedback

Changed

  • Discount code expiry is now optional - blank expiry means the code will always work
  • Updated gitignore configuration

Fixed

  • Fixed test documentation and updated TODO list

[1.0.2]

Added

  • Subscription system with payment collection
  • Comprehensive stall management system for stall holder businesses

[1.0.1]

Added

  • Task management dashboard with compact widget
  • Task notification system with bell icon

Fixed

  • Dark theme compliance for some controls

[1.0.0]

Initial Release

  • Core event management functionality
  • Core business management functionality
  • User management, authentication and authorisation
  • File storage with Wasabi
  • Implement basic theme switcher (Light / Dark)
  • Implement scheduled health checks of the system for quicker identification of possible issues
  • Implement system email functionality
  • Implement system wide activity logging