|
- <?php
-
- namespace App\Transmission\Layouts;
-
- use App\Codes\VehicleTypeCode;
- use App\Models\SeasonTicketContract as ModelsSeasonTicketContract;
- use Exception;
- use Illuminate\Http\Request;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Str;
-
- class SeasonTicketContract
- {
- const COL_NAME_SEASON_TICKET_SEQ_NO = 'SeasonTicketSeqNo';
- const COL_NAME_IDM = 'Idm';
- const COL_NAME_VEHICLE_TYPE = 'VehicleType';
- const COL_NAME_CONTRACTOR_TYPE_LINE_NO = 'ContractorTypeLineNo';
- const COL_NAME_EXPIRATION_START_DATE = 'ExpirationStartDate';
- const COL_NAME_EXPIRATION_END_DATE = 'ExpirationEndDate';
- const COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO = 'NormalPeriodAdjustDivisionStartLineNo';
- const COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO = 'NormalPeriodAdjustDivisionEndLineNo';
- const COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO = 'StartedPeriodAdjustDivisionLineNo';
- const COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO = 'OutOfTermPeriodAdjustDivisionLineNo';
- const COL_NAME_INVALID_FLG = 'InvalidFlg';
- const COL_NAME_UPDATE_DATEMTIME = 'UpdateDatemtime';
-
- public int $seasonTicketSeqNo = 0;
- public string $idm = '';
- public int $vehicleType = 0;
- public int $contractorTypeLineNo = 0;
- public string $expirationStartDate = '';
- public string $expirationEndDate = '';
- public int $normalPeriodAdjustDivisionStartLineNo = 0;
- public int $normalPeriodAdjustDivisionEndLineNo = 0;
- public int $startedPeriodAdjustDivisionLineNo = 0;
- public int $outOfTermPeriodAdjustDivisionLineNo = 0;
- public int $invalidFlg = 0;
- public string $updateDatemtime = '';
-
-
- public static function validateLayout(Request $request, string $data_path = null): void
- {
- $request->validate(self::getValidateArray($data_path));
- }
-
- private static function getValidateArray(string $data_path = null)
- {
- $rules = [
- self::COL_NAME_SEASON_TICKET_SEQ_NO => 'required|numeric',
- self::COL_NAME_IDM => 'nullable|string',
- self::COL_NAME_VEHICLE_TYPE => 'required|numeric',
- self::COL_NAME_CONTRACTOR_TYPE_LINE_NO => 'required|numeric',
- self::COL_NAME_EXPIRATION_START_DATE => 'nullable|string',
- self::COL_NAME_EXPIRATION_END_DATE => 'nullable|string',
- self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO => 'required|numeric',
- self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO => 'required|numeric',
- self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO => 'required|numeric',
- self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO => 'required|numeric',
- self::COL_NAME_INVALID_FLG => 'required|numeric',
- self::COL_NAME_UPDATE_DATEMTIME => 'required|string',
- ];
-
- $result = [];
- foreach ($rules as $key => $val) {
- if ($data_path !== null) {
- $result[$data_path . '.*.' . $key] = $val;
- } else {
- $result[$key] = $val;
- }
- }
- return $result;
- }
-
-
- public static function createFromArray(array $data, bool $snakecase = false): self
- {
- $ele = new SeasonTicketContract();
-
- $func = function (&$target, string $col) use ($data, $snakecase) {
- if ($snakecase) {
- $key = Str::snake($col);
- if (isset($data[$key])) {
- $val = $data[$key];
- if ($val instanceof VehicleTypeCode) {
- $target = $val->value;
- } else if ($val === null) {
- $target = "";
- } else {
- $target = $val;
- }
- }
- } else {
- $target = $data[$col] ?? "";
- }
- };
- $func($ele->seasonTicketSeqNo, self::COL_NAME_SEASON_TICKET_SEQ_NO);
- $func($ele->idm, self::COL_NAME_IDM);
- $func($ele->vehicleType, self::COL_NAME_VEHICLE_TYPE);
- $func($ele->contractorTypeLineNo, self::COL_NAME_CONTRACTOR_TYPE_LINE_NO);
- $func($ele->expirationStartDate, self::COL_NAME_EXPIRATION_START_DATE);
- $func($ele->expirationEndDate, self::COL_NAME_EXPIRATION_END_DATE);
- $func($ele->normalPeriodAdjustDivisionStartLineNo, self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO);
- $func($ele->normalPeriodAdjustDivisionEndLineNo, self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO);
- $func($ele->startedPeriodAdjustDivisionLineNo, self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO);
- $func($ele->outOfTermPeriodAdjustDivisionLineNo, self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO);
- $func($ele->invalidFlg, self::COL_NAME_INVALID_FLG);
- $func($ele->updateDatemtime, self::COL_NAME_UPDATE_DATEMTIME);
- return $ele;
- }
-
- public static function createFromModel(ModelsSeasonTicketContract $model): self
- {
- $ele = new SeasonTicketContract();
- $ele->seasonTicketSeqNo = $model->season_ticket_seq_no;
- $ele->idm = $model->idm;
- $ele->vehicleType = $model->vehicle_type->value;
- $ele->contractorTypeLineNo = $model->contractor_type_line_no;
- $ele->expirationStartDate = is_null($model->expiration_start_date) ? "" : $model->expiration_start_date->format('Ymd');
- $ele->expirationEndDate = is_null($model->expiration_end_date) ? "" : $model->expiration_end_date->format('Ymd');
- $ele->normalPeriodAdjustDivisionStartLineNo = $model->normal_period_adjust_division_start_line_no;
- $ele->normalPeriodAdjustDivisionEndLineNo = $model->normal_period_adjust_division_end_line_no;
- $ele->startedPeriodAdjustDivisionLineNo = $model->started_period_adjust_division_line_no;
- $ele->outOfTermPeriodAdjustDivisionLineNo = $model->out_of_term_period_adjust_division_line_no;
- $ele->invalidFlg = $model->invalid_flg;
- $ele->updateDatemtime = $model->update_datemtime->format('YmdHisv');
- return $ele;
- }
-
- public function toArray(): array
- {
- $data = [];
- $data[self::COL_NAME_SEASON_TICKET_SEQ_NO] = $this->seasonTicketSeqNo;
- $data[self::COL_NAME_IDM] = $this->idm;
- $data[self::COL_NAME_VEHICLE_TYPE] = $this->vehicleType;
- $data[self::COL_NAME_CONTRACTOR_TYPE_LINE_NO] = $this->contractorTypeLineNo;
- $data[self::COL_NAME_EXPIRATION_START_DATE] = $this->expirationStartDate;
- $data[self::COL_NAME_EXPIRATION_END_DATE] = $this->expirationEndDate;
- $data[self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO] = $this->normalPeriodAdjustDivisionStartLineNo;
- $data[self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO] = $this->normalPeriodAdjustDivisionEndLineNo;
- $data[self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO] = $this->startedPeriodAdjustDivisionLineNo;
- $data[self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO] = $this->outOfTermPeriodAdjustDivisionLineNo;
- $data[self::COL_NAME_INVALID_FLG] = $this->invalidFlg;
- $data[self::COL_NAME_UPDATE_DATEMTIME] = $this->updateDatemtime;
- return $data;
- }
-
- /**
- * モデルへデータをセットする
- */
- public function fillToModel(ModelsSeasonTicketContract $model): void
- {
- if ($this->expirationStartDate !== "") {
- $expirationStartDate = Carbon::createFromFormat('Ymd', $this->expirationStartDate);
- if (!$expirationStartDate->isValid()) throw new Exception('日付不正');
- $model->expiration_start_date = $expirationStartDate;
- } else {
- $model->expiration_start_date = null;
- }
- if ($this->expirationEndDate !== "") {
- $expirationEndDate = Carbon::createFromFormat('Ymd', $this->expirationEndDate);
- if (!$expirationEndDate->isValid()) throw new Exception('日付不正');
- $model->expiration_end_date = $expirationEndDate;
- } else {
- $model->expiration_end_date = null;
- }
- $updateDatemtime = Carbon::createFromFormat('YmdHisv', $this->updateDatemtime);
- if (!$updateDatemtime->isValid()) throw new Exception('日付不正');
- $model->update_datemtime = $updateDatemtime;
-
- $model->vehicle_type = VehicleTypeCode::from($this->vehicleType);
- $model->idm = $this->idm;
- }
- }
|