diff --git a/app/Models/Barobill/CardTransactionSplit.php b/app/Models/Barobill/CardTransactionSplit.php index 2169eee8..78d0b971 100644 --- a/app/Models/Barobill/CardTransactionSplit.php +++ b/app/Models/Barobill/CardTransactionSplit.php @@ -20,6 +20,7 @@ class CardTransactionSplit extends Model 'split_amount', 'account_code', 'account_name', + 'deduction_type', 'evidence_name', 'description', 'memo', @@ -100,6 +101,7 @@ public static function saveSplits(int $tenantId, string $uniqueKey, array $origi 'split_amount' => $split['amount'] ?? 0, 'account_code' => $split['accountCode'] ?? null, 'account_name' => $split['accountName'] ?? null, + 'deduction_type' => $split['deductionType'] ?? null, 'evidence_name' => $split['evidenceName'] ?? null, 'description' => $split['description'] ?? null, 'memo' => $split['memo'] ?? null, diff --git a/database/migrations/2026_01_23_191000_add_deduction_type_to_barobill_card_transaction_splits_table.php b/database/migrations/2026_01_23_191000_add_deduction_type_to_barobill_card_transaction_splits_table.php new file mode 100644 index 00000000..45ace617 --- /dev/null +++ b/database/migrations/2026_01_23_191000_add_deduction_type_to_barobill_card_transaction_splits_table.php @@ -0,0 +1,29 @@ +string('deduction_type', 20)->nullable()->after('account_name')->comment('공제유형: deductible/non_deductible'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('barobill_card_transaction_splits', function (Blueprint $table) { + $table->dropColumn('deduction_type'); + }); + } +}; diff --git a/resources/views/barobill/ecard/index.blade.php b/resources/views/barobill/ecard/index.blade.php index 318bc675..5a2f5dd6 100644 --- a/resources/views/barobill/ecard/index.blade.php +++ b/resources/views/barobill/ecard/index.blade.php @@ -284,12 +284,14 @@ className={`px-3 py-1.5 text-xs cursor-pointer hover:bg-purple-50 ${ useEffect(() => { if (isOpen && log) { + const defaultDeductionType = log.deductionType || (log.merchantBizNum ? 'deductible' : 'non_deductible'); if (existingSplits && existingSplits.length > 0) { // 기존 분개 로드 setSplits(existingSplits.map(s => ({ amount: parseFloat(s.split_amount || s.amount || 0), accountCode: s.account_code || s.accountCode || '', accountName: s.account_name || s.accountName || '', + deductionType: s.deduction_type || s.deductionType || defaultDeductionType, evidenceName: s.evidence_name || s.evidenceName || log.evidenceName || log.merchantName || '', description: s.description || log.description || log.merchantBizType || log.memo || '', memo: s.memo || '' @@ -300,6 +302,7 @@ className={`px-3 py-1.5 text-xs cursor-pointer hover:bg-purple-50 ${ amount: log.approvalAmount || 0, accountCode: log.accountCode || '', accountName: log.accountName || '', + deductionType: defaultDeductionType, evidenceName: log.evidenceName || log.merchantName || '', description: log.description || log.merchantBizType || log.memo || '', memo: '' @@ -316,10 +319,12 @@ className={`px-3 py-1.5 text-xs cursor-pointer hover:bg-purple-50 ${ const addSplit = () => { const remaining = originalAmount - splitTotal; + const defaultDeductionType = log.deductionType || (log.merchantBizNum ? 'deductible' : 'non_deductible'); setSplits([...splits, { amount: remaining > 0 ? remaining : 0, accountCode: '', accountName: '', + deductionType: defaultDeductionType, evidenceName: log.evidenceName || log.merchantName || '', description: log.description || log.merchantBizType || log.memo || '', memo: '' @@ -400,6 +405,21 @@ className="w-full px-3 py-2 border border-stone-200 rounded-lg text-sm focus:rin accountCodes={accountCodes} /> +
+ + +