diff --git a/src/main/java/de/doubleslash/keeptime/common/Resources.java b/src/main/java/de/doubleslash/keeptime/common/Resources.java index da245988..1724d111 100644 --- a/src/main/java/de/doubleslash/keeptime/common/Resources.java +++ b/src/main/java/de/doubleslash/keeptime/common/Resources.java @@ -81,6 +81,8 @@ public enum RESOURCE { SVG_ROTATE_ICON("/svgs/rotate-solid.svg"), + SVG_PLUS_SOLID("/svgs/plus-solid.svg"), + ICON_MAIN("/icons/icon.png"), /** CSS **/ diff --git a/src/main/java/de/doubleslash/keeptime/controller/Controller.java b/src/main/java/de/doubleslash/keeptime/controller/Controller.java index afe02d9d..c3b40add 100644 --- a/src/main/java/de/doubleslash/keeptime/controller/Controller.java +++ b/src/main/java/de/doubleslash/keeptime/controller/Controller.java @@ -128,6 +128,16 @@ public Project addNewProject(final Project project) { return project; } + public Work addWork(final Work work) { + LOG.info("Adding work '{}'", work); + final Work saved = model.getWorkRepository().save(work); + // show in report if it belongs to today + final LocalDate today = dateProvider.dateTimeNow().toLocalDate(); + if (today.equals(saved.getStartTime().toLocalDate())) { + model.getPastWorkItems().add(saved); + } + return saved; + } public void updateColorSettings(final Color hoverBackgroundColor,final Color hoverFontColor,final Color defaultBackgroundColor,final Color defaultFontColor,final Color taskBarColor) { settings.setTaskBarColor(taskBarColor); diff --git a/src/main/java/de/doubleslash/keeptime/view/ReportController.java b/src/main/java/de/doubleslash/keeptime/view/ReportController.java index e4253986..da980d1e 100644 --- a/src/main/java/de/doubleslash/keeptime/view/ReportController.java +++ b/src/main/java/de/doubleslash/keeptime/view/ReportController.java @@ -18,6 +18,8 @@ import java.io.IOException; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.*; import java.util.stream.Collectors; @@ -102,6 +104,9 @@ public class ReportController { @FXML private Button heimatSyncButton; + @FXML + private Button addWorkButton; + private static final Logger LOG = LoggerFactory.getLogger(ReportController.class); private final Model model; @@ -134,6 +139,19 @@ private void initialize() { expandCollapseButton.setOnMouseClicked(event ->toggleCollapseExpandReport()); initTableView(); initHeimatIntegration(); + initAddManualWorkButton(); + + } + + private void initAddManualWorkButton() { + addWorkButton.setOnAction(e -> onAddWork()); + final SVGPath svgNodeWithScale = SvgNodeProvider.getSvgNodeWithScale(RESOURCE.SVG_PLUS_SOLID, 0.03, 0.03); + svgNodeWithScale.setStyle("-fx-fill: #00759e"); + addWorkButton.setMaxSize(25,25); + addWorkButton.setMinSize(25, 25); + addWorkButton.setGraphic(svgNodeWithScale); + addWorkButton.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + addWorkButton.setTooltip(new Tooltip("Add work entry...")); } private void initHeimatIntegration() { @@ -537,6 +555,39 @@ private Node createCopyWorkButton(final Work w) { return copyButton; } + private void onAddWork() { + final boolean isToday = LocalDate.now().equals(currentReportDate); + final LocalDateTime now = LocalDateTime.now(); + final LocalDateTime defaultStart = isToday ? now.minusMinutes(15) : currentReportDate.atTime(LocalTime.of(9, 0)); + final LocalDateTime defaultEnd = isToday ? now : currentReportDate.atTime(LocalTime.of(10, 0)); + + final Project defaultProject = model.activeWorkItem.get() != null + ? model.activeWorkItem.get().getProject() + : model.getIdleProject(); + + final Work newWorkDefaults = new Work(defaultStart, defaultEnd, defaultProject, ""); + final Dialog dialog = setupAddWorkDialog(newWorkDefaults); + + final Optional result = dialog.showAndWait(); + result.ifPresent(createdWork -> { + controller.addWork(createdWork); + this.update(); + }); + } + + private Dialog setupAddWorkDialog(final Work work) { + final Dialog dialog = new Dialog<>(); + dialog.initOwner(stage); + dialog.setTitle("Add work"); + dialog.setHeaderText("Add work"); + dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + + final GridPane grid = setUpEditWorkGridPane(work, dialog); + dialog.getDialogPane().setContent(grid); + + return dialog; + } + public void update() { heimatSyncButton.setVisible(model.getHeimatSettings().isHeimatActive()); // TODO save work so it appears directly in report. Quick fixes #170. Use #176 for this instead. diff --git a/src/main/resources/layouts/report.fxml b/src/main/resources/layouts/report.fxml index 530c67d7..9072faae 100644 --- a/src/main/resources/layouts/report.fxml +++ b/src/main/resources/layouts/report.fxml @@ -16,18 +16,13 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . --> - - - - - - - - - - + + + + + - + @@ -87,10 +82,15 @@ -