From 2723fb801494de5f97393504ea6693e273a5b3d2 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Mon, 15 Jan 2018 08:05:07 +0200 Subject: [PATCH] Working on UBL --- app/Jobs/ConvertInvoiceToUbl.php | 29 +++++++++++++++++++++-------- app/Models/Account.php | 8 ++++++++ app/Models/Invoice.php | 4 ++-- app/Ninja/Mailers/ContactMailer.php | 25 +++++++++++++++++++------ app/Ninja/Mailers/Mailer.php | 7 ++++--- 5 files changed, 54 insertions(+), 19 deletions(-) diff --git a/app/Jobs/ConvertInvoiceToUbl.php b/app/Jobs/ConvertInvoiceToUbl.php index 755e2e22ed04..36a089d899c8 100644 --- a/app/Jobs/ConvertInvoiceToUbl.php +++ b/app/Jobs/ConvertInvoiceToUbl.php @@ -12,6 +12,7 @@ use CleverIt\UBL\Invoice\Contact; use CleverIt\UBL\Invoice\TaxTotal; use CleverIt\UBL\Invoice\TaxSubTotal; use CleverIt\UBL\Invoice\TaxCategory; +use CleverIt\UBL\Invoice\TaxScheme; use CleverIt\UBL\Invoice\InvoiceLine; use CleverIt\UBL\Invoice\Item; use CleverIt\UBL\Invoice\LegalMonetaryTotal; @@ -57,26 +58,32 @@ class ConvertInvoiceToUbl extends Job $taxtotal = new TaxTotal(); $taxAmount1 = $taxAmount2 = 0; - if ($item->tax_name1 || floatval($item->tax_rate1)) { + if ($invoice->tax_name1 || floatval($invoice->tax_rate1)) { $taxAmount1 = $invoice->taxAmount($taxable, $invoice->tax_rate1); + $taxScheme = ((new TaxScheme())) + ->setId($invoice->tax_name1); $taxtotal->addTaxSubTotal((new TaxSubTotal()) ->setTaxAmount($taxAmount1) ->setTaxableAmount($taxable) ->setTaxCategory((new TaxCategory()) - ->setId($item->tax_name1) - ->setName($item->tax_name1) - ->setPercent($item->tax_rate1))); + ->setId($invoice->tax_name1) + ->setName($invoice->tax_name1) + ->setTaxScheme($taxScheme) + ->setPercent($invoice->tax_rate1))); } - if ($item->tax_name2 || floatval($item->tax_rate2)) { + if ($invoice->tax_name2 || floatval($invoice->tax_rate2)) { $itemTaxAmount2 = $invoice->taxAmount($taxable, $invoice->tax_rate2); + $taxScheme = ((new TaxScheme())) + ->setId($invoice->tax_name2); $taxtotal->addTaxSubTotal((new TaxSubTotal()) ->setTaxAmount($taxAmount2) ->setTaxableAmount($taxable) ->setTaxCategory((new TaxCategory()) - ->setId($item->tax_name2) - ->setName($item->tax_name2) - ->setPercent($item->tax_rate2))); + ->setId($invoice->tax_name2) + ->setName($invoice->tax_name2) + ->setTaxScheme($taxScheme) + ->setPercent($invoice->tax_rate2))); } $taxtotal->setTaxAmount($taxAmount1 + $taxAmount2); @@ -134,23 +141,29 @@ class ConvertInvoiceToUbl extends Job if ($item->tax_name1 || floatval($item->tax_rate1)) { $itemTaxAmount1 = $invoice->taxAmount($taxable, $item->tax_rate1); + $taxScheme = ((new TaxScheme())) + ->setId($item->tax_name1); $taxtotal->addTaxSubTotal((new TaxSubTotal()) ->setTaxAmount($itemTaxAmount1) ->setTaxableAmount($taxable) ->setTaxCategory((new TaxCategory()) ->setId($item->tax_name1) ->setName($item->tax_name1) + ->setTaxScheme($taxScheme) ->setPercent($item->tax_rate1))); } if ($item->tax_name2 || floatval($item->tax_rate2)) { $itemTaxAmount2 = $invoice->taxAmount($taxable, $item->tax_rate2); + $taxScheme = ((new TaxScheme())) + ->setId($item->tax_name2); $taxtotal->addTaxSubTotal((new TaxSubTotal()) ->setTaxAmount($itemTaxAmount2) ->setTaxableAmount($taxable) ->setTaxCategory((new TaxCategory()) ->setId($item->tax_name2) ->setName($item->tax_name2) + ->setTaxScheme($taxScheme) ->setPercent($item->tax_rate2))); } diff --git a/app/Models/Account.php b/app/Models/Account.php index e5590d49191a..bd7594b6968f 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -1485,6 +1485,14 @@ class Account extends Eloquent return $this->hasFeature(FEATURE_PDF_ATTACHMENT) && $this->pdf_email_attachment; } + /** + * @return bool + */ + public function attachUBL() + { + return $this->hasFeature(FEATURE_PDF_ATTACHMENT) && $this->ubl_email_attachment; + } + /** * @return mixed */ diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 8d94c2729e63..864d3171f4d4 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -701,11 +701,11 @@ class Invoice extends EntityModel implements BalanceAffecting /** * @return string */ - public function getFileName() + public function getFileName($extension = 'pdf') { $entityType = $this->getEntityType(); - return trans("texts.$entityType") . '_' . $this->invoice_number . '.pdf'; + return trans("texts.$entityType") . '_' . $this->invoice_number . '.' . $extension; } /** diff --git a/app/Ninja/Mailers/ContactMailer.php b/app/Ninja/Mailers/ContactMailer.php index 6647f56d5ebc..d3075c2dd09e 100644 --- a/app/Ninja/Mailers/ContactMailer.php +++ b/app/Ninja/Mailers/ContactMailer.php @@ -8,6 +8,7 @@ use App\Models\Invitation; use App\Models\Invoice; use App\Models\Payment; use App\Services\TemplateService; +use App\Jobs\ConvertInvoiceToUbl; use Event; use Utils; @@ -61,10 +62,14 @@ class ContactMailer extends Mailer $sent = false; $pdfString = false; + $ublString = false; if ($account->attachPDF()) { $pdfString = $invoice->getPDFString(); } + if ($account->attachUBL()) { + $ublString = dispatch(new ConvertInvoiceToUbl($invoice)); + } $documentStrings = []; if ($account->document_email_attachment && $invoice->hasDocuments()) { @@ -88,7 +93,12 @@ class ContactMailer extends Mailer $isFirst = true; foreach ($invoice->invitations as $invitation) { - $response = $this->sendInvitation($invitation, $invoice, $emailTemplate, $emailSubject, $pdfString, $documentStrings, $reminder, $isFirst); + $data = [ + 'pdfString' => $pdfString, + 'documentStrings' => $documentStrings, + 'ublString' => $ublString, + ]; + $response = $this->sendInvitation($invitation, $invoice, $emailTemplate, $emailSubject, $reminder, $isFirst, $data); $isFirst = false; if ($response === true) { $sent = true; @@ -126,10 +136,9 @@ class ContactMailer extends Mailer Invoice $invoice, $body, $subject, - $pdfString, - $documentStrings, $reminder, - $isFirst + $isFirst, + $attachments ) { $client = $invoice->client; $account = $invoice->account; @@ -177,16 +186,20 @@ class ContactMailer extends Mailer 'account' => $account, 'client' => $client, 'invoice' => $invoice, - 'documents' => $documentStrings, + 'documents' => $attachments['documentStrings'], 'notes' => $reminder, 'bccEmail' => $isFirst ? $account->getBccEmail() : false, 'fromEmail' => $account->getFromEmail(), ]; if ($account->attachPDF()) { - $data['pdfString'] = $pdfString; + $data['pdfString'] = $attachments['pdfString']; $data['pdfFileName'] = $invoice->getFileName(); } + if ($account->attachUBL()) { + $data['ublString'] = $attachments['ublString']; + $data['ublFileName'] = $invoice->getFileName('xml'); + } $subject = $this->templateService->processVariables($subject, $variables); $fromEmail = $account->getReplyToEmail() ?: $user->email; diff --git a/app/Ninja/Mailers/Mailer.php b/app/Ninja/Mailers/Mailer.php index aac226b3fcfe..eded42974e06 100644 --- a/app/Ninja/Mailers/Mailer.php +++ b/app/Ninja/Mailers/Mailer.php @@ -67,12 +67,13 @@ class Mailer $message->bcc($data['bccEmail']); } - // Attach the PDF to the email + // Handle invoice attachments if (! empty($data['pdfString']) && ! empty($data['pdfFileName'])) { $message->attachData($data['pdfString'], $data['pdfFileName']); } - - // Attach documents to the email + if (! empty($data['ublString']) && ! empty($data['ublFileName'])) { + $message->attachData($data['ublString'], $data['ublFileName']); + } if (! empty($data['documents'])) { foreach ($data['documents'] as $document) { $message->attachData($document['data'], $document['name']);