Files
sam-manage/app/Http/Controllers/Juil/PlanningController.php
김보곤 c8fd3e2739 feat: [pmis] 시공관리 하위메뉴 6개 추가 및 인원관리 페이지 구현
- 시공관리 하위메뉴: 인원관리, 장비관리, 자재관리, 공사량관리, 출면일보, 작업일보
- 인원관리 4개 탭 구현: 인원등록, 출역현황, 투입현황(업체별), 투입현황(근로자별)
- PMIS 사이드바에 시공관리 children 메뉴 추가 (대시보드, BIM 뷰어 포함)
- 나머지 5개 메뉴 placeholder 페이지 생성
2026-03-12 13:52:20 +09:00

174 lines
5.6 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 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'),
],
]);
}
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' => '개인정보가 저장되었습니다.']);
}
}