feat: add withdraw request functionality and UI components

This commit is contained in:
2026-08-27 02:39:57 +03:30
parent aeef95339d
commit 4ce663c669
115 changed files with 4064 additions and 315 deletions
@@ -3,7 +3,10 @@
namespace App\Http\Controllers\Client\Doctor;
use App\Http\Controllers\Controller;
use App\Http\Requests\Client\CaseRejectRequest;
use App\Http\Resources\Client\CaseDetailResource;
use App\Http\Resources\Client\CaseResource;
use App\Models\Document;
use App\Services\Document\CaseService;
use Illuminate\Support\Facades\Auth;
use Inertia\Inertia;
@@ -28,4 +31,25 @@ class CaseController extends Controller
'cases' => CaseResource::collection($cases),
]);
}
public function show(Document $case)
{
abort_unless($this->caseService->canAccess($case, Auth::user()), 403);
$case->load(['pet', 'requester', 'media', 'reports']);
return Inertia::client('Dashboard/Cases/show', [
'case' => (new CaseDetailResource($case))->resolve(),
'canReport' => $this->caseService->canReport($case, Auth::user()),
]);
}
public function reject(CaseRejectRequest $request, Document $case)
{
$this->caseService->reject($case, Auth::user(), $request->validated('reason'));
session()->flash('success', 'درخواست رد شد و مبلغ فاکتور به کیف پول درخواست‌کننده بازگردانده شد.');
return redirect()->route('dashboard.cases.index');
}
}
@@ -23,6 +23,7 @@ class DashboardController extends Controller
return Inertia::client('Dashboard/Dashboard', [
'cases' => CaseResource::collection($cases),
'stats' => $this->caseService->statsForUser(Auth::user()),
]);
}
}
@@ -32,8 +32,6 @@ class DocumentController extends Controller
public function show(Document $document)
{
return Inertia::client('Dashboard/Documents/show', [
'document' => $document,
]);
return redirect()->route('dashboard.cases.show', $document);
}
}
@@ -3,13 +3,53 @@
namespace App\Http\Controllers\Client\Doctor;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\Client\ReportSubmitRequest;
use App\Http\Resources\Client\ReportResource;
use App\Models\Document;
use App\Models\Report;
use App\Services\Document\CaseService;
use Illuminate\Support\Facades\Auth;
use Inertia\Inertia;
class ReportController extends Controller
{
protected CaseService $caseService;
public function __construct(CaseService $caseService)
{
$this->caseService = $caseService;
}
public function index()
{
return Inertia::client('Dashboard/Reports/Index');
$reports = Report::with(['document', 'doctor'])
->where(function ($query) {
$query->where('doctor_id', Auth::id())
->orWhereHas('document', fn ($documentQuery) => $documentQuery->where('requester_id', Auth::id()));
})
->latest('submitted_at')
->paginate(10)
->withQueryString()
->onEachSide(1);
return Inertia::client('Dashboard/Reports/Index', [
'reports' => ReportResource::collection($reports),
]);
}
public function store(ReportSubmitRequest $request)
{
$document = Document::findOrFail($request->validated('document_id'));
$this->caseService->submitReport(
$document,
Auth::user(),
$request->validated(),
$request->file('files', [])
);
session()->flash('success', 'گزارش با موفقیت ثبت شد.');
return redirect()->route('dashboard.cases.index');
}
}