EmailService.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace App\Http\Services;
  3. use App\Models\Appointment;
  4. use Illuminate\Support\Facades\Http;
  5. use Illuminate\Support\Facades\View;
  6. use Barryvdh\DomPDF\Facade\Pdf;
  7. class EmailService
  8. {
  9. protected $fromEmailAddress;
  10. protected $emailFromName;
  11. protected $secret;
  12. public $appUrl;
  13. public $appInternalName;
  14. public $stringMappingConfig;
  15. public function __construct()
  16. {
  17. $this->secret = 'b4mC2TeVuZqvcUv';
  18. $this->fromEmailAddress = config('app.fromEmailAddress');
  19. $this->emailFromName = config('app.emailFromName');
  20. $this->appUrl = config('app.url');
  21. $this->appInternalName = config('app.internalName');
  22. $this->stringMappingConfig = config('constants.' . $this->appInternalName);
  23. }
  24. protected function callJava($endPoint, $data)
  25. {
  26. $data['apiKey'] = $this->secret;
  27. $url = config('stag.backendUrl') . $endPoint;
  28. $response = Http::asForm()
  29. ->withHeaders([
  30. 'sessionKey' => request()->cookie('sessionKey')
  31. ])
  32. ->post($url, $data)
  33. ->body();
  34. return json_decode($response, true);
  35. }
  36. public function getValidToEmailAddress($email){
  37. if(config('app.env') !== 'production'){
  38. return config('app.devEmailAddress');
  39. }
  40. return $email;
  41. }
  42. //Emails
  43. public function notifyClientOnNewAppointment(Appointment $appointment)
  44. {
  45. $toEmailAddress = $this->getValidToEmailAddress($appointment->client->email_address);
  46. if(!$toEmailAddress) return;
  47. $appInternalName = $this->appInternalName;
  48. $stringMappingConfig = $this->stringMappingConfig;
  49. $appUrl = $this->appUrl;
  50. $emailFromName = $this->emailFromName;
  51. $toEmailAddress = $toEmailAddress;
  52. $html = (string) view('emails.templates.client-new-appointment', compact('toEmailAddress', 'appointment', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  53. $plainText = '';
  54. $params = [
  55. 'subject' => 'An appointment has been scheduled',
  56. 'htmlBody' => $html,
  57. 'plainTextBody' => $plainText,
  58. 'toAddress' => $toEmailAddress,
  59. 'fromEmail' => $this->fromEmailAddress,
  60. 'fromName' => $this->emailFromName,
  61. ];
  62. $response = $this->callJava('/email/send', $params);
  63. return $response;
  64. }
  65. public function notifyProOnNewAppointment(Appointment $appointment)
  66. {
  67. $toEmailAddress = $this->getValidToEmailAddress($appointment->pro->email_address);
  68. if(!$toEmailAddress) return;
  69. $appInternalName = $this->appInternalName;
  70. $stringMappingConfig = $this->stringMappingConfig;
  71. $appUrl = $this->appUrl;
  72. $emailFromName = $this->emailFromName;
  73. $toEmailAddress = $toEmailAddress;
  74. $html = (string) view('emails.templates.pro-new-appointment', compact('toEmailAddress', 'appointment', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  75. $plainText = '';
  76. $params = [
  77. 'subject' => 'An appointment has been scheduled',
  78. 'htmlBody' => $html,
  79. 'plainTextBody' => $plainText,
  80. 'toAddress' => $toEmailAddress,
  81. 'fromEmail' => $this->fromEmailAddress,
  82. 'fromName' => $this->emailFromName,
  83. ];
  84. $response = $this->callJava('/email/send', $params);
  85. return $response;
  86. }
  87. public function notifyClientToConfirmAppointment(Appointment $appointment)
  88. {
  89. $toEmailAddress = $this->getValidToEmailAddress($appointment->client->email_address);
  90. if(!$toEmailAddress) return;
  91. $appInternalName = $this->appInternalName;
  92. $stringMappingConfig = $this->stringMappingConfig;
  93. $appUrl = $this->appUrl;
  94. $emailFromName = $this->emailFromName;
  95. $toEmailAddress = $toEmailAddress;
  96. $html = (string) view('emails.templates.client-confirm-appointment', compact('toEmailAddress', 'appointment', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  97. $plainText = '';
  98. $params = [
  99. 'subject' => 'Confirm Appointment',
  100. 'htmlBody' => $html,
  101. 'plainTextBody' => $plainText,
  102. 'toAddress' => $toEmailAddress,
  103. 'fromEmail' => $this->fromEmailAddress,
  104. 'fromName' => $this->emailFromName,
  105. ];
  106. $response = $this->callJava('/email/send', $params);
  107. return $response;
  108. }
  109. }