145 lines
4.7 KiB
PHP
145 lines
4.7 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Admin;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Illuminate\Http\Request;
|
||
use App\Models\Park;
|
||
use App\Models\PriceA;
|
||
use App\Models\PriceB;
|
||
|
||
class PriceListController extends Controller
|
||
{
|
||
/**
|
||
* 料金一覧表 一覧ページ
|
||
*/
|
||
public function list(Request $request)
|
||
{
|
||
$parkList = Park::orderBy('park_name')->get();
|
||
$parkId = $request->input('park_id', '');
|
||
|
||
$masterList = [
|
||
[
|
||
'name' => 'マスターA',
|
||
'status' => '利用中',
|
||
'groups' => [],
|
||
],
|
||
[
|
||
'name' => 'マスターB',
|
||
'status' => '待作中',
|
||
'groups' => [],
|
||
],
|
||
];
|
||
|
||
if ($parkId) {
|
||
// parkとprice_aをJOIN
|
||
$aRows = \DB::table('price_a')
|
||
->join('park', 'park.park_id', '=', 'price_a.park_id')
|
||
->where('price_a.park_id', $parkId)
|
||
->select('price_a.*') // 必要ならpark.*も
|
||
->get();
|
||
|
||
$aGrouped = $this->groupPriceRows($aRows);
|
||
|
||
$masterList[0]['groups'] = $aGrouped;
|
||
// マスターBも同様に取得・整形する場合はここに追加
|
||
}
|
||
|
||
return view('admin.PriceList.list', [
|
||
'parkList' => $parkList,
|
||
'parkId' => $parkId,
|
||
'masterList' => $masterList,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 料金データを「駐輪分類ID-ユーザ分類ID-駐輪場ID」でグループ化
|
||
*/
|
||
private function groupPriceRows($rows)
|
||
{
|
||
$result = [];
|
||
foreach ($rows as $row) {
|
||
// グループキーは分類ID+ユーザ分類ID+駐輪場ID
|
||
$key = $row->price_ptypeid . '-' . $row->user_categoryid . '-' . $row->park_id;
|
||
|
||
if (!isset($result[$key])) {
|
||
$result[$key] = [
|
||
'id' => $row->price_parkplaceid,
|
||
'classification' => $row->price_ptypeid,
|
||
'room_number' => '', // 必要ならpplace_id等をセット
|
||
'category1' => $row->prine_name ?? '',
|
||
'category2' => '',
|
||
'category3' => '',
|
||
'bike_1m' => '',
|
||
'bike_2m' => '',
|
||
'bike_3m' => '',
|
||
'bike_6m' => '',
|
||
'bike_12m' => '',
|
||
// 必要なら原付・自動二輪も同様に追加
|
||
];
|
||
}
|
||
|
||
// 月数ごとに金額をセット
|
||
if ($row->price_month == 1) {
|
||
$result[$key]['bike_1m'] = $row->price;
|
||
} elseif ($row->price_month == 2) {
|
||
$result[$key]['bike_2m'] = $row->price;
|
||
} elseif ($row->price_month == 3) {
|
||
$result[$key]['bike_3m'] = $row->price;
|
||
} elseif ($row->price_month == 6) {
|
||
$result[$key]['bike_6m'] = $row->price;
|
||
} elseif ($row->price_month == 12) {
|
||
$result[$key]['bike_12m'] = $row->price;
|
||
}
|
||
}
|
||
return array_values($result);
|
||
}
|
||
|
||
public function update(Request $request)
|
||
{
|
||
foreach ($request->input('rows', []) as $row) {
|
||
$id = $row['id'] ?? null;
|
||
if (!$id) continue;
|
||
|
||
// 更新対象の月リスト
|
||
$months = [
|
||
'bike_1m' => 1,
|
||
'bike_2m' => 2,
|
||
'bike_3m' => 3,
|
||
'bike_6m' => 6,
|
||
'bike_12m' => 12,
|
||
];
|
||
|
||
foreach ($months as $field => $month) {
|
||
if (isset($row[$field])) {
|
||
// price_aから該当レコードを取得
|
||
$item = \App\Models\PriceA::where('price_parkplaceid', $id)
|
||
->where('price_month', $month)
|
||
->first();
|
||
if ($item) {
|
||
$item->price = $row[$field];
|
||
$item->save();
|
||
}
|
||
}
|
||
}
|
||
// 原付・自動二輪も同様に必要なら追加
|
||
}
|
||
return back()->with('success', '金額を更新しました');
|
||
}
|
||
|
||
public function insert(Request $request)
|
||
{
|
||
// 例:bike_2m(2ヶ月)だけ新規追加する場合
|
||
if ($request->filled('bike_2m')) {
|
||
$row = new \App\Models\PriceA();
|
||
$row->park_id = $request->input('park_id'); // 必要に応じて
|
||
$row->price = $request->input('bike_2m');
|
||
$row->price_month = 2;
|
||
// 他の必要なカラムもセット
|
||
$row->save();
|
||
}
|
||
// 他の月も同様に必要なら追加
|
||
return back()->with('success', '金額を追加しました');
|
||
}
|
||
}
|