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();
$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();
$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());
$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->settings = $this->settings;
$nmo->to_user = $this->invitation->contact;

View File

@ -14,7 +14,7 @@ namespace App\Jobs\Ninja;
use App\DataMapper\InvoiceItem;
use App\Events\Invoice\InvoiceWasEmailed;
use App\Jobs\Entity\EmailEntity;
use App\Jobs\Util\WebHookHandler;
use App\Jobs\Util\WebhookHandler;
use App\Libraries\MultiDB;
use App\Models\Account;
use App\Models\Invoice;
@ -84,7 +84,7 @@ class SendReminders implements ShouldQueue
if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'endless_reminder'])) {
$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;
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);
if (!$invoice->reminder1_sent) {
@ -139,20 +139,20 @@ class SendReminders implements ShouldQueue
}
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);
if (!$invoice->reminder2_sent) {
$set_reminder3 = true;
$set_reminder2 = true;
}
}
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);
if (!$invoice->reminder3_sent) {
@ -178,6 +178,7 @@ class SendReminders implements ShouldQueue
*/
private function calculateScheduledDate($invoice, $schedule_reminder, $num_days_reminder) :?Carbon
{
switch ($schedule_reminder) {
case 'after_invoice_date':
return Carbon::parse($invoice->date)->addDays($num_days_reminder)->startOfDay();
@ -219,15 +220,16 @@ class SendReminders implements ShouldQueue
if ($this->checkSendSetting($invoice, $template)) {
event(new InvoiceWasEmailed($invoice->invitations->first(), $invoice->company, Ninja::eventVars(), $template));
}
$invoice->last_sent_date = now();
$invoice->next_send_date = $this->calculateNextSendDate($invoice);
if (in_array($template, ['reminder1', 'reminder2', 'reminder3'])) {
$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
*/
namespace App\Jobs\Util;
use App\Jobs\Util\SystemLogger;

View File

@ -47,6 +47,9 @@ class CreditEmailEngine extends BaseEmailEngine
$t = app('translator');
$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) {
$body_template = $this->template_data['body'];
} else {

View File

@ -50,6 +50,9 @@ class InvoiceEmailEngine extends BaseEmailEngine
$t = app('translator');
$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) {
$body_template = $this->template_data['body'];
} elseif (strlen($this->client->getSetting('email_template_'.$this->reminder_template)) > 0) {

View File

@ -47,6 +47,9 @@ class QuoteEmailEngine extends BaseEmailEngine
App::forgetInstance('translator');
$t = app('translator');
$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) {
$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->reminder_last_sent = now()->format('Y-m-d');
break;
case 'endless_reminder':
$this->invoice->reminder_last_sent = now()->format('Y-m-d');
break;
default:
// code...
break;

View File

@ -51,20 +51,20 @@ trait MakesReminders
if ($this->inReminderWindow(
$client->getSetting('schedule_reminder1'),
$client->getSetting('num_days_reminder1')
)) {
) && !$this->reminder1_sent) {
return 'reminder1';
} elseif ($this->inReminderWindow(
$client->getSetting('schedule_reminder2'),
$client->getSetting('num_days_reminder2')
)) {
) && !$this->reminder2_sent) {
return 'reminder2';
} elseif ($this->inReminderWindow(
$client->getSetting('schedule_reminder3'),
$client->getSetting('num_days_reminder3')
)) {
) && !$this->reminder3_sent) {
return 'reminder3';
} elseif ($this->checkEndlessReminder(
$this->last_sent_date,
$this->reminder_last_sent,
$client->getSetting('endless_reminder_frequency_id')
)) {
return 'endless_reminder';
@ -76,7 +76,11 @@ trait MakesReminders
}
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))) {
return true;
}
@ -85,12 +89,15 @@ trait MakesReminders
}
private function addTimeInterval($date, $endless_reminder_frequency_id) :?Carbon
{
{
if (!$date)
return null;
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();
case RecurringInvoice::FREQUENCY_TWO_WEEKS:
return Carbon::parse($date)->addWeeks(2)->startOfDay();