mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-01 00:54:38 -04:00
Fixes for endless reminders
This commit is contained in:
parent
eb396e890b
commit
a5054f87a5
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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;
|
||||||
|
@ -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 {
|
||||||
|
@ -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) {
|
||||||
|
@ -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'];
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user