Files
sam-api/app/Services/TenantBootstrap/Steps/ApprovalFormsStep.php
권혁성 bd500a87bd feat: 품질관리·대시보드·결재 양식 개선
- 품질관리 수주선택 필터링 + 검사 상태 자동 재계산
- 제품검사 요청서 Document(EAV) 자동생성 및 동기화
- 현황판 결재 카드 approvalOnly 스코프 + sub_label 추가
- 캘린더 어음 만기일 일정 연동
- QuoteStatService codebridge DB 커넥션 연결
- 테넌트 부트스트랩 기본 결재 양식 자동 시딩
2026-03-10 11:29:56 +09:00

106 lines
4.6 KiB
PHP

<?php
namespace App\Services\TenantBootstrap\Steps;
use App\Services\TenantBootstrap\Contracts\TenantBootstrapStep;
use Illuminate\Support\Facades\DB;
class ApprovalFormsStep implements TenantBootstrapStep
{
public function key(): string
{
return 'approval_forms_seed';
}
public function run(int $tenantId): void
{
if (! DB::getSchemaBuilder()->hasTable('approval_forms')) {
return;
}
$now = now();
$forms = [
[
'name' => '품의서',
'code' => 'proposal',
'category' => '일반',
'template' => json_encode([
'fields' => [
['name' => 'title', 'type' => 'text', 'label' => '제목', 'required' => true],
['name' => 'vendor', 'type' => 'text', 'label' => '거래처', 'required' => false],
['name' => 'description', 'type' => 'textarea', 'label' => '내용', 'required' => true],
['name' => 'reason', 'type' => 'textarea', 'label' => '사유', 'required' => true],
['name' => 'estimatedCost', 'type' => 'number', 'label' => '예상비용', 'required' => false],
],
]),
],
[
'name' => '지출결의서',
'code' => 'expenseReport',
'category' => '경비',
'template' => json_encode([
'fields' => [
['name' => 'requestDate', 'type' => 'date', 'label' => '신청일', 'required' => true],
['name' => 'paymentDate', 'type' => 'date', 'label' => '지급일', 'required' => true],
['name' => 'items', 'type' => 'array', 'label' => '지출항목', 'required' => true],
['name' => 'totalAmount', 'type' => 'number', 'label' => '총액', 'required' => true],
],
]),
],
[
'name' => '비용견적서',
'code' => 'expenseEstimate',
'category' => '경비',
'template' => json_encode([
'fields' => [
['name' => 'items', 'type' => 'array', 'label' => '비용항목', 'required' => true],
['name' => 'totalExpense', 'type' => 'number', 'label' => '총지출', 'required' => true],
['name' => 'accountBalance', 'type' => 'number', 'label' => '계좌잔액', 'required' => true],
],
]),
],
[
'name' => '근태신청',
'code' => 'attendance_request',
'category' => '일반',
'template' => json_encode([
'fields' => [
['name' => 'user_name', 'type' => 'text', 'label' => '신청자', 'required' => true],
['name' => 'request_type', 'type' => 'select', 'label' => '신청유형', 'required' => true],
['name' => 'period', 'type' => 'daterange', 'label' => '기간', 'required' => true],
['name' => 'days', 'type' => 'number', 'label' => '일수', 'required' => true],
['name' => 'reason', 'type' => 'textarea', 'label' => '사유', 'required' => true],
],
]),
],
[
'name' => '사유서',
'code' => 'reason_report',
'category' => '일반',
'template' => json_encode([
'fields' => [
['name' => 'user_name', 'type' => 'text', 'label' => '작성자', 'required' => true],
['name' => 'report_type', 'type' => 'select', 'label' => '사유유형', 'required' => true],
['name' => 'target_date', 'type' => 'date', 'label' => '대상일', 'required' => true],
['name' => 'reason', 'type' => 'textarea', 'label' => '사유', 'required' => true],
],
]),
],
];
foreach ($forms as $form) {
DB::table('approval_forms')->updateOrInsert(
['tenant_id' => $tenantId, 'code' => $form['code']],
[
'name' => $form['name'],
'category' => $form['category'],
'template' => $form['template'],
'is_active' => true,
'updated_at' => $now,
'created_at' => $now,
]
);
}
}
}