From 70bfd18204e13768a7037efc88ca594576440d1b Mon Sep 17 00:00:00 2001 From: "kin.rinzen" Date: Wed, 27 Aug 2025 17:16:05 +0900 Subject: [PATCH] =?UTF-8?q?=E7=94=BB=E9=9D=A2=E8=BF=BD=E5=8A=A0(mail=5Ftem?= =?UTF-8?q?plates/inv=5Fsettings)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Admin/InvSettingController.php | 151 +++++++++++++ .../Admin/MailTemplateController.php | 124 +++++++++++ app/Models/InvSetting.php | 16 ++ .../views/admin/invsettings/_form.blade.php | 124 +++++++++++ .../admin/mail_templates/_form.blade.php | 144 +++++++++++++ .../views/admin/mail_templates/add.blade.php | 46 ++++ .../views/admin/mail_templates/edit.blade.php | 20 ++ .../views/admin/mail_templates/info.blade.php | 21 ++ .../views/admin/mail_templates/list.blade.php | 201 ++++++++++++++++++ resources/views/admin/opes/add.blade.php | 5 - resources/views/layouts/app.blade.php | 64 +++--- routes/web.php | 70 +++--- 12 files changed, 927 insertions(+), 59 deletions(-) create mode 100644 app/Http/Controllers/Admin/InvSettingController.php create mode 100644 app/Http/Controllers/Admin/MailTemplateController.php create mode 100644 app/Models/InvSetting.php create mode 100644 resources/views/admin/invsettings/_form.blade.php create mode 100644 resources/views/admin/mail_templates/_form.blade.php create mode 100644 resources/views/admin/mail_templates/add.blade.php create mode 100644 resources/views/admin/mail_templates/edit.blade.php create mode 100644 resources/views/admin/mail_templates/info.blade.php create mode 100644 resources/views/admin/mail_templates/list.blade.php diff --git a/app/Http/Controllers/Admin/InvSettingController.php b/app/Http/Controllers/Admin/InvSettingController.php new file mode 100644 index 0000000..4956823 --- /dev/null +++ b/app/Http/Controllers/Admin/InvSettingController.php @@ -0,0 +1,151 @@ +zipcode) && str_contains($row->zipcode, '-')) { + [$zip1, $zip2] = explode('-', $row->zipcode); + } + + // 電話番号:数字以外を除去 → 2桁+4桁+4桁 に分割 + if (!empty($row->tel_num)) { + $tel = preg_replace('/\D/', '', $row->tel_num); // 数字以外を除去 + $tel1 = substr($tel, 0, 2); + $tel2 = substr($tel, 2, 4); + $tel3 = substr($tel, 6, 4); + } + + // FAX番号:同じく 2桁+4桁+4桁 + if (!empty($row->fax_num)) { + $fax = preg_replace('/\D/', '', $row->fax_num); + $fax1 = substr($fax, 0, 2); + $fax2 = substr($fax, 2, 4); + $fax3 = substr($fax, 6, 4); + } + } + + return view('admin.invsettings._form', compact( + 'row', 'zip1', 'zip2', 'tel1', 'tel2', 'tel3', 'fax1', 'fax2', 'fax3' + )); + } + + + /** + * 登録・更新処理 + */ + public function save(Request $request) + { + // バリデーションルール + $rules = [ + 't_number' => 'required|string|max:20', + 't_name' => 'required|string|max:50', + 'zip1' => 'required|digits:3', + 'zip2' => 'required|digits:4', + 'adrs' => 'required|string|max:100', + 'bldg' => 'nullable|string|max:80', + 'tel1' => 'nullable|digits_between:2,4', + 'tel2' => 'nullable|digits_between:2,4', + 'tel3' => 'nullable|digits_between:3,4', + 'fax1' => 'nullable|digits_between:2,4', + 'fax2' => 'nullable|digits_between:2,4', + 'fax3' => 'nullable|digits_between:3,4', + 'company_image' => 'nullable|image|mimes:png,jpg,jpeg|max:2048', + ]; + + // カスタム日本語メッセージ + $messages = [ + 't_number.required' => '適格請求書発行事業者番号を入力してください。', + 't_number.max' => '適格請求書発行事業者番号は20文字以内で入力してください。', + + 't_name.required' => '適格事業者名を入力してください。', + 't_name.max' => '適格事業者名は50文字以内で入力してください。', + + 'zip1.required' => '郵便番号(前半)を入力してください。', + 'zip1.digits' => '郵便番号(前半)は3桁で入力してください。', + 'zip2.required' => '郵便番号(後半)を入力してください。', + 'zip2.digits' => '郵便番号(後半)は4桁で入力してください。', + + 'adrs.required' => '表示住所を入力してください。', + 'adrs.max' => '表示住所は100文字以内で入力してください。', + + 'bldg.max' => '建物名は80文字以内で入力してください。', + + 'tel1.digits_between' => '電話番号1は2桁から4桁で入力してください。', + 'tel2.digits_between' => '電話番号2は2桁から4桁で入力してください。', + 'tel3.digits_between' => '電話番号3は3桁から4桁で入力してください。', + + 'fax1.digits_between' => 'FAX番号1は2桁から4桁で入力してください。', + 'fax2.digits_between' => 'FAX番号2は2桁から4桁で入力してください。', + 'fax3.digits_between' => 'FAX番号3は3桁から4桁で入力してください。', + + 'company_image.image' => '社判画像は画像ファイルを選択してください。', + 'company_image.mimes' => '社判画像はpng, jpg, jpeg形式でアップロードしてください。', + 'company_image.max' => '社判画像は2MB以下にしてください。', + ]; + + // バリデーション実行(カスタムメッセージ適用) + $request->validate($rules, $messages); + + // データ整形 + $zipcode = $request->zip1 . '-' . $request->zip2; + $tel = implode('-', array_filter([$request->tel1, $request->tel2, $request->tel3])); + $fax = implode('-', array_filter([$request->fax1, $request->fax2, $request->fax3])); + + // 既存レコードを取得(1レコード運用) + $row = InvSetting::first(); + + // 画像処理 + $imagePath = $row?->company_image_path; + if ($request->hasFile('company_image')) { + if ($imagePath && Storage::disk('public')->exists($imagePath)) { + Storage::disk('public')->delete($imagePath); + } + $imagePath = $request->file('company_image')->store('inv', 'public'); + } + + // レコードを新規作成 or 更新 + if ($row) { + $row->update([ + 't_number' => $request->t_number, + 't_name' => $request->t_name, + 'zipcode' => $zipcode, + 'adrs' => $request->adrs, + 'bldg' => $request->bldg, + 'tel_num' => $tel, + 'fax_num' => $fax, + 'company_image_path' => $imagePath, + ]); + } else { + InvSetting::create([ + 't_number' => $request->t_number, + 't_name' => $request->t_name, + 'zipcode' => $zipcode, + 'adrs' => $request->adrs, + 'bldg' => $request->bldg, + 'tel_num' => $tel, + 'fax_num' => $fax, + 'company_image_path' => $imagePath, + ]); + } + + return back()->with('success', 'インボイス設定を登録しました。'); + } + +} diff --git a/app/Http/Controllers/Admin/MailTemplateController.php b/app/Http/Controllers/Admin/MailTemplateController.php new file mode 100644 index 0000000..6323dff --- /dev/null +++ b/app/Http/Controllers/Admin/MailTemplateController.php @@ -0,0 +1,124 @@ +input('action') === 'reset') { + return redirect()->route('mail_templates'); + } + + $sort = $request->input('sort', 'mail_template_id'); + $sort_type = $request->input('sort_type', 'desc'); + + $query = MailTemplate::query(); + + // 絞り込み + if ($request->filled('mail_template_id')) { + $query->where('mail_template_id', $request->mail_template_id); + } + if ($request->filled('pg_id')) { + $query->where('pg_id', $request->pg_id); + } + if ($request->has('mgr_cc_flag') && $request->mgr_cc_flag !== '') { + $query->where('mgr_cc_flag', $request->mgr_cc_flag); + } + if ($request->has('use_flag') && $request->use_flag !== '') { + $query->where('use_flag', $request->use_flag); + } + if ($request->filled('subject')) { + $query->where('subject', 'LIKE', "%{$request->subject}%"); + } + + $templates = $query->orderBy($sort, $sort_type)->paginate(20); + + return view('admin.mail_templates.list', compact( + 'templates', 'sort', 'sort_type' + )); + } + + /** + * 新規登録 + */ + public function add(Request $request) + { + if ($request->isMethod('post')) { + $data = $this->validateTemplate($request); + MailTemplate::create($data); + + return redirect()->route('mail_templates') + ->with('success', 'テンプレートを登録しました'); + } + + $mailTemplate = new MailTemplate(); + return view('admin.mail_templates.add', compact('mailTemplate')); + } + + /** + * 編集 + */ + public function edit($id, Request $request) + { + $mailTemplate = MailTemplate::findOrFail($id); + + if ($request->isMethod('post')) { + $data = $this->validateTemplate($request); + $mailTemplate->update($data); + + return redirect()->route('mail_templates') + ->with('success', 'テンプレートを更新しました'); + } + + return view('admin.mail_templates.edit', compact('mailTemplate')); + } + + /** + * 詳細表示 + */ + public function info($id) + { + $mailTemplate = MailTemplate::findOrFail($id); + + return view('admin.mail_templates.info', compact('mailTemplate')); + } + + /** + * 削除 + */ + public function delete(Request $request) + { + $id = $request->input('id'); + if ($id) { + MailTemplate::destroy($id); + return redirect()->route('mail_templates')->with('success', 'テンプレートを削除しました'); + } + return redirect()->route('mail_templates')->with('error', '削除対象が指定されていません'); + } + + /** + * バリデーション共通化 + */ + private function validateTemplate(Request $request) + { + return $request->validate([ + 'pg_id' => 'nullable|integer', + 'internal_id' => 'nullable|integer', + 'mgr_cc_flag' => 'nullable|boolean', + 'bcc_adrs' => 'nullable|string|max:255', + 'use_flag' => 'nullable|boolean', + 'memo' => 'nullable|string|max:255', + 'subject' => 'required|string|max:255', + 'text' => 'required|string', + 'operator_id' => 'nullable|integer', + ]); + } +} diff --git a/app/Models/InvSetting.php b/app/Models/InvSetting.php new file mode 100644 index 0000000..2c9be1b --- /dev/null +++ b/app/Models/InvSetting.php @@ -0,0 +1,16 @@ + +
+
+

インボイス設定

+
+
+ + +
+
+ @if(session('success')) +
{{ session('success') }}
+ @endif + + @if ($errors->any()) +
+
    + @foreach ($errors->all() as $e)
  • {{ $e }}
  • @endforeach +
+
+ @endif + +
+ @csrf + + {{-- 適格請求書発行事業者番号 --}} +
+ +
+ +
+
+ + {{-- 適格事業者名 --}} +
+ +
+ +
+
+ + {{-- 郵便番号 --}} +
+ +
+ + - + +
+
+ + {{-- 表示住所 --}} +
+ +
+ +
+
+ + {{-- 建物名 --}} +
+ +
+ +
+
+ + {{-- 表示電話番号 --}} +
+ +
+ + - + + - + +
+
+ + {{-- 表示FAX番号 --}} +
+ +
+ + - + + - + +
+
+ + {{-- 社判画像 --}} +
+ +
+ + @if(!empty($row->company_image_path)) + + @endif +
+
+ + {{-- 登録ボタン --}} +
+
+ +
+
+
+
+
+@endsection diff --git a/resources/views/admin/mail_templates/_form.blade.php b/resources/views/admin/mail_templates/_form.blade.php new file mode 100644 index 0000000..fac1efc --- /dev/null +++ b/resources/views/admin/mail_templates/_form.blade.php @@ -0,0 +1,144 @@ +@if(Session::has('success')) + +@elseif(Session::has('error')) +
+ +

エラー:

+ {!! Session::get('error') !!} +
+@endif + +
+ @if($isInfo) + 登録 + 編集 + @else + + @endif +
+ +
+
+ {{-- 編集・詳細時のみテンプレートID表示 --}} + @if($isEdit || $isInfo) +
+ +
+
+ +
+ @endif + + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+
+ mgr_cc_flag ?? '') == 1) checked @endif + @if($isInfo) disabled @endif> + +
+
+ mgr_cc_flag ?? '') == 0) checked @endif + @if($isInfo) disabled @endif> + +
+
+ + +
+ +
+
+ +
+ + +
+ +
+
+
+ use_flag ?? '') == 1) checked @endif + @if($isInfo) disabled @endif> + +
+
+ use_flag ?? '') == 0) checked @endif + @if($isInfo) disabled @endif> + +
+
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+ + +
+ +
+
+ +
+
+ + {{-- 下部ボタン --}} + @if($isInfo) + 登録 + 編集 + @else + + @endif +
diff --git a/resources/views/admin/mail_templates/add.blade.php b/resources/views/admin/mail_templates/add.blade.php new file mode 100644 index 0000000..5e24be2 --- /dev/null +++ b/resources/views/admin/mail_templates/add.blade.php @@ -0,0 +1,46 @@ +@extends('layouts.app') +@section('title', '[東京都|〇〇駐輪場] メール送信テンプレート新規登録') + +@section('content') + +
+
+
+
+

新規

+
+
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+ @csrf + @include('admin.mail_templates._form', [ + 'isEdit' => false, + 'isInfo' => false, + 'mailTemplate' => $mailTemplate, + ]) +
+
+
+
+
+
+ +@endsection diff --git a/resources/views/admin/mail_templates/edit.blade.php b/resources/views/admin/mail_templates/edit.blade.php new file mode 100644 index 0000000..0d9952f --- /dev/null +++ b/resources/views/admin/mail_templates/edit.blade.php @@ -0,0 +1,20 @@ +@extends('layouts.app') +@section('title', '[東京都|〇〇駐輪場] メール送信テンプレート') + +@section('content') +
+
+

メール送信テンプレート編集

+
+
+
+
+
+
+ @csrf + @include('admin.mail_templates._form', ['isEdit' => 1, 'isInfo' => 0, 'mailTemplate' => $mailTemplate]) +
+
+
+
+@endsection diff --git a/resources/views/admin/mail_templates/info.blade.php b/resources/views/admin/mail_templates/info.blade.php new file mode 100644 index 0000000..98c4472 --- /dev/null +++ b/resources/views/admin/mail_templates/info.blade.php @@ -0,0 +1,21 @@ +@extends('layouts.app') +@section('title', '[東京都|〇〇駐輪場] メール送信テンプレート') + +@section('content') +
+
+

メール送信テンプレート詳細

+
+
+
+
+
+ {{-- info 画面なので action は不要 --}} +
+ @csrf + @include('admin.mail_templates._form', ['isEdit' => 0, 'isInfo' => 1, 'mailTemplate' => $mailTemplate]) +
+
+
+
+@endsection diff --git a/resources/views/admin/mail_templates/list.blade.php b/resources/views/admin/mail_templates/list.blade.php new file mode 100644 index 0000000..b960b50 --- /dev/null +++ b/resources/views/admin/mail_templates/list.blade.php @@ -0,0 +1,201 @@ +@extends('layouts.app') + +@section('title', '[東京都|〇〇駐輪場] メール送信テンプレート') + +@section('content') +
+
+
+
+

メール送信テンプレート

+
+
+ +
+
+
+
+ +
+ +
+
+ + {{-- タイトル区 --}} +
+

絞り込みフィルター

+
+ + {{-- フィルタフォーム主体 --}} +
+
+ @csrf + + + + + + {{-- 行1 --}} + + + + + + + + + {{-- 行2 --}} + + + + + + + + + {{-- 行3 --}} + + + + + +
メールテンプレートID + + 使用プログラムID + +
エリアマネージャー同報 + + 使用フラグ + +
件名 + +
+ + {{-- ボタン --}} +
+ + +
+
+
+
+
+ + + +
+ + +
+ {{ $templates->appends(request()->all())->links('pagination') }} +
+
+ + + +
+
+
+ @csrf + + + + + + + + + + + + + + + + + @foreach($templates as $item) + + + + + + + + + + + + + @endforeach + +
+ + メールテンプレートID使用プログラムID内部IDエリアマネージャー同報BCCアドレス使用フラグ備考件名本文
+
+ + 編集 +
+
{{ $item->mail_template_id }}{{ $item->pg_id }}{{ $item->internal_id }}{{ $item->mgr_cc_flag ? '同報する' : '同報しない' }}{{ $item->bcc_adrs }}{{ $item->use_flag ? '使用する' : '使用しない' }}{{ $item->memo }}{{ $item->subject }}{{ Str::limit($item->text, 30) }}
+
+
+
+ +
+ +
+ +@push('scripts') + +@endpush +@endsection diff --git a/resources/views/admin/opes/add.blade.php b/resources/views/admin/opes/add.blade.php index c231385..5042ad2 100644 --- a/resources/views/admin/opes/add.blade.php +++ b/resources/views/admin/opes/add.blade.php @@ -37,11 +37,6 @@ - diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index d8f109c..ae25009 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -374,12 +374,22 @@