Skip to content

Commit b355bf0

Browse files
authored
Merge pull request #82 from doubleSlashde/bugfix/#79_preventNegativeWorkTimes
Bugfix/#79 prevent negative work times
2 parents 1ed6f8d + 7b09730 commit b355bf0

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

src/main/java/de/doubleslash/keeptime/view/ManageWorkController.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
import de.doubleslash.keeptime.model.Project;
3333
import de.doubleslash.keeptime.model.Work;
3434
import javafx.application.Platform;
35+
import javafx.beans.binding.Bindings;
36+
import javafx.beans.binding.BooleanBinding;
37+
import javafx.beans.property.BooleanProperty;
38+
import javafx.beans.property.SimpleBooleanProperty;
3539
import javafx.beans.property.StringProperty;
3640
import javafx.beans.value.ChangeListener;
3741
import javafx.beans.value.ObservableValue;
@@ -40,6 +44,7 @@
4044
import javafx.scene.Node;
4145
import javafx.scene.control.ComboBox;
4246
import javafx.scene.control.DatePicker;
47+
import javafx.scene.control.Label;
4348
import javafx.scene.control.ListCell;
4449
import javafx.scene.control.ListView;
4550
import javafx.scene.control.Spinner;
@@ -80,8 +85,12 @@ public class ManageWorkController {
8085
@FXML
8186
private ComboBox<Project> projectComboBox;
8287

88+
@FXML
89+
private Label errorLabel;
90+
8391
private boolean comboChange;
8492
private Project selectedProject;
93+
private BooleanProperty isValidProperty = new SimpleBooleanProperty();
8594

8695
private FilteredList<Project> filteredList;
8796

@@ -98,11 +107,44 @@ private void initialize() {
98107

99108
setUpTimeSpinner(endTimeSpinner);
100109

110+
setUpTimeRestriction();
111+
101112
setProjectUpComboBox();
102113

103114
Platform.runLater(() -> projectComboBox.requestFocus());
104115
}
105116

117+
private void setUpTimeRestriction() {
118+
119+
BooleanBinding isValidBinding = Bindings.createBooleanBinding(() -> {
120+
if (startTimeSpinner.getValue() == null || endTimeSpinner.getValue() == null
121+
|| startDatePicker.getValue() == null || endDatePicker.getValue() == null) {
122+
return false;
123+
}
124+
125+
LocalDateTime start = LocalDateTime.of(startDatePicker.getValue(), startTimeSpinner.getValue());
126+
LocalDateTime end = LocalDateTime.of(endDatePicker.getValue(), endTimeSpinner.getValue());
127+
128+
if (start.isAfter(end)) {
129+
return false;
130+
} else {
131+
return true;
132+
}
133+
}, startTimeSpinner.valueProperty(), endTimeSpinner.valueProperty(), endDatePicker.valueProperty(),
134+
startDatePicker.valueProperty());
135+
136+
this.isValidProperty.bind(isValidBinding);
137+
138+
errorLabel.textProperty().bind(Bindings.createStringBinding(() -> {
139+
if (Boolean.TRUE.equals(isValidProperty.get())) {
140+
return "";
141+
} else {
142+
return "startDate has to be before endDate";
143+
}
144+
145+
}, isValidProperty));
146+
}
147+
106148
private void setUpTimeSpinner(final Spinner<LocalTime> spinner) {
107149
spinner.focusedProperty().addListener((e) -> {
108150
final LocalTimeStringConverter stringConverter = new LocalTimeStringConverter(FormatStyle.MEDIUM);
@@ -326,4 +368,8 @@ private void setTextColor(final Node object, final Color color) {
326368
object.setStyle(style);
327369
}
328370

371+
public BooleanProperty validProperty() {
372+
return this.isValidProperty;
373+
}
374+
329375
}

src/main/java/de/doubleslash/keeptime/view/ReportController.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,11 @@ private GridPane setUpEditWorkGridPane(final Work work, final Dialog<Work> dialo
345345
manageWorkController.setModel(model);
346346
manageWorkController.initializeWith(work);
347347

348+
dialog.getDialogPane()
349+
.lookupButton(ButtonType.OK)
350+
.disableProperty()
351+
.bind(manageWorkController.validProperty().not());
352+
348353
dialog.setResultConverter(dialogButton -> {
349354
if (dialogButton == ButtonType.OK) {
350355
return manageWorkController.getWorkFromUserInput();

src/main/resources/layouts/manage-work.fxml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@
5959
<Insets bottom="5.0" />
6060
</GridPane.margin>
6161
</Label>
62+
<Label fx:id="errorLabel" textFill="RED" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.rowIndex="5">
63+
<font>
64+
<Font name="Open Sans Regular" size="12.0" />
65+
</font>
66+
</Label>
6267
</children>
6368
<padding>
6469
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />

0 commit comments

Comments
 (0)