Files
sam-manage/resources/views/barobill/billing/partials/billing-table.blade.php
pro 39161d1203 feat:바로빌 과금관리 시스템 구현
- 모델: BarobillSubscription, BarobillBillingRecord, BarobillMonthlySummary
- 서비스: BarobillBillingService (구독/과금 처리 로직)
- API 컨트롤러: BarobillBillingController (구독/과금 CRUD)
- 뷰: 과금 현황 탭, 구독 관리 탭, 통계 카드, 상세 모달
- 라우트: 웹/API 라우트 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 15:03:44 +09:00

157 lines
9.6 KiB
PHP

@if($summaries->isEmpty())
<div class="p-12 text-center">
<svg class="mx-auto h-12 w-12 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
<h3 class="mt-2 text-sm font-medium text-gray-900">과금 내역이 없습니다</h3>
<p class="mt-1 text-sm text-gray-500">{{ $billingMonth }} 기준 과금 내역이 없습니다.</p>
<p class="mt-1 text-sm text-gray-500">"과금 처리" 버튼을 클릭하여 월정액을 처리하세요.</p>
</div>
@else
<div class="flex-1 overflow-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50 sticky top-0 z-10">
<tr>
@if($allTenants ?? false)
<th scope="col" class="px-4 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider w-16">
T-ID
</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
테넌트
</th>
@endif
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
사업자번호
</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
상호명
</th>
<th scope="col" class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
계좌조회
</th>
<th scope="col" class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
카드내역
</th>
<th scope="col" class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
홈텍스
</th>
<th scope="col" class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
월정액
</th>
<th scope="col" class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
세금계산서
</th>
<th scope="col" class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
총합계
</th>
<th scope="col" class="px-6 py-3 text-center text-xs font-medium text-gray-500 uppercase tracking-wider w-20">
상세
</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
@foreach($summaries as $summary)
<tr class="hover:bg-gray-50 transition-colors group">
@if($allTenants ?? false)
<td class="px-4 py-4 whitespace-nowrap text-center">
<span class="inline-flex items-center justify-center w-8 h-8 rounded-full text-xs font-bold bg-indigo-100 text-indigo-700">
{{ $summary->member->tenant_id ?? '-' }}
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-indigo-100 text-indigo-800">
{{ $summary->member->tenant->company_name ?? '-' }}
</span>
</td>
@endif
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm font-mono text-gray-500">{{ $summary->member->formatted_biz_no ?? '-' }}</div>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<div class="text-sm font-medium text-gray-900">{{ $summary->member->corp_name ?? '-' }}</div>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right">
<span class="text-sm {{ $summary->bank_account_fee > 0 ? 'text-green-600 font-medium' : 'text-gray-400' }}">
{{ number_format($summary->bank_account_fee) }}
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right">
<span class="text-sm {{ $summary->card_fee > 0 ? 'text-blue-600 font-medium' : 'text-gray-400' }}">
{{ number_format($summary->card_fee) }}
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right">
<span class="text-sm {{ $summary->hometax_fee > 0 ? 'text-orange-600 font-medium' : 'text-gray-400' }}">
{{ number_format($summary->hometax_fee) }}
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right">
<span class="text-sm font-medium text-gray-700">
{{ number_format($summary->subscription_total) }}
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-right">
@if($summary->tax_invoice_count > 0)
<div class="text-sm text-purple-600">
<span class="font-medium">{{ number_format($summary->tax_invoice_count) }}</span>
<span class="text-xs text-gray-400">({{ number_format($summary->tax_invoice_amount) }})</span>
</div>
@else
<span class="text-sm text-gray-400">-</span>
@endif
</td>
<td class="px-6 py-4 whitespace-nowrap text-right">
<span class="text-sm font-bold text-gray-900">
{{ number_format($summary->grand_total) }}
</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-center">
<button
type="button"
onclick="showDetailModal({{ $summary->member_id }}, '{{ addslashes($summary->member->corp_name ?? '') }}')"
class="p-2 text-blue-600 hover:bg-blue-50 rounded-lg opacity-30 group-hover:opacity-100 transition"
title="상세보기"
>
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" />
</svg>
</button>
</td>
</tr>
@endforeach
</tbody>
<!-- 합계 -->
<tfoot class="bg-gray-100 border-t-2 border-gray-300">
<tr>
@if($allTenants ?? false)
<td class="px-4 py-4" colspan="2"></td>
@endif
<td class="px-6 py-4" colspan="2">
<span class="text-sm font-bold text-gray-700">합계</span>
</td>
<td class="px-6 py-4 text-right">
<span class="text-sm font-bold text-green-600">{{ number_format($total['bank_account_fee']) }}</span>
</td>
<td class="px-6 py-4 text-right">
<span class="text-sm font-bold text-blue-600">{{ number_format($total['card_fee']) }}</span>
</td>
<td class="px-6 py-4 text-right">
<span class="text-sm font-bold text-orange-600">{{ number_format($total['hometax_fee']) }}</span>
</td>
<td class="px-6 py-4 text-right">
<span class="text-sm font-bold text-gray-700">{{ number_format($total['subscription_total']) }}</span>
</td>
<td class="px-6 py-4 text-right">
<span class="text-sm font-bold text-purple-600">{{ number_format($total['tax_invoice_amount']) }}</span>
</td>
<td class="px-6 py-4 text-right">
<span class="text-lg font-bold text-gray-900">{{ number_format($total['grand_total']) }}</span>
</td>
<td class="px-6 py-4"></td>
</tr>
</tfoot>
</table>
</div>
@endif