1452 lines
33 KiB
Java
1452 lines
33 KiB
Java
package application;
|
|
|
|
import javafx.fxml.FXML;
|
|
import javafx.geometry.Insets;
|
|
import javafx.scene.control.Button;
|
|
import javafx.scene.control.ButtonType;
|
|
import javafx.scene.control.Dialog;
|
|
import javafx.scene.control.TreeTableColumn;
|
|
import javafx.scene.control.TreeTableView;
|
|
import javafx.scene.control.TextField;
|
|
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.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 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.Tab;
|
|
import javafx.scene.layout.AnchorPane;
|
|
import javafx.scene.layout.GridPane;
|
|
import javafx.util.Pair;
|
|
|
|
|
|
public class MainWindowController
|
|
{
|
|
|
|
Toolkit toolkit = Toolkit.getDefaultToolkit();
|
|
|
|
Clipboard clipboard = toolkit.getSystemClipboard();
|
|
|
|
@FXML
|
|
private AnchorPane mainAnchorpane;
|
|
|
|
@FXML
|
|
private AnchorPane paneDB;
|
|
|
|
@FXML
|
|
private Tab tapPosEdit;
|
|
|
|
@FXML
|
|
private TreeTableView<tableDataCurrentOrder> tableCurrentOrder;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataCurrentOrder, Integer> columnQuantity;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataCurrentOrder, String> columnPosition;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataCurrentOrder, Integer> idSpalte01 = new TreeTableColumn<>(
|
|
"tableCurrentOrder");
|
|
|
|
@FXML
|
|
private TreeTableView<tableDataJob> jobsTreeTable;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataJob, String> columnJobValue;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataJob, String> columnState;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataJob, String> columnPositions;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataJob, String> columnTime;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataJob, Integer> columnJobNumber;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataJob, Integer> idSpalte02 = new TreeTableColumn<>(
|
|
"jobsTreeTable");
|
|
|
|
@FXML
|
|
private TreeTableView<tableDataPositionen> entryTreeTable;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataPositionen, String> columnColor;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataPositionen, String> columnCat;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataPositionen, String> columnPrize;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataPositionen, String> columnPositionsEdit;
|
|
|
|
@FXML
|
|
private TreeTableColumn<tableDataPositionen, Integer> columnPosnumber;
|
|
|
|
@FXML
|
|
private ChoiceBox<String> colorChoise;
|
|
|
|
@FXML
|
|
private ChoiceBox<String> catChoise;
|
|
|
|
@FXML
|
|
private Button ueberbtn;
|
|
|
|
@FXML
|
|
private Button gridButton01;
|
|
|
|
@FXML
|
|
private Button gridButton02;
|
|
|
|
@FXML
|
|
private Button gridButton03;
|
|
|
|
@FXML
|
|
private Button gridButton04;
|
|
|
|
@FXML
|
|
private Button gridButton05;
|
|
|
|
@FXML
|
|
private Button gridButton06;
|
|
|
|
@FXML
|
|
private Button gridButton07;
|
|
|
|
@FXML
|
|
private Button gridButton08;
|
|
|
|
@FXML
|
|
private Button gridButton09;
|
|
|
|
@FXML
|
|
private Button gridButton10;
|
|
|
|
@FXML
|
|
private Button gridButton11;
|
|
|
|
@FXML
|
|
private Button gridButton12;
|
|
|
|
@FXML
|
|
private Button gridButton13;
|
|
|
|
@FXML
|
|
private Button gridButton14;
|
|
|
|
@FXML
|
|
private Button gridButton15;
|
|
|
|
@FXML
|
|
private Button gridButton16;
|
|
|
|
@FXML
|
|
private Button gridButton17;
|
|
|
|
@FXML
|
|
private Button gridButton18;
|
|
|
|
@FXML
|
|
private Button gridButton19;
|
|
|
|
@FXML
|
|
private Button gridButton20;
|
|
|
|
@FXML
|
|
private Button gridButton21;
|
|
|
|
@FXML
|
|
private Button gridButton22;
|
|
|
|
@FXML
|
|
private Button gridButton23;
|
|
|
|
@FXML
|
|
private Button gridButton24;
|
|
|
|
@FXML
|
|
private Button gridButton25;
|
|
|
|
@FXML
|
|
private Button btnDeleteSelectedPosition;
|
|
|
|
@FXML
|
|
private Button btnPrintBill;
|
|
|
|
@FXML
|
|
private Button btnLock;
|
|
|
|
@FXML
|
|
private Button btnReprintJob;
|
|
|
|
@FXML
|
|
private Button btnCancelJob;
|
|
|
|
@FXML
|
|
private Button btnCalcStats;
|
|
|
|
@FXML
|
|
private Button btnSaveEntry;
|
|
|
|
@FXML
|
|
private Button btnClearEntry;
|
|
|
|
@FXML
|
|
private Button btnCreateNewDatabase;
|
|
|
|
@FXML
|
|
private Button btnOpenFolder;
|
|
|
|
@FXML
|
|
private Label labelCat01;
|
|
|
|
@FXML
|
|
private Label labelCat02;
|
|
|
|
@FXML
|
|
private Label labelCat05;
|
|
|
|
@FXML
|
|
private Label labelCat04;
|
|
|
|
@FXML
|
|
private Label labelCat03;
|
|
|
|
@FXML
|
|
private JFXTextField tftKat01;
|
|
|
|
@FXML
|
|
private JFXTextField tftKat02;
|
|
|
|
@FXML
|
|
private JFXTextField tftKat03;
|
|
|
|
@FXML
|
|
private JFXTextField tftKat04;
|
|
|
|
@FXML
|
|
private JFXTextField tftKat05;
|
|
|
|
@FXML
|
|
private Button btnSaveCat;
|
|
|
|
@FXML
|
|
private Label labelAllPrize;
|
|
|
|
@FXML
|
|
private Label labelJobCounter;
|
|
|
|
@FXML
|
|
private Label labelTime;
|
|
|
|
@FXML
|
|
private Label labelJobCount;
|
|
|
|
@FXML
|
|
private Label labelAvgJob;
|
|
|
|
@FXML
|
|
private Label labelAllValue;
|
|
|
|
@FXML
|
|
private Label labelSelectCat;
|
|
|
|
@FXML
|
|
private Label labelNewPosition;
|
|
|
|
@FXML
|
|
private Label labelNewValue;
|
|
|
|
@FXML
|
|
private Label labelNewColor;
|
|
|
|
@FXML
|
|
private Label labelDBStatus;
|
|
|
|
@FXML
|
|
private Label labelDBName;
|
|
|
|
@FXML
|
|
private TitledPane titlePaneStats;
|
|
|
|
@FXML
|
|
private TitledPane titlePaneCat;
|
|
|
|
@FXML
|
|
private TitledPane titledPaneEntry;
|
|
|
|
@FXML
|
|
private TextField tftNewPosition;
|
|
|
|
@FXML
|
|
private TextField tftNewValue;
|
|
|
|
@FXML
|
|
private TextField tftNewDBName;
|
|
|
|
@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 int idPositionen = 0;
|
|
|
|
private String selectedColorName;
|
|
|
|
private String selectedCatName;
|
|
|
|
private String databaseName;
|
|
|
|
private boolean lockState = false;
|
|
|
|
private boolean isPrintBtnDisabled = true;
|
|
|
|
private Job currentJob = null;
|
|
|
|
private String currentOrderPosName;
|
|
|
|
private int selectedJobId;
|
|
|
|
@FXML
|
|
TreeItem<tableDataCurrentOrder> rootCurrentJob = new TreeItem<>(
|
|
new tableDataCurrentOrder("0", 0));
|
|
|
|
@FXML
|
|
TreeItem<tableDataJob> rootJobs = new TreeItem<>(
|
|
new tableDataJob(0, "0", "0", "0", "0"));
|
|
|
|
@FXML
|
|
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
|
|
|
|
// 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.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(
|
|
"Einfaches Kassensystem für kleine bis mittel große Veranstaltungen mit Bon-Drucker\n"
|
|
+ "\nUnter Lizenz GPL-3.0 abrufbar auf https://git.mosad.xyz/localhorst/jFxKasse\n"
|
|
+ "\nDatenbank: sqlite.org - Public Domain"
|
|
+ " \nUI Design01: eclipse.org/efxclipse/install.html - Eclipse Public License 1.0"
|
|
+ " \nUI Design02: http://www.jfoenix.com/ - Apache License 2.0"
|
|
+ " \nUI - Datenbank Integration: basierend auf Project-HomeFlix - github.com/Seil0/Project-HomeFlix - GPLv3 \n"
|
|
+ " \nMaintainer: hendrik.schutter@coptersicht.de"
|
|
+ " \n(c) 2018 Hendrik Schutter"),
|
|
0, 0);
|
|
|
|
dialog.getDialogPane().setContent(grid); // Setzt die GridPane auf die
|
|
dialog.setResizable(true); // DialogPane
|
|
dialog.showAndWait();
|
|
}
|
|
|
|
@FXML
|
|
public void btnOpenFolderAction(ActionEvent event) throws IOException
|
|
{
|
|
Runtime.getRuntime().exec(
|
|
"xdg-open " + System.getProperty("user.home") + "/bin/jFxKasse");
|
|
|
|
}
|
|
|
|
@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);
|
|
}
|
|
}
|
|
|
|
@FXML
|
|
public void btnSaveEntryAction(ActionEvent event)
|
|
{
|
|
dbc.setName_Positionen(idPositionen, tftNewPosition.getText());
|
|
dbc.setValue_Positionen(idPositionen, tftNewValue.getText());
|
|
dbc.setColor_Positionen(idPositionen, getColorCodes(selectedColorName));
|
|
|
|
dbc.setCat_Positionen(idPositionen, getSelectedCat());
|
|
|
|
fillTablePositionen(); // fill TreeTable 'Positionen'
|
|
loadGridButtons();
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void btnClearEntryAction(ActionEvent event)
|
|
{
|
|
// set default values
|
|
dbc.setName_Positionen(idPositionen, "Noch frei");
|
|
dbc.setValue_Positionen(idPositionen, "0.00");
|
|
dbc.setColor_Positionen(idPositionen, "#FAF0E6");
|
|
dbc.setCat_Positionen(idPositionen, 6);
|
|
|
|
fillTablePositionen(); // fill TreeTable 'Positionen'
|
|
}
|
|
|
|
@FXML
|
|
public void btnCalcStatsAction(ActionEvent event)
|
|
{
|
|
|
|
System.out.println(dbc.getAllJobValue_Job());
|
|
|
|
if(dbc.getAllJobValue_Job() != null) {
|
|
|
|
|
|
|
|
float allValue = Float.valueOf(dbc.getAllJobValue_Job());
|
|
|
|
float avgJobValue = ((float) allValue / dbc.getLatestJobNumber_Job());
|
|
|
|
setJobStatLabel(dbc.getLatestJobNumber_Job(), avgJobValue, allValue);
|
|
}else {
|
|
setJobStatLabel(dbc.getLatestJobNumber_Job(), 0, 0);
|
|
}
|
|
|
|
|
|
|
|
|
|
titlePaneStats.setVisible(true);
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void btnReprintJobAction(ActionEvent event)
|
|
{
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void btnCancelJobAction(ActionEvent event)
|
|
{
|
|
dbc.setStatus_Jobs(selectedJobId + 1, "storniert");
|
|
fillTableJobs();
|
|
}
|
|
|
|
@FXML
|
|
public void btnLockAction(ActionEvent event)
|
|
{
|
|
lockState = !lockState;
|
|
|
|
blockUI(lockState);
|
|
|
|
if (lockState) {
|
|
btnLock.setText("Kasse entsperren");
|
|
} else {
|
|
btnLock.setText("Kasse sperren");
|
|
}
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void btnSaveCatAction(ActionEvent event)
|
|
{
|
|
dbc.setName_Category(1, tftKat01.getText());
|
|
dbc.setName_Category(2, tftKat02.getText());
|
|
dbc.setName_Category(3, tftKat03.getText());
|
|
dbc.setName_Category(4, tftKat04.getText());
|
|
dbc.setName_Category(5, tftKat05.getText());
|
|
|
|
fillCategory();
|
|
fillTablePositionen();
|
|
getSelectedCat();
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void btnDeleteSelectedPositionAction(ActionEvent event)
|
|
{
|
|
currentJob.deletePosName(currentOrderPosName);
|
|
rootCurrentJob.getChildren().remove(0,
|
|
rootCurrentJob.getChildren().size());
|
|
|
|
for (int i = 0; i < currentJob.getCurrentJobPositionen().size(); i++) {
|
|
rootCurrentJob.getChildren().add(new TreeItem<tableDataCurrentOrder>(
|
|
currentJob.getCurrentJobPositionen().get(i)));
|
|
|
|
}
|
|
setJobPrizeLabel(currentJob.getJobValue());
|
|
// currentJob.printJobOnConsole();
|
|
|
|
if (rootCurrentJob.getChildren().size() == 0) {
|
|
btnPrintBill.setDisable(true);
|
|
isPrintBtnDisabled = true;
|
|
tapPosEdit.setDisable(false);
|
|
btnDeleteSelectedPosition.setDisable(true);
|
|
}
|
|
|
|
if (!currentJob.existsPosName(currentOrderPosName)) {
|
|
btnDeleteSelectedPosition.setDisable(true);
|
|
}
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void btnPrintBillAction(ActionEvent event)
|
|
{
|
|
// currentJob.printJobOnConsole();
|
|
|
|
btnPrintBill.setDisable(true);
|
|
tapPosEdit.setDisable(false);
|
|
btnDeleteSelectedPosition.setDisable(true);
|
|
isPrintBtnDisabled = true;
|
|
|
|
setJobPrizeLabel(0);
|
|
|
|
rootCurrentJob.getChildren().remove(0,
|
|
rootCurrentJob.getChildren().size());
|
|
|
|
dbc.fillJobs_Jobs(currentJob.getJobnumber(), currentJob.getJobtime(),
|
|
currentJob.createPosQuantityDBString(),
|
|
currentJob.createPosNameDBString(),
|
|
currentJob.createPosValueDBString(),
|
|
currentJob.createPosCatDBString(), "verbucht",
|
|
String.valueOf(currentJob.getJobValue()));
|
|
|
|
fillTableJobs();
|
|
|
|
currentJob = null;
|
|
|
|
createNewJob();
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton01Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(1);
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton02Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(2);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton03Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(3);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton04Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(4);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton05Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(5);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton06Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(6);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton07Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(7);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton08Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(8);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton09Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(9);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton10Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(10);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton11Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(11);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton12Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(12);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton13Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(13);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton14Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(14);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton15Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(15);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton16Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(16);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton17Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(17);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton18Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(18);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton19Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(19);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton20Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(20);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton21Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(21);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton22Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(22);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton23Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(23);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton24Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(24);
|
|
}
|
|
|
|
@FXML
|
|
public void gridButton25Action(ActionEvent event)
|
|
{
|
|
handelGridButtons(25);
|
|
}
|
|
|
|
@FXML
|
|
public void fillTablePositionen()
|
|
{ // loads the table in the TreeTableView
|
|
|
|
rootPositionen.getChildren().remove(0,
|
|
rootPositionen.getChildren().size());
|
|
|
|
for (int i = 0; i < dbc.ladeTabellePositionen().size(); i++) {
|
|
|
|
|
|
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.getCategoryNameFromPositionen(i + 1),
|
|
getColorNames(dbc.ladeTabellePositionen().get(i).getColor()));
|
|
rootPositionen.getChildren()
|
|
.add(new TreeItem<tableDataPositionen>(helpTableData));
|
|
}
|
|
}
|
|
|
|
public void initUI()
|
|
{
|
|
System.out.println("initUI");
|
|
for (int i = 0; i < 25; i++) {
|
|
getButtonByID(i).setVisible(false);
|
|
}
|
|
tftNewDBName.setText(getDatabaseName());
|
|
tftKat05.setDisable(true);
|
|
titlePaneStats.setVisible(false);
|
|
btnPrintBill.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);
|
|
catChoise.getSelectionModel().selectedIndexProperty()
|
|
.addListener(new ChangeListener<Number>() {
|
|
@Override
|
|
public void changed(ObservableValue<? extends Number> ov,
|
|
Number value, Number new_value)
|
|
{
|
|
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 fillCategory()
|
|
{
|
|
tftKat01.setText(dbc.getName_Category(1));
|
|
tftKat02.setText(dbc.getName_Category(2));
|
|
tftKat03.setText(dbc.getName_Category(3));
|
|
tftKat04.setText(dbc.getName_Category(4));
|
|
tftKat05.setText(dbc.getName_Category(5));
|
|
}
|
|
|
|
private void initPositionen()
|
|
{
|
|
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;");
|
|
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");
|
|
colorChoise.setItems(color);
|
|
colorChoise.getSelectionModel().selectedIndexProperty()
|
|
.addListener(new ChangeListener<Number>() {
|
|
@Override
|
|
public void changed(ObservableValue<? extends Number> ov,
|
|
Number value, Number new_value)
|
|
{
|
|
selectedColorName = colorChoise.getItems()
|
|
.get((int) new_value).toString();
|
|
}
|
|
});
|
|
|
|
columnPosnumber.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().idProperty().asObject());
|
|
|
|
columnPositionsEdit.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().nameProperty());
|
|
|
|
columnPrize.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().valueProperty());
|
|
|
|
columnCat.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().catProperty());
|
|
|
|
columnColor.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().colorProperty());
|
|
|
|
entryTreeTable.getSelectionModel().selectedItemProperty()
|
|
.addListener(new ChangeListener<Object>() {
|
|
@Override
|
|
public void changed(ObservableValue<?> observable, Object oldVal,
|
|
Object newVal)
|
|
{
|
|
// last = selected; //for auto-play
|
|
int selected = entryTreeTable.getSelectionModel()
|
|
.getSelectedIndex(); // get selected item
|
|
|
|
idPositionen = columnPosnumber.getCellData(selected);
|
|
try {
|
|
|
|
tftNewPosition
|
|
.setText(dbc.getName_Positionen(idPositionen));
|
|
tftNewValue.setText(dbc.getValue_Positionen(idPositionen));
|
|
colorChoise.getSelectionModel().select(
|
|
getColorID(dbc.getColor_Positionen(idPositionen)));
|
|
|
|
catChoise.getSelectionModel().select(
|
|
dbc.getCategoryNameFromPositionen(idPositionen));
|
|
|
|
} catch (Exception e) {
|
|
// TODO Auto-generated catch block
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
|
|
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})?")) {
|
|
tftNewValue.setText(oldValue);
|
|
}
|
|
}
|
|
});
|
|
|
|
final Tooltip tooltipName = new Tooltip();
|
|
tooltipName.setText("Name der neuen Position");
|
|
tooltipName.setStyle("-fx-font: normal bold 20 Cantarell; "
|
|
+ "-fx-base: #AE3522; " + "-fx-text-fill: orange;");
|
|
tftNewPosition.setTooltip(tooltipName);
|
|
|
|
final Tooltip tooltipValue = new Tooltip();
|
|
tooltipValue
|
|
.setText("Preis der neuen Position.\nPunkt als Trennzeichen!");
|
|
tooltipValue.setStyle("-fx-font: normal bold 20 Cantarell; "
|
|
+ "-fx-base: #AE3522; " + "-fx-text-fill: orange;");
|
|
tftNewValue.setTooltip(tooltipValue);
|
|
labelNewValue.setTooltip(tooltipValue);
|
|
|
|
}
|
|
|
|
public void setMain(Main main, DBController dbc)
|
|
{
|
|
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;
|
|
}
|
|
|
|
public void setDBLabel() throws Exception
|
|
{
|
|
if (loadSettings() == true) {
|
|
labelDBStatus
|
|
.setText("Geladene Datenbank: " + 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()
|
|
+ ".db gelöscht werden! Anwendung danach neustarten!"));
|
|
labelDBStatus.setTooltip(new Tooltip(
|
|
"Um eine neue Datenbank zu erzeugen muss die vorherige config.xml und "
|
|
+ getDatabaseName()
|
|
+ ".db gelöscht werden! Anwendung danach neustarten!"));
|
|
} else {
|
|
labelDBStatus.setText("Keine Datenbank gefunden!");
|
|
}
|
|
}
|
|
|
|
private String getColorCodes(String pColorName)
|
|
{
|
|
switch (pColorName) {
|
|
case "Rot":
|
|
return "#ad0000";
|
|
case "Orange":
|
|
return "#FF4500";
|
|
case "Braun":
|
|
return "#8B4513";
|
|
case "Weiß":
|
|
return "#FAF0E6";
|
|
case "Gelb":
|
|
return "#FFD700";
|
|
case "Gr\u00fcn":
|
|
return "#556B2F";
|
|
case "Blau":
|
|
return "#00BFFF";
|
|
case "Indigo":
|
|
return "#4B0082";
|
|
|
|
default:
|
|
return "#FFFFFF";
|
|
}
|
|
}
|
|
|
|
private String getColorNames(String pColorCode)
|
|
{
|
|
switch (pColorCode) {
|
|
case "#ad0000":
|
|
return "Rot";
|
|
case "#FF4500":
|
|
return "Orange";
|
|
case "#8B4513":
|
|
return "Braun";
|
|
case "#FAF0E6":
|
|
return "Weiß";
|
|
case "#FFD700":
|
|
return "Gelb";
|
|
case "#556B2F":
|
|
return "Gr\u00fcn";
|
|
case "#00BFFF":
|
|
return "Blau";
|
|
case "#4B0082":
|
|
return "Indigo";
|
|
|
|
default:
|
|
return "Farbe";
|
|
}
|
|
}
|
|
|
|
private Integer getColorID(String pColorCode)
|
|
{
|
|
switch (pColorCode) {
|
|
case "#ad0000":
|
|
return 0;
|
|
case "#FF4500":
|
|
return 1;
|
|
case "#8B4513":
|
|
return 2;
|
|
case "#FAF0E6":
|
|
return 3;
|
|
case "#FFD700":
|
|
return 4;
|
|
case "#556B2F":
|
|
return 5;
|
|
case "#00BFFF":
|
|
return 6;
|
|
case "#4B0082":
|
|
return 7;
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public void blockUI(boolean pState)
|
|
{
|
|
btnCalcStats.setDisable(pState);
|
|
btnClearEntry.setDisable(pState);
|
|
|
|
if ((!isPrintBtnDisabled) && (!pState)) {
|
|
// print was not disabled and will be enabled again
|
|
btnPrintBill.setDisable(pState);
|
|
btnDeleteSelectedPosition.setDisable(pState);
|
|
|
|
}
|
|
|
|
if (pState) {
|
|
// disable allways
|
|
btnPrintBill.setDisable(pState);
|
|
btnDeleteSelectedPosition.setDisable(pState);
|
|
}
|
|
|
|
btnReprintJob.setDisable(pState);
|
|
btnSaveEntry.setDisable(pState);
|
|
btnCancelJob.setDisable(pState);
|
|
|
|
for (int i = 0; i < 25; i++) {
|
|
getButtonByID(i).setDisable(pState);
|
|
}
|
|
|
|
tftNewPosition.setDisable(pState);
|
|
tftNewValue.setDisable(pState);
|
|
colorChoise.setDisable(pState);
|
|
catChoise.setDisable(pState);
|
|
|
|
tableCurrentOrder.setDisable(pState);
|
|
jobsTreeTable.setDisable(pState);
|
|
entryTreeTable.setDisable(pState);
|
|
|
|
labelAllPrize.setVisible(!pState);
|
|
labelJobCounter.setVisible(!pState);
|
|
|
|
if(pState) {
|
|
titlePaneStats.setVisible(!pState);
|
|
}
|
|
|
|
titledPaneEntry.setDisable(pState);
|
|
titlePaneCat.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: "
|
|
+ dbc.getColor_Positionen(i + 1) + "; -fx-text-fill: white;");
|
|
} else {
|
|
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)
|
|
{
|
|
switch (pID) {
|
|
case 0:
|
|
return gridButton01;
|
|
case 1:
|
|
return gridButton02;
|
|
case 2:
|
|
return gridButton03;
|
|
case 3:
|
|
return gridButton04;
|
|
case 4:
|
|
return gridButton05;
|
|
case 5:
|
|
return gridButton06;
|
|
case 6:
|
|
return gridButton07;
|
|
case 7:
|
|
return gridButton08;
|
|
case 8:
|
|
return gridButton09;
|
|
case 9:
|
|
return gridButton10;
|
|
case 10:
|
|
return gridButton11;
|
|
case 11:
|
|
return gridButton12;
|
|
case 12:
|
|
return gridButton13;
|
|
case 13:
|
|
return gridButton14;
|
|
case 14:
|
|
return gridButton15;
|
|
case 15:
|
|
return gridButton16;
|
|
case 16:
|
|
return gridButton17;
|
|
case 17:
|
|
return gridButton18;
|
|
case 18:
|
|
return gridButton19;
|
|
case 19:
|
|
return gridButton20;
|
|
case 20:
|
|
return gridButton21;
|
|
case 21:
|
|
return gridButton22;
|
|
case 22:
|
|
return gridButton23;
|
|
case 23:
|
|
return gridButton24;
|
|
case 24:
|
|
return gridButton25;
|
|
default:
|
|
return gridButton01;
|
|
}
|
|
}
|
|
|
|
|
|
private void handelGridButtons(int pID)
|
|
{
|
|
|
|
currentJob.addPosition(dbc.getName_Positionen(pID),
|
|
Float.parseFloat(dbc.getValue_Positionen(pID)),
|
|
dbc.getCategoryNameFromPositionen(pID));
|
|
|
|
btnPrintBill.setDisable(false);
|
|
isPrintBtnDisabled = false;
|
|
tapPosEdit.setDisable(true);
|
|
|
|
rootCurrentJob.getChildren().remove(0,
|
|
rootCurrentJob.getChildren().size());
|
|
|
|
for (int i = 0; i < currentJob.getCurrentJobPositionen().size(); i++) {
|
|
rootCurrentJob.getChildren().add(new TreeItem<tableDataCurrentOrder>(
|
|
currentJob.getCurrentJobPositionen().get(i)));
|
|
}
|
|
|
|
setJobPrizeLabel(currentJob.getJobValue());
|
|
|
|
}
|
|
|
|
|
|
private void initCurrentOrderTreeTableView()
|
|
{
|
|
|
|
columnQuantity
|
|
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
|
|
columnPosition
|
|
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
|
|
|
|
tableCurrentOrder.setRoot(rootCurrentJob);
|
|
tableCurrentOrder.setShowRoot(false);
|
|
tableCurrentOrder.setEditable(false);
|
|
|
|
columnQuantity.setCellValueFactory(cellData -> cellData.getValue()
|
|
.getValue().quantityProperty().asObject());
|
|
|
|
columnPosition.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().positionProperty());
|
|
|
|
tableCurrentOrder.getSelectionModel().selectedItemProperty()
|
|
.addListener(new ChangeListener<Object>() {
|
|
@Override
|
|
public void changed(ObservableValue<?> observable, Object oldVal,
|
|
Object newVal)
|
|
{
|
|
// last = selected; //for auto-play
|
|
int selected = tableCurrentOrder.getSelectionModel()
|
|
.getSelectedIndex(); // get selected item
|
|
|
|
if (columnPosition.getCellData(selected) != null) {
|
|
currentOrderPosName = columnPosition.getCellData(selected); // Ausgewählte
|
|
btnDeleteSelectedPosition.setDisable(false);
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
|
|
private void initJobTreeTableView()
|
|
{
|
|
|
|
columnJobNumber
|
|
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
|
|
|
|
columnTime.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
|
|
|
|
columnPositions
|
|
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
|
|
|
|
columnState.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
|
|
|
|
columnJobValue
|
|
.setStyle("-fx-alignment: CENTER; -fx-font: 17px Cantarell;");
|
|
|
|
jobsTreeTable.setRoot(rootJobs);
|
|
jobsTreeTable.setShowRoot(false);
|
|
jobsTreeTable.setEditable(false);
|
|
|
|
columnJobNumber.setCellValueFactory(cellData -> cellData.getValue()
|
|
.getValue().numberProperty().asObject());
|
|
|
|
columnTime.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().timeProperty());
|
|
|
|
columnPositions.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().positionProperty());
|
|
|
|
columnState.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().statusProperty());
|
|
|
|
columnJobValue.setCellValueFactory(
|
|
cellData -> cellData.getValue().getValue().valueProperty());
|
|
|
|
jobsTreeTable.getSelectionModel().selectedItemProperty()
|
|
.addListener(new ChangeListener<Object>() {
|
|
@Override
|
|
public void changed(ObservableValue<?> observable, Object oldVal,
|
|
Object newVal)
|
|
{
|
|
selectedJobId = jobsTreeTable.getSelectionModel()
|
|
.getSelectedIndex(); // get selected item
|
|
|
|
if(dbc.getState_Job(selectedJobId+1).equals("storniert")) {
|
|
btnCancelJob.setDisable(true);
|
|
}else {
|
|
btnCancelJob.setDisable(false);
|
|
}
|
|
|
|
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
@FXML
|
|
public void fillTableJobs()
|
|
{ // loads the table in the TreeTableView
|
|
rootJobs.getChildren().remove(0, rootJobs.getChildren().size());
|
|
|
|
for (int i = 0; i < dbc.loadTableJobs_Job().size(); i++) {
|
|
|
|
float fValue = Float
|
|
.valueOf(dbc.loadTableJobs_Job().get(i).getValue());
|
|
|
|
String strValue = String.format("%.02f", fValue);
|
|
|
|
strValue.replace('.', ',');
|
|
|
|
strValue = (strValue + "€");
|
|
|
|
String strJobDescription = createJobDescription(
|
|
dbc.loadTableJobs_Job().get(i).getPosition(),
|
|
dbc.getQuantity_Job(dbc.loadTableJobs_Job().get(i).getNumber()));
|
|
|
|
tableDataJob tmp = new tableDataJob(
|
|
dbc.loadTableJobs_Job().get(i).getNumber(),
|
|
dbc.loadTableJobs_Job().get(i).getTime(), strJobDescription,
|
|
dbc.loadTableJobs_Job().get(i).getStatus(), strValue);
|
|
|
|
rootJobs.getChildren().add(new TreeItem<tableDataJob>(tmp));
|
|
}
|
|
|
|
}
|
|
|
|
public void createNewJob()
|
|
{
|
|
currentJob = new Job(dbc.getLatestJobNumber_Job() + 1,
|
|
getSystemTime() + " " + getSystemDate());
|
|
labelJobCounter.setText("Auftragsnummer: "
|
|
+ String.valueOf(dbc.getLatestJobNumber_Job() + 1));
|
|
}
|
|
|
|
|
|
private static String createJobDescription(String pNames, String pQuantities)
|
|
{
|
|
String line = pQuantities;
|
|
int size = line.length() - line.replace(";", "").length() + 1;
|
|
|
|
String[] namesArray = new String[size];
|
|
String[] quantitiesArray = new String[size];
|
|
|
|
namesArray = pNames.split(";");
|
|
quantitiesArray = pQuantities.split(";");
|
|
|
|
String tmp = quantitiesArray[0] + "x " + namesArray[0];
|
|
|
|
for (int i = 1; i < namesArray.length; i++) {
|
|
tmp = tmp + ", " + quantitiesArray[i] + "x " + namesArray[i];
|
|
}
|
|
return tmp;
|
|
}
|
|
|
|
|
|
private void setJobPrizeLabel(float pPrize)
|
|
{
|
|
String str = String.format("%.02f", pPrize);
|
|
|
|
str.replace('.', ',');
|
|
|
|
labelAllPrize.setText(str + "€");
|
|
}
|
|
|
|
private void setJobStatLabel(int pCounter, float pAvgValue, float pAllValue)
|
|
{
|
|
labelJobCount.setText("Anzahl Aufträge: " + pCounter);
|
|
|
|
String str = String.format("%.02f", pAvgValue);
|
|
|
|
str.replace('.', ',');
|
|
|
|
labelAvgJob.setText("Durchschnittlicher Auftragswert: " + str + "€");
|
|
|
|
str = String.format("%.02f", pAllValue);
|
|
|
|
str.replace('.', ',');
|
|
|
|
labelAllValue.setText("Gesamt: " + str + "€");
|
|
|
|
titlePaneStats.setText("Statistik - " + getSystemTime() + " " + getSystemDate());
|
|
|
|
}
|
|
|
|
public void updateTimeLabel()
|
|
{
|
|
labelTime.setText("Uhrzeit: " + getSystemTime());
|
|
|
|
}
|
|
|
|
|
|
public void blockUnlock()
|
|
{
|
|
btnLock.setDisable(true);
|
|
}
|
|
|
|
}
|