mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-10 13:12:50 +01:00
Bug fixes for middleware/ (#3167)
* Fix formatting and variable insertion for email templates * Refactoring for invoice emails * Fixes for midddleware
This commit is contained in:
parent
5e7512071f
commit
4c2cbb2dee
@ -257,7 +257,7 @@ class CreateTestData extends Command
|
|||||||
'is_primary' => 1
|
'is_primary' => 1
|
||||||
]);
|
]);
|
||||||
|
|
||||||
factory(\App\Models\ClientContact::class,rand(1,50))->create([
|
factory(\App\Models\ClientContact::class,rand(1,5))->create([
|
||||||
'user_id' => $user->id,
|
'user_id' => $user->id,
|
||||||
'client_id' => $client->id,
|
'client_id' => $client->id,
|
||||||
'company_id' => $company->id
|
'company_id' => $company->id
|
||||||
|
@ -33,6 +33,7 @@ class SetDb
|
|||||||
'errors' => []
|
'errors' => []
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
if( $request->header('X-API-TOKEN') && config('ninja.db.multi_db_enabled'))
|
if( $request->header('X-API-TOKEN') && config('ninja.db.multi_db_enabled'))
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -44,6 +45,10 @@ class SetDb
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else if(!config('ninja.db.multi_db_enabled')){
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,6 +30,8 @@ class EmailInvoice implements ShouldQueue
|
|||||||
|
|
||||||
public $invoice;
|
public $invoice;
|
||||||
|
|
||||||
|
public $message_array = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new job instance.
|
* Create a new job instance.
|
||||||
*
|
*
|
||||||
@ -53,27 +55,23 @@ class EmailInvoice implements ShouldQueue
|
|||||||
/*Jobs are not multi-db aware, need to set! */
|
/*Jobs are not multi-db aware, need to set! */
|
||||||
MultiDB::setDB($this->invoice->company->db);
|
MultiDB::setDB($this->invoice->company->db);
|
||||||
|
|
||||||
$message_array = $this->invoice->getEmailData();
|
//todo - change runtime config of mail driver if necessary
|
||||||
$message_array['title'] = &$message_array['subject'];
|
|
||||||
$message_array['footer'] = 'The Footer';
|
|
||||||
//
|
|
||||||
|
|
||||||
$variables = array_merge($this->invoice->makeLabels(), $this->invoice->makeValues());
|
|
||||||
|
|
||||||
$template_style = $this->invoice->client->getSetting('email_style');
|
$template_style = $this->invoice->client->getSetting('email_style');
|
||||||
|
|
||||||
$this->invoice->invitations->each(function ($invitation) use($message_array, $template_style, $variables){
|
$this->invoice->invitations->each(function ($invitation) use($template_style){
|
||||||
|
|
||||||
if($invitation->contact->send_invoice && $invitation->contact->email)
|
if($invitation->contact->send_invoice && $invitation->contact->email)
|
||||||
{
|
{
|
||||||
//there may be template variables left over for the specific contact? need to reparse here //todo this wont work, as if the variables existed, they'll be overwritten already!
|
|
||||||
$message_array['body'] = str_replace(array_keys($variables), array_values($variables), $message_array['body']);
|
$message_array = $this->invoice->getEmailData('', $invitation->contact);
|
||||||
$message_array['subject'] = str_replace(array_keys($variables), array_values($variables), $message_array['subject']);
|
$message_array['title'] = &$message_array['subject'];
|
||||||
|
$message_array['footer'] = "Sent to ".$invitation->contact->present()->name();
|
||||||
|
|
||||||
//change the runtime config of the mail provider here:
|
//change the runtime config of the mail provider here:
|
||||||
|
|
||||||
//send message
|
//send message
|
||||||
Mail::to($invitation->contact->email)
|
Mail::to($invitation->contact->email, $invitation->contact->present()->name())
|
||||||
->send(new TemplateEmail($message_array, $template_style, $invitation->contact->user, $invitation->contact->client));
|
->send(new TemplateEmail($message_array, $template_style, $invitation->contact->user, $invitation->contact->client));
|
||||||
|
|
||||||
if( count(Mail::failures()) > 0 ) {
|
if( count(Mail::failures()) > 0 ) {
|
||||||
@ -87,7 +85,7 @@ class EmailInvoice implements ShouldQueue
|
|||||||
//fire any events
|
//fire any events
|
||||||
event(new InvoiceWasEmailed($this->invoice));
|
event(new InvoiceWasEmailed($this->invoice));
|
||||||
|
|
||||||
sleep(5);
|
//sleep(5);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,22 @@ class InvoicePresenter extends EntityPresenter
|
|||||||
{
|
{
|
||||||
use MakesDates;
|
use MakesDates;
|
||||||
|
|
||||||
|
|
||||||
|
public function amount()
|
||||||
|
{
|
||||||
|
return Number::formatMoney($this->balance, $this->client);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function invoice_number()
|
||||||
|
{
|
||||||
|
|
||||||
|
if($this->number != '')
|
||||||
|
return $this->number;
|
||||||
|
else
|
||||||
|
return '';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function clientName()
|
public function clientName()
|
||||||
{
|
{
|
||||||
return $this->client->present()->name();
|
return $this->client->present()->name();
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace App\Utils\Traits;
|
namespace App\Utils\Traits;
|
||||||
|
|
||||||
|
use App\Models\ClientContact;
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Parsedown;
|
use Parsedown;
|
||||||
@ -28,7 +29,7 @@ trait InvoiceEmailBuilder
|
|||||||
* @param string $reminder_template The template name ie reminder1
|
* @param string $reminder_template The template name ie reminder1
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getEmailData($reminder_template = null) :array
|
public function getEmailData($reminder_template = null, $contact = null) :array
|
||||||
{
|
{
|
||||||
//client
|
//client
|
||||||
//$client = $this->client;
|
//$client = $this->client;
|
||||||
@ -37,11 +38,11 @@ trait InvoiceEmailBuilder
|
|||||||
$reminder_template = $this->calculateTemplate();
|
$reminder_template = $this->calculateTemplate();
|
||||||
|
|
||||||
//Need to determine which email template we are producing
|
//Need to determine which email template we are producing
|
||||||
return $this->generateTemplateData($reminder_template);
|
return $this->generateTemplateData($reminder_template, $contact);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function generateTemplateData(string $reminder_template) :array
|
private function generateTemplateData(string $reminder_template, $contact) :array
|
||||||
{
|
{
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ trait InvoiceEmailBuilder
|
|||||||
|
|
||||||
/* Use default translations if a custom message has not been set*/
|
/* Use default translations if a custom message has not been set*/
|
||||||
if(iconv_strlen($body_template) == 0){
|
if(iconv_strlen($body_template) == 0){
|
||||||
$body_template = trans('texts.invoice_message', [], null, $this->client->locale());
|
$body_template = trans('texts.invoice_message', ['amount'=>$this->present()->amount(),'account'=>$this->company->present()->name()], null, $this->client->locale());
|
||||||
}
|
}
|
||||||
|
|
||||||
$subject_template = $client->getSetting('email_subject_'.$reminder_template);
|
$subject_template = $client->getSetting('email_subject_'.$reminder_template);
|
||||||
@ -59,14 +60,14 @@ trait InvoiceEmailBuilder
|
|||||||
if(iconv_strlen($subject_template) == 0){
|
if(iconv_strlen($subject_template) == 0){
|
||||||
|
|
||||||
if($reminder_template == 'invoice')
|
if($reminder_template == 'invoice')
|
||||||
$subject_template = trans('texts.invoice_subject', [], null, $this->client->locale());
|
$subject_template = trans('texts.invoice_subject', ['number'=>$this->present()->invoice_number(),'account'=>$this->company->present()->name()], null, $this->client->locale());
|
||||||
else
|
else
|
||||||
$subject_template = trans('texts.reminder_subject', [], null, $this->client->locale());
|
$subject_template = trans('texts.reminder_subject', ['number'=>$this->present()->invoice_number(),'account'=>$this->company->present()->name()], null, $this->client->locale());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$data['body'] = $this->parseTemplate($body_template, false);
|
$data['body'] = $this->parseTemplate($body_template, false, $contact);
|
||||||
$data['subject'] = $this->parseTemplate($subject_template, true);
|
$data['subject'] = $this->parseTemplate($subject_template, true, $contact);
|
||||||
|
|
||||||
if($client->getSetting('pdf_email_attachment') !== false)
|
if($client->getSetting('pdf_email_attachment') !== false)
|
||||||
$data['files'][] = $this->pdf_file_path();
|
$data['files'][] = $this->pdf_file_path();
|
||||||
@ -74,9 +75,9 @@ trait InvoiceEmailBuilder
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function parseTemplate(string $template_data, bool $is_markdown = true) :string
|
private function parseTemplate(string $template_data, bool $is_markdown = true, $contact) :string
|
||||||
{
|
{
|
||||||
$invoice_variables = $this->makeValues();
|
$invoice_variables = $this->makeValues($contact);
|
||||||
|
|
||||||
//process variables
|
//process variables
|
||||||
$data = str_replace(array_keys($invoice_variables), array_values($invoice_variables), $template_data);
|
$data = str_replace(array_keys($invoice_variables), array_values($invoice_variables), $template_data);
|
||||||
|
@ -155,7 +155,7 @@ trait MakesInvoiceValues
|
|||||||
* @return array returns an array
|
* @return array returns an array
|
||||||
* of keyed labels (appended with _label)
|
* of keyed labels (appended with _label)
|
||||||
*/
|
*/
|
||||||
public function makeValues() :array
|
public function makeValues($contact = null) :array
|
||||||
{
|
{
|
||||||
if(!$this->client->currency() || !$this->client){
|
if(!$this->client->currency() || !$this->client){
|
||||||
throw new Exception(debug_backtrace()[1]['function'], 1);
|
throw new Exception(debug_backtrace()[1]['function'], 1);
|
||||||
@ -246,8 +246,16 @@ trait MakesInvoiceValues
|
|||||||
$data['$client.country'] = &$data['$country'];
|
$data['$client.country'] = &$data['$country'];
|
||||||
$data['$email'] = isset($this->client->primary_contact()->first()->email) ?: 'no contact email on record';
|
$data['$email'] = isset($this->client->primary_contact()->first()->email) ?: 'no contact email on record';
|
||||||
$data['$client.email'] = &$data['$email'];
|
$data['$client.email'] = &$data['$email'];
|
||||||
|
|
||||||
|
if($contact) {
|
||||||
|
$data['$contact_name'] = $contact->present()->name();
|
||||||
|
$data['$contact.name'] = &$data['$contact_name'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
$data['$contact_name'] = $this->client->present()->primary_contact_name();
|
$data['$contact_name'] = $this->client->present()->primary_contact_name();
|
||||||
$data['$contact.name'] = &$data['$contact_name'];
|
$data['$contact.name'] = &$data['$contact_name'];
|
||||||
|
}
|
||||||
|
|
||||||
$data['$company.name'] = $this->company->present()->name();
|
$data['$company.name'] = $this->company->present()->name();
|
||||||
$data['$company.address1'] = $settings->address1;
|
$data['$company.address1'] = $settings->address1;
|
||||||
$data['$company.address2'] = $settings->address2;
|
$data['$company.address2'] = $settings->address2;
|
||||||
|
Loading…
Reference in New Issue
Block a user