9/19 マージ
All checks were successful
Deploy preview (main_watanabe) / deploy (push) Successful in 14s

This commit is contained in:
Yu Watanabe 2025-09-19 14:32:44 +09:00
parent 32cd4f873c
commit de257704ab
4 changed files with 163 additions and 173 deletions

View File

@ -15,7 +15,7 @@ class LoginController extends Controller
public function login(Request $request)
{
// ID・パスワードチェック
$existingMember = User::where('user_primemail', $request->input('login_id'))->first();
$existingMember = User::where('user_primemail', $request->input('login_id'))->where('user_quit_flag', 0)->first();
if (!$existingMember || !CommonFunction::verifyPassword($existingMember->user_seq, $request->input('password'), $existingMember->user_pass)) {
return redirect('swo8_1')
->withErrors(['login' => 'ID/パスワードが間違っています'])

View File

@ -11,6 +11,25 @@ class ParkingSearchController extends Controller
{
// 初期表示
public function index()
{
$result = $this->getParkData('', '', '');
return view('general.swo5_1', $result);
}
// プルダウン選択
public function search(Request $request)
{
$result = $this->getParkData(
$request->input('conditions_city'),
$request->input('conditions_station'),
$request->input('conditions_park')
);
return view('general.swo5_1', $result);
}
// 検索処理
public function getParkData($city_name, $station_neighbor_station, $park_name)
{
// 検索仕様
// 駐輪場マスタの全件(条件を絞った場合はその条件に一致するもの)を取得。
@ -21,27 +40,39 @@ class ParkingSearchController extends Controller
$park = \DB::table('park as p')
->select(
'p.park_name',
'p.park_adrs',
'p.price_memo',
'p.park_latitude',
'p.park_longitude',
'p.update_grace_period_start_date',
'p.update_grace_period_start_time',
'p.update_grace_period_end_date',
'p.update_grace_period_end_time',
'c.city_name',
's.station_neighbor_station',
'z.psection_id'
'z.psection_id',
'z.zone_standard'
)
->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')
//->where('p.park_name', 'a')
//->where('c.city_name', 'b')
//->where('s.station_neighbor_station', 'c')
->orderBy('p.park_ruby')
->get();
->leftJoin('zone as z', 'p.park_id', '=', 'z.park_id');
// プルダウン指定の条件でwhere句を付与
if (!empty($city_name)) {
$park = $park->where('c.city_name', $city_name);
}
if (!empty($station_neighbor_station)) {
$park = $park->where('s.station_neighbor_station', $station_neighbor_station);
}
if (!empty($park_name)) {
$park = $park->whereRaw("LEFT(p.park_ruby, 1) REGEXP '^[".$park_name."]'");
}
$park = $park->orderBy('p.park_ruby')->get();
// 各マスタから追加情報を取得し、各ボタンの表示有無を判定する
$result = [];
$form_data = [];
$now = date('Y-m-d H:i:s');
foreach ($park as $row) {
@ -58,27 +89,25 @@ class ParkingSearchController extends Controller
->where('valid_flag', 1)
->count();
// 空き台数を計算
$vacant = ($vacantInfo ? $vacantInfo->vacant : 0) - $reservedCount;
// 更新期間内判定
$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);
// ボタン表示有無判定
if ($vacant > 0 && $is_update_period) { // 定期契約ボタン (空き台数が1台以上かつ更新期間内)
$vacant = ($vacantInfo ? $vacantInfo->vacant : 0) - $reservedCount;
if ($vacant > 0 && $is_update_period) { // 定期契約ボタン (空き台数が1台以上かつ更新期間内)
$status = 1;
} elseif ($vacant <= 0 && $is_update_period) { // 当日予約ボタン (空き台数が0台以下かつ更新期間内)
} elseif ($vacant <= 0 && $is_update_period) { // 空き待ち予約ボタン (空き台数が0台以下かつ更新期間内)
$status = 2;
} elseif ($vacant <= 0 && !$is_update_period) { // 販売期間外ボタン (空き台数が0台以下かつ更新期間外)
} elseif ($vacant <= 0 && !$is_update_period) { // 販売期間外ボタン (空き台数が0台以下かつ更新期間外)
$status = 3;
} else {
$status = null;
}
// 画面返却用データに追加
$result[] = [
$form_data[] = [
'park_name' => $row->park_name,
'city_name' => $row->city_name,
'station_neighbor_station' => $row->station_neighbor_station,
@ -86,12 +115,25 @@ class ParkingSearchController extends Controller
];
}
// 検索用プルダウン取得
$cities = \DB::table('city')->select('city_name')->orderBy('city_ruby')->get();
// プルダウン用データ取得
$conditions = [$city_name, $station_neighbor_station, $park_name];
$cities = \DB::table('city')->select('city_name')->orderBy('city_id')->get();
$stations = \DB::table('station')->select('station_neighbor_station')->distinct()->orderBy('station_neighbor_station')->get();
$parkings = ['全て', 'あ行', 'か行', 'さ行', 'た行', 'な行', 'は行', 'ま行', 'や行', 'ら行', 'わ行'];
// 検索結果返却
return view('general.swo5_1',['form_data' => $result, 'cities' => $cities, 'stations' => $stations, 'parkings' => $parkings]);
$parks = [
'全て'=>'',
'あ行'=>'あいうえおアイウエオ',
'か行'=>'かきくけこがぎぐげごカキクケコガギグゲゴ',
'さ行'=>'さしすせそざじずぜぞサシスセソザジズゼゾ',
'た行'=>'たちつてとだぢづでどタチツテトダヂヅデド',
'な行'=>'なにぬねのナニヌネノ',
'は行'=>'はひふへほばびぶべぼぱぴぷぺぽハヒフヘホバビブベボパピプペポ',
'ま行'=>'まみむめもマミムメモ',
'や行'=>'やゆよヤユヨ',
'ら行'=>'らりるれろラリルレロ',
'わ行'=>'わをんワヲン '
];
// 情報返却
return ['form_data' => $form_data, 'cities' => $cities, 'stations' => $stations, 'parks' => $parks, 'conditions' => $conditions];
}
}

View File

@ -9,50 +9,58 @@
<h5 class="card-title text-success">駐輪場をお選びください。</h5>
</div>
<div class="card-body">
<form class="row form">
<form class="row form" method="post" action="{{ route('swo5_2') }}">
<div class="w-100 alert alert-success">
<h6><a class="text-success" data-toggle="collapse" href="#search-option" role="button" aria-expanded="false" aria-controls="search-option">絞込み条件を追加する</a></h6>
<div class="collapse row" id="search-option">
<div class="col-3">市町村名</div>
<div class="col-9 mb10">
<select class="form-control form-control-lg">
<option>市町村を選択してください</option>
<option>〇〇市</option>
<option>〇〇市</option>
<option>〇〇市</option>
<option>〇〇市</option>
<option>〇〇市</option>
<select class="form-control form-control-lg" name="conditions_city">
<option value="">市町村を選択してください</option>
@foreach($cities as $city)
@if(isset($conditions) && $conditions[0] == $city->city_name) {
<option value="{{ $city->city_name }}" selected>{{ $city->city_name }}</option>
@else
<option value="{{ $city->city_name }}">{{ $city->city_name }}</option>
@endif
@endforeach
</select>
</div>
<div class="col-3">駅名</div>
<div class="col-9 mb10">
<select class="form-control form-control-lg">
<option>駅名を選択してください</option>
<option>〇〇駅</option>
<option>〇〇駅</option>
<option>〇〇駅</option>
<option>〇〇駅</option>
<option>〇〇駅</option>
<select class="form-control form-control-lg" name="conditions_station">
<option value="">駅名を選択してください</option>
@foreach($stations as $station)
@if(isset($conditions) && $conditions[1] == $station->station_neighbor_station) {
<option value="{{ $station->station_neighbor_station }}" selected>{{ $station->station_neighbor_station }}</option>
@else
<option value="{{ $station->station_neighbor_station }}">{{ $station->station_neighbor_station }}</option>
@endif
@endforeach
</select>
</div>
<div class="col-3">駐車場名</div>
<div class="col-9 mb10">
<select class="form-control form-control-lg">
<option>全て</option>
<option>あ行</option>
<option>か行</option>
<option>さ行</option>
<option>た行</option>
<option>な行</option>
<option>は行</option>
<option>ま行</option>
<option>や行</option>
<option>ら行</option>
<option>わ行</option>
<select class="form-control form-control-lg" name="conditions_park">
@foreach($parks as $key => $value)
@if(isset($conditions) && $conditions[2] == $value) {
<option value="{{ $value }}" selected>{{ $key }}</option>
@else
<option value="{{ $value }}">{{ $key }}</option>
@endif
@endforeach
</select>
</div>
</div>
</div>
<script>
$(function() {
$('select[name="conditions_city"], select[name="conditions_station"], select[name="conditions_park"]').on('change', function() {
$(this).closest('form').submit();
});
});
</script>
@csrf
</form>
<table id="searchTable" class="tablesorter table table-striped">
<thead>
@ -64,85 +72,54 @@
</tr>
</thead>
<tbody>
@php
$perPage = 10;
$page = request()->get('page', 1);
$total = count($form_data);
$start = ($page - 1) * $perPage;
$pagedData = array_slice($form_data, $start, $perPage);
$lastPage = ceil($total / $perPage);
@endphp
@foreach($pagedData as $data)
<tr>
<td><a href="#placeModal01" data-toggle="modal" data-target="#placeModal01">あマルバツ駐輪場A</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="./SWC-08-02.html" class="btn btn-block btn-sm btn-outline-success">定期契約</a></td>
</tr>
<tr>
<td><a href="#placeModal02" data-toggle="modal" data-target="#placeModal02">かマルバツ駐輪場B</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="#" class="btn btn-block btn-sm btn-outline-danger">空き待ち申込</a></td>
</tr>
<tr>
<td><a href="#placeModal01" data-toggle="modal" data-target="#placeModal01">あマルバツ駐輪場A</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="./SWC-08-02.html" class="btn btn-block btn-sm btn-outline-success">定期契約</a></td>
</tr>
<tr>
<td><a href="#placeModal02" data-toggle="modal" data-target="#placeModal02">かマルバツ駐輪場B</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="#" class="btn btn-block btn-sm btn-outline-danger">空き待ち申込</a></td>
</tr>
<tr>
<td><a href="#placeModal01" data-toggle="modal" data-target="#placeModal01">あマルバツ駐輪場A</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="./SWC-08-02.html" class="btn btn-block btn-sm btn-outline-success">定期契約</a></td>
</tr>
<tr>
<td><a href="#placeModal02" data-toggle="modal" data-target="#placeModal02">かマルバツ駐輪場B</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="#" class="btn btn-block btn-sm btn-outline-danger">空き待ち申込</a></td>
</tr>
<tr>
<td><a href="#placeModal01" data-toggle="modal" data-target="#placeModal01">あマルバツ駐輪場A</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="./SWC-08-02.html" class="btn btn-block btn-sm btn-outline-success">定期契約</a></td>
</tr>
<tr>
<td><a href="#placeModal02" data-toggle="modal" data-target="#placeModal02">かマルバツ駐輪場B</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="#" class="btn btn-block btn-sm btn-outline-danger">空き待ち申込</a></td>
</tr>
<tr>
<td><a href="#placeModal01" data-toggle="modal" data-target="#placeModal01">あマルバツ駐輪場A</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="./SWC-08-02.html" class="btn btn-block btn-sm btn-outline-success">定期契約</a></td>
</tr>
<tr>
<td><a href="#placeModal02" data-toggle="modal" data-target="#placeModal02">かマルバツ駐輪場B</a></td>
<td>〇〇市</td>
<td>〇〇駅</td>
<td><a href="#" class="btn btn-block btn-sm btn-outline-danger">空き待ち申込</a></td>
</tr>
<td><a href="#placeModal" data-toggle="modal" data-target="#placeModal">{{ $data['park_name'] }}</a></td>
<td>{{ $data['city_name'] }}</td>
<td>{{ $data['station_neighbor_station'] }}</td>
<td>
@if($data['status'] == 1)
<a href="{{route('user.info')}}" class="btn btn-block btn-sm btn-outline-success">定期契約</a>
@elseif($data['status'] == 2)
<a href="{{route('park_waitlist.index')}}" class="btn btn-block btn-sm btn-outline-primary">空き待ち予約</a>
@elseif($data['status'] == 3)
<a href="{{route('park_waitlist.index')}}" class="btn btn-block btn-sm btn-secondary">販売期間外</a>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
<nav aria-label="searchTable-pager">
<ul class="pagination justify-content-center">
<li class="page-item">
<a class="page-link text-success" href="#" aria-label="">
<span aria-hidden="true">&laquo;</span>
<span class="sr-only"></span>
</a>
</li>
<li class="page-item"><a class="page-link text-success" href="#">1</a></li>
<li class="page-item"><a class="page-link text-success" href="#">2</a></li>
<li class="page-item"><a class="page-link text-success" href="#">3</a></li>
<li class="page-item">
<a class="page-link text-success" href="#" aria-label="">
<span aria-hidden="true">&raquo;</span>
<span class="sr-only"></span>
</a>
</li>
@if($lastPage > 1)
{{-- 前へ --}}
<li class="page-item {{ $page == 1 ? 'disabled' : '' }}">
<a class="page-link text-success" href="?page={{ $page - 1 }}" aria-label="">
<span aria-hidden="true">&laquo;</span><span class="sr-only"></span>
</a>
</li>
{{-- ページ番号 --}}
@for($i = 1; $i <= $lastPage; $i++)
<li class="page-item {{ $page == $i ? 'active' : '' }}">
<a class="page-link text-success" href="?page={{ $i }}">{{ $i }}</a>
</li>
@endfor
{{-- 次へ --}}
<li class="page-item {{ $page == $lastPage ? 'disabled' : '' }}">
<a class="page-link text-success" href="?page={{ $page + 1 }}" aria-label="">
<span aria-hidden="true">&raquo;</span><span class="sr-only"></span>
</a>
</li>
@endif
</ul>
</nav>
</div>
@ -151,64 +128,34 @@
</div>
</section>
</main>
<div class="modal fade" id="placeModal01" tabindex="-1" role="dialog" aria-hidden="true">
<!-- Modal -->
<div class="modal fade" id="placeModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">あマルバツ駐輪場A</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="閉じる">
<span aria-hidden="true">&times;</span>
</button>
<h5 class="modal-title" id="modalParkName">駐輪場名</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="閉じる"><span aria-hidden="true">&times;</span></button>
</div>
<script>
$(function() {
$('#placeModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
var parkName = button.text();
$('#modalParkName').text(parkName);
});
});
</script>
<div class="modal-body">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3240.722943699139!2d139.75162621525894!3d35.68382338019366!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188c0b185b3b75%3A0x3282e79fbc91959c!2z44CSMTAwLTAwMDEg5p2x5Lqs6YO95Y2D5Luj55Sw5Yy65Y2D5Luj55Sw77yR4oiS77yR!5e0!3m2!1sja!2sjp!4v1536695351221" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
<p class="small">
〒000-0000 東京都千代田区1-1 <br class="sp">
標準収容台数XXX台
</p>
<p class="text-danger">
空き台数XXX台
</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success" onClick="location.href='./SWC-08-02.html'">定期契約</button>
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">閉じる</button>
<p class="small">〒000-0000 東京都千代田区1-1 <br class="sp">標準収容台数XXX台</p>
<p class="text-danger">空き台数XXX台</p>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success" onClick="location.href='./SWC-08-02.html'">定期契約</button>
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">閉じる</button>
</div>
</div>
</div>
<div class="modal fade" id="placeModal02" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">かマルバツ駐輪場B</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="閉じる">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3240.722943699139!2d139.75162621525894!3d35.68382338019366!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188c0b185b3b75%3A0x3282e79fbc91959c!2z44CSMTAwLTAwMDEg5p2x5Lqs6YO95Y2D5Luj55Sw5Yy65Y2D5Luj55Sw77yR4oiS77yR!5e0!3m2!1sja!2sjp!4v1536695351221" width="100%" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
<p class="small">
〒000-0000 東京都千代田区1-1 <br class="sp">
標準収容台数XXX台
</p>
<p class="text-danger">
空き待ち
</p>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-danger">空き待ち申込</button>
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">閉じる</button>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script>window.jQuery || document.write('<script src="./assets/js/vendor/jquery.min.js"><\/script>')</script>
<script src="./assets/js/vendor/popper.min.js"></script>
<script src="./bootstrap/js/bootstrap.min.js"></script>
<script src="./assets/js/ie10-viewport-bug-workaround.js"></script>
<script src="./assets/js/commons.js"></script>
<script src="./assets/js/vendor/jquery.tablesorter/jquery.tablesorter.min.js" type="text/javascript"></script>
<script type="text/javascript">$(document).ready(function() { $("#sampleTable").tablesorter();} ); </script>
@endsection

View File

@ -55,6 +55,7 @@ Route::post('/swo2_4', [MemberRegistrationController::class, 'confirm'])->name('
Route::post('/swo2_5', [MemberRegistrationController::class, 'complete'])->name('swo2_5');
Route::get('/swo4_1', [LoginController::class, 'login'])->name('swo4_1');
Route::get('/swo5_1', [ParkingSearchController::class, 'index'])->name('swo5_1');
Route::post('/swo5_2', [ParkingSearchController::class, 'search'])->name('swo5_2');
Route::get('/swo7_1', [InquiryConfirmController::class, 'index'])->name('swo7_1');
Route::post('/swo7_2',[InquiryConfirmController::class, 'confirm'])->name('swo7_2');
Route::post('/swo7_3',[InquiryConfirmController::class, 'complete'])->name('swo7_3');