- 자료실 하위 3개 메뉴: 자료보관함, 매뉴얼, 공지사항 - 자료보관함: 폴더 트리 + 파일 업로드/다운로드/삭제 - 매뉴얼/공지사항: 게시판형 CRUD + 첨부파일 - 안전관리: 안전보건교육, TBM현황, 위험성평가, 재해예방조치 - 품질관리: 시정조치 UI 페이지 - 대시보드: 슈퍼관리자 전용 레거시 사이트 참고 카드 - 작업일보/출면일보 오류 수정 및 기능 개선 - 설비 사진 업로드, 근로계약서 종료일 수정
250 lines
8.0 KiB
PHP
250 lines
8.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Juil;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Juil\PmisWorker;
|
|
use App\Services\WeatherService;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\View\View;
|
|
|
|
class PlanningController extends Controller
|
|
{
|
|
public function estimate(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.estimate'));
|
|
}
|
|
|
|
return view('juil.estimate');
|
|
}
|
|
|
|
public function project(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.project'));
|
|
}
|
|
|
|
return view('juil.project');
|
|
}
|
|
|
|
public function workflow(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.workflow'));
|
|
}
|
|
|
|
return view('juil.workflow');
|
|
}
|
|
|
|
public function constructionPmis(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis'));
|
|
}
|
|
|
|
return view('juil.construction-pmis');
|
|
}
|
|
|
|
public function bimViewer(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.bim-viewer'));
|
|
}
|
|
|
|
return view('juil.bim-viewer');
|
|
}
|
|
|
|
// ── 시공관리 ──
|
|
|
|
public function pmisWorkforce(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.workforce'));
|
|
}
|
|
|
|
return view('juil.pmis-workforce');
|
|
}
|
|
|
|
public function pmisEquipment(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.equipment'));
|
|
}
|
|
|
|
return view('juil.pmis-equipment');
|
|
}
|
|
|
|
public function pmisMaterials(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.materials'));
|
|
}
|
|
|
|
return view('juil.pmis-materials');
|
|
}
|
|
|
|
public function pmisWorkVolume(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.work-volume'));
|
|
}
|
|
|
|
return view('juil.pmis-work-volume');
|
|
}
|
|
|
|
public function pmisDailyAttendance(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.daily-attendance'));
|
|
}
|
|
|
|
return view('juil.pmis-daily-attendance');
|
|
}
|
|
|
|
public function pmisDailyReport(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.daily-report'));
|
|
}
|
|
|
|
return view('juil.pmis-daily-report');
|
|
}
|
|
|
|
public function pmisCorrectiveAction(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.corrective-action'));
|
|
}
|
|
|
|
return view('juil.pmis-corrective-action');
|
|
}
|
|
|
|
// ── 안전관리 ──
|
|
|
|
public function pmisSafetyEducation(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.safety-education'));
|
|
}
|
|
|
|
return view('juil.pmis-safety-education');
|
|
}
|
|
|
|
public function pmisTbm(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.tbm'));
|
|
}
|
|
|
|
return view('juil.pmis-tbm');
|
|
}
|
|
|
|
public function pmisRiskAssessment(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.risk-assessment'));
|
|
}
|
|
|
|
return view('juil.pmis-risk-assessment');
|
|
}
|
|
|
|
public function pmisDisasterPrevention(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.disaster-prevention'));
|
|
}
|
|
|
|
return view('juil.pmis-disaster-prevention');
|
|
}
|
|
|
|
public function pmisArchiveFiles(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.archive-files'));
|
|
}
|
|
|
|
return view('juil.pmis-archive-files');
|
|
}
|
|
|
|
public function pmisArchiveManual(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.archive-manual'));
|
|
}
|
|
|
|
return view('juil.pmis-archive-manual');
|
|
}
|
|
|
|
public function pmisArchiveNotice(Request $request): View|Response
|
|
{
|
|
if ($request->header('HX-Request')) {
|
|
return response('', 200)->header('HX-Redirect', route('juil.construction-pmis.archive-notice'));
|
|
}
|
|
|
|
return view('juil.pmis-archive-notice');
|
|
}
|
|
|
|
public function pmisWeather(WeatherService $weatherService): JsonResponse
|
|
{
|
|
$forecasts = $weatherService->getWeeklyForecast();
|
|
|
|
return response()->json(['forecasts' => array_slice($forecasts, 0, 2)]);
|
|
}
|
|
|
|
public function pmisProfile(): JsonResponse
|
|
{
|
|
$user = auth()->user();
|
|
$tenantId = session('current_tenant_id', 1);
|
|
$worker = PmisWorker::findOrCreateFromUser($user, $tenantId);
|
|
|
|
return response()->json([
|
|
'worker' => [
|
|
'id' => $worker->id,
|
|
'name' => $worker->name,
|
|
'login_id' => $worker->login_id,
|
|
'phone' => $worker->phone,
|
|
'email' => $worker->email,
|
|
'department' => $worker->department ?? '-',
|
|
'position' => $worker->position ?? '-',
|
|
'role_type' => $worker->role_type ?? '-',
|
|
'gender' => $worker->gender ?? '',
|
|
'company' => $worker->company ?? '-',
|
|
'profile_photo_path' => $worker->profile_photo_path,
|
|
'created_at' => $worker->created_at?->format('Y-m-d'),
|
|
'last_login_at' => $worker->last_login_at?->format('Y-m-d H:i')
|
|
?? $user->last_login_at?->format('Y-m-d H:i'),
|
|
'is_admin' => $user->isAdmin(),
|
|
'is_super_admin' => $user->isSuperAdmin(),
|
|
],
|
|
]);
|
|
}
|
|
|
|
public function pmisProfileUpdate(Request $request): JsonResponse
|
|
{
|
|
$request->validate([
|
|
'phone' => ['nullable', 'string', 'max:20'],
|
|
'email' => ['nullable', 'email', 'max:255'],
|
|
'gender' => ['nullable', 'string', 'in:남,여'],
|
|
'position' => ['nullable', 'string', 'max:50'],
|
|
'company' => ['nullable', 'string', 'max:100'],
|
|
]);
|
|
|
|
$user = auth()->user();
|
|
$tenantId = session('current_tenant_id', 1);
|
|
$worker = PmisWorker::findOrCreateFromUser($user, $tenantId);
|
|
|
|
$worker->update([
|
|
'phone' => $request->input('phone'),
|
|
'email' => $request->input('email'),
|
|
'gender' => $request->input('gender'),
|
|
'position' => $request->input('position'),
|
|
'company' => $request->input('company'),
|
|
]);
|
|
|
|
return response()->json(['success' => true, 'message' => '개인정보가 저장되었습니다.']);
|
|
}
|
|
}
|