feat: 세금계산서/거래명세서 일괄 발행 API 추가

- POST /api/v1/tax-invoices/bulk-issue: 세금계산서 일괄 발행
- POST /api/v1/sales/bulk-issue-statement: 거래명세서 일괄 발행
- FormRequest 검증 (최대 100건)
- Service 일괄 처리 로직 (개별 오류 처리)
- Swagger 문서 추가
- i18n 메시지 키 추가 (ko/en)
This commit is contained in:
2026-01-19 20:53:36 +09:00
parent 7dd683ace8
commit 0b94da0741
12 changed files with 444 additions and 0 deletions

View File

@@ -254,6 +254,25 @@
'no_base_salary' => '기본급이 설정되지 않았습니다.',
],
// 세금계산서 관련
'tax_invoice' => [
'not_found' => '세금계산서 정보를 찾을 수 없습니다.',
'cannot_edit' => '발행된 세금계산서는 수정할 수 없습니다.',
'cannot_delete' => '발행된 세금계산서는 삭제할 수 없습니다.',
'already_issued' => '이미 발행된 세금계산서입니다.',
],
// 매출 관련
'sale' => [
'not_found' => '매출 정보를 찾을 수 없습니다.',
'cannot_edit' => '확정된 매출은 수정할 수 없습니다.',
'cannot_delete' => '확정된 매출은 삭제할 수 없습니다.',
'cannot_confirm' => '이미 확정된 매출입니다.',
'statement_requires_confirmed' => '확정된 매출만 거래명세서를 발행할 수 있습니다.',
'statement_already_issued' => '이미 발행된 거래명세서입니다.',
'recipient_email_required' => '수신자 이메일이 필요합니다.',
],
// 대시보드 관련
'dashboard' => [
'invalid_period' => '기간은 week, month, quarter 중 하나여야 합니다.',
@@ -399,4 +418,13 @@
'cannot_delete' => '해당 입찰은 삭제할 수 없습니다.',
'invalid_status' => '유효하지 않은 입찰 상태입니다.',
],
// 계약 관련
'contract' => [
'not_found' => '계약을 찾을 수 없습니다.',
'already_registered' => '이미 계약이 등록된 입찰입니다. (계약번호: :code)',
'bidding_not_awarded' => '낙찰 상태인 입찰만 계약으로 전환할 수 있습니다.',
'cannot_delete' => '해당 계약은 삭제할 수 없습니다.',
'invalid_status' => '유효하지 않은 계약 상태입니다.',
],
];