/**
  * @param Payment $payment
  */
 public function sendPaymentConfirmation(Payment $payment)
 {
     $account = $payment->account;
     $client = $payment->client;
     $account->loadLocalizationSettings($client);
     $invoice = $payment->invoice;
     $accountName = $account->getDisplayName();
     $emailTemplate = $account->getEmailTemplate(ENTITY_PAYMENT);
     $emailSubject = $invoice->account->getEmailSubject(ENTITY_PAYMENT);
     if ($payment->invitation) {
         $user = $payment->invitation->user;
         $contact = $payment->contact;
         $invitation = $payment->invitation;
     } else {
         $user = $payment->user;
         $contact = $client->contacts[0];
         $invitation = $payment->invoice->invitations[0];
     }
     $variables = ['account' => $account, 'client' => $client, 'invitation' => $invitation, 'amount' => $payment->amount];
     $data = ['body' => $this->templateService->processVariables($emailTemplate, $variables), 'link' => $invitation->getLink(), 'invoice' => $invoice, 'client' => $client, 'account' => $account, 'payment' => $payment, 'entityType' => ENTITY_INVOICE];
     if ($account->attachPDF()) {
         $data['pdfString'] = $invoice->getPDFString();
         $data['pdfFileName'] = $invoice->getFileName();
     }
     $subject = $this->templateService->processVariables($emailSubject, $variables);
     $data['invoice_id'] = $payment->invoice->id;
     $view = $account->getTemplateView('payment_confirmation');
     if ($user->email && $contact->email) {
         $this->sendTo($contact->email, $user->email, $accountName, $subject, $view, $data);
     }
     $account->loadLocalizationSettings();
 }
 /**
  * @param TemplateService $templateService
  * @return \Illuminate\Http\Response
  */
 public function previewEmail(TemplateService $templateService)
 {
     $template = Input::get('template');
     $invoice = Invoice::scope()->invoices()->withTrashed()->first();
     if (!$invoice) {
         return trans('texts.create_invoice_for_sample');
     }
     /** @var \App\Models\Account $account */
     $account = Auth::user()->account;
     $invitation = $invoice->invitations->first();
     // replace the variables with sample data
     $data = ['account' => $account, 'invoice' => $invoice, 'invitation' => $invitation, 'link' => $invitation->getLink(), 'client' => $invoice->client, 'amount' => $invoice->amount];
     // create the email view
     $view = 'emails.' . $account->getTemplateView(ENTITY_INVOICE) . '_html';
     $data = array_merge($data, ['body' => $templateService->processVariables($template, $data), 'entityType' => ENTITY_INVOICE]);
     return Response::view($view, $data);
 }