fix(API): 견적 관리 필드 저장/조회 개선

- QuoteStoreRequest/UpdateRequest: manager, contact, remarks 필드 추가
- QuoteController: store에서 validated 데이터 로깅 추가 (디버깅용)
- QuoteService: manager, contact, remarks 필드 저장/조회 로직 추가
- FormulaEvaluatorService: BOM 계산 서비스 개선

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-06 20:57:51 +09:00
parent 494bdd19da
commit d6783b4a15
5 changed files with 282 additions and 23 deletions

View File

@@ -17,6 +17,7 @@
use App\Services\Quote\QuoteDocumentService;
use App\Services\Quote\QuoteNumberService;
use App\Services\Quote\QuoteService;
use Illuminate\Support\Facades\Log;
class QuoteController extends Controller
{
@@ -52,8 +53,26 @@ public function show(int $id)
*/
public function store(QuoteStoreRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->quoteService->store($request->validated());
// DEBUG: 요청 데이터 로깅
Log::info('[QuoteController::store] 원본 요청:', [
'author' => $request->input('author'),
'manager' => $request->input('manager'),
'contact' => $request->input('contact'),
'remarks' => $request->input('remarks'),
]);
$validated = $request->validated();
// DEBUG: validated 데이터 로깅
Log::info('[QuoteController::store] validated 데이터:', [
'author' => $validated['author'] ?? 'NOT_SET',
'manager' => $validated['manager'] ?? 'NOT_SET',
'contact' => $validated['contact'] ?? 'NOT_SET',
'remarks' => $validated['remarks'] ?? 'NOT_SET',
]);
return ApiResponse::handle(function () use ($validated) {
return $this->quoteService->store($validated);
}, __('message.quote.created'));
}

View File

@@ -12,6 +12,24 @@ public function authorize(): bool
return true;
}
/**
* 프론트엔드 필드명을 백엔드 필드명으로 정규화
* manager_name → manager, manager_contact → contact
*/
protected function prepareForValidation(): void
{
$mappings = [
'manager_name' => 'manager',
'manager_contact' => 'contact',
];
foreach ($mappings as $from => $to) {
if ($this->has($from) && ! $this->has($to)) {
$this->merge([$to => $this->input($from)]);
}
}
}
public function rules(): array
{
return [

View File

@@ -12,6 +12,24 @@ public function authorize(): bool
return true;
}
/**
* 프론트엔드 필드명을 백엔드 필드명으로 정규화
* manager_name → manager, manager_contact → contact
*/
protected function prepareForValidation(): void
{
$mappings = [
'manager_name' => 'manager',
'manager_contact' => 'contact',
];
foreach ($mappings as $from => $to) {
if ($this->has($from) && ! $this->has($to)) {
$this->merge([$to => $this->input($from)]);
}
}
}
public function rules(): array
{
return [