|
- <?php
-
- namespace App\Transmission\Layouts;
-
- use App\Transmission\InterfaceID;
- use Illuminate\Http\Request;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Collection;
-
- class IF24_01Request extends IFRequest
- {
- /** 発行端末 */
- public string $publishingTerminalCode;
-
- /** 発行日 */
- public Carbon $publishingDate;
-
- /** 発行連番 */
- public int $publishingNo;
-
- const COL_NAME_PUBLISHING_TERMINAL_CODE = 'PublishingTerminalCode';
- const COL_NAME_PUBLISHING_DATE = 'PublishingDate';
- const COL_NAME_PUBLISHING_NO = 'PublishingNo';
-
- public function __construct()
- {
- parent::__construct();
- $this->header->interfaceId = InterfaceID::IF24_01->value;
- $this->seasonTicketContract = collect();
- }
-
- public static function create(Request $request): self
- {
- self::validateLayout($request);
-
- $result = new IF24_01Request();
- $result->header = IFCommonHeader::createFromRequest($request);
-
- $result->publishingTerminalCode = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_TERMINAL_CODE);
-
- // 日付変換とチェック
- $dateStr = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_DATE);
- $date = Carbon::createFromFormat("Ymd", $dateStr);
- if (!$date) {
- throw new Exception("日付変換失敗");
- }
- $result->publishingDate = $date;
-
- $result->publishingNo = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_NO);
- return $result;
- }
-
- public static function validateLayout(Request $request): void
- {
- $request->validate([
- IFCommonHeader::COL_NAME_BODY => 'required|array',
- IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_PUBLISHING_TERMINAL_CODE => 'required|string',
- IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_PUBLISHING_DATE => 'required|string',
- IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_PUBLISHING_NO => 'required|numeric',
- ]);
- }
-
- public function getBodyArray(): array
- {
- $body = [];
- $body[self::COL_NAME_PUBLISHING_TERMINAL_CODE] = $this->publishingTerminalCode;
- $body[self::COL_NAME_PUBLISHING_DATE] = $this->publishingDate->format("Ymd");
- $body[self::COL_NAME_PUBLISHING_NO] = $this->publishingNo;
- return $body;
- }
- }
|