Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

101 lines
4.2KB

  1. <?php
  2. namespace App\Transmission\Layouts;
  3. use App\Transmission\InterfaceID;
  4. use App\Transmission\Layouts\Code\QRTypeCode;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Carbon;
  7. use Illuminate\Support\Collection;
  8. class IF24_02Request extends IFRequest
  9. {
  10. public QRTypeCode $qrTypeCode;
  11. public string $publishingTerminalCode;
  12. public Carbon $publishingDate;
  13. public int $publishingNo;
  14. public int $shopNo;
  15. public int $discountTicketCode;
  16. public Carbon $adjustDatetime;
  17. public int $discountAmount;
  18. const COL_NAME_QR_TYPE_CODE = 'QRCodeType';
  19. const COL_NAME_PUBLISHING_TERMINAL_CODE = 'PublishingTerminalCode';
  20. const COL_NAME_PUBLISHING_DATE = 'PublishingDate';
  21. const COL_NAME_PUBLISHING_NO = 'PublishingNo';
  22. const COL_NAME_SHOP_NO = "ShopNo";
  23. const COL_NAME_DISCOUNT_TICKET_CODE = "DiscountTicketCode";
  24. const COL_NAME_ADJUST_DATETIME = "AdjustDatetime";
  25. const COL_NAME_DISCOUNT_AMOUNT = "DiscountAmount";
  26. public function __construct()
  27. {
  28. parent::__construct();
  29. $this->header->interfaceId = InterfaceID::IF24_02->value;
  30. $this->seasonTicketContract = collect();
  31. }
  32. public static function create(Request $request): self
  33. {
  34. self::validateLayout($request);
  35. $result = new IF24_02Request();
  36. $result->header = IFCommonHeader::createFromRequest($request);
  37. $result->qrTypeCode = QRTypeCode::from(data_get($request[self::COL_NAME_BODY], self::COL_NAME_QR_TYPE_CODE));
  38. $result->publishingTerminalCode = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_TERMINAL_CODE);
  39. $result->publishingNo = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_NO);
  40. // 日付変換とチェック
  41. $dateStr = data_get($request[self::COL_NAME_BODY], self::COL_NAME_PUBLISHING_DATE);
  42. $date = Carbon::createFromFormat("Ymd", $dateStr);
  43. if (!$date) {
  44. throw new Exception("日付変換失敗");
  45. }
  46. $result->publishingDate = $date;
  47. $result->shopNo = data_get($request[self::COL_NAME_BODY], self::COL_NAME_SHOP_NO);
  48. $result->discountTicketCode = data_get($request[self::COL_NAME_BODY], self::COL_NAME_DISCOUNT_TICKET_CODE);
  49. // 日付変換とチェック
  50. $dateStr = data_get($request[self::COL_NAME_BODY], self::COL_NAME_ADJUST_DATETIME);
  51. $date = Carbon::createFromFormat("YmdHi", $dateStr);
  52. if (!$date) {
  53. throw new Exception("日付変換失敗");
  54. }
  55. $result->adjustDatetime = $date;
  56. $result->discountAmount = data_get($request[self::COL_NAME_BODY], self::COL_NAME_DISCOUNT_AMOUNT);
  57. return $result;
  58. }
  59. public static function validateLayout(Request $request): void
  60. {
  61. $request->validate([
  62. IFCommonHeader::COL_NAME_BODY => 'required|array',
  63. IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_PUBLISHING_TERMINAL_CODE => 'required|string',
  64. IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_PUBLISHING_DATE => 'required|string',
  65. IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_PUBLISHING_NO => 'required|numeric',
  66. IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_SHOP_NO => 'required|numeric',
  67. IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_DISCOUNT_TICKET_CODE => 'required|numeric',
  68. IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_ADJUST_DATETIME => 'required|string',
  69. IFCommonHeader::COL_NAME_BODY . '.' . self::COL_NAME_DISCOUNT_AMOUNT => 'required|numeric',
  70. ]);
  71. }
  72. public function getBodyArray(): array
  73. {
  74. $body = [];
  75. $body[self::COL_NAME_PUBLISHING_TERMINAL_CODE] = $this->publishingTerminalCode;
  76. $body[self::COL_NAME_PUBLISHING_DATE] = $this->publishingDate->format("Ymd");
  77. $body[self::COL_NAME_PUBLISHING_NO] = $this->publishingNo;
  78. $body[self::COL_NAME_SHOP_NO] = $this->shopNo;
  79. $body[self::COL_NAME_DISCOUNT_TICKET_CODE] = $this->discountTicketCode;
  80. $body[self::COL_NAME_ADJUST_DATETIME] = $this->adjustDatetime->format("YmdHi");
  81. $body[self::COL_NAME_DISCOUNT_AMOUNT] = $this->discountAmount;
  82. return $body;
  83. }
  84. }