Update for date calculations to include timezone

This commit is contained in:
David Bomba 2025-04-06 07:27:57 +10:00
parent 902c5182af
commit 5f83c287c8
4 changed files with 212 additions and 211 deletions

View File

@ -550,7 +550,7 @@ class StripePaymentDriver extends BaseDriver implements SupportsHeadlessInterfac
//Search by email //Search by email
$searchResults = \Stripe\Customer::all([ $searchResults = \Stripe\Customer::all([
'email' => $this->client->present()->email(), 'email' => (string)$this->client->present()->email(),
'limit' => 2, 'limit' => 2,
'starting_after' => null, 'starting_after' => null,
], $this->stripe_connect_auth); ], $this->stripe_connect_auth);

View File

@ -55,7 +55,7 @@ class EmailReport
public function run() public function run()
{ {
$start_end_dates = $this->calculateStartAndEndDates($this->scheduler->parameters); $start_end_dates = $this->calculateStartAndEndDates($this->scheduler->parameters, $this->scheduler->company);
$data = $this->scheduler->parameters; $data = $this->scheduler->parameters;
$data['start_date'] = $start_end_dates[0]; $data['start_date'] = $start_end_dates[0];

View File

@ -125,9 +125,9 @@ trait MakesDates
//override for financial years //override for financial years
if ($data['date_range'] == 'this_year') { if ($data['date_range'] == 'this_year') {
$first_month_of_year = $company ? $company?->first_month_of_year : 1; $first_month_of_year = $company ? $company?->first_month_of_year : 1;
$fin_year_start = now()->createFromDate(now()->year, $first_month_of_year, 1); $fin_year_start = now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->createFromDate(now()->year, $first_month_of_year, 1);
if (now()->lt($fin_year_start)) { if (now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->lt($fin_year_start)) {
$fin_year_start->subYearNoOverflow(); $fin_year_start->subYearNoOverflow();
} }
@ -147,17 +147,17 @@ trait MakesDates
} }
return match ($data['date_range']) { return match ($data['date_range']) {
EmailStatement::LAST7 => [now()->startOfDay()->subDays(7)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')], EmailStatement::LAST7 => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(7)->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->format('Y-m-d')],
EmailStatement::LAST30 => [now()->startOfDay()->subDays(30)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')], EmailStatement::LAST30 => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(30)->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->format('Y-m-d')],
EmailStatement::LAST365 => [now()->startOfDay()->subDays(365)->format('Y-m-d'), now()->startOfDay()->format('Y-m-d')], EmailStatement::LAST365 => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(365)->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->format('Y-m-d')],
EmailStatement::THIS_MONTH => [now()->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->lastOfMonth()->format('Y-m-d')], EmailStatement::THIS_MONTH => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->lastOfMonth()->format('Y-m-d')],
EmailStatement::LAST_MONTH => [now()->startOfDay()->subMonthNoOverflow()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->subMonthNoOverflow()->lastOfMonth()->format('Y-m-d')], EmailStatement::LAST_MONTH => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subMonthNoOverflow()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->subMonthNoOverflow()->lastOfMonth()->format('Y-m-d')],
EmailStatement::THIS_QUARTER => [now()->startOfDay()->startOfQuarter()->format('Y-m-d'), now()->startOfDay()->endOfQuarter()->format('Y-m-d')], EmailStatement::THIS_QUARTER => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->startOfQuarter()->format('Y-m-d'), now()->startOfDay()->endOfQuarter()->format('Y-m-d')],
EmailStatement::LAST_QUARTER => [now()->startOfDay()->subQuarterNoOverflow()->startOfQuarter()->format('Y-m-d'), now()->startOfDay()->subQuarterNoOverflow()->endOfQuarter()->format('Y-m-d')], EmailStatement::LAST_QUARTER => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subQuarterNoOverflow()->startOfQuarter()->format('Y-m-d'), now()->startOfDay()->subQuarterNoOverflow()->endOfQuarter()->format('Y-m-d')],
EmailStatement::THIS_YEAR => [$fin_year_start->format('Y-m-d'), $fin_year_start->copy()->addYear()->subDay()->format('Y-m-d')], EmailStatement::THIS_YEAR => [$fin_year_start->format('Y-m-d'), $fin_year_start->copy()->addYear()->subDay()->format('Y-m-d')],
EmailStatement::LAST_YEAR => [$fin_year_start->format('Y-m-d'), $fin_year_start->copy()->addYear()->subDay()->format('Y-m-d')], EmailStatement::LAST_YEAR => [$fin_year_start->format('Y-m-d'), $fin_year_start->copy()->addYear()->subDay()->format('Y-m-d')],
EmailStatement::CUSTOM_RANGE => [$data['start_date'], $data['end_date']], EmailStatement::CUSTOM_RANGE => [$data['start_date'], $data['end_date']],
default => [now()->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->lastOfMonth()->format('Y-m-d')], default => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->lastOfMonth()->format('Y-m-d')],
}; };
} }
@ -168,28 +168,28 @@ trait MakesDates
if ($data['date_range'] == 'this_year') { if ($data['date_range'] == 'this_year') {
$first_month_of_year = $company ? $company?->first_month_of_year : 1; $first_month_of_year = $company ? $company?->first_month_of_year : 1;
$fin_year_start = now()->createFromDate(now()->year, $first_month_of_year, 1); $fin_year_start = now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->createFromDate(now()->year, $first_month_of_year, 1);
$fin_year_start->subYearNoOverflow(); $fin_year_start->subYearNoOverflow();
if (now()->subYear()->lt($fin_year_start)) { if (now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->subYear()->lt($fin_year_start)) {
$fin_year_start->subYearNoOverflow(); $fin_year_start->subYearNoOverflow();
} }
} }
return match ($data['date_range']) { return match ($data['date_range']) {
EmailStatement::LAST7 => [now()->startOfDay()->subDays(14)->format('Y-m-d'), now()->subDays(7)->startOfDay()->format('Y-m-d')], EmailStatement::LAST7 => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(14)->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(7)->format('Y-m-d')],
EmailStatement::LAST30 => [now()->startOfDay()->subDays(60)->format('Y-m-d'), now()->subDays(30)->startOfDay()->format('Y-m-d')], EmailStatement::LAST30 => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(60)->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(30)->format('Y-m-d')],
EmailStatement::LAST365 => [now()->startOfDay()->subDays(739)->format('Y-m-d'), now()->subDays(365)->startOfDay()->format('Y-m-d')], EmailStatement::LAST365 => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(739)->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subDays(365)->format('Y-m-d')],
EmailStatement::THIS_MONTH => [now()->startOfDay()->subMonthNoOverflow()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->subMonthNoOverflow()->lastOfMonth()->format('Y-m-d')], EmailStatement::THIS_MONTH => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subMonthNoOverflow()->firstOfMonth()->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subMonthNoOverflow()->lastOfMonth()->format('Y-m-d')],
EmailStatement::LAST_MONTH => [now()->startOfDay()->subMonthsNoOverflow(2)->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->subMonthNoOverflow()->lastOfMonth()->format('Y-m-d')], EmailStatement::LAST_MONTH => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subMonthsNoOverflow(2)->firstOfMonth()->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subMonthNoOverflow()->lastOfMonth()->format('Y-m-d')],
EmailStatement::THIS_QUARTER => [now()->startOfDay()->subQuarterNoOverflow()->startOfQuarter()->format('Y-m-d'), now()->startOfDay()->subQuarterNoOverflow()->endOfQuarter()->format('Y-m-d')], EmailStatement::THIS_QUARTER => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subQuarterNoOverflow()->startOfQuarter()->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subQuarterNoOverflow()->endOfQuarter()->format('Y-m-d')],
EmailStatement::LAST_QUARTER => [now()->startOfDay()->subQuartersNoOverflow(2)->startOfQuarter()->format('Y-m-d'), now()->startOfDay()->subQuartersNoOverflow(2)->endOfQuarter()->format('Y-m-d')], EmailStatement::LAST_QUARTER => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subQuartersNoOverflow(2)->startOfQuarter()->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->subQuartersNoOverflow(2)->endOfQuarter()->format('Y-m-d')],
EmailStatement::THIS_YEAR => [$fin_year_start->subYear()->format('Y-m-d'), $fin_year_start->copy()->subDay()->format('Y-m-d')], EmailStatement::THIS_YEAR => [$fin_year_start->subYear()->format('Y-m-d'), $fin_year_start->copy()->subDay()->format('Y-m-d')],
EmailStatement::LAST_YEAR => [$fin_year_start->subYear(2)->format('Y-m-d'), $fin_year_start->copy()->subYear()->subDay()->format('Y-m-d')], EmailStatement::LAST_YEAR => [$fin_year_start->subYear(2)->format('Y-m-d'), $fin_year_start->copy()->subYear()->subDay()->format('Y-m-d')],
EmailStatement::CUSTOM_RANGE => [$data['start_date'], $data['end_date']], EmailStatement::CUSTOM_RANGE => [$data['start_date'], $data['end_date']],
default => [now()->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->startOfDay()->lastOfMonth()->format('Y-m-d')], default => [now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->firstOfMonth()->format('Y-m-d'), now()->setTimezone($company->timezone()->name ?? 'Pacific/Midway')->startOfDay()->lastOfMonth()->format('Y-m-d')],
}; };
} }

379
composer.lock generated

File diff suppressed because it is too large Load Diff