EmailService.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. namespace App\Http\Services;
  3. use App\Models\Invoice;
  4. use App\Models\FinancialTransaction;
  5. use Illuminate\Support\Facades\Http;
  6. use Illuminate\Support\Facades\View;
  7. use Barryvdh\DomPDF\Facade\Pdf;
  8. class EmailService
  9. {
  10. protected $fromEmailAddress;
  11. protected $emailFromName;
  12. protected $secret;
  13. public $appUrl;
  14. public $appInternalName;
  15. public $stringMappingConfig;
  16. public function __construct()
  17. {
  18. $this->secret = 'b4mC2TeVuZqvcUv';
  19. $this->fromEmailAddress = config('app.fromEmailAddress');
  20. $this->emailFromName = config('app.emailFromName');
  21. $this->appUrl = config('app.url');
  22. $this->appInternalName = config('app.internalName');
  23. $this->stringMappingConfig = config('constants.' . $this->appInternalName);
  24. }
  25. protected function callJava($endPoint, $data)
  26. {
  27. $data['apiKey'] = $this->secret;
  28. $url = config('stag.backendUrl') . $endPoint;
  29. $response = Http::asForm()
  30. ->withHeaders([
  31. 'sessionKey' => request()->cookie('sessionKey')
  32. ])
  33. ->post($url, $data)
  34. ->body();
  35. return json_decode($response, true);
  36. }
  37. //Emails
  38. public function notifyClientOnNewInvoice(Invoice $invoice)
  39. {
  40. $clientEmailAddress = $invoice->customer->client->email_address;
  41. if(!$clientEmailAddress) return;
  42. $appInternalName = $this->appInternalName;
  43. $stringMappingConfig = $this->stringMappingConfig;
  44. $appUrl = $this->appUrl;
  45. $emailFromName = $this->emailFromName;
  46. $toEmailAddress = $clientEmailAddress;
  47. $html = (string) view('emails.templates.invoice-created-email', compact('toEmailAddress', 'invoice', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  48. $plainText = '';
  49. $params = [
  50. 'subject' => 'New Payment Request Added to Your Account',
  51. 'htmlBody' => $html,
  52. 'plainTextBody' => $plainText,
  53. 'toAddress' => $clientEmailAddress,
  54. 'fromEmail' => $this->fromEmailAddress,
  55. 'fromName' => $this->emailFromName,
  56. ];
  57. $response = $this->callJava('/email/send', $params);
  58. return $response;
  59. }
  60. public function notifyClientOnInvoiceDeactivation(Invoice $invoice)
  61. {
  62. $clientEmailAddress = $invoice->customer->client->email_address;
  63. if(!$clientEmailAddress) return;
  64. $appInternalName = $this->appInternalName;
  65. $stringMappingConfig = $this->stringMappingConfig;
  66. $appUrl = $this->appUrl;
  67. $emailFromName = $this->emailFromName;
  68. $toEmailAddress = $clientEmailAddress;
  69. $html = (string) view('emails.templates.invoice-deactivation-email', compact('toEmailAddress', 'invoice', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  70. $plainText = '';
  71. $params = [
  72. 'subject' => 'Payment Request Cancellation Notice',
  73. 'htmlBody' => $html,
  74. 'plainTextBody' => $plainText,
  75. 'toAddress' => $clientEmailAddress,
  76. 'fromEmail' => $this->fromEmailAddress,
  77. 'fromName' => $this->emailFromName,
  78. ];
  79. $response = $this->callJava('/email/send', $params);
  80. return $response;
  81. }
  82. public function notifyClientOnInvoicePayment(Invoice $invoice)
  83. {
  84. $clientEmailAddress = $invoice->customer->client->email_address;
  85. if(!$clientEmailAddress) return;
  86. $appInternalName = $this->appInternalName;
  87. $stringMappingConfig = $this->stringMappingConfig;
  88. $appUrl = $this->appUrl;
  89. $emailFromName = $this->emailFromName;
  90. $toEmailAddress = $clientEmailAddress;
  91. $html = (string) view('emails.templates.invoice-payment-email', compact('toEmailAddress', 'invoice', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  92. $plainText = '';
  93. $params = [
  94. 'subject' => 'Transaction Notification: Service Payment Confirmation',
  95. 'htmlBody' => $html,
  96. 'plainTextBody' => $plainText,
  97. 'toAddress' => $clientEmailAddress,
  98. 'fromEmail' => $this->fromEmailAddress,
  99. 'fromName' => $this->emailFromName,
  100. ];
  101. $response = $this->callJava('/email/send', $params);
  102. return $response;
  103. }
  104. public function notifyClientOnFailedInvoicePayment(Invoice $invoice)
  105. {
  106. $clientEmailAddress = $invoice->customer->client->email_address;
  107. if(!$clientEmailAddress) return;
  108. $appInternalName = $this->appInternalName;
  109. $stringMappingConfig = $this->stringMappingConfig;
  110. $appUrl = $this->appUrl;
  111. $emailFromName = $this->emailFromName;
  112. $toEmailAddress = $clientEmailAddress;
  113. $html = (string) view('emails.templates.invoice-failed-payment-email', compact('toEmailAddress', 'invoice', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  114. $plainText = '';
  115. $params = [
  116. 'subject' => 'Payment Declined: Action Required',
  117. 'htmlBody' => $html,
  118. 'plainTextBody' => $plainText,
  119. 'toAddress' => $clientEmailAddress,
  120. 'fromEmail' => $this->fromEmailAddress,
  121. 'fromName' => $this->emailFromName,
  122. ];
  123. $response = $this->callJava('/email/send', $params);
  124. return $response;
  125. }
  126. public function notifyClientOnRefundTransaction(FinancialTransaction $transaction)
  127. {
  128. $clientEmailAddress = $transaction->customer->client->email_address;
  129. if(!$clientEmailAddress) return;
  130. $appInternalName = $this->appInternalName;
  131. $stringMappingConfig = $this->stringMappingConfig;
  132. $appUrl = $this->appUrl;
  133. $emailFromName = $this->emailFromName;
  134. $toEmailAddress = $clientEmailAddress;
  135. $html = (string) view('emails.templates.transaction-refund-email', compact('toEmailAddress', 'transaction', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  136. $plainText = '';
  137. $params = [
  138. 'subject' => 'Refund Issued for Payment',
  139. 'htmlBody' => $html,
  140. 'plainTextBody' => $plainText,
  141. 'toAddress' => $clientEmailAddress,
  142. 'fromEmail' => $this->fromEmailAddress,
  143. 'fromName' => $this->emailFromName,
  144. ];
  145. $response = $this->callJava('/email/send', $params);
  146. return $response;
  147. }
  148. public function notifyEmailOnClientChange($client, $message, $toEmailAddres, $toName)
  149. {
  150. if(config('app.env') !== 'production'){
  151. $toEmailAddress = config('app.devEmailAddress');
  152. }
  153. if(!$toEmailAddress) return;
  154. $appInternalName = $this->appInternalName;
  155. $stringMappingConfig = $this->stringMappingConfig;
  156. $appUrl = $this->appUrl;
  157. $emailFromName = $this->emailFromName;
  158. $html = (string) view('emails.templates.notify-on-company-client-change-email', compact('toEmailAddress', 'message', 'toName', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  159. $plainText = '';
  160. $params = [
  161. 'subject' => $client->displayName() . ' Information Update',
  162. 'htmlBody' => $html,
  163. 'plainTextBody' => $plainText,
  164. 'toAddress' => $toEmailAddress,
  165. 'fromEmail' => $this->fromEmailAddress,
  166. 'fromName' => $this->emailFromName,
  167. ];
  168. $response = $this->callJava('/email/send', $params);
  169. return $response;
  170. }
  171. public function notifyOnCompanyClientChange($companyClient, $message, $toEmailAddres, $toName)
  172. {
  173. if(config('app.env') !== 'production'){
  174. $toEmailAddress = config('app.devEmailAddress');
  175. }
  176. if(!$toEmailAddress) return;
  177. $appInternalName = $this->appInternalName;
  178. $stringMappingConfig = $this->stringMappingConfig;
  179. $appUrl = $this->appUrl;
  180. $emailFromName = $this->emailFromName;
  181. $html = (string) view('emails.templates.notify-on-company-client-change-email', compact('toEmailAddress', 'companyClient', 'message', 'toName', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  182. $plainText = '';
  183. $params = [
  184. 'subject' => $companyClient->client->displayName() . ' Information Update | ' . $companyClient->company->name,
  185. 'htmlBody' => $html,
  186. 'plainTextBody' => $plainText,
  187. 'toAddress' => $toEmailAddress,
  188. 'fromEmail' => $this->fromEmailAddress,
  189. 'fromName' => $this->emailFromName,
  190. ];
  191. $response = $this->callJava('/email/send', $params);
  192. return $response;
  193. }
  194. public function sendServerError($code)
  195. {
  196. $toEmailAddress = config('app.devEmailAddress');
  197. if(!$toEmailAddress) return;
  198. $emails = explode(',', $toEmailAddress);
  199. $appInternalName = $this->appInternalName;
  200. $stringMappingConfig = $this->stringMappingConfig;
  201. $appUrl = $this->appUrl;
  202. $emailFromName = $this->emailFromName;
  203. $html = (string) view('emails.templates.error-email', compact('toEmailAddress', 'code', 'appUrl', 'emailFromName', 'appInternalName', 'stringMappingConfig'));
  204. $plainText = '';
  205. foreach($emails as $email){
  206. $email = preg_replace('/\s+/', '', $email);
  207. $params = [
  208. 'subject' => 'Server Error - ' . $code,
  209. 'htmlBody' => $html,
  210. 'plainTextBody' => $plainText,
  211. 'toAddress' => $email,
  212. 'fromEmail' => $this->fromEmailAddress,
  213. 'fromName' => $this->emailFromName,
  214. ];
  215. $response = $this->callJava('/email/send', $params);
  216. }
  217. return;
  218. }
  219. }