header->interfaceId = InterfaceID::IF24_02->value; $this->seasonTicketContract = collect(); } public static function create(Request $request): self { self::validateLayout($request); $result = new IF24_02Request(); $result->header = IFCommonHeader::createFromRequest($request); $result->qrTypeCode = QRTypeCode::from(data_get($request[self::COL_NAME_BODY], self::COL_NAME_QR_TYPE_CODE)); $result->publishingTerminalCode = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_TERMINAL_CODE); $result->publishingNo = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_NO); // 日付変換とチェック $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->shopNo = data_get($request[self::COL_NAME_BODY], self::COL_NAME_SHOP_NO); $result->discountTicketCode = data_get($request[self::COL_NAME_BODY], self::COL_NAME_DISCOUNT_TICKET_CODE); // 日付変換とチェック $dateStr = data_get($request[self::COL_NAME_BODY], self::COL_NAME_ADJUST_DATETIME); $date = Carbon::createFromFormat("YmdHi", $dateStr); if (!$date) { throw new Exception("日付変換失敗"); } $result->adjustDatetime = $date; $result->discountAmount = data_get($request[self::COL_NAME_BODY], self::COL_NAME_DISCOUNT_AMOUNT); 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', IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_SHOP_NO => 'required|numeric', IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_DISCOUNT_TICKET_CODE => 'required|numeric', IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_ADJUST_DATETIME => 'required|string', IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_DISCOUNT_AMOUNT => '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; $body[self::COL_NAME_SHOP_NO] = $this->shopNo; $body[self::COL_NAME_DISCOUNT_TICKET_CODE] = $this->discountTicketCode; $body[self::COL_NAME_ADJUST_DATETIME] = $this->adjustDatetime->format("YmdHi"); $body[self::COL_NAME_DISCOUNT_AMOUNT] = $this->discountAmount; return $body; } }