diff --git a/app/Http/Controllers/Sales/BusinessCardRequestController.php b/app/Http/Controllers/Sales/BusinessCardRequestController.php index 637977d3..f359268d 100644 --- a/app/Http/Controllers/Sales/BusinessCardRequestController.php +++ b/app/Http/Controllers/Sales/BusinessCardRequestController.php @@ -124,4 +124,26 @@ public function process(Request $request, int $id) return redirect()->route('sales.business-cards.manage') ->with('success', '처리가 완료되었습니다.'); } + + /** + * 처리완료 건 삭제 (관리자 전용) + */ + public function destroy(Request $request, int $id) + { + if (! auth()->user()->isAdmin()) { + abort(403, '관리자만 삭제할 수 있습니다.'); + } + + $this->service->delete($id); + + if ($request->expectsJson() || $request->header('Accept') === 'application/json') { + return response()->json([ + 'success' => true, + 'message' => '삭제되었습니다.', + ]); + } + + return redirect()->route('sales.business-cards.manage') + ->with('success', '삭제되었습니다.'); + } } diff --git a/app/Services/Sales/BusinessCardRequestService.php b/app/Services/Sales/BusinessCardRequestService.php index 91765881..c2fff899 100644 --- a/app/Services/Sales/BusinessCardRequestService.php +++ b/app/Services/Sales/BusinessCardRequestService.php @@ -119,6 +119,21 @@ public function process(int $id, ?string $memo = null): BusinessCardRequest return $request; } + /** + * 처리완료 건 삭제 + */ + public function delete(int $id): void + { + $tenantId = session('selected_tenant_id', 1); + $request = BusinessCardRequest::ofTenant($tenantId)->findOrFail($id); + + if ($request->status !== BusinessCardRequest::STATUS_PROCESSED) { + abort(422, '처리완료 상태만 삭제할 수 있습니다.'); + } + + $request->delete(); + } + private function buildQuery(string $status, ?string $search) { $tenantId = session('selected_tenant_id', 1); diff --git a/resources/views/sales/business-cards/admin-index.blade.php b/resources/views/sales/business-cards/admin-index.blade.php index 9450b4f7..81a10da1 100644 --- a/resources/views/sales/business-cards/admin-index.blade.php +++ b/resources/views/sales/business-cards/admin-index.blade.php @@ -207,6 +207,7 @@ class="px-3 py-1 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-med 의뢰일 처리일 처리자 + @@ -231,10 +232,19 @@ class="px-3 py-1 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-med {{ $req->processor?->name }} + + + @empty - + 처리된 명함 신청이 없습니다. @@ -312,5 +322,35 @@ function processRequest(id, name) { { title: '처리 완료', icon: 'question', confirmText: '처리완료' } ); } + +function deleteRequest(id, name) { + showConfirm( + `${name}님의 처리완료된 명함신청을 삭제하시겠습니까?`, + () => { + fetch(`/sales/business-cards/${id}`, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': '{{ csrf_token() }}', + 'Accept': 'application/json', + } + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + showToast(data.message, 'success'); + window.location.reload(); + } else { + showToast(data.message || '삭제에 실패했습니다.', 'error'); + } + }) + .catch(error => { + showToast('서버 오류가 발생했습니다.', 'error'); + console.error(error); + }); + }, + { title: '삭제 확인', icon: 'warning', confirmText: '삭제' } + ); +} @endpush diff --git a/resources/views/sales/business-cards/partner-index.blade.php b/resources/views/sales/business-cards/partner-index.blade.php index 4c1779c4..a2e4509e 100644 --- a/resources/views/sales/business-cards/partner-index.blade.php +++ b/resources/views/sales/business-cards/partner-index.blade.php @@ -69,10 +69,10 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none foc
- -

기본 100매

+ placeholder="500"> +

기본 500매

diff --git a/routes/web.php b/routes/web.php index f8e538d1..20d9f105 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1298,6 +1298,7 @@ Route::get('business-cards/manage', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'manage'])->name('business-cards.manage'); Route::post('business-cards/{id}/order', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'order'])->name('business-cards.order'); Route::post('business-cards/{id}/process', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'process'])->name('business-cards.process'); + Route::delete('business-cards/{id}', [\App\Http\Controllers\Sales\BusinessCardRequestController::class, 'destroy'])->name('business-cards.destroy'); // 매니저 검색 (리소스 라우트보다 먼저 정의해야 함!) Route::get('managers/list', [\App\Http\Controllers\Sales\SalesDashboardController::class, 'getManagers'])->name('managers.list');