mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-16 20:22:15 +01:00
Fixed timezone issue in timentry index endpoint
This commit is contained in:
committed by
Constantin Graf
parent
4242b23ada
commit
fccd57a3f3
@@ -17,6 +17,7 @@ use App\Service\TimezoneService;
|
|||||||
use Illuminate\Auth\Access\AuthorizationException;
|
use Illuminate\Auth\Access\AuthorizationException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
@@ -53,11 +54,11 @@ class TimeEntryController extends Controller
|
|||||||
->orderBy('start', 'desc');
|
->orderBy('start', 'desc');
|
||||||
|
|
||||||
if ($request->has('before')) {
|
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')) {
|
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')) {
|
if ($request->has('active')) {
|
||||||
@@ -105,7 +106,8 @@ class TimeEntryController extends Controller
|
|||||||
]);
|
]);
|
||||||
$timeEntries = $timeEntriesQuery
|
$timeEntries = $timeEntriesQuery
|
||||||
->limit(5000)
|
->limit(5000)
|
||||||
->whereDate('start', '=', $lastDate->toDateString())
|
->where('start', '>=', $lastDate->copy()->startOfDay()->utc())
|
||||||
|
->where('start', '<=', $lastDate->copy()->endOfDay()->utc())
|
||||||
->get();
|
->get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -311,21 +311,27 @@ class TimeEntryEndpointTest extends ApiEndpointTestAbstract
|
|||||||
'time-entries:view:own',
|
'time-entries:view:own',
|
||||||
]);
|
]);
|
||||||
$timeEntriesAfter = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
$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);
|
->createMany(3);
|
||||||
$timeEntriesBefore = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
$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);
|
->createMany(3);
|
||||||
$timeEntriesDirectlyBeforeLimit = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
$timeEntriesDirectlyBeforeLimit = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
||||||
->create([
|
->create([
|
||||||
'start' => Carbon::now()->subDays(2)->endOfDay(),
|
'start' => Carbon::now()->timezone($data->user->timezone)->subDays(2)->endOfDay()->utc(),
|
||||||
]);
|
]);
|
||||||
Passport::actingAs($data->user);
|
Passport::actingAs($data->user);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
$response = $this->getJson(route('api.v1.time-entries.index', [
|
$response = $this->getJson(route('api.v1.time-entries.index', [
|
||||||
$data->organization->getKey(),
|
$data->organization->getKey(),
|
||||||
'before' => Carbon::now()->subDay()->startOfDay()->toIso8601ZuluString(),
|
'before' => Carbon::now()->timezone($data->user->timezone)->subDay()->startOfDay()->toIso8601ZuluString(),
|
||||||
'user_id' => $data->user->getKey(),
|
'user_id' => $data->user->getKey(),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
@@ -348,21 +354,21 @@ class TimeEntryEndpointTest extends ApiEndpointTestAbstract
|
|||||||
'time-entries:view:own',
|
'time-entries:view:own',
|
||||||
]);
|
]);
|
||||||
$timeEntriesAfter = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
$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);
|
->createMany(3);
|
||||||
$timeEntriesBefore = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
$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);
|
->createMany(3);
|
||||||
$timeEntriesDirectlyAfterLimit = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
$timeEntriesDirectlyAfterLimit = TimeEntry::factory()->forOrganization($data->organization)->forUser($data->user)
|
||||||
->create([
|
->create([
|
||||||
'start' => Carbon::now()->startOfDay(),
|
'start' => Carbon::now($data->user->timezone)->startOfDay()->utc(),
|
||||||
]);
|
]);
|
||||||
Passport::actingAs($data->user);
|
Passport::actingAs($data->user);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
$response = $this->getJson(route('api.v1.time-entries.index', [
|
$response = $this->getJson(route('api.v1.time-entries.index', [
|
||||||
$data->organization->getKey(),
|
$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(),
|
'user_id' => $data->user->getKey(),
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user