2626import de .doubleslash .keeptime .rest .integration .heimat .model .HeimatTask ;
2727import de .doubleslash .keeptime .rest .integration .heimat .model .HeimatTime ;
2828import de .doubleslash .keeptime .view .ProjectReport ;
29+ import javafx .scene .text .Text ;
30+ import javafx .scene .text .TextFlow ;
2931import org .slf4j .Logger ;
3032import org .slf4j .LoggerFactory ;
3133import 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.\n Map in settings dialog." ;
153+ canBeSyncedMessage = new TextFlow ( new Text ( "Not mapped to Heimat task.\n Map in settings dialog." )) ;
151154 } else if (heimatTasks .stream ().noneMatch (ht -> ht .id () == optHeimatMapping .get ().getExternalTaskId ())) {
152- canBeSyncedMessage = "Heimat Task is not available (anymore).\n Please check mappings in settings dialog." ;
155+ canBeSyncedMessage = new TextFlow ( new Text ( "Heimat Task is not available (anymore).\n Please 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 \n Sync 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 \n Sync 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