Skip to content

Commit

Permalink
Fixed: duration parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinpapst committed Mar 15, 2023
1 parent 8d682cf commit 6043440
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 10 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## 2.1.5

Compatibility: requires minimum Kimai 2.0.9

- Fixed: duration parsing

## 2.1.4

Compatibility: requires minimum Kimai 2.0.9
Expand Down
29 changes: 20 additions & 9 deletions Importer/AbstractTimesheetImporter.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,6 @@ public function importRow(Duration $durationParser, ImportData $data, ImportRow
try {
$record = $row->getData();

if (!\array_key_exists('Duration', $record)) {
$record['Duration'] = 0;
}
if (!\array_key_exists('Tags', $record)) {
$record['Tags'] = '';
}
Expand Down Expand Up @@ -156,13 +153,11 @@ public function importRow(Duration $durationParser, ImportData $data, ImportRow
$begin = null;
$end = null;
$duration = 0;
$foundDuration = null;

if (!empty($record['Duration'])) {
if (\is_int($record['Duration'])) {
$duration = $record['Duration'];
} else {
$duration = $durationParser->parseDurationString($record['Duration']);
}
if (!empty($record['Duration']) && \is_string($record['Duration'])) {
$duration = $this->parseDuration($durationParser, $record['Duration']);
$foundDuration = $duration;
}

$timezone = new \DateTimeZone($user->getTimezone());
Expand Down Expand Up @@ -246,6 +241,12 @@ public function importRow(Duration $durationParser, ImportData $data, ImportRow
$timesheet->setDescription($record['Description']);
$timesheet->setExported($this->convertBoolean($record['Exported']));

if ($foundDuration !== null) {
$timesheet->setDuration($foundDuration);
} else {
$timesheet->setDuration($timesheet->getDuration());
}

if (!empty($record['Tags'])) {
foreach (explode(',', $record['Tags']) as $tagName) {
if (empty($tagName)) {
Expand Down Expand Up @@ -282,6 +283,16 @@ public function importRow(Duration $durationParser, ImportData $data, ImportRow
$data->addRow($row);
}

protected function parseDuration(Duration $durationParser, string $duration): int
{
// we expect plain seconds
if (is_numeric($duration) && !str_contains($duration, '.') && !str_contains($duration, ',')) {
return (int) $duration;
}

return $durationParser->parseDurationString($duration);
}

abstract protected function createImportData(ImportRow $row): ImportData;

/**
Expand Down
5 changes: 5 additions & 0 deletions Importer/ClockifyTimesheetImporter.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,9 @@ public function importRow(Duration $durationParser, ImportData $data, ImportRow

parent::importRow($durationParser, $data, new ImportRow($values), $dryRun);
}

protected function parseDuration(Duration $durationParser, string $duration): int
{
return $durationParser->parseDurationString($duration);
}
}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"description": "A Kimai plugin to import data from CSV files via Web UI",
"homepage": "https://www.kimai.org/store/keleo-importer-bundle.html",
"type": "kimai-plugin",
"version": "2.1.4",
"version": "2.1.5",
"keywords": [
"kimai",
"kimai-plugin"
Expand Down

0 comments on commit 6043440

Please sign in to comment.