From f2c38bb94885140a734635fe4a843d8c46ca44f9 Mon Sep 17 00:00:00 2001 From: Lars Kusch Date: Tue, 4 Apr 2023 08:58:01 +0200 Subject: [PATCH] Add Xinvoice to E-Mail --- .gitignore | 3 ++- app/Jobs/Invoice/CreateXInvoice.php | 16 +++++++------- app/Jobs/Invoice/ZipInvoices.php | 2 +- app/Services/Email/EmailDefaults.php | 23 ++++++++++++++------- app/Services/Invoice/GetInvoiceXInvoice.php | 2 +- app/Services/Invoice/InvoiceService.php | 4 ++-- 6 files changed, 30 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 8c1625524ae2..dff90a49360a 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,5 @@ public/test.pdf public/storage/test.pdf /Modules _ide_helper_models.php -_ide_helper.php \ No newline at end of file +_ide_helper.php +/composer.phar diff --git a/app/Jobs/Invoice/CreateXInvoice.php b/app/Jobs/Invoice/CreateXInvoice.php index b0d3248bc4f0..454af161620a 100644 --- a/app/Jobs/Invoice/CreateXInvoice.php +++ b/app/Jobs/Invoice/CreateXInvoice.php @@ -21,9 +21,10 @@ class CreateXInvoice implements ShouldQueue public Invoice $invoice; - public function __construct(Invoice $invoice) + public function __construct(Invoice $invoice, bool $alterPDF) { $this->invoice = $invoice; + $this->alterpdf = $alterPDF; } /** @@ -294,12 +295,13 @@ class CreateXInvoice implements ShouldQueue $xrechnung->writeFile(Storage::disk($disk)->path($client->xinvoice_filepath($invoice->invitations->first()) . $invoice->getFileName("xml"))); $filepath_pdf = $client->invoice_filepath($invoice->invitations->first()).$invoice->getFileName(); - - $file = Storage::disk($disk)->exists($filepath_pdf); - if ($file) { - $pdfBuilder = new ZugferdDocumentPdfBuilder($xrechnung, Storage::disk($disk)->path($filepath_pdf)); - $pdfBuilder->generateDocument(); - $pdfBuilder->saveDocument(Storage::disk($disk)->path($filepath_pdf)); + if ($this->alterpdf){ + $file = Storage::disk($disk)->exists($filepath_pdf); + if ($file) { + $pdfBuilder = new ZugferdDocumentPdfBuilder($xrechnung, Storage::disk($disk)->path($filepath_pdf)); + $pdfBuilder->generateDocument(); + $pdfBuilder->saveDocument(Storage::disk($disk)->path($filepath_pdf)); + } } return $client->invoice_filepath($invoice->invitations->first()).$invoice->getFileName("xml"); } diff --git a/app/Jobs/Invoice/ZipInvoices.php b/app/Jobs/Invoice/ZipInvoices.php index 064d42f7f496..3eb9bd21823e 100644 --- a/app/Jobs/Invoice/ZipInvoices.php +++ b/app/Jobs/Invoice/ZipInvoices.php @@ -79,7 +79,7 @@ class ZipInvoices implements ShouldQueue $this->invoices->each(function ($invoice) { (new CreateEntityPdf($invoice->invitations()->first()))->handle(); if ($this->company->use_xinvoice){ - (new CreateXInvoice($invoice))->handle(); + (new CreateXInvoice($invoice, false))->handle(); } }); diff --git a/app/Services/Email/EmailDefaults.php b/app/Services/Email/EmailDefaults.php index 476ab592cdd8..5ab465de7929 100644 --- a/app/Services/Email/EmailDefaults.php +++ b/app/Services/Email/EmailDefaults.php @@ -11,6 +11,7 @@ namespace App\Services\Email; +use App\Jobs\Invoice\CreateXInvoice; use App\Models\Task; use App\Utils\Ninja; use App\Models\Quote; @@ -55,7 +56,7 @@ class EmailDefaults public function __construct(protected Email $email) { } - + /** * Entry point for generating * the defaults for the email object @@ -66,7 +67,7 @@ class EmailDefaults { $this->settings = $this->email->email_object->settings; - $this->setLocale() + $this->setLocale() ->setFrom() ->setTo() ->setTemplate() @@ -76,7 +77,7 @@ class EmailDefaults ->setBcc() ->setAttachments() ->setVariables(); - + return $this->email->email_object; } @@ -169,7 +170,7 @@ class EmailDefaults // Default template to be used $this->email->email_object->body = EmailTemplateDefaults::getDefaultTemplate($this->email->email_object->email_template_body, $this->locale); } - + if ($this->template == 'email.template.custom') { $this->email->email_object->body = (str_replace('$body', $this->email->email_object->body, $this->email->email_object->settings->email_style_custom)); } @@ -214,7 +215,7 @@ class EmailDefaults public function setVariables(): self { $this->email->email_object->body = strtr($this->email->email_object->body, $this->email->email_object->variables); - + $this->email->email_object->subject = strtr($this->email->email_object->subject, $this->email->email_object->variables); if ($this->template != 'custom') { @@ -243,7 +244,7 @@ class EmailDefaults foreach ($bccs as $bcc) { $bcc_array[] = new Address($bcc); } - + $this->email->email_object->bcc = array_merge($this->email->email_object->bcc, $bcc_array); return $this; @@ -256,7 +257,7 @@ class EmailDefaults private function buildCc() { return [ - + ]; } @@ -289,6 +290,7 @@ class EmailDefaults $this->email->email_object->entity instanceof Quote || $this->email->email_object->entity instanceof Credit)) { + // TODO: Alter this to include XInvoice $pdf = ((new CreateRawPdf($this->email->email_object->invitation, $this->email->company->db))->handle()); $this->email->email_object->attachments = array_merge($this->email->email_object->attachments, [['file' => base64_encode($pdf), 'name' => $this->email->email_object->entity->numberFormatter().'.pdf']]); @@ -303,6 +305,11 @@ class EmailDefaults $this->email->email_object->attachments = array_merge($this->email->email_object->attachments, [['file' => base64_encode($ubl_string), 'name' => $this->email->email_object->entity->getFileName('xml')]]); } } + /** XInvoice xml file */ + if ($this->email->email_object->company->use_xinvoice && $this->email->email_object->entity instanceof Invoice) { + $xinvoice_path = (new CreateXInvoice($this->email->email_object->entity, false))->handle(); + $this->email->email_object->attachments = array_merge($this->email->email_object->attachments, [['file' => base64_encode(file_get_contents($xinvoice_path)), 'name' => explode(".", $this->email->email_object->entity->getFileName('xml'))[0]."-xinvoice.xml"]]); + } if(!$this->email->email_object->settings->document_email_attachment) return $this; @@ -324,7 +331,7 @@ class EmailDefaults if ($this->email->email_object->entity instanceof Invoice) { $expense_ids = []; $task_ids = []; - + foreach ($this->email->email_object->entity->line_items as $item) { if (property_exists($item, 'expense_id')) { $expense_ids[] = $item->expense_id; diff --git a/app/Services/Invoice/GetInvoiceXInvoice.php b/app/Services/Invoice/GetInvoiceXInvoice.php index 70c4ad76d6a5..f5d279d34fb3 100644 --- a/app/Services/Invoice/GetInvoiceXInvoice.php +++ b/app/Services/Invoice/GetInvoiceXInvoice.php @@ -46,7 +46,7 @@ class GetInvoiceXInvoice extends AbstractService $file = Storage::disk($disk)->exists($file_path); if (! $file) { - $file_path = (new CreateXInvoice($this->invoice))->handle(); + $file_path = (new CreateXInvoice($this->invoice, false))->handle(); } return $file_path; diff --git a/app/Services/Invoice/InvoiceService.php b/app/Services/Invoice/InvoiceService.php index d1831581b295..8b180ef12c36 100644 --- a/app/Services/Invoice/InvoiceService.php +++ b/app/Services/Invoice/InvoiceService.php @@ -451,7 +451,7 @@ class InvoiceService (new CreateEntityPdf($invitation))->handle(); if ($invitation instanceof InvoiceInvitation) { - (new CreateXInvoice($invitation->invoice))->handle(); + (new CreateXInvoice($invitation->invoice, true))->handle(); } }); @@ -462,7 +462,7 @@ class InvoiceService CreateEntityPdf::dispatch($invitation); if ($invitation instanceof InvoiceInvitation) { - CreateXInvoice::dispatch($invitation->invoice); + CreateXInvoice::dispatch($invitation->invoice, true); } }); } catch (\Exception $e) {