Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

80 lines
2.5KB

  1. <?php
  2. namespace App\Logics\QRService;
  3. use App\Codes\DepositTransferReason;
  4. use App\Codes\Model\QRServiceUsage;
  5. use App\Exceptions\AppCommonException;
  6. use App\Models\HtpmsCustomer\Mst\ShopNoRelation;
  7. use App\Models\HtpmsCustomer\QRService\PrintTicket;
  8. use App\Sessions\SessionUser;
  9. use Illuminate\Support\Carbon;
  10. class PrintingLogic
  11. {
  12. use DepositCheck;
  13. /**
  14. * サービス券を使用する
  15. *
  16. * @param integer $shopNo
  17. * @param string $parkingManagementCode
  18. * @param string $adjusterTerminalCode
  19. * @param Carbon $publishingDate
  20. * @param integer $seqNo
  21. * @param Carbon $adjustDatetime
  22. * @param integer $discountAmount
  23. * @return void
  24. */
  25. public static function use(
  26. int $shopNo,
  27. string $parkingManagementCode,
  28. string $adjusterTerminalCode,
  29. Carbon $publishingDate,
  30. int $seqNo,
  31. Carbon $adjustDatetime,
  32. int $discountAmount,
  33. ) {
  34. // 重複利用チェック
  35. $used = PrintTicket::wherePublishingTerminalCode($adjusterTerminalCode)
  36. ->wherePublishingDate($publishingDate)
  37. ->wherePublishingNo($seqNo)
  38. ->first();
  39. if ($used !== null) {
  40. $user = SessionUser::instance();
  41. $message = sprintf(
  42. "利用済み customer_code:%s parking_management_code:%s terminal:%s date:%s no:%d used_at:%s",
  43. $user->customerCode(),
  44. $parkingManagementCode,
  45. $adjusterTerminalCode,
  46. $publishingDate->format('Y/m/d'),
  47. $seqNo,
  48. $used->used_at->format('Y/m/d H:i:s')
  49. );
  50. throw new AppCommonException($message);
  51. }
  52. // 店舗特定
  53. $relation = ShopNoRelation::whereShopNo($shopNo)
  54. ->whereParkingManagementCode($parkingManagementCode)
  55. ->whereQrServiceUseage(QRServiceUsage::印字方式)
  56. ->firstOrFail();
  57. $qr = new PrintTicket();
  58. $qr->publishing_terminal_code = $adjusterTerminalCode;
  59. $qr->publishing_date = $publishingDate;
  60. $qr->publishing_no = $seqNo;
  61. $qr->shop_id = $relation->shop_id;
  62. $qr->parking_management_code = $parkingManagementCode;
  63. $qr->used_at = $adjustDatetime;
  64. $qr->discount_amount = $discountAmount;
  65. // デポジット処理
  66. self::useDeposit($qr->shop_id, $discountAmount, DepositTransferReason::駐車料金割引_印字);
  67. $qr->save();
  68. }
  69. }