seedStatuses(); $this->seedPriorities(); $this->seedCategories(); $this->seedTeamsAndProjects(); $this->seedWorkflowTemplates(); } /** * Seed ticket workflow statuses. * * @return void */ private function seedStatuses(): void { foreach ([ ['name' => 'New', 'slug' => 'new', 'color' => 'sky', 'sort_order' => 5, 'is_closed' => false], ['name' => 'Open', 'slug' => 'open', 'color' => 'blue', 'sort_order' => 10, 'is_closed' => false], ['name' => 'In Progress', 'slug' => 'in-progress', 'color' => 'amber', 'sort_order' => 20, 'is_closed' => false], ['name' => 'Stalled', 'slug' => 'stalled', 'color' => 'rose', 'sort_order' => 30, 'is_closed' => false], ['name' => 'On-Hold', 'slug' => 'on-hold', 'color' => 'violet', 'sort_order' => 40, 'is_closed' => false], ['name' => 'Closed', 'slug' => 'closed', 'color' => 'emerald', 'sort_order' => 90, 'is_closed' => true], ] as $row) { Status::query()->updateOrCreate(['slug' => $row['slug']], $row); } } /** * Seed ticket priorities. * * @return void */ private function seedPriorities(): void { foreach ([ ['name' => 'High', 'slug' => 'high', 'color' => 'red', 'sort_order' => 10], ['name' => 'Medium', 'slug' => 'medium', 'color' => 'amber', 'sort_order' => 20], ['name' => 'Low', 'slug' => 'low', 'color' => 'emerald', 'sort_order' => 30], ] as $row) { Priority::query()->updateOrCreate(['slug' => $row['slug']], $row); } } /** * Seed ticket categories. * * @return void */ private function seedCategories(): void { foreach ([ ['name' => 'Development', 'color' => 'indigo', 'description' => 'Software changes, enhancements and development work.'], ['name' => 'Systems Deployment', 'color' => 'cyan', 'description' => 'Deployment, release, infrastructure and environment requests.'], ['name' => 'Concepts', 'color' => 'purple', 'description' => 'Ideas, concepts, design discussion and future improvements.'], ['name' => 'Bug', 'color' => 'rose', 'description' => 'Defects, regressions and incorrect behaviour.'], ] as $row) { Category::query()->updateOrCreate( ['company_id' => null, 'slug' => Str::slug($row['name'])], $row + ['company_id' => null, 'slug' => Str::slug($row['name'])] ); } } /** * Seed the default support team and a default project. * * @return void */ private function seedTeamsAndProjects(): void { $team = Team::query()->updateOrCreate( ['company_id' => null, 'slug' => 'support'], [ 'company_id' => null, 'name' => 'Support', 'slug' => 'support', 'color' => 'blue', 'description' => 'Default support team for triage, ownership and ticket routing.', ] ); Project::query()->updateOrCreate( ['company_id' => null, 'slug' => 'support-desk'], [ 'company_id' => null, 'team_id' => $team->id, 'title' => 'Support Desk', 'slug' => 'support-desk', 'color' => 'indigo', 'description' => 'Default project for operational helpdesk tickets.', ] ); } /** * Seed default professional workflow email templates. * * @return void */ private function seedWorkflowTemplates(): void { foreach ([ ['name' => 'Ticket raised requester notice', 'event' => 'ticket.created', 'subject' => 'Ticket {{ ticket.reference }} has been raised', 'html_body' => '

Hello {{ requester.name }},

Your ticket {{ ticket.reference }} has been raised successfully.

Subject: {{ ticket.subject }}

Priority: {{ ticket.priority }}

', 'to_role' => 'requester'], ['name' => 'Ticket updated requester notice', 'event' => 'ticket.updated', 'subject' => 'Ticket {{ ticket.reference }} has been updated', 'html_body' => '

Hello {{ requester.name }},

Your ticket {{ ticket.reference }} has been updated.

Status: {{ ticket.status }}

Priority: {{ ticket.priority }}

', 'to_role' => 'requester'], ['name' => 'Ticket response requester notice', 'event' => 'ticket.commented', 'subject' => 'New response on ticket {{ ticket.reference }}', 'html_body' => '

Hello {{ requester.name }},

A new response has been added to {{ ticket.reference }}.

Subject: {{ ticket.subject }}

', 'to_role' => 'requester'], ['name' => 'Ticket closed requester notice', 'event' => 'ticket.closed', 'subject' => 'Ticket {{ ticket.reference }} has been closed', 'html_body' => '

Hello {{ requester.name }},

Your ticket {{ ticket.reference }} has been closed.

Thank you for using the support desk.

', 'to_role' => 'requester'], ] as $template) { WorkflowTemplate::query()->updateOrCreate( ['name' => $template['name'], 'event' => $template['event']], $template + ['text_body' => null, 'cc' => null, 'bcc' => null, 'is_active' => true] ); } } }