authorize('viewAny', ChecklistTemplate::class); $templates = ChecklistTemplate::withCount('sections')->orderByDesc('is_active')->orderBy('name')->get(); return view('checklist.templates.index', compact('templates')); } public function create() { $this->authorize('create', ChecklistTemplate::class); return view('checklist.templates.create', ['template' => new ChecklistTemplate(['version' => '1.0'])]); } public function store(Request $request) { $this->authorize('create', ChecklistTemplate::class); $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'version' => ['required', 'string', 'max:50'], 'description' => ['nullable', 'string', 'max:1000'], 'is_active' => ['nullable', 'boolean'], ]); $template = ChecklistTemplate::create([ 'name' => $data['name'], 'version' => $data['version'], 'description' => $data['description'] ?? null, 'is_active' => $request->boolean('is_active'), ]); if ($template->is_active) { ChecklistTemplate::where('id', '!=', $template->id)->update(['is_active' => false]); } return redirect()->route('checklist-templates.builder', $template) ->with('success', 'Templat dicipta. Sila bina seksyen dan item.'); } /** Skrin pembina templat (seksyen, skop, item, formula). */ public function builder(ChecklistTemplate $checklistTemplate) { $this->authorize('view', $checklistTemplate); $checklistTemplate->load([ 'sections.scopes', 'sections.items.scope', 'sections.formula', 'formulas', ]); return view('checklist.templates.builder', ['template' => $checklistTemplate]); } public function update(Request $request, ChecklistTemplate $checklistTemplate) { $this->authorize('update', $checklistTemplate); $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'version' => ['required', 'string', 'max:50'], 'description' => ['nullable', 'string', 'max:1000'], 'is_active' => ['nullable', 'boolean'], ]); $checklistTemplate->update([ 'name' => $data['name'], 'version' => $data['version'], 'description' => $data['description'] ?? null, 'is_active' => $request->boolean('is_active'), ]); if ($checklistTemplate->is_active) { ChecklistTemplate::where('id', '!=', $checklistTemplate->id)->update(['is_active' => false]); } return back()->with('success', 'Templat dikemas kini.'); } public function activate(ChecklistTemplate $checklistTemplate) { $this->authorize('update', $checklistTemplate); ChecklistTemplate::query()->update(['is_active' => false]); $checklistTemplate->update(['is_active' => true]); return back()->with('success', 'Templat ditetapkan sebagai aktif.'); } public function destroy(ChecklistTemplate $checklistTemplate) { $this->authorize('delete', $checklistTemplate); $checklistTemplate->delete(); return redirect()->route('checklist-templates.index')->with('success', 'Templat dipadam.'); } }