Skip to content

Commit 6d6431e

Browse files
committed
PTBAS-738: Adjust sync window
* Add tooltips * Improve dropdown menu * Fix time adjustment to use 1h steps
1 parent 8d0cd21 commit 6d6431e

File tree

6 files changed

+340
-79
lines changed

6 files changed

+340
-79
lines changed

src/main/java/de/doubleslash/keeptime/common/FileOpenHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static boolean openFile(final String filePath) {
3232
final File file = new File(filePath);
3333
final Runtime rt = Runtime.getRuntime();
3434

35-
if (!file.exists() || file.isFile()) {
35+
if (!file.exists() || !file.isFile()) {
3636
LOG.warn("Filepath does not seem to exist or does not point to a file: '{}'.", filePath);
3737
return false;
3838
}

src/main/java/de/doubleslash/keeptime/controller/HeimatController.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import de.doubleslash.keeptime.rest.integration.heimat.model.HeimatTask;
2727
import de.doubleslash.keeptime.rest.integration.heimat.model.HeimatTime;
2828
import de.doubleslash.keeptime.view.ProjectReport;
29+
import javafx.scene.text.Text;
30+
import javafx.scene.text.TextFlow;
2931
import org.slf4j.Logger;
3032
import org.slf4j.LoggerFactory;
3133
import org.springframework.beans.factory.annotation.Autowired;
@@ -145,18 +147,28 @@ public List<Mapping> getTableRows(final LocalDate currentReportDate, final List<
145147
pr.appendToWorkNotes(currentWorkNote);
146148
}
147149
final String keeptimeNotes = pr.getNotes();
148-
String canBeSyncedMessage;
150+
TextFlow canBeSyncedMessage;
151+
149152
if (!isMappedInHeimat) {
150-
canBeSyncedMessage = "Not mapped to Heimat task.\nMap in settings dialog.";
153+
canBeSyncedMessage = new TextFlow(new Text("Not mapped to Heimat task.\nMap in settings dialog."));
151154
} else if (heimatTasks.stream().noneMatch(ht -> ht.id() == optHeimatMapping.get().getExternalTaskId())) {
152-
canBeSyncedMessage = "Heimat Task is not available (anymore).\nPlease check mappings in settings dialog.";
155+
canBeSyncedMessage = new TextFlow(new Text("Heimat Task is not available (anymore).\nPlease check mappings in settings dialog."));
153156
isMappedInHeimat = false;
154157
} else {
155158
final ExternalProjectMapping externalProjectMapping = optHeimatMapping.get();
156-
canBeSyncedMessage = "Sync to " + externalProjectMapping.getExternalTaskName() + "\n("
157-
+ externalProjectMapping.getExternalProjectName() + ")";
159+
Text externalTaskName = new Text(externalProjectMapping.getExternalTaskName());
160+
externalTaskName.setStyle("-fx-font-weight: bold;");
161+
canBeSyncedMessage = new TextFlow(new Text("Sync to "), externalTaskName,
162+
new Text("\n(" + externalProjectMapping.getExternalProjectName() + ")"));
158163
}
159164

165+
final String bookingHint = heimatTasks.stream()
166+
.filter(ht -> ht.id() == optHeimatMapping.get().getExternalTaskId())
167+
.map(HeimatTask::bookingHint)
168+
.findAny()
169+
.orElseGet(String::new);
170+
171+
160172
if (optionalExistingMapping.isPresent()) {
161173
final Mapping existingMapping = optionalExistingMapping.get();
162174
final ArrayList<Project> projects = new ArrayList<>(existingMapping.projects());
@@ -166,7 +178,7 @@ public List<Mapping> getTableRows(final LocalDate currentReportDate, final List<
166178
final boolean shouldBeSynced =
167179
isMappedInHeimat && differenceGreaterOrEqual15Minutes(heimatSeconds, keepTimeSeconds);
168180
final Mapping mapping = new Mapping(isMappedInHeimat ? optHeimatMapping.get().getExternalTaskId() : -1,
169-
isMappedInHeimat, shouldBeSynced, canBeSyncedMessage, existingMapping.existingTimes(), projects,
181+
isMappedInHeimat, shouldBeSynced, canBeSyncedMessage, bookingHint, existingMapping.existingTimes(), projects,
170182
existingMapping.heimatNotes(), existingMapping.keeptimeNotes() + ". " + keeptimeNotes, heimatSeconds,
171183
keepTimeSeconds);
172184
list.remove(existingMapping);
@@ -176,7 +188,7 @@ public List<Mapping> getTableRows(final LocalDate currentReportDate, final List<
176188
isMappedInHeimat && differenceGreaterOrEqual15Minutes(heimatTimeSeconds, projectWorkSeconds);
177189
final List<Project> projects = Collections.singletonList(project);
178190
final Mapping mapping = new Mapping(isMappedInHeimat ? optHeimatMapping.get().getExternalTaskId() : -1,
179-
isMappedInHeimat, shouldBeSynced, canBeSyncedMessage, optionalAlreadyBookedTimes, projects,
191+
isMappedInHeimat, shouldBeSynced, canBeSyncedMessage, bookingHint, optionalAlreadyBookedTimes, projects,
180192
heimatNotes, keeptimeNotes, heimatTimeSeconds, projectWorkSeconds);
181193
list.add(mapping);
182194
}
@@ -198,7 +210,7 @@ public List<Mapping> getTableRows(final LocalDate currentReportDate, final List<
198210
.findAny()
199211
.orElseThrow();
200212
final Mapping mapping = new Mapping(id, true, false,
201-
"Not mapped in KeepTime\n\n" + heimatTask.name() + "\n" + heimatTask.taskHolderName(), times,
213+
new TextFlow(new Text("Not mapped in KeepTime\n\n" + heimatTask.name() + "\n" + heimatTask.taskHolderName())), "", times,
202214
new ArrayList<>(0), heimatNotes, "", heimatTimeSeconds, 0);
203215
list.add(mapping);
204216
});
@@ -221,9 +233,13 @@ public List<Mapping> getTableRows(final LocalDate currentReportDate, final List<
221233
String heimatNotes = addHeimatNotes(times);
222234
long heimatTimeSeconds = addHeimatTimes(times);
223235

236+
Text externalTaskName = new Text(externalProjectMapping.getExternalTaskName());
237+
externalTaskName.setStyle("-fx-font-weight: bold;");
238+
TextFlow syncMessage = new TextFlow(new Text("Present in HEIMAT but not KeepTime\n\nSync to "), externalTaskName,
239+
new Text("\n(" + externalProjectMapping.getExternalProjectName() + ")"));
240+
224241
final Mapping mapping2 = new Mapping(id, true, false,
225-
"Present in HEIMAT but not KeepTime\n\nSync to " + externalProjectMapping.getExternalTaskName() + "\n("
226-
+ externalProjectMapping.getExternalProjectName() + ")", times, mappedProjects.stream()
242+
syncMessage, "", times, mappedProjects.stream()
227243
.filter(
228244
mp -> mp.getExternalTaskId()
229245
== id)
@@ -421,7 +437,7 @@ public ExistingAndInvalidMappings getExistingProjectMappings(List<HeimatTask> ex
421437

422438
public record UserMapping(Mapping mapping, boolean shouldSync, String userNotes, int userMinutes) {}
423439

424-
public record Mapping(long heimatTaskId, boolean canBeSynced, boolean shouldBeSynced, String syncMessage,
440+
public record Mapping(long heimatTaskId, boolean canBeSynced, boolean shouldBeSynced, TextFlow syncMessage, String bookingHint,
425441
List<HeimatTime> existingTimes, List<Project> projects, String heimatNotes,
426442
String keeptimeNotes, long heimatSeconds, long keeptimeSeconds) {}
427443

0 commit comments

Comments
 (0)