diff --git a/app/Http/Controllers/ParkingSearchController.php b/app/Http/Controllers/ParkingSearchController.php index ee886db..c09f153 100644 --- a/app/Http/Controllers/ParkingSearchController.php +++ b/app/Http/Controllers/ParkingSearchController.php @@ -31,14 +31,10 @@ class ParkingSearchController extends Controller // 検索処理 public function getParkData($city_name, $station_neighbor_station, $park_name) { - // 検索仕様 - // 駐輪場マスタの全件(条件を絞った場合はその条件に一致するもの)を取得。 - // 併せて各マスタから追加情報を取得するが、その際のレコードは全て1対1で結びつく想定で暫定実装する - // ※設計書に詳細な記載なし。DBの定義上は1対多の可能性もあるが、その場合現在の画面イメージと矛盾するため、実態として無い想定で進める - // 駐輪場情報検索 $park = \DB::table('park as p') ->select( + 'p.park_id', 'p.park_name', 'p.park_adrs', 'p.price_memo', @@ -49,15 +45,12 @@ class ParkingSearchController extends Controller 'p.update_grace_period_end_date', 'p.update_grace_period_end_time', 'c.city_name', - 's.station_neighbor_station', - 'z.psection_id', - 'z.zone_standard' + 's.station_neighbor_station' ) ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id') ->leftJoin(\DB::raw( '(SELECT park_id, station_neighbor_station FROM station WHERE station_id IN (SELECT MAX(station_id) FROM station GROUP BY park_id)) as s' - ),'p.park_id','=','s.park_id') - ->leftJoin('zone as z', 'p.park_id', '=', 'z.park_id'); + ),'p.park_id','=','s.park_id'); // プルダウン指定の条件でwhere句を付与 if (!empty($city_name)) { @@ -76,42 +69,102 @@ class ParkingSearchController extends Controller $now = date('Y-m-d H:i:s'); foreach ($park as $row) { - // ゾーンマスタの情報から空き台数を取得する - $vacantInfo = \DB::table('zone') - ->selectRaw('SUM(zone_tolerance) - SUM(zone_number) as vacant') - ->where('psection_id', $row->psection_id) - ->groupBy('psection_id') - ->first(); - - // 定期予約マスタから予約中の台数を取得する - $reservedCount = \DB::table('reserve') - ->where('psection_id', $row->psection_id) - ->where('valid_flag', 1) - ->count(); + // ゾーンマスタの情報を取得する + $zoneInfo = \DB::table('zone as z') + ->select( + 'z.psection_id', + 'z.ptype_id', + \DB::raw('SUM(z.zone_standard) as zone_standard'), + \DB::raw('SUM(z.zone_number) as zone_number'), + \DB::raw('SUM(z.zone_tolerance) as zone_tolerance'), + 'ps.psection_subject', + 'pt.ptype_subject' + ) + ->join('ptype as pt', 'z.ptype_id', '=', 'pt.ptype_id') + ->leftJoin('psection as ps', 'z.psection_id', '=', 'ps.psection_id') + ->where('z.park_id', $row->park_id) + ->groupBy('z.park_id', 'z.ptype_id', 'z.psection_id', 'ps.psection_subject', 'pt.ptype_subject') + ->get(); + // ゾーンマスタが0件の場合、次のデータへ + if ($zoneInfo->isEmpty()) { + $form_data[] = [ + 'park_name' => $row->park_name, + 'park_adrs' => $row->park_adrs, + 'price_memo' => $row->price_memo, + 'park_latitude' => $row->park_latitude, + 'park_longitude' => $row->park_longitude, + 'city_name' => $row->city_name, + 'station_neighbor_station' => $row->station_neighbor_station, + 'zone_data' => [] + ]; + continue; + } + // 更新期間内判定 $update_start = $row->update_grace_period_start_date . ' ' . $row->update_grace_period_start_time; $update_end = $row->update_grace_period_end_date . ' ' . $row->update_grace_period_end_time; $is_update_period = ($now >= $update_start && $now <= $update_end); - // ボタン表示有無判定 - $vacant = ($vacantInfo ? $vacantInfo->vacant : 0) - $reservedCount; - if ($vacant > 0 && $is_update_period) { // 定期契約ボタン (空き台数が1台以上かつ更新期間内) - $status = 1; - } elseif ($vacant <= 0 && $is_update_period) { // 空き待ち予約ボタン (空き台数が0台以下かつ更新期間内) - $status = 2; - } elseif ($vacant <= 0 && !$is_update_period) { // 販売期間外ボタン (空き台数が0台以下かつ更新期間外) - $status = 3; - } else { - $status = null; + // ゾーンマスタの件数分だけループする + $zone_data = []; + foreach ($zoneInfo as $zone) { + + // 予約中件数取得 + $reservedCount = \DB::table('reserve') + ->where('park_id', $row->park_id) + ->where('psection_id', $zone->psection_id) + ->where('ptype_id', $zone->ptype_id) + ->where('valid_flag', 1) + ->count(); + + // ステータス(表示ボタン)判定 + $status = 0; // 0:非表示, 1:定期契約, 2:空き待ち予約, 3:販売期間外 + $zone_vacant = $zone->zone_tolerance - $zone->zone_number - $reservedCount; + if ($zone_vacant > 0 && $is_update_period) { // 定期契約ボタン (空き台数が1台以上かつ更新期間内) + $status = 1; + } elseif ($zone_vacant <= 0 && $is_update_period) { // 空き待ち予約ボタン (空き台数が0台以下かつ更新期間内) + $status = 2; + } elseif ($zone_vacant <= 0 && !$is_update_period) { // 販売期間外ボタン (空き台数が0台以下かつ更新期間外) + $status = 3; + } + + // 返却用データに追加 + $zone_data[] = [ + 'psection_subject' => $zone->psection_subject, + 'ptype_subject' => $zone->ptype_subject, + 'zone_standard' => $zone->zone_standard, + 'zone_vacant' => $zone_vacant, + 'status' => $status + ]; } + // $zone_dataを並び替え + usort($zone_data, function($a, $b) { + // 第一優先: ptype_subject昇順 + $ptypeCmp = strcmp($a['ptype_subject'], $b['ptype_subject']); + if ($ptypeCmp !== 0) { + return $ptypeCmp; + } + // 第二優先: psection_subject昇順 + $psectionCmp = strcmp($a['psection_subject'], $b['psection_subject']); + if ($psectionCmp !== 0) { + return $psectionCmp; + } + // 第三優先: status昇順 + return $a['status'] <=> $b['status']; + }); + // 画面返却用データに追加 $form_data[] = [ 'park_name' => $row->park_name, + 'park_adrs' => $row->park_adrs, + 'price_memo' => $row->price_memo, + 'park_latitude' => $row->park_latitude, + 'park_longitude' => $row->park_longitude, 'city_name' => $row->city_name, 'station_neighbor_station' => $row->station_neighbor_station, - 'status' => $status + 'zone_data' => $zone_data ]; } @@ -133,7 +186,10 @@ class ParkingSearchController extends Controller 'わ行'=>'わをんワヲン ' ]; + // 車種区分リスト取得 + $psections = \DB::table('psection')->select('psection_subject')->orderBy('psection_id', 'asc')->limit(4)->get(); + // 情報返却 - return ['form_data' => $form_data, 'cities' => $cities, 'stations' => $stations, 'parks' => $parks, 'conditions' => $conditions]; + return ['form_data' => $form_data, 'conditions' => $conditions, 'cities' => $cities, 'stations' => $stations, 'parks' => $parks, 'psections' => $psections]; } } \ No newline at end of file diff --git a/resources/views/general/swo15_1.blade.php b/resources/views/general/swo15_1.blade.php index 3f3e72e..2a2a30a 100644 --- a/resources/views/general/swo15_1.blade.php +++ b/resources/views/general/swo15_1.blade.php @@ -31,7 +31,7 @@

開示等の依頼の手続き、使用する様式

開示等の依頼は、以下の手続き及び様式に則って実施致します。

利用目的の通知:本書面の“開示対象個人情報の利用目的”をご覧下さい。

-

開示、訂正・削除、利用停止:当社の定める様式にて実施致します。該当の受付け窓口にご連絡頂き、所定の様式『個人情報開示等依頼書(PDF:9KB)』を入手のうえ、手続きをお願い致します。

+

開示、訂正・削除、利用停止:当社の定める様式にて実施致します。該当の受付け窓口にご連絡頂き、所定の様式『個人情報開示等依頼書(PDF:9KB)』を入手のうえ、手続きをお願い致します。

回答に関しては、記入済み個人情報開示等依頼書を、ご自宅への郵送のみとさせて頂きます。

開示対象個人情報の取扱いに関する苦情受付け窓口

開示対象個人情報の取扱いに関する苦情、相談に関しましては、以下の窓口宛てにご連絡ください。

diff --git a/resources/views/general/swo5_1.blade.php b/resources/views/general/swo5_1.blade.php index f323344..98002ca 100644 --- a/resources/views/general/swo5_1.blade.php +++ b/resources/views/general/swo5_1.blade.php @@ -65,10 +65,12 @@ - - - - + + + + @foreach($psections as $psection) + + @endforeach @@ -82,18 +84,39 @@ @endphp @foreach($pagedData as $data) - + - + @foreach($psections as $psection) + + @endforeach @endforeach @@ -133,29 +156,86 @@ @endsection \ No newline at end of file
駐輪場名市町村名駅名駐輪場名市町村名駅名{{ $psection->psection_subject }}
{{ $data['park_name'] }} + + {{ $data['park_name'] }} + + {{ $data['city_name'] }} {{ $data['station_neighbor_station'] }} - @if($data['status'] == 1) - 定期契約 - @elseif($data['status'] == 2) - 空き待ち予約 - @elseif($data['status'] == 3) - 販売期間外 - @endif - + @foreach($data['zone_data'] as $zone) + @if($zone['psection_subject'] == $psection->psection_subject) + @if($zone['status'] == 1) + 定期契約 + @elseif($zone['status'] == 2) + 空き待ち予約 + @elseif($zone['status'] == 3) + 販売期間外 + @endif + @break; + @endif + @endforeach +