diff --git a/app/Http/Controllers/Finance/PayableController.php b/app/Http/Controllers/Finance/PayableController.php
index b3c43e64..8d2c20bf 100644
--- a/app/Http/Controllers/Finance/PayableController.php
+++ b/app/Http/Controllers/Finance/PayableController.php
@@ -313,6 +313,7 @@ public function integrated(Request $request): JsonResponse
$journalDetails = (clone $journalQuery)
->select(
'journal_entry_lines.id',
+ 'journal_entry_lines.journal_entry_id',
'journal_entry_lines.trading_partner_name',
'journal_entry_lines.account_code',
'journal_entry_lines.account_name',
@@ -505,4 +506,21 @@ public function journalPayables(Request $request): JsonResponse
],
]);
}
+
+ /**
+ * 미지급금 관련 전표 강제 삭제 (soft delete)
+ */
+ public function deleteJournalEntry(int $id): JsonResponse
+ {
+ $tenantId = session('selected_tenant_id', 1);
+
+ $entry = JournalEntry::where('tenant_id', $tenantId)->findOrFail($id);
+
+ $entry->delete();
+
+ return response()->json([
+ 'success' => true,
+ 'message' => "전표 {$entry->entry_no}이(가) 삭제되었습니다.",
+ ]);
+ }
}
diff --git a/resources/views/finance/payables.blade.php b/resources/views/finance/payables.blade.php
index a14715a1..dcc74d1d 100644
--- a/resources/views/finance/payables.blade.php
+++ b/resources/views/finance/payables.blade.php
@@ -48,6 +48,7 @@
const TrendingUp = createIcon('trending-up');
const TrendingDown = createIcon('trending-down');
const Layers = createIcon('layers');
+const Trash2 = createIcon('trash-2');
const formatCurrency = (num) => num ? Number(num).toLocaleString() : '0';
const formatInputCurrency = (value) => {
@@ -81,6 +82,25 @@ function IntegratedTab({ startDate, endDate, account, vendorSearch }) {
useEffect(() => { fetchData(); }, [fetchData]);
+ const handleDeleteJournal = async (journalEntryId, entryNo) => {
+ if (!confirm(`전표 ${entryNo}을(를) 삭제하시겠습니까?`)) return;
+ try {
+ const res = await fetch(`/finance/payables/journal-entry/${journalEntryId}`, {
+ method: 'DELETE',
+ headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content },
+ });
+ const json = await res.json();
+ if (json.success) {
+ alert(json.message);
+ fetchData();
+ } else {
+ alert('삭제 실패: ' + (json.message || ''));
+ }
+ } catch (err) {
+ alert('삭제 오류: ' + err.message);
+ }
+ };
+
if (loading) return