Compare commits

...

9 Commits

Author SHA1 Message Date
Your Name
253e388058 shj3 修正
All checks were successful
Deploy so-manager (auto) / deploy (push) Successful in 23s
2025-10-05 01:50:06 +09:00
Your Name
ff21ee5796 Merge branch 'main' of https://git.so-manager-dev.com/so-manager/so-manager-dev.com
All checks were successful
Deploy so-manager (auto) / deploy (push) Successful in 24s
2025-10-03 20:32:33 +09:00
Your Name
9441a34f6f SHJ-9/SHJ-10: 修复定期契約集計処理の統合ロジック
- 定期契約データを psectionusertypemonths で統合
- 新規/更新  減免/通常 を1レコードに集約
- Operator Queue に park_id と operator_id を正確に設定
- SQL に contract_money の SUM を追加
2025-10-03 20:32:09 +09:00
56c7ae8778 Merge pull request 'main_watanabe' (#40) from main_watanabe into main
All checks were successful
Deploy so-manager (auto) / deploy (push) Successful in 24s
Deploy preview (main_watanabe) / deploy (push) Successful in 19s
Reviewed-on: #40
2025-10-03 17:47:10 +09:00
b4532dd76c 10/3 マージ
All checks were successful
Deploy preview (main_watanabe) / deploy (push) Successful in 12s
2025-10-03 17:46:11 +09:00
7b2d8c4416 Merge pull request '契約更新画面修正' (#39) from main_higashide into main
All checks were successful
Deploy so-manager (auto) / deploy (push) Successful in 24s
Reviewed-on: #39
2025-10-03 15:30:09 +09:00
d1306131cf Merge remote-tracking branch 'origin/main' into main_watanabe
All checks were successful
Deploy preview (main_watanabe) / deploy (push) Successful in 14s
2025-09-29 11:44:02 +09:00
79fd7f2ca3 Merge remote-tracking branch 'origin/main' into main_watanabe
All checks were successful
Deploy preview (main_watanabe) / deploy (push) Successful in 11s
2025-09-26 17:28:37 +09:00
0e67f5a11b Merge remote-tracking branch 'origin/main' into main_watanabe 2025-09-26 17:28:18 +09:00
17 changed files with 3033 additions and 1350 deletions

View File

@ -9,7 +9,7 @@ use App\Services\ShjNineService;
/** /**
* SHJ-9 売上集計処理コマンド * SHJ-9 売上集計処理コマンド
* *
* 駐輪場の売上データを日次・月次・年次で集計する処理を実行する * 駐輪場の売上データを日次で集計する処理を実行する
* バックグラウンドで実行される定期バッチ処理 * バックグラウンドで実行される定期バッチ処理
*/ */
class ShjNineCommand extends Command class ShjNineCommand extends Command
@ -18,19 +18,19 @@ class ShjNineCommand extends Command
* コンソールコマンドの名前とシグネチャ * コンソールコマンドの名前とシグネチャ
* *
* 引数: * 引数:
* - type: 集計種別 (daily/monthly/yearly) (必須) * - type: 集計種別 (daily のみ) (必須)
* - target_date: 集計対象日 (オプション、YYYY-MM-DD形式) * - target_date: 集計対象日 (オプション、YYYY-MM-DD形式)
* *
* @var string * @var string
*/ */
protected $signature = 'shj:9 {type : 集計種別(daily/monthly/yearly)} {target_date? : 集計対象日(YYYY-MM-DD)}'; protected $signature = 'shj:9 {type : 集計種別(daily)} {target_date? : 集計対象日(YYYY-MM-DD)}';
/** /**
* コンソールコマンドの説明 * コンソールコマンドの説明
* *
* @var string * @var string
*/ */
protected $description = 'SHJ-9 売上集計処理 - 日次/月次/年次売上データ集計を実行'; protected $description = 'SHJ-9 売上集計処理 - 日次売上データ集計を実行';
/** /**
* SHJ-9サービスクラス * SHJ-9サービスクラス
@ -138,10 +138,9 @@ class ShjNineCommand extends Command
*/ */
private function validateParameters(string $type, ?string $targetDate): bool private function validateParameters(string $type, ?string $targetDate): bool
{ {
// 集計種別チェック // 集計種別チェックSHJ-9 は日次のみ対応)
$allowedTypes = ['daily', 'monthly', 'yearly']; if ($type !== 'daily') {
if (!in_array($type, $allowedTypes)) { $this->error('SHJ-9 は日次集計dailyのみ対応しています。月次/年次は SHJ-10 を使用してください。');
$this->error('集計種別は daily, monthly, yearly のいずれかを指定してください。');
return false; return false;
} }
@ -157,7 +156,7 @@ class ShjNineCommand extends Command
/** /**
* 集計対象日を決定 * 集計対象日を決定
* *
* @param string $type 集計種別 * @param string $type 集計種別daily 固定)
* @param string|null $targetDate 指定日 * @param string|null $targetDate 指定日
* @return string 集計対象日 * @return string 集計対象日
*/ */
@ -167,23 +166,8 @@ class ShjNineCommand extends Command
return $targetDate; return $targetDate;
} }
// パラメータ指定がない場合のデフォルト設定 // パラメータ指定がない場合は昨日本日の1日前
switch ($type) { return now()->subDay()->format('Y-m-d');
case 'daily':
// 日次昨日本日の1日前
return now()->subDay()->format('Y-m-d');
case 'monthly':
// 月次:前月の最終日
return now()->subMonth()->endOfMonth()->format('Y-m-d');
case 'yearly':
// 年次:前年の最終日
return now()->subYear()->endOfYear()->format('Y-m-d');
default:
return now()->subDay()->format('Y-m-d');
}
} }
/** /**

View File

@ -11,9 +11,9 @@ class InquiryConfirmController extends Controller
{ {
// 初期表示内容 // 初期表示内容
public $form_data = [ public $form_data = [
["name", "text", "氏名*", ""], ["name", "text", "氏名*", "山田 太郎"],
["email", "email", "メールアドレス*", ""], ["email", "email", "メールアドレス*", "info@so-manager.com"],
["tel", "text", "電話番号*", ""], ["tel", "text", "電話番号*", "000-0000-0000"],
["subject", "checkbox", "お問い合わせ概要*", ["定期契約について", "操作方法について", "支払方法について", "その他お問合せ"]], ["subject", "checkbox", "お問い合わせ概要*", ["定期契約について", "操作方法について", "支払方法について", "その他お問合せ"]],
["parking", "text", "お問い合わせ駐輪場名", ""], ["parking", "text", "お問い合わせ駐輪場名", ""],
["detail", "textarea", "お問い合わせ詳細*", ""], ["detail", "textarea", "お問い合わせ詳細*", ""],
@ -40,11 +40,11 @@ class InquiryConfirmController extends Controller
// エラーメッセージ // エラーメッセージ
$message = [ $message = [
'name.required' => '名前を入力してください', 'name.required' => '氏名は必ず入力してください。',
'email.required' => 'メールアドレスを入力してください', 'email.required' => 'メールアドレスは必ず入力してください。',
'tel.required' => '電話番号を入力してください', 'tel.required' => '電話番号は必ず入力してください。',
'subject.required' => 'お問い合わせ概要を選択してください', 'subject.required' => 'お問い合わせ概要が選択されていません。',
'detail.required' => 'お問い合わせ詳細を入力してください', 'detail.required' => 'お問い合わせの詳細が入力されていません。',
]; ];
// バリデーションチェック // バリデーションチェック

View File

@ -51,7 +51,7 @@ class MemberRegistrationController extends Controller
return view('general.swo2_2'); return view('general.swo2_2');
} }
// 入力画面表示 // メールのURLからアクセス
public function index() public function index()
{ {
// 署名付きURLの有効期限チェック // 署名付きURLの有効期限チェック
@ -59,32 +59,39 @@ class MemberRegistrationController extends Controller
return redirect('error')->withErrors(['error' => '署名の有効期限が切れています']); return redirect('error')->withErrors(['error' => '署名の有効期限が切れています']);
} }
// 初回遷移(GETアクセス)時のリクエストパラメータチェック // パラメータ存在チェック
if (!session()->has('email')) { $encryptedEmail = request()->query('email');
if (!$encryptedEmail) {
return redirect('error')->withErrors(['error' => 'メールアドレスが指定されていません']);
}
// パラメータ存在チェック // パラメータ整合性チェック
$encryptedEmail = request()->query('email'); try {
if (!$encryptedEmail) { $email = decrypt($encryptedEmail);
return redirect('error')->withErrors(['error' => 'メールアドレスが指定されていません']); } catch (\Exception $e) {
return redirect('error')->withErrors(['error' => 'メールアドレスの情報が不正です']);
}
// 二重登録防止チェック
$existingMember = User::where('user_primemail', $email)->get();
foreach ($existingMember as $member) {
if ($member->user_quit_flag != 1) {
return redirect('error')->withErrors(['error' => '既に登録済みです']);
} }
}
// パラメータ整合性チェック // メールアドレスをセッションに保存
try { session(['email' => $email]);
$email = decrypt($encryptedEmail);
} catch (\Exception $e) {
return redirect('error')->withErrors(['error' => 'メールアドレスの情報が不正です']);
}
// 二重登録防止チェック // 入力画面に遷移
$existingMember = User::where('user_primemail', $email)->get(); return view('general.swo2_3');
foreach ($existingMember as $member) { }
if ($member->user_quit_flag != 1) {
return redirect('error')->withErrors(['error' => '既に登録済みです']);
}
}
// メールアドレスをセッションに保存 // リダイレクト用
session(['email' => $email]); public function indexBack(Request $request)
{
if (!session('email')) {
return redirect('error')->withErrors(['error' => '不正なアクセスです']);
} }
// 入力画面に遷移 // 入力画面に遷移
@ -119,9 +126,7 @@ class MemberRegistrationController extends Controller
// バリデーションチェック // バリデーションチェック
$validator = Validator::make($request->all(), $rules, $message); $validator = Validator::make($request->all(), $rules, $message);
if ($validator->fails()) { if ($validator->fails()) {
return redirect('swo2_3') return redirect('swo2_3B')->withErrors($validator)->withInput();
->withErrors($validator)
->withInput();
} }
// 画面返却値 // 画面返却値
@ -142,7 +147,7 @@ class MemberRegistrationController extends Controller
{ {
// 前の画面に戻る // 前の画面に戻る
if($request->input('back') == 'back'){ if($request->input('back') == 'back'){
return redirect('swo2_3')->withInput(); return redirect('swo2_3B')->withInput();
} }
// 登録完了後のブラウザバックによる二重登録対策 // 登録完了後のブラウザバックによる二重登録対策

View File

@ -48,8 +48,8 @@ class EarningsSummary extends Model
'regular_update_amount', // 更新金額 'regular_update_amount', // 更新金額
'regular_update_reduction_count', // 更新成免件数 'regular_update_reduction_count', // 更新成免件数
'regular_update_reduction_amount', // 更新成免金額 'regular_update_reduction_amount', // 更新成免金額
'turnsum_count', // 残金件数 'lumpsum_count', // 一時金件数
'turnsum', // 残 'lumpsum', // 一時
'refunds', // 解時返戻金 'refunds', // 解時返戻金
'other_income', // 分別収入 'other_income', // 分別収入
'other_spending', // 分別支出 'other_spending', // 分別支出
@ -79,8 +79,8 @@ class EarningsSummary extends Model
'regular_update_amount' => 'decimal:2', 'regular_update_amount' => 'decimal:2',
'regular_update_reduction_count' => 'integer', 'regular_update_reduction_count' => 'integer',
'regular_update_reduction_amount' => 'decimal:2', 'regular_update_reduction_amount' => 'decimal:2',
'turnsum_count' => 'integer', 'lumpsum_count' => 'integer',
'turnsum' => 'decimal:2', 'lumpsum' => 'decimal:2',
'refunds' => 'decimal:2', 'refunds' => 'decimal:2',
'other_income' => 'decimal:2', 'other_income' => 'decimal:2',
'other_spending' => 'decimal:2', 'other_spending' => 'decimal:2',
@ -175,8 +175,8 @@ class EarningsSummary extends Model
SUM(regular_new_amount) as total_new_amount, SUM(regular_new_amount) as total_new_amount,
SUM(regular_update_count) as total_update_count, SUM(regular_update_count) as total_update_count,
SUM(regular_update_amount) as total_update_amount, SUM(regular_update_amount) as total_update_amount,
SUM(turnsum_count) as total_turnsum_count, SUM(lumpsum_count) as total_lumpsum_count,
SUM(turnsum) as total_turnsum, SUM(lumpsum) as total_lumpsum,
SUM(refunds) as total_refunds, SUM(refunds) as total_refunds,
SUM(reissue_count) as total_reissue_count, SUM(reissue_count) as total_reissue_count,
SUM(reissue_amount) as total_reissue_amount SUM(reissue_amount) as total_reissue_amount
@ -249,8 +249,8 @@ class EarningsSummary extends Model
'regular_update_amount' => 0.00, 'regular_update_amount' => 0.00,
'regular_update_reduction_count' => 0, 'regular_update_reduction_count' => 0,
'regular_update_reduction_amount' => 0.00, 'regular_update_reduction_amount' => 0.00,
'turnsum_count' => 0, 'lumpsum_count' => 0,
'turnsum' => 0.00, 'lumpsum' => 0.00,
'refunds' => 0.00, 'refunds' => 0.00,
'other_income' => 0.00, 'other_income' => 0.00,
'other_spending' => 0.00, 'other_spending' => 0.00,
@ -273,7 +273,7 @@ class EarningsSummary extends Model
{ {
return $this->regular_new_amount + return $this->regular_new_amount +
$this->regular_update_amount + $this->regular_update_amount +
$this->turnsum + $this->lumpsum +
$this->reissue_amount + $this->reissue_amount +
$this->other_income - $this->other_income -
$this->other_spending - $this->other_spending -

View File

@ -24,7 +24,7 @@ class HardwareCheckLog extends Model
* *
* @var string * @var string
*/ */
protected $primaryKey = 'log_id'; protected $primaryKey = 'hardware_check_log_id';
/** /**
* 一括代入可能な属性 * 一括代入可能な属性
@ -46,7 +46,7 @@ class HardwareCheckLog extends Model
* @var array * @var array
*/ */
protected $casts = [ protected $casts = [
'log_id' => 'integer', 'hardware_check_log_id' => 'integer',
'device_id' => 'integer', 'device_id' => 'integer',
'status' => 'integer', 'status' => 'integer',
'operator_id' => 'integer', 'operator_id' => 'integer',
@ -220,7 +220,7 @@ class HardwareCheckLog extends Model
{ {
return sprintf( return sprintf(
'HardwareCheckLog[ID:%d, Device:%d, Status:%s, Time:%s]', 'HardwareCheckLog[ID:%d, Device:%d, Status:%s, Time:%s]',
$this->log_id, $this->hardware_check_log_id,
$this->device_id, $this->device_id,
$this->getStatusNameAttribute(), $this->getStatusNameAttribute(),
$this->created_at ? $this->created_at->format('Y-m-d H:i:s') : 'N/A' $this->created_at ? $this->created_at->format('Y-m-d H:i:s') : 'N/A'

View File

@ -0,0 +1,97 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* 管轄駐輪場モデル - jurisdiction_parkingテーブル
*
* オペレータが管轄する駐輪場の情報を管理
*/
class JurisdictionParking extends Model
{
/**
* テーブル名
*
* @var string
*/
protected $table = 'jurisdiction_parking';
/**
* プライマリキー
*
* @var string
*/
protected $primaryKey = 'jurisdiction_parking_id';
/**
* タイムスタンプ使用
*
* @var bool
*/
public $timestamps = true;
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
/**
* 一括代入可能な属性
*
* @var array
*/
protected $fillable = [
'jurisdiction_parking_name',
'ope_id',
'park_id',
'operator_id'
];
/**
* キャストする属性
*
* @var array
*/
protected $casts = [
'jurisdiction_parking_id' => 'integer',
'ope_id' => 'integer',
'park_id' => 'integer',
'operator_id' => 'integer',
'created_at' => 'datetime',
'updated_at' => 'datetime'
];
/**
* オペレータとの関連
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function ope()
{
return $this->belongsTo(Ope::class, 'ope_id', 'ope_id');
}
/**
* 駐輪場との関連
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function park()
{
return $this->belongsTo(Park::class, 'park_id', 'park_id');
}
/**
* 指定駐輪場を管轄するオペレータIDリストを取得
*
* @param int $parkId 駐輪場ID
* @return array オペレータIDの配列
*/
public static function getOperatorIdsByPark(int $parkId): array
{
return self::where('park_id', $parkId)
->pluck('ope_id')
->toArray();
}
}

228
app/Models/Manager.php Normal file
View File

@ -0,0 +1,228 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* 駐輪場管理者モデル - managerテーブル
*
* 駐輪場管理者マスタ情報を管理するモデル
* 各駐輪場に紐づく管理者の情報、警報送信設定などを保持
*/
class Manager extends Model
{
/**
* テーブル名
*
* @var string
*/
protected $table = 'manager';
/**
* プライマリキー
*
* @var string
*/
protected $primaryKey = 'manager_id';
/**
* タイムスタンプ使用
*
* @var bool
*/
public $timestamps = true;
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
/**
* 一括代入可能な属性
*
* @var array
*/
protected $fillable = [
'manager_name', // 管理者名
'manager_type', // 管理者種別
'manager_parkid', // 所属駐輪場ID
'manager_device1', // デバイス1
'manager_device2', // デバイス2
'manager_mail', // メールアドレス
'manager_tel', // 電話番号
'manager_alert1', // アラート送信フラグ1
'manager_alert2', // アラート送信フラグ2
'manager_quit_flag', // 退職フラグ
'manager_quitday', // 退職日
'operator_id' // 登録オペレータID
];
/**
* キャストする属性
*
* @var array
*/
protected $casts = [
'manager_id' => 'integer',
'manager_parkid' => 'integer',
'manager_device1' => 'integer',
'manager_device2' => 'integer',
'manager_alert1' => 'boolean',
'manager_alert2' => 'boolean',
'manager_quit_flag' => 'boolean',
'operator_id' => 'integer',
'manager_quitday' => 'date',
'created_at' => 'datetime',
'updated_at' => 'datetime'
];
/**
* 所属駐輪場との関連
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function park()
{
return $this->belongsTo(Park::class, 'manager_parkid', 'park_id');
}
/**
* 登録オペレータとの関連
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function operator()
{
return $this->belongsTo(Ope::class, 'operator_id', 'ope_id');
}
/**
* アクティブな管理者のみを取得するスコープ
* (退職フラグ = 0
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('manager_quit_flag', 0);
}
/**
* メールアドレスが設定されている管理者のみを取得するスコープ
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeHasEmail($query)
{
return $query->whereNotNull('manager_mail')
->where('manager_mail', '!=', '');
}
/**
* 指定駐輪場の管理者を取得するスコープ
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param int $parkId 駐輪場ID
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeByPark($query, int $parkId)
{
return $query->where('manager_parkid', $parkId);
}
/**
* メール送信対象の駐輪場管理者を取得
*
* 条件:
* - 退職フラグ = 0(在職中)
* - メールアドレスが設定されている
*
* @return \Illuminate\Database\Eloquent\Collection
*/
public static function getMailTargetManagers()
{
return self::active()
->hasEmail()
->select(['manager_id', 'manager_name', 'manager_mail', 'manager_parkid'])
->get()
->map(function ($manager) {
return [
'manager_id' => $manager->manager_id,
'name' => $manager->manager_name,
'email' => $manager->manager_mail,
'park_id' => $manager->manager_parkid
];
});
}
/**
* 指定駐輪場のメール送信対象管理者を取得
*
* @param int $parkId 駐輪場ID
* @return \Illuminate\Database\Eloquent\Collection
*/
public static function getMailTargetManagersByPark(int $parkId)
{
return self::active()
->hasEmail()
->byPark($parkId)
->select(['manager_id', 'manager_name', 'manager_mail', 'manager_parkid'])
->get()
->map(function ($manager) {
return [
'manager_id' => $manager->manager_id,
'name' => $manager->manager_name,
'email' => $manager->manager_mail,
'park_id' => $manager->manager_parkid
];
});
}
/**
* 退職しているかどうかを判定
*
* @return bool 退職しているかどうか
*/
public function isQuit(): bool
{
return (bool) $this->manager_quit_flag;
}
/**
* アクティブ(在職中)かどうかを判定
*
* @return bool 在職中かどうか
*/
public function isActive(): bool
{
return !$this->isQuit();
}
/**
* メールアドレスが設定されているかどうかを判定
*
* @return bool メールアドレスが設定されているかどうか
*/
public function hasEmail(): bool
{
return !empty($this->manager_mail);
}
/**
* 文字列表現
*
* @return string
*/
public function __toString(): string
{
return sprintf(
'Manager[ID:%d, Name:%s, Park:%d, Email:%s]',
$this->manager_id,
$this->manager_name,
$this->manager_parkid,
$this->manager_mail ?? 'N/A'
);
}
}

View File

@ -24,7 +24,7 @@ class PrintJobLog extends Model
* *
* @var string * @var string
*/ */
protected $primaryKey = 'log_id'; protected $primaryKey = 'job_log_id';
/** /**
* 一括代入可能な属性 * 一括代入可能な属性
@ -49,7 +49,7 @@ class PrintJobLog extends Model
* @var array * @var array
*/ */
protected $casts = [ protected $casts = [
'log_id' => 'integer', 'job_log_id' => 'integer',
'park_id' => 'integer', 'park_id' => 'integer',
'user_id' => 'integer', 'user_id' => 'integer',
'contract_id' => 'integer', 'contract_id' => 'integer',
@ -242,7 +242,7 @@ class PrintJobLog extends Model
{ {
return sprintf( return sprintf(
'PrintJobLog[ID:%d, Process:%s, ErrorCode:%d, Time:%s]', 'PrintJobLog[ID:%d, Process:%s, ErrorCode:%d, Time:%s]',
$this->log_id, $this->job_log_id,
$this->process_name, $this->process_name,
$this->error_code, $this->error_code,
$this->created_at ? $this->created_at->format('Y-m-d H:i:s') : 'N/A' $this->created_at ? $this->created_at->format('Y-m-d H:i:s') : 'N/A'

85
app/Models/Setting.php Normal file
View File

@ -0,0 +1,85 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* 設定マスタモデル - settingテーブル
*
* システム全体の設定情報を管理するモデル
*/
class Setting extends Model
{
/**
* テーブル名
*
* @var string
*/
protected $table = 'setting';
/**
* プライマリキー
*
* @var string
*/
protected $primaryKey = 'setting_id';
/**
* タイムスタンプ使用
*
* @var bool
*/
public $timestamps = true;
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';
/**
* 一括代入可能な属性
*
* @var array
*/
protected $fillable = [
'edit_master',
'web_master',
'auto_change_date',
'auto_chage_master',
're-issue_alert_number',
'image_base_url1',
'image_base_url2',
'printable_alert_flag',
'printable_number',
'printable_alert_number',
'printer_keep_alive',
'operator_id'
];
/**
* キャストする属性
*
* @var array
*/
protected $casts = [
'setting_id' => 'integer',
'printable_alert_flag' => 'boolean',
'printable_number' => 'integer',
'printable_alert_number' => 'integer',
'printer_keep_alive' => 'integer',
'operator_id' => 'integer',
'auto_change_date' => 'datetime',
'created_at' => 'datetime',
'updated_at' => 'datetime'
];
/**
* 設定情報を取得通常はID=1の単一レコード)
*
* @return Setting|null
*/
public static function getSettings(): ?Setting
{
return self::first();
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -66,10 +66,10 @@
<thead> <thead>
<tr> <tr>
<th width="20%">駐輪場名</th> <th width="20%">駐輪場名</th>
<th width="15%">市町村名</th> <th width="30%">市町村名</th>
<th width="5%">駅名</th> <th width="20%">駅名</th>
@foreach($psections as $psection) @foreach($psections as $psection)
<th width="15%">{{ $psection->psection_subject }}</th> <th width="10%">{{ $psection->psection_subject }}</th>
@endforeach @endforeach
</tr> </tr>
</thead> </thead>
@ -207,7 +207,7 @@
html += '<div class="d-flex align-items-center mb-2">'; html += '<div class="d-flex align-items-center mb-2">';
html += '<span>' + zone.psection_subject + ':空き' + zone.zone_vacant + '台</span>'; html += '<span>' + zone.psection_subject + ':空き' + zone.zone_vacant + '台</span>';
if (zone.status == 1) { if (zone.status == 1) {
html += '<a href="{{route('user.info')}}" class="btn btn-sm btn-outline-success ml-2">定期契約</a>'; html += '<a href="{{route('regular_contract.create')}}" class="btn btn-sm btn-outline-success ml-2">定期契約</a>';
} else if (zone.status == 2) { } else if (zone.status == 2) {
html += '<a href="{{route('park_waitlist.index')}}" class="btn btn-sm btn-outline-primary ml-2">空き待ち予約</a>'; html += '<a href="{{route('park_waitlist.index')}}" class="btn btn-sm btn-outline-primary ml-2">空き待ち予約</a>';
} else if (zone.status == 3) { } else if (zone.status == 3) {

View File

@ -5,13 +5,18 @@
<div class="col-12 col-lg-10 offset-0 offset-lg-1 mt20 mb20"> <div class="col-12 col-lg-10 offset-0 offset-lg-1 mt20 mb20">
<h2 class="text-success text-center">お問い合わせ</h2> <h2 class="text-success text-center">お問い合わせ</h2>
<p>株式会社ソーリンへのご訪問ありがとうございます。 <p>株式会社ソーリンへのご訪問ありがとうございます。
お問い合わせいただくお客さまは、当社のホームページにおける<a href="{{ route('swo14_1') }}">個人情報の取り扱い</a>について、あらかじめご確認いただき、ご同意いただいた上でお問い合わせください。個人情報の開示、訂正、削除、利用停止については、<a href="{{ asset('assets/privacy_disclosure.pdf') }}">こちら</a>をご覧下さい。<br> お問い合わせいただくお客さまは、当社のホームページにおける<a href="{{ route('swo14_1') }}">個人情報の取り扱い</a>について、あらかじめご確認いただき、ご同意いただいた上でお問い合わせください。個人情報の開示、訂正、削除、利用停止については、<a href="{{ route('swo15_1') }}">こちら</a>をご覧下さい。<br>
また、メールから送信ができないお客様はお手数ですが、下記電話までご連絡をお願い致します。 また、メールから送信ができないお客様はお手数ですが、下記電話までご連絡をお願い致します。
携帯・スマートフォンからメールでのお問い合わせの際に、確実にご返信をさせていただくために、ドメイン (so-manager.com) の受信許可設定をお願い致します。</p> 携帯・スマートフォンからメールでのお問い合わせの際に、確実にご返信をさせていただくために、ドメイン (so-manager.com) の受信許可設定をお願い致します。</p>
<form class="form-contact form mt50" method="post" action="{{ route('swo7_2') }}"> <form class="form-contact form mt50" method="post" action="{{ route('swo7_2') }}">
@if($errors->any())
<div class="alert alert-danger error-message" role="alert">
@foreach ($errors->all() as $error){{ $error }}<br /> @endforeach
</div>
@endif
<div class="row"> <div class="row">
@foreach($form_data as $value) @foreach($form_data as $value)
<div class="col-lg-3">{{ $value[2] }}</div> <div class="col-lg-3">{!! preg_replace('/\*$/', '<span style="color:red;">*</span>', e($value[2])) !!}</div>
@if($value[1] == 'textarea') @if($value[1] == 'textarea')
<div class="col-lg-9"><textarea name="{{ $value[0] }}" cols="6" class="form-control">{{ old($value[0]) }}</textarea></div> <div class="col-lg-9"><textarea name="{{ $value[0] }}" cols="6" class="form-control">{{ old($value[0]) }}</textarea></div>
@elseif($value[1] == 'checkbox') @elseif($value[1] == 'checkbox')
@ -25,18 +30,10 @@
@endforeach @endforeach
</div> </div>
@else @else
<div class="col-lg-9"><input name="{{ $value[0] }}" type="{{ $value[1] }}" value="{{ old($value[0]) }}" class="form-control mb10"></div> <div class="col-lg-9"><input name="{{ $value[0] }}" type="{{ $value[1] }}" value="{{ old($value[0]) }}" class="form-control mb10" placeholder="{{ $value[3] }}"></div>
@endif @endif
@endforeach @endforeach
</div> </div>
<p style="color: red;">
@foreach($form_data as $value)
@if($errors->has($value[0]))
{{ $errors->first($value[0]) }}
@break;
@endif
@endforeach
</p>
<div class="col-lg-12 mt50 mb50 text-center"><button type="submit" class="btn btn-lg btn-success mb10">入力内容を確認する</button></div> <div class="col-lg-12 mt50 mb50 text-center"><button type="submit" class="btn btn-lg btn-success mb10">入力内容を確認する</button></div>
@csrf @csrf
</form> </form>

View File

@ -16,7 +16,7 @@
</div> </div>
<div class="col-12 col-lg-3 text-lg-center offset-0 offset-lg-1"><label>パスワード</label></div> <div class="col-12 col-lg-3 text-lg-center offset-0 offset-lg-1"><label>パスワード</label></div>
<div class="col-12 col-lg-7 mb10"> <div class="col-12 col-lg-7 mb10">
<input type="text" name="password" class="form-control form-control-lg" value="" /> <input type="password" name="password" class="form-control form-control-lg" value="" />
</div> </div>
<div class="col-12 col-lg-6 text-lg-center offset-0 offset-lg-3 mt30 mb50"> <div class="col-12 col-lg-6 text-lg-center offset-0 offset-lg-3 mt30 mb50">
<div class="text-danger">@if ($errors->any()) @foreach ($errors->all() as $error) {{ $error }} @endforeach @endif</div><br /> <div class="text-danger">@if ($errors->any()) @foreach ($errors->all() as $error) {{ $error }} @endforeach @endif</div><br />

View File

@ -54,6 +54,7 @@ Route::get('/error', function () { return view('general.error'); })->name('error
// コントローラー経由 // コントローラー経由
Route::post('/swo2_2', [MemberRegistrationController::class, 'sendMail'])->name('swo2_2'); Route::post('/swo2_2', [MemberRegistrationController::class, 'sendMail'])->name('swo2_2');
Route::get('/swo2_3', [MemberRegistrationController::class, 'index'])->name('swo2_3')->middleware('signed'); Route::get('/swo2_3', [MemberRegistrationController::class, 'index'])->name('swo2_3')->middleware('signed');
Route::get('/swo2_3B', [MemberRegistrationController::class, 'indexBack'])->name('swo2_3B');
Route::post('/swo2_4', [MemberRegistrationController::class, 'confirm'])->name('swo2_4'); Route::post('/swo2_4', [MemberRegistrationController::class, 'confirm'])->name('swo2_4');
Route::post('/swo2_5', [MemberRegistrationController::class, 'complete'])->name('swo2_5'); Route::post('/swo2_5', [MemberRegistrationController::class, 'complete'])->name('swo2_5');
Route::get('/swo4_1', [LoginController::class, 'login'])->name('swo4_1'); Route::get('/swo4_1', [LoginController::class, 'login'])->name('swo4_1');