Merge pull request #2804 from FELDSAM-INC/feature/quote-reminders

Quote Reminders
This commit is contained in:
Hillel Coren 2019-04-29 09:45:35 +03:00 committed by GitHub
commit e6cb3dc5e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 382 additions and 26 deletions

View File

@ -141,8 +141,14 @@ class SendReminders extends Command
$account->loadLocalizationSettings($invoice->client); // support trans to add fee line item $account->loadLocalizationSettings($invoice->client); // support trans to add fee line item
$number = preg_replace('/[^0-9]/', '', $reminder); $number = preg_replace('/[^0-9]/', '', $reminder);
$amount = $account->account_email_settings->{"late_fee{$number}_amount"}; if ($invoice->isQuote()) {
$percent = $account->account_email_settings->{"late_fee{$number}_percent"}; $amount = $account->account_email_settings->{"late_fee_quote{$number}_amount"};
$percent = $account->account_email_settings->{"late_fee_quote{$number}_percent"};
} else {
$amount = $account->account_email_settings->{"late_fee{$number}_amount"};
$percent = $account->account_email_settings->{"late_fee{$number}_percent"};
}
$this->invoiceRepo->setLateFee($invoice, $amount, $percent); $this->invoiceRepo->setLateFee($invoice, $amount, $percent);
} }
} }
@ -184,6 +190,18 @@ class SendReminders extends Command
$this->info(date('r') . ' Send email: ' . $invoice->id); $this->info(date('r') . ' Send email: ' . $invoice->id);
dispatch(new SendInvoiceEmail($invoice, $invoice->user_id, 'reminder4')); dispatch(new SendInvoiceEmail($invoice, $invoice->user_id, 'reminder4'));
} }
// endless quote reminders
$invoices = $this->invoiceRepo->findNeedingEndlessReminding($account, true);
$this->info(date('r ') . $account->name . ': ' . $invoices->count() . ' endless quotes found');
foreach ($invoices as $invoice) {
if ($invoice->last_sent_date == date('Y-m-d')) {
continue;
}
$this->info(date('r') . ' Send email: ' . $invoice->id);
dispatch(new SendInvoiceEmail($invoice, $invoice->user_id, 'quote_reminder4'));
}
} }
} }

View File

@ -513,6 +513,10 @@ if (! defined('APP_NAME')) {
define('TEMPLATE_REMINDER2', 'reminder2'); define('TEMPLATE_REMINDER2', 'reminder2');
define('TEMPLATE_REMINDER3', 'reminder3'); define('TEMPLATE_REMINDER3', 'reminder3');
define('TEMPLATE_REMINDER4', 'reminder4'); define('TEMPLATE_REMINDER4', 'reminder4');
define('TEMPLATE_QUOTE_REMINDER1', 'quote_reminder1');
define('TEMPLATE_QUOTE_REMINDER2', 'quote_reminder2');
define('TEMPLATE_QUOTE_REMINDER3', 'quote_reminder3');
define('TEMPLATE_QUOTE_REMINDER4', 'quote_reminder4');
define('CUSTOM_MESSAGE_DASHBOARD', 'dashboard'); define('CUSTOM_MESSAGE_DASHBOARD', 'dashboard');
define('CUSTOM_MESSAGE_UNPAID_INVOICE', 'unpaid_invoice'); define('CUSTOM_MESSAGE_UNPAID_INVOICE', 'unpaid_invoice');

View File

@ -940,7 +940,7 @@ class AccountController extends BaseController
$account->account_email_settings->$bodyField = ($body == $account->getDefaultEmailTemplate($type) ? null : $body); $account->account_email_settings->$bodyField = ($body == $account->getDefaultEmailTemplate($type) ? null : $body);
} }
foreach ([TEMPLATE_REMINDER1, TEMPLATE_REMINDER2, TEMPLATE_REMINDER3] as $type) { foreach ([TEMPLATE_REMINDER1, TEMPLATE_REMINDER2, TEMPLATE_REMINDER3, TEMPLATE_QUOTE_REMINDER1, TEMPLATE_QUOTE_REMINDER2, TEMPLATE_QUOTE_REMINDER3] as $type) {
$enableField = "enable_{$type}"; $enableField = "enable_{$type}";
$account->account_email_settings->$enableField = Input::get($enableField) ? true : false; $account->account_email_settings->$enableField = Input::get($enableField) ? true : false;
$account->account_email_settings->{"num_days_{$type}"} = Input::get("num_days_{$type}"); $account->account_email_settings->{"num_days_{$type}"} = Input::get("num_days_{$type}");
@ -948,13 +948,21 @@ class AccountController extends BaseController
$account->account_email_settings->{"direction_{$type}"} = Input::get("field_{$type}") == REMINDER_FIELD_INVOICE_DATE ? REMINDER_DIRECTION_AFTER : Input::get("direction_{$type}"); $account->account_email_settings->{"direction_{$type}"} = Input::get("field_{$type}") == REMINDER_FIELD_INVOICE_DATE ? REMINDER_DIRECTION_AFTER : Input::get("direction_{$type}");
$number = preg_replace('/[^0-9]/', '', $type); $number = preg_replace('/[^0-9]/', '', $type);
$account->account_email_settings->{"late_fee{$number}_amount"} = Input::get("late_fee{$number}_amount"); if (strpos($type, 'quote') !== false) {
$account->account_email_settings->{"late_fee{$number}_percent"} = Input::get("late_fee{$number}_percent"); $account->account_email_settings->{"late_fee_quote{$number}_amount"} = Input::get("late_fee_quote{$number}_amount");
$account->account_email_settings->{"late_fee_quote{$number}_percent"} = Input::get("late_fee_quote{$number}_percent");
} else {
$account->account_email_settings->{"late_fee{$number}_amount"} = Input::get("late_fee{$number}_amount");
$account->account_email_settings->{"late_fee{$number}_percent"} = Input::get("late_fee{$number}_percent");
}
} }
$account->account_email_settings->enable_reminder4 = Input::get('enable_reminder4') ? true : false; $account->account_email_settings->enable_reminder4 = Input::get('enable_reminder4') ? true : false;
$account->account_email_settings->frequency_id_reminder4 = Input::get('frequency_id_reminder4'); $account->account_email_settings->frequency_id_reminder4 = Input::get('frequency_id_reminder4');
$account->account_email_settings->enable_quote_reminder4 = Input::get('enable_quote_reminder4') ? true : false;
$account->account_email_settings->frequency_id_quote_reminder4 = Input::get('frequency_id_quote_reminder4');
$account->save(); $account->save();
$account->account_email_settings->save(); $account->account_email_settings->save();

View File

@ -46,6 +46,31 @@ class AccountEmailSettings extends Eloquent
'field_reminder1', 'field_reminder1',
'field_reminder2', 'field_reminder2',
'field_reminder3', 'field_reminder3',
'email_subject_quote_reminder1',
'email_subject_quote_reminder2',
'email_subject_quote_reminder3',
'email_template_quote_reminder1',
'email_template_quote_reminder2',
'email_template_quote_reminder3',
'late_fee_quote1_amount',
'late_fee_quote1_percent',
'late_fee_quote2_amount',
'late_fee_quote2_percent',
'late_fee_quote3_amount',
'late_fee_quote3_percent',
'enable_quote_reminder1',
'enable_quote_reminder2',
'enable_quote_reminder3',
'enable_quote_reminder4',
'num_days_quote_reminder1',
'num_days_quote_reminder2',
'num_days_quote_reminder3',
'direction_quote_reminder1',
'direction_quote_reminder2',
'direction_quote_reminder3',
'field_quote_reminder1',
'field_quote_reminder2',
'field_quote_reminder3',
'email_design_id', 'email_design_id',
'enable_email_markup', 'enable_email_markup',
'email_footer', 'email_footer',
@ -61,6 +86,10 @@ class AccountEmailSettings extends Eloquent
TEMPLATE_REMINDER2, TEMPLATE_REMINDER2,
TEMPLATE_REMINDER3, TEMPLATE_REMINDER3,
TEMPLATE_REMINDER4, TEMPLATE_REMINDER4,
TEMPLATE_QUOTE_REMINDER1,
TEMPLATE_QUOTE_REMINDER2,
TEMPLATE_QUOTE_REMINDER3,
TEMPLATE_QUOTE_REMINDER4,
]; ];
} }

View File

@ -136,12 +136,12 @@ trait SendsEmails
*/ */
public function getReminderDate($reminder, $filterEnabled = true) public function getReminderDate($reminder, $filterEnabled = true)
{ {
if ($filterEnabled && ! $this->account_email_settings->{"enable_reminder{$reminder}"}) { if ($filterEnabled && ! $this->account_email_settings->{"enable_{$reminder}"}) {
return false; return false;
} }
$numDays = $this->account_email_settings->{"num_days_reminder{$reminder}"}; $numDays = $this->account_email_settings->{"num_days_{$reminder}"};
$plusMinus = $this->account_email_settings->{"direction_reminder{$reminder}"} == REMINDER_DIRECTION_AFTER ? '-' : '+'; $plusMinus = $this->account_email_settings->{"direction_{$reminder}"} == REMINDER_DIRECTION_AFTER ? '-' : '+';
return date('Y-m-d', strtotime("$plusMinus $numDays days")); return date('Y-m-d', strtotime("$plusMinus $numDays days"));
} }
@ -153,16 +153,18 @@ trait SendsEmails
*/ */
public function getInvoiceReminder($invoice, $filterEnabled = true) public function getInvoiceReminder($invoice, $filterEnabled = true)
{ {
$reminder = $invoice->isQuote() ? 'quote_reminder' : 'reminder';
for ($i = 1; $i <= 3; $i++) { for ($i = 1; $i <= 3; $i++) {
if ($date = $this->getReminderDate($i, $filterEnabled)) { if ($date = $this->getReminderDate($reminder.$i, $filterEnabled)) {
if ($this->account_email_settings->{"field_reminder{$i}"} == REMINDER_FIELD_DUE_DATE) { if ($this->account_email_settings->{'field_'.$reminder.$i} == REMINDER_FIELD_DUE_DATE) {
if (($invoice->partial && $invoice->partial_due_date == $date) if (($invoice->partial && $invoice->partial_due_date == $date)
|| $invoice->due_date == $date) { || $invoice->due_date == $date) {
return "reminder{$i}"; return $reminder.$i;
} }
} else { } else {
if ($invoice->invoice_date == $date) { if ($invoice->invoice_date == $date) {
return "reminder{$i}"; return $reminder.$i;
} }
} }
} }

View File

@ -767,7 +767,7 @@ class AccountRepository
public function findWithReminders() public function findWithReminders()
{ {
return Account::whereHas('account_email_settings', function($query) { return Account::whereHas('account_email_settings', function($query) {
$query->whereRaw('enable_reminder1 = 1 OR enable_reminder2 = 1 OR enable_reminder3 = 1 OR enable_reminder4 = 1'); $query->whereRaw('enable_reminder1 = 1 OR enable_reminder2 = 1 OR enable_reminder3 = 1 OR enable_reminder4 = 1 OR enable_quote_reminder1 = 1 OR enable_quote_reminder2 = 1 OR enable_quote_reminder3 = 1 OR enable_quote_reminder4 = 1');
})->get(); })->get();
} }
@ -779,7 +779,13 @@ class AccountRepository
->orWhere('late_fee2_amount', '>', 0) ->orWhere('late_fee2_amount', '>', 0)
->orWhere('late_fee2_percent', '>', 0) ->orWhere('late_fee2_percent', '>', 0)
->orWhere('late_fee3_amount', '>', 0) ->orWhere('late_fee3_amount', '>', 0)
->orWhere('late_fee3_percent', '>', 0); ->orWhere('late_fee3_percent', '>', 0)
->orWhere('late_fee_quote1_amount', '>', 0)
->orWhere('late_fee_quote1_percent', '>', 0)
->orWhere('late_fee_quote2_amount', '>', 0)
->orWhere('late_fee_quote2_percent', '>', 0)
->orWhere('late_fee_quote3_amount', '>', 0)
->orWhere('late_fee_quote3_percent', '>', 0);
})->get(); })->get();
} }

View File

@ -1198,13 +1198,20 @@ class InvoiceRepository extends BaseRepository
$dates = []; $dates = [];
for ($i = 1; $i <= 3; $i++) { for ($i = 1; $i <= 3; $i++) {
if ($date = $account->getReminderDate($i, $filterEnabled)) { if ($date = $account->getReminderDate('reminder'.$i, $filterEnabled)) {
if ($account->account_email_settings->{"field_reminder{$i}"} == REMINDER_FIELD_DUE_DATE) { if ($account->account_email_settings->{"field_reminder{$i}"} == REMINDER_FIELD_DUE_DATE) {
$dates[] = "(due_date = '$date' OR partial_due_date = '$date')"; $dates[] = "(due_date = '$date' OR partial_due_date = '$date')";
} else { } else {
$dates[] = "invoice_date = '$date'"; $dates[] = "invoice_date = '$date'";
} }
} }
if ($date = $account->getReminderDate('quote_reminder'.$i, $filterEnabled)) {
if ($account->account_email_settings->{"field_quote_reminder{$i}"} == REMINDER_FIELD_DUE_DATE) {
$dates[] = "(due_date = '$date' OR partial_due_date = '$date')";
} else {
$dates[] = "invoice_date = '$date'";
}
}
} }
if (! count($dates)) { if (! count($dates)) {
@ -1212,8 +1219,7 @@ class InvoiceRepository extends BaseRepository
} }
$sql = implode(' OR ', $dates); $sql = implode(' OR ', $dates);
$invoices = Invoice::invoiceType(INVOICE_TYPE_STANDARD) $invoices = Invoice::with('client', 'invoice_items')
->with('client', 'invoice_items')
->whereHas('client', function ($query) { ->whereHas('client', function ($query) {
$query->whereSendReminders(true); $query->whereSendReminders(true);
}) })
@ -1227,12 +1233,19 @@ class InvoiceRepository extends BaseRepository
return $invoices; return $invoices;
} }
public function findNeedingEndlessReminding(Account $account) public function findNeedingEndlessReminding(Account $account, $quote = false)
{ {
$settings = $account->account_email_settings; $invoiceType = INVOICE_TYPE_STANDARD;
$frequencyId = $settings->frequency_id_reminder4; $reminder = 'reminder';
if ($quote) {
$reminder = 'quote_reminder';
$invoiceType = INVOICE_TYPE_QUOTE;
}
if (! $frequencyId || ! $account->account_email_settings->enable_reminder4) { $settings = $account->account_email_settings;
$frequencyId = $settings->{"frequency_id_{$reminder}4"};
if (! $frequencyId || ! $account->account_email_settings->{"enable_{$reminder}4"}) {
return collect(); return collect();
} }
@ -1240,7 +1253,7 @@ class InvoiceRepository extends BaseRepository
$lastSentDate = date_create(); $lastSentDate = date_create();
$lastSentDate->sub(date_interval_create_from_date_string($frequency->date_interval)); $lastSentDate->sub(date_interval_create_from_date_string($frequency->date_interval));
$invoices = Invoice::invoiceType(INVOICE_TYPE_STANDARD) $invoices = Invoice::invoiceType($invoiceType)
->with('client', 'invoice_items') ->with('client', 'invoice_items')
->whereHas('client', function ($query) { ->whereHas('client', function ($query) {
$query->whereSendReminders(true); $query->whereSendReminders(true);
@ -1252,13 +1265,13 @@ class InvoiceRepository extends BaseRepository
->where('last_sent_date', '<', $lastSentDate); ->where('last_sent_date', '<', $lastSentDate);
for ($i=1; $i<=3; $i++) { for ($i=1; $i<=3; $i++) {
if (!$account->account_email_settings->{"enable_reminder{$i}"}) { if (!$account->account_email_settings->{"enable_{$reminder}{$i}"}) {
continue; continue;
} }
$field = $account->account_email_settings->{"field_reminder{$i}"} == REMINDER_FIELD_DUE_DATE ? 'due_date' : 'invoice_date'; $field = $account->account_email_settings->{"field_{$reminder}{$i}"} == REMINDER_FIELD_DUE_DATE ? 'due_date' : 'invoice_date';
$date = date_create(); $date = date_create();
if ($account->account_email_settings->{"direction_reminder{$i}"} == REMINDER_DIRECTION_AFTER) { if ($account->account_email_settings->{"direction_{$reminder}{$i}"} == REMINDER_DIRECTION_AFTER) {
$date->sub(date_interval_create_from_date_string($account->account_email_settings->{"num_days_reminder{$i}"} . ' days')); $date->sub(date_interval_create_from_date_string($account->account_email_settings->{"num_days_{$reminder}{$i}"} . ' days'));
} }
$invoices->where($field, '<', $date); $invoices->where($field, '<', $date);
} }

View File

@ -0,0 +1,100 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddQuoteReminders extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('account_email_settings', function ($table) {
$table->string('email_subject_quote_reminder1');
$table->string('email_subject_quote_reminder2');
$table->string('email_subject_quote_reminder3');
$table->string('email_subject_quote_reminder4');
$table->text('email_template_quote_reminder1');
$table->text('email_template_quote_reminder2');
$table->text('email_template_quote_reminder3');
$table->text('email_template_quote_reminder4');
$table->boolean('enable_quote_reminder1')->default(false);
$table->boolean('enable_quote_reminder2')->default(false);
$table->boolean('enable_quote_reminder3')->default(false);
$table->boolean('enable_quote_reminder4')->default(false);
$table->smallInteger('num_days_quote_reminder1')->default(7);
$table->smallInteger('num_days_quote_reminder2')->default(14);
$table->smallInteger('num_days_quote_reminder3')->default(30);
$table->smallInteger('direction_quote_reminder1')->default(1);
$table->smallInteger('direction_quote_reminder2')->default(1);
$table->smallInteger('direction_quote_reminder3')->default(1);
$table->smallInteger('field_quote_reminder1')->default(1);
$table->smallInteger('field_quote_reminder2')->default(1);
$table->smallInteger('field_quote_reminder3')->default(1);
$table->unsignedInteger('frequency_id_quote_reminder4')->nullable();
$table->decimal('late_fee_quote1_amount', 13, 2)->nullable();
$table->decimal('late_fee_quote1_percent', 13, 3)->nullable();
$table->decimal('late_fee_quote2_amount', 13, 2)->nullable();
$table->decimal('late_fee_quote2_percent', 13, 3)->nullable();
$table->decimal('late_fee_quote3_amount', 13, 2)->nullable();
$table->decimal('late_fee_quote3_percent', 13, 3)->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('account_email_settings', function ($table) {
$table->dropColumn('email_subject_quote_reminder1');
$table->dropColumn('email_subject_quote_reminder2');
$table->dropColumn('email_subject_quote_reminder3');
$table->dropColumn('email_subject_quote_reminder4');
$table->dropColumn('email_template_quote_reminder1');
$table->dropColumn('email_template_quote_reminder2');
$table->dropColumn('email_template_quote_reminder3');
$table->dropColumn('email_template_quote_reminder4');
$table->dropColumn('enable_quote_reminder1');
$table->dropColumn('enable_quote_reminder2');
$table->dropColumn('enable_quote_reminder3');
$table->dropColumn('enable_quote_reminder4');
$table->dropColumn('num_days_quote_reminder1');
$table->dropColumn('num_days_quote_reminder2');
$table->dropColumn('num_days_quote_reminder3');
$table->dropColumn('direction_quote_reminder1');
$table->dropColumn('direction_quote_reminder2');
$table->dropColumn('direction_quote_reminder3');
$table->dropColumn('field_quote_reminder1');
$table->dropColumn('field_quote_reminder2');
$table->dropColumn('field_quote_reminder3');
$table->dropColumn('frequency_id_quote_reminder4');
$table->dropColumn('late_fee_quote1_amount');
$table->dropColumn('late_fee_quote1_percent');
$table->dropColumn('late_fee_quote2_amount');
$table->dropColumn('late_fee_quote2_percent');
$table->dropColumn('late_fee_quote3_amount');
$table->dropColumn('late_fee_quote3_percent');
});
}
}

View File

@ -689,6 +689,7 @@ $LANG = array(
'military_time' => '24 hodinový čas', 'military_time' => '24 hodinový čas',
'last_sent' => 'Poslední odeslány', 'last_sent' => 'Poslední odeslány',
'reminder_emails' => 'Připomínky emailem', 'reminder_emails' => 'Připomínky emailem',
'quote_reminder_emails' => 'Připomínky emailem (nabídky)',
'templates_and_reminders' => 'Šablony & Připomínky', 'templates_and_reminders' => 'Šablony & Připomínky',
'subject' => 'Předmět', 'subject' => 'Předmět',
'body' => 'Tělo', 'body' => 'Tělo',

View File

@ -689,6 +689,7 @@ $LANG = array(
'military_time' => '24 Hour Time', 'military_time' => '24 Hour Time',
'last_sent' => 'Last Sent', 'last_sent' => 'Last Sent',
'reminder_emails' => 'Reminder Emails', 'reminder_emails' => 'Reminder Emails',
'quote_reminder_emails' => 'Quote Reminder Emails',
'templates_and_reminders' => 'Templates & Reminders', 'templates_and_reminders' => 'Templates & Reminders',
'subject' => 'Subject', 'subject' => 'Subject',
'body' => 'Body', 'body' => 'Body',

View File

@ -0,0 +1,150 @@
<div role="tabpanel" class="tab-pane {{ isset($active) && $active ? 'active' : '' }}" id="{{ $field }}">
<div class="panel-body" style="padding-bottom: 0px">
@if (isset($isReminder) && $isReminder)
{!! Former::populateField('enable_' . $field, intval($account->{'enable_' . $field})) !!}
@if (floatval($fee = $account->account_email_settings->{"late_fee_quote{$number}_amount"}))
{!! Former::populateField('late_fee_quote' . $number . '_amount', $fee) !!}
@endif
@if (floatval($fee = $account->account_email_settings->{"late_fee_quote{$number}_percent"}))
{!! Former::populateField('late_fee_quote' . $number . '_percent', $fee) !!}
@endif
<div class="well" style="padding-bottom:20px">
<div class="row">
<div class="col-md-6">
@if ($field == 'quote_reminder4')
{!! Former::populateField('frequency_id_quote_reminder4', $account->account_email_settings->frequency_id_quote_reminder4) !!}
{!! Former::plaintext('frequency')
->value(
Former::select('frequency_id_quote_reminder4')
->options(\App\Models\Frequency::selectOptions())
->style('float:left;')
->raw()
) !!}
@else
{!! Former::populateField('num_days_' . $field, $account->account_email_settings->{'num_days_' . $field}) !!}
{!! Former::populateField('direction_' . $field, $account->account_email_settings->{'direction_' . $field}) !!}
{!! Former::populateField('field_' . $field, $account->account_email_settings->{'field_' . $field}) !!}
{!! Former::plaintext('schedule')
->value(
Former::input('num_days_' . $field)
->style('float:left;width:20%')
->raw() .
Former::select('direction_' . $field)
->addOption(trans('texts.days_before'), REMINDER_DIRECTION_BEFORE)
->addOption(trans('texts.days_after'), REMINDER_DIRECTION_AFTER)
->style('float:left;width:40%')
->raw() .
'<div id="days_after_'. $field .'" style="float:left;width:40%;display:none;padding-top:8px;padding-left:16px;font-size:16px;">' . trans('texts.days_after') . '</div>' .
Former::select('field_' . $field)
->addOption(trans('texts.field_due_date'), REMINDER_FIELD_DUE_DATE)
->addOption(trans('texts.field_invoice_date'), REMINDER_FIELD_INVOICE_DATE)
->style('float:left;width:40%')
->raw()
) !!}
@endif
</div>
<div class="col-md-6">
{!! Former::populateField('enable_' . $field, $account->account_email_settings->{'enable_' . $field}) !!}
{!! Former::checkbox('enable_' . $field)
->text('enable')
->label('send_email')
->value(1) !!}
</div>
</div>
@if ($field != 'quote_reminder4')
<div class="row" style="padding-top:30px">
<div class="col-md-6">
{!! Former::text('late_fee_quote' . $number . '_amount')
->label('late_fee_amount')
->type('number')
->step('any') !!}
</div>
<div class="col-md-6">
{!! Former::text('late_fee_quote' . $number . '_percent')
->label('late_fee_percent')
->type('number')
->step('any')
->append('%') !!}
</div>
</div>
@endif
</div>
<br/>
@endif
<div class="row">
<div class="col-md-6">
<div class="pull-right"><a href="#" onclick="return resetText('{{ 'subject' }}', '{{ $field }}')">{{ trans("texts.reset") }}</a></div>
{!! Former::text('email_subject_' . $field)
->label(trans('texts.subject'))
->appendIcon('question-sign')
->addGroupClass('email-subject') !!}
</div>
<div class="col-md-6">
<p>&nbsp;<p/>
<div id="{{ $field }}_subject_preview"></div>
</div>
</div>
<div class="row">
<br/>
<div class="col-md-6">
<div class="pull-right"><a href="#" onclick="return resetText('{{ 'template' }}', '{{ $field }}')">{{ trans("texts.reset") }}</a></div>
{!! Former::textarea('email_template_' . $field)
->label(trans('texts.body'))
->style('display:none') !!}
<div id="{{ $field }}Editor" class="form-control" style="min-height:160px">
</div>
</div>
<div class="col-md-6">
<p>&nbsp;<p/>
<div id="{{ $field }}_template_preview"></div>
</div>
</div>
<p>&nbsp;<p/>
<div class="row">
<div class="pull-left show-when-ready" style="display:none">
@include('partials/quill_toolbar', ['name' => $field])
</div>
<div class="pull-right" style="padding-top:13px;text-align:right">
{!! Button::normal(trans('texts.raw'))->withAttributes(['onclick' => 'showRaw("'.$field.'")'])->small() !!}
{!! Button::primary(trans('texts.preview'))->withAttributes(['onclick' => 'serverPreview("'.$field.'")'])->small() !!}
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(function() {
var editor = new Quill('#{{ $field }}Editor', {
modules: {
'toolbar': { container: '#{{ $field }}Toolbar' },
'link-tooltip': true
},
theme: 'snow'
});
editor.setHTML($('#email_template_{{ $field }}').val());
editor.on('text-change', function(delta, source) {
if (source == 'api') {
return;
}
var html = editors['{{ $field }}'].getHTML();
$('#email_template_{{ $field }}').val(html);
refreshPreview();
NINJA.formIsChanged = true;
});
editors['{{ $field }}'] = editor;
$('#field_{{ $field }}').change(function() {
setDirectionShown('{{ $field }}');
})
setDirectionShown('{{ $field }}');
$('.email-subject .input-group-addon').click(function() {
$('#templateHelpModal').modal('show');
});
});
</script>

View File

@ -88,6 +88,30 @@
</div> </div>
</div> </div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{!! trans('texts.quote_reminder_emails') !!}</h3>
</div>
<div class="panel-body">
<div class="row">
<div role="tabpanel">
<ul class="nav nav-tabs" role="tablist" style="border: none">
<li role="presentation" class="active"><a href="#quote_reminder1" aria-controls="notes" role="tab" data-toggle="tab">{{ trans('texts.first_reminder') }}</a></li>
<li role="presentation"><a href="#quote_reminder2" aria-controls="terms" role="tab" data-toggle="tab">{{ trans('texts.second_reminder') }}</a></li>
<li role="presentation"><a href="#quote_reminder3" aria-controls="footer" role="tab" data-toggle="tab">{{ trans('texts.third_reminder') }}</a></li>
<li role="presentation"><a href="#quote_reminder4" aria-controls="footer" role="tab" data-toggle="tab">{{ trans('texts.endless_reminder') }}</a></li>
</ul>
<div class="tab-content">
@include('accounts.quote_template', ['field' => 'quote_reminder1', 'number' => 1, 'isReminder' => true, 'active' => true])
@include('accounts.quote_template', ['field' => 'quote_reminder2', 'number' => 2, 'isReminder' => true])
@include('accounts.quote_template', ['field' => 'quote_reminder3', 'number' => 3, 'isReminder' => true])
@include('accounts.quote_template', ['field' => 'quote_reminder4', 'number' => 4, 'isReminder' => true])
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="templatePreviewModal" tabindex="-1" role="dialog" aria-labelledby="templatePreviewModalLabel" aria-hidden="true"> <div class="modal fade" id="templatePreviewModal" tabindex="-1" role="dialog" aria-labelledby="templatePreviewModalLabel" aria-hidden="true">
<div class="modal-dialog" style="width:800px"> <div class="modal-dialog" style="width:800px">