No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

116 líneas
3.9KB

  1. <?php
  2. namespace App\Http\Controllers\Web\Email;
  3. use App\Codes\Email;
  4. use App\Email\BaseEmailer;
  5. use App\Email\Members\EntryApprove;
  6. use App\Email\Members\EntryPaymentComplete;
  7. use App\Email\Members\TerminateOrderApprove;
  8. use App\Email\Members\UserInfoUpdateOrderApprove;
  9. use App\Email\Members\VehicleInfoUpdateOrderApprove;
  10. use App\Http\Controllers\Web\FromKintoneController;
  11. use App\Kintone\Models\SeasonTicketContract;
  12. use App\Kintone\Models\SeasonTicketContractEntry;
  13. use App\Kintone\Models\TerminateApplication;
  14. use App\Kintone\Models\UserInfoUpdateApplication;
  15. use App\Kintone\Models\VehicleInfoUpdateApplication;
  16. use App\Logic\EmailManager;
  17. use App\Util\LoggingUtil;
  18. use Exception;
  19. use Illuminate\Http\JsonResponse;
  20. use Illuminate\Http\Request;
  21. use LogicException;
  22. class EmailSendController extends FromKintoneController
  23. {
  24. private BaseEmailer|null $email = null;
  25. private EmailManager|null $emailManager = null;
  26. public function name(): string
  27. {
  28. return "メール送信依頼";
  29. }
  30. public function description(): string
  31. {
  32. return "メール送信依頼を登録する";
  33. }
  34. public function __construct(protected EmailSendParam $param)
  35. {
  36. parent::__construct();
  37. }
  38. protected function run(Request $request): JsonResponse
  39. {
  40. try {
  41. // メール作成
  42. $this->getEmail();
  43. // 送信
  44. if ($this->emailManager === null) {
  45. throw new LogicException("EmailManager不正");
  46. }
  47. $this->emailManager->confirm();
  48. } catch (Exception $e) {
  49. LoggingUtil::debugException($e);
  50. return $this->failedResponse();
  51. }
  52. return $this->successResponse();
  53. }
  54. private function getEmail()
  55. {
  56. $emailId = $this->param->emailId;
  57. if ($emailId === Email::TERMINATE_ORDER_APPROVE) {
  58. $application = TerminateApplication::findByApplicationNo($this->param->applicationNo);
  59. $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
  60. $this->setEmail(new TerminateOrderApprove($seasonTicketContract, $application));
  61. return;
  62. }
  63. if ($emailId === Email::VEHICLE_INFO_UPDATE_ORDER_APPROVE) {
  64. $application = VehicleInfoUpdateApplication::findByApplicationNo($this->param->applicationNo);
  65. $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
  66. $this->setEmail(new VehicleInfoUpdateOrderApprove($seasonTicketContract, $application));
  67. return;
  68. }
  69. if ($emailId === Email::USER_INFO_UPDATE_ORDER_APPROVE) {
  70. $application = UserInfoUpdateApplication::findByApplicationNo($this->param->applicationNo);
  71. $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo);
  72. $this->setEmail(new UserInfoUpdateOrderApprove($seasonTicketContract, $application));
  73. return;
  74. }
  75. if ($emailId === Email::ENTRY_APPROVE) {
  76. $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo);
  77. $parking = $entry->getParking();
  78. $plan = $entry->getPlan();
  79. $this->setEmail(new EntryApprove($parking, $entry, $plan));
  80. return;
  81. }
  82. if ($emailId === Email::ENTRY_PAYMENT_COMPLETE) {
  83. $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo);
  84. $parking = $entry->getParking();
  85. $plan = $entry->getPlan();
  86. $this->setEmail(new EntryPaymentComplete($parking, $entry, $plan));
  87. return;
  88. }
  89. if ($this->email === null || $this->emailManager === null) {
  90. throw new LogicException("setEmail不正");
  91. }
  92. }
  93. private function setEmail(BaseEmailer $email)
  94. {
  95. $this->email = $email;
  96. $this->emailManager = new EmailManager($email);
  97. }
  98. }