giftcon_dev/app/Http/Controllers/Admin/Qna/AdminQnaController.php
2026-02-09 19:47:58 +09:00

172 lines
5.5 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\Qna;
use App\Http\Controllers\Controller;
use App\Services\Admin\Qna\AdminQnaService;
use Illuminate\Http\Request;
final class AdminQnaController extends Controller
{
public function __construct(
private readonly AdminQnaService $service
) {}
public function index(Request $request)
{
$filters = $request->only([
'year','enquiry_code','state','q','q_type','date_from','date_to','my_work',
]);
$adminId = (int)auth('admin')->id();
$data = $this->service->paginate($filters, 20, $adminId);
return view('admin.qna.index', [
'rows' => $data['rows'],
'year' => $data['year'],
'filters' => $filters,
'enquiryCodes' => $data['enquiryCodes'],
'stateLabels' => $data['stateLabels'],
'categories' => $data['categories'],
'categoriesMap' => $data['categoriesMap'],
]);
}
public function show(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
if ($year <= 2000) $year = (int)date('Y');
$adminId = (int)auth('admin')->id();
$data = $this->service->detail($seq, $year, $adminId);
return view('admin.qna.show', [
'row' => $data['row'],
'year' => $year,
'member' => $data['member'],
'orders' => $data['orders'],
'stateLabels' => $data['stateLabels'],
'enquiryCodes' => $data['enquiryCodes'],
'deferCodes' => $data['deferCodes'],
'stateLog' => $data['stateLog'],
'memoLog' => $data['memoLog'],
'admins' => $data['admins'],
'actions' => $data['actions'],
'categories' => $data['categories'],
'categoriesMap' => $data['categoriesMap'],
]);
}
public function assignToMe(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
$adminId = (int)auth('admin')->id();
$this->service->assignToMe($seq, $year, $adminId);
return redirect()
->route('admin.qna.show', ['seq'=>$seq, 'year'=>$year] + $request->query())
->with('ok', '내 업무로 배정했습니다.');
}
public function startWork(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
$adminId = (int)auth('admin')->id();
$this->service->startWork($seq, $year, $adminId);
return redirect()
->route('admin.qna.show', ['seq'=>$seq, 'year'=>$year] + $request->query())
->with('ok', '업무를 시작했습니다.');
}
public function returnWork(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
$adminId = (int)auth('admin')->id();
$this->service->returnWork($seq, $year, $adminId);
return redirect()
->route('admin.qna.show', ['seq'=>$seq, 'year'=>$year] + $request->query())
->with('ok', '업무를 반납했습니다.');
}
public function postponeWork(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
$adminId = (int)auth('admin')->id();
$validated = $request->validate([
'defer_code' => ['nullable','string','max:2'],
'defer_comment' => ['required','string','max:2000'],
]);
$this->service->postponeWork(
$seq,
$year,
$adminId,
(string)($validated['defer_code'] ?? ''),
(string)$validated['defer_comment']
);
return redirect()
->route('admin.qna.show', ['seq'=>$seq, 'year'=>$year] + $request->query())
->with('ok', '업무를 보류했습니다.');
}
public function saveAnswer(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
$adminId = (int)auth('admin')->id();
$validated = $request->validate([
'answer_content' => ['required','string','max:20000'],
'answer_sms' => ['required','string','max:500'],
]);
$this->service->saveAnswer(
$seq,
$year,
$adminId,
(string)$validated['answer_content'],
(string)$validated['answer_sms'],
);
return redirect()
->route('admin.qna.show', ['seq'=>$seq, 'year'=>$year] + $request->query())
->with('ok', '답변을 저장했습니다.');
}
public function completeWork(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
$adminId = (int)auth('admin')->id();
$this->service->completeWork($seq, $year, $adminId);
return redirect()
->route('admin.qna.show', ['seq'=>$seq, 'year'=>$year] + $request->query())
->with('ok', '업무를 완료 처리했습니다. (요청 방식에 따라 발송)');
}
public function addMemo(int $seq, Request $request)
{
$year = (int)$request->query('year', date('Y'));
$adminId = (int)auth('admin')->id();
$validated = $request->validate([
'memo' => ['required','string','max:2000'],
]);
$this->service->addMemo($seq, $year, $adminId, (string)$validated['memo']);
return redirect()
->route('admin.qna.show', ['seq'=>$seq, 'year'=>$year] + $request->query())
->with('ok', '메모를 추가했습니다.');
}
}