fileStorageService = $fileStorageService; } public function index(Request $request) { $this->authorize('documents.index'); $lists = Document::with(['pet', 'requester']) ->when(isset($request->search) , function ($query) use ($request){ $query->where(function ($q) use ($request) { $q->where('code', 'LIKE', "%{$request->search}%") ->orWhere('id', $request->search) ->orWhereHas('requester', function ($userQuery) use ($request) { $userQuery->where('fullname', 'LIKE', "%{$request->search}%") ->orWhere('username', 'LIKE', "%{$request->search}%") ->orWhere('email', 'LIKE', "%{$request->search}%") ->orWhere('phone', 'LIKE', "%{$request->search}%"); }); }); }) ->when(isset($request->status), function ($query) use ($request) { $query->where('status' , DocumentStatusEnum::fromName($request->status)->value ); }) ->when(isset($request->priority), function ($query) use ($request) { $query->where('priority' , DocumentPriorityEnum::fromName($request->priority)->value); }) ->when(isset($request->pet), function ($query) use ($request) { $query->where('pet_id' , $request->pet); }) ->latest() ->paginate(20) ->withQueryString() ->onEachSide(1); $documents = DocumentResource::collection($lists); return Inertia::admin('Documents/index', [ 'documents' => $documents, 'search' => $request->search, 'status' => $request->status, 'priority' => $request->priority, 'pet' => $request->pet, 'permissions_edit' => auth()->user()->can('documents.edit') ? false : true, 'permissions_delete' => auth()->user()->can('documents.delete') ? false : true, ]); } public function create() { $this->authorize('documents.create'); $pets = PetResource::collection(Pet::latest()->take(20)->get())->map(function($pet) { return [ 'label' => $pet->name, 'value' => $pet->id ]; }); return Inertia::admin('Documents/create_and_edit', [ 'pets' => $pets, ]); } public function store(DocumentRequest $request) { $this->authorize('documents.create'); $document = Document::create( [ 'status' => DocumentStatusEnum::fromName($request->status)->value, 'priority' => DocumentPriorityEnum::fromName($request->priority)->value, 'note' => $request->note, 'modality' => $request->modality, 'pet_id' => $request->pet_id, 'requester_id' => Auth::id(), 'submitted_at' => $request->submitted_at, 'scan_date' => $request->scan_date, 'processing_deadline' => $request->processing_deadline, ] ); if ($request->has('primary_files')) { $primaryFileIds = $request->primary_files ?? []; if (!empty($primaryFileIds)) { $document->media()->attach($primaryFileIds, ['collection' => 'primary']); } } if ($request->has('history_files')) { $historyFileIds = $request->history_files ?? []; if (!empty($historyFileIds)) { $document->media()->attach($historyFileIds, ['collection' => 'history']); } } session()->flash('success', 'پرونده با موفقیت ثبت شد'); return response(null , 200); } public function show(Document $document) { // } public function edit(Document $document) { $this->authorize('documents.edit'); $document->load(['primaryFiles', 'historyFiles', 'requester']); $pets = PetResource::collection(Pet::latest()->take(20)->get())->map(function($pet) { return [ 'label' => $pet->name, 'value' => $pet->id ]; }); return Inertia::admin('Documents/create_and_edit', [ 'document' => DocumentEditFormResource::make($document)->resolve(), 'is_edit' => true, 'pets' => $pets, ]); } public function update(DocumentRequest $request, Document $document) { $this->authorize('documents.edit'); $document->update( [ 'status' => DocumentStatusEnum::fromName($request->status)->value, 'priority' => DocumentPriorityEnum::fromName($request->priority)->value, 'note' => $request->note, 'modality' => $request->modality, 'pet_id' => $request->pet_id, 'requester_id' => Auth::id(), 'submitted_at' => $request->submitted_at, 'scan_date' => $request->scan_date, 'processing_deadline' => $request->processing_deadline, ] ); if ($request->has('primary_files')) { $primaryFileIds = $request->primary_files ?? []; $document->media()->wherePivot('collection', 'primary')->detach(); if (!empty($primaryFileIds)) { $document->media()->attach($primaryFileIds, ['collection' => 'primary']); } } if ($request->has('history_files')) { $historyFileIds = $request->history_files ?? []; $document->media()->wherePivot('collection', 'history')->detach(); if (!empty($historyFileIds)) { $document->media()->attach($historyFileIds, ['collection' => 'history']); } } session()->flash('success', 'پرونده با موفقیت بروزرسانی شد'); return response(null , 200); } public function destroy(Document $document) { $this->authorize('documents.delete'); $document->delete(); session()->flash('success', 'مدرک مورد نظر با موفقیت حذف شد.'); return response(null , 200); } public function exportData(Request $request) { $filters = $request->only(['status', 'priority', 'pet' , 'search']); return Excel::download(new DocumentExport($filters), 'documents.xlsx'); } public function uploadFile(Request $request) { $this->authorize('documents.create'); $request->validate([ 'file' => 'required|file|max:20480', ]); $file = $request->file('file'); $medium = $this->fileStorageService->storeFile($file, MediaDiskEnum::Private->value, 'documents'); return response()->json($medium); } public function getOptions(Request $request) { $this->authorize('documents.index'); $lists = Document::with(['pet', 'requester']) ->when(isset($request->search) && !empty($request->search), function ($query) use ($request){ $query->where(function ($q) use ($request) { $q->where('code', 'LIKE', "%{$request->search}%") ->orWhere('id', $request->search) ->orWhereHas('requester', function ($userQuery) use ($request) { $userQuery->where('fullname', 'LIKE', "%{$request->search}%") ->orWhere('username', 'LIKE', "%{$request->search}%") ->orWhere('email', 'LIKE', "%{$request->search}%") ->orWhere('phone', 'LIKE', "%{$request->search}%"); }); }); }) ->latest() ->take(20) ->get(['id', 'code', 'modality']); $options = $lists->map(function ($document) { return [ 'label' => "پرونده {$document->code} - {$document->modality}", 'value' => $document->id ]; }); return response()->json([ 'success' => true, 'data' => $options ]); } }