diff --git a/app/Http/Controllers/Admin/InformationController.php b/app/Http/Controllers/Admin/InformationController.php
new file mode 100644
index 0000000..432689d
--- /dev/null
+++ b/app/Http/Controllers/Admin/InformationController.php
@@ -0,0 +1,44 @@
+input('period', 'month'); // デフォルト: 最新1ヵ月
+
+ $query = DB::table('bat_job_log')
+ ->leftJoin('device', 'bat_job_log.device_id', '=', 'device.device_id')
+ ->select(
+ 'bat_job_log.job_log_id',
+ 'bat_job_log.process_name',
+ 'bat_job_log.job_name',
+ 'bat_job_log.device_id',
+ 'device.park_id',
+ 'bat_job_log.status_comment',
+ 'bat_job_log.status',
+ 'bat_job_log.status_comment as comment',
+ 'bat_job_log.created_at',
+ 'bat_job_log.updated_at'
+ );
+
+ // 期間フィルター
+ if ($period === 'month') {
+ $query->where('bat_job_log.updated_at', '>=', now()->subMonth());
+ }
+ // 'all'の場合はフィルターなし
+
+ $jobs = $query->orderByDesc('bat_job_log.job_log_id')->limit(50)->get();
+
+ return view('admin.information.list', [
+ 'jobs' => $jobs,
+ 'period' => $period,
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Admin/OpesController.php b/app/Http/Controllers/Admin/OpesController.php
new file mode 100644
index 0000000..f9e182b
--- /dev/null
+++ b/app/Http/Controllers/Admin/OpesController.php
@@ -0,0 +1,230 @@
+filled('user_id')) {
+ $query->where('user_id', $request->input('user_id'));
+ }
+
+ $users = $query->paginate(20);
+
+ return view('admin.personal.list', [
+ 'users' => $users,
+ 'request' => $request,
+ ]);
+ }
+
+ /**
+ * 本人確認手動処理 編集画面
+ */
+ public function edit(Request $request, $id)
+ {
+ // 利用者情報取得
+ $user = User::where('user_id', $id)->firstOrFail();
+
+ // 利用者分類マスタ取得(ラジオボタン用)
+ $usertypes = Usertype::orderBy('sort_order')->get();
+
+ // POST時の処理
+ if ($request->isMethod('post')) {
+ // 利用者分類IDの更新
+ $user->user_categoryid = $request->input('user_categoryid', $user->user_categoryid);
+
+ // 本人確認チェックOK/NG
+ if ($request->input('check') === 'ok') {
+ $user->user_idcard_chk_flag = 1;
+ } elseif ($request->input('check') === 'ng') {
+ $user->user_idcard_chk_flag = 0;
+ // 備考欄も更新(NG理由)
+ $user->user_remarks = $request->input('user_remarks', $user->user_remarks);
+ }
+
+ $user->save();
+
+ return redirect()->route('personal')->with('success', '更新しました');
+ }
+
+ return view('admin.personal.edit', [
+ 'user' => $user,
+ 'usertypes' => $usertypes,
+ ]);
+ }
+}
+
+class OpesController extends Controller
+{
+ /**
+ * オペレータ一覧画面
+ */
+ public function list(Request $request)
+ {
+ $sort = $request->input('sort', 'ope_id'); // デフォルト値を設定
+ $sort_type = $request->input('sort_type', 'asc'); // デフォルト値を設定
+
+ $query = Ope::query();
+
+ // 並び替え
+ $query->orderBy($sort, $sort_type);
+
+ $list = $query->paginate(20);
+
+ return view('admin.opes.list', [
+ 'list' => $list,
+ 'sort' => $sort,
+ 'sort_type' => $sort_type,
+ 'request' => $request,
+ ]);
+ }
+
+ /**
+ * オペレータ編集画面
+ */
+ public function edit(Request $request, $id)
+ {
+ $ope = \App\Models\Ope::findOrFail($id);
+
+ if ($request->isMethod('post')) {
+ // バリデーション&更新処理
+ // ...
+ }
+
+ // 各項目を配列で渡す
+ return view('admin.opes.edit', [
+ 'ope_id' => $ope->ope_id,
+ 'ope_name' => $ope->ope_name,
+ 'login_id' => $ope->login_id,
+ 'ope_pass' => '', // パスワードは空で
+ 'ope_belong' => $ope->ope_belong,
+ 'ope_type' => $ope->ope_type,
+ 'ope_mail' => $ope->ope_mail,
+ 'ope_phone' => $ope->ope_phone,
+ 'ope_sendalart_que1' => $ope->ope_sendalart_que1,
+ 'ope_sendalart_que2' => $ope->ope_sendalart_que2,
+ 'ope_sendalart_que3' => $ope->ope_sendalart_que3,
+ 'ope_sendalart_que4' => $ope->ope_sendalart_que4,
+ 'ope_sendalart_que5' => $ope->ope_sendalart_que5,
+ 'ope_sendalart_que6' => $ope->ope_sendalart_que6,
+ 'ope_sendalart_que7' => $ope->ope_sendalart_que7,
+ 'ope_sendalart_que8' => $ope->ope_sendalart_que8,
+ 'ope_sendalart_que9' => $ope->ope_sendalart_que9,
+ 'ope_sendalart_que10' => $ope->ope_sendalart_que10,
+ 'ope_sendalart_que11' => $ope->ope_sendalart_que11,
+ 'ope_sendalart_que12' => $ope->ope_sendalart_que12,
+ 'ope_sendalart_que13' => $ope->ope_sendalart_que13,
+ 'ope_auth1' => $ope->ope_auth1,
+ 'ope_auth2' => $ope->ope_auth2,
+ 'ope_auth3' => $ope->ope_auth3,
+ 'ope_auth4' => $ope->ope_auth4,
+ 'ope_quit_flag' => $ope->ope_quit_flag,
+ 'ope_quitday' => $ope->ope_quitday,
+ ]);
+ }
+
+ /**
+ * オペレータ一覧のエクスポート
+ */
+ public function export(Request $request)
+ {
+ $filename = 'ope_export_' . date('Ymd_His') . '.csv';
+ $columns = [
+ 'ope_id', 'ope_belong', 'login_id', 'ope_name', 'ope_pass', 'ope_type', 'ope_mail', 'ope_phone',
+ 'ope_sendalart_que1', 'ope_sendalart_que2', 'ope_sendalart_que3', 'ope_sendalart_que4', 'ope_sendalart_que5',
+ 'ope_sendalart_que6', 'ope_sendalart_que7', 'ope_sendalart_que8', 'ope_sendalart_que9', 'ope_sendalart_que10',
+ 'ope_sendalart_que11', 'ope_sendalart_que12', 'ope_sendalart_que13',
+ 'ope_auth1', 'ope_auth2', 'ope_auth3', 'ope_auth4',
+ 'ope_quit_flag', 'ope_quitday', 'created_at', 'updated_at'
+ ];
+
+ $ids = $request->input('pk', []);
+ if (!empty($ids)) {
+ $list = \App\Models\Ope::whereIn('ope_id', $ids)->select($columns)->get();
+ } else {
+ $list = \App\Models\Ope::select($columns)->get();
+ }
+
+ $callback = function() use ($list, $columns) {
+ $file = fopen('php://output', 'w');
+ // ヘッダー
+ fputcsv($file, $columns);
+
+ foreach ($list as $row) {
+ $data = [];
+ foreach ($columns as $col) {
+ $data[] = $row->$col;
+ }
+ fputcsv($file, $data);
+ }
+ fclose($file);
+ };
+
+ return response()->stream($callback, 200, [
+ "Content-Type" => "text/csv",
+ "Content-Disposition" => "attachment; filename={$filename}",
+ ]);
+ }
+
+ /**
+ * オペレータの削除
+ */
+ public function delete(Request $request)
+ {
+ // チェックされたIDの配列を受け取る想定
+ $ids = $request->input('pk', []);
+ if (!empty($ids)) {
+ \App\Models\Ope::whereIn('ope_id', $ids)->delete();
+ return redirect()->route('opes')->with('success', '削除しました');
+ }
+ return redirect()->route('opes')->with('error', '削除対象が選択されていません');
+ }
+
+ /**
+ * オペレータの追加
+ */
+ public function add(Request $request)
+ {
+ if ($request->isMethod('post')) {
+ $validated = $request->validate([
+ 'ope_name' => 'required|string|max:255',
+ 'login_id' => 'required|string|max:255|unique:ope,login_id',
+ 'password' => 'required|string|min:6|confirmed',
+ 'ope_type' => 'required',
+ 'ope_mail' => 'required|email',
+ ]);
+ $ope = new \App\Models\Ope();
+ $ope->ope_name = $request->ope_name;
+ $ope->login_id = $request->login_id;
+ $ope->ope_pass = bcrypt($request->password);
+ $ope->ope_type = $request->ope_type;
+ $ope->ope_mail = $request->ope_mail;
+ $ope->ope_phone = $request->ope_phone;
+ for ($i = 1; $i <= 13; $i++) {
+ $field = "ope_sendalart_que{$i}";
+ $ope->$field = $request->$field ?? 0;
+ }
+ for ($i = 1; $i <= 4; $i++) {
+ $field = "ope_auth{$i}";
+ $ope->$field = $request->$field ?? '';
+ }
+ $ope->ope_quit_flag = $request->ope_quit_flag ?? 0;
+ $ope->ope_quitday = $request->ope_quitday ?? null;
+ $ope->save();
+ return redirect()->route('opes')->with('success', '登録しました');
+ }
+ return view('admin.opes.add');
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Admin/ParkController.php b/app/Http/Controllers/Admin/ParkController.php
index 7a175fb..e3b2e88 100644
--- a/app/Http/Controllers/Admin/ParkController.php
+++ b/app/Http/Controllers/Admin/ParkController.php
@@ -44,10 +44,12 @@ class ParkController extends Controller
$query->orderBy('p.park_id', 'asc');
}
- $parks = $query->paginate(20);
- $cities = \DB::table('city')->orderBy('city_id')->get();
+ $parks = $query->paginate(20);
+ $cities = \DB::table('city')->orderBy('city_id')->get();
- return view('admin.parks.list', compact('parks', 'cities'));
+ $sort = $request->input('sort', 'p.park_id');
+ $sort_type = $request->input('sort_type', 'asc');
+ return view('admin.parks.list', compact('parks', 'cities', 'sort', 'sort_type'));
}
public function add(Request $request)
@@ -77,14 +79,14 @@ class ParkController extends Controller
public function edit(Request $request, $pk, $view = '')
{
- $park = Park::getByPk($pk);
+ $park = Park::find($pk);
if (empty($pk) || empty($park)) {
abort('404');
}
$data = $park->getAttributes();
$dataList = $this->getDataDropList();
$data = array_merge($data, $dataList);
- if ($request->isMethod('POST')) {
+ if ($request->isMethod('POST') || $request->isMethod('PUT')) {
// ここをaddと同じバリデーションに変更
$validated = $request->validate([
'city_id' => 'required|integer',
@@ -114,7 +116,7 @@ class ParkController extends Controller
{
$arr_pk = $request->get('pk');
if ($arr_pk) {
- if (Park::deleteByPk($arr_pk)) {
+ if (Park::destroy($arr_pk)) {
return redirect()->route('parks')->with('success', __("削除が完了しました。"));
} else {
return redirect()->route('parks')->with('error', __('削除に失敗しました。'));
@@ -153,7 +155,23 @@ class ParkController extends Controller
];
- $dataExport = Park::search($inputs);
+ $dataExport = \DB::table('park as p')
+ ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id')
+ ->select([
+ 'p.park_id',
+ 'c.city_name',
+ 'p.park_name',
+ 'p.park_ruby',
+ 'p.park_syllabary',
+ 'p.park_adrs',
+ 'p.park_close_flag',
+ 'p.park_day',
+ 'p.alert_flag',
+ 'p.print_number',
+ 'p.keep_alive',
+ ])
+ ->orderBy('p.park_id', 'asc')
+ ->get();
$columns = array(
__('駐輪場ID '),// 0
__('市区ID'),// 1
@@ -177,14 +195,14 @@ class ParkController extends Controller
$file,
array(
$items->park_id,// 0
- $items->city_id,// 1
- !empty($items->getCity()) ? $items->getCity()->city_name : "",// 2
+ null, // city_id(selectで取得していないので空欄)
+ $items->city_name ?? '',// 2
$items->park_name, // 3
$items->park_ruby, // 4
$items->park_syllabary, // 5
$items->park_adrs, // 6
$items->park_close_flag,// 7
- $items->getParkCloseFlagDisplay(),// 8
+ ($items->park_close_flag == 1 ? '閉設' : '開設'),// 8
$items->park_day,// 9
$items->alert_flag,// 10
$items->print_number,// 11
diff --git a/app/Http/Controllers/Admin/PersonalController.php b/app/Http/Controllers/Admin/PersonalController.php
new file mode 100644
index 0000000..72641d5
--- /dev/null
+++ b/app/Http/Controllers/Admin/PersonalController.php
@@ -0,0 +1,66 @@
+filled('user_id')) {
+ $query->where('user_id', $request->input('user_id'));
+ }
+
+ $users = $query->paginate(20);
+
+ return view('admin.personal.list', [
+ 'users' => $users,
+ 'request' => $request,
+ ]);
+ }
+
+ /**
+ * 本人確認手動処理 編集画面
+ */
+ public function edit(Request $request, $id)
+ {
+ // 利用者情報取得
+ $user = User::where('user_id', $id)->firstOrFail();
+
+ // 利用者分類マスタ取得(ラジオボタン用)
+ $usertypes = Usertype::orderBy('sort_order')->get();
+
+ // POST時の処理
+ if ($request->isMethod('post')) {
+ // 利用者分類IDの更新
+ $user->user_categoryid = $request->input('user_categoryid', $user->user_categoryid);
+
+ // 本人確認チェックOK/NG
+ if ($request->input('check') === 'ok') {
+ $user->user_idcard_chk_flag = 1;
+ } elseif ($request->input('check') === 'ng') {
+ $user->user_idcard_chk_flag = 0;
+ // 備考欄も更新(NG理由)
+ $user->user_remarks = $request->input('user_remarks', $user->user_remarks);
+ }
+
+ $user->save();
+
+ return redirect()->route('personal')->with('success', '更新しました');
+ }
+
+ return view('admin.personal.edit', [
+ 'user' => $user,
+ 'usertypes' => $usertypes,
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Admin/PriceController.php b/app/Http/Controllers/Admin/PriceController.php
index 81f9cc1..f7a7d25 100644
--- a/app/Http/Controllers/Admin/PriceController.php
+++ b/app/Http/Controllers/Admin/PriceController.php
@@ -36,40 +36,33 @@ class PriceController extends Controller
public function add(Request $request)
{
$inputs = [
+ 'price_parkplaceid' => $request->input('price_parkplaceid'), // 駐車場所ID
+ 'park_id' => $request->input('park_id'), // 駐輪場ID
'prine_name' => $request->input('prine_name'), // 商品名
'price_month' => $request->input('price_month',''), // 期間
- 'park_id' => $request->input('park_name'), // 駐輪場
- 'psection_id' => $request->input('psection_subject'), // 車種区分
- 'price_ptypeid' => $request->input('ptype_subject'), // 駐輪分類
- 'user_categoryid' => $request->input('user_category_name'), // 利用者分類
- 'pplace_id' => $request->input('pplace_id'), // 駐車車室
+ 'user_categoryid' => $request->input('user_categoryid'), // 利用者分類ID
'price' => $request->input('price'), // 駐輪料金(税込)
+ 'psection_id' => $request->input('psection_id'), // 車種区分ID
+ 'price_ptypeid' => $request->input('price_ptypeid'), // 駐輪分類ID
+ 'pplace_id' => $request->input('pplace_id'), // 駐車車室ID
];
$dataList = $this->getDataDropList();
$inputs = array_merge($inputs, $dataList);
if ($request->isMethod('POST')) {
$type = false;
- $validation = new PriceRequest();
- $rules = $validation->rules();
- $validator = Validator::make($request->all(), $rules, $validation->messages());
- if (!$validator->fails()) {
- \DB::transaction(function () use ($inputs, &$type) {
- $new = new Price();
- $new->fill($inputs);
- if( $new->save()){
- $type = true;
- }
-
- });
- if ($type) {
- $request->session()->flash('success', __('新しい成功を創造する。'));
- return redirect()->route('prices');
- } else {
- $request->session()->flash('error', __('新しい作成に失敗しました'));
+ \DB::transaction(function () use ($inputs, &$type) {
+ $new = new Price();
+ $new->fill($inputs);
+ if( $new->save()){
+ $type = true;
}
- }else {
- $inputs['errorMsg'] = $this->__buildErrorMessasges($validator);
+ });
+ if ($type) {
+ $request->session()->flash('success', __('新しい成功を創造する。'));
+ return redirect()->route('prices');
+ } else {
+ $request->session()->flash('error', __('新しい作成に失敗しました'));
}
}
@@ -86,29 +79,28 @@ class PriceController extends Controller
$data = array_merge($data, $dataList);
if ($request->isMethod('POST')) {
$type = false;
- $validation = new PriceRequest();
- $rules = $validation->rules();
- $validator = Validator::make($request->all(), $rules, $validation->messages());
- $requestAll = $request->all();
- $requestAll['price_ptypeid]'] = $request->input('ptype_subject');
- $requestAll['user_categoryid'] = $request->input('user_category_name'); // 利用者分類
- $requestAll['psection_id'] = $request->input('psection_subject');
- $requestAll['park_id'] = $request->input('park_name');
+ $requestAll = [
+ 'price_parkplaceid' => $request->input('price_parkplaceid'),
+ 'park_id' => $request->input('park_id'),
+ 'prine_name' => $request->input('prine_name'),
+ 'price_month' => $request->input('price_month',''),
+ 'user_categoryid' => $request->input('user_categoryid'),
+ 'price' => $request->input('price'),
+ 'psection_id' => $request->input('psection_id'),
+ 'price_ptypeid' => $request->input('price_ptypeid'),
+ 'pplace_id' => $request->input('pplace_id'),
+ ];
$data = array_merge($data, $requestAll);
- if (!$validator->fails()) {
- \DB::transaction(function () use ($data, &$type,$price) {
- $price->fill($data);
- $price->save();
- $type = true;
- });
- if ($type) {
- $request->session()->flash('success', __('更新に成功しました'));
- return redirect()->route('prices');
- } else {
- $request->session()->flash('error', __('更新に失敗しました'));
- }
- }else {
- $data['errorMsg'] = $this->__buildErrorMessasges($validator);
+ \DB::transaction(function () use ($data, &$type,$price) {
+ $price->fill($data);
+ $price->save();
+ $type = true;
+ });
+ if ($type) {
+ $request->session()->flash('success', __('更新に成功しました'));
+ return redirect()->route('prices');
+ } else {
+ $request->session()->flash('error', __('更新に失敗しました'));
}
}
if ($view != '') {
diff --git a/app/Http/Controllers/Admin/SealsController.php b/app/Http/Controllers/Admin/SealsController.php
new file mode 100644
index 0000000..43a770c
--- /dev/null
+++ b/app/Http/Controllers/Admin/SealsController.php
@@ -0,0 +1,28 @@
+input('sort', 'seal_issueid');
+ $sort_type = $request->input('sort_type', 'desc');
+
+ // sealテーブルを参照し、ソート
+ $list = DB::table('seal')
+ ->orderBy($sort, $sort_type)
+ ->paginate(20);
+
+ return view('admin.seals.list', [
+ 'list' => $list,
+ 'sort' => $sort,
+ 'sort_type' => $sort_type,
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Admin/TagissueController.php b/app/Http/Controllers/Admin/TagissueController.php
new file mode 100644
index 0000000..6f1cbca
--- /dev/null
+++ b/app/Http/Controllers/Admin/TagissueController.php
@@ -0,0 +1,41 @@
+select(
+ 'user_seq',
+ 'user_tag_serial',
+ 'user_tag_serial_64',
+ 'user_tag_issue',
+ 'user_name',
+ 'user_mobile',
+ 'user_homephone',
+ 'user_regident_zip',
+ 'user_regident_pre',
+ 'user_regident_city',
+ 'user_regident_add'
+ )
+ ->orderByDesc('user_seq');
+
+ // 必要に応じてフィルタ追加
+ // if ($request->filled('user_tag_issue')) {
+ // $query->where('user_tag_issue', $request->input('user_tag_issue'));
+ // }
+
+ $users = $query->paginate(20);
+
+ return view('admin.tag_issue.list', [
+ 'users' => $users,
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php
new file mode 100644
index 0000000..c764940
--- /dev/null
+++ b/app/Http/Controllers/Auth/ForgotPasswordController.php
@@ -0,0 +1,61 @@
+validate([
+ 'email' => 'required|email',
+ 'email_confirmation' => 'required|email|same:email',
+ ], [
+ 'email.required' => 'メールアドレスを入力してください。',
+ 'email.email' => '正しいメールアドレス形式で入力してください。',
+ 'email_confirmation.required' => '確認用メールアドレスを入力してください。',
+ 'email_confirmation.email' => '正しいメールアドレス形式で入力してください。',
+ 'email_confirmation.same' => 'メールアドレスが一致しません。',
+ ]);
+
+ // ope_mailでユーザーを検索
+ $user = \App\Models\Ope::where('ope_mail', $request->input('email'))->first();
+
+ if (!$user) {
+ return back()->withErrors(['email' => '該当するユーザーが見つかりません。']);
+ }
+
+ // トークン生成
+ $token = Str::random(60);
+
+ // トークン保存(既存レコードがあれば更新)
+ DB::table('password_reset_tokens')->updateOrInsert(
+ ['ope_mail' => $user->ope_mail],
+ [
+ 'token' => $token,
+ 'created_at' => now(),
+ ]
+ );
+
+ // メール送信
+ $resetUrl = url('/reset-password?token=' . $token . '&email=' . urlencode($user->ope_mail));
+ Mail::raw("下記URLからパスワード再設定を行ってください。\n\n{$resetUrl}", function ($message) use ($user) {
+ $message->to($user->ope_mail)
+ ->subject('パスワード再設定のご案内');
+ });
+
+ return back()->with('status', 'パスワード再設定メールを送信しました。');
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php
new file mode 100644
index 0000000..6e1a896
--- /dev/null
+++ b/app/Http/Controllers/Auth/ResetPasswordController.php
@@ -0,0 +1,51 @@
+query('token');
+ $email = $request->query('email');
+ return view('auth.reset-password', compact('token', 'email'));
+ }
+
+ public function reset(Request $request)
+ {
+ $request->validate([
+ 'email' => 'required|email',
+ 'token' => 'required',
+ 'password' => 'required|confirmed|min:8',
+ ]);
+
+ // トークンチェック
+ $record = DB::table('password_reset_tokens')
+ ->where('ope_mail', $request->email)
+ ->where('token', $request->token)
+ ->first();
+
+ if (!$record) {
+ return back()->withErrors(['email' => '無効なトークンまたはメールアドレスです。']);
+ }
+
+ // パスワード更新
+ $user = Ope::where('ope_mail', $request->email)->first();
+ if (!$user) {
+ return back()->withErrors(['email' => 'ユーザーが見つかりません。']);
+ }
+ $user->password = Hash::make($request->password);
+ $user->save();
+
+ // トークン削除
+ DB::table('password_reset_tokens')->where('ope_mail', $request->email)->delete();
+
+ return redirect()->route('login')->with('status', 'パスワードを再設定しました。');
+ }
+}
\ No newline at end of file
diff --git a/app/Legacy/User.php b/app/Legacy/User.php
index eb632e9..0ce988e 100644
--- a/app/Legacy/User.php
+++ b/app/Legacy/User.php
@@ -66,7 +66,6 @@ class User extends Model
'user_remarks',
'user_age',
];
-
protected static function boot()
{
parent::boot();
diff --git a/app/Models/Ptype.php b/app/Models/Ptype.php
index 2164953..aeb6fe6 100644
--- a/app/Models/Ptype.php
+++ b/app/Models/Ptype.php
@@ -4,12 +4,24 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
-/**
- * 車種分類モデル - ptypeテーブル(正式モデル)
- * 旧UsingStatusPtypeの責務を置き換え
- */
class Ptype extends Model
{
+
+ /**
+ * 主キー配列で一括削除
+ */
+ public static function deleteByPk($arr)
+ {
+ return self::whereIn('ptype_id', $arr)->delete();
+ }
+
+ /**
+ * 主キーで1件取得
+ */
+ public static function getByPk($pk)
+ {
+ return self::find($pk);
+ }
protected $table = 'ptype';
protected $primaryKey = 'ptype_id';
public $timestamps = true;
@@ -23,9 +35,28 @@ class Ptype extends Model
'operator_id',
];
- /**
- * 料金設定
- */
+ public static function search($inputs)
+ {
+ $list = self::query();
+ if (!empty($inputs['isMethodPost'])) {
+ // 必要に応じて検索条件を追加
+ }
+ if (!empty($inputs['sort'])) {
+ $list->orderBy($inputs['sort'], $inputs['sort_type'] ?? 'asc');
+ }
+ if (!empty($inputs['isExport'])) {
+ return $list->get();
+ } else {
+ return $list->paginate(\App\Models\Utils::item_per_page);
+ }
+ }
+
+ public static function getList()
+ {
+ return self::pluck('ptype_subject', 'ptype_id');
+ }
+
+
public function prices()
{
return $this->hasMany(PriceA::class, 'price_ptypeid', 'ptype_id');
diff --git a/resources/views/admin/information/list.blade.php b/resources/views/admin/information/list.blade.php
new file mode 100644
index 0000000..8264b6e
--- /dev/null
+++ b/resources/views/admin/information/list.blade.php
@@ -0,0 +1,228 @@
+@extends('layouts.app')
+@section('title', '常時表示インフォメーション')
+
+@section('content')
+
+
+
+
{{__('常時表示インフォメーション')}}
+
+
+
+
+
+
+
+
+
+
+
+@push('scripts')
+
+@endpush
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/parks/_form.blade.php b/resources/views/admin/parks/_form.blade.php
index a5494f3..1a6c3db 100644
--- a/resources/views/admin/parks/_form.blade.php
+++ b/resources/views/admin/parks/_form.blade.php
@@ -1,170 +1,588 @@
-@if(Session::has('success'))
-
-
- {{ Session::get('success') }}
-
-@elseif(Session::has('error'))
-
-
-
{{__('誤差')}}:
- {!! Session::get('error') !!}
-
-@elseif(isset($errorMsg))
-
-
-
{{__('誤差')}}:
- {!! $errorMsg !!}
-
-@endif
-
-
-
- @if($isInfo || $isEdit)
-
-
-
+{{-- resources/views/admin/parks/_form.blade.php --}}
+{{-- 駐輪場マスタ 共通フォーム(add/edit 共用) --}}
+
+@php
+ $p = $park ?? null;
+@endphp
+
+
+
+
+
+ {{-- 駐輪場ID(編集のみ) --}}
+ @if(!empty($p?->park_id))
+
+ {{-- 駐輪場名 --}}
+
+
+ {{-- 駐輪場ふりがな / 駐輪場五十音 --}}
+
+
+
+ {{-- 住所 --}}
+
+
+ {{-- 閉設フラグ / 閉設日 --}}
+
+
+
+ {{-- 価格メモ --}}
+
+
+ {{-- 逆利用(一般) / 逆利用フラグ(学生) / 駐輪規定フラグ --}}
+
+
+
+
+ {{-- 残警告チェックフラグ / 印字数 / 最新キープアライブ --}}
+
+
+
+
+ {{-- 更新期間開始/終了(日期+時分) --}}
+
+
+
+
+
+
+ {{-- 駐輪開始期間 --}}
+
+
+ {{-- リマインダー 種別/時間 --}}
+
+
+
+ {{-- 契約後即利用許可 / 項目表示設定 --}}
+
+
+
+
+
+ {{-- 二点間距離 / 座標 / 電話番号 --}}
+
+
+
+
+
+ {{-- 契約形態(定期/一時) --}}
+
+
+
+ {{-- 申告制利用 / 手続方法 / 支払方法 --}}
+
+
+
+
+ {{-- 利用可能時間制限 / 開始 / 終了 --}}
+
+
+
+
+ {{-- 常駐管理人 / 常駐時間 --}}
+
+
+
+
+ {{-- 屋根 / シール発行機 --}}
+
+
+
+ {{-- 駐輪場利用方法 / 定期更新期間 / 空き待ち予約 / 特記事項 --}}
+
+
+
+
+
+ {{-- 学生証確認種別 / 減免案内表示 / 年齢 / 開始月数 / 年跨ぎ --}}
+
+
+
+
+
+
+ {{-- 画像アップロード(SAMPLE表示) --}}
+
+
+
+ {{-- 備考(最下段に配置) --}}
+
+
+
diff --git a/resources/views/admin/parks/add.blade.php b/resources/views/admin/parks/add.blade.php
index b97224a..fcac1bb 100644
--- a/resources/views/admin/parks/add.blade.php
+++ b/resources/views/admin/parks/add.blade.php
@@ -1,53 +1,69 @@
-
@extends('layouts.app')
-@section('title', '[東京都|〇〇駐輪場] 駐輪場マスタ')
+@section('title', '駐輪場マスタ 新規')
@section('content')
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+ {{-- 画面上部のツールバー(新規は登録だけ/目标图一致) --}}
+
+ {{-- 本体フォーム(白背景のカード) --}}
+
+
+
+
+
+
@endsection
diff --git a/resources/views/admin/parks/edit.blade.php b/resources/views/admin/parks/edit.blade.php
index ea77744..4295445 100644
--- a/resources/views/admin/parks/edit.blade.php
+++ b/resources/views/admin/parks/edit.blade.php
@@ -1,53 +1,64 @@
-
@extends('layouts.app')
-@section('title', '[東京都|〇〇駐輪場] 駐輪場マスタ')
+@section('title', '駐輪場マスタ 編集')
@section('content')
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+ {{-- 画面上部のツールバー(左:登録/その他、右:削除) --}}
+
+ {{-- 本体フォーム(白背景のカード) --}}
+
+
+
+
@endsection
diff --git a/resources/views/admin/parks/info.blade.php b/resources/views/admin/parks/info.blade.php
deleted file mode 100644
index d7a2532..0000000
--- a/resources/views/admin/parks/info.blade.php
+++ /dev/null
@@ -1,53 +0,0 @@
-
-@extends('layouts.app')
-@section('title', '[東京都|〇〇駐輪場] 駐輪場マスタ')
-
-@section('content')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-@endsection
diff --git a/resources/views/admin/parks/list.blade.php b/resources/views/admin/parks/list.blade.php
index ac65f4a..8698fdb 100644
--- a/resources/views/admin/parks/list.blade.php
+++ b/resources/views/admin/parks/list.blade.php
@@ -1,188 +1,184 @@
@extends('layouts.app')
-@section('title', '[東京都|〇〇駐輪場] 駐輪場マスタ')
+
@section('content')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $list->links('pagination') }}
-
-
-
-
-
+
+
+
駐輪場マスタ
+
+ - ホーム
+ - 駐輪場マスタ
+
-
-
+
+
+
+
+
+
+ {{ $parks->appends(request()->except('page'))->links('pagination::bootstrap-4') }}
+
+
+
+@endsection
+
+@push('scripts')
+
+@extends('layouts.app')
+
+@section('content')
+
+ {{-- ここにテーブルやフォーム --}}
+
+@endsection
+
+@push('scripts')
+
+@endpush
+
+@endpush
\ No newline at end of file
diff --git a/resources/views/admin/personal/edit.blade.php b/resources/views/admin/personal/edit.blade.php
new file mode 100644
index 0000000..d4ddc87
--- /dev/null
+++ b/resources/views/admin/personal/edit.blade.php
@@ -0,0 +1,196 @@
+@extends('layouts.app')
+@section('title', '本人確認手動処理 編集')
+
+@section('content')
+
+
+
+
+{{-- 専用スタイル(目標画像の見た目に寄せる) --}}
+
+@endsection
diff --git a/resources/views/admin/personal/list.blade.php b/resources/views/admin/personal/list.blade.php
new file mode 100644
index 0000000..81eb8a8
--- /dev/null
+++ b/resources/views/admin/personal/list.blade.php
@@ -0,0 +1,108 @@
+@extends('layouts.app')
+
+@section('title', '本人確認手動処理')
+
+@section('content')
+
+
+
+
+
+ {{-- フィルター(必要なら追加) --}}
+ {{--
--}}
+
+
+
+
+
+
+ | 操作 |
+ 利用者ID |
+ 利用者分類ID |
+ 利用者名 |
+ フリガナ |
+ 性別 |
+ 生年月日 |
+ 携帯電話番号 |
+ 自宅電話番号 |
+ メールアドレス |
+ 居住所:郵便番号 |
+ 居住所:都道府県 |
+ 居住所:市区群 |
+ 居住所:住所 |
+ 関連住所:郵便番号 |
+ 関連住所:都道府県 |
+ 関連住所:市区群 |
+ 関連住所:住所 |
+ 学校 |
+ 卒業予定 |
+ 備考 |
+ 本人確認書類 |
+
+
+
+ @forelse($users as $user)
+
+ |
+ 編集
+ |
+ {{ $user->user_id }} |
+ {{ $user->user_categoryid }} |
+ {{ $user->user_name }} |
+ {{ $user->user_phonetic }} |
+ {{ $user->user_gender }} |
+ {{ $user->user_birthdate }} |
+ {{ $user->user_mobile }} |
+ {{ $user->user_homephone }} |
+ {{ $user->user_primemail }} |
+ {{ $user->user_regident_zip }} |
+ {{ $user->user_regident_pre }} |
+ {{ $user->user_regident_city }} |
+ {{ $user->user_regident_add }} |
+ {{ $user->user_relate_zip }} |
+ {{ $user->user_relate_pre }} |
+ {{ $user->user_relate_city }} |
+ {{ $user->user_relate_add }} |
+ {{ $user->user_school }} |
+ {{ $user->user_graduate }} |
+ {{ $user->user_remarks }} |
+ {{ $user->user_idcard }} |
+
+ @empty
+
+ | データがありません。 |
+
+ @endforelse
+
+
+
+ {{ $users->links('pagination') }}
+
+
+
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/prices/_form.blade.php b/resources/views/admin/prices/_form.blade.php
index 39e8a29..85e4e39 100644
--- a/resources/views/admin/prices/_form.blade.php
+++ b/resources/views/admin/prices/_form.blade.php
@@ -21,149 +21,123 @@
{{__('登録')}}
{{__('編集')}}
@else
-
+
@endIf
- @if($isEdit || $isInfo)
-
-
-
-
-
- @endIf
+
+
+
+
+
+
+
+
+
+
-
diff --git a/resources/views/admin/prices/info.blade.php b/resources/views/admin/prices/info.blade.php
index 4608884..effa91d 100644
--- a/resources/views/admin/prices/info.blade.php
+++ b/resources/views/admin/prices/info.blade.php
@@ -1,6 +1,6 @@
@extends('layouts.app')
-@section('title', '[東京都|〇〇駐輪場] 駐輪場所、料金マスタ')
+@section('title', '駐輪場所、料金マスタ')
@section('content')
@@ -8,14 +8,13 @@
-
[東京都|〇〇駐輪場] 駐輪場所、料金マスタ
+ 駐輪場所、料金マスタ
@@ -40,12 +39,6 @@
-
-
-
-
-
-
diff --git a/resources/views/admin/prices/list.blade.php b/resources/views/admin/prices/list.blade.php
index edafd14..9b3c807 100644
--- a/resources/views/admin/prices/list.blade.php
+++ b/resources/views/admin/prices/list.blade.php
@@ -1,166 +1,135 @@
-
@extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 駐輪場所、料金マスタ')
+
@section('content')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $list->appends(['sort' => $sort,'sort_type'=>$sort_type])->links('pagination') }}
-
-
-
-
+{{-- ▼ コンテンツヘッダー(パンくず) --}}
+
+
-@endsection
\ No newline at end of file
+{{-- ▼ メインコンテンツ --}}
+
+
+
+ {{-- ▼ ボタン列(新規/削除/CSV出力/インポート/エクスポート) --}}
+
+
+
+
+
+
+
+
+ {{-- ▼ ページネーション(上部・右寄せ) --}}
+
+ {{ $list->appends(['sort' => $sort, 'sort_type' => $sort_type])->links('pagination') }}
+
+
+ {{-- ▼ フラッシュメッセージ --}}
+
+
+ {{-- ▼ 一覧(市区マスタ準拠:1枚テーブル/先頭が「チェック+編集」統合列) --}}
+
+
+
+
+{{-- ▼ 全選択/全解除(name="pk[]" を対象) --}}
+
+@endsection
diff --git a/resources/views/admin/ptypes/_form.blade.php b/resources/views/admin/ptypes/_form.blade.php
index 48b84bf..d45648e 100644
--- a/resources/views/admin/ptypes/_form.blade.php
+++ b/resources/views/admin/ptypes/_form.blade.php
@@ -17,59 +17,36 @@
@endif
+
-
- @if($isInfo || $isEdit)
-
-
+
diff --git a/resources/views/admin/ptypes/add.blade.php b/resources/views/admin/ptypes/add.blade.php
index ab42ab2..ba80cfe 100644
--- a/resources/views/admin/ptypes/add.blade.php
+++ b/resources/views/admin/ptypes/add.blade.php
@@ -8,14 +8,14 @@
-
[東京都|〇〇駐輪場] 駐輪分類マスタ
+ 駐輪分類マスタ
@@ -40,12 +40,6 @@
-
-
-
-
-
-
diff --git a/resources/views/admin/ptypes/edit.blade.php b/resources/views/admin/ptypes/edit.blade.php
index 0b11d23..c7ec050 100644
--- a/resources/views/admin/ptypes/edit.blade.php
+++ b/resources/views/admin/ptypes/edit.blade.php
@@ -1,4 +1,3 @@
-
@extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 駐輪分類マスタ')
@@ -14,8 +13,8 @@
- XX様info(ホーム)
- [東京都|〇〇駐輪場]
- - 駐輪分類マスタ
- - 利用者マスタ
+ - 駐輪分類マスタ
+ - 編集
@@ -32,20 +31,12 @@
-
-
-
-
-
-
diff --git a/resources/views/admin/ptypes/info.blade.php b/resources/views/admin/ptypes/info.blade.php
index 700ff64..a07d3c5 100644
--- a/resources/views/admin/ptypes/info.blade.php
+++ b/resources/views/admin/ptypes/info.blade.php
@@ -41,12 +41,6 @@
-
-
-
-
-
-
diff --git a/resources/views/admin/ptypes/list.blade.php b/resources/views/admin/ptypes/list.blade.php
index 0d3f140..7352336 100644
--- a/resources/views/admin/ptypes/list.blade.php
+++ b/resources/views/admin/ptypes/list.blade.php
@@ -1,137 +1,144 @@
-
@extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 駐輪分類マスタ')
+
@section('content')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $list->appends(['sort' => $sort,'sort_type'=>$sort_type])->links('pagination') }}
-
-
-
-
+{{-- ▼ コンテンツヘッダー(パンくず) --}}
+
+
-@endsection
\ No newline at end of file
+{{-- ▼ メインコンテンツ --}}
+
+
+ {{-- ▼ アクションボタン(市区マスタ準拠) --}}
+
+
+ {{-- ▼ フラッシュメッセージ --}}
+ @if(Session::has('success'))
+
+
+ {{ Session::get('success') }}
+
+ @elseif(Session::has('error'))
+
+
+
{{__('誤差')}}:
+ {!! Session::get('error') !!}
+
+ @elseif(isset($errorMsg))
+
+
+
{{__('誤差')}}:
+ {!! $errorMsg !!}
+
+ @endif
+
+ {{-- ▼ 一覧(編集+チェックを統合列に変更:背景 #faebd7) --}}
+
-
-
-
-
-
-
-
-
-
+ {{-- 上部の操作ボタン(登録/削除) --}}
-
-
-
-
+
+ {{-- カード本体 --}}
+
+ {{-- 既存の共通フォームをそのまま利用 --}}
+ @include('admin.usertypes._form', ['isEdit' => 1, 'isInfo' => 0])
+
-
-
-@endsection
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/usertypes/info.blade.php b/resources/views/admin/usertypes/info.blade.php
index 6424dd0..450ff8e 100644
--- a/resources/views/admin/usertypes/info.blade.php
+++ b/resources/views/admin/usertypes/info.blade.php
@@ -1,53 +1,122 @@
-
@extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 利用者分類マスタ')
-
@section('content')
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
@endsection
diff --git a/resources/views/admin/usertypes/list.blade.php b/resources/views/admin/usertypes/list.blade.php
index 92794cd..171c513 100644
--- a/resources/views/admin/usertypes/list.blade.php
+++ b/resources/views/admin/usertypes/list.blade.php
@@ -6,38 +6,40 @@
-
-
+
+
+
-
-
-
-
-
-
-
-
- {{ $list->appends(['sort' => $sort,'sort_type'=>$sort_type])->links('pagination') }}
+
+
+
+ {{ $list->appends(['sort' => $sort, 'sort_type' => $sort_type])->links('pagination') }}
+
+
@if(Session::has('success'))
@@ -59,90 +61,117 @@
@endif
-