resolveBusiness($request); if (! $business) { return $this->jsonError('کسب‌وکار یافت نشد.', 404); } $items = ChecklistTemplate::where('business_id', $business->id) ->with(['items.sparePart', 'items.equipmentPart', 'equipment:id,name,code', 'category:id,name']) ->orderBy('name') ->get(); return $this->jsonSuccess(['items' => $items]); } public function storeTemplate(Request $request) { $business = $this->resolveBusiness($request); if (! $business) { return $this->jsonError('کسب‌وکار یافت نشد.', 404); } $data = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'description' => ['nullable', 'string'], 'equipment_category_id' => ['nullable', 'exists:maintenance_equipment_categories,id'], 'equipment_id' => ['nullable', 'exists:maintenance_equipment,id'], 'items' => ['sometimes', 'array'], 'items.*.label' => ['required_with:items', 'string'], 'items.*.item_type' => ['sometimes', 'string'], 'items.*.is_required' => ['sometimes', 'boolean'], 'items.*.sort_order' => ['sometimes', 'integer'], 'items.*.spare_part_id' => ['nullable', 'exists:maintenance_spare_parts,id'], 'items.*.equipment_part_id' => ['nullable', 'exists:maintenance_equipment_parts,id'], ]); return DB::transaction(function () use ($business, $data) { $template = ChecklistTemplate::create([ 'business_id' => $business->id, 'name' => $data['name'], 'description' => $data['description'] ?? null, 'equipment_category_id' => $data['equipment_category_id'] ?? null, 'equipment_id' => $data['equipment_id'] ?? null, ]); foreach ($data['items'] ?? [] as $i => $item) { ChecklistItem::create([ 'template_id' => $template->id, 'label' => $item['label'], 'item_type' => $item['item_type'] ?? 'text', 'is_required' => $item['is_required'] ?? true, 'sort_order' => $item['sort_order'] ?? $i, 'spare_part_id' => $item['spare_part_id'] ?? null, 'equipment_part_id' => $item['equipment_part_id'] ?? null, ]); } return $this->jsonSuccess($template->load('items'), 'چک‌لیست ایجاد شد.', 201); }); } public function showTemplate(Request $request, ChecklistTemplate $checklist) { if (! $this->ensureBusinessOwnership($request, $checklist->business_id)) { return $this->jsonError('دسترسی ندارید.', 403); } return $this->jsonSuccess($checklist->load(['items.sparePart', 'items.equipmentPart', 'equipment', 'category'])); } public function updateTemplate(Request $request, ChecklistTemplate $checklist) { if (! $this->ensureBusinessOwnership($request, $checklist->business_id)) { return $this->jsonError('دسترسی ندارید.', 403); } $data = $request->validate([ 'name' => ['sometimes', 'string', 'max:255'], 'description' => ['nullable', 'string'], 'equipment_category_id' => ['nullable', 'exists:maintenance_equipment_categories,id'], 'equipment_id' => ['nullable', 'exists:maintenance_equipment,id'], 'is_active' => ['sometimes', 'boolean'], 'items' => ['sometimes', 'array'], 'items.*.label' => ['required_with:items', 'string'], 'items.*.item_type' => ['sometimes', 'string'], 'items.*.is_required' => ['sometimes', 'boolean'], 'items.*.sort_order' => ['sometimes', 'integer'], 'items.*.spare_part_id' => ['nullable', 'exists:maintenance_spare_parts,id'], 'items.*.equipment_part_id' => ['nullable', 'exists:maintenance_equipment_parts,id'], ]); return DB::transaction(function () use ($checklist, $data) { $checklist->update(collect($data)->except('items')->toArray()); if (array_key_exists('items', $data)) { $checklist->items()->delete(); foreach ($data['items'] as $i => $item) { ChecklistItem::create([ 'template_id' => $checklist->id, 'label' => $item['label'], 'item_type' => $item['item_type'] ?? 'text', 'is_required' => $item['is_required'] ?? true, 'sort_order' => $item['sort_order'] ?? $i, 'spare_part_id' => $item['spare_part_id'] ?? null, 'equipment_part_id' => $item['equipment_part_id'] ?? null, ]); } } return $this->jsonSuccess($checklist->fresh()->load('items'), 'چک‌لیست به‌روزرسانی شد.'); }); } public function destroyTemplate(Request $request, ChecklistTemplate $checklist) { if (! $this->ensureBusinessOwnership($request, $checklist->business_id)) { return $this->jsonError('دسترسی ندارید.', 403); } $checklist->delete(); return $this->jsonSuccess(null, 'چک‌لیست حذف شد.'); } public function submitResponse(Request $request) { $business = $this->resolveBusiness($request); if (! $business) { return $this->jsonError('کسب‌وکار یافت نشد.', 404); } $data = $request->validate([ 'template_id' => ['required', 'exists:maintenance_checklist_templates,id'], 'equipment_id' => ['nullable', 'exists:maintenance_equipment,id'], 'work_order_id' => ['nullable', 'exists:maintenance_work_orders,id'], 'responses' => ['required', 'array'], ]); $response = ChecklistResponse::create([ 'business_id' => $business->id, 'template_id' => $data['template_id'], 'equipment_id' => $data['equipment_id'] ?? null, 'work_order_id' => $data['work_order_id'] ?? null, 'responses' => $data['responses'], 'completed_by' => $request->user()?->id, 'completed_at' => now(), ]); return $this->jsonSuccess($response->load('template'), 'چک‌لیست ثبت شد.', 201); } }