mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-10 05:02:36 +01:00
Working on #1234
This commit is contained in:
parent
c65f09d6ab
commit
80ccd4f924
@ -699,7 +699,6 @@ class AccountController extends BaseController
|
|||||||
'template' => $account->getDefaultEmailTemplate($type),
|
'template' => $account->getDefaultEmailTemplate($type),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
$data['emailFooter'] = $account->getEmailFooter();
|
|
||||||
$data['title'] = trans('texts.email_templates');
|
$data['title'] = trans('texts.email_templates');
|
||||||
|
|
||||||
return View::make('accounts.templates_and_reminders', $data);
|
return View::make('accounts.templates_and_reminders', $data);
|
||||||
|
@ -1317,150 +1317,6 @@ class Account extends Eloquent
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $entityType
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function getDefaultEmailSubject($entityType)
|
|
||||||
{
|
|
||||||
if (strpos($entityType, 'reminder') !== false) {
|
|
||||||
$entityType = 'reminder';
|
|
||||||
}
|
|
||||||
|
|
||||||
return trans("texts.{$entityType}_subject", ['invoice' => '$invoice', 'account' => '$account']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $entityType
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function getEmailSubject($entityType)
|
|
||||||
{
|
|
||||||
if ($this->hasFeature(FEATURE_CUSTOM_EMAILS)) {
|
|
||||||
$field = "email_subject_{$entityType}";
|
|
||||||
$value = $this->$field;
|
|
||||||
|
|
||||||
if ($value) {
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->getDefaultEmailSubject($entityType);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $entityType
|
|
||||||
* @param bool $message
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getDefaultEmailTemplate($entityType, $message = false)
|
|
||||||
{
|
|
||||||
if (strpos($entityType, 'reminder') !== false) {
|
|
||||||
$entityType = ENTITY_INVOICE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$template = '<div>$client,</div><br>';
|
|
||||||
|
|
||||||
if ($this->hasFeature(FEATURE_CUSTOM_EMAILS) && $this->email_design_id != EMAIL_DESIGN_PLAIN) {
|
|
||||||
$template .= '<div>' . trans("texts.{$entityType}_message_button", ['amount' => '$amount']) . '</div><br>' .
|
|
||||||
'<div style="text-align: center;">$viewButton</div><br>';
|
|
||||||
} else {
|
|
||||||
$template .= '<div>' . trans("texts.{$entityType}_message", ['amount' => '$amount']) . '</div><br>' .
|
|
||||||
'<div>$viewLink</div><br>';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($message) {
|
|
||||||
$template .= "$message<p/>\r\n\r\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $template . '$footer';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $entityType
|
|
||||||
* @param bool $message
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function getEmailTemplate($entityType, $message = false)
|
|
||||||
{
|
|
||||||
$template = false;
|
|
||||||
|
|
||||||
if ($this->hasFeature(FEATURE_CUSTOM_EMAILS)) {
|
|
||||||
$field = "email_template_{$entityType}";
|
|
||||||
$template = $this->$field;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! $template) {
|
|
||||||
$template = $this->getDefaultEmailTemplate($entityType, $message);
|
|
||||||
}
|
|
||||||
|
|
||||||
// <br/> is causing page breaks with the email designs
|
|
||||||
return str_replace('/>', ' />', $template);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $view
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getTemplateView($view = '')
|
|
||||||
{
|
|
||||||
return $this->getEmailDesignId() == EMAIL_DESIGN_PLAIN ? $view : 'design' . $this->getEmailDesignId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return mixed|string
|
|
||||||
*/
|
|
||||||
public function getEmailFooter()
|
|
||||||
{
|
|
||||||
if ($this->email_footer) {
|
|
||||||
// Add line breaks if HTML isn't already being used
|
|
||||||
return strip_tags($this->email_footer) == $this->email_footer ? nl2br($this->email_footer) : $this->email_footer;
|
|
||||||
} else {
|
|
||||||
return '<p><div>' . trans('texts.email_signature') . "\n<br>\$account</div></p>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param $reminder
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function getReminderDate($reminder)
|
|
||||||
{
|
|
||||||
if (! $this->{"enable_reminder{$reminder}"}) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$numDays = $this->{"num_days_reminder{$reminder}"};
|
|
||||||
$plusMinus = $this->{"direction_reminder{$reminder}"} == REMINDER_DIRECTION_AFTER ? '-' : '+';
|
|
||||||
|
|
||||||
return date('Y-m-d', strtotime("$plusMinus $numDays days"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Invoice $invoice
|
|
||||||
*
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function getInvoiceReminder(Invoice $invoice)
|
|
||||||
{
|
|
||||||
for ($i = 1; $i <= 3; $i++) {
|
|
||||||
if ($date = $this->getReminderDate($i)) {
|
|
||||||
$field = $this->{"field_reminder{$i}"} == REMINDER_FIELD_DUE_DATE ? 'due_date' : 'invoice_date';
|
|
||||||
if ($invoice->$field == $date) {
|
|
||||||
return "reminder{$i}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param null $storage_gateway
|
* @param null $storage_gateway
|
||||||
*
|
*
|
||||||
|
@ -10,6 +10,151 @@ use Utils;
|
|||||||
*/
|
*/
|
||||||
trait SendsEmails
|
trait SendsEmails
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param $entityType
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getDefaultEmailSubject($entityType)
|
||||||
|
{
|
||||||
|
if (strpos($entityType, 'reminder') !== false) {
|
||||||
|
$entityType = 'reminder';
|
||||||
|
}
|
||||||
|
|
||||||
|
return trans("texts.{$entityType}_subject", ['invoice' => '$invoice', 'account' => '$account']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $entityType
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getEmailSubject($entityType)
|
||||||
|
{
|
||||||
|
if ($this->hasFeature(FEATURE_CUSTOM_EMAILS)) {
|
||||||
|
$field = "email_subject_{$entityType}";
|
||||||
|
$value = $this->$field;
|
||||||
|
|
||||||
|
if ($value) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->getDefaultEmailSubject($entityType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $entityType
|
||||||
|
* @param bool $message
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDefaultEmailTemplate($entityType, $message = false)
|
||||||
|
{
|
||||||
|
if (strpos($entityType, 'reminder') !== false) {
|
||||||
|
$entityType = ENTITY_INVOICE;
|
||||||
|
}
|
||||||
|
|
||||||
|
$template = '<div>$client,</div><br>';
|
||||||
|
|
||||||
|
if ($this->hasFeature(FEATURE_CUSTOM_EMAILS) && $this->email_design_id != EMAIL_DESIGN_PLAIN) {
|
||||||
|
$template .= '<div>' . trans("texts.{$entityType}_message_button", ['amount' => '$amount']) . '</div><br>' .
|
||||||
|
'<div style="text-align: center;">$viewButton</div><br>';
|
||||||
|
} else {
|
||||||
|
$template .= '<div>' . trans("texts.{$entityType}_message", ['amount' => '$amount']) . '</div><br>' .
|
||||||
|
'<div>$viewLink</div><br>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($message) {
|
||||||
|
$template .= "$message<p/>\r\n\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $template . '$footer';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $entityType
|
||||||
|
* @param bool $message
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getEmailTemplate($entityType, $message = false)
|
||||||
|
{
|
||||||
|
$template = false;
|
||||||
|
|
||||||
|
if ($this->hasFeature(FEATURE_CUSTOM_EMAILS)) {
|
||||||
|
$field = "email_template_{$entityType}";
|
||||||
|
$template = $this->$field;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $template) {
|
||||||
|
$template = $this->getDefaultEmailTemplate($entityType, $message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <br/> is causing page breaks with the email designs
|
||||||
|
return str_replace('/>', ' />', $template);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $view
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTemplateView($view = '')
|
||||||
|
{
|
||||||
|
return $this->getEmailDesignId() == EMAIL_DESIGN_PLAIN ? $view : 'design' . $this->getEmailDesignId();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed|string
|
||||||
|
*/
|
||||||
|
public function getEmailFooter()
|
||||||
|
{
|
||||||
|
if ($this->email_footer) {
|
||||||
|
// Add line breaks if HTML isn't already being used
|
||||||
|
return strip_tags($this->email_footer) == $this->email_footer ? nl2br($this->email_footer) : $this->email_footer;
|
||||||
|
} else {
|
||||||
|
return '<p><div>' . trans('texts.email_signature') . "\n<br>\$account</div></p>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $reminder
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getReminderDate($reminder)
|
||||||
|
{
|
||||||
|
if (! $this->{"enable_reminder{$reminder}"}) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$numDays = $this->{"num_days_reminder{$reminder}"};
|
||||||
|
$plusMinus = $this->{"direction_reminder{$reminder}"} == REMINDER_DIRECTION_AFTER ? '-' : '+';
|
||||||
|
|
||||||
|
return date('Y-m-d', strtotime("$plusMinus $numDays days"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Invoice $invoice
|
||||||
|
*
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
public function getInvoiceReminder(Invoice $invoice)
|
||||||
|
{
|
||||||
|
for ($i = 1; $i <= 3; $i++) {
|
||||||
|
if ($date = $this->getReminderDate($i)) {
|
||||||
|
$field = $this->{"field_reminder{$i}"} == REMINDER_FIELD_DUE_DATE ? 'due_date' : 'invoice_date';
|
||||||
|
if ($invoice->$field == $date) {
|
||||||
|
return "reminder{$i}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function getBccEmail()
|
public function getBccEmail()
|
||||||
{
|
{
|
||||||
return $this->isPro() ? $this->bcc_email : false;
|
return $this->isPro() ? $this->bcc_email : false;
|
||||||
|
@ -14,31 +14,6 @@ use Utils;
|
|||||||
|
|
||||||
class ContactMailer extends Mailer
|
class ContactMailer extends Mailer
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
public static $variableFields = [
|
|
||||||
'footer',
|
|
||||||
'account',
|
|
||||||
'dueDate',
|
|
||||||
'invoiceDate',
|
|
||||||
'client',
|
|
||||||
'amount',
|
|
||||||
'contact',
|
|
||||||
'firstName',
|
|
||||||
'invoice',
|
|
||||||
'quote',
|
|
||||||
'password',
|
|
||||||
'documents',
|
|
||||||
'viewLink',
|
|
||||||
'viewButton',
|
|
||||||
'paymentLink',
|
|
||||||
'paymentButton',
|
|
||||||
'autoBill',
|
|
||||||
'portalLink',
|
|
||||||
'portalButton',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var TemplateService
|
* @var TemplateService
|
||||||
*/
|
*/
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
) !!}
|
) !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<br/>
|
||||||
@endif
|
@endif
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
@ -135,9 +135,6 @@
|
|||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>{{ trans('texts.template_help_1') }}</p>
|
<p>{{ trans('texts.template_help_1') }}</p>
|
||||||
<ul>
|
<ul>
|
||||||
@foreach (\App\Ninja\Mailers\ContactMailer::$variableFields as $field)
|
|
||||||
<li>${{ $field }}</li>
|
|
||||||
@endforeach
|
|
||||||
@if ($account->custom_client_label1)
|
@if ($account->custom_client_label1)
|
||||||
<li>$customClient1</li>
|
<li>$customClient1</li>
|
||||||
@endif
|
@endif
|
||||||
@ -200,7 +197,7 @@
|
|||||||
var idName = '#email_' + stringType + '_' + entityType;
|
var idName = '#email_' + stringType + '_' + entityType;
|
||||||
var value = $(idName).val();
|
var value = $(idName).val();
|
||||||
var previewName = '#' + entityType + '_' + stringType + '_preview';
|
var previewName = '#' + entityType + '_' + stringType + '_preview';
|
||||||
$(previewName).html(processVariables(value));
|
$(previewName).html(renderEmailTemplate(value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -258,73 +255,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function processVariables(str) {
|
|
||||||
if (!str) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
var keys = {!! json_encode(\App\Ninja\Mailers\ContactMailer::$variableFields) !!};
|
|
||||||
var passwordHtml = "{!! $account->isPro() && $account->enable_portal_password && $account->send_portal_password?'<p>'.trans('texts.password').': 6h2NWNdw6<p>':'' !!}";
|
|
||||||
|
|
||||||
@if ($account->isPro())
|
|
||||||
var documentsHtml = "{!! trans('texts.email_documents_header').'<ul><li><a>'.trans('texts.email_documents_example_1').'</a></li><li><a>'.trans('texts.email_documents_example_2').'</a></li></ul>' !!}";
|
|
||||||
@else
|
|
||||||
var documentsHtml = "";
|
|
||||||
@endif
|
|
||||||
|
|
||||||
var vals = [
|
|
||||||
{!! json_encode($emailFooter) !!},
|
|
||||||
"{{ $account->getDisplayName() }}",
|
|
||||||
"{{ $account->formatDate($account->getDateTime()) }}",
|
|
||||||
"{{ $account->formatDate($account->getDateTime()) }}",
|
|
||||||
"Client Name",
|
|
||||||
formatMoneyAccount(100, account),
|
|
||||||
"Contact Name",
|
|
||||||
"First Name",
|
|
||||||
"0001",
|
|
||||||
"0001",
|
|
||||||
passwordHtml,
|
|
||||||
documentsHtml,
|
|
||||||
"{{ URL::to('/view/...') }}$password",
|
|
||||||
'{!! Form::flatButton('view_invoice', '#0b4d78') !!}$password',
|
|
||||||
"{{ URL::to('/payment/...') }}$password",
|
|
||||||
'{!! Form::flatButton('pay_now', '#36c157') !!}$password',
|
|
||||||
'{{ trans('texts.auto_bill_notification_placeholder') }}',
|
|
||||||
"{{ URL::to('/client/portal/...') }}",
|
|
||||||
'{!! Form::flatButton('view_portal', '#36c157') !!}',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Add blanks for custom values
|
|
||||||
keys.push('customClient1', 'customClient2', 'customInvoice1', 'customInvoice2');
|
|
||||||
vals.push('custom value', 'custom value', 'custom value', 'custom value');
|
|
||||||
|
|
||||||
// Add any available payment method links
|
|
||||||
@foreach (\App\Models\Gateway::$gatewayTypes as $type)
|
|
||||||
@if ($type != GATEWAY_TYPE_TOKEN)
|
|
||||||
{!! "keys.push('" . Utils::toCamelCase(\App\Models\GatewayType::getAliasFromId($type)).'Link' . "');" !!}
|
|
||||||
{!! "vals.push('" . URL::to('/payment/...') . "');" !!}
|
|
||||||
|
|
||||||
{!! "keys.push('" . Utils::toCamelCase(\App\Models\GatewayType::getAliasFromId($type)).'Button' . "');" !!}
|
|
||||||
{!! "vals.push('" . Form::flatButton('pay_now', '#36c157') . "');" !!}
|
|
||||||
@endif
|
|
||||||
@endforeach
|
|
||||||
|
|
||||||
var includesPasswordPlaceholder = str.indexOf('$password') != -1;
|
|
||||||
|
|
||||||
for (var i=0; i<keys.length; i++) {
|
|
||||||
var regExp = new RegExp('\\$'+keys[i], 'g');
|
|
||||||
str = str.replace(regExp, vals[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!includesPasswordPlaceholder){
|
|
||||||
var lastSpot = str.lastIndexOf('$password')
|
|
||||||
str = str.slice(0, lastSpot) + str.slice(lastSpot).replace('$password', passwordHtml);
|
|
||||||
}
|
|
||||||
str = str.replace(/\$password/g,'');
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetText(section, field) {
|
function resetText(section, field) {
|
||||||
sweetConfirm(function() {
|
sweetConfirm(function() {
|
||||||
var fieldName = 'email_' + section + '_' + field;
|
var fieldName = 'email_' + section + '_' + field;
|
||||||
@ -388,4 +318,6 @@
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@include('partials.email_templates')
|
||||||
|
|
||||||
@stop
|
@stop
|
||||||
|
@ -799,6 +799,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@include('partials.email_templates')
|
||||||
@include('invoices.email')
|
@include('invoices.email')
|
||||||
|
|
||||||
{!! Former::close() !!}
|
{!! Former::close() !!}
|
||||||
@ -1286,8 +1287,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#recipients').html(getSendToEmails());
|
showEmailModal();
|
||||||
$('#emailModal').modal('show');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onConfirmEmailClick() {
|
function onConfirmEmailClick() {
|
||||||
@ -1307,11 +1307,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
$(function() {
|
$(function() {
|
||||||
onEmailClick();
|
//onEmailClick();
|
||||||
})
|
})
|
||||||
*/
|
|
||||||
|
|
||||||
function onSaveDraftClick() {
|
function onSaveDraftClick() {
|
||||||
model.invoice().is_public(false);
|
model.invoice().is_public(false);
|
||||||
|
@ -14,8 +14,9 @@
|
|||||||
->value('') !!}
|
->value('') !!}
|
||||||
|
|
||||||
{!! Former::select('template')
|
{!! Former::select('template')
|
||||||
|
->onchange('refreshPreview()')
|
||||||
->options([
|
->options([
|
||||||
'initial' => trans('texts.initial_email'),
|
$invoice->getEntityType() => trans('texts.initial_email'),
|
||||||
'reminder1' => trans('texts.first_reminder'),
|
'reminder1' => trans('texts.first_reminder'),
|
||||||
'reminder2' => trans('texts.second_reminder'),
|
'reminder2' => trans('texts.second_reminder'),
|
||||||
'reminder3' => trans('texts.third_reminder'),
|
'reminder3' => trans('texts.third_reminder'),
|
||||||
@ -36,8 +37,10 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div role="tabpanel" class="tab-pane active" id="preview">
|
<div role="tabpanel" class="tab-pane well active" id="preview">
|
||||||
|
<br/>
|
||||||
<div id="emailSubject"></div>
|
<div id="emailSubject"></div>
|
||||||
|
<br/>
|
||||||
<div id="emailBody"></div>
|
<div id="emailBody"></div>
|
||||||
</div>
|
</div>
|
||||||
<div role="tabpanel" class="tab-pane" id="customize">
|
<div role="tabpanel" class="tab-pane" id="customize">
|
||||||
@ -75,7 +78,6 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -90,4 +92,34 @@
|
|||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var emailSubjects = [];
|
||||||
|
emailSubjects['{{ $invoice->getEntityType() }}'] = "{{ $account->getEmailSubject($invoice->getEntityType()) }}";
|
||||||
|
emailSubjects['reminder1'] = "{{ $account->getEmailSubject('reminder1') }}";
|
||||||
|
emailSubjects['reminder2'] = "{{ $account->getEmailSubject('reminder2') }}";
|
||||||
|
emailSubjects['reminder3'] = "{{ $account->getEmailSubject('reminder3') }}";
|
||||||
|
|
||||||
|
var emailTemplates = [];
|
||||||
|
emailTemplates['{{ $invoice->getEntityType() }}'] = "{{ $account->getEmailTemplate($invoice->getEntityType()) }}";
|
||||||
|
emailTemplates['reminder1'] = "{{ $account->getEmailTemplate('reminder1') }}";
|
||||||
|
emailTemplates['reminder2'] = "{{ $account->getEmailTemplate('reminder2') }}";
|
||||||
|
emailTemplates['reminder3'] = "{{ $account->getEmailTemplate('reminder3') }}";
|
||||||
|
|
||||||
|
function showEmailModal() {
|
||||||
|
refreshPreview();
|
||||||
|
$('#recipients').html(getSendToEmails());
|
||||||
|
$('#emailModal').modal('show');
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshPreview() {
|
||||||
|
var invoice = createInvoiceModel();
|
||||||
|
var template = dencodeEntities(emailSubjects[$('#template').val()]);
|
||||||
|
$('#emailSubject').html('<b>' + renderEmailTemplate(template, invoice) + '</b>');
|
||||||
|
var template = dencodeEntities(emailTemplates[$('#template').val()]);
|
||||||
|
$('#emailBody').html(renderEmailTemplate(template, invoice));
|
||||||
|
}
|
||||||
|
|
||||||
|
function dencodeEntities(s){
|
||||||
|
return $("<div/>").html(s).text();
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
67
resources/views/partials/email_templates.blade.php
Normal file
67
resources/views/partials/email_templates.blade.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function renderEmailTemplate(str, invoice) {
|
||||||
|
if (!str) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
var passwordHtml = "{!! $account->isPro() && $account->enable_portal_password && $account->send_portal_password?'<p>'.trans('texts.password').': XXXXXXXXX<p>':'' !!}";
|
||||||
|
|
||||||
|
@if ($account->isPro())
|
||||||
|
var documentsHtml = "{!! trans('texts.email_documents_header').'<ul><li><a>'.trans('texts.email_documents_example_1').'</a></li><li><a>'.trans('texts.email_documents_example_2').'</a></li></ul>' !!}";
|
||||||
|
@else
|
||||||
|
var documentsHtml = "";
|
||||||
|
@endif
|
||||||
|
|
||||||
|
var keys = {
|
||||||
|
'footer': {!! json_encode($account->getEmailFooter()) !!},
|
||||||
|
'account': "{{ $account->getDisplayName() }}",
|
||||||
|
'dueDate': "{{ $account->formatDate($account->getDateTime()) }}",
|
||||||
|
'invoiceDate': "{{ $account->formatDate($account->getDateTime()) }}",
|
||||||
|
'client': invoice ? getClientDisplayName(invoice.client) : 'Client Name',
|
||||||
|
'amount': invoice ? formatMoneyInvoice(invoice.amount, invoice) : formatMoneyAccount(100, account),
|
||||||
|
'contact': invoice ? getContactDisplayName(invoice.client.contacts[0]) : 'Contact Name',
|
||||||
|
'firstName': invoice ? invoice.client.contacts[0].first_name : 'First Name',
|
||||||
|
'invoice': invoice ? invoice.invoice_number : '0001',
|
||||||
|
'quote': invoice ? invoice.invoice_number : '0001',
|
||||||
|
'password': passwordHtml,
|
||||||
|
'documents': documentsHtml,
|
||||||
|
'viewLink': "{{ URL::to('/view/...') }}$password",
|
||||||
|
'viewButton': '{!! Form::flatButton('view_invoice', '#0b4d78') !!}$password',
|
||||||
|
'paymentLink': "{{ URL::to('/payment/...') }}$password",
|
||||||
|
'paymentButton': '{!! Form::flatButton('pay_now', '#36c157') !!}$password',
|
||||||
|
'autoBill': '{{ trans('texts.auto_bill_notification_placeholder') }}',
|
||||||
|
'portalLink': "{{ URL::to('/client/portal/...') }}",
|
||||||
|
'portalButton': '{!! Form::flatButton('view_portal', '#36c157') !!}',
|
||||||
|
'customClient1': invoice ? invoice.client.custom_value1 : 'custom value',
|
||||||
|
'customClient2': invoice ? invoice.client.custom_value2 : 'custom value',
|
||||||
|
'customInvoice1': invoice ? invoice.custom_value1 : 'custom value',
|
||||||
|
'customInvoice2': invoice ? invoice.custom_value2 : 'custom value',
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add any available payment method links
|
||||||
|
@foreach (\App\Models\Gateway::$gatewayTypes as $type)
|
||||||
|
@if ($type != GATEWAY_TYPE_TOKEN)
|
||||||
|
{!! "keys['" . Utils::toCamelCase(\App\Models\GatewayType::getAliasFromId($type)) . "Link'] = '" . URL::to('/payment/...') . "';" !!}
|
||||||
|
{!! "keys['" . Utils::toCamelCase(\App\Models\GatewayType::getAliasFromId($type)) . "Button'] = '" . Form::flatButton('pay_now', '#36c157') . "';" !!}
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
var includesPasswordPlaceholder = str.indexOf('$password') != -1;
|
||||||
|
|
||||||
|
for (var key in keys) {
|
||||||
|
var val = keys[key];
|
||||||
|
var regExp = new RegExp('\\$'+key, 'g');
|
||||||
|
str = str.replace(regExp, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!includesPasswordPlaceholder){
|
||||||
|
var lastSpot = str.lastIndexOf('$password')
|
||||||
|
str = str.slice(0, lastSpot) + str.slice(lastSpot).replace('$password', passwordHtml);
|
||||||
|
}
|
||||||
|
str = str.replace(/\$password/g,'');
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
Loading…
Reference in New Issue
Block a user