mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 02:44:29 -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');
|
||||
// nlog("reminder template = {$reminder_template}");
|
||||
nlog("reminder template = {$reminder_template}");
|
||||
$invoice->service()->touchReminder($reminder_template)->save();
|
||||
$fees = $this->calcLateFee($invoice, $reminder_template);
|
||||
|
||||
@ -139,7 +139,7 @@ class ReminderJob implements ShouldQueue
|
||||
if ($reminder_template == 'endless_reminder') {
|
||||
$enabled_reminder = 'enable_reminder_endless';
|
||||
}
|
||||
|
||||
|
||||
if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'reminder_endless', 'endless_reminder']) &&
|
||||
$invoice->client->getSetting($enabled_reminder) &&
|
||||
$invoice->client->getSetting('send_reminders') &&
|
||||
|
@ -19,21 +19,31 @@ use Illuminate\Support\Carbon;
|
||||
*/
|
||||
trait MakesReminders
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @param string $schedule_reminder
|
||||
* @param string $num_days_reminder
|
||||
* @return ?bool
|
||||
*/
|
||||
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) {
|
||||
case 'after_invoice_date':
|
||||
return Carbon::parse($this->date)->addDays($num_days_reminder)->startOfDay()->eq(Carbon::now()->startOfDay());
|
||||
break;
|
||||
return Carbon::parse($this->date)->addDays($num_days_reminder)->startOfDay()->addSeconds($offset)->eq(Carbon::now());
|
||||
case 'before_due_date':
|
||||
return Carbon::parse($this->due_date)->subDays($num_days_reminder)->startOfDay()->eq(Carbon::now()->startOfDay());
|
||||
break;
|
||||
return Carbon::parse($this->due_date)->subDays($num_days_reminder)->startOfDay()->addSeconds($offset)->eq(Carbon::now());
|
||||
case 'after_due_date':
|
||||
return Carbon::parse($this->due_date)->addDays($num_days_reminder)->startOfDay()->eq(Carbon::now()->startOfDay());
|
||||
break;
|
||||
return Carbon::parse($this->due_date)->addDays($num_days_reminder)->startOfDay()->addSeconds($offset)->eq(Carbon::now());
|
||||
default:
|
||||
return null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,68 @@ class ReminderTest extends TestCase
|
||||
$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()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user