123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- <?php
- namespace App\Http\Services;
- use App\Models\PromoCode;
- use App\Models\StoreOrder;
- use Illuminate\Support\Facades\Http;
- use Illuminate\Support\Facades\View;
- use Illuminate\Support\Facades\Storage;
- use App\Models\User;
- class EmailService
- {
- protected $fromEmailAddress;
- protected $emailFromName;
- protected $secret;
- public $appUrl;
- public $appInternalName;
- public $stringMappingConfig;
- public function __construct()
- {
- $this->secret = 'Superman2022@';
- $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, $sessionKey, $attachment = null)
- {
- $data['secret'] = $this->secret;
- $url = config('app.backendUrl') . $endPoint;
- if($attachment){
- $response = Http::asMultipart()
- ->attach(
- $attachment['fileName'],
- $attachment['contents'],
- $attachment['name']
- )
- ->withHeaders([
- 'sessionKey' => $sessionKey
- ])
- ->post($url, $data)
- ->body();
- }else{
- $response = Http::asForm()
- ->withHeaders([
- 'sessionKey' => $sessionKey
- ])
- ->post($url, $data)
- ->body();
- }
- return json_decode($response, true);
- }
- //Emails
- public function sendUserPasswordResetEmail(User $user)
- {
- if(!$user->getEmail()) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.user-reset-password', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = (string) null;
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => $user->getEmail(),
- 'subject' => 'Reset Password',
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- public function sendOrderInvoice(StoreOrder $storeOrder)
- {
- $user = $storeOrder->user;
- if(!$user) return;
- if(!@$user->getEmail()) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.invoice', compact('user', 'storeOrder', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = (string) view('emails.templates.invoice-txt', compact('user', 'storeOrder', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => $user->getEmail(),
- 'subject' => 'Invoice from ' . $stringMappingConfig['name'] . ' #' . $storeOrder->iid ?? $storeOrder->id,
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- public function notifyUserOnFailedTransaction(User $user, StoreOrder $storeOrder)
- {
- if(!@$user->getEmail()) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.user-failed-order-charge', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = (string) view('emails.templates.user-failed-order-charge-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => $user->getEmail(),
- 'subject' => 'Failed to process card payment',
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- public function notifyUserOnShippedOrder(User $user, $shippingDetails)
- {
- if(!@$user->getEmail()) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.user-order-shipped', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'shippingDetails'));
- $plainText = (string) view('emails.templates.user-order-shipped-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'shippingDetails'));
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => $user->getEmail(),
- 'subject' => 'Your order is on the way',
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- public function sendUserWelcomeEmail(User $user, $temporaryPassword = null)
- {
- if (!$user->getEmail()) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.user-welcome', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'temporaryPassword'));
- $plainText = (string) view('emails.templates.user-welcome-txt', compact('user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig', 'temporaryPassword'));
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => $user->getEmail(),
- 'subject' => 'Welcome!',
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- public function sendUserOrderChargeSuccessful(User $user, StoreOrder $storeOrder)
- {
- if (!$user->getEmail()) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.user-payment-successful', compact('storeOrder', 'user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = (string) '';
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => $user->getEmail(),
- 'subject' => 'Order Charged successfully!',
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- public function sendUserCustomEmail(User $user, array $emailData)
- {
- if (!@$emailData['to']) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.user-custom-email', compact('user', 'emailData', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = (string) '';
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => @$emailData['to'],
- 'subject' => @$emailData['subject'],
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- public function sendEmailWithAttachment($params)
- {
- if (!@$params['toEmail']) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.attachment', compact('params', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = (string) '';
- $attachment = $this->getAttachmentFromStoragePath($params['attachmentPath'], 'attachment1');
- $emailParams = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => @$params['toEmail'],
- 'subject' => @$params['subject'],
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => null,
- 'entityUid' => null,
- 'attachment1' => $attachment
- ];
- $response = $this->callJava('/api/email/send', $emailParams, null);
- }
- protected function getAttachmentFromStoragePath($path, $fileName){
- if (Storage::disk('custom')->exists($path)) {
- return [
- 'fileName' => $fileName,
- 'name' => basename($path),
- 'contents' => Storage::disk('custom')->get($path),
- 'mime' => Storage::disk('custom')->mimeType($path),
- ];
- }
- return null;
- }
- public function emailOrderReportReadyAlert(StoreOrder $storeOrder)
- {
- $user = $storeOrder->user;
- if (!$user->getEmail()) return;
- $appInternalName = $this->appInternalName;
- $stringMappingConfig = $this->stringMappingConfig;
- $appUrl = $this->appUrl;
- $emailFromName = $this->emailFromName;
- $html = (string) view('emails.templates.email-order-report-ready-alert', compact('storeOrder', 'user', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
- $plainText = (string) '';
- $params = [
- 'fromEmailAddress' => $this->fromEmailAddress,
- 'fromName' => $this->emailFromName,
- 'toEmailAddress' => $user->getEmail(),
- 'subject' => 'Lab Results Report Ready',
- 'contentHtml' => $html,
- 'contentText' => $plainText,
- 'entityType' => 'USER',
- 'entityUid' => $user->uid,
- ];
- $response = $this->callJava('/api/email/send', $params, null);
- }
- }
|