- Document 관련 모델 4개 생성 (Document, DocumentApproval, DocumentData, DocumentAttachment) - DocumentController 생성 (목록/생성/상세/수정 페이지) - DocumentApiController 생성 (AJAX CRUD 처리) - 문서 관리 뷰 3개 생성 (index, edit, show) - 웹/API 라우트 등록 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
122 lines
3.5 KiB
PHP
122 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Documents\Document;
|
|
use App\Models\DocumentTemplate;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\View\View;
|
|
|
|
class DocumentController extends Controller
|
|
{
|
|
/**
|
|
* 문서 목록 페이지
|
|
*/
|
|
public function index(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('documents.index'));
|
|
}
|
|
|
|
$tenantId = session('selected_tenant_id');
|
|
|
|
// 템플릿 목록 (필터용)
|
|
$templates = $tenantId
|
|
? DocumentTemplate::where(function ($q) use ($tenantId) {
|
|
$q->whereNull('tenant_id')->orWhere('tenant_id', $tenantId);
|
|
})->where('is_active', true)->orderBy('name')->get()
|
|
: collect();
|
|
|
|
return view('documents.index', [
|
|
'templates' => $templates,
|
|
'statuses' => Document::STATUS_LABELS,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 문서 생성 페이지
|
|
*/
|
|
public function create(Request $request): View
|
|
{
|
|
$tenantId = session('selected_tenant_id');
|
|
$templateId = $request->query('template_id');
|
|
|
|
// 템플릿 목록
|
|
$templates = $tenantId
|
|
? DocumentTemplate::where(function ($q) use ($tenantId) {
|
|
$q->whereNull('tenant_id')->orWhere('tenant_id', $tenantId);
|
|
})->where('is_active', true)->orderBy('name')->get()
|
|
: collect();
|
|
|
|
// 선택된 템플릿
|
|
$template = $templateId
|
|
? DocumentTemplate::with(['approvalLines', 'basicFields', 'sections.items', 'columns'])->find($templateId)
|
|
: null;
|
|
|
|
return view('documents.edit', [
|
|
'document' => null,
|
|
'template' => $template,
|
|
'templates' => $templates,
|
|
'isCreate' => true,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 문서 수정 페이지
|
|
*/
|
|
public function edit(int $id): View
|
|
{
|
|
$tenantId = session('selected_tenant_id');
|
|
|
|
$document = Document::with([
|
|
'template.approvalLines',
|
|
'template.basicFields',
|
|
'template.sections.items',
|
|
'template.columns',
|
|
'approvals.user',
|
|
'data',
|
|
'attachments.file',
|
|
'creator',
|
|
])->where('tenant_id', $tenantId)->findOrFail($id);
|
|
|
|
// 템플릿 목록 (변경용)
|
|
$templates = $tenantId
|
|
? DocumentTemplate::where(function ($q) use ($tenantId) {
|
|
$q->whereNull('tenant_id')->orWhere('tenant_id', $tenantId);
|
|
})->where('is_active', true)->orderBy('name')->get()
|
|
: collect();
|
|
|
|
return view('documents.edit', [
|
|
'document' => $document,
|
|
'template' => $document->template,
|
|
'templates' => $templates,
|
|
'isCreate' => false,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* 문서 상세 페이지 (읽기 전용)
|
|
*/
|
|
public function show(int $id): View
|
|
{
|
|
$tenantId = session('selected_tenant_id');
|
|
|
|
$document = Document::with([
|
|
'template.approvalLines',
|
|
'template.basicFields',
|
|
'template.sections.items',
|
|
'template.columns',
|
|
'approvals.user',
|
|
'data',
|
|
'attachments.file',
|
|
'creator',
|
|
'updater',
|
|
])->where('tenant_id', $tenantId)->findOrFail($id);
|
|
|
|
return view('documents.show', [
|
|
'document' => $document,
|
|
]);
|
|
}
|
|
}
|