您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

174 行
8.3KB

  1. <?php
  2. namespace App\Transmission\Layouts;
  3. use App\Codes\VehicleTypeCode;
  4. use App\Models\SeasonTicketContract as ModelsSeasonTicketContract;
  5. use Exception;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Str;
  9. class SeasonTicketContract
  10. {
  11. const COL_NAME_SEASON_TICKET_SEQ_NO = 'SeasonTicketSeqNo';
  12. const COL_NAME_IDM = 'Idm';
  13. const COL_NAME_VEHICLE_TYPE = 'VehicleType';
  14. const COL_NAME_CONTRACTOR_TYPE_LINE_NO = 'ContractorTypeLineNo';
  15. const COL_NAME_EXPIRATION_START_DATE = 'ExpirationStartDate';
  16. const COL_NAME_EXPIRATION_END_DATE = 'ExpirationEndDate';
  17. const COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO = 'NormalPeriodAdjustDivisionStartLineNo';
  18. const COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO = 'NormalPeriodAdjustDivisionEndLineNo';
  19. const COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO = 'StartedPeriodAdjustDivisionLineNo';
  20. const COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO = 'OutOfTermPeriodAdjustDivisionLineNo';
  21. const COL_NAME_INVALID_FLG = 'InvalidFlg';
  22. const COL_NAME_UPDATE_DATEMTIME = 'UpdateDatemtime';
  23. public int $seasonTicketSeqNo = 0;
  24. public string $idm = '';
  25. public int $vehicleType = 0;
  26. public int $contractorTypeLineNo = 0;
  27. public string $expirationStartDate = '';
  28. public string $expirationEndDate = '';
  29. public int $normalPeriodAdjustDivisionStartLineNo = 0;
  30. public int $normalPeriodAdjustDivisionEndLineNo = 0;
  31. public int $startedPeriodAdjustDivisionLineNo = 0;
  32. public int $outOfTermPeriodAdjustDivisionLineNo = 0;
  33. public int $invalidFlg = 0;
  34. public string $updateDatemtime = '';
  35. public static function validateLayout(Request $request, string $data_path = null): void
  36. {
  37. $request->validate(self::getValidateArray($data_path));
  38. }
  39. private static function getValidateArray(string $data_path = null)
  40. {
  41. $rules = [
  42. self::COL_NAME_SEASON_TICKET_SEQ_NO => 'required|numeric',
  43. self::COL_NAME_IDM => 'nullable|string',
  44. self::COL_NAME_VEHICLE_TYPE => 'required|numeric',
  45. self::COL_NAME_CONTRACTOR_TYPE_LINE_NO => 'required|numeric',
  46. self::COL_NAME_EXPIRATION_START_DATE => 'nullable|string',
  47. self::COL_NAME_EXPIRATION_END_DATE => 'nullable|string',
  48. self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO => 'required|numeric',
  49. self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO => 'required|numeric',
  50. self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO => 'required|numeric',
  51. self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO => 'required|numeric',
  52. self::COL_NAME_INVALID_FLG => 'required|numeric',
  53. self::COL_NAME_UPDATE_DATEMTIME => 'required|string',
  54. ];
  55. $result = [];
  56. foreach ($rules as $key => $val) {
  57. if ($data_path !== null) {
  58. $result[$data_path . '.*.' . $key] = $val;
  59. } else {
  60. $result[$key] = $val;
  61. }
  62. }
  63. return $result;
  64. }
  65. public static function createFromArray(array $data, bool $snakecase = false): self
  66. {
  67. $ele = new SeasonTicketContract();
  68. $func = function (&$target, string $col) use ($data, $snakecase) {
  69. if ($snakecase) {
  70. $key = Str::snake($col);
  71. if (isset($data[$key])) {
  72. $val = $data[$key];
  73. if ($val instanceof VehicleTypeCode) {
  74. $target = $val->value;
  75. } else if ($val === null) {
  76. $target = "";
  77. } else {
  78. $target = $val;
  79. }
  80. }
  81. } else {
  82. $target = $data[$col] ?? "";
  83. }
  84. };
  85. $func($ele->seasonTicketSeqNo, self::COL_NAME_SEASON_TICKET_SEQ_NO);
  86. $func($ele->idm, self::COL_NAME_IDM);
  87. $func($ele->vehicleType, self::COL_NAME_VEHICLE_TYPE);
  88. $func($ele->contractorTypeLineNo, self::COL_NAME_CONTRACTOR_TYPE_LINE_NO);
  89. $func($ele->expirationStartDate, self::COL_NAME_EXPIRATION_START_DATE);
  90. $func($ele->expirationEndDate, self::COL_NAME_EXPIRATION_END_DATE);
  91. $func($ele->normalPeriodAdjustDivisionStartLineNo, self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO);
  92. $func($ele->normalPeriodAdjustDivisionEndLineNo, self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO);
  93. $func($ele->startedPeriodAdjustDivisionLineNo, self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO);
  94. $func($ele->outOfTermPeriodAdjustDivisionLineNo, self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO);
  95. $func($ele->invalidFlg, self::COL_NAME_INVALID_FLG);
  96. $func($ele->updateDatemtime, self::COL_NAME_UPDATE_DATEMTIME);
  97. return $ele;
  98. }
  99. public static function createFromModel(ModelsSeasonTicketContract $model): self
  100. {
  101. $ele = new SeasonTicketContract();
  102. $ele->seasonTicketSeqNo = $model->season_ticket_seq_no;
  103. $ele->idm = $model->idm;
  104. $ele->vehicleType = $model->vehicle_type->value;
  105. $ele->contractorTypeLineNo = $model->contractor_type_line_no;
  106. $ele->expirationStartDate = is_null($model->expiration_start_date) ? "" : $model->expiration_start_date->format('Ymd');
  107. $ele->expirationEndDate = is_null($model->expiration_end_date) ? "" : $model->expiration_end_date->format('Ymd');
  108. $ele->normalPeriodAdjustDivisionStartLineNo = $model->normal_period_adjust_division_start_line_no;
  109. $ele->normalPeriodAdjustDivisionEndLineNo = $model->normal_period_adjust_division_end_line_no;
  110. $ele->startedPeriodAdjustDivisionLineNo = $model->started_period_adjust_division_line_no;
  111. $ele->outOfTermPeriodAdjustDivisionLineNo = $model->out_of_term_period_adjust_division_line_no;
  112. $ele->invalidFlg = $model->invalid_flg;
  113. $ele->updateDatemtime = $model->update_datemtime->format('YmdHisv');
  114. return $ele;
  115. }
  116. public function toArray(): array
  117. {
  118. $data = [];
  119. $data[self::COL_NAME_SEASON_TICKET_SEQ_NO] = $this->seasonTicketSeqNo;
  120. $data[self::COL_NAME_IDM] = $this->idm;
  121. $data[self::COL_NAME_VEHICLE_TYPE] = $this->vehicleType;
  122. $data[self::COL_NAME_CONTRACTOR_TYPE_LINE_NO] = $this->contractorTypeLineNo;
  123. $data[self::COL_NAME_EXPIRATION_START_DATE] = $this->expirationStartDate;
  124. $data[self::COL_NAME_EXPIRATION_END_DATE] = $this->expirationEndDate;
  125. $data[self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_START_LINE_NO] = $this->normalPeriodAdjustDivisionStartLineNo;
  126. $data[self::COL_NAME_NORMAL_PERIOD_ADJUST_DIVISION_END_LINE_NO] = $this->normalPeriodAdjustDivisionEndLineNo;
  127. $data[self::COL_NAME_STARTED_PERIOD_ADJUST_DIVISION_LINE_NO] = $this->startedPeriodAdjustDivisionLineNo;
  128. $data[self::COL_NAME_OUT_OF_TERM_PERIOD_ADJUST_DIVISION_LINE_NO] = $this->outOfTermPeriodAdjustDivisionLineNo;
  129. $data[self::COL_NAME_INVALID_FLG] = $this->invalidFlg;
  130. $data[self::COL_NAME_UPDATE_DATEMTIME] = $this->updateDatemtime;
  131. return $data;
  132. }
  133. /**
  134. * モデルへデータをセットする
  135. */
  136. public function fillToModel(ModelsSeasonTicketContract $model): void
  137. {
  138. if ($this->expirationStartDate !== "") {
  139. $expirationStartDate = Carbon::createFromFormat('Ymd', $this->expirationStartDate);
  140. if (!$expirationStartDate->isValid()) throw new Exception('日付不正');
  141. $model->expiration_start_date = $expirationStartDate;
  142. } else {
  143. $model->expiration_start_date = null;
  144. }
  145. if ($this->expirationEndDate !== "") {
  146. $expirationEndDate = Carbon::createFromFormat('Ymd', $this->expirationEndDate);
  147. if (!$expirationEndDate->isValid()) throw new Exception('日付不正');
  148. $model->expiration_end_date = $expirationEndDate;
  149. } else {
  150. $model->expiration_end_date = null;
  151. }
  152. $updateDatemtime = Carbon::createFromFormat('YmdHisv', $this->updateDatemtime);
  153. if (!$updateDatemtime->isValid()) throw new Exception('日付不正');
  154. $model->update_datemtime = $updateDatemtime;
  155. $model->vehicle_type = VehicleTypeCode::from($this->vehicleType);
  156. $model->idm = $this->idm;
  157. }
  158. }