Fixed timezones in detailed export reports

This commit is contained in:
Constantin Graf
2024-10-29 18:04:46 +01:00
parent 9a60e2b911
commit eaaa83406d
3 changed files with 23 additions and 8 deletions

View File

@@ -177,6 +177,8 @@ class TimeEntryController extends Controller
if ($format === ExportFormat::PDF && ! $this->canAccessPremiumFeatures($organization)) {
throw new FeatureIsNotAvailableInFreePlanApiException;
}
$user = $this->user();
$timezone = $user->timezone;
$timeEntriesQuery = $this->getTimeEntriesQuery($organization, $request, $member);
$timeEntriesQuery->with([
@@ -190,7 +192,7 @@ class TimeEntryController extends Controller
$folderPath = 'exports';
$path = $folderPath.'/'.$filename;
if ($format === ExportFormat::CSV) {
$export = new TimeEntriesDetailedCsvExport(config('filesystems.private'), $folderPath, $filename, $timeEntriesQuery, 1000);
$export = new TimeEntriesDetailedCsvExport(config('filesystems.private'), $folderPath, $filename, $timeEntriesQuery, 1000, $timezone);
$export->export();
} elseif ($format === ExportFormat::PDF) {
if (config('services.gotenberg.url') === null) {
@@ -224,7 +226,7 @@ class TimeEntryController extends Controller
->putFileAs($folderPath, new File($tempFolder->path($filenameTemp)), $filename);
} else {
Excel::store(
new TimeEntriesDetailedExport($timeEntriesQuery, $format),
new TimeEntriesDetailedExport($timeEntriesQuery, $format, $timezone),
$path,
config('filesystems.private'),
$format->getExportPackageType(),

View File

@@ -6,6 +6,7 @@ namespace App\Service\ReportExport;
use App\Models\TimeEntry;
use App\Service\IntervalService;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
/**
@@ -29,6 +30,15 @@ class TimeEntriesDetailedCsvExport extends CsvExport
protected const string CARBON_FORMAT = 'Y-m-d H:i:s';
private string $timezone;
public function __construct(string $disk, string $folderPath, string $filename, Builder $builder, int $chunk, string $timezone)
{
parent::__construct($disk, $folderPath, $filename, $builder, $chunk);
$this->timezone = $timezone;
}
/**
* @param TimeEntry $model
*/
@@ -43,8 +53,8 @@ class TimeEntriesDetailedCsvExport extends CsvExport
'Project' => $model->project?->name,
'Client' => $model->client?->name,
'User' => $model->user->name,
'Start' => $model->start,
'End' => $model->end,
'Start' => $model->start->timezone($this->timezone),
'End' => $model->end->timezone($this->timezone),
'Duration' => $duration !== null ? $interval->format($model->getDuration()) : null,
'Duration (decimal)' => $duration?->totalHours,
'Billable' => $model->billable ? 'Yes' : 'No',

View File

@@ -35,13 +35,16 @@ class TimeEntriesDetailedExport implements FromQuery, ShouldAutoSize, WithColumn
private ExportFormat $exportFormat;
private string $timezone;
/**
* @param Builder<TimeEntry> $builder
*/
public function __construct(Builder $builder, ExportFormat $exportFormat)
public function __construct(Builder $builder, ExportFormat $exportFormat, string $timezone)
{
$this->builder = $builder;
$this->exportFormat = $exportFormat;
$this->timezone = $timezone;
}
/**
@@ -121,7 +124,7 @@ class TimeEntriesDetailedExport implements FromQuery, ShouldAutoSize, WithColumn
$model->client?->name,
$model->user->name,
Date::dateTimeToExcel($model->start),
$model->end !== null ? Date::dateTimeToExcel($model->end) : null,
$model->end !== null ? Date::dateTimeToExcel($model->end->timezone($this->timezone)) : null,
$duration !== null ? $interval->format($duration) : null,
$duration?->totalHours,
$model->billable ? 'Yes' : 'No',
@@ -134,8 +137,8 @@ class TimeEntriesDetailedExport implements FromQuery, ShouldAutoSize, WithColumn
$model->project?->name,
$model->client?->name,
$model->user->name,
$model->start->format('Y-m-d H:i:s'),
$model->end?->format('Y-m-d H:i:s'),
$model->start->timezone($this->timezone)->format('Y-m-d H:i:s'),
$model->end?->timezone($this->timezone)?->format('Y-m-d H:i:s'),
$duration !== null ? (int) floor($duration->totalHours).':'.$duration->format('%I:%S') : null,
$duration?->totalHours,
$model->billable ? 'Yes' : 'No',