From 8dc41b211cad2ec638f38b789217b3415f385cb1 Mon Sep 17 00:00:00 2001 From: Yuka Higashide Date: Thu, 2 Oct 2025 16:28:17 +0900 Subject: [PATCH] =?UTF-8?q?=E9=A7=90=E8=BC=AA=E5=A0=B4=E7=A9=BA=E3=81=8D?= =?UTF-8?q?=E5=8F=B0=E6=95=B0=E8=A8=88=E7=AE=97=E5=87=A6=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RegularContractCreateController.php | 4 +- .../views/regular_contract/create.blade.php | 38 ++++-- .../regular_contract/park_detail.blade.php | 127 ++++++++++-------- 3 files changed, 99 insertions(+), 70 deletions(-) diff --git a/app/Http/Controllers/RegularContractCreateController.php b/app/Http/Controllers/RegularContractCreateController.php index 77a9f20..26371b9 100644 --- a/app/Http/Controllers/RegularContractCreateController.php +++ b/app/Http/Controllers/RegularContractCreateController.php @@ -100,13 +100,13 @@ class RegularContractCreateController extends Controller // zoneテーブルデータを取得(psectionテーブルとJOINしてpsection_subjectも取得) $zones = DB::table('zone') ->leftJoin('psection', 'zone.psection_id', '=', 'psection.psection_id') - ->select('zone.zone_id', 'zone.park_id', 'zone.psection_id', 'zone.zone_number', 'zone.zone_tolerance', 'psection.psection_subject') + ->select('zone.zone_id', 'zone.park_id', 'zone.ptype_id', 'zone.psection_id', 'zone.zone_number', 'zone.zone_tolerance', 'psection.psection_subject') ->get() ->groupBy('park_id'); // 空き予約マスタデータを取得 $reserve = DB::table('reserve') - ->select('reserve_id', 'park_id', 'psection_id') + ->select('reserve_id', 'park_id', 'ptype_id', 'psection_id') ->where('valid_flag', 1) ->get() ->groupBy('park_id'); diff --git a/resources/views/regular_contract/create.blade.php b/resources/views/regular_contract/create.blade.php index d04a1d7..9cd56cc 100644 --- a/resources/views/regular_contract/create.blade.php +++ b/resources/views/regular_contract/create.blade.php @@ -89,18 +89,31 @@ @php $zonesForType = ($zones[$row->park_id] ?? collect())->where('psection_subject', $vehicle); - @endphp - @forelse ($zonesForType as $zone) - @php + // 空き台数計算 + $hasVacancy = false; + foreach ($zonesForType as $zone) { $reserveCount = ($reserve[$row->park_id] ?? collect()) ->where('psection_id', $zone->psection_id) + ->where('ptype_id', $zone->ptype_id) ->count(); $vacancy = $zone->zone_tolerance - $zone->zone_number - $reserveCount; + if ($vacancy > 0) { + $hasVacancy = true; + break; + } + } // 猶予期間判定 $grace = $city_grace_periods[$row->city_id] ?? null; - $now = \Carbon\Carbon::now(); + $gracePeriodValid = + $grace && + is_numeric($grace->update_grace_period_start_date) && + preg_match('/^\d{1,2}:\d{2}$/', $grace->update_grace_period_start_time) && + is_numeric($grace->update_grace_period_end_date) && + preg_match('/^\d{1,2}:\d{2}$/', $grace->update_grace_period_end_time); + $inGrace = false; - if ($grace && $grace->update_grace_period_start_date && $grace->update_grace_period_start_time && $grace->update_grace_period_end_date && $grace->update_grace_period_end_time) { + if ($gracePeriodValid) { + $now = \Carbon\Carbon::now(); $year = $now->year; $month = $now->month; $startDay = (int)$grace->update_grace_period_start_date; @@ -125,16 +138,17 @@ } } @endphp - @if ($vacancy > 0 && $inGrace) + @if ($zonesForType->isNotEmpty() && $gracePeriodValid) + @if ($hasVacancy && $inGrace) @elseif (!$inGrace) - @elseif ($vacancy <= 0 && $inGrace) - - @endif - @empty - - @endforelse + @elseif (!$hasVacancy && $inGrace) + + @endif + @else + + @endif @endforeach diff --git a/resources/views/regular_contract/park_detail.blade.php b/resources/views/regular_contract/park_detail.blade.php index ac46287..37d5a15 100644 --- a/resources/views/regular_contract/park_detail.blade.php +++ b/resources/views/regular_contract/park_detail.blade.php @@ -36,64 +36,79 @@
- @foreach($zones as $zone) @php - $vacant = $vacancyData[$zone->psection_id . '_' . $zone->ptype_subject] ?? 0; - $grace = $city_grace_periods[$park->city_id] ?? null; - $now = \Carbon\Carbon::now(); - - // 猶予期間判定 - $isGracePeriod = false; - if ($grace && $grace->update_grace_period_start_date && $grace->update_grace_period_start_time && $grace->update_grace_period_end_date && $grace->update_grace_period_end_time) { - $now = \Carbon\Carbon::now(); - $year = $now->year; - $month = $now->month; - $startDay = (int)$grace->update_grace_period_start_date; - $endDay = (int)$grace->update_grace_period_end_date; - $startTime = $grace->update_grace_period_start_time; - $endTime = $grace->update_grace_period_end_time; - - if ($startDay > $endDay) { - // 月またぎ - $start = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $year, $month, $startDay, $startTime)); - $nextMonth = $month == 12 ? 1 : $month + 1; - $nextYear = $month == 12 ? $year + 1 : $year; - $end = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $nextYear, $nextMonth, $endDay, $endTime)); - } else { - // 同月 - $start = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $year, $month, $startDay, $startTime)); - $end = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $year, $month, $endDay, $endTime)); - } - $isGracePeriod = $now->between($start, $end); - } + $zonesByPtype = $zones->groupBy('ptype_id'); @endphp -
- {{ $zone->ptype_subject }}
- {{ $zone->psection_subject }}:空き {{ $vacant }}台 - @if($isGracePeriod) - @if($vacant > 0) - - @else - - @endif - @else - - @endif + @foreach($zonesByPtype as $ptypeId => $zonesGroup) +
+ {{ $zonesGroup->first()->ptype_subject }} +
+ @foreach($zonesGroup as $zone) + @php + $vacant = $vacancyData[$zone->psection_id . '_' . $zone->ptype_subject] ?? 0; + $grace = $city_grace_periods[$park->city_id] ?? null; + $now = \Carbon\Carbon::now(); + + // 猶予期間判定 + $isGracePeriod = false; + if ($grace && $grace->update_grace_period_start_date && $grace->update_grace_period_start_time && $grace->update_grace_period_end_date && $grace->update_grace_period_end_time) { + $now = \Carbon\Carbon::now(); + $year = $now->year; + $month = $now->month; + $startDay = (int)$grace->update_grace_period_start_date; + $endDay = (int)$grace->update_grace_period_end_date; + $startTime = $grace->update_grace_period_start_time; + $endTime = $grace->update_grace_period_end_time; + + if ($startDay > $endDay) { + // 月またぎ + // 前月の開始日~今月の終了日 + $prevMonth = $now->copy()->subMonth(); + $startPrev = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $prevMonth->year, $prevMonth->month, $startDay, $grace->update_grace_period_start_time)); + $endCurr = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $year, $month, $endDay, $grace->update_grace_period_end_time)); + // 今月の開始日~翌月の終了日 + $startCurr = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $year, $month, $startDay, $grace->update_grace_period_start_time)); + $nextMonth = $month == 12 ? 1 : $month + 1; + $nextYear = $month == 12 ? $year + 1 : $year; + $endNext = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $nextYear, $nextMonth, $endDay, $grace->update_grace_period_end_time)); + $isGracePeriod = $now->between($startPrev, $endCurr) || $now->between($startCurr, $endNext); + } else { + // 同月 + $start = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $year, $month, $startDay, $grace->update_grace_period_start_time)); + $end = \Carbon\Carbon::createFromFormat('Y-m-d H:i', sprintf('%04d-%02d-%02d %s', $year, $month, $endDay, $grace->update_grace_period_end_time)); + $isGracePeriod = $now->between($start, $end); + } + } + @endphp +
+ {{ $zone->psection_subject }}:空き {{ max(0, $vacant) }}台 + @if($isGracePeriod) + @if($vacant > 0) + + @else + + @endif + @else + + @endif +
+ @endforeach +
@endforeach
-- 2.47.3