fix: [payroll] 전표 공제항목 동일 항목 병합 처리
- 기타공제 이름 정규화 (trim, 공백 통일) - 동일 description + trading_partner 공제항목 합산 병합 - 중복 라인 제거하여 깔끔한 전표 생성
This commit is contained in:
@@ -749,11 +749,11 @@ public function generateJournalEntry(Request $request): JsonResponse
|
||||
], 422);
|
||||
}
|
||||
|
||||
// 기타공제(deductions JSON) 항목별 합산
|
||||
// 기타공제(deductions JSON) 항목별 합산 (이름 정규화)
|
||||
$extraDeductionsByName = [];
|
||||
foreach ($payrolls as $p) {
|
||||
foreach ($p->deductions ?? [] as $d) {
|
||||
$name = $d['name'] ?? '기타공제';
|
||||
$name = trim(preg_replace('/\s+/', ' ', $d['name'] ?? '기타공제'));
|
||||
$amount = (int) ($d['amount'] ?? 0);
|
||||
if ($amount != 0) {
|
||||
$extraDeductionsByName[$name] = ($extraDeductionsByName[$name] ?? 0) + $amount;
|
||||
@@ -855,22 +855,38 @@ public function generateJournalEntry(Request $request): JsonResponse
|
||||
}
|
||||
|
||||
// 2~N. 공제항목: 모두 대변 처리 (음수 공제는 마이너스 대변)
|
||||
// 동일 description + partner 병합을 위해 key 기반 합산
|
||||
$creditLines = [];
|
||||
foreach ($deductionItems as [$amount, $partnerName, $desc]) {
|
||||
if ($amount == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$lines[] = [
|
||||
'dc_type' => 'credit',
|
||||
'account_code' => '207',
|
||||
'account_name' => $accountCodes['207'],
|
||||
'trading_partner_id' => $partners[$partnerName],
|
||||
'trading_partner_name' => $partnerName,
|
||||
'debit_amount' => 0,
|
||||
'credit_amount' => $amount,
|
||||
'description' => $amount < 0 ? "{$desc} (환급)" : $desc,
|
||||
'line_no' => $lineNo++,
|
||||
];
|
||||
$description = $amount < 0 ? "{$desc} (환급)" : $desc;
|
||||
$mergeKey = "{$partnerName}|{$description}";
|
||||
|
||||
if (isset($creditLines[$mergeKey])) {
|
||||
$creditLines[$mergeKey]['credit_amount'] += $amount;
|
||||
} else {
|
||||
$creditLines[$mergeKey] = [
|
||||
'dc_type' => 'credit',
|
||||
'account_code' => '207',
|
||||
'account_name' => $accountCodes['207'],
|
||||
'trading_partner_id' => $partners[$partnerName],
|
||||
'trading_partner_name' => $partnerName,
|
||||
'debit_amount' => 0,
|
||||
'credit_amount' => $amount,
|
||||
'description' => $description,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($creditLines as $creditLine) {
|
||||
if ($creditLine['credit_amount'] == 0) {
|
||||
continue;
|
||||
}
|
||||
$creditLine['line_no'] = $lineNo++;
|
||||
$lines[] = $creditLine;
|
||||
}
|
||||
|
||||
// 최종: 대변 205 미지급비용 / 임직원 — 실수령액 (DB 값)
|
||||
|
||||
Reference in New Issue
Block a user