feat:카드 사용내역 공급가액/부가세 수정 및 이력 추적 기능
- CardTransaction 모델에 modified_supply_amount, modified_tax 추가 - CardTransactionAmountLog 모델 신규 생성 (수정 이력) - parseTransactionLogs: effectiveSupplyAmount, effectiveTax, isAmountModified 응답 추가 - save: 금액 변경 감지 시 amount_logs 이력 자동 기록 - 프론트엔드: 공급가액/부가세 input 수정 가능, 합계금액 자동계산 - 수정 시 주황색 배경 + 원본값 취소선 표시 - 분개된 거래는 금액 수정 비활성화 (읽기전용) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
use App\Models\Barobill\BarobillConfig;
|
||||
use App\Models\Barobill\BarobillMember;
|
||||
use App\Models\Barobill\CardTransaction;
|
||||
use App\Models\Barobill\CardTransactionAmountLog;
|
||||
use App\Models\Barobill\CardTransactionSplit;
|
||||
use App\Models\Tenants\Tenant;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -654,6 +655,16 @@ private function parseTransactionLogs($resultData, $savedData = null): array
|
||||
'evidenceName' => $savedItem?->evidence_name ?? ($log->UseStoreName ?? ''),
|
||||
'description' => $savedItem?->description ?? ($log->UseStoreBizType ?? $log->Memo ?? ''),
|
||||
'isSaved' => $savedItem !== null,
|
||||
// 금액 수정 관련 필드
|
||||
'modifiedSupplyAmount' => $savedItem?->modified_supply_amount !== null ? (float) $savedItem->modified_supply_amount : null,
|
||||
'modifiedTax' => $savedItem?->modified_tax !== null ? (float) $savedItem->modified_tax : null,
|
||||
'effectiveSupplyAmount' => $savedItem?->modified_supply_amount !== null
|
||||
? (float) $savedItem->modified_supply_amount
|
||||
: ($amount - floatval($log->Tax ?? 0)),
|
||||
'effectiveTax' => $savedItem?->modified_tax !== null
|
||||
? (float) $savedItem->modified_tax
|
||||
: floatval($log->Tax ?? 0),
|
||||
'isAmountModified' => $savedItem?->modified_supply_amount !== null || $savedItem?->modified_tax !== null,
|
||||
];
|
||||
|
||||
// 공제/불공제 통계 집계
|
||||
@@ -851,7 +862,54 @@ public function save(Request $request): JsonResponse
|
||||
->where('approval_amount', $data['approval_amount'])
|
||||
->first();
|
||||
|
||||
// 수정 금액 처리
|
||||
$modifiedSupplyAmount = isset($trans['modifiedSupplyAmount']) && $trans['modifiedSupplyAmount'] !== null
|
||||
? floatval($trans['modifiedSupplyAmount']) : null;
|
||||
$modifiedTax = isset($trans['modifiedTax']) && $trans['modifiedTax'] !== null
|
||||
? floatval($trans['modifiedTax']) : null;
|
||||
|
||||
$data['modified_supply_amount'] = $modifiedSupplyAmount;
|
||||
$data['modified_tax'] = $modifiedTax;
|
||||
|
||||
if ($existing) {
|
||||
// 금액 변경 감지 및 이력 기록
|
||||
$oldSupply = $existing->modified_supply_amount !== null
|
||||
? (float) $existing->modified_supply_amount
|
||||
: ((float) $existing->approval_amount - (float) $existing->tax);
|
||||
$oldTax = $existing->modified_tax !== null
|
||||
? (float) $existing->modified_tax
|
||||
: (float) $existing->tax;
|
||||
|
||||
$newSupply = $modifiedSupplyAmount !== null
|
||||
? $modifiedSupplyAmount
|
||||
: ((float) $existing->approval_amount - (float) $existing->tax);
|
||||
$newTax = $modifiedTax !== null
|
||||
? $modifiedTax
|
||||
: (float) $existing->tax;
|
||||
|
||||
$amountChanged = abs($oldSupply - $newSupply) > 0.01 || abs($oldTax - $newTax) > 0.01;
|
||||
|
||||
if ($amountChanged) {
|
||||
$uniqueKey = implode('|', [
|
||||
$existing->card_num,
|
||||
$existing->use_dt,
|
||||
$existing->approval_num,
|
||||
(int) $existing->approval_amount,
|
||||
]);
|
||||
|
||||
CardTransactionAmountLog::create([
|
||||
'card_transaction_id' => $existing->id,
|
||||
'original_unique_key' => $uniqueKey,
|
||||
'before_supply_amount' => $oldSupply,
|
||||
'before_tax' => $oldTax,
|
||||
'after_supply_amount' => $newSupply,
|
||||
'after_tax' => $newTax,
|
||||
'modified_by' => auth()->id(),
|
||||
'modified_by_name' => auth()->user()?->name ?? '',
|
||||
'ip_address' => $request->ip(),
|
||||
]);
|
||||
}
|
||||
|
||||
// 계정과목 및 수정 가능한 필드들 업데이트
|
||||
$existing->update([
|
||||
'account_code' => $data['account_code'],
|
||||
@@ -859,6 +917,8 @@ public function save(Request $request): JsonResponse
|
||||
'deduction_type' => $data['deduction_type'],
|
||||
'evidence_name' => $data['evidence_name'],
|
||||
'description' => $data['description'],
|
||||
'modified_supply_amount' => $data['modified_supply_amount'],
|
||||
'modified_tax' => $data['modified_tax'],
|
||||
]);
|
||||
$updated++;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user