mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Fixes for timezone correction
This commit is contained in:
parent
0e152fff26
commit
aac1cab448
@ -125,7 +125,7 @@ class ReminderJob implements ShouldQueue
|
|||||||
}
|
}
|
||||||
|
|
||||||
$reminder_template = $invoice->calculateTemplate('invoice');
|
$reminder_template = $invoice->calculateTemplate('invoice');
|
||||||
// nlog("reminder template = {$reminder_template}");
|
nlog("reminder template = {$reminder_template}");
|
||||||
$invoice->service()->touchReminder($reminder_template)->save();
|
$invoice->service()->touchReminder($reminder_template)->save();
|
||||||
$fees = $this->calcLateFee($invoice, $reminder_template);
|
$fees = $this->calcLateFee($invoice, $reminder_template);
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ class ReminderJob implements ShouldQueue
|
|||||||
if ($reminder_template == 'endless_reminder') {
|
if ($reminder_template == 'endless_reminder') {
|
||||||
$enabled_reminder = 'enable_reminder_endless';
|
$enabled_reminder = 'enable_reminder_endless';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'reminder_endless', 'endless_reminder']) &&
|
if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'reminder_endless', 'endless_reminder']) &&
|
||||||
$invoice->client->getSetting($enabled_reminder) &&
|
$invoice->client->getSetting($enabled_reminder) &&
|
||||||
$invoice->client->getSetting('send_reminders') &&
|
$invoice->client->getSetting('send_reminders') &&
|
||||||
|
@ -19,21 +19,31 @@ use Illuminate\Support\Carbon;
|
|||||||
*/
|
*/
|
||||||
trait MakesReminders
|
trait MakesReminders
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param string $schedule_reminder
|
||||||
|
* @param string $num_days_reminder
|
||||||
|
* @return ?bool
|
||||||
|
*/
|
||||||
public function inReminderWindow($schedule_reminder, $num_days_reminder)
|
public function inReminderWindow($schedule_reminder, $num_days_reminder)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
$offset = $this->client->timezone_offset();
|
||||||
|
|
||||||
|
// nlog($schedule_reminder. " ". $num_days_reminder);
|
||||||
|
// nlog("date = " . Carbon::parse($this->date)->addDays($num_days_reminder)->startOfDay()->addSeconds($offset));
|
||||||
|
// nlog("due date = " . Carbon::parse($this->due_date)->addDays($num_days_reminder)->startOfDay()->addSeconds($offset));
|
||||||
|
// nlog("now = " . Carbon::now()->startOfDay()->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
switch ($schedule_reminder) {
|
switch ($schedule_reminder) {
|
||||||
case 'after_invoice_date':
|
case 'after_invoice_date':
|
||||||
return Carbon::parse($this->date)->addDays($num_days_reminder)->startOfDay()->eq(Carbon::now()->startOfDay());
|
return Carbon::parse($this->date)->addDays($num_days_reminder)->startOfDay()->addSeconds($offset)->eq(Carbon::now());
|
||||||
break;
|
|
||||||
case 'before_due_date':
|
case 'before_due_date':
|
||||||
return Carbon::parse($this->due_date)->subDays($num_days_reminder)->startOfDay()->eq(Carbon::now()->startOfDay());
|
return Carbon::parse($this->due_date)->subDays($num_days_reminder)->startOfDay()->addSeconds($offset)->eq(Carbon::now());
|
||||||
break;
|
|
||||||
case 'after_due_date':
|
case 'after_due_date':
|
||||||
return Carbon::parse($this->due_date)->addDays($num_days_reminder)->startOfDay()->eq(Carbon::now()->startOfDay());
|
return Carbon::parse($this->due_date)->addDays($num_days_reminder)->startOfDay()->addSeconds($offset)->eq(Carbon::now());
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,68 @@ class ReminderTest extends TestCase
|
|||||||
$this->withoutExceptionHandling();
|
$this->withoutExceptionHandling();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testForReminderFiringCorrectly()
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->invoice->next_send_date = null;
|
||||||
|
$this->invoice->date = now()->format('Y-m-d');
|
||||||
|
$this->invoice->last_sent_date = now();
|
||||||
|
$this->invoice->due_date = Carbon::now()->addDays(5)->format('Y-m-d');
|
||||||
|
$this->invoice->reminder_last_sent = null;
|
||||||
|
$this->invoice->save();
|
||||||
|
|
||||||
|
$settings = $this->company->settings;
|
||||||
|
$settings->enable_reminder1 = true;
|
||||||
|
$settings->schedule_reminder1 = 'after_invoice_date';
|
||||||
|
$settings->num_days_reminder1 = 2;
|
||||||
|
$settings->enable_reminder2 = false;
|
||||||
|
$settings->schedule_reminder2 = '';
|
||||||
|
$settings->num_days_reminder2 = 0;
|
||||||
|
$settings->enable_reminder3 = false;
|
||||||
|
$settings->schedule_reminder3 = '';
|
||||||
|
$settings->num_days_reminder3 = 0;
|
||||||
|
$settings->timezone_id = '109';
|
||||||
|
$settings->entity_send_time = 6;
|
||||||
|
$settings->endless_reminder_frequency_id = '';
|
||||||
|
$settings->enable_reminder_endless = false;
|
||||||
|
|
||||||
|
$this->client->company->settings = $settings;
|
||||||
|
$this->client->push();
|
||||||
|
|
||||||
|
$client_settings = $settings;
|
||||||
|
$client_settings->timezone_id = '5';
|
||||||
|
$client_settings->entity_send_time = 8;
|
||||||
|
|
||||||
|
$this->invoice->client->settings = $client_settings;
|
||||||
|
$this->invoice->push();
|
||||||
|
|
||||||
|
$this->invoice = $this->invoice->service()->markSent()->save();
|
||||||
|
$this->invoice->service()->setReminder($client_settings)->save();
|
||||||
|
|
||||||
|
$this->invoice = $this->invoice->fresh();
|
||||||
|
|
||||||
|
//due to UTC server time, we actually send the "day before"
|
||||||
|
$this->assertEquals(now()->addDays(1)->format('Y-m-d'), Carbon::parse($this->invoice->next_send_date)->format('Y-m-d'));
|
||||||
|
|
||||||
|
$this->travelTo(now()->startOfDay());
|
||||||
|
|
||||||
|
for($x=0; $x<46; $x++) {
|
||||||
|
|
||||||
|
// nlog("traveller {$x} ".now()->format('Y-m-d h:i:s'));
|
||||||
|
(new ReminderJob())->handle();
|
||||||
|
$this->invoice = $this->invoice->fresh();
|
||||||
|
$this->assertNull($this->invoice->reminder1_sent);
|
||||||
|
$this->assertNull($this->invoice->reminder_last_sent);
|
||||||
|
|
||||||
|
$this->travelTo(now()->addHours(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// nlog("traveller ".now()->format('Y-m-d'));
|
||||||
|
(new ReminderJob())->handle();
|
||||||
|
$this->invoice = $this->invoice->fresh();
|
||||||
|
$this->assertNotNull($this->invoice->reminder1_sent);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function testForSingleEndlessReminder()
|
public function testForSingleEndlessReminder()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user