diff --git a/app/Console/Commands/SendRemindersCron.php b/app/Console/Commands/SendRemindersCron.php index 45177ef269c8..442b883ecb3b 100644 --- a/app/Console/Commands/SendRemindersCron.php +++ b/app/Console/Commands/SendRemindersCron.php @@ -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); }); } diff --git a/app/Jobs/Entity/EmailEntity.php b/app/Jobs/Entity/EmailEntity.php index 6e8b04f90f9e..9416116cf04d 100644 --- a/app/Jobs/Entity/EmailEntity.php +++ b/app/Jobs/Entity/EmailEntity.php @@ -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; diff --git a/app/Jobs/Ninja/SendReminders.php b/app/Jobs/Ninja/SendReminders.php index 023869674ab8..24ce41edca23 100644 --- a/app/Jobs/Ninja/SendReminders.php +++ b/app/Jobs/Ninja/SendReminders.php @@ -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(); } /** diff --git a/app/Jobs/Util/WebhookHandler.php b/app/Jobs/Util/WebhookHandler.php index 35fb4274ef88..748910cf8dfc 100644 --- a/app/Jobs/Util/WebhookHandler.php +++ b/app/Jobs/Util/WebhookHandler.php @@ -8,6 +8,7 @@ * * @license https://opensource.org/licenses/AAL */ + namespace App\Jobs\Util; use App\Jobs\Util\SystemLogger; diff --git a/app/Mail/Engine/CreditEmailEngine.php b/app/Mail/Engine/CreditEmailEngine.php index 47b7af9785cc..07d5b60d3ed7 100644 --- a/app/Mail/Engine/CreditEmailEngine.php +++ b/app/Mail/Engine/CreditEmailEngine.php @@ -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 { diff --git a/app/Mail/Engine/InvoiceEmailEngine.php b/app/Mail/Engine/InvoiceEmailEngine.php index c837b99354cc..09fe9b9c3e53 100644 --- a/app/Mail/Engine/InvoiceEmailEngine.php +++ b/app/Mail/Engine/InvoiceEmailEngine.php @@ -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) { diff --git a/app/Mail/Engine/QuoteEmailEngine.php b/app/Mail/Engine/QuoteEmailEngine.php index 44c3ca9cb843..901a0c38dbae 100644 --- a/app/Mail/Engine/QuoteEmailEngine.php +++ b/app/Mail/Engine/QuoteEmailEngine.php @@ -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']; diff --git a/app/Services/Invoice/InvoiceService.php b/app/Services/Invoice/InvoiceService.php index f0cf40cb6411..54049fa00269 100644 --- a/app/Services/Invoice/InvoiceService.php +++ b/app/Services/Invoice/InvoiceService.php @@ -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; diff --git a/app/Utils/Traits/MakesReminders.php b/app/Utils/Traits/MakesReminders.php index d0457321f141..eff41b8a8a5d 100644 --- a/app/Utils/Traits/MakesReminders.php +++ b/app/Utils/Traits/MakesReminders.php @@ -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();