From 778c30f7ed0c9230c67499f4a3268108cb969709 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 28 Nov 2022 12:16:58 +1100 Subject: [PATCH] refactor for data instead of file paths --- app/Filters/DocumentFilters.php | 10 ++++++++++ app/Mail/Engine/InvoiceEmailEngine.php | 23 +++++++++++++--------- app/Mail/TemplateEmail.php | 27 +++++++++++++++----------- app/Utils/HostedPDF/NinjaPdf.php | 2 +- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/app/Filters/DocumentFilters.php b/app/Filters/DocumentFilters.php index fade4950705a..bf7b589aeef0 100644 --- a/app/Filters/DocumentFilters.php +++ b/app/Filters/DocumentFilters.php @@ -11,6 +11,7 @@ namespace App\Filters; +use App\Models\Company; use App\Models\User; use Illuminate\Database\Eloquent\Builder; @@ -54,6 +55,15 @@ class DocumentFilters extends QueryFilters return $this->builder->orderBy($sort_col[0], $sort_col[1]); } + + public function company_documents($value = 'false') + { + if($value == 'true') + return $this->builder->where('documentable_type', Company::class); + + return $this->builder; + } + /** * Returns the base query. * diff --git a/app/Mail/Engine/InvoiceEmailEngine.php b/app/Mail/Engine/InvoiceEmailEngine.php index 000d2f72748f..e41f0fdc8c9f 100644 --- a/app/Mail/Engine/InvoiceEmailEngine.php +++ b/app/Mail/Engine/InvoiceEmailEngine.php @@ -13,6 +13,7 @@ namespace App\Mail\Engine; use App\DataMapper\EmailTemplateDefaults; use App\Jobs\Entity\CreateEntityPdf; +use App\Jobs\Entity\CreateRawPdf; use App\Models\Account; use App\Models\Expense; use App\Models\Task; @@ -126,11 +127,15 @@ class InvoiceEmailEngine extends BaseEmailEngine ->setTextBody($text_body); if ($this->client->getSetting('pdf_email_attachment') !== false && $this->invoice->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) { - if (Ninja::isHosted()) { - $this->setAttachments([$this->invoice->pdf_file_path($this->invitation, 'url', true)]); - } else { - $this->setAttachments([$this->invoice->pdf_file_path($this->invitation)]); - } + // if (Ninja::isHosted()) { + // $this->setAttachments([$this->invoice->pdf_file_path($this->invitation, 'url', true)]); + // } else { + // $this->setAttachments([$this->invoice->pdf_file_path($this->invitation)]); + // } + // $file = (new CreateRawPdf($invitation, $invitation->company->db))->handle(); + $pdf = ((new CreateRawPdf($this->invitation, $this->invitation->company->db))->handle()); + + $this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->invoice->numberFormatter().'.pdf']]); } //attach third party documents @@ -138,11 +143,11 @@ class InvoiceEmailEngine extends BaseEmailEngine // Storage::url foreach ($this->invoice->documents as $document) { - $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL]]); + $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL, 'file' => $document->getFile()]]); } foreach ($this->invoice->company->documents as $document) { - $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL]]); + $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL, 'file' => $document->getFile()]]); } $line_items = $this->invoice->line_items; @@ -160,7 +165,7 @@ class InvoiceEmailEngine extends BaseEmailEngine ->cursor() ->each(function ($expense) { foreach ($expense->documents as $document) { - $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL]]); + $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL, 'file' => $document->getFile()]]); } }); } @@ -176,7 +181,7 @@ class InvoiceEmailEngine extends BaseEmailEngine ->cursor() ->each(function ($task) { foreach ($task->documents as $document) { - $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL]]); + $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => NULL, 'file' => $document->getFile()]]); } }); } diff --git a/app/Mail/TemplateEmail.php b/app/Mail/TemplateEmail.php index cbf07442c075..8a892db39840 100644 --- a/app/Mail/TemplateEmail.php +++ b/app/Mail/TemplateEmail.php @@ -146,19 +146,24 @@ class TemplateEmail extends Mailable } + // $file = (new CreateRawPdf($invitation, $invitation->company->db))->handle(); + + //22-10-2022 - Performance - To improve the performance/reliability of sending emails, attaching as Data is much better, stubs in place foreach ($this->build_email->getAttachments() as $file) { - if (is_string($file)) { - // nlog($file); - // $file_data = file_get_contents($file); - // $this->attachData($file_data, basename($file)); - $this->attach($file); - } elseif (is_array($file)) { - // nlog($file['path']); - // $file_data = file_get_contents($file['path']); - // $this->attachData($file_data, $file['name']); - $this->attach($file['path'], ['as' => $file['name'], 'mime' => null]); - } + // if (is_string($file)) { + // // nlog($file); + // // $file_data = file_get_contents($file); + // // $this->attachData($file_data, basename($file)); + // $this->attach($file); + // } elseif (is_array($file)) { + // // nlog($file['path']); + // // $file_data = file_get_contents($file['path']); + // // $this->attachData($file_data, $file['name']); + // $this->attach($file['path'], ['as' => $file['name'], 'mime' => null]); + // } + + $this->attachData(base64_decode($file['file']), $file['name']); } if ($this->invitation && $this->invitation->invoice && $settings->ubl_email_attachment && $this->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) { diff --git a/app/Utils/HostedPDF/NinjaPdf.php b/app/Utils/HostedPDF/NinjaPdf.php index 7a6da2097b53..e0598b54c928 100644 --- a/app/Utils/HostedPDF/NinjaPdf.php +++ b/app/Utils/HostedPDF/NinjaPdf.php @@ -28,6 +28,6 @@ class NinjaPdf RequestOptions::JSON => ['html' => $html], ]); - return $response->getBody(); + return $response->getBody()->getContents(); } }