Files
sam-manage/app/Http/Controllers/Finance/CorporateCardController.php

183 lines
6.4 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Controllers\Finance;
use App\Http\Controllers\Controller;
use App\Models\Finance\CorporateCard;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CorporateCardController extends Controller
{
/**
* 카드 목록 조회
*/
public function index(Request $request): JsonResponse
{
$tenantId = session('selected_tenant_id', 1);
$cards = CorporateCard::forTenant($tenantId)
->orderBy('created_at', 'desc')
->get()
->map(function ($card) {
return [
'id' => $card->id,
'cardName' => $card->card_name,
'cardCompany' => $card->card_company,
'cardNumber' => $card->card_number,
'cardType' => $card->card_type,
'paymentDay' => $card->payment_day,
'creditLimit' => (float) $card->credit_limit,
'currentUsage' => (float) $card->current_usage,
'cardHolderName' => $card->card_holder_name,
'actualUser' => $card->actual_user,
'expiryDate' => $card->expiry_date,
'cvc' => $card->cvc,
'status' => $card->status,
'memo' => $card->memo,
];
});
return response()->json([
'success' => true,
'data' => $cards,
]);
}
/**
* 카드 등록
*/
public function store(Request $request): JsonResponse
{
$request->validate([
'cardName' => 'required|string|max:100',
'cardCompany' => 'required|string|max:50',
'cardNumber' => 'required|string|max:30',
'cardType' => 'required|in:credit,debit',
'cardHolderName' => 'required|string|max:100',
'actualUser' => 'required|string|max:100',
]);
$tenantId = session('selected_tenant_id', 1);
$card = CorporateCard::create([
'tenant_id' => $tenantId,
'card_name' => $request->input('cardName'),
'card_company' => $request->input('cardCompany'),
'card_number' => $request->input('cardNumber'),
'card_type' => $request->input('cardType'),
'payment_day' => $request->input('paymentDay', 15),
'credit_limit' => $request->input('creditLimit', 0),
'current_usage' => 0,
'card_holder_name' => $request->input('cardHolderName'),
'actual_user' => $request->input('actualUser'),
'expiry_date' => $request->input('expiryDate'),
'cvc' => $request->input('cvc'),
'status' => $request->input('status', 'active'),
'memo' => $request->input('memo'),
]);
return response()->json([
'success' => true,
'message' => '카드가 등록되었습니다.',
'data' => [
'id' => $card->id,
'cardName' => $card->card_name,
'cardCompany' => $card->card_company,
'cardNumber' => $card->card_number,
'cardType' => $card->card_type,
'paymentDay' => $card->payment_day,
'creditLimit' => (float) $card->credit_limit,
'currentUsage' => (float) $card->current_usage,
'cardHolderName' => $card->card_holder_name,
'actualUser' => $card->actual_user,
'expiryDate' => $card->expiry_date,
'cvc' => $card->cvc,
'status' => $card->status,
'memo' => $card->memo,
],
]);
}
/**
* 카드 수정
*/
public function update(Request $request, int $id): JsonResponse
{
$card = CorporateCard::findOrFail($id);
$request->validate([
'cardName' => 'required|string|max:100',
'cardCompany' => 'required|string|max:50',
'cardNumber' => 'required|string|max:30',
'cardType' => 'required|in:credit,debit',
'cardHolderName' => 'required|string|max:100',
'actualUser' => 'required|string|max:100',
]);
$card->update([
'card_name' => $request->input('cardName'),
'card_company' => $request->input('cardCompany'),
'card_number' => $request->input('cardNumber'),
'card_type' => $request->input('cardType'),
'payment_day' => $request->input('paymentDay', 15),
'credit_limit' => $request->input('creditLimit', 0),
'card_holder_name' => $request->input('cardHolderName'),
'actual_user' => $request->input('actualUser'),
'expiry_date' => $request->input('expiryDate'),
'cvc' => $request->input('cvc'),
'status' => $request->input('status', 'active'),
'memo' => $request->input('memo'),
]);
return response()->json([
'success' => true,
'message' => '카드가 수정되었습니다.',
'data' => [
'id' => $card->id,
'cardName' => $card->card_name,
'cardCompany' => $card->card_company,
'cardNumber' => $card->card_number,
'cardType' => $card->card_type,
'paymentDay' => $card->payment_day,
'creditLimit' => (float) $card->credit_limit,
'currentUsage' => (float) $card->current_usage,
'cardHolderName' => $card->card_holder_name,
'actualUser' => $card->actual_user,
'expiryDate' => $card->expiry_date,
'cvc' => $card->cvc,
'status' => $card->status,
'memo' => $card->memo,
],
]);
}
/**
* 카드 비활성화
*/
public function deactivate(int $id): JsonResponse
{
$card = CorporateCard::findOrFail($id);
$card->update(['status' => 'inactive']);
return response()->json([
'success' => true,
'message' => '카드가 비활성화되었습니다.',
]);
}
/**
* 카드 영구삭제
*/
public function destroy(int $id): JsonResponse
{
$card = CorporateCard::findOrFail($id);
$card->forceDelete();
return response()->json([
'success' => true,
'message' => '카드가 영구 삭제되었습니다.',
]);
}
}