Projects modernization: projects list with Active/Mine/Overdue/Due soon/Stalled/Over budget/Ready to close/Completed/Archived/All views, ticket and task progress bars, time logged against budget with unbilled hours, due badges, manager changed in place, manager/client/created filters, bulk set manager, set due date, complete, reopen, archive, restore and delete, CSV/PDF export; project page with header actions, attention banners, tickets/tasks/time/due stat cards, Tickets/Tasks/Activity tabs, scope, details and team with hours; project quick look; New/Edit Project with client contact, start date, budget hours and template that can assign its tickets to the manager; Add tickets by picking or by number; add a project template's tickets to an existing project; template ticket subjects fill in [Client], [Project], [Month], [Quarter] and [Year]; project templates admin rework with ordered ticket templates, multi-add, duplicate, archive and restore; projects on the ticket page, client overview, dashboard, calendar, global search and client actions menu; New Ticket offers internal projects; tickets only join a project of their own client or an internal one; completing a project is checked on the server and completed projects can be reopened; deleting a project keeps its tickets; deleting a client deletes its projects; bulk ticket creation limits project choices to matching clients; project template reordering limited to admins; new manager notifications; new functions/project.php; removed project_link_closed_ticket.php; DB 2.8.6 adds project_start, project_budget_hours, project_contact_id and a ticket_project_id index, and cleans up orphaned projects, ticket project links and template links

This commit is contained in:
johnnyq
2026-10-15 16:35:00 -04:00
parent 64d938db7f
commit bbb2456f0b
44 changed files with 3617 additions and 1550 deletions

6
db.sql
View File

@@ -1823,8 +1823,11 @@ CREATE TABLE `projects` (
`project_number` int(11) NOT NULL DEFAULT 1,
`project_name` varchar(255) NOT NULL,
`project_description` mediumtext DEFAULT NULL,
`project_start` date DEFAULT NULL,
`project_due` date DEFAULT NULL,
`project_budget_hours` decimal(8,2) DEFAULT NULL,
`project_manager` int(11) NOT NULL DEFAULT 0,
`project_contact_id` int(11) NOT NULL DEFAULT 0,
`project_created_at` datetime NOT NULL DEFAULT current_timestamp(),
`project_updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
`project_completed_at` datetime DEFAULT NULL,
@@ -3045,7 +3048,8 @@ CREATE TABLE `tickets` (
PRIMARY KEY (`ticket_id`),
KEY `ticket_response_due_at` (`ticket_response_due_at`),
KEY `ticket_resolution_due_at` (`ticket_resolution_due_at`),
KEY `ticket_client_id` (`ticket_client_id`,`ticket_archived_at`)
KEY `ticket_client_id` (`ticket_client_id`,`ticket_archived_at`),
KEY `ticket_project_id` (`ticket_project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;