No-Response status, soft-delete trash, bulk and age-based delete: tickets where the customer is waiting for an agent answer are auto-flagged; admins get inline/bulk delete plus a trash bin with restore.
- Added TicketStatus::NoResponse case (red badge, included in openStatuses) for tickets whose customer posted the latest reply and the agent hasn't responded since
- Added setting helpdesk_no_response_days (default 90, validated to be >= configured Response Time converted to days)
- Added 'Apply now' button on the HelpDesk Settings > Display & Behavior tab that runs the No-Response sweep on demand (AJAX)
- Added artisan command helpdesk:apply-no-response (--days, --dry-run); scheduled daily at 02:45 with withoutOverlapping + runInBackground + onOneServer when the delay setting is > 0
- Added soft-delete (deleted_at) to helpdesk_tickets so deletes go to a trash bin instead of being permanent
- Added inline AJAX delete button per row on the admin ticket list pages
- Added bulk-delete bar (checkbox column + select-all) on admin ticket list pages
- Added 'Delete older than…' dropdown with periods 1 month, 3 months, 6 months, 1 year, 2 years, 3 years, 4 years and 5+ years (AJAX with loading indicator)
- Added Trash page (/admin/helpdesk/tickets/trash) with single/bulk Restore, single/bulk Force-Delete and Empty Trash actions
- Added media cleanup on force-delete: ticket-level attachments and reply attachments are removed from disk via MediaService before the row is hard-deleted
- Added new admin sidebar entry 'No Response' under HelpDesk > Tickets, and a new dedicated route /admin/helpdesk/tickets/no-response
- Updated mergeTicket() to forceDelete() the source ticket so a merge does not leave a soft-deleted ghost in the trash
- Updated HasTrash trait to return JSON for restore/forceDelete/emptyTrash when the request expects it (full AJAX flow)