44 Commits

Author SHA1 Message Date
96d5968fef code cleanup and ui fixes 2018-12-06 23:59:01 +01:00
88b39820ca bill splitted 2018-12-06 23:15:06 +01:00
25bedae873 scroll bar is now on right side 2018-12-06 20:44:54 +01:00
1ec02d74a3 fixed issue with jobtime 2018-12-06 20:34:44 +01:00
783d9f9bc0 fixed issue #1 2018-12-06 20:29:38 +01:00
a7b2753aa3 code cleanup and cross platform 2018-12-06 15:10:28 +01:00
dd9ff0d410 reprint job 2018-12-06 14:11:26 +01:00
4e902415d7 xml saving and loading is complete 2018-12-06 13:11:35 +01:00
87f9b8786c xml is now in XMLController 2018-12-05 22:44:15 +01:00
37cfe02c5b added basic printer support 2018-12-05 18:47:26 +01:00
76020e371b added new pom.xml 2018-12-03 21:56:27 +01:00
b9b6748ac7 „bin/src/main/java/com/jFxKasse/application/JavaFX11Main.class“ löschen 2018-12-03 21:53:28 +01:00
078b3dfdea „bin/src/main/java/com/jFxKasse/application/Main.class“ löschen 2018-12-03 21:53:26 +01:00
0db448019c „bin/src/main/java/com/jFxKasse/controller/DBController.class“ löschen 2018-12-03 21:53:24 +01:00
fbd128e5b9 „bin/src/main/java/com/jFxKasse/controller/MainWindowController.class“ löschen 2018-12-03 21:53:21 +01:00
290a5d8e5c „bin/src/main/java/com/jFxKasse/datatypes/Job.class“ löschen 2018-12-03 21:53:18 +01:00
dfe1008786 „bin/src/main/java/com/jFxKasse/datatypes/tableDataCurrentOrder.class“ löschen 2018-12-03 21:53:16 +01:00
e691d4e1dc „bin/src/main/java/com/jFxKasse/datatypes/tableDataJob.class“ löschen 2018-12-03 21:53:13 +01:00
8ff4d88202 „bin/src/main/java/com/jFxKasse/datatypes/tableDataPositionen.class“ löschen 2018-12-03 21:53:00 +01:00
86c0ad144a „bin/src/main/resources/css/application.css“ löschen 2018-12-03 21:52:52 +01:00
38d42db6cd „bin/src/main/resources/fxml/MainWindow.fxml“ löschen 2018-12-03 21:52:45 +01:00
c85f239651 „bin/.gitignore“ löschen 2018-12-03 21:52:33 +01:00
4291038d4e „bin/.project“ löschen 2018-12-03 21:52:28 +01:00
ccaf68d60f „bin/LICENSE“ löschen 2018-12-03 21:52:21 +01:00
ac85cb82ff „bin/README.md“ löschen 2018-12-03 21:52:14 +01:00
ea7f84c2c1 „build.fxbuild“ löschen 2018-12-03 21:51:56 +01:00
9d506475cb „pom.xml“ löschen 2018-12-03 21:51:53 +01:00
aca967e88d „bin/build.fxbuild“ löschen 2018-12-03 21:51:50 +01:00
ebda172415 „bin/pom.xml“ löschen 2018-12-03 21:51:20 +01:00
279f358392 avgJobValue is now correct 2018-12-03 21:50:41 +01:00
244243f07a final maven setup 2018-12-03 21:33:16 +01:00
50b623dd39 seil0 edit 2018-12-03 21:12:00 +01:00
3f4edc85f0 added dir com 2018-12-03 20:39:51 +01:00
121a86a6b5 directory structure 2018-12-03 20:27:55 +01:00
0185053b8d added shade 2018-12-03 15:28:11 +01:00
06495ebd5b „bin/application/application.css“ löschen 2018-12-03 15:07:26 +01:00
fc03ba40e3 „bin/application/MainWindowController.class“ löschen 2018-12-03 15:07:21 +01:00
640a9e4de4 „bin/application/MainWindowController$1.class“ löschen 2018-12-03 15:07:15 +01:00
0cad411304 „bin/application/MainWindow.fxml“ löschen 2018-12-03 15:07:11 +01:00
514f1b0605 „bin/application/Main.class“ löschen 2018-12-03 15:07:05 +01:00
0944f210dd „bin/application/DBController.class“ löschen 2018-12-03 15:06:59 +01:00
ef23a0d631 „bin/application/DBController$1.class“ löschen 2018-12-03 15:06:52 +01:00
ae3e02278d converted to Maven 2018-12-03 15:04:07 +01:00
259988195f fixed number input 2018-10-08 11:13:22 +02:00
30 changed files with 1600 additions and 821 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,374 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXTextField?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TitledPane?>
<?import javafx.scene.control.TreeTableColumn?>
<?import javafx.scene.control.TreeTableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.shape.Line?>
<?import javafx.scene.text.Font?>
<AnchorPane fx:id="mainAnchorpane" maxHeight="732.0" maxWidth="1366.0" minHeight="732.0" minWidth="1366.0" prefHeight="732.0" prefWidth="1366.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
<children>
<TabPane layoutX="4.0" layoutY="5.0" nodeOrientation="RIGHT_TO_LEFT" prefHeight="924.0" prefWidth="1536.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<tabs>
<Tab text="Einstellungen">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Button fx:id="ueberbtn" layoutX="664.0" layoutY="325.0" mnemonicParsing="false" onAction="#ueberbtnAction" text="Über" />
<TitledPane alignment="CENTER" animated="false" collapsible="false" contentDisplay="CENTER" layoutX="790.0" layoutY="10.0" prefHeight="163.0" prefWidth="566.0" text="Datenbank">
<content>
<AnchorPane fx:id="paneDB" minHeight="0.0" minWidth="0.0" prefHeight="135.0" prefWidth="547.0">
<children>
<Label fx:id="labelDBName" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="329.0" layoutY="10.0" prefHeight="34.0" prefWidth="229.0" text="Datenbankname:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<JFXTextField fx:id="tftNewDBName" alignment="CENTER" layoutX="25.0" layoutY="10.0" prefHeight="25.0" prefWidth="376.0" />
<Label fx:id="labelDBStatus" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="7.0" layoutY="50.0" prefHeight="34.0" prefWidth="551.0" text="Keine Datenbank gefunden!">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Button fx:id="btnCreateNewDatabase" layoutX="297.0" layoutY="90.0" mnemonicParsing="false" onAction="#btnCreateNewDatabaseAction" text="Neue Datenbank anlegen">
<font>
<Font name="Cantarell Regular" size="13.0" />
</font>
</Button>
<Button fx:id="btnOpenFolder" layoutX="39.0" layoutY="90.0" mnemonicParsing="false" onAction="#btnOpenFolderAction" text="Speicherort öffnen">
<font>
<Font name="Cantarell Regular" size="13.0" />
</font>
</Button>
</children>
</AnchorPane>
</content>
<font>
<Font name="Cantarell Regular" size="13.0" />
</font>
</TitledPane>
</children>
</AnchorPane>
</content>
</Tab>
<Tab text="Positionen bearbeiten">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<TreeTableView fx:id="entryTreeTable" layoutX="11.0" layoutY="10.0" prefHeight="502.0" prefWidth="1346.0">
<columns>
<TreeTableColumn fx:id="columnColor" editable="false" maxWidth="200.0" minWidth="200.0" prefWidth="200.0" resizable="false" sortable="false" text="Farbe" />
<TreeTableColumn fx:id="columnPrize" editable="false" maxWidth="200.0" minWidth="200.0" prefWidth="200.0" resizable="false" sortable="false" text="Preis" />
<TreeTableColumn fx:id="columnPositionsEdit" editable="false" maxWidth="800.0" minWidth="800.0" prefWidth="800.0" resizable="false" sortable="false" text="Positionen" />
<TreeTableColumn fx:id="columnPosnumber" editable="false" maxWidth="120.0" minWidth="120.0" prefWidth="120.0" resizable="false" sortable="false" text="Nummer" />
</columns>
<columnResizePolicy>
<TreeTableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TreeTableView>
<Button fx:id="btnSaveEntry" layoutX="494.0" layoutY="631.0" mnemonicParsing="false" onAction="#btnSaveEntryAction" text="Ausgewählten Eintrag speichern">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
<Button fx:id="btnClearEntry" layoutX="462.0" layoutY="525.0" mnemonicParsing="false" onAction="#btnClearEntryAction" text="Ausgewählten Eintrag zurücksetzten">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
<TitledPane alignment="CENTER" animated="false" collapsible="false" contentDisplay="CENTER" layoutX="792.0" layoutY="525.0" prefHeight="163.0" prefWidth="565.0" text="Eintrag editieren">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Label fx:id="lableNewPosition" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="455.0" layoutY="10.0" prefHeight="34.0" prefWidth="105.0" text="Position:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<JFXTextField fx:id="tftNewPosition" alignment="CENTER" layoutX="160.0" layoutY="10.0" prefHeight="25.0" prefWidth="279.0">
<font>
<Font name="Cantarell Regular" size="13.0" />
</font></JFXTextField>
<Label fx:id="labelNewValue" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="442.0" layoutY="50.0" prefHeight="34.0" prefWidth="118.0" text="Preis in Euro:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<JFXTextField fx:id="tftNewValue" alignment="CENTER" layoutX="380.0" layoutY="50.0" prefHeight="25.0" prefWidth="58.0">
<font>
<Font name="Cantarell Regular" size="13.0" />
</font></JFXTextField>
<Label fx:id="lableNewColor" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="455.0" layoutY="90.0" prefHeight="34.0" prefWidth="105.0" text="Farbe:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<ChoiceBox fx:id="colorChoise" layoutX="292.0" layoutY="95.0" prefWidth="150.0" />
</children>
</AnchorPane>
</content>
<font>
<Font name="Cantarell Regular" size="13.0" />
</font>
</TitledPane>
</children></AnchorPane>
</content>
</Tab>
<Tab text="Aufträge">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="850.0" prefWidth="1536.0">
<children>
<TreeTableView fx:id="jobsTreeTable" layoutX="11.0" layoutY="10.0" prefHeight="541.0" prefWidth="1346.0">
<columns>
<TreeTableColumn fx:id="columnJobValue" editable="false" prefWidth="90.6666259765625" resizable="false" text="Betrag" />
<TreeTableColumn fx:id="columnState" editable="false" prefWidth="91.0" resizable="false" text="Zustand" />
<TreeTableColumn fx:id="columnPositions" editable="false" prefWidth="981.333251953125" resizable="false" sortable="false" text="Positionen" />
<TreeTableColumn fx:id="columnTime" editable="false" prefWidth="99.666748046875" resizable="false" text="Zeit" />
<TreeTableColumn fx:id="columnJobNumber" editable="false" maxWidth="3000.0" prefWidth="83.6666259765625" resizable="false" text="Nummer" />
</columns>
</TreeTableView>
<Button fx:id="btnReprintJob" layoutX="378.0" layoutY="603.0" mnemonicParsing="false" onAction="#btnReprintJobAction" text="Ausgewählter Auftrag drucken">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
<TitledPane fx:id="titlePaneStats" alignment="CENTER" collapsible="false" contentDisplay="CENTER" layoutX="992.0" layoutY="561.0" prefHeight="118.0" prefWidth="365.0" text="Statistik - 30.03.2018 15:15 Uhr">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="59.0" prefWidth="483.0">
<children>
<Label fx:id="lableJobCount" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="17.0" layoutY="2.0" prefHeight="34.0" prefWidth="340.0" text="Anzahl Aufträge: 2781">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Label fx:id="labelAvgJob" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="17.0" layoutY="30.0" prefHeight="34.0" prefWidth="340.0" text="Durchschnittlicher Auftragswert: 12,90€">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Label fx:id="lableAllValue" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="17.0" layoutY="60.0" prefHeight="34.0" prefWidth="340.0" text="Gesamt: 1088,48€">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
</children>
</AnchorPane>
</content>
</TitledPane>
<Button fx:id="btnCancelJob" layoutX="44.0" layoutY="603.0" mnemonicParsing="false" onAction="#btnCancelJobAction" text="Ausgewählter Auftrag stornieren">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
<Button fx:id="btnCalcStats" layoutX="712.0" layoutY="603.0" mnemonicParsing="false" onAction="#btnCalcStatsAction" text="Statistiken berrechnen">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
</children>
</AnchorPane>
</content>
</Tab>
<Tab text="Neuer Auftrag">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="850.0" prefWidth="1536.0">
<children>
<TreeTableView fx:id="tableCurrentOrder" layoutX="15.0" layoutY="85.0" prefHeight="379.0" prefWidth="382.0">
<columns>
<TreeTableColumn fx:id="columnPosition" editable="false" prefWidth="304.3333740234375" resizable="false" sortable="false" text="Position" />
<TreeTableColumn fx:id="columnQuantity" editable="false" prefWidth="80.6666259765625" resizable="false" sortable="false" text="Anzahl" />
</columns>
</TreeTableView>
<GridPane gridLinesVisible="true" layoutX="430.0" layoutY="15.0" prefHeight="670.0" prefWidth="920.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<JFXButton fx:id="gridButton04" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton04Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="1">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton05" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton05Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton03" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton03Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="2">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton02" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton02Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="3">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton01" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton01Action" prefHeight="134.0" prefWidth="179.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="4">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton10" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton10Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.rowIndex="1">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton09" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton09Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="1">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton08" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton08Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="2" GridPane.rowIndex="1">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton07" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton07Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="3" GridPane.rowIndex="1">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton06" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton06Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="4" GridPane.rowIndex="1">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton15" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton15Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.rowIndex="2">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton14" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton14Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="2">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton13" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton13Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="2" GridPane.rowIndex="2">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton12" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton12Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="3" GridPane.rowIndex="2">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton11" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton11Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="4" GridPane.rowIndex="2">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton20" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton20Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.rowIndex="3">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton19" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton19Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="3">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton18" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton18Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="2" GridPane.rowIndex="3">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton17" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton17Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="3" GridPane.rowIndex="3">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton16" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton16Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="4" GridPane.rowIndex="3">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton25" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton25Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.rowIndex="4">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton23" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton23Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="2" GridPane.rowIndex="4">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton22" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton22Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="3" GridPane.rowIndex="4">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton21" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton21Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="4" GridPane.rowIndex="4">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
<JFXButton fx:id="gridButton24" buttonType="RAISED" maxWidth="235.0" minWidth="179.0" onAction="#gridButton24Action" prefHeight="169.0" prefWidth="235.0" ripplerFill="#655252" text="leer 0,00€" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="4">
<font>
<Font name="Cantarell Regular" size="24.0" />
</font>
</JFXButton>
</children>
</GridPane>
<Button fx:id="btnPrintBill" contentDisplay="CENTER" defaultButton="true" graphicTextGap="1.0" layoutX="75.0" layoutY="599.0" maxHeight="88.0" minHeight="75.0" mnemonicParsing="false" onAction="#btnPrintBillAction" prefHeight="88.0" prefWidth="258.0" text="Drucken" wrapText="true">
<font>
<Font name="Cantarell Bold" size="48.0" />
</font>
</Button>
<Button fx:id="btnDeleteSelectedPosition" layoutX="43.0" layoutY="475.0" mnemonicParsing="false" onAction="#btnDeleteSelectedPositionAction" prefHeight="17.0" prefWidth="332.0" text="Ausgewählte Position löschen" textAlignment="CENTER">
<font>
<Font name="Cantarell Regular" size="20.0" />
</font>
</Button>
<Label fx:id="labelAllPrize" alignment="CENTER" contentDisplay="CENTER" layoutX="10.0" layoutY="505.0" prefHeight="15.0" prefWidth="386.0" text="0,00 €" textAlignment="CENTER">
<font>
<Font name="Open Sans" size="70.0" />
</font>
</Label>
<Label fx:id="labelJobCounter" alignment="TOP_RIGHT" contentDisplay="CENTER" layoutX="5.0" layoutY="45.0" prefHeight="34.0" prefWidth="392.0" text="Auftragsnummer: 0" textAlignment="CENTER">
<font>
<Font name="Cantarell Regular" size="26.0" />
</font>
</Label>
<Label fx:id="labelTime" alignment="TOP_RIGHT" layoutX="7.0" layoutY="11.0" maxHeight="33.0" maxWidth="392.0" minHeight="33.0" minWidth="392.0" prefHeight="33.0" prefWidth="392.0" text="Uhrzeit: 12:15">
<font>
<Font name="Cantarell Regular" size="26.0" />
</font>
</Label>
<JFXButton fx:id="btnLock" buttonType="RAISED" cancelButton="true" layoutX="1.0" layoutY="6.0" lineSpacing="2.0" onAction="#btnLockAction" prefHeight="42.0" prefWidth="180.0" ripplerFill="BLACK" text="Kasse sperren" textAlignment="CENTER" textFill="#c91c1c" textOverrun="LEADING_WORD_ELLIPSIS">
<font>
<Font name="Cantarell Regular" size="19.0" />
</font>
</JFXButton>
<Line endX="800.0" layoutX="62.0" layoutY="465.0" rotate="90.0" startX="-100.0" strokeWidth="4.0" />
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</children>
</AnchorPane>

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 B

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="ASCII"?>
<anttasks:AntTask xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:anttasks="http://org.eclipse.fx.ide.jdt/1.0" buildDirectory="${project}/build">
<deploy>
<application name="FxPWMaster01"/>
<info/>
</deploy>
<signjar/>
</anttasks:AntTask>

101
pom.xml Normal file
View File

@ -0,0 +1,101 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>jFxKasse</artifactId>
<version>0.3.0</version>
<name>jFxKasse</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11</version>
</dependency>
<dependency>
<groupId>com.jfoenix</groupId>
<artifactId>jfoenix</artifactId>
<version>9.0.8</version>
</dependency>
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.23.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>11</source>
<target>11</target>
<!--<release>11</release> -->
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.jFxKasse.application.Main</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<finalName>jFxKasse</finalName>
<shadedArtifactAttached>true</shadedArtifactAttached>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.jFxKasse.application.JavaFX11Main</mainClass>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,93 +0,0 @@
package application;
import java.io.File;
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.util.Duration;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
public class Main extends Application
{
private MainWindowController mwc;
private DBController dbc = new DBController(this);
private Stage primaryStage;
@Override
public void start(Stage primaryStage)
{
this.primaryStage = primaryStage;
mainWindow();
}
private void mainWindow()
{
try {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("MainWindow.fxml"));
AnchorPane pane = loader.load();
primaryStage.setTitle("jFxKasse"); // Title of window
mwc = loader.getController();
mwc.setMain(this, dbc);
firstStart();
Scene scene = new Scene(pane);
scene.getStylesheets()
.add(Main.class.getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show(); // shows the stage
Timeline timeline = new Timeline(
new KeyFrame(Duration.seconds(1), ev -> {
mwc.updateTimeLabel(); // update time
}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
launch(args);
}
/**
* Checks if the config.xml is preset.
* @author hendrik
*/
private void firstStart() throws Exception
{
if (mwc.loadSettings()) {
// config.xml found, app starting normal
System.out.println("XML gefunden!");
mwc.initUI(); // Starting the UI elements
mwc.setDBLabel(); // Set databese labels
dbc.dbname = mwc.getDatabaseName(); // handover database name
dbc.connectDatabase(); // estabishing DB conection
mwc.fillTablePositionen(); // fill TreeTable 'Positionen'
mwc.fillCategory();
mwc.fillTableJobs();
mwc.loadGridButtons();
mwc.getSelectedCat(); //Load DB entries in Chois Box
mwc.createNewJob();
} else {
// config.xml NOT found, first start of app
System.out.println("keine XML gefunden!");
mwc.blockUI(true); // disable UI elements that need DB
mwc.blockUnlock();
File dir = new File(System.getProperty("user.home") + "/bin/jFxKasse");
dir.mkdir(); // Create new Subfolder
}
}
}

View File

@ -1 +0,0 @@
/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */

View File

@ -0,0 +1,12 @@
package com.jFxKasse.application;
import com.jFxKasse.application.Main;
public class JavaFX11Main
{
public static void main(String[] args)
{
Main.main(args);
}
}

View File

@ -0,0 +1,119 @@
package com.jFxKasse.application;
import javafx.application.Application;
import java.io.File;
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.util.Duration;
import com.jFxKasse.controller.MainWindowController;
import com.jFxKasse.controller.PrinterController;
import com.jFxKasse.controller.XMLController;
import com.jFxKasse.controller.DBController;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
public class Main extends Application
{
// path to config.xml and the database
public static String filepath;
private static String osName = System.getProperty("os.name");
private static String userHome = System.getProperty("user.home");
private MainWindowController mwc;
private XMLController xmlc = new XMLController(filepath);
private DBController dbc = new DBController(filepath);
private PrinterController pc = new PrinterController();
private Stage primaryStage;
@Override
public void start(Stage primaryStage)
{
this.primaryStage = primaryStage;
System.out.println("\nstarting jFxKasse\n");
mainWindow();
}
private void mainWindow()
{
try {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("/fxml/MainWindow.fxml"));
AnchorPane pane = loader.load();
primaryStage.setTitle("jFxKasse"); // Title of window
mwc = loader.getController(); // set the mwc as the JavaFx
// MainWindowController
pc.searchPrinters(); // search for available printers
mwc.setMain(this, dbc, xmlc, pc); // set the created instances to the
// mwc
firstStart(); // test if this is the first run
Scene scene = new Scene(pane);
scene.getStylesheets().add(
Main.class.getResource("/css/application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show(); // shows the stage
Timeline timeline = new Timeline(
new KeyFrame(Duration.seconds(1), ev -> {
mwc.updateTimeLabel(); // update time label on UI
}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
if (osName.contains("Windows")) {
System.out.println("FCK Windows");
filepath = userHome + "/Documents/jFxKasse/";
} else {
filepath = userHome + "/jFxKasse/";
}
launch(args);
}
/**
* Checks if the config.xml is preset.
*/
private void firstStart() throws Exception
{
if (xmlc.loadSettings()) {
// config.xml found, app starting normal
System.out.println("XML found!");
mwc.initUI(); // Starting the UI elements
mwc.setDBLabel(); // Set databese labels
dbc.setDbname(xmlc.getDatabaseName()); // handover database name
dbc.connectDatabase(); // estabishing DB conection
mwc.fillTablePositionen(); // fill TreeTable 'Positionen'
mwc.fillCategory();
mwc.fillPrinterSettings();
mwc.fillTableJobs();
mwc.loadGridButtons();
mwc.getSelectedCat(); // Load DB entries in Chois Box
mwc.createNewJob();
} else {
// config.xml NOT found, first start of app
System.out.println("no XML found!");
xmlc.initXML(); // set default values
mwc.blockUI(true); // disable UI elements that need DB
mwc.blockUnlock();
File dir = new File(filepath);
dir.mkdir(); // Create new Subfolder
}
}
}

View File

@ -0,0 +1,98 @@
package com.jFxKasse.application;
import java.util.ArrayList;
import com.jFxKasse.controller.DBController;
import com.jFxKasse.controller.PrinterController;
import com.jFxKasse.controller.XMLController;
import com.jFxKasse.datatypes.PrintDataSimple;
import com.jFxKasse.datatypes.PrintDataSplitted;
import javafx.geometry.Insets;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.util.Pair;
public class PrintJob
{
private TimeDate timedate = new TimeDate();
public void printJob(int jobID, XMLController xmlc, DBController dbc,
PrinterController pc)
{
if ((xmlc.getPrintername().equals("Drucker auswählen")
|| xmlc.getPrintername() == null)) {
// no printer selected
System.out.println("Kein Drucker eingestellt!!!");
// creates a dialog
Dialog<Pair<String, String>> dialog = new Dialog<>();
dialog.setTitle("Kein Drucker");
dialog.setHeaderText("Es ist kein Drucker einestellt.\n"
+ "In den Einstellungen einen Drucker auswählen.");
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK);
GridPane grid = new GridPane();
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(20, 150, 10, 10));
grid.add(new Label("Tipp:\n"
+ "Es kann ein virtueller Drucker installiert werden: \n\n"
+ "www.cups-pdf.de"), 0, 0);
dialog.getDialogPane().setContent(grid);
dialog.setResizable(true);
dialog.showAndWait();
} else {
// printer selected
pc.selectPrinter(xmlc.getPrintername());
/* Single bill or splitted */
if (xmlc.getCategorySplitted()) {
// split the bills
PrintDataSplitted pdsplitted = new PrintDataSplitted(
xmlc.getLinebreak(), xmlc.getOffsetHeader(),
xmlc.getOffsetFooter(),
timedate.getSystemTime() + " " + timedate.getSystemDate(),
xmlc.getHeader(), xmlc.getFooter());
pdsplitted.setData(Integer.toString(jobID), dbc.getTime_Job(jobID),
dbc.getQuantity_Job(jobID), dbc.getName_Job(jobID),
dbc.getValue_Job(jobID), dbc.getCategory_Job(jobID),
dbc.getJobValue_Job(jobID));
System.out.println("Printing job ...");
ArrayList<String> printString = pdsplitted.getPrintStrings();
for (int i = 0; i < printString.size(); i++) {
pc.printString(printString.get(i));
}
} else {
// one single bills
PrintDataSimple pds = new PrintDataSimple(xmlc.getLinebreak(),
xmlc.getOffsetHeader(), xmlc.getOffsetFooter(),
timedate.getSystemTime() + " " + timedate.getSystemDate(),
xmlc.getHeader(), xmlc.getFooter());
pds.setData(Integer.toString(jobID), dbc.getTime_Job(jobID),
dbc.getQuantity_Job(jobID), dbc.getName_Job(jobID),
dbc.getValue_Job(jobID), dbc.getCategory_Job(jobID),
dbc.getJobValue_Job(jobID));
System.out.println("Printing job ...");
pc.printString(pds.getPrintString());
}
}
}
}

View File

@ -0,0 +1,24 @@
package com.jFxKasse.application;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeDate
{
public String getSystemTime()
{
DateFormat dateFormat = new SimpleDateFormat("HH:mm");
Date date = new Date();
String time = dateFormat.format(date);
return time;
}
public String getSystemDate()
{
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
Date date = new Date();
String dateStr = dateFormat.format(date);
return dateStr;
}
}

View File

@ -1,4 +1,4 @@
package application;
package com.jFxKasse.controller;
import java.sql.Connection;
import java.sql.DriverManager;
@ -7,46 +7,49 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import com.jFxKasse.datatypes.tableDataJob;
import com.jFxKasse.datatypes.tableDataPositionen;
import java.io.File;
class DBController
public class DBController
{
private Connection connection;
private String DB_PATH_Linux = System.getProperty("user.home")
+ "/bin/jFxKasse/";
private String DB_PATH;
public String dbname;
@SuppressWarnings("unused")
private Main main;
private String dbname;
public void main()
{
try {
connection = DriverManager
.getConnection("jdbc:sqlite:" + DB_PATH_Linux + dbname + ".db");
.getConnection("jdbc:sqlite:" + DB_PATH + dbname + ".db");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
DBController(Main main)
public DBController(String path)
{
this.main = main;
this.DB_PATH = path;
}
public void setDbname(String dbname)
{
this.dbname = dbname;
}
public void connectDatabase()
{ // connect to database
System.out.println("Verbinde ... DB name: " + dbname);
System.out.println("Connecting... DB name: " + dbname);
try {
if (connection != null)
return;
connection = DriverManager
.getConnection("jdbc:sqlite:" + DB_PATH_Linux + dbname + ".db");
.getConnection("jdbc:sqlite:" + DB_PATH + dbname + ".db");
if (!connection.isClosed())
System.out.println("DB Datei-Verbindung erstellt");
System.out.println("DB connection established");
} catch (SQLException e) {
throw new RuntimeException(e);
}
@ -66,8 +69,8 @@ class DBController
});
}
public boolean existiertDatenbank(String pPfad)
{ // Prüft ob die Datenbank existiert
public boolean existDB(String pPfad)
{ // does the DB exists?
File varTmpDir = new File(pPfad);
if (!varTmpDir.exists()) {
return false;
@ -78,10 +81,7 @@ class DBController
public String getCategoryNameFromPositionen(int pID)
{
// System.out.println("getCategoryName: " + pID);
int catInPos = 0;
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT posid, cat FROM positionen "
@ -92,11 +92,9 @@ class DBController
e.printStackTrace();
}
if (catInPos == 6) {
return "Standard";
}
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT catid, catname FROM category "
@ -113,7 +111,7 @@ class DBController
// table Position section //
public void createTablePositionen()
{ // create table position
System.out.println("Erstelle Tabelle Positionen");
System.out.println("Creating table Positionen");
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("DROP TABLE IF EXISTS positionen;");
@ -134,7 +132,7 @@ class DBController
public void fillPositionen_Positionen(int pID, String pName, float pValue,
int pCat, String pColor)
{ // create new data in table
System.out.println("Erstelle neuen positionen eintrag");
System.out.println("Creating new positionen entry");
try {
PreparedStatement ps = connection.prepareStatement(
"INSERT INTO positionen VALUES (?, ?, ?, ?, ?);");
@ -155,7 +153,7 @@ class DBController
}
public String getName_Positionen(int pID)
{ // Gibt das Datum zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -169,7 +167,7 @@ class DBController
}
public String getValue_Positionen(int pID)
{ // Gibt das Konto zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -184,7 +182,7 @@ class DBController
}
public int getCat_Positionen(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -199,7 +197,7 @@ class DBController
}
public String getColor_Positionen(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -214,7 +212,7 @@ class DBController
}
public void setName_Positionen(int pID, String pName)
{ // Setzt das Datum
{
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("UPDATE positionen SET name = '" + pName
@ -226,7 +224,7 @@ class DBController
}
public void setValue_Positionen(int pID, String pValue)
{ // Setzt das Konto
{
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("UPDATE positionen SET value = '" + pValue
@ -238,7 +236,7 @@ class DBController
}
public void setCat_Positionen(int pID, int pCat)
{ // Setzt den Nutzername
{
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("UPDATE positionen SET cat = '" + pCat
@ -250,7 +248,7 @@ class DBController
}
public void setColor_Positionen(int pID, String pColor)
{ // Setzt den Nutzername
{
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("UPDATE positionen SET color = '" + pColor
@ -262,14 +260,13 @@ class DBController
}
public ArrayList<tableDataPositionen> ladeTabellePositionen()
{ // Gibt ein Objekt daten mit allen Einträgen der DB zurück
{
ArrayList<tableDataPositionen> daten = new ArrayList<>();
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM positionen;");
while (rs.next()) {
try {
// Entschlüsselte Daten werden als Datenobjekt gespeichert
daten.add(new tableDataPositionen(rs.getInt("posid"),
rs.getString("name"), rs.getString("value"),
rs.getString("cat"), rs.getString("color")));
@ -286,7 +283,7 @@ class DBController
}
public void ausgebenSysoPositionen()
{ // Debugging Ausgabe der kompletten Tabelle
{
System.out.println("Print positionen");
try {
Statement stmt = connection.createStatement();
@ -327,7 +324,7 @@ class DBController
}
public void setName_Category(int pID, String pName)
{ // Setzte den Namen
{
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("UPDATE category SET catname = '" + pName
@ -359,7 +356,7 @@ class DBController
}
public String getName_Category(int pID)
{ // Gibt das Datum zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -375,8 +372,8 @@ class DBController
// table Jobs section //
public void erstelleTabelleJobs()
{ // Erstelle Tabelle mit Reihen
System.out.println("Erstelle Tabelle Jobs");
{ // create table jobs
System.out.println("Creating table Jobs");
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("DROP TABLE IF EXISTS jobs;");
@ -390,7 +387,6 @@ class DBController
public int getLatestJobNumber_Job()
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -402,11 +398,10 @@ class DBController
}
return 0;
}
public String getTime_Job(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -420,7 +415,7 @@ class DBController
}
public String getQuantity_Job(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -435,7 +430,7 @@ class DBController
}
public String getName_Job(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -450,7 +445,7 @@ class DBController
}
public String getValue_Job(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -465,7 +460,7 @@ class DBController
}
public String getCategory_Job(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -480,7 +475,7 @@ class DBController
}
public String getState_Job(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -494,7 +489,7 @@ class DBController
}
public String getJobValue_Job(int pID)
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -508,7 +503,7 @@ class DBController
}
public String getAllJobValue_Job()
{ // Gibt den Nutzernamen zurück
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
@ -522,8 +517,23 @@ class DBController
}
}
public String getJobCount()
{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
"SELECT count(*) AS JOBCOUNT FROM jobs WHERE state = " + '"'
+ "verbucht" + '"' + ";");
return rs.getString("JOBCOUNT");
} catch (SQLException e) {
System.err.println("Couldn't handle DB-Query");
e.printStackTrace();
return "0";
}
}
public void setStatus_Jobs(int pID, String pStatus)
{ // Setzt das Konto
{
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate("UPDATE jobs SET state = '" + pStatus
@ -535,7 +545,7 @@ class DBController
}
public ArrayList<tableDataJob> loadTableJobs_Job()
{ // Gibt den Nutzernamen zurück
{
ArrayList<tableDataJob> tmp = new ArrayList<tableDataJob>();
try {
@ -545,8 +555,6 @@ class DBController
while (rs.next()) {
try {
// return rs.getString("jobvalue");
String tablePosition = rs.getString("positionen_name");
tableDataJob data = new tableDataJob(rs.getInt("jobid"),
@ -570,7 +578,6 @@ class DBController
String pPositionen_name, String pPositionen_value,
String pPositionen_cat, String pState, String pJobvalue)
{
System.out.println("Create new Job Entry");
try {
PreparedStatement ps = connection.prepareStatement(
@ -591,7 +598,5 @@ class DBController
System.err.println("Couldn't handle DB-Query");
e.printStackTrace();
}
}
}

View File

@ -1,4 +1,4 @@
package application;
package com.jFxKasse.controller;
import javafx.fxml.FXML;
import javafx.geometry.Insets;
@ -12,41 +12,34 @@ import javafx.scene.control.TreeItem;
import javafx.scene.control.TitledPane;
import javafx.scene.control.Tooltip;
import javafx.scene.control.ChoiceBox;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import com.jfoenix.controls.JFXTextField;
import com.jfoenix.controls.JFXToggleButton;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.scene.control.Label;
import javafx.scene.control.Spinner;
import javafx.scene.control.SpinnerValueFactory;
import javafx.scene.control.Tab;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.GridPane;
import javafx.util.Pair;
import com.jFxKasse.application.Main;
import com.jFxKasse.application.PrintJob;
import com.jFxKasse.application.TimeDate;
import com.jFxKasse.datatypes.Job;
import com.jFxKasse.datatypes.tableDataCurrentOrder;
import com.jFxKasse.datatypes.tableDataJob;
import com.jFxKasse.datatypes.tableDataPositionen;
public class MainWindowController
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
Clipboard clipboard = toolkit.getSystemClipboard();
@FXML
private AnchorPane mainAnchorpane;
@ -115,6 +108,18 @@ public class MainWindowController
@FXML
private ChoiceBox<String> catChoise;
@FXML
private ChoiceBox<String> printerChoise;
@FXML
private Spinner<Integer> linesSpinner;
@FXML
private Spinner<Integer> offsetHeaderSpinner;
@FXML
private Spinner<Integer> offsetFooterSpinner;
@FXML
private Button ueberbtn;
@ -193,6 +198,9 @@ public class MainWindowController
@FXML
private Button gridButton25;
@FXML
private Button btnSavePrinter;
@FXML
private Button btnDeleteSelectedPosition;
@ -238,6 +246,12 @@ public class MainWindowController
@FXML
private Label labelCat03;
@FXML
private JFXTextField tftfooter;
@FXML
private JFXTextField tftheader;
@FXML
private JFXTextField tftKat01;
@ -301,6 +315,9 @@ public class MainWindowController
@FXML
private TitledPane titledPaneEntry;
@FXML
private TitledPane titlePanePrint;
@FXML
private TextField tftNewPosition;
@ -310,13 +327,21 @@ public class MainWindowController
@FXML
private TextField tftNewDBName;
@FXML
private JFXToggleButton switchSeparate;
@SuppressWarnings("unused")
private Main main;
private DBController dbc;
private String filepathXMLLinux = System.getProperty("user.home")
+ "/bin/jFxKasse/config.xml"; // Pfad wo die XML liegt
private XMLController xmlc;
private PrinterController pc;
private TimeDate timedate = new TimeDate();
private PrintJob pj = new PrintJob();
private int idPositionen = 0;
@ -324,8 +349,6 @@ public class MainWindowController
private String selectedCatName;
private String databaseName;
private boolean lockState = false;
private boolean isPrintBtnDisabled = true;
@ -348,8 +371,6 @@ public class MainWindowController
TreeItem<tableDataPositionen> rootPositionen = new TreeItem<>(
new tableDataPositionen(0, "0", "0", "0", "0"));
Properties props = new Properties();
@FXML
public void ueberbtnAction(ActionEvent event)
{ // opens the 'Über' dialog
@ -357,8 +378,7 @@ public class MainWindowController
// creates a dialog
Dialog<Pair<String, String>> dialog = new Dialog<>();
dialog.setTitle("Über jFxKasse");
dialog.setHeaderText(
"Informationen und Lizenzen - Version 0.1 - Without Printer");
dialog.setHeaderText("Informationen und Lizenzen - Version 0.3.0");
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK);
@ -386,42 +406,47 @@ public class MainWindowController
@FXML
public void btnOpenFolderAction(ActionEvent event) throws IOException
{
Runtime.getRuntime().exec(
"xdg-open " + System.getProperty("user.home") + "/bin/jFxKasse");
if (System.getProperty("os.name").contains("Windows")) {
System.out.println("FCK Windows");
File file = new File(Main.filepath);
Desktop desktop = Desktop.getDesktop();
desktop.open(file);
} else {
Runtime.getRuntime().exec("xdg-open " + Main.filepath);
}
}
@FXML
public void btnCreateNewDatabaseAction(ActionEvent event) throws Exception
{
if(!(tftNewDBName.getText().equals(""))) {
setDatabaseName(tftNewDBName.getText());
dbc.dbname = getDatabaseName();
dbc.connectDatabase(); // establish DB connection
dbc.createTablePositionen(); // Create new table
dbc.erstelleTabelleJobs(); // Create new table
dbc.createTableCategory(); // Create new table
try {
saveSettings(getDatabaseName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setDBLabel(); // Set new databese labels
blockUI(false); // unlock UI elements that need DB
fillTablePositionen(); // fill TreeTable 'Positionen'
fillCategory();
initUI(); // Starting the UI elements
getSelectedCat();
createNewJob();
btnLock.setDisable(false);
if (!(tftNewDBName.getText().equals(""))) {
xmlc.setDatabaseName(tftNewDBName.getText());
dbc.setDbname(xmlc.getDatabaseName());
dbc.connectDatabase(); // establish DB connection
dbc.createTablePositionen(); // Create new table
dbc.erstelleTabelleJobs(); // Create new table
dbc.createTableCategory(); // Create new table
try {
// saveSettings(getDatabaseName());
xmlc.saveSettings();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setDBLabel(); // Set new databese labels
blockUI(false); // unlock UI elements that need DB
fillTablePositionen(); // fill TreeTable 'Positionen'
fillCategory();
fillPrinterSettings();
initUI(); // Starting the UI elements
getSelectedCat();
createNewJob();
btnLock.setDisable(false);
}
}
@ -454,33 +479,45 @@ public class MainWindowController
@FXML
public void btnCalcStatsAction(ActionEvent event)
{
System.out.println(dbc.getAllJobValue_Job());
if(dbc.getAllJobValue_Job() != null) {
int allActiveJobs = Integer.valueOf(dbc.getJobCount());
if (dbc.getAllJobValue_Job() != null) {
// summed up values of all jobs that are active
float allValue = Float.valueOf(dbc.getAllJobValue_Job());
float avgJobValue = ((float) allValue / dbc.getLatestJobNumber_Job());
// count of all jobs that are active
setJobStatLabel(dbc.getLatestJobNumber_Job(), avgJobValue, allValue);
}else {
setJobStatLabel(dbc.getLatestJobNumber_Job(), 0, 0);
float avgJobValue = ((float) allValue / allActiveJobs);
setJobStatLabel(allActiveJobs, avgJobValue, allValue);
} else {
setJobStatLabel(allActiveJobs, 0, 0);
}
titlePaneStats.setVisible(true);
}
@FXML
public void btnReprintJobAction(ActionEvent event)
public void btnSavePrinterAction(ActionEvent event)
{
System.out.println("btnSavePrinterAction");
xmlc.setPrintername(
printerChoise.getSelectionModel().getSelectedItem().toString());
xmlc.setLinebreak(linesSpinner.getValue());
xmlc.setOffsetHeader(offsetHeaderSpinner.getValue());
xmlc.setOffsetFooter(offsetFooterSpinner.getValue());
xmlc.setHeader(tftheader.getText());
xmlc.setFooter(tftfooter.getText());
xmlc.setCategorySplitted(switchSeparate.isSelected());
try {
xmlc.saveSettings();
} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
fillPrinterSettings();
}
@FXML
@ -488,13 +525,14 @@ public class MainWindowController
{
dbc.setStatus_Jobs(selectedJobId + 1, "storniert");
fillTableJobs();
btnCancelJob.setDisable(true);
btnReprintJob.setDisable(true);
}
@FXML
public void btnLockAction(ActionEvent event)
{
lockState = !lockState;
blockUI(lockState);
if (lockState) {
@ -502,7 +540,6 @@ public class MainWindowController
} else {
btnLock.setText("Kasse sperren");
}
}
@FXML
@ -517,7 +554,6 @@ public class MainWindowController
fillCategory();
fillTablePositionen();
getSelectedCat();
}
@FXML
@ -533,7 +569,6 @@ public class MainWindowController
}
setJobPrizeLabel(currentJob.getJobValue());
// currentJob.printJobOnConsole();
if (rootCurrentJob.getChildren().size() == 0) {
btnPrintBill.setDisable(true);
@ -545,14 +580,11 @@ public class MainWindowController
if (!currentJob.existsPosName(currentOrderPosName)) {
btnDeleteSelectedPosition.setDisable(true);
}
}
@FXML
public void btnPrintBillAction(ActionEvent event)
{
// currentJob.printJobOnConsole();
btnPrintBill.setDisable(true);
tapPosEdit.setDisable(false);
btnDeleteSelectedPosition.setDisable(true);
@ -560,6 +592,9 @@ public class MainWindowController
setJobPrizeLabel(0);
currentJob.setJobtime(
timedate.getSystemTime() + " " + timedate.getSystemDate());
rootCurrentJob.getChildren().remove(0,
rootCurrentJob.getChildren().size());
@ -570,6 +605,8 @@ public class MainWindowController
currentJob.createPosCatDBString(), "verbucht",
String.valueOf(currentJob.getJobValue()));
pj.printJob(currentJob.getJobnumber(), xmlc, dbc, pc);
fillTableJobs();
currentJob = null;
@ -578,11 +615,17 @@ public class MainWindowController
}
@FXML
public void btnReprintJobAction(ActionEvent event)
{
System.out.println("reprint job");
pj.printJob((selectedJobId + 1), xmlc, dbc, pc);
}
@FXML
public void gridButton01Action(ActionEvent event)
{
handelGridButtons(1);
}
@FXML
@ -737,28 +780,17 @@ public class MainWindowController
rootPositionen.getChildren().size());
for (int i = 0; i < dbc.ladeTabellePositionen().size(); i++) {
float fValue = Float.valueOf(dbc.ladeTabellePositionen().get(i).getValue());
float fValue = Float
.valueOf(dbc.ladeTabellePositionen().get(i).getValue());
String strValue = String.format("%.02f", fValue);
strValue.replace('.', ',');
tableDataPositionen helpTableData = new tableDataPositionen(
dbc.ladeTabellePositionen().get(i).getID(),
dbc.ladeTabellePositionen().get(i).getName(),
(strValue + "")
,
dbc.ladeTabellePositionen().get(i).getName(), (strValue + ""),
dbc.getCategoryNameFromPositionen(i + 1),
getColorNames(dbc.ladeTabellePositionen().get(i).getColor()));
rootPositionen.getChildren()
@ -772,39 +804,30 @@ public class MainWindowController
for (int i = 0; i < 25; i++) {
getButtonByID(i).setVisible(false);
}
tftNewDBName.setText(getDatabaseName());
tftNewDBName.setText(xmlc.getDatabaseName());
tftKat05.setDisable(true);
titlePaneStats.setVisible(false);
btnPrintBill.setDisable(true);
btnReprintJob.setDisable(true);
btnCancelJob.setDisable(true);
btnDeleteSelectedPosition.setDisable(true);
isPrintBtnDisabled = true;
initPositionen();
initCurrentOrderTreeTableView();
initJobTreeTableView();
}
public int getSelectedCat()
{
ObservableList<String> cats = FXCollections.observableArrayList();
for (int i = 1; i < 5; i++) {
if (dbc.getName_Category(i).equals("Standard")) {
} else {
cats.add(dbc.getName_Category(i));
}
}
/*
* cats.add(dbc.getName_Category(1));
*
* cats.add(dbc.getName_Category(2)); cats.add(dbc.getName_Category(3));
* cats.add(dbc.getName_Category(4));
*/
cats.add(dbc.getName_Category(5));
catChoise.setItems(cats);
@ -816,20 +839,70 @@ public class MainWindowController
{
selectedCatName = catChoise.getItems().get((int) new_value)
.toString();
}
});
for (int i = 1; i < 6; i++) {
if (dbc.getName_Category(i).equals(selectedCatName)) {
return i;
}
}
return 5;
}
public void fillPrinterSettings()
{
System.out.println("Fill printer Settings");
ObservableList<String> printers = FXCollections
.observableArrayList(pc.getAvailablePrinters());
printers.add("Drucker auswählen");
printerChoise.setItems(printers);
boolean printerFound = false;
int index = 0;
for (String currentPrinter : printers) {
if (xmlc.getPrintername().equals(currentPrinter)) {
// saved printer is available
printerFound = true;
// select saved printer in UI
printerChoise.getSelectionModel().select(index);
}
index++;
}
if (!printerFound) {
// saved printer is not available
printerChoise.getSelectionModel().select(printers.size() - 1);
System.out.println("no printer found");
}
SpinnerValueFactory<Integer> valueFactoryLines = //
new SpinnerValueFactory.IntegerSpinnerValueFactory(1, 99,
xmlc.getLinebreak());
linesSpinner.setValueFactory(valueFactoryLines);
SpinnerValueFactory<Integer> valueFactoryHeader = //
new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 99,
xmlc.getOffsetHeader());
offsetHeaderSpinner.setValueFactory(valueFactoryHeader);
SpinnerValueFactory<Integer> valueFactoryFooter = //
new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 99,
xmlc.getOffsetFooter());
offsetFooterSpinner.setValueFactory(valueFactoryFooter);
tftheader.setText(xmlc.getHeader());
tftfooter.setText(xmlc.getFooter());
switchSeparate.setSelected(xmlc.getCategorySplitted());
}
public void fillCategory()
{
tftKat01.setText(dbc.getName_Category(1));
@ -844,13 +917,14 @@ public class MainWindowController
entryTreeTable.setRoot(rootPositionen);
entryTreeTable.setShowRoot(false);
entryTreeTable.setEditable(false);
columnPosnumber.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
columnPositionsEdit.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
columnPosnumber
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
columnPositionsEdit
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
columnPrize.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
columnCat.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
columnColor.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
ObservableList<String> color = FXCollections.observableArrayList("Rot",
"Orange", "Braun", "Weiß", "Gelb", "Gr\u00fcn", "Blau", "Indigo");
@ -887,7 +961,6 @@ public class MainWindowController
public void changed(ObservableValue<?> observable, Object oldVal,
Object newVal)
{
// last = selected; //for auto-play
int selected = entryTreeTable.getSelectionModel()
.getSelectedIndex(); // get selected item
@ -910,14 +983,12 @@ public class MainWindowController
}
});
tftNewValue.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue)
{
if (!newValue.matches("\\d{0,7}([\\.]\\d{0,2})?")) {
if (!newValue.matches("\\d{0,4}([\\.]\\d{0,2})?")) {
tftNewValue.setText(oldValue);
}
}
@ -939,79 +1010,29 @@ public class MainWindowController
}
public void setMain(Main main, DBController dbc)
public void setMain(Main main, DBController dbc, XMLController xmlc,
PrinterController pc)
{
this.main = main;
this.dbc = dbc;
}
public String getSystemTime()
{
DateFormat dateFormat = new SimpleDateFormat("HH:mm");
Date date = new Date();
String time = dateFormat.format(date);
return time;
}
public String getSystemDate()
{
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
Date date = new Date();
String dateStr = dateFormat.format(date);
return dateStr;
}
public void saveSettings(String databasename) throws Exception
{ // Save settings to config.xml
OutputStream outputStream;
try {
props.setProperty("databasename", databasename);
outputStream = new FileOutputStream(filepathXMLLinux);
props.storeToXML(outputStream, "jFxKasse settings");
outputStream.close();
} catch (IOException e) {
}
}
public boolean loadSettings() throws Exception
{ // reads the settings from config.xml
InputStream inputStream;
try {
inputStream = new FileInputStream(filepathXMLLinux);
props.loadFromXML(inputStream);
setDatabaseName(props.getProperty("databasename"));
inputStream.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public String getDatabaseName()
{
return databaseName;
}
public void setDatabaseName(String NewDatabaseName)
{
databaseName = NewDatabaseName;
this.xmlc = xmlc;
this.pc = pc;
}
public void setDBLabel() throws Exception
{
if (loadSettings() == true) {
labelDBStatus
.setText("Geladene Datenbank: " + getDatabaseName() + ".db");
if (xmlc.loadSettings() == true) {
labelDBStatus.setText(
"Geladene Datenbank: " + xmlc.getDatabaseName() + ".db");
btnCreateNewDatabase.setDisable(true);
tftNewDBName.setDisable(true);
labelDBName.setTooltip(new Tooltip(
"Um eine neue Datenbank zu erzeugen muss die vorherige config.xml und "
+ getDatabaseName()
+ xmlc.getDatabaseName()
+ ".db gelöscht werden! Anwendung danach neustarten!"));
labelDBStatus.setTooltip(new Tooltip(
"Um eine neue Datenbank zu erzeugen muss die vorherige config.xml und "
+ getDatabaseName()
+ xmlc.getDatabaseName()
+ ".db gelöscht werden! Anwendung danach neustarten!"));
} else {
labelDBStatus.setText("Keine Datenbank gefunden!");
@ -1102,7 +1123,6 @@ public class MainWindowController
// print was not disabled and will be enabled again
btnPrintBill.setDisable(pState);
btnDeleteSelectedPosition.setDisable(pState);
}
if (pState) {
@ -1131,22 +1151,20 @@ public class MainWindowController
labelAllPrize.setVisible(!pState);
labelJobCounter.setVisible(!pState);
if(pState) {
if (pState) {
titlePaneStats.setVisible(!pState);
}
titledPaneEntry.setDisable(pState);
titlePaneCat.setDisable(pState);
titlePanePrint.setDisable(pState);
}
public void loadGridButtons()
{
for (int i = 0; i < 25; i++) {
getButtonByID(i).setText(dbc.getName_Positionen(i + 1));
if ((getColorID(dbc.getColor_Positionen(i + 1)) == 0)
|| (getColorID(dbc.getColor_Positionen(i + 1)) == 7)) {
getButtonByID(i).setStyle("-fx-background-color: "
@ -1155,21 +1173,15 @@ public class MainWindowController
getButtonByID(i).setStyle("-fx-background-color: "
+ dbc.getColor_Positionen(i + 1) + "; -fx-text-fill: black;");
}
}
for (int i = 0; i < 25; i++) {
if (dbc.getName_Positionen(i + 1).equals("Noch frei")) {
getButtonByID(i).setVisible(false);
} else {
getButtonByID(i).setVisible(true);
}
}
}
public Button getButtonByID(int pID)
{
@ -1228,11 +1240,9 @@ public class MainWindowController
return gridButton01;
}
}
private void handelGridButtons(int pID)
{
currentJob.addPosition(dbc.getName_Positionen(pID),
Float.parseFloat(dbc.getValue_Positionen(pID)),
dbc.getCategoryNameFromPositionen(pID));
@ -1250,13 +1260,10 @@ public class MainWindowController
}
setJobPrizeLabel(currentJob.getJobValue());
}
private void initCurrentOrderTreeTableView()
{
columnQuantity
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
columnPosition
@ -1278,7 +1285,6 @@ public class MainWindowController
public void changed(ObservableValue<?> observable, Object oldVal,
Object newVal)
{
// last = selected; //for auto-play
int selected = tableCurrentOrder.getSelectionModel()
.getSelectedIndex(); // get selected item
@ -1290,11 +1296,9 @@ public class MainWindowController
});
}
private void initJobTreeTableView()
{
columnJobNumber
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
@ -1335,17 +1339,16 @@ public class MainWindowController
{
selectedJobId = jobsTreeTable.getSelectionModel()
.getSelectedIndex(); // get selected item
if(dbc.getState_Job(selectedJobId+1).equals("storniert")) {
if (dbc.getState_Job(selectedJobId + 1).equals("storniert")) {
btnCancelJob.setDisable(true);
}else {
btnReprintJob.setDisable(true);
} else {
btnCancelJob.setDisable(false);
btnReprintJob.setDisable(false);
}
}
});
}
@FXML
@ -1380,12 +1383,10 @@ public class MainWindowController
public void createNewJob()
{
currentJob = new Job(dbc.getLatestJobNumber_Job() + 1,
getSystemTime() + " " + getSystemDate());
currentJob = new Job(dbc.getLatestJobNumber_Job() + 1);
labelJobCounter.setText("Auftragsnummer: "
+ String.valueOf(dbc.getLatestJobNumber_Job() + 1));
}
private static String createJobDescription(String pNames, String pQuantities)
{
@ -1405,14 +1406,11 @@ public class MainWindowController
}
return tmp;
}
private void setJobPrizeLabel(float pPrize)
{
String str = String.format("%.02f", pPrize);
str.replace('.', ',');
labelAllPrize.setText(str + "");
}
@ -1431,17 +1429,16 @@ public class MainWindowController
str.replace('.', ',');
labelAllValue.setText("Gesamt: " + str + "");
titlePaneStats.setText("Statistik - " + getSystemTime() + " " + getSystemDate());
titlePaneStats.setText("Statistik - " + timedate.getSystemTime() + " "
+ timedate.getSystemDate());
}
public void updateTimeLabel()
{
labelTime.setText("Uhrzeit: " + getSystemTime());
labelTime.setText("Uhrzeit: " + timedate.getSystemTime());
}
public void blockUnlock()
{

View File

@ -0,0 +1,140 @@
/**
* some parts are from http://www.mets-blog.com/java-pos-thermal-printer-example/
*/
package com.jFxKasse.controller;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.nio.charset.StandardCharsets;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
public class PrinterController implements Printable
{
// All available Printers on this system
private PrintService[] printService;
// selected printer
private PrintService selectedPrinter;
private DocFlavor flavor;
public PrinterController()
{
flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
}
/**
* @return A String array with all available printers
*/
public String[] getAvailablePrinters()
{
int printerSize = PrinterJob.lookupPrintServices().length;
String printers[] = new String[printerSize];
for (int i = 0; i < printers.length; i++) {
printers[i] = this.printService[i].getName();
}
return printers;
}
/**
* searchs connected printers on the system
*/
public void searchPrinters()
{
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
this.printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
String printers[] = getAvailablePrinters();
System.out.println("Printers found:");
System.out.println("++++++++++++++++++++");
for (int i = 0; i < printers.length; i++) {
System.out.println(printers[i]);
}
System.out.println("++++++++++++++++++++");
}
/**
* Selects the printer via its name
* @param printerName
*/
public void selectPrinter(String printerName)
{
String printers[] = getAvailablePrinters();
for (int i = 0; i < printers.length; i++) {
if (printerName.equals(printers[i])) {
selectedPrinter = printService[i];
System.out.println("Printer: " + printers[i] + " selected");
return;
}
}
}
/**
*
* @param input data as String
*/
public void printString(String text)
{
PrintService service = selectedPrinter;
DocPrintJob job = service.createPrintJob();
try {
byte[] bytes;
bytes = text.getBytes(StandardCharsets.UTF_8);
Doc doc = new SimpleDoc(bytes, flavor, null);
job.print(doc, null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
/*
* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
/* Now we perform our rendering */
return PAGE_EXISTS;
}
public void printBytes(byte[] bytes)
{
PrintService service = selectedPrinter;
DocPrintJob job = service.createPrintJob();
try {
Doc doc = new SimpleDoc(bytes, flavor, null);
job.print(doc, null);
} catch (Exception e) {
e.printStackTrace();
}
}
public void cutPaper()
{
byte[] cutP = new byte[] { 0x1d, 'V', 1 };
printBytes(cutP);
}
}

View File

@ -0,0 +1,219 @@
package com.jFxKasse.controller;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
public class XMLController
{
private String databaseName = null;
private String printername = null;
private int linebreak;
private int offsetHeader;
private int offsetFooter;
private String header = null;
private String footer = null;
private boolean categorySplitted;
private String filePath = null;
private Properties props = null;
public XMLController(String filePath)
{
this.filePath = filePath + "config.xml";
props = new Properties();
}
public void saveSettings() throws Exception
{ // Save settings to config.xml
System.out.println("Saving XML");
OutputStream outputStream;
String linebreak = Integer.toString(this.linebreak);
String offsetHeader = Integer.toString(this.offsetHeader);
String offsetFooter = Integer.toString(this.offsetFooter);
String categorySplitted = null;
if (this.categorySplitted) {
categorySplitted = "true";
} else {
categorySplitted = "false";
}
try {
props.setProperty("databasename", this.databaseName);
props.setProperty("printername", this.printername);
props.setProperty("linebreak", linebreak);
props.setProperty("offsetHeader", offsetHeader);
props.setProperty("offsetFooter", offsetFooter);
props.setProperty("header", this.header);
props.setProperty("footer", this.footer);
props.setProperty("categorySplitted", categorySplitted);
outputStream = new FileOutputStream(filePath);
props.storeToXML(outputStream, "jFxKasse settings");
outputStream.close();
} catch (IOException e) {
}
}
public boolean loadSettings() throws Exception
{ // reads the settings from config.xml
InputStream inputStream;
try {
inputStream = new FileInputStream(filePath);
props.loadFromXML(inputStream);
this.databaseName = (props.getProperty("databasename"));
this.printername = (props.getProperty("printername"));
try {
this.linebreak = Integer.valueOf(props.getProperty("linebreak"));
} catch (Exception e) {
this.linebreak = 28;
}
try {
this.offsetHeader = Integer
.valueOf(props.getProperty("offsetHeader"));
} catch (Exception e) {
this.offsetHeader = 1;
}
try {
this.offsetFooter = Integer
.valueOf(props.getProperty("offsetFooter"));
} catch (Exception e) {
this.offsetFooter = 2;
}
this.header = (props.getProperty("header"));
this.footer = (props.getProperty("footer"));
try {
if (props.getProperty("categorySplitted").equals("true")) {
this.categorySplitted = true;
} else {
this.categorySplitted = false;
}
} catch (Exception e) {
this.categorySplitted = false;
}
inputStream.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public void initXML()
{
this.printername = "Drucker auswählen";
this.offsetHeader = 1;
this.offsetFooter = 2;
this.linebreak = 28;
this.categorySplitted = false;
this.header = "XYZ GmbH";
this.footer = "Vielen Dank für den Einkauf";
}
public String getDatabaseName()
{
return databaseName;
}
public void setDatabaseName(String databaseName)
{
this.databaseName = databaseName;
}
public String getPrintername()
{
return printername;
}
public void setPrintername(String printername)
{
this.printername = printername;
}
public int getLinebreak()
{
return linebreak;
}
public void setLinebreak(int linebreak)
{
this.linebreak = linebreak;
}
public int getOffsetHeader()
{
return offsetHeader;
}
public void setOffsetHeader(int offsetHeader)
{
this.offsetHeader = offsetHeader;
}
public int getOffsetFooter()
{
return offsetFooter;
}
public void setOffsetFooter(int offsetFooter)
{
this.offsetFooter = offsetFooter;
}
public String getHeader()
{
return header;
}
public void setHeader(String header)
{
this.header = header;
}
public String getFooter()
{
return footer;
}
public void setFooter(String footer)
{
this.footer = footer;
}
public boolean getCategorySplitted()
{
return categorySplitted;
}
public void setCategorySplitted(boolean categorySplitted)
{
this.categorySplitted = categorySplitted;
}
}

View File

@ -0,0 +1,32 @@
package com.jFxKasse.datatypes;
public class Category
{
private String categoryName;
private String positionsString = "\n";
public Category(String categoryName)
{
this.categoryName = categoryName;
}
public String getCategoryName()
{
return categoryName;
}
public void addPosition(int quantity, String name, String value,
PrintData pd)
{
for (int i = 0; i < quantity; i++) {
positionsString = positionsString
+ pd.setRight(pd.breakLines(name), value + "") + "\n";
}
}
public String getPositionsString()
{
return positionsString;
}
}

View File

@ -1,10 +1,9 @@
package application;
package com.jFxKasse.datatypes;
import java.util.ArrayList;
public class Job
{
private int jobnumber;
private float jobvalue;
@ -19,18 +18,19 @@ public class Job
private ArrayList<String> positionenCat;
public Job(int pJobnumber, String pTime)
public Job(int pJobnumber)
{
this.jobnumber = pJobnumber;
this.jobtime = pTime;
positionenQuantity = new ArrayList<Integer>();
positionenName = new ArrayList<String>();
positionenValue = new ArrayList<Float>();
positionenCat = new ArrayList<String>();
// System.out.println("Größe: " + positionenName.size());
}
public void setJobtime(String jobtime)
{
this.jobtime = jobtime;
}
public int getJobnumber()
@ -54,13 +54,10 @@ public class Job
public void addPosition(String pPositionenName, float pPositionenValue,
String pPositionenCat)
{
// System.out.println("addName");
for (int i = 0; i < positionenName.size(); i++) {
if (positionenName.get(i).equals(pPositionenName)) {
// Item is already in list, increase quantity
positionenQuantity.set(i, positionenQuantity.get(i) + 1);
// System.out.println("Item exists, increasing quantity");
return;
}
}
@ -75,24 +72,15 @@ public class Job
public void printJobOnConsole()
{
System.out.println("---------------------------------------------");
System.out.println("JobNummer: " + jobnumber);
System.out.println("---------------------------------------------");
// System.out.println("Größe: " + positionenName.size());
for (int i = 0; i < positionenName.size(); i++) {
System.out.println(
positionenQuantity.get(i) + " " + positionenName.get(i) + " "
+ positionenValue.get(i) + " " + positionenCat.get(i));
/*
* System.out.println("i is: " + i);
* System.out.println(positionenName.get(i));
* System.out.println(positionenQuantity.get(i));
*/
}
System.out.println("---------------------------------------------");
@ -101,33 +89,26 @@ public class Job
public ArrayList<tableDataCurrentOrder> getCurrentJobPositionen()
{
ArrayList<tableDataCurrentOrder> jobitems = new ArrayList<tableDataCurrentOrder>();
for (int i = 0; i < positionenName.size(); i++) {
tableDataCurrentOrder tmp = new tableDataCurrentOrder(
positionenName.get(i), positionenQuantity.get(i));
jobitems.add(tmp);
}
return jobitems;
}
private void calcJobValue()
{
jobvalue = 0;
for (int i = 0; i < positionenValue.size(); i++) {
jobvalue = jobvalue
+ (positionenQuantity.get(i) * positionenValue.get(i));
}
}
public String createPosQuantityDBString()

View File

@ -0,0 +1,180 @@
package com.jFxKasse.datatypes;
public abstract class PrintData
{
protected int headerSpace;
protected int footerSpace;
protected int lineBreak;
protected String header;
protected String footer;
protected String positionsQuantity;
protected String positionsName;
protected String positionsValue;
protected String positionsCategory;
protected String jobID;
protected String timeAndDateOrder;
protected String timeAndDatePrint;
protected String jobValue;
/**
* Constructor with all data that is not in the DB
* @param lineBreak
* @param headerSpace
* @param footerSpace
* @param timeAndDatePrint
* @param header
* @param footer
*/
public PrintData(int lineBreak, int headerSpace, int footerSpace,
String timeAndDatePrint, String header, String footer)
{
this.lineBreak = lineBreak;
this.headerSpace = headerSpace;
this.footerSpace = footerSpace;
this.timeAndDatePrint = timeAndDatePrint;
this.header = header;
this.footer = footer;
}
/**
* set all Data that is in the DB
* @param jobID
* @param timeAndDateOrder
* @param positionenQuantity
* @param positionenName
* @param positionenValue
* @param positionenCategory
* @param jobValue
*/
public void setData(String jobID, String timeAndDateOrder,
String positionsQuantity, String positionsName,
String positionsValue, String positionsCategory, String jobValue)
{
this.jobID = jobID;
this.timeAndDateOrder = timeAndDateOrder;
this.positionsQuantity = positionsQuantity;
this.positionsName = positionsName;
this.positionsValue = positionsValue;
this.positionsCategory = positionsCategory;
this.jobValue = jobValue;
}
/**
*
* @param data String
* @return same String splitted with \n after the max. line lenght
*/
protected String breakLines(String data)
{
boolean next = false;
int count = lineBreak;
if (data.length() > lineBreak) {
// Needs to be splitted
next = true;
} else {
// No need to be splitted
return data;
}
// first part
String tmp = data.substring(0, lineBreak);
while (next) {
try {
tmp = tmp + "\n" + data.substring(count, lineBreak + count);
count = count + lineBreak;
} catch (Exception e) {
// data string not long enough
next = false;
}
}
// add the last part
return tmp + "\n" + data.substring(count);
}
/**
* prints a line of '--------'
* @return
*/
protected String getSeparator()
{
String tmp = "-";
for (int i = 1; i < lineBreak; i++) {
tmp = tmp + "-";
}
return tmp;
}
/**
* sets a String into the center
* @param data
* @return the centered String
*/
protected String setCenter(String data)
{
int dataLenght = data.length();
int prefix = ((lineBreak - dataLenght) / 2);
String tmp = " ";
for (int i = 1; i < prefix; i++) {
tmp = tmp + " ";
}
tmp = tmp + data;
return breakLines(tmp);
}
/**
* sets a String right-justified after an prefix
* @param prefix
* @param data
* @return the right-justified String
*/
protected String setRight(String prefix, String data)
{
int prefixLenght = prefix.length();
int dataLenght = data.length();
String tmp = prefix;
int fill = lineBreak - (prefixLenght + dataLenght);
if (fill < 0) {
tmp = tmp + "\n";
fill = lineBreak - dataLenght;
}
for (int i = 0; i < fill; i++) {
tmp = tmp + " ";
}
tmp = tmp + data;
return tmp;
}
/**
* How the print String or Strings are made
*/
abstract protected void generatePrintString();
}

View File

@ -0,0 +1,93 @@
package com.jFxKasse.datatypes;
public class PrintDataSimple extends PrintData
{
private String printString;
/**
* Constructor with all data that is not in the DB
* @param lineBreak
* @param headerSpace
* @param footerSpace
* @param timeAndDatePrint
* @param header
* @param footer
*/
public PrintDataSimple(int lineBreak, int headerSpace, int footerSpace,
String timeAndDatePrint, String header, String footer)
{
super(lineBreak, headerSpace, footerSpace, timeAndDatePrint, header,
footer);
}
/**
* Generates the String
* @return the final Print String
*/
public String getPrintString()
{
generatePrintString();
return this.printString;
}
@Override
protected void generatePrintString()
{
/* Header */
String header = "\n";
for (int i = 1; i < headerSpace; i++) {
header = header + "\n";
}
// This is the final header
header = header + setCenter(this.header);
/* Info */
String info = setRight("Bestellung: ", timeAndDateOrder) + "\n"
+ setRight("Druck: ", timeAndDatePrint) + "\n"
+ setRight("Bestellnummer: ", jobID);
/* Positionen */
String positionen = "\n";
int posCount = positionsQuantity.length()
- positionsQuantity.replace(";", "").length() + 1;
String[] positionQuantity = positionsQuantity.split(";");
String[] positionName = positionsName.split(";");
String[] positionValue = positionsValue.split(";");
for (int i = 0; i < posCount; i++) { // All different posNames
int quantity = Integer.parseInt(positionQuantity[i]);
for (int j = 0; j < quantity; j++) { // quantities
positionen = positionen + setRight(breakLines(positionName[i]),
positionValue[i] + "") + "\n";
}
}
/* Price */
String price = setRight("Gesamt: ", (jobValue + ""));
/* Footer */
String footer = setCenter(this.footer);
for (int i = 1; i < footerSpace; i++) {
footer = footer + "\n";
}
footer = footer + "_";
/* Build final Print String */
printString = header + "\n" + getSeparator() + "\n" + info + "\n"
+ getSeparator() + "\n" + positionen + "\n" + getSeparator() + "\n"
+ price + "\n" + getSeparator() + "\n" + footer;
}
}

View File

@ -0,0 +1,169 @@
package com.jFxKasse.datatypes;
import java.util.ArrayList;
public class PrintDataSplitted extends PrintData
{
private ArrayList<String> printString = new ArrayList<String>();
private ArrayList<Category> categories = new ArrayList<Category>();
private int categoryCount = 0;
/**
* Constructor with all data that is not in the DB
* @param lineBreak
* @param headerSpace
* @param footerSpace
* @param timeAndDatePrint
* @param header
* @param footer
*/
public PrintDataSplitted(int lineBreak, int headerSpace, int footerSpace,
String timeAndDatePrint, String header, String footer)
{
super(lineBreak, headerSpace, footerSpace, timeAndDatePrint, header,
footer);
}
/**
* Generates the String
* @return the final Array with the Print Strings
*/
public ArrayList<String> getPrintStrings()
{
generatePrintString();
return printString;
}
@Override
protected void generatePrintString()
{
String firstBill;
/* Header */
String header = "\n";
for (int i = 1; i < headerSpace; i++) {
header = header + "\n";
}
// This is the final header
header = header + setCenter(this.header);
/* Info */
String info = setRight("Bestellung: ", timeAndDateOrder) + "\n"
+ setRight("Druck: ", timeAndDatePrint) + "\n"
+ setRight("Bestellnummer: ", jobID);
/* Splitted Bills */
/* Price */
String price = setRight("Gesamt: ", (jobValue + ""));
/* Footer */
String footer = setCenter(this.footer);
for (int i = 1; i < footerSpace; i++) {
footer = footer + "\n";
}
footer = footer + "_";
/* Build first Print String */
firstBill = header + "\n" + getSeparator() + "\n" + info + "\n"
+ getSeparator() + "\n" + setCenter("Bon wurde aufgeteilt") + "\n"
+ getSeparator() + "\n" + price + "\n" + getSeparator() + "\n"
+ footer;
printString.add(firstBill);
/* first bill ends here */
/* Categories in extra bills */
String positions = null;
int posCount = positionsQuantity.length()
- positionsQuantity.replace(";", "").length() + 1;
String[] positionQuantity = positionsQuantity.split(";");
String[] positionName = positionsName.split(";");
String[] positionValue = positionsValue.split(";");
String[] positionCategory = positionsCategory.split(";");
for (int i = 0; i < posCount; i++) { // All different posNames
int quantity = Integer.parseInt(positionQuantity[i]);
insertToCategory(quantity, positionName[i], positionValue[i],
positionCategory[i]);
}
// loops through all categories
for (int i = 0; i < categories.size(); i++) {
String thisBill;
/* Header */
header = "\n";
for (int o = 1; o < headerSpace; o++) {
header = header + "\n";
}
// This is the final header
header = header + setCenter(this.header);
/* Info */
info = setRight("Bestellung: ", timeAndDateOrder) + "\n"
+ setRight("Druck: ", timeAndDatePrint) + "\n"
+ setRight("Bestellnummer: ", jobID);
/* Positions */
positions = categories.get(i).getPositionsString();
/* Footer */
footer = "\n";
for (int o = 2; o < footerSpace; o++) {
footer = footer + "\n";
}
footer = footer + "_";
thisBill = header + "\n" + getSeparator() + "\n" + info + "\n"
+ getSeparator() + "\n"
+ setCenter(categories.get(i).getCategoryName()) + "\n"
+ getSeparator() + positions + "\n" + getSeparator() + "\n"
+ footer;
printString.add(thisBill);
}
}
private void insertToCategory(int quantity, String name, String value,
String category)
{
boolean createNewCategorie = true;
for (int i = 0; i < categoryCount; i++) {
if (category.equals(categories.get(i).getCategoryName())) {
categories.get(i).addPosition(quantity, name, value, this);
createNewCategorie = false;
}
}
if (createNewCategorie) {
// position has a new category
categories.add(new Category(category));
categories.get(categoryCount).addPosition(quantity, name, value, this);
categoryCount++;
}
}
}

View File

@ -1,4 +1,4 @@
package application;
package com.jFxKasse.datatypes;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
@ -16,7 +16,6 @@ public class tableDataCurrentOrder
{
this.position.set(pPosition);
this.quantity.set(pQuantity);
}
public StringProperty positionProperty()

View File

@ -1,4 +1,4 @@
package application;
package com.jFxKasse.datatypes;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;

View File

@ -1,4 +1,4 @@
package application;
package com.jFxKasse.datatypes;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;

View File

@ -2,9 +2,11 @@
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXTextField?>
<?import com.jfoenix.controls.JFXToggleButton?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Spinner?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TitledPane?>
@ -17,7 +19,7 @@
<?import javafx.scene.shape.Line?>
<?import javafx.scene.text.Font?>
<AnchorPane fx:id="mainAnchorpane" maxHeight="732.0" maxWidth="1366.0" minHeight="732.0" minWidth="1366.0" prefHeight="732.0" prefWidth="1366.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainWindowController">
<AnchorPane fx:id="mainAnchorpane" maxHeight="732.0" maxWidth="1366.0" minHeight="732.0" minWidth="1366.0" prefHeight="732.0" prefWidth="1366.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.jFxKasse.controller.MainWindowController">
<children>
<TabPane layoutX="4.0" layoutY="5.0" nodeOrientation="RIGHT_TO_LEFT" prefHeight="924.0" prefWidth="1536.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<tabs>
@ -25,7 +27,10 @@
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Button fx:id="ueberbtn" layoutX="84.0" layoutY="79.0" mnemonicParsing="false" onAction="#ueberbtnAction" prefHeight="0.0" prefWidth="46.0" text="Über" />
<Button fx:id="ueberbtn" layoutX="273.0" layoutY="448.0" mnemonicParsing="false" onAction="#ueberbtnAction" prefHeight="35.0" prefWidth="324.0" text="Informationen über jFxKasse">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></Button>
<TitledPane alignment="CENTER" animated="false" collapsible="false" contentDisplay="CENTER" layoutX="790.0" layoutY="10.0" prefHeight="270.0" prefWidth="566.0" text="Datenbank Einstellungen">
<content>
<AnchorPane fx:id="paneDB" minHeight="0.0" minWidth="0.0" prefHeight="238.0" prefWidth="564.0">
@ -35,7 +40,10 @@
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<JFXTextField fx:id="tftNewDBName" alignment="CENTER" layoutX="25.0" layoutY="10.0" prefHeight="25.0" prefWidth="376.0" />
<JFXTextField fx:id="tftNewDBName" alignment="CENTER" layoutX="25.0" layoutY="10.0" prefHeight="25.0" prefWidth="376.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
<Label fx:id="labelDBStatus" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="1.0" layoutY="75.0" prefHeight="34.0" prefWidth="551.0" text="Keine Datenbank gefunden!">
<font>
<Font name="Cantarell Regular" size="18.0" />
@ -87,11 +95,26 @@
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<JFXTextField fx:id="tftKat01" alignment="CENTER" layoutX="50.0" layoutY="5.0" prefHeight="25.0" prefWidth="376.0" />
<JFXTextField fx:id="tftKat02" alignment="CENTER" layoutX="50.0" layoutY="45.0" prefHeight="25.0" prefWidth="376.0" />
<JFXTextField fx:id="tftKat03" alignment="CENTER" layoutX="50.0" layoutY="85.0" prefHeight="25.0" prefWidth="376.0" />
<JFXTextField fx:id="tftKat04" alignment="CENTER" layoutX="50.0" layoutY="125.0" prefHeight="25.0" prefWidth="376.0" />
<JFXTextField fx:id="tftKat05" alignment="CENTER" layoutX="50.0" layoutY="165.0" prefHeight="25.0" prefWidth="376.0" />
<JFXTextField fx:id="tftKat01" alignment="CENTER" layoutX="50.0" layoutY="5.0" prefHeight="25.0" prefWidth="376.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
<JFXTextField fx:id="tftKat02" alignment="CENTER" layoutX="50.0" layoutY="45.0" prefHeight="25.0" prefWidth="376.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
<JFXTextField fx:id="tftKat03" alignment="CENTER" layoutX="50.0" layoutY="85.0" prefHeight="25.0" prefWidth="376.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
<JFXTextField fx:id="tftKat04" alignment="CENTER" layoutX="50.0" layoutY="125.0" prefHeight="25.0" prefWidth="376.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
<JFXTextField fx:id="tftKat05" alignment="CENTER" layoutX="50.0" layoutY="165.0" prefHeight="25.0" prefWidth="376.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
<Button fx:id="btnSaveCat" layoutX="200.0" layoutY="204.0" mnemonicParsing="false" onAction="#btnSaveCatAction" text="Kategorien speichern">
<font>
<Font name="Cantarell Regular" size="13.0" />
@ -104,6 +127,69 @@
<Font name="Cantarell Regular" size="13.0" />
</font>
</TitledPane>
<TitledPane fx:id="titlePanePrint" alignment="CENTER" animated="false" collapsible="false" contentDisplay="CENTER" layoutX="790.0" layoutY="330.0" prefHeight="270.0" prefWidth="566.0" text="Drucker Einstellungen">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="327.0" prefWidth="564.0">
<children>
<ChoiceBox fx:id="printerChoise" layoutX="270.0" layoutY="10.0" prefHeight="25.0" prefWidth="178.0" />
<Spinner fx:id="linesSpinner" layoutX="35.0" layoutY="10.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="25.0" prefWidth="92.0" />
<JFXTextField fx:id="tftheader" alignment="CENTER" layoutX="65.0" layoutY="90.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="25.0" prefWidth="377.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
<JFXToggleButton fx:id="switchSeparate" layoutX="270.0" layoutY="170.0" text="Kategorien separat drucken">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</JFXToggleButton>
<Label alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="450.0" layoutY="10.0" prefHeight="34.0" prefWidth="107.0" text="Drucker:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Label alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="140.0" layoutY="10.0" prefHeight="34.0" prefWidth="107.0" text="Zeilenlänge:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Label alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="365.0" layoutY="50.0" prefHeight="34.0" prefWidth="193.0" text="Versatz oben:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Label alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="70.0" layoutY="50.0" prefHeight="34.0" prefWidth="193.0" text="Versatz unten:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Label alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="365.0" layoutY="90.0" prefHeight="34.0" prefWidth="193.0" text="Kopfzeile:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Label alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="365.0" layoutY="130.0" prefHeight="34.0" prefWidth="193.0" text="Fußzeile:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<Button fx:id="btnSavePrinter" layoutX="27.0" layoutY="198.0" mnemonicParsing="false" onAction="#btnSavePrinterAction" text="Einstellungen speichern">
<font>
<Font name="Cantarell Regular" size="13.0" />
</font>
</Button>
<Spinner fx:id="offsetHeaderSpinner" layoutX="324.0" layoutY="48.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="25.0" prefWidth="92.0" />
<Spinner fx:id="offsetFooterSpinner" layoutX="35.0" layoutY="48.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="25.0" prefWidth="92.0" />
<JFXTextField fx:id="tftfooter" alignment="CENTER" layoutX="65.0" layoutY="130.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="25.0" prefWidth="377.0">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font></JFXTextField>
</children>
</AnchorPane>
</content>
<font>
<Font name="Cantarell Regular" size="13.0" />
</font>
</TitledPane>
</children>
</AnchorPane>
</content>
@ -112,67 +198,67 @@
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<TreeTableView fx:id="entryTreeTable" layoutX="11.0" layoutY="10.0" prefHeight="502.0" prefWidth="1346.0">
<placeholder>
<TreeTableView fx:id="entryTreeTable" layoutX="11.0" layoutY="10.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="502.0" prefWidth="1346.0">
<placeholder>
<Label text="" />
</placeholder>
<columns>
<TreeTableColumn fx:id="columnColor" editable="false" maxWidth="428.0" minWidth="119.333251953125" prefWidth="119.333251953125" resizable="false" sortable="false" text="Farbe" />
<TreeTableColumn fx:id="columnCat" editable="false" maxWidth="800.0" minWidth="94.0" prefWidth="300.0" resizable="false" sortable="false" text="Kategorie" />
<TreeTableColumn fx:id="columnPrize" editable="false" maxWidth="693.3333129882812" minWidth="44.33331298828125" prefWidth="140.33331298828125" resizable="false" sortable="false" text="Preis" />
<TreeTableColumn fx:id="columnPosnumber" editable="false" maxWidth="1218.0" minWidth="59.0" prefWidth="165.0" resizable="false" sortable="false" text="Nummer" />
<TreeTableColumn fx:id="columnPositionsEdit" editable="false" maxWidth="1581.6666870117188" minWidth="38.0" prefWidth="596.333251953125" resizable="false" sortable="false" text="Positionen" />
<TreeTableColumn fx:id="columnPosnumber" editable="false" maxWidth="1218.0" minWidth="59.0" prefWidth="181.6666259765625" resizable="false" sortable="false" text="Nummer" />
<TreeTableColumn fx:id="columnPrize" editable="false" maxWidth="693.3333129882812" minWidth="44.33331298828125" prefWidth="140.33331298828125" resizable="false" sortable="false" text="Preis" />
<TreeTableColumn fx:id="columnCat" editable="false" maxWidth="800.0" minWidth="94.0" prefWidth="300.0" resizable="false" sortable="false" text="Kategorie" />
<TreeTableColumn fx:id="columnColor" editable="false" maxWidth="428.0" minWidth="119.333251953125" prefWidth="119.333251953125" resizable="false" sortable="false" text="Farbe" />
</columns>
<columnResizePolicy>
<TreeTableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TreeTableView>
<Button fx:id="btnSaveEntry" layoutX="494.0" layoutY="631.0" mnemonicParsing="false" onAction="#btnSaveEntryAction" text="Ausgewählten Eintrag speichern">
<Button fx:id="btnClearEntry" layoutX="232.0" layoutY="590.0" mnemonicParsing="false" onAction="#btnClearEntryAction" text="Ausgewählten Eintrag zurücksetzten">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
<Button fx:id="btnClearEntry" layoutX="462.0" layoutY="525.0" mnemonicParsing="false" onAction="#btnClearEntryAction" text="Ausgewählten Eintrag zurücksetzten">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
<TitledPane fx:id="titledPaneEntry" alignment="CENTER" animated="false" collapsible="false" contentDisplay="CENTER" layoutX="792.0" layoutY="525.0" prefHeight="163.0" prefWidth="565.0" text="Eintrag editieren">
<TitledPane fx:id="titledPaneEntry" alignment="CENTER" animated="false" collapsible="false" contentDisplay="CENTER" layoutX="724.0" layoutY="525.0" prefHeight="163.0" prefWidth="633.0" text="Eintrag editieren">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="135.0" prefWidth="640.0">
<children>
<Label fx:id="labelNewPosition" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="455.0" layoutY="10.0" prefHeight="34.0" prefWidth="105.0" text="Position:">
<Label fx:id="labelNewPosition" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="516.0" layoutY="10.0" prefHeight="34.0" prefWidth="105.0" text="Position:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<JFXTextField fx:id="tftNewPosition" alignment="CENTER" layoutX="160.0" layoutY="10.0" prefHeight="25.0" prefWidth="279.0">
<JFXTextField fx:id="tftNewPosition" alignment="CENTER" layoutX="307.0" layoutY="8.0" prefHeight="27.0" prefWidth="203.0">
<font>
<Font name="Cantarell Regular" size="13.0" />
</font>
</JFXTextField>
<Label fx:id="labelNewValue" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="442.0" layoutY="50.0" prefHeight="34.0" prefWidth="118.0" text="Preis in Euro:">
<Label fx:id="labelNewValue" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="504.0" layoutY="50.0" prefHeight="34.0" prefWidth="118.0" text="Preis in Euro:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<JFXTextField fx:id="tftNewValue" alignment="CENTER" labelFloat="true" layoutX="380.0" layoutY="50.0" prefHeight="25.0" prefWidth="58.0">
<JFXTextField fx:id="tftNewValue" alignment="CENTER" labelFloat="true" layoutX="442.0" layoutY="42.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="27.0" prefWidth="66.0">
<font>
<Font name="Cantarell Regular" size="13.0" />
<Font name="Cantarell Regular" size="18.0" />
</font>
</JFXTextField>
<Label fx:id="labelNewColor" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="455.0" layoutY="90.0" prefHeight="34.0" prefWidth="105.0" text="Farbe:">
<Label fx:id="labelNewColor" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="517.0" layoutY="90.0" prefHeight="34.0" prefWidth="105.0" text="Farbe:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<ChoiceBox fx:id="colorChoise" layoutX="346.0" layoutY="90.0" prefHeight="25.0" prefWidth="96.0" />
<Label fx:id="labelSelectCat" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="204.0" layoutY="90.0" prefHeight="34.0" prefWidth="105.0" text="Kategorie:">
<ChoiceBox fx:id="colorChoise" layoutX="340.0" layoutY="90.0" prefHeight="25.0" prefWidth="169.0" />
<Label fx:id="labelSelectCat" alignment="TOP_RIGHT" contentDisplay="RIGHT" layoutX="185.0" layoutY="10.0" prefHeight="34.0" prefWidth="105.0" text="Kategorie:">
<font>
<Font name="Cantarell Regular" size="18.0" />
</font>
</Label>
<ChoiceBox fx:id="catChoise" layoutX="25.0" layoutY="90.0" prefHeight="25.0" prefWidth="180.0" />
<ChoiceBox fx:id="catChoise" layoutX="16.0" layoutY="10.0" prefHeight="25.0" prefWidth="180.0" />
<Button fx:id="btnSaveEntry" layoutX="23.0" layoutY="86.0" mnemonicParsing="false" onAction="#btnSaveEntryAction" text="Ausgewählten Eintrag speichern">
<font>
<Font name="Cantarell Regular" size="17.0" />
</font>
</Button>
</children>
</AnchorPane>
</content>
@ -188,16 +274,16 @@
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="850.0" prefWidth="1536.0">
<children>
<TreeTableView fx:id="jobsTreeTable" layoutX="11.0" layoutY="10.0" prefHeight="541.0" prefWidth="1346.0">
<placeholder>
<TreeTableView fx:id="jobsTreeTable" layoutX="11.0" layoutY="10.0" nodeOrientation="LEFT_TO_RIGHT" prefHeight="541.0" prefWidth="1346.0">
<placeholder>
<Label text="" />
</placeholder>
<columns>
<TreeTableColumn fx:id="columnJobValue" editable="false" prefWidth="111.0" resizable="false" text="Betrag" />
<TreeTableColumn fx:id="columnState" editable="false" prefWidth="101.0" resizable="false" text="Zustand" />
<TreeTableColumn fx:id="columnPositions" editable="false" prefWidth="861.0" resizable="false" sortable="false" text="Positionen" />
<TreeTableColumn fx:id="columnTime" editable="false" prefWidth="159.0" resizable="false" text="Zeit" />
<TreeTableColumn fx:id="columnJobNumber" editable="false" maxWidth="3000.0" prefWidth="110.666748046875" resizable="false" text="Nummer" />
<TreeTableColumn fx:id="columnJobNumber" editable="false" maxWidth="3000.0" prefWidth="85.0" resizable="false" text="Nummer" />
<TreeTableColumn fx:id="columnTime" editable="false" prefWidth="160.0" resizable="false" text="Zeit" />
<TreeTableColumn fx:id="columnPositions" editable="false" prefWidth="856.0" resizable="false" sortable="false" text="Positionen" />
<TreeTableColumn fx:id="columnState" editable="false" prefWidth="116.0" resizable="false" text="Zustand" />
<TreeTableColumn fx:id="columnJobValue" editable="false" prefWidth="103.0" resizable="false" text="Betrag" />
</columns>
</TreeTableView>
<Button fx:id="btnReprintJob" layoutX="378.0" layoutY="603.0" mnemonicParsing="false" onAction="#btnReprintJobAction" text="Ausgewählter Auftrag drucken">
@ -246,7 +332,7 @@
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="850.0" prefWidth="1536.0">
<children>
<TreeTableView fx:id="tableCurrentOrder" layoutX="15.0" layoutY="85.0" prefHeight="379.0" prefWidth="382.0">
<TreeTableView fx:id="tableCurrentOrder" layoutX="15.0" layoutY="85.0" prefHeight="358.0" prefWidth="382.0">
<placeholder>
<Label text="" />
</placeholder>
@ -401,17 +487,17 @@
</JFXButton>
</children>
</GridPane>
<Button fx:id="btnPrintBill" contentDisplay="CENTER" defaultButton="true" graphicTextGap="1.0" layoutX="75.0" layoutY="599.0" maxHeight="88.0" minHeight="75.0" mnemonicParsing="false" onAction="#btnPrintBillAction" prefHeight="88.0" prefWidth="258.0" text="Drucken" textAlignment="CENTER" wrapText="true">
<Button fx:id="btnPrintBill" contentDisplay="CENTER" defaultButton="true" graphicTextGap="1.0" layoutX="75.0" layoutY="588.0" maxHeight="88.0" minHeight="75.0" mnemonicParsing="false" onAction="#btnPrintBillAction" prefHeight="88.0" prefWidth="258.0" text="Drucken" textAlignment="CENTER" wrapText="true">
<font>
<Font name="Cantarell Bold" size="48.0" />
</font>
</Button>
<Button fx:id="btnDeleteSelectedPosition" layoutX="43.0" layoutY="475.0" mnemonicParsing="false" onAction="#btnDeleteSelectedPositionAction" prefHeight="17.0" prefWidth="332.0" text="Ausgewählte Position löschen" textAlignment="CENTER">
<Button fx:id="btnDeleteSelectedPosition" layoutX="43.0" layoutY="458.0" mnemonicParsing="false" onAction="#btnDeleteSelectedPositionAction" prefHeight="17.0" prefWidth="332.0" text="Ausgewählte Position löschen" textAlignment="CENTER">
<font>
<Font name="Cantarell Regular" size="20.0" />
</font>
</Button>
<Label fx:id="labelAllPrize" alignment="CENTER" contentDisplay="CENTER" layoutX="10.0" layoutY="511.0" prefHeight="15.0" prefWidth="386.0" text="0,00 €" textAlignment="CENTER">
<Label fx:id="labelAllPrize" alignment="CENTER" contentDisplay="CENTER" layoutX="10.0" layoutY="496.0" prefHeight="15.0" prefWidth="386.0" text="0,00 €" textAlignment="CENTER">
<font>
<Font name="Cantarell Regular" size="70.0" />
</font>