From f7d8f819b6f921b172b2321e81243b4cfa14acc1 Mon Sep 17 00:00:00 2001 From: Joshua Dwire Date: Wed, 23 Mar 2016 19:20:08 -0400 Subject: [PATCH] Add option to attach documents to invoice email --- app/Http/Controllers/AccountController.php | 1 + app/Http/routes.php | 1 + app/Ninja/Mailers/ContactMailer.php | 22 +++++++++++++++++-- app/Ninja/Mailers/Mailer.php | 7 ++++++ .../2016_03_22_168362_add_documents.php | 1 + resources/lang/en/texts.php | 3 ++- .../views/accounts/email_settings.blade.php | 2 ++ 7 files changed, 34 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 6d06a2611022..71d83316fe1d 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -651,6 +651,7 @@ class AccountController extends BaseController $account->subdomain = $subdomain; $account->iframe_url = $iframeURL; $account->pdf_email_attachment = Input::get('pdf_email_attachment') ? true : false; + $account->document_email_attachment = Input::get('document_email_attachment') ? true : false; $account->email_design_id = Input::get('email_design_id'); if (Utils::isNinja()) { diff --git a/app/Http/routes.php b/app/Http/routes.php index e70444847a58..92f9b11b03d8 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -432,6 +432,7 @@ if (!defined('CONTACT_EMAIL')) { define('MAX_LOGO_FILE_SIZE', 200); // KB define('MAX_FAILED_LOGINS', 10); define('MAX_DOCUMENT_SIZE', env('MAX_DOCUMENT_SIZE', 10000));// KB + define('MAX_EMAIL_DOCUMENTS_SIZE', env('MAX_EMAIL_DOCUMENTS_SIZE', 10000));// Total KB define('DOCUMENT_PREVIEW_SIZE', env('DOCUMENT_PREVIEW_SIZE', 300));// pixels define('DEFAULT_FONT_SIZE', 9); define('DEFAULT_HEADER_FONT', 1);// Roboto diff --git a/app/Ninja/Mailers/ContactMailer.php b/app/Ninja/Mailers/ContactMailer.php index e526300a5dd9..4af83968263c 100644 --- a/app/Ninja/Mailers/ContactMailer.php +++ b/app/Ninja/Mailers/ContactMailer.php @@ -59,9 +59,26 @@ class ContactMailer extends Mailer if ($account->attatchPDF() && !$pdfString) { $pdfString = $invoice->getPDFString(); } + + $documentStrings = array(); + if ($account->document_email_attachment && !empty($invoice->documents)) { + $documents = $invoice->documents->sortBy('size'); + + $size = 0; + $maxSize = MAX_EMAIL_DOCUMENTS_SIZE * 1000; + foreach($documents as $document){ + $size += $document->size; + if($size > $maxSize)break; + + $documentStrings[] = array( + 'name' => $document->name, + 'data' => $document->getRaw(), + ); + } + } foreach ($invoice->invitations as $invitation) { - $response = $this->sendInvitation($invitation, $invoice, $emailTemplate, $emailSubject, $pdfString); + $response = $this->sendInvitation($invitation, $invoice, $emailTemplate, $emailSubject, $pdfString, $documentStrings); if ($response === true) { $sent = true; } @@ -80,7 +97,7 @@ class ContactMailer extends Mailer return $response; } - private function sendInvitation($invitation, $invoice, $body, $subject, $pdfString) + private function sendInvitation($invitation, $invoice, $body, $subject, $pdfString, $documentStrings) { $client = $invoice->client; $account = $invoice->account; @@ -127,6 +144,7 @@ class ContactMailer extends Mailer 'account' => $account, 'client' => $client, 'invoice' => $invoice, + 'documents' => $documentStrings, ]; if ($account->attatchPDF()) { diff --git a/app/Ninja/Mailers/Mailer.php b/app/Ninja/Mailers/Mailer.php index 7afcc2548c93..d655e4945e31 100644 --- a/app/Ninja/Mailers/Mailer.php +++ b/app/Ninja/Mailers/Mailer.php @@ -44,6 +44,13 @@ class Mailer if (!empty($data['pdfString']) && !empty($data['pdfFileName'])) { $message->attachData($data['pdfString'], $data['pdfFileName']); } + + // Attach documents to the email + if(!empty($data['documents'])){ + foreach($data['documents'] as $document){ + $message->attachData($document['data'], $document['name']); + } + } }); return $this->handleSuccess($response, $data); diff --git a/database/migrations/2016_03_22_168362_add_documents.php b/database/migrations/2016_03_22_168362_add_documents.php index 1fcaea379021..bf4ca8c9b771 100644 --- a/database/migrations/2016_03_22_168362_add_documents.php +++ b/database/migrations/2016_03_22_168362_add_documents.php @@ -16,6 +16,7 @@ class AddDocuments extends Migration { $table->unsignedInteger('logo_height'); $table->unsignedInteger('logo_size'); $table->boolean('invoice_embed_documents')->default(1); + $table->boolean('document_email_attachment')->default(1); }); DB::table('accounts')->update(array('logo' => '')); diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 284ad739d853..32efcdffca46 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -1101,7 +1101,8 @@ $LANG = array( 'invoice_documents' => 'Attached Documents', 'document_upload_message' => 'Drop files here or click to upload.', 'invoice_embed_documents' => 'Embed Documents', - 'invoice_embed_documents_help' => 'Include attached images in the invoice.', + 'invoice_embed_documents_help' => 'Include attached images in the invoice.', + 'document_email_attachment' => 'Attach Documents', ); return $LANG; diff --git a/resources/views/accounts/email_settings.blade.php b/resources/views/accounts/email_settings.blade.php index 4d157ffda326..3109b160d7be 100644 --- a/resources/views/accounts/email_settings.blade.php +++ b/resources/views/accounts/email_settings.blade.php @@ -19,6 +19,7 @@ ])->addClass('warn-on-exit') !!} {{ Former::populate($account) }} {{ Former::populateField('pdf_email_attachment', intval($account->pdf_email_attachment)) }} + {{ Former::populateField('document_email_attachment', intval($account->document_email_attachment)) }} {{ Former::populateField('enable_email_markup', intval($account->enable_email_markup)) }}
@@ -27,6 +28,7 @@
{!! Former::checkbox('pdf_email_attachment')->text(trans('texts.enable')) !!} + {!! Former::checkbox('document_email_attachment')->text(trans('texts.enable')) !!}