From 2d3fe13c8253e8a91f6d08484a19d7cfee1a1dc5 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 15 Feb 2023 00:30:16 +1100 Subject: [PATCH] doc blocks for entity mailers --- app/Mail/Engine/InvoiceEmailEngine.php | 2 +- app/Services/Email/MailBuild.php | 89 ++++++++++++++++++++++---- 2 files changed, 78 insertions(+), 13 deletions(-) diff --git a/app/Mail/Engine/InvoiceEmailEngine.php b/app/Mail/Engine/InvoiceEmailEngine.php index cf326986bdbf..46b13aabcec3 100644 --- a/app/Mail/Engine/InvoiceEmailEngine.php +++ b/app/Mail/Engine/InvoiceEmailEngine.php @@ -212,7 +212,7 @@ class InvoiceEmailEngine extends BaseEmailEngine }); } } - } + return $this; } diff --git a/app/Services/Email/MailBuild.php b/app/Services/Email/MailBuild.php index c1966562a3b4..cc1e388c197f 100644 --- a/app/Services/Email/MailBuild.php +++ b/app/Services/Email/MailBuild.php @@ -11,10 +11,12 @@ namespace App\Services\Email; +use App\Models\Task; use App\Utils\Ninja; use App\Models\Client; use App\Models\Vendor; use App\Models\Account; +use App\Models\Expense; use App\Utils\HtmlEngine; use App\Models\ClientContact; use App\Models\VendorContact; @@ -28,10 +30,12 @@ use Illuminate\Contracts\Mail\Mailable; use App\DataMapper\EmailTemplateDefaults; use League\CommonMark\CommonMarkConverter; use App\Jobs\Vendor\CreatePurchaseOrderPdf; +use App\Utils\Traits\MakesHash; class MailBuild { - + use MakesHash; + /** @var mixed $settings */ protected $settings; @@ -326,19 +330,19 @@ class MailBuild * ie. Create the Entity PDF * ie. Inject the PDF * - * @return array + * @return self */ private function setContextAttachments(): self { if(!$this->settings->pdf_email_attachment || !$this->mail_entity->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) - return []; + return $this; if($this->mail_entity->invitation?->purchase_order){ $pdf = (new CreatePurchaseOrderPdf($this->mail_entity->invitation))->rawPdf(); - $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['file' => base64_encode($pdf), 'name' => $this->mail_entity->invitation->purchase_order->numberFormatter().'.pdf']); + $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, [['file' => base64_encode($pdf), 'name' => $this->mail_entity->invitation->purchase_order->numberFormatter().'.pdf']]); if ($this->vendor->getSetting('document_email_attachment') !== false && $this->mail_entity->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) { @@ -346,9 +350,9 @@ class MailBuild foreach ($this->mail_entity->invitation->purchase_order->documents as $document) { if($document->size > $this->max_attachment_size) - $this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, [" $document->hash]) ."'>". $document->name .""]); + $this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, [[" $document->hash]) ."'>". $document->name .""]]); else - $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]); + $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, [['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]); } } @@ -365,10 +369,12 @@ class MailBuild if($this->mail_entity->invitation?->credit) $entity = 'credit'; - - $pdf = ((new CreateRawPdf($this->mail_entity->invitation, $this->mail_entity->invitation->company->db))->handle()); - $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['file' => base64_encode($pdf), 'name' => $this->mail_entity->invitation->{$entity}->numberFormatter().'.pdf']); + $pdf = ((new CreateRawPdf($this->mail_entity->invitation, $this->mail_entity->invitation->company->db))->handle()); + + nlog($this->mail_entity->mail_object->attachments); + + $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, [['file' => base64_encode($pdf), 'name' => $this->mail_entity->invitation->{$entity}->numberFormatter().'.pdf']]); if ($this->client->getSetting('document_email_attachment') !== false && $this->mail_entity->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) { @@ -376,19 +382,78 @@ class MailBuild foreach ($this->mail_entity->invitation->{$entity}->documents as $document) { if($document->size > $this->max_attachment_size) - $this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, [" $document->hash]) ."'>". $document->name .""]); + $this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, [[" $document->hash]) ."'>". $document->name .""]]); else - $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, ['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]); + $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, [['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]); } } - if($this->settings->pdf_email_attachment && $entity == 'invoice') + return $this; + + + + + if($this->settings->ubl_email_attachment && $entity == 'invoice') { } + if($entity == 'invoice') + { + + $line_items = $this->mail_entity->invitation->invoice->line_items; + + foreach ($line_items as $item) { + $expense_ids = []; + + if (property_exists($item, 'expense_id')) { + $expense_ids[] = $item->expense_id; + } + + if (count($expense_ids) > 0) { + $expenses = Expense::whereIn('id', $this->transformKeys($expense_ids)) + ->where('invoice_documents', 1) + ->cursor() + ->each(function ($expense) { + foreach ($expense->documents as $document) { + + if($document->size > $this->max_attachment_size) + $this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, [[" $document->hash]) ."'>". $document->name .""]]); + else + $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, [['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]); + + + } + }); + } + + $task_ids = []; + + if (property_exists($item, 'task_id')) { + $task_ids[] = $item->task_id; + } + + if (count($task_ids) > 0 && $this->mail_entity->company->invoice_task_documents) { + $tasks = Task::whereIn('id', $this->transformKeys($task_ids)) + ->cursor() + ->each(function ($task) { + foreach ($task->documents as $document) { + + if($document->size > $this->max_attachment_size) + $this->mail_entity->mail_object->attachment_links = array_merge($this->mail_entity->mail_object->attachment_links, [[" $document->hash]) ."'>". $document->name .""]]); + else + $this->mail_entity->mail_object->attachments = array_merge($this->mail_entity->mail_object->attachments, [['path' => $document->filePath(), 'name' => $document->name, 'mime' => null]]); + + } + }); + } + } + } + + return $this; + }