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; } }