Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/java/de/doubleslash/keeptime/common/Resources.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 **/
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/de/doubleslash/keeptime/controller/Controller.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
51 changes: 51 additions & 0 deletions src/main/java/de/doubleslash/keeptime/view/ReportController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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<Work> dialog = setupAddWorkDialog(newWorkDefaults);

final Optional<Work> result = dialog.showAndWait();
result.ifPresent(createdWork -> {
controller.addWork(createdWork);
this.update();
});
}

private Dialog<Work> setupAddWorkDialog(final Work work) {
final Dialog<Work> 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.
Expand Down
26 changes: 13 additions & 13 deletions src/main/resources/layouts/report.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,13 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. -->

<?import javafx.geometry.Insets?>
<?import javafx.scene.canvas.Canvas?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.geometry.*?>
<?import javafx.scene.canvas.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<AnchorPane fx:id="reportRoot" focusTraversable="true" prefWidth="500.0" style="-fx-background-color: white;" stylesheets="@../css/dsStyles.css" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.doubleslash.keeptime.view.ReportController">
<AnchorPane fx:id="reportRoot" focusTraversable="true" prefWidth="500.0" style="-fx-background-color: white;" stylesheets="@../css/dsStyles.css" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.doubleslash.keeptime.view.ReportController">
<children>
<VBox>
<children>
Expand Down Expand Up @@ -87,10 +82,15 @@
</BorderPane>
<BorderPane>
<left>
<Button fx:id="expandCollapseButton" mnemonicParsing="false" prefHeight="25.0" prefWidth="80.0" styleClass="secondary-button" text="Collapse" />
<Button fx:id="expandCollapseButton" mnemonicParsing="false" prefHeight="25.0" prefWidth="80.0" styleClass="secondary-button" text="Collapse" />
</left>
<right>
<Button fx:id="heimatSyncButton" mnemonicParsing="false" styleClass="secondary-button" text="Sync2Heimat" />
<HBox spacing="5.0">
<children>
<Button fx:id="addWorkButton" mnemonicParsing="false" prefHeight="25.0" prefWidth="80.0" styleClass="secondary-button" text="Add Work" />
<Button fx:id="heimatSyncButton" mnemonicParsing="false" styleClass="secondary-button" text="Sync2Heimat" />
</children>
</HBox>
</right>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/svgs/plus-solid.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading