Fixed timezone issue in timentry index endpoint

This commit is contained in:
Constantin Graf
2024-04-29 17:21:57 +02:00
committed by Constantin Graf
parent 4242b23ada
commit fccd57a3f3
2 changed files with 19 additions and 11 deletions

View File

@@ -17,6 +17,7 @@ use App\Service\TimezoneService;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
@@ -53,11 +54,11 @@ class TimeEntryController extends Controller
->orderBy('start', 'desc');
if ($request->has('before')) {
$timeEntriesQuery->whereDate('start', '<', $request->input('before'));
$timeEntriesQuery->where('start', '<', Carbon::createFromFormat('Y-m-d\TH:i:s\Z', $request->input('before'), 'UTC'));
}
if ($request->has('after')) {
$timeEntriesQuery->whereDate('start', '>', $request->input('after'));
$timeEntriesQuery->where('start', '>', Carbon::createFromFormat('Y-m-d\TH:i:s\Z', $request->input('after'), 'UTC'));
}
if ($request->has('active')) {
@@ -105,7 +106,8 @@ class TimeEntryController extends Controller
]);
$timeEntries = $timeEntriesQuery
->limit(5000)
->whereDate('start', '=', $lastDate->toDateString())
->where('start', '>=', $lastDate->copy()->startOfDay()->utc())
->where('start', '<=', $lastDate->copy()->endOfDay()->utc())
->get();
}
}

View File

@@ -311,21 +311,27 @@ class TimeEntryEndpointTest extends ApiEndpointTestAbstract
'time-entries:view:own',
]);
$timeEntriesAfter = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
->startBetween(Carbon::now()->subDay()->startOfDay(), Carbon::now())
->startBetween(
Carbon::now()->timezone($data->user->timezone)->subDay()->startOfDay()->utc(),
Carbon::now()->timezone($data->user->timezone)->utc()
)
->createMany(3);
$timeEntriesBefore = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
->startBetween(Carbon::now()->subDays(2)->startOfDay(), Carbon::now()->subDays(2)->endOfDay())
->startBetween(
Carbon::now()->timezone($data->user->timezone)->subDays(2)->startOfDay()->utc(),
Carbon::now()->timezone($data->user->timezone)->subDays(2)->endOfDay()->utc()
)
->createMany(3);
$timeEntriesDirectlyBeforeLimit = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
->create([
'start' => Carbon::now()->subDays(2)->endOfDay(),
'start' => Carbon::now()->timezone($data->user->timezone)->subDays(2)->endOfDay()->utc(),
]);
Passport::actingAs($data->user);
// Act
$response = $this->getJson(route('api.v1.time-entries.index', [
$data->organization->getKey(),
'before' => Carbon::now()->subDay()->startOfDay()->toIso8601ZuluString(),
'before' => Carbon::now()->timezone($data->user->timezone)->subDay()->startOfDay()->toIso8601ZuluString(),
'user_id' => $data->user->getKey(),
]));
@@ -348,21 +354,21 @@ class TimeEntryEndpointTest extends ApiEndpointTestAbstract
'time-entries:view:own',
]);
$timeEntriesAfter = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
->startBetween(Carbon::now()->startOfDay(), Carbon::now())
->startBetween(Carbon::now($data->user->timezone)->startOfDay()->utc(), Carbon::now($data->user->timezone)->utc())
->createMany(3);
$timeEntriesBefore = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
->startBetween(Carbon::now()->subDay()->startOfDay(), Carbon::now()->subDay()->endOfDay())
->startBetween(Carbon::now($data->user->timezone)->subDay()->startOfDay()->utc(), Carbon::now($data->user->timezone)->subDay()->endOfDay()->utc())
->createMany(3);
$timeEntriesDirectlyAfterLimit = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
->create([
'start' => Carbon::now()->startOfDay(),
'start' => Carbon::now($data->user->timezone)->startOfDay()->utc(),
]);
Passport::actingAs($data->user);
// Act
$response = $this->getJson(route('api.v1.time-entries.index', [
$data->organization->getKey(),
'after' => Carbon::now()->subDay()->endOfDay()->toIso8601ZuluString(), // yesterday
'after' => Carbon::now($data->user->timezone)->subDay()->endOfDay()->toIso8601ZuluString(), // yesterday
'user_id' => $data->user->getKey(),
]));