123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- namespace App\Http\Services;
- use App\Models\Appointment;
- use App\Models\AccountInvite;
- use Illuminate\Support\Facades\Http;
- use Illuminate\Support\Facades\View;
- use Barryvdh\DomPDF\Facade\Pdf;
- class EmailService
- {
- protected $fromEmailAddress;
- protected $emailFromName;
- protected $secret;
- public $appUrl;
- public $appInternalName;
- public $stringMappingConfig;
- public function __construct()
- {
- $this->secret = 'b4mC2TeVuZqvcUv';
- $this->fromEmailAddress = config('app.fromEmailAddress');
- $this->emailFromName = config('app.emailFromName');
- $this->appUrl = config('app.url');
- $this->appInternalName = config('app.internalName');
- $this->stringMappingConfig = config('constants.' . $this->appInternalName);
- }
- protected function callJava($endPoint, $data)
- {
- $data['apiKey'] = $this->secret;
- $url = config('stag.backendUrl') . $endPoint;
- $response = Http::asForm()
- ->withHeaders([
- 'sessionKey' => request()->cookie('sessionKey')
- ])
- ->post($url, $data)
- ->body();
- return json_decode($response, true);
- }
- public function getValidToEmailAddress($email){
- if(config('app.env') !== 'production'){
- return config('app.devEmailAddress');
- }
- return $email;
- }
- //Emails
- public function notifyClientOnNewAppointment(Appointment $appointment)
- {
- $toEmailAddress = $this->getValidToEmailAddress($appointment->client->email_address);
- if(!$toEmailAddress) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $toEmailAddress = $toEmailAddress;
- $html = (string) view('emails.templates.client-new-appointment', compact('toEmailAddress', 'appointment', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = '';
- $params = [
- 'subject' => 'An appointment has been scheduled',
- 'htmlBody' => $html,
- 'plainTextBody' => $plainText,
- 'toAddress' => $toEmailAddress,
- 'fromEmail' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- ];
- $response = $this->callJava('/email/send', $params);
- return $response;
- }
- public function notifyProOnNewAppointment(Appointment $appointment)
- {
- $toEmailAddress = $this->getValidToEmailAddress($appointment->pro->email_address);
- if(!$toEmailAddress) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $toEmailAddress = $toEmailAddress;
- $html = (string) view('emails.templates.pro-new-appointment', compact('toEmailAddress', 'appointment', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = '';
- $params = [
- 'subject' => 'An appointment has been scheduled',
- 'htmlBody' => $html,
- 'plainTextBody' => $plainText,
- 'toAddress' => $toEmailAddress,
- 'fromEmail' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- ];
- $response = $this->callJava('/email/send', $params);
- return $response;
- }
- public function notifyClientToConfirmAppointment(Appointment $appointment)
- {
- $toEmailAddress = $this->getValidToEmailAddress($appointment->client->email_address);
- if(!$toEmailAddress) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $toEmailAddress = $toEmailAddress;
- $html = (string) view('emails.templates.client-confirm-appointment', compact('toEmailAddress', 'appointment', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = '';
- $params = [
- 'subject' => 'Confirm Appointment',
- 'htmlBody' => $html,
- 'plainTextBody' => $plainText,
- 'toAddress' => $toEmailAddress,
- 'fromEmail' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- ];
- $response = $this->callJava('/email/send', $params);
- return $response;
- }
- public function notifyAccountInvite(AccountInvite $accountInvite)
- {
- $toEmailAddress = $this->getValidToEmailAddress($accountInvite->to_email_address);
- if(!$toEmailAddress) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $toEmailAddress = $toEmailAddress;
- $html = (string) view('emails.templates.account-invite', compact('toEmailAddress', 'accountInvite', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = '';
- $params = [
- 'subject' => 'Account Invite',
- 'htmlBody' => $html,
- 'plainTextBody' => $plainText,
- 'toAddress' => $toEmailAddress,
- 'fromEmail' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- ];
- $response = $this->callJava('/email/send', $params);
- return $response;
- }
- }
|