feat: [tenant-settings] 회사 표시명 설정 추가
- 테넌트 설정에 '인쇄용 회사명' 입력 필드 추가 - 재직증명서 등 문서 인쇄 시 표시명 우선 적용 - 비워두면 기본 company_name 사용
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
class TenantSettingController extends Controller
|
||||
{
|
||||
/**
|
||||
* 설정 목록 (재고 설정 페이지)
|
||||
* 설정 목록 (재고 설정 + 회사 표시명 설정)
|
||||
*/
|
||||
public function index(Request $request): View|Response
|
||||
{
|
||||
@@ -30,21 +30,25 @@ public function index(Request $request): View|Response
|
||||
$itemTypeLabels = $tenantId ? CommonCode::getItemTypes($tenantId) : [];
|
||||
|
||||
// 테넌트 미선택 시 빈 설정
|
||||
$stockSettings = collect();
|
||||
$allSettings = collect();
|
||||
if ($tenantId) {
|
||||
$stockSettings = TenantSetting::withoutGlobalScopes()
|
||||
$allSettings = TenantSetting::withoutGlobalScopes()
|
||||
->where('tenant_id', $tenantId)
|
||||
->where('setting_group', 'stock')
|
||||
->get()
|
||||
->keyBy('setting_key');
|
||||
->get();
|
||||
}
|
||||
|
||||
// 설정값 (저장된 값이 없으면 빈 배열/기본값)
|
||||
$stockSettings = $allSettings->where('setting_group', 'stock')->keyBy('setting_key');
|
||||
$companySettings = $allSettings->where('setting_group', 'company')->keyBy('setting_key');
|
||||
|
||||
// 재고 설정값
|
||||
$hasSettings = $stockSettings->isNotEmpty();
|
||||
$stockItemTypes = $stockSettings->get('stock_item_types')?->setting_value ?? [];
|
||||
$defaultSafetyStock = $stockSettings->get('default_safety_stock')?->setting_value ?? 10;
|
||||
$lowStockAlert = $stockSettings->get('low_stock_alert')?->setting_value ?? true;
|
||||
|
||||
// 회사 표시명 설정값
|
||||
$displayCompanyName = $companySettings->get('display_company_name')?->setting_value ?? '';
|
||||
|
||||
return view('tenant-settings.index', [
|
||||
'tenant' => $tenant,
|
||||
'hasSettings' => $hasSettings,
|
||||
@@ -52,6 +56,7 @@ public function index(Request $request): View|Response
|
||||
'stockItemTypes' => $stockItemTypes,
|
||||
'defaultSafetyStock' => $defaultSafetyStock,
|
||||
'lowStockAlert' => $lowStockAlert,
|
||||
'displayCompanyName' => $displayCompanyName,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -77,6 +82,7 @@ public function store(Request $request): RedirectResponse
|
||||
'stock_item_types.*' => 'string|in:'.implode(',', $validItemTypes),
|
||||
'default_safety_stock' => 'required|integer|min:0|max:9999',
|
||||
'low_stock_alert' => 'nullable|boolean',
|
||||
'display_company_name' => 'nullable|string|max:100',
|
||||
]);
|
||||
|
||||
// 재고관리 품목유형 저장
|
||||
@@ -121,6 +127,20 @@ public function store(Request $request): RedirectResponse
|
||||
]
|
||||
);
|
||||
|
||||
// 회사 표시명 저장
|
||||
TenantSetting::withoutGlobalScopes()->updateOrCreate(
|
||||
[
|
||||
'tenant_id' => $tenantId,
|
||||
'setting_group' => 'company',
|
||||
'setting_key' => 'display_company_name',
|
||||
],
|
||||
[
|
||||
'setting_value' => trim($validated['display_company_name'] ?? ''),
|
||||
'description' => '문서에 인쇄되는 회사 표시명',
|
||||
'updated_by' => $userId,
|
||||
]
|
||||
);
|
||||
|
||||
return redirect()->route('tenant-settings.index')
|
||||
->with('success', '설정이 저장되었습니다.');
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
use App\Models\HR\Employee;
|
||||
use App\Models\Tenants\Tenant;
|
||||
use App\Models\Tenants\TenantSetting;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class EmploymentCertService
|
||||
@@ -33,6 +34,15 @@ public function getCertInfo(int $userId, int $tenantId): array
|
||||
|
||||
$tenant = Tenant::findOrFail($tenantId);
|
||||
|
||||
// 인쇄용 회사 표시명 조회 (설정 없으면 기본 company_name 사용)
|
||||
$displaySetting = TenantSetting::withoutGlobalScopes()
|
||||
->where('tenant_id', $tenantId)
|
||||
->where('setting_group', 'company')
|
||||
->where('setting_key', 'display_company_name')
|
||||
->first();
|
||||
$displayName = $displaySetting?->setting_value ?? '';
|
||||
$companyName = ! empty($displayName) ? $displayName : ($tenant->company_name ?? '');
|
||||
|
||||
$residentNumber = $employee->resident_number;
|
||||
$maskedResident = $residentNumber
|
||||
? substr($residentNumber, 0, 8).'******'
|
||||
@@ -46,7 +56,7 @@ public function getCertInfo(int $userId, int $tenantId): array
|
||||
'department' => $employee->department?->name ?? '',
|
||||
'position' => $employee->position_label ?? '',
|
||||
'hire_date' => $employee->hire_date ?? '',
|
||||
'company_name' => $tenant->company_name ?? '',
|
||||
'company_name' => $companyName,
|
||||
'business_num' => $tenant->business_num ?? '',
|
||||
'ceo_name' => $tenant->ceo_name ?? '',
|
||||
'phone' => $tenant->phone ?? '',
|
||||
|
||||
@@ -63,6 +63,36 @@
|
||||
@csrf
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6">
|
||||
<!-- 회사 표시명 설정 -->
|
||||
<div class="bg-white rounded-lg shadow-sm p-5">
|
||||
<div class="flex items-center gap-3 mb-4">
|
||||
<div class="w-9 h-9 bg-purple-100 rounded-lg flex items-center justify-center">
|
||||
<svg class="w-5 h-5 text-purple-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" />
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h3 class="font-semibold text-gray-800">회사 표시명</h3>
|
||||
<p class="text-xs text-gray-500">재직증명서 등 문서 인쇄 시 사용</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
<label for="display_company_name" class="block text-sm font-medium text-gray-600 mb-1">인쇄용 회사명</label>
|
||||
<input type="text"
|
||||
id="display_company_name"
|
||||
name="display_company_name"
|
||||
value="{{ old('display_company_name', $displayCompanyName) }}"
|
||||
placeholder="{{ $tenant?->company_name ?? '(주)회사명' }}"
|
||||
class="w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
|
||||
<p class="mt-1.5 text-xs text-gray-400">
|
||||
비워두면 기본 회사명({{ $tenant?->company_name ?? '-' }})이 사용됩니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 재고관리 품목유형 -->
|
||||
<div class="bg-white rounded-lg shadow-sm p-5">
|
||||
<div class="flex items-center gap-3 mb-4">
|
||||
|
||||
Reference in New Issue
Block a user