authorizeMaintenanceAccess('maintenance.catalogs.view'); $business_id = $this->maintenanceUtil->getBusinessId(); if ($request->ajax()) { $query = PartCatalog::where('business_id', $business_id) ->withCount('documents') ->orderBy('name'); if ($part_type = $request->get('part_type')) { $query->where('part_type', $part_type); } return DataTables::of($query) ->addColumn('action', function ($row) { $html = '
'; if (auth()->user()->can('maintenance.catalogs.update')) { $html .= ''; } if (auth()->user()->can('maintenance.catalogs.delete')) { $html .= ' '; } $html .= '
'; return $html; }) ->editColumn('is_consumable', fn ($row) => $row->is_consumable ? 'بله' : 'خیر') ->editColumn('is_oem', fn ($row) => $row->is_oem ? 'بله' : 'خیر') ->editColumn('status', fn ($row) => $this->maintenanceUtil->statusLabel($row->status)) ->rawColumns(['action']) ->make(true); } return view('maintenance::part_catalogs.index'); } public function create() { $this->authorizeMaintenanceAccess('maintenance.catalogs.create'); return view('maintenance::part_catalogs.create', [ 'statuses' => ['active' => 'فعال', 'inactive' => 'غیرفعال'], 'part_types' => [ 'mechanical' => 'مکانیکی', 'electronic' => 'الکترونیکی', 'consumable' => 'مصرفی', 'hydraulic' => 'هیدرولیک', 'pneumatic' => 'پنوماتیک', ], ]); } public function store(Request $request) { $this->authorizeMaintenanceAccess('maintenance.catalogs.create'); $business_id = $this->maintenanceUtil->getBusinessId(); $data = $request->validate([ 'catalog_code' => 'required|string|max:100', 'name' => 'required|string|max:255', 'manufacturer' => 'nullable|string|max:255', 'manufacturer_part_number' => 'nullable|string|max:100', 'part_type' => 'sometimes|in:mechanical,electronic,consumable,hydraulic,pneumatic', 'is_consumable' => 'sometimes|boolean', 'description' => 'nullable|string', 'default_replacement_interval_days' => 'nullable|integer|min:0', 'is_oem' => 'sometimes|boolean', 'status' => 'sometimes|in:active,inactive', ]); PartCatalog::create(array_merge($data, [ 'business_id' => $business_id, 'status' => $data['status'] ?? 'active', ])); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'کاتالوگ قطعه ایجاد شد.'); } public function edit($id) { $this->authorizeMaintenanceAccess('maintenance.catalogs.update'); $business_id = $this->maintenanceUtil->getBusinessId(); $part_catalog = PartCatalog::where('business_id', $business_id)->findOrFail($id); return view('maintenance::part_catalogs.edit', [ 'part_catalog' => $part_catalog, 'statuses' => ['active' => 'فعال', 'inactive' => 'غیرفعال'], 'part_types' => [ 'mechanical' => 'مکانیکی', 'electronic' => 'الکترونیکی', 'consumable' => 'مصرفی', 'hydraulic' => 'هیدرولیک', 'pneumatic' => 'پنوماتیک', ], ]); } public function update(Request $request, $id) { $this->authorizeMaintenanceAccess('maintenance.catalogs.update'); $business_id = $this->maintenanceUtil->getBusinessId(); $part_catalog = PartCatalog::where('business_id', $business_id)->findOrFail($id); $data = $request->validate([ 'catalog_code' => 'required|string|max:100', 'name' => 'required|string|max:255', 'manufacturer' => 'nullable|string|max:255', 'manufacturer_part_number' => 'nullable|string|max:100', 'part_type' => 'sometimes|in:mechanical,electronic,consumable,hydraulic,pneumatic', 'is_consumable' => 'sometimes|boolean', 'description' => 'nullable|string', 'default_replacement_interval_days' => 'nullable|integer|min:0', 'is_oem' => 'sometimes|boolean', 'status' => 'sometimes|in:active,inactive', ]); $part_catalog->update($data); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'کاتالوگ قطعه به‌روزرسانی شد.'); } public function destroy(Request $request, $id) { $this->authorizeMaintenanceAccess('maintenance.catalogs.delete'); $business_id = $this->maintenanceUtil->getBusinessId(); $part_catalog = PartCatalog::where('business_id', $business_id)->findOrFail($id); $part_catalog->delete(); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'کاتالوگ قطعه حذف شد.'); } }