Fixes for endless reminders

This commit is contained in:
David Bomba 2021-06-10 11:15:21 +10:00
parent eb396e890b
commit a5054f87a5
9 changed files with 43 additions and 23 deletions

View File

@ -89,7 +89,7 @@ class SendRemindersCron extends Command
->cursor(); ->cursor();
$invoices->each(function ($invoice) { $invoices->each(function ($invoice) {
WebHookHandler::dispatch(Webhook::EVENT_LATE_INVOICE, $invoice, $invoice->company); WebhookHandler::dispatch(Webhook::EVENT_LATE_INVOICE, $invoice, $invoice->company);
}); });
@ -99,7 +99,7 @@ class SendRemindersCron extends Command
->cursor(); ->cursor();
$quotes->each(function ($quote) { $quotes->each(function ($quote) {
WebHookHandler::dispatch(Webhook::EVENT_EXPIRED_QUOTE, $quote, $quote->company); WebhookHandler::dispatch(Webhook::EVENT_EXPIRED_QUOTE, $quote, $quote->company);
}); });
} }

View File

@ -109,9 +109,8 @@ class EmailEntity implements ShouldQueue
App::setLocale($this->invitation->contact->preferredLocale()); App::setLocale($this->invitation->contact->preferredLocale());
$nmo = new NinjaMailerObject; $nmo = new NinjaMailerObject;
$nmo->mailable = new TemplateEmail($this->email_entity_builder,$this->invitation->contact, $this->invitation); $nmo->mailable = new TemplateEmail($this->email_entity_builder, $this->invitation->contact, $this->invitation);
$nmo->company = $this->company; $nmo->company = $this->company;
$nmo->settings = $this->settings; $nmo->settings = $this->settings;
$nmo->to_user = $this->invitation->contact; $nmo->to_user = $this->invitation->contact;

View File

@ -14,7 +14,7 @@ namespace App\Jobs\Ninja;
use App\DataMapper\InvoiceItem; use App\DataMapper\InvoiceItem;
use App\Events\Invoice\InvoiceWasEmailed; use App\Events\Invoice\InvoiceWasEmailed;
use App\Jobs\Entity\EmailEntity; use App\Jobs\Entity\EmailEntity;
use App\Jobs\Util\WebHookHandler; use App\Jobs\Util\WebhookHandler;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Account; use App\Models\Account;
use App\Models\Invoice; use App\Models\Invoice;
@ -84,7 +84,7 @@ class SendReminders implements ShouldQueue
if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'endless_reminder'])) { if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'endless_reminder'])) {
$this->sendReminder($invoice, $reminder_template); $this->sendReminder($invoice, $reminder_template);
WebHookHandler::dispatch(Webhook::EVENT_REMIND_INVOICE, $invoice, $invoice->company); WebhookHandler::dispatch(Webhook::EVENT_REMIND_INVOICE, $invoice, $invoice->company);
} }
}); });
} }
@ -128,9 +128,9 @@ class SendReminders implements ShouldQueue
$set_reminder3 = false; $set_reminder3 = false;
if ((int)$settings->schedule_reminder1 > 0) { if ((int)$settings->schedule_reminder1 > 0) {
$next_reminder_date = $this->calculateScheduledDate($invoice, (int)$settings->schedule_reminder1, (int)$settings->num_days_reminder1); $next_reminder_date = $this->calculateScheduledDate($invoice, $settings->schedule_reminder1, (int)$settings->num_days_reminder1);
if ($next_reminder_date->gt(Carbon::parse($invoice->last_sent_date))); if ($next_reminder_date && $next_reminder_date->gt(Carbon::parse($invoice->last_sent_date)));
$dates->push($next_reminder_date); $dates->push($next_reminder_date);
if (!$invoice->reminder1_sent) { if (!$invoice->reminder1_sent) {
@ -139,20 +139,20 @@ class SendReminders implements ShouldQueue
} }
if ((int)$settings->num_days_reminder2 > 0) { if ((int)$settings->num_days_reminder2 > 0) {
$next_reminder_date = $this->calculateScheduledDate($invoice, (int)$settings->schedule_reminder2, (int)$settings->num_days_reminder2); $next_reminder_date = $this->calculateScheduledDate($invoice, $settings->schedule_reminder2, (int)$settings->num_days_reminder2);
if ($next_reminder_date->gt(Carbon::parse($invoice->last_sent_date))); if ($next_reminder_date && $next_reminder_date->gt(Carbon::parse($invoice->last_sent_date)));
$dates->push($next_reminder_date); $dates->push($next_reminder_date);
if (!$invoice->reminder2_sent) { if (!$invoice->reminder2_sent) {
$set_reminder3 = true; $set_reminder2 = true;
} }
} }
if ((int)$settings->num_days_reminder3 > 0) { if ((int)$settings->num_days_reminder3 > 0) {
$next_reminder_date = $this->calculateScheduledDate($invoice, (int)$settings->schedule_reminder3, (int)$settings->num_days_reminder3); $next_reminder_date = $this->calculateScheduledDate($invoice, $settings->schedule_reminder3, (int)$settings->num_days_reminder3);
if ($next_reminder_date->gt(Carbon::parse($invoice->last_sent_date))); if ($next_reminder_date && $next_reminder_date->gt(Carbon::parse($invoice->last_sent_date)));
$dates->push($next_reminder_date); $dates->push($next_reminder_date);
if (!$invoice->reminder3_sent) { if (!$invoice->reminder3_sent) {
@ -178,6 +178,7 @@ class SendReminders implements ShouldQueue
*/ */
private function calculateScheduledDate($invoice, $schedule_reminder, $num_days_reminder) :?Carbon private function calculateScheduledDate($invoice, $schedule_reminder, $num_days_reminder) :?Carbon
{ {
switch ($schedule_reminder) { switch ($schedule_reminder) {
case 'after_invoice_date': case 'after_invoice_date':
return Carbon::parse($invoice->date)->addDays($num_days_reminder)->startOfDay(); return Carbon::parse($invoice->date)->addDays($num_days_reminder)->startOfDay();
@ -219,15 +220,16 @@ class SendReminders implements ShouldQueue
if ($this->checkSendSetting($invoice, $template)) { if ($this->checkSendSetting($invoice, $template)) {
event(new InvoiceWasEmailed($invoice->invitations->first(), $invoice->company, Ninja::eventVars(), $template)); event(new InvoiceWasEmailed($invoice->invitations->first(), $invoice->company, Ninja::eventVars(), $template));
} }
$invoice->last_sent_date = now(); $invoice->last_sent_date = now();
$invoice->next_send_date = $this->calculateNextSendDate($invoice); $invoice->next_send_date = $this->calculateNextSendDate($invoice);
if (in_array($template, ['reminder1', 'reminder2', 'reminder3'])) { if (in_array($template, ['reminder1', 'reminder2', 'reminder3'])) {
$invoice->{$template."_sent"} = now(); $invoice->{$template."_sent"} = now();
} }
$invoice->service()->touchReminder($template)->save();
$invoice->save(); // $invoice->save();
} }
/** /**

View File

@ -8,6 +8,7 @@
* *
* @license https://opensource.org/licenses/AAL * @license https://opensource.org/licenses/AAL
*/ */
namespace App\Jobs\Util; namespace App\Jobs\Util;
use App\Jobs\Util\SystemLogger; use App\Jobs\Util\SystemLogger;

View File

@ -47,6 +47,9 @@ class CreditEmailEngine extends BaseEmailEngine
$t = app('translator'); $t = app('translator');
$t->replace(Ninja::transformTranslations($this->client->getMergedSettings())); $t->replace(Ninja::transformTranslations($this->client->getMergedSettings()));
if($this->reminder_template == 'endless_reminder')
$this->reminder_template = 'reminder_endless';
if (is_array($this->template_data) && array_key_exists('body', $this->template_data) && strlen($this->template_data['body']) > 0) { if (is_array($this->template_data) && array_key_exists('body', $this->template_data) && strlen($this->template_data['body']) > 0) {
$body_template = $this->template_data['body']; $body_template = $this->template_data['body'];
} else { } else {

View File

@ -50,6 +50,9 @@ class InvoiceEmailEngine extends BaseEmailEngine
$t = app('translator'); $t = app('translator');
$t->replace(Ninja::transformTranslations($this->client->getMergedSettings())); $t->replace(Ninja::transformTranslations($this->client->getMergedSettings()));
if($this->reminder_template == 'endless_reminder')
$this->reminder_template = 'reminder_endless';
if (is_array($this->template_data) && array_key_exists('body', $this->template_data) && strlen($this->template_data['body']) > 0) { if (is_array($this->template_data) && array_key_exists('body', $this->template_data) && strlen($this->template_data['body']) > 0) {
$body_template = $this->template_data['body']; $body_template = $this->template_data['body'];
} elseif (strlen($this->client->getSetting('email_template_'.$this->reminder_template)) > 0) { } elseif (strlen($this->client->getSetting('email_template_'.$this->reminder_template)) > 0) {

View File

@ -47,6 +47,9 @@ class QuoteEmailEngine extends BaseEmailEngine
App::forgetInstance('translator'); App::forgetInstance('translator');
$t = app('translator'); $t = app('translator');
$t->replace(Ninja::transformTranslations($this->client->getMergedSettings())); $t->replace(Ninja::transformTranslations($this->client->getMergedSettings()));
if($this->reminder_template == 'endless_reminder')
$this->reminder_template = 'reminder_endless';
if (is_array($this->template_data) && array_key_exists('body', $this->template_data) && strlen($this->template_data['body']) > 0) { if (is_array($this->template_data) && array_key_exists('body', $this->template_data) && strlen($this->template_data['body']) > 0) {
$body_template = $this->template_data['body']; $body_template = $this->template_data['body'];

View File

@ -376,7 +376,9 @@ class InvoiceService
$this->invoice->reminder3_sent = now()->format('Y-m-d'); $this->invoice->reminder3_sent = now()->format('Y-m-d');
$this->invoice->reminder_last_sent = now()->format('Y-m-d'); $this->invoice->reminder_last_sent = now()->format('Y-m-d');
break; break;
case 'endless_reminder':
$this->invoice->reminder_last_sent = now()->format('Y-m-d');
break;
default: default:
// code... // code...
break; break;

View File

@ -51,20 +51,20 @@ trait MakesReminders
if ($this->inReminderWindow( if ($this->inReminderWindow(
$client->getSetting('schedule_reminder1'), $client->getSetting('schedule_reminder1'),
$client->getSetting('num_days_reminder1') $client->getSetting('num_days_reminder1')
)) { ) && !$this->reminder1_sent) {
return 'reminder1'; return 'reminder1';
} elseif ($this->inReminderWindow( } elseif ($this->inReminderWindow(
$client->getSetting('schedule_reminder2'), $client->getSetting('schedule_reminder2'),
$client->getSetting('num_days_reminder2') $client->getSetting('num_days_reminder2')
)) { ) && !$this->reminder2_sent) {
return 'reminder2'; return 'reminder2';
} elseif ($this->inReminderWindow( } elseif ($this->inReminderWindow(
$client->getSetting('schedule_reminder3'), $client->getSetting('schedule_reminder3'),
$client->getSetting('num_days_reminder3') $client->getSetting('num_days_reminder3')
)) { ) && !$this->reminder3_sent) {
return 'reminder3'; return 'reminder3';
} elseif ($this->checkEndlessReminder( } elseif ($this->checkEndlessReminder(
$this->last_sent_date, $this->reminder_last_sent,
$client->getSetting('endless_reminder_frequency_id') $client->getSetting('endless_reminder_frequency_id')
)) { )) {
return 'endless_reminder'; return 'endless_reminder';
@ -76,7 +76,11 @@ trait MakesReminders
} }
private function checkEndlessReminder($last_sent_date, $endless_reminder_frequency_id) :bool private function checkEndlessReminder($last_sent_date, $endless_reminder_frequency_id) :bool
{ {
nlog("endless date match = ".$this->addTimeInterval($last_sent_date, $endless_reminder_frequency_id));
nlog("Endless reminder bool = ");
nlog(Carbon::now()->startOfDay()->eq($this->addTimeInterval($last_sent_date, $endless_reminder_frequency_id)));
if (Carbon::now()->startOfDay()->eq($this->addTimeInterval($last_sent_date, $endless_reminder_frequency_id))) { if (Carbon::now()->startOfDay()->eq($this->addTimeInterval($last_sent_date, $endless_reminder_frequency_id))) {
return true; return true;
} }
@ -85,12 +89,15 @@ trait MakesReminders
} }
private function addTimeInterval($date, $endless_reminder_frequency_id) :?Carbon private function addTimeInterval($date, $endless_reminder_frequency_id) :?Carbon
{ {
if (!$date) if (!$date)
return null; return null;
switch ($endless_reminder_frequency_id) { switch ($endless_reminder_frequency_id) {
case RecurringInvoice::FREQUENCY_WEEKLY: case RecurringInvoice::FREQUENCY_DAILY:
return Carbon::parse($date)->addDay()->startOfDay();
case RecurringInvoice::FREQUENCY_WEEKLY:
return Carbon::parse($date)->addWeek()->startOfDay(); return Carbon::parse($date)->addWeek()->startOfDay();
case RecurringInvoice::FREQUENCY_TWO_WEEKS: case RecurringInvoice::FREQUENCY_TWO_WEEKS:
return Carbon::parse($date)->addWeeks(2)->startOfDay(); return Carbon::parse($date)->addWeeks(2)->startOfDay();