88 lines
3.4 KiB
PHP
88 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ParkDetailController extends Controller
|
|
{
|
|
public function show($park_id)
|
|
{
|
|
$park = DB::table('park')->where('park_id', $park_id)->first();
|
|
Log::debug('park:', (array)$park);
|
|
$zones = DB::table('zone')
|
|
->leftJoin('psection', 'zone.psection_id', '=', 'psection.psection_id')
|
|
->leftJoin('ptype', 'zone.ptype_id', '=', 'ptype.ptype_id')
|
|
->select('zone.*', 'psection.psection_subject', 'ptype.ptype_subject')
|
|
->where('zone.park_id', $park_id)
|
|
->get();
|
|
Log::debug('zones:', $zones->toArray());
|
|
$reserves = DB::table('reserve')
|
|
->join('zone', function ($join) {
|
|
$join->on('reserve.psection_id', '=', 'zone.psection_id')
|
|
->on('reserve.ptype_id', '=', 'zone.ptype_id');
|
|
})
|
|
->join('ptype', 'zone.ptype_id', '=', 'ptype.ptype_id')
|
|
->where('reserve.park_id', $park_id)
|
|
->where('reserve.valid_flag', 1)
|
|
->select('reserve.*', 'ptype.ptype_subject')
|
|
->get();
|
|
Log::debug('reserves:', $reserves->toArray());
|
|
|
|
$zoneStandardSum = [];
|
|
/*foreach ($zones as $zone) {
|
|
$psectionId = $zone->psection_id;
|
|
if (!isset($zoneStandardSum[$psectionId])) {
|
|
$zoneStandardSum[$psectionId] = 0;
|
|
}
|
|
$zoneStandardSum[$psectionId] += $zone->zone_standard;
|
|
}*/
|
|
$zoneStandardSum = [];
|
|
foreach ($zones as $zone) {
|
|
$key = $zone->psection_subject; // 「自転車」「原付」など
|
|
if (!isset($zoneStandardSum[$key])) {
|
|
$zoneStandardSum[$key] = 0;
|
|
}
|
|
$zoneStandardSum[$key] += $zone->zone_standard;
|
|
}
|
|
Log::debug('zoneStandardSum:', $zoneStandardSum);
|
|
|
|
// 空き台数集計用配列
|
|
$vacancyData = [];
|
|
foreach ($zones as $zone) {
|
|
$key = $zone->psection_id . '_' . $zone->ptype_subject;
|
|
if (!isset($vacancyData[$key])) {
|
|
$vacancyData[$key] = 0;
|
|
}
|
|
// zone_tolerance - zone_number を合計
|
|
$vacancyData[$key] += ($zone->zone_tolerance - $zone->zone_number);
|
|
}
|
|
Log::debug('vacancyData:', $vacancyData);
|
|
|
|
// reserve件数分を減算
|
|
foreach ($reserves as $reserve) {
|
|
$key = $reserve->psection_id . '_' . $reserve->ptype_subject;
|
|
if (isset($vacancyData[$key])) {
|
|
$vacancyData[$key] -= 1; // 1件分減算
|
|
}
|
|
}
|
|
|
|
// 更新期間取得
|
|
$city_grace_periods = DB::table('city')
|
|
->select('city_id', 'update_grace_period_start_date', 'update_grace_period_start_time', 'update_grace_period_end_date', 'update_grace_period_end_time')
|
|
->whereIn('city_id', function ($query) {
|
|
$query->select('city_id')->from('park');
|
|
})
|
|
->get()
|
|
->keyBy('city_id');
|
|
Log::debug('city_grace_periods:', $city_grace_periods->toArray());
|
|
|
|
// 必要なら他テーブルJOINや追加情報も取得
|
|
return response()->json([
|
|
'html' => view('regular_contract.park_detail', compact('park', 'zones', 'reserves', 'zoneStandardSum', 'vacancyData', 'city_grace_periods'))->render()
|
|
]);
|
|
}
|
|
}
|