@@ -316,10 +316,12 @@ public function getWeeklyTimesheets(int $projectId, CarbonInterface $fromDate, i
316
316
$ currentWorkDate = dtHelper ()->parseDbDateTime ($ timesheet ['workDate ' ]);
317
317
318
318
// Detect timezone offset
319
+
319
320
$ workdateOffsetStart = ($ currentWorkDate ->setToUserTimezone ()->secondsSinceMidnight () / 60 / 60 );
320
321
321
322
// Various Entries can be in different timezones and thus would not be caught by upsert or grouping by
322
323
// default Creating new rows for each timezone adjustment
324
+ //to avoid timezone collisions we disable adding new times to rows that were created in an different timezone
323
325
$ timezonedTime = $ currentWorkDate ->format ("H:i:s " );
324
326
325
327
$ groupKey = $ timesheet ["ticketId " ] . "- " . $ timesheet ["kind " ] . "- " . $ timezonedTime ;
@@ -336,50 +338,50 @@ public function getWeeklyTimesheets(int $projectId, CarbonInterface $fromDate, i
336
338
"day1 " => array (
337
339
"start " => $ fromDate ,
338
340
"end " => $ fromDate ->addHours (23 )->addMinutes (59 ),
339
- "actualWorkDate " => $ fromDate ->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ),
341
+ "actualWorkDate " => $ workdateOffsetStart === 0 ? $ fromDate ->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ) : "" ,
340
342
341
343
"hours " => 0 ,
342
344
"description " => "" ,
343
345
),
344
346
"day2 " => array (
345
347
"start " => $ fromDate ->addDays (1 ),
346
348
"end " => $ fromDate ->addDays (1 )->addHours (23 )->addMinutes (59 ),
347
- "actualWorkDate " => $ fromDate ->addDays (1 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ),
349
+ "actualWorkDate " => $ workdateOffsetStart === 0 ? $ fromDate ->addDays (1 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ) : "" ,
348
350
"hours " => 0 ,
349
351
"description " => "" ,
350
352
),
351
353
"day3 " => array (
352
354
"start " => $ fromDate ->addDays (2 ),
353
355
"end " => $ fromDate ->addDays (2 )->addHours (23 )->addMinutes (59 ),
354
- "actualWorkDate " => $ fromDate ->addDays (2 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ),
356
+ "actualWorkDate " => $ workdateOffsetStart === 0 ? $ fromDate ->addDays (2 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ) : "" ,
355
357
"hours " => 0 ,
356
358
"description " => "" ,
357
359
),
358
360
"day4 " => array (
359
361
"start " => $ fromDate ->addDays (3 ),
360
362
"end " => $ fromDate ->addDays (3 )->addHours (23 )->addMinutes (59 ),
361
- "actualWorkDate " => $ fromDate ->addDays (3 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ),
363
+ "actualWorkDate " => $ workdateOffsetStart === 0 ? $ fromDate ->addDays (3 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ) : "" ,
362
364
"hours " => 0 ,
363
365
"description " => "" ,
364
366
),
365
367
"day5 " => array (
366
368
"start " => $ fromDate ->addDays (4 ),
367
369
"end " => $ fromDate ->addDays (4 )->addHours (23 )->addMinutes (59 ),
368
- "actualWorkDate " => $ fromDate ->addDays (4 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ),
370
+ "actualWorkDate " => $ workdateOffsetStart === 0 ? $ fromDate ->addDays (4 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ) : "" ,
369
371
"hours " => 0 ,
370
372
"description " => "" ,
371
373
),
372
374
"day6 " => array (
373
375
"start " => $ fromDate ->addDays (5 ),
374
376
"end " => $ fromDate ->addDays (5 )->addHours (23 )->addMinutes (59 ),
375
- "actualWorkDate " => $ fromDate ->addDays (5 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ),
377
+ "actualWorkDate " => $ workdateOffsetStart === 0 ? $ fromDate ->addDays (5 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ) : "" ,
376
378
"hours " => 0 ,
377
379
"description " => "" ,
378
380
),
379
381
"day7 " => array (
380
382
"start " => $ fromDate ->addDays (6 ),
381
383
"end " => $ fromDate ->addDays (6 )->addHours (23 )->addMinutes (59 ),
382
- "actualWorkDate " => $ fromDate ->addDays (6 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ),
384
+ "actualWorkDate " => $ workdateOffsetStart === 0 ? $ fromDate ->addDays (6 )->setTime ($ currentWorkDate ->hour , $ currentWorkDate ->minute , $ currentWorkDate ->second ) : "" ,
383
385
"hours " => 0 ,
384
386
"description " => "" ,
385
387
),
@@ -397,9 +399,11 @@ public function getWeeklyTimesheets(int $projectId, CarbonInterface $fromDate, i
397
399
// stored as UTC timezone shoifted value in the db.
398
400
// If the value is not exact but falls within the time period we're adding a new row
399
401
for ($ i = 1 ; $ i < 8 ; $ i ++) {
402
+
400
403
$ start = $ timesheetGroups [$ groupKey ]["day " . $ i ]["start " ];
401
404
$ end = $ timesheetGroups [$ groupKey ]["day " . $ i ]["end " ];
402
- if ($ currentWorkDate ->gte ($ start ) && $ currentWorkDate ->lte ($ end )) {
405
+
406
+ if ($ currentWorkDate ->gte ($ start ) && $ currentWorkDate ->lt ($ end )) {
403
407
$ timesheetGroups [$ groupKey ]["day " . $ i ]['hours ' ] += $ timesheet ['hours ' ];
404
408
$ timesheetGroups [$ groupKey ]["day " . $ i ]['actualWorkDate ' ] = $ currentWorkDate ;
405
409
$ timesheetGroups [$ groupKey ]["day " . $ i ]['description ' ] = $ timesheet ['description ' ];
@@ -409,6 +413,18 @@ public function getWeeklyTimesheets(int $projectId, CarbonInterface $fromDate, i
409
413
}
410
414
}
411
415
416
+ /*for ($i = 1; $i < 8; $i++) {
417
+ if ($timesheetGroups[$groupKey]["day" . $i]['actualWorkDate'] == $currentWorkDate) {
418
+ $timesheetGroups[$groupKey]["day" . $i]['hours'] += $timesheet['hours'];
419
+ $timesheetGroups[$groupKey]["day" . $i]['description'] = $timesheet['description'];
420
+ // No need to check further, we found what we came for
421
+ break;
422
+ }
423
+ }*/
424
+
425
+
426
+
427
+
412
428
// Add to rowsum
413
429
$ timesheetGroups [$ groupKey ]["rowSum " ] += $ timesheet ['hours ' ];
414
430
}
0 commit comments