/**
 * Created by urankajtazaj on 05/10/16.
 */
package sample;

import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.Task;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.control.*;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.*;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.sql.*;
import java.text.DecimalFormat;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;

public class DritarjaKryesore {

    private static final String CON_STR = "jdbc:h2:file:~/db/auto;AUTO_SERVER=TRUE";

    Label lblQmimi4 = new Label();
    Label lblQmimi3 = new Label();

    ScrollPane sp = new ScrollPane();
    HashMap<String, Double> viti = new HashMap();
    String tani, kaluar;

    Label lbl_Id = new Label();
    Label log_user = new Label();
    Label log_pw = new Label();

    Stage stage = new Stage();
    GridPane grid_fin = new GridPane();
    BorderPane root;
    TextField txtLloji = new TextField();
    TextField txtTipi = new TextField();
    TextField txtPaisja = new TextField();
    TextField txtPjesa = new TextField();
    TextField txtQmimi = new TextField();
    TextField txtSasia = new TextField();
    TextArea txtInfo = new TextArea();
    Button btnKerko = new Button("Search");
    Button btnPastro = new Button("Clean");
    //    Button btnShto = new Button("Shto");
    Button btnFshi = new Button("Delete");
    Button btnPlus = new Button("");
    Button btnMinus = new Button("");
    Button btnRregullo = new Button("Update");
    Button btnRifresko = new Button("Refresh");
    TableView table = new TableView();
    TableView<TabelaPunet> tblPunet = new TableView<>();
    ObservableList<mbushTabelen> data;
    int id = 0;
    final CategoryAxis x = new CategoryAxis();
    final NumberAxis y = new NumberAxis();

    ScrollPane sc = new ScrollPane();

    int emriKons = -1;

    //    ComboBox<String> cbLlojiTabeles = new ComboBox<>();
    TextField qCbProdhuesi = new TextField();
    ComboBox<String> qCbOp = new ComboBox<>();
    TextField qTxtPaisja = new TextField();
    TextField qTxtPjesa = new TextField();
    TextField qTxtTipi = new TextField();
    TextField qTxtQmimi = new TextField();
    Label err = new Label("");
    Label lblTeHyrat = new Label("Parts data");
    Label lblShpenzimet = new Label("Jobs");
    Label lblId = new Label();
    boolean show = true, show2 = true;
    TextField s_cbPuna = new TextField();
    DatePicker s_data = new DatePicker();
    TextField s_txtQmimi = new TextField();
    TextField s_txtSasia = new TextField();
    TextField s_txtPaisja = new TextField();
    TextField s_cbEmriKons = new TextField();
    TextArea txtPer = new TextArea();
    Button btnBlej = new Button("Save");
    Button s_btnPastro = new Button("Clean");
    TextField txtPunetori = new TextField();
    TableColumn<TabelaPunet, Float> colPagesa = new TableColumn("Wage");
    VBox left_root = new VBox();

    CheckBox punaKryer = new CheckBox("Job has finished");
    ComboBox<String> cbPaisjet = new ComboBox<>();
    ComboBox<String> cbProdhuesi = new ComboBox<>();
    TextField txtMakina = new TextField();

    String raportiSot = "/RaportiSot.jrxml";
    String raportiTotal = "/RaportiTotal.jrxml";
    String raportiFatura = "/Fatura.jrxml";
    String raportiMujor = "/RaportiMuajiAktual.jrxml";
    String strRaportiViti = "/RaportiVitiAktual.jrxml";
    String raportiPaisjet = "/RaportiPaisjet.jrxml";
    String folderi = "";

    boolean kryer = false;

    public DritarjaKryesore(int log_id_r, int log_id, String username, String password) {

        try {
            BufferedReader br = new BufferedReader(new FileReader(new File(System.getProperty("user.home") + "/db/raportet.txt")));
            String temp = br.readLine();
            raportiSot = temp + raportiSot;
            raportiFatura = temp + raportiFatura;
            raportiMujor = temp + raportiMujor;
            raportiTotal = temp + raportiTotal;
            strRaportiViti = temp + strRaportiViti;
            raportiPaisjet = temp + raportiPaisjet;
            folderi = temp;
            temp = null;
            br.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        stage.getIcons().add(new Image(getClass().getResourceAsStream("/sample/foto/icon.png")));
        lbl_Id.setText(log_id + "");
        log_user.setText(username);
        log_pw.setText(password);
        lblId.setText(log_id_r + "");
        btnFshi.getStyleClass().add("del");
        btnBlej.getStyleClass().add("add-btn");
        txtPunetori.setEditable(false);
        btnPlus.setMinWidth(30);
        btnMinus.setMinWidth(30);
        btnKerko.setMinWidth(80);
        btnFshi.setMinWidth(56);
        btnRregullo.setMinWidth(55);
        btnPastro.setMinWidth(55);
        btnMinus.setGraphic(new ImageView(new Image("/sample/foto/minus.png")));
        btnPlus.setGraphic(new ImageView(new Image("/sample/foto/add.png")));
//        btnRifresko.setGraphic(new ImageView(new Image("/sample/foto/refresh.png")));
//        btnKerko.setGraphic(new ImageView(new Image("/sample/foto/search.png")));
        btnKerko.getStyleClass().add("btnV");
        btnRifresko.getStyleClass().add("btnV");

        HBox rectLay = new HBox(10);
        rectLay.setPadding(new Insets(15, 0, 15, 0));
        rectLay.setAlignment(Pos.CENTER);

        StackPane stack1 = new StackPane();
        StackPane stack2 = new StackPane();
        StackPane stack3 = new StackPane();
        StackPane stack4 = new StackPane();

        VBox rect1_v = new VBox(5);
        HBox btn_rect1 = new HBox();
        VBox rect2_v = new VBox(5);
        HBox btn_rect2 = new HBox();
        VBox rect3_v = new VBox(5);
        HBox btn_rect3 = new HBox();
        VBox rect4_v = new VBox(5);
        HBox btn_rect4 = new HBox();

        Button btnA1 = new Button();
        Button btnA2 = new Button();
        Button btnA3 = new Button();
        Button btnV1 = new Button();
        Button btnV2 = new Button();
        Button btnV3 = new Button();
        btnA1.getStyleClass().add("trans");
        btnA2.getStyleClass().add("trans");
        btnV1.getStyleClass().add("trans");
        btnV3.getStyleClass().add("trans");
        btnV2.getStyleClass().add("trans");
        btnA3.getStyleClass().add("trans");

        btnA1.setCursor(Cursor.HAND);
        btnA2.setCursor(Cursor.HAND);
        btnA3.setCursor(Cursor.HAND);
        btnV1.setCursor(Cursor.HAND);
        btnV2.setCursor(Cursor.HAND);
        btnV3.setCursor(Cursor.HAND);

        btnA1.setGraphic(new ImageView(new Image("/sample/foto/add_24.png")));
        btnA2.setGraphic(new ImageView(new Image("/sample/foto/add_24.png")));
        btnA3.setGraphic(new ImageView(new Image("/sample/foto/add_24.png")));
        btnV1.setGraphic(new ImageView(new Image("/sample/foto/view.png")));
        btnV2.setGraphic(new ImageView(new Image("/sample/foto/view.png")));
        btnV3.setGraphic(new ImageView(new Image("/sample/foto/view.png")));

        btnA1.setTooltip(new Tooltip("Add consumer"));
        btnV1.setTooltip(new Tooltip("View consumers"));
        btnA2.setTooltip(new Tooltip("Add part"));
        btnV2.setTooltip(new Tooltip("View finances"));
        btnA3.setTooltip(new Tooltip("Add employee"));
        btnV3.setTooltip(new Tooltip("View employees"));

        Text lblCons = new Text("Costumer");
        Text lblFin = new Text("Finance");
        Text lblPaisjet = new Text("Parts");
        Text lblPun = new Text("Employees");
        lblCons.setTextAlignment(TextAlignment.LEFT);

        btn_rect1.getChildren().addAll(btnA1, btnV1);
        btn_rect3.getChildren().add(btnA2);
        btn_rect2.getChildren().add(btnV2);
        if (lbl_Id.getText().equals("1"))
            btn_rect4.getChildren().addAll(btnA3, btnV3);
        else btn_rect4.getChildren().add(btnV3);
        btn_rect1.setPadding(new Insets(10, 0, 0, 0));
        btn_rect2.setPadding(new Insets(10, 0, 0, 0));
        btn_rect3.setPadding(new Insets(10, 0, 0, 0));
        btn_rect4.setPadding(new Insets(10, 0, 0, 0));

        btnA2.setOnAction(e -> new ShtoPjeset(this));

        rect1_v.getChildren().addAll(lblCons, new ImageView(new Image("/sample/foto/user.png")), btn_rect1);
        rect1_v.setAlignment(Pos.CENTER);
        btn_rect1.setAlignment(Pos.CENTER);
        rect1_v.setPadding(new Insets(5, 0, 0, 0));
        rect2_v.setPadding(new Insets(5, 0, 0, 0));

        rect3_v.getChildren().addAll(lblPaisjet, new ImageView(new Image("/sample/foto/car.png")), btn_rect3);
        rect3_v.setAlignment(Pos.CENTER);
        btn_rect3.setAlignment(Pos.CENTER);
        rect2_v.setPadding(new Insets(5, 0, 0, 0));

        rect2_v.getChildren().addAll(lblFin, new ImageView(new Image("/sample/foto/line.png")), btn_rect2);
        btn_rect2.setAlignment(Pos.CENTER);
        rect2_v.setAlignment(Pos.CENTER);

        rect4_v.getChildren().addAll(lblPun, new ImageView(new Image("/sample/foto/wrench.png")), btn_rect4);
        rect4_v.setAlignment(Pos.CENTER);
        btn_rect4.setAlignment(Pos.CENTER);
        rect4_v.setPadding(new Insets(5, 0, 0, 0));

        Rectangle rectKons = new Rectangle();
        Rectangle rectCal = new Rectangle();
        Rectangle rectFin = new Rectangle();
        Rectangle rectPun = new Rectangle();

        rectKons.setWidth(220);
        rectKons.setHeight(220);
        rectPun.setWidth(220);
        rectPun.setHeight(220);
        rectFin.setWidth(220);
        rectFin.setHeight(220);
        rectCal.setWidth(220);
        rectCal.setHeight(220);
        btnA1.setMinWidth(rectKons.getWidth() / 2);
        btnV1.setMinWidth(rectKons.getWidth() / 2);
        btnA2.setMinWidth(rectCal.getWidth());
        if (lbl_Id.getText().equals("1")) {
            btnV3.setMinWidth(rectCal.getWidth() / 2);
            btnA3.setMinWidth(rectPun.getWidth() / 2);
        } else btnV3.setMinWidth(rectCal.getWidth());
        btnV2.setMinWidth(rectCal.getWidth());

        stack1.getChildren().addAll(rectKons, rect1_v);
        stack2.getChildren().addAll(rectFin, rect2_v);
        stack3.getChildren().addAll(rectCal, rect3_v);
        stack4.getChildren().addAll(rectPun, rect4_v);

        Task financatTask = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        financat();
                    }
                });
                return null;
            }
        };

        Thread finT = new Thread(financatTask);
        finT.setDaemon(true);
        finT.start();

        btnA1.setOnAction(e -> new ShtoKonsumator());
        btnV1.setOnAction(e -> new ShikoKonsumatoret());
        btnA3.setOnAction(e -> new ShtoPunetor());
        btnV3.setOnAction(e -> new ShikoPunetoret(this));
        btnV2.setOnAction(e -> root.setCenter(sp));

        rectCal.getStyleClass().add("rect");
        rectFin.getStyleClass().add("rect");
        rectKons.getStyleClass().add("rect");
        rectPun.getStyleClass().add("rect");

        rectLay.getChildren().addAll(stack1, stack4, stack2, stack3);

        btnPastro.setOnAction(e -> {
            pastro();
        });

        btnRifresko.setMinWidth(85);
        qCbProdhuesi.setPromptText("Maker");
        txtLloji.setMaxWidth(210);
        txtSasia.setMaxWidth(120);
        txtSasia.setMinWidth(120);
        txtQmimi.setMaxWidth(210);
        txtPaisja.setMaxWidth(210);
        txtPjesa.setMaxWidth(210);
        txtTipi.setMaxWidth(210);
        cbPaisjet.setMinWidth(95);
        cbPaisjet.setMaxWidth(95);
        cbProdhuesi.setMinWidth(95);
        cbProdhuesi.setMaxWidth(95);
        root = new BorderPane();
        Scene scene = new Scene(root, 942, 600);
        HBox pyet = new HBox(10);
        VBox center = new VBox();
//        root.setPadding(new Insets(10));
        stage.setTitle("Main Window");
//        connectionToDB();
        leftSide(this);
        HBox ns = new HBox(5);
        Label qm = new Label("Price");
        qm.setMinWidth(45);
        qm.setAlignment(Pos.CENTER_RIGHT);
        qm.setPadding(new Insets(7, 0, 0, 0));
        ns.getChildren().addAll(qm, qCbOp, qTxtQmimi);

        qTxtPjesa.setPrefWidth(120);
        qTxtPaisja.setPrefWidth(120);
        qTxtQmimi.setPrefWidth(90);
        qTxtTipi.setPrefWidth(120);
        qCbProdhuesi.setPrefWidth(120);
        qTxtPaisja.setPromptText("Category");
        qTxtTipi.setPromptText("Car model");
        qTxtPjesa.setPromptText("Part");
        qCbProdhuesi.setPromptText("Maker");
        qTxtQmimi.setPromptText("Price");

        qCbOp.getItems().addAll("=", ">", "<");
        qCbOp.getSelectionModel().select(0);

        pyet.getChildren().addAll(qTxtPjesa, qTxtPaisja, qCbProdhuesi, qTxtTipi, ns, btnKerko, btnRifresko);

        pyet.setPadding(new Insets(5, 0, 5, 0));

        //Krijimi i kolonave per tabel - Select
        TableColumn colId = new TableColumn("Id");
        TableColumn colPjesa = new TableColumn("Part");
        TableColumn colPaisja = new TableColumn("Category");
        TableColumn colProdhuesi = new TableColumn("Model");
        TableColumn colTipi = new TableColumn("Maker");
        TableColumn colQmimi = new TableColumn("Price");
        TableColumn colSasia = new TableColumn("Quantity");
        TableColumn colShtese = new TableColumn("Info");

        //Gjeresia e kolonave
        colId.setMaxWidth(40);
        colId.setMinWidth(40);
        colPjesa.setMinWidth(150);
//        colPjesa.setMaxWidth(180);
        colSasia.setMaxWidth(50);
        colSasia.setMinWidth(50);
        colQmimi.setMaxWidth(60);
        colQmimi.setMinWidth(60);
        colProdhuesi.setMaxWidth(110);
        colProdhuesi.setMinWidth(100);
        colTipi.setMaxWidth(100);
        colTipi.setMinWidth(100);

        //Cilat te dhena me i fut ne secilen fush
        colId.setCellValueFactory(new PropertyValueFactory("id"));
        colPaisja.setCellValueFactory(new PropertyValueFactory("paisja"));
        colPjesa.setCellValueFactory(new PropertyValueFactory("pjesa"));
        colProdhuesi.setCellValueFactory(new PropertyValueFactory("lloji"));
        colQmimi.setCellValueFactory(new PropertyValueFactory("qmimi"));
        colSasia.setCellValueFactory(new PropertyValueFactory("sasia"));
        colTipi.setCellValueFactory(new PropertyValueFactory("tipi"));
        colShtese.setCellValueFactory(new PropertyValueFactory("info"));

        //***********************************

        TableColumn colStat_p = new TableColumn("");
        TableColumn colPunaKryer = new TableColumn("Job");
        TableColumn colData_p = new TableColumn("Date");
        TableColumn colPershkrimi = new TableColumn("Description");
        TableColumn colKonsumatori = new TableColumn("Costumer");
        TableColumn colMakina = new TableColumn("Car");

        colStat_p.setMinWidth(50);
        colStat_p.setMaxWidth(50);
        colPagesa.setMaxWidth(70);
        colPagesa.setMinWidth(70);
        colData_p.setMaxWidth(100);
        colData_p.setMinWidth(100);
        colKonsumatori.setMaxWidth(170);
        colKonsumatori.setMinWidth(150);
        colPunaKryer.setMinWidth(175);

        colStat_p.setCellValueFactory(new PropertyValueFactory("kryer"));
        colKonsumatori.setCellValueFactory(new PropertyValueFactory("konsumatori"));
        colPagesa.setCellValueFactory(new PropertyValueFactory("puna"));
        colPershkrimi.setCellValueFactory(new PropertyValueFactory("pershkrimi"));
        colPagesa.setCellValueFactory(new PropertyValueFactory("qmimi"));
        colPunaKryer.setCellValueFactory(new PropertyValueFactory("puna"));
        colData_p.setCellValueFactory(new PropertyValueFactory("data"));
        colMakina.setCellValueFactory(new PropertyValueFactory("makina"));

        colStat_p.setStyle("-fx-alignment: center center;");
        colStat_p.setCellFactory(e -> {
            return new TableCell<TabelaPunet, String>() {
                @Override
                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
                    if (item != null || !empty) {
                        if (item.equals("po")) {
                            setGraphic(new ImageView(new Image("/sample/foto/green.png")));
                        } else if (item.equals("jo")) {
                            setGraphic(new ImageView(new Image("/sample/foto/red.png")));
                        }
                    } else setGraphic(null);
                }
            };
        });

        tblPunet.getColumns().addAll(colStat_p, colPunaKryer, colData_p, colKonsumatori, colMakina, colPagesa, colPershkrimi);

        table.getColumns().addAll(colId, colPjesa, colPaisja, colTipi, colProdhuesi, colQmimi, colSasia, colShtese);
        nxerrTeDhenat();

        table.setMaxHeight(Double.MAX_VALUE);
        center.setVgrow(table, Priority.ALWAYS);
        selektimi();

        ContextMenu cm = new ContextMenu();
        MenuItem miRaportiPaisjet = new MenuItem("Create report for parts");
        cm.getItems().add(miRaportiPaisjet);

        table.setOnMouseClicked(e -> {
            if (e.getButton() == MouseButton.SECONDARY) {
                cm.show(stage, MouseInfo.getPointerInfo().getLocation().x, MouseInfo.getPointerInfo().getLocation().y);
            }
        });

        miRaportiPaisjet.setOnAction(e -> {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                        JasperReport jreport = JasperCompileManager.compileReport(raportiPaisjet);
                        JasperPrint jprint = JasperFillManager.fillReport(jreport, new HashMap(), conn);
                        JasperViewer.viewReport(jprint, false);
                        conn.close();
                    } catch (Exception ex) {
                        new Mesazhi("", "", ex.getMessage());
                    }
                }
            }).start();
        });

        btnKerko.setOnAction(e -> {
//            table.getSelectionModel().clearSelection();
            filtroTabelen();
        });
        btnRifresko.setOnAction(e -> {
            try {
                nxerrTeDhenat();
                qTxtQmimi.clear();
                qTxtTipi.clear();
                qTxtPaisja.clear();
                qTxtPjesa.clear();
            } catch (NullPointerException n) {
            }
        });
        btnPlus.setOnAction(e -> {
            if (txtSasia.getText().isEmpty())
                txtSasia.setText("1");
            else
                txtSasia.setText((Integer.parseInt(txtSasia.getText()) + 1) + "");
        });
        btnMinus.setOnAction(e -> {
            if (txtSasia.getText().isEmpty())
                txtSasia.setText("0");
            else {
                if (!txtSasia.getText().equals("0"))
                    if (Integer.parseInt(txtSasia.getText()) > 0)
                        txtSasia.setText((Integer.parseInt(txtSasia.getText()) - 1) + "");
                    else
                        txtSasia.setText("0");
            }
        });

        s_btnPastro.setOnAction(e -> {
            s_cbEmriKons.clear();
            s_txtQmimi.clear();
            s_cbPuna.clear();
            s_txtPaisja.clear();
            txtPer.clear();
            s_data.getEditor().clear();
            s_data.setValue(null);
            cbProdhuesi.getSelectionModel().select("Asnje");
            cbPaisjet.getSelectionModel().select("Asnje");
            punaKryer.setSelected(false);
        });

        qTxtPjesa.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER))
                filtroTabelen();
        });
        qCbProdhuesi.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER))
                filtroTabelen();
        });
        qTxtPaisja.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER))
                filtroTabelen();
        });
        qTxtQmimi.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER))
                filtroTabelen();
        });
        qTxtTipi.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER))
                filtroTabelen();
        });

        if (lbl_Id.getText().equals("0")) btnA3.setDisable(true);
        txtPunetori.setText(log_user.getText());

        MenuBar menu = new MenuBar();
        Menu mHelp = new Menu("Help");
        Menu mProgrami = new Menu("File");
        MenuItem miMbyll = new MenuItem("Close");
        MenuItem miDil = new MenuItem("Log out");
        MenuItem miAbout = new MenuItem("About");
        mHelp.getItems().addAll(miAbout);
        mProgrami.getItems().addAll(miDil, new SeparatorMenuItem(), miMbyll);
        menu.getMenus().addAll(mProgrami, mHelp);

        miMbyll.setOnAction(e -> stage.close());
        miDil.setOnAction(e -> {
            stage.close();
            restart();
        });

        miAbout.setOnAction(e -> new RrethProgramit());

        root.setTop(menu);

        center.getChildren().addAll(pyet, table, rectLay);
        center.fillWidthProperty().setValue(true);
        sc.setContent(center);
        sc.getStyleClass().add("edge-to-edge");
        sc.setPadding(new Insets(10));
        sc.setFitToWidth(true);
        sc.setFitToHeight(true);
//        root.setTop(menu);
        root.setCenter(sc);
        table.setPlaceholder(new Label("No data"));
        scene.getStylesheets().add(getClass().getResource("/sample/style.css").toExternalForm());
        stage.setScene(scene);
        stage.setMinWidth(942);
        stage.setMinHeight(680);
        stage.setMaximized(true);
        stage.show();
    }

    public void leftSide(DritarjaKryesore dk) {
        s_cbPuna.setEditable(true);
        Label lblDeri = new Label(" to ");
        lblDeri.setPadding(new Insets(5, 0, 0, 0));
        lblTeHyrat.setGraphic(new ImageView(new Image("/sample/foto/down.png")));
        lblShpenzimet.setGraphic(new ImageView(new Image("/sample/foto/down.png")));
        lblShpenzimet.setGraphicTextGap(10);
        lblTeHyrat.setGraphicTextGap(15);

        mbushProdhuesin();

        cbProdhuesi.getSelectionModel().selectedItemProperty().addListener((o, ov, nv) -> {
            mbushPaisjenCB(nv);
        });

        HBox hbCb = new HBox(5);
        hbCb.getChildren().addAll(cbProdhuesi, cbPaisjet);

        cbProdhuesi.getSelectionModel().select("Asnje");
        cbPaisjet.getSelectionModel().select("Asnje");

        HBox laySasia = new HBox(5);
        laySasia.getChildren().addAll(btnMinus, txtSasia, btnPlus);

        HBox butonat1 = new HBox(5);
        butonat1.setAlignment(Pos.CENTER_RIGHT);
        butonat1.getChildren().addAll(btnFshi, btnRregullo, btnPastro);
        txtInfo.setPrefColumnCount(5);
        txtInfo.setPrefRowCount(2);
        txtInfo.setPromptText("Informacione shtese");

        GridPane grid = new GridPane();
        grid.add(new Label("Part"), 0, 0);
        grid.add(txtPjesa, 1, 0);
        grid.add(new Label("Category"), 0, 1);
        grid.add(txtPaisja, 1, 1);
        grid.add(new Label("Maker"), 0, 2);
        grid.add(txtLloji, 1, 2);
        grid.add(new Label("Model"), 0, 3);
        grid.add(txtTipi, 1, 3);
        grid.add(new Label("Price "), 0, 4);
        grid.add(txtQmimi, 1, 4);
        grid.add(new Label("Quantity"), 0, 5);
        grid.add(laySasia, 1, 5);
        grid.add(txtInfo, 1, 6);
        grid.add(butonat1, 1, 7);

        grid.setHgap(30);
        grid.setVgap(5);

        grid.getStyleClass().addAll("grid");

        VBox s_root = new VBox();
        HBox btn = new HBox(5);
        btn.getChildren().addAll(btnBlej, s_btnPastro);
        btn.setAlignment(Pos.CENTER_RIGHT);
        btn.setPadding(new Insets(5, 0, 0, 0));
        btnBlej.setMinWidth(100);
        HBox hb_sasia = new HBox(2);
        Button btnP = new Button();
        Button btnM = new Button();
        s_txtSasia.setMaxWidth(120);
        s_txtSasia.setMinWidth(120);
        txtPunetori.setMinWidth(170);
//        txtPunetori.setMaxWidth(200);
//        s_cbPuna.setMaxWidth(200);
//        s_cbEmriKons.setMaxWidth(200);
//        txtMakina.setMaxWidth(200);
//        s_txtQmimi.setMaxWidth(200);
//        s_data.setMaxWidth(200);
        hb_sasia.getChildren().addAll(btnM, s_txtSasia, btnP);
        GridPane s_grid = new GridPane();
        s_data.setPromptText("muaji/dita/viti");

        txtPer.setPrefColumnCount(4);
        txtPer.setPrefRowCount(3);
        txtPer.setPromptText("More info");
        txtPer.setPadding(new Insets(0));

        s_grid.add(new Label("Puna e kryer"), 0, 0);
        s_grid.add(s_cbPuna, 1, 0);
        s_grid.add(new Label("Konsumatori"), 0, 1);
        s_grid.add(s_cbEmriKons, 1, 1);
        s_grid.add(new Label("Makina"), 0, 2);
        s_grid.add(txtMakina, 1, 2);
        s_grid.add(new Label("Qmimi"), 0, 3);
        s_grid.add(s_txtQmimi, 1, 3);
        s_grid.add(new Label("Data"), 0, 4);
        s_grid.add(s_data, 1, 4);
        s_grid.add(new Label("Punetori"), 0, 5);
        s_grid.add(txtPunetori, 1, 5);
        s_grid.add(new Label("Paisja"), 0, 6);
        s_grid.add(hbCb, 1, 6);
        s_grid.add(txtPer, 1, 7);
        s_grid.add(punaKryer, 1, 8);
        s_grid.add(btn, 1, 9);

        txtPunetori.setTooltip(new Tooltip("Emri nuk mund te ndryshohet"));
        s_grid.setVgap(5);
        s_grid.setHgap(15);
        s_root.getChildren().addAll(s_grid);

        s_grid.getStyleClass().add("grid");
        s_root.setPadding(new Insets(15, 0, 5, 0));

        btnBlej.setOnAction(e -> {
            Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    shtoPune();
                }
            });
        });

        table.setMinHeight(420);
        table.setMinWidth(930);
        table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

        btnRregullo.setOnAction(e -> update());
        btnFshi.setOnAction(e -> {
            if (!txtLloji.getText().isEmpty() && !txtPaisja.getText().isEmpty() && !txtQmimi.getText().isEmpty()
                    && !txtSasia.getText().isEmpty() && !txtPjesa.getText().isEmpty())
                new Mesazhi("Informacion", txtPjesa.getText(), "A jeni te sigurte qe doni ta fshini kete paisje?", this);
            else new Mesazhi("Gabim", "Gabim", "Duhet te zgjedhni njeren prej pjeseve nga tabela.");
        });

        lblShpenzimet.setContentDisplay(ContentDisplay.RIGHT);
        lblTeHyrat.setContentDisplay(ContentDisplay.RIGHT);

        lblTeHyrat.setOnMouseClicked(e -> {
            if (show2) {
                lblTeHyrat.setGraphic(new ImageView(new Image("/sample/foto/right.png")));
                left_root.getChildren().remove(grid);
                show2 = false;
            } else {
                lblTeHyrat.setGraphic(new ImageView(new Image("/sample/foto/down.png")));
                left_root.getChildren().add(1, grid);
                show2 = true;
            }
        });

        lblShpenzimet.setOnMouseClicked(e -> {
            if (show) {
                lblShpenzimet.setGraphic(new ImageView(new Image("/sample/foto/right.png")));
                left_root.getChildren().remove(s_grid);
                show = false;
            } else {
                lblShpenzimet.setGraphic(new ImageView(new Image("/sample/foto/down.png")));
                if (!show2)
                    left_root.getChildren().add(2, s_grid);
                else left_root.getChildren().add(3, s_grid);
                show = true;
            }
        });

        ScrollPane sp = new ScrollPane();
        sp.getStyleClass().add("edge-to-edge");
        sp.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
        sp.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
        sp.setMinWidth(325);
        sp.setContent(left_root);

        left_root.setMinWidth(320);

        lblTeHyrat.setStyle("-fx-font-size: 17");
        lblShpenzimet.setStyle("-fx-font-size: 17");
        lblTeHyrat.setPadding(new Insets(10, 0, 20, 0));
        lblShpenzimet.setPadding(new Insets(20, 0, 10, 0));
        left_root.getStyleClass().add("left");
//        left_root.setStyle("-fx-border-width: 0 2 0 0;" +
//                            "-fx-border-color: #e5e5e5;");
        left_root.setPadding(new Insets(15, 5, 0, 15));
        left_root.getChildren().addAll(lblTeHyrat, grid, lblShpenzimet, s_grid);
        root.setLeft(sp);
    }

    public void restart() {
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new Main().start(new Stage());
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
    }

    public void nxerrTeDhenat() {
//        Thread t = new Thread(new Runnable() {
//            public void run() {
        try {
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from Pjeset");

            data = FXCollections.observableArrayList();
            while (rs.next()) {
                data.add(new mbushTabelen(rs.getInt("id"), rs.getString("prodhimi").toUpperCase(),
                        rs.getString("tipi").toUpperCase(), rs.getString("lloji_pjeses").toUpperCase(),
                        rs.getString("emri_pjeses").toUpperCase(), rs.getFloat("qmimi"),
                        rs.getInt("sasia"), rs.getString("info")));
            }
            conn.close();
            table.setItems(data);
        } catch (SQLNonTransientConnectionException ntr) {
        } catch (Exception ex) {
            err.setText(ex.getMessage());
        }
//            }
//        });
//        t.start();
    }

    public void selektimi() {
        try {
            table.getSelectionModel().selectedItemProperty().addListener((ov, oldVal, newVal) -> {
                if (!table.getSelectionModel().isEmpty()) {
                    lblId.setText("" + ((mbushTabelen) newVal).getId());
                    txtLloji.setText(((mbushTabelen) newVal).getTipi());
                    txtPaisja.setText(((mbushTabelen) newVal).getPaisja());
                    txtPjesa.setText(((mbushTabelen) newVal).getPjesa());
                    txtTipi.setText(((mbushTabelen) newVal).getLloji());
                    txtQmimi.setText(((mbushTabelen) newVal).getQmimi() + "");
                    txtSasia.setText(((mbushTabelen) newVal).getSasia() + "");
                    txtInfo.setText(((mbushTabelen) newVal).getInfo());
                }
            });
        } catch (NullPointerException npe) {
            System.out.println(npe.getMessage());
        }
    }

    public void filtroTabelen() {
        try {
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            StringBuilder sqlCmd = new StringBuilder("select * from Pjeset where");

            if (!qCbProdhuesi.getText().isEmpty()
                    || !qTxtPaisja.getText().isEmpty() || !qTxtPjesa.getText().isEmpty()
                    || !qTxtQmimi.getText().isEmpty() || !qTxtTipi.getText().isEmpty()) {
                if (!qCbProdhuesi.getText().equals(""))
                    sqlCmd.append(" lower(prodhimi) like lower('%" + qCbProdhuesi.getText() + "%') and");
                if (!qTxtPjesa.getText().isEmpty())
                    sqlCmd.append(" lower(emri_pjeses) like lower('%" + qTxtPjesa.getText() + "%') and");
                if (!qTxtPaisja.getText().isEmpty())
                    sqlCmd.append(" lower(lloji_pjeses) like lower('%" + qTxtPaisja.getText() + "%') and");
                if (!qTxtTipi.getText().isEmpty())
                    sqlCmd.append(" lower(tipi) like ('%" + qTxtTipi.getText() + "%') and");
                if (!qTxtQmimi.getText().isEmpty()) {
                    if (qCbOp.getSelectionModel().getSelectedIndex() == 0)
                        sqlCmd.append(" cast(qmimi as decimal) = cast(" + Float.parseFloat(qTxtQmimi.getText()) + " as decimal) and");
                    else if (qCbOp.getSelectionModel().getSelectedIndex() == 1)
                        sqlCmd.append(" cast(qmimi as decimal) > cast(" + Float.parseFloat(qTxtQmimi.getText()) + " as decimal) and");
                    else if (qCbOp.getSelectionModel().getSelectedIndex() == 2)
                        sqlCmd.append(" cast(qmimi as decimal) < cast(" + Float.parseFloat(qTxtQmimi.getText()) + " as decimal) and");

                }

            } else {
                sqlCmd.equals("select * from Pjeset");
            }

            StringBuilder newSql = new StringBuilder();
            if (sqlCmd.substring(sqlCmd.length() - 3, sqlCmd.length()).equals("and")) {
                StringBuilder ns = new StringBuilder(sqlCmd.substring(0, sqlCmd.length() - 3));
                newSql = ns;
            } else if (sqlCmd.substring(sqlCmd.length() - 5, sqlCmd.length()).equals("where")) {
                StringBuilder ns = new StringBuilder(sqlCmd.substring(0, sqlCmd.length() - 5));
                newSql = ns;
            } else newSql = sqlCmd;

            ResultSet rs = stmt.executeQuery(newSql.toString());
            data.remove(0, data.size());
            while (rs.next()) {
                data.add(new mbushTabelen(rs.getInt("id"), rs.getString("prodhimi").toUpperCase(),
                        rs.getString("tipi").toUpperCase(), rs.getString("lloji_pjeses").toUpperCase(),
                        rs.getString("emri_pjeses").toUpperCase(), rs.getFloat("qmimi"),
                        rs.getInt("sasia"), rs.getString("info")));
            }
            table.setItems(data);
            conn.close();
        } catch (NumberFormatException nf) {
            new Mesazhi("Info", "Format i gabuar", "Fusha qmimi duhet te permbaje vetem numra.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void pastro() {
        lblId.setText("");
        txtSasia.clear();
        txtTipi.clear();
        txtPjesa.clear();
        txtPaisja.clear();
        txtLloji.clear();
        txtQmimi.clear();
        txtInfo.clear();
        table.getSelectionModel().clearSelection();
    }

    public void punetTabela() {
        try {
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from Punet order by data desc");
            ObservableList<TabelaPunet> data = FXCollections.observableArrayList();
            Format format = new SimpleDateFormat("dd/MM/yyyy");
            while (rs.next()) {
                String d = format.format(rs.getDate("data"));
                data.add(new TabelaPunet(rs.getInt("id"), rs.getString("lloji").toUpperCase(), d,
                        rs.getFloat("qmimi"), rs.getString("konsumatori").toUpperCase(),
                        rs.getString("pershkrimi"), rs.getString("kryer"), rs.getString("makina").toUpperCase()));
            }

            tblPunet.setItems(data);
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void shtoPune() {
        try {
            if (!s_cbPuna.getText().equals("") && !s_data.getValue().equals("")
                    && !s_cbEmriKons.getText().equals("") && !txtMakina.getText().equals("")) {
                String[] emri_l = s_cbEmriKons.getText().split(" ");
                emri_l[0] = emri_l[0].substring(0, 1).toUpperCase() + emri_l[0].substring(1, emri_l[0].length()).toLowerCase();
                emri_l[1] = emri_l[1].substring(0, 1).toUpperCase() + emri_l[1].substring(1, emri_l[1].length()).toLowerCase();
                String sql = "";
                if (punaKryer.isSelected()) {
                    sql = "insert into Punet (lloji, data, qmimi, konsumatori, pershkrimi, punetori, kryer, makina) " +
                            "values ('" + s_cbPuna.getText() + "', '" + s_data.getValue() + "', " +
                            Float.parseFloat(s_txtQmimi.getText()) + ", '" + emri_l[0] + " " + emri_l[1] + "', '" +
                            txtPer.getText() + "', '" + txtPunetori.getText() + "', 'po', '" + txtMakina.getText() + "')";
                } else {
                    sql = "insert into Punet (lloji, data, qmimi, konsumatori, pershkrimi, punetori, kryer, makina) " +
                            "values ('" + s_cbPuna.getText() + "', '" + s_data.getValue() + "', " +
                            Float.parseFloat(s_txtQmimi.getText()) + ", '" + emri_l[0] + " " + emri_l[1] + "', '" +
                            txtPer.getText() + "', '" + txtPunetori.getText() + "', 'jo', '" + txtMakina.getText() + "')";
                }
                String comp = "select emri, mbiemri from Konsumatori";
                Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                Statement stmt = conn.createStatement();
                Statement st = conn.createStatement();
                stmt.execute(sql);
                Thread.sleep(500);

                String paisja = null;
                if (!cbPaisjet.getSelectionModel().getSelectedItem().equals("Asnje") ||
                        !cbProdhuesi.getSelectionModel().getSelectedItem().equals("Asnje")) {
                    paisja = "update Pjeset set sasia = sasia - 1 where prodhimi = '" + cbProdhuesi.getSelectionModel().getSelectedItem()
                            + "' and emri_pjeses = '" + cbPaisjet.getSelectionModel().getSelectedItem() + "'";
                    Statement PaisjetStmt = conn.createStatement();
                    PaisjetStmt.execute(paisja);
                }

                if (s_cbEmriKons.getText().contains(" ")) {
                    int num = 0;
                    ResultSet rs = st.executeQuery("select emri, mbiemri from Konsumatori where emri = '" + emri_l[0] +
                            "' and mbiemri = '" + emri_l[1] + "'");
                    while (rs.next()) {
                        if (rs.getString("emri").toLowerCase().equals(emri_l[0].toLowerCase()) &&
                                rs.getString("mbiemri").toLowerCase().equals(emri_l[1].toLowerCase())) {
                            num++;
                        }
                    }
                    if (num == 0) new ShtoKonsumator(emri_l[0], emri_l[1], txtMakina.getText());
                    else new Mesazhi("Sukses", "Te dhenat u ruajten me sukses", "Te dhenat per punen e kryer " +
                            "ndaj konsumatorit\n" + emri_l[0] + " " + emri_l[1] + ", u kryen me sukses");
                }
                conn.close();

                if (!cbPaisjet.getSelectionModel().getSelectedItem().equals("Asnje") ||
                        !cbProdhuesi.getSelectionModel().getSelectedItem().equals("Asnje")) {
                    nxerrTeDhenat();
                }

                s_cbEmriKons.clear();
                s_txtQmimi.clear();
                s_cbPuna.clear();
                s_txtPaisja.clear();
                txtPer.clear();
                s_data.getEditor().clear();
                s_data.setValue(null);
                punaKryer.setSelected(false);
                cbProdhuesi.getSelectionModel().select("Asnje");
                cbPaisjet.getSelectionModel().select("Asnje");
                txtMakina.clear();
                punaKryer.setSelected(false);

            } else {
                new Mesazhi("Gabim", "Fusha e zbrazet", "Ju lutem mbushini te gjitha fushat para se te vazhdoni!");
            }
        } catch (SQLNonTransientConnectionException fu) {
        } catch (NullPointerException ex) {
            System.out.println(ex.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void mbushPaisjenCB(String p) {
        try {
            cbPaisjet.getItems().clear();
            String sql = "select distinct emri_pjeses, sasia from Pjeset where prodhimi = '" + p + "'";
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);

            cbPaisjet.getItems().clear();
            while (rs.next()) {
                if (rs.getInt("sasia") > 0)
                    cbPaisjet.getItems().add(rs.getString("emri_pjeses"));
            }
            if (cbPaisjet.getItems().size() > 0)
                cbPaisjet.getSelectionModel().select(0);
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void mbushProdhuesin() {
        try {
            String sql = "select distinct prodhimi from Pjeset";
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);

            cbProdhuesi.getItems().clear();
            while (rs.next()) {
                cbProdhuesi.getItems().add(rs.getString("prodhimi"));
            }
            conn.close();

            if (cbProdhuesi.getItems().size() == 0)
                cbProdhuesi.getSelectionModel().select("Asnje");

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void update() {
        try {
            if (!txtPjesa.getText().isEmpty() && !txtSasia.getText().isEmpty() && !txtQmimi.getText().isEmpty() &&
                    !txtPaisja.getText().isEmpty() && !txtLloji.getText().isEmpty() && !lblId.getText().isEmpty()) {
                cbProdhuesi.getItems().clear();
                String prodh = txtPaisja.getText().substring(0, 1).toUpperCase() + txtPaisja.getText().substring(1, txtPaisja.getText().length()).toLowerCase();
                String emri = txtPjesa.getText().substring(0, 1).toUpperCase() + txtPjesa.getText().substring(1, txtPjesa.getText().length()).toLowerCase();
                StringBuilder sb = new StringBuilder("update Pjeset set prodhimi = '" + txtLloji.getText() + "', tipi = '" + txtTipi.getText() + "', " +
                        "lloji_pjeses = '" + prodh + "', emri_pjeses = '" + emri + "', qmimi = " +
                        txtQmimi.getText() + ", sasia = " +
                        Integer.parseInt(txtSasia.getText()) +
                        ", info = '" + txtInfo.getText() + "' where id = " + lblId.getText());
                Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                Statement stmt = conn.createStatement();
                stmt.execute(sb.toString());
                stmt.close();
                conn.close();
                new Mesazhi("Sukses", "Sukses", "Te dhenat u ruajten me sukses.");
                table.getSelectionModel().clearSelection();
                filtroTabelen();
                mbushProdhuesin();
            } else
                new Mesazhi("Informacion", "Gabimet e mundshme", "1. Disa prej fushave te kerkuara jane te zbrazta.\n" +
                        "2. Duhet te zgjedhet njeri prej paisjeve ne tabele.");

        } catch (NumberFormatException nfe) {
            new Mesazhi("Gabim", "", "Nuk lejohen shkronja tek fusha 'Sasia'.");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void fshi() {
        try {
            if (!txtPjesa.getText().isEmpty() && !txtSasia.getText().isEmpty() && !txtQmimi.getText().isEmpty() &&
                    !txtPaisja.getText().isEmpty() && !txtLloji.getText().isEmpty() && !lblId.getText().isEmpty()) {
                cbProdhuesi.getItems().clear();
                StringBuilder sb = new StringBuilder("delete from Pjeset where id = " + lblId.getText());
                Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                Statement stmt = conn.createStatement();
                stmt.execute(sb.toString());
                stmt.close();
                conn.close();
                new Mesazhi("Sukses", "Sukses", "Paisja u fshi me sukses nga baza e te dhenave");
                pastro();
                filtroTabelen();
                mbushProdhuesin();
            } else new Mesazhi("Gabim", "Gabim", "Disa prej fushave te kerkuara jane te zbrazta.");
        } catch (SQLNonTransientConnectionException fu) {
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void financat() {
        Button btnBack = new Button();
        btnBack.setGraphic(new ImageView(new Image("/sample/foto/back.png")));
        btnBack.setOnAction(e -> {
            root.setCenter(null);
            root.setCenter(sc);
        });
        Button btnRifresko = new Button();

        punetTabela();

        AreaChart<String, Number> chart = new AreaChart<String, Number>(x, y);
        chart.setLegendVisible(true);
        chart.setVerticalGridLinesVisible(false);
        chart.setAnimated(false);

        XYChart.Series muaji = new XYChart.Series();
        muaji.setName(Calendar.getInstance().get(Calendar.YEAR) + "");
        double jan = 0, shk = 0, mar = 0, pri = 0, maj = 0, qer = 0, kor = 0, gsht = 0, sht = 0, tet = 0, nen = 0, dhj = 0,
                jank = 0, shkk = 0, mark = 0, prik = 0, majk = 0, qerk = 0, kork = 0, gshtk = 0, shtk = 0, tetk = 0, nenk = 0, dhjk = 0;

        viti.put(Calendar.getInstance().get(Calendar.YEAR) + "", 0.0);
        viti.put((Calendar.getInstance().get(Calendar.YEAR) - 1) + "", 0.0);

        tani = Calendar.getInstance().get(Calendar.YEAR) + "";
        kaluar = Calendar.getInstance().get(Calendar.YEAR) - 1 + "";

        for (int i = 0; i < tblPunet.getItems().size(); i++) {
            if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(6, 10).equals(tani)) {
                if (((String) tblPunet.getColumns().get(0).getCellData(i)).equals("po")) {
                    viti.put(tani, viti.get(tani) + colPagesa.getCellData(i));
                }
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(6, 10).equals(kaluar)) {
                if (((String) tblPunet.getColumns().get(0).getCellData(i)).equals("po")) {
                    viti.put(kaluar, viti.get(kaluar) + colPagesa.getCellData(i));
                }
            }
            if (((String) tblPunet.getColumns().get(0).getCellData(i)).equals("po")){
                if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("01/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    jan += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("02/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    shk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("03/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    mar += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("04/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    pri += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("05/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    maj += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("06/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    qer += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("07/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    kor += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("08/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    gsht += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("09/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    sht += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("10/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    tet += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("11/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    nen += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("12/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    dhj += colPagesa.getCellData(i);
                }

                if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("01/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    jank += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("02/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    shkk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("03/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    mark += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("04/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    prik += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("05/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    majk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("06/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    qerk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("07/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    kork += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("08/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    gshtk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("09/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    shtk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("10/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    tetk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("11/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    nenk += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals("12/" + (Calendar.getInstance().get(Calendar.YEAR)-1))) {
                    dhjk += colPagesa.getCellData(i);
                }

            }
        }

        muaji.getData().add(new XYChart.Data("Janar", jan));
        muaji.getData().add(new XYChart.Data("Shkurt", shk));
        muaji.getData().add(new XYChart.Data("Mars", mar));
        muaji.getData().add(new XYChart.Data("Prill", pri));
        muaji.getData().add(new XYChart.Data("Maj", maj));
        muaji.getData().add(new XYChart.Data("Qershor", qer));
        muaji.getData().add(new XYChart.Data("Korrik", kor));
        muaji.getData().add(new XYChart.Data("Gusht", gsht));
        muaji.getData().add(new XYChart.Data("Shtator", sht));
        muaji.getData().add(new XYChart.Data("Tetor", tet));
        muaji.getData().add(new XYChart.Data("Nentor", nen));
        muaji.getData().add(new XYChart.Data("Dhjetor", dhj));

        //kaluar
        XYChart.Series vitiKaluar = new XYChart.Series();
        vitiKaluar.setName((Calendar.getInstance().get(Calendar.YEAR)-1) + "");
        vitiKaluar.getData().add(new XYChart.Data("Janar", jank));
        vitiKaluar.getData().add(new XYChart.Data("Shkurt", shkk));
        vitiKaluar.getData().add(new XYChart.Data("Mars", mark));
        vitiKaluar.getData().add(new XYChart.Data("Prill", prik));
        vitiKaluar.getData().add(new XYChart.Data("Maj", majk));
        vitiKaluar.getData().add(new XYChart.Data("Qershor", qerk));
        vitiKaluar.getData().add(new XYChart.Data("Korrik", kork));
        vitiKaluar.getData().add(new XYChart.Data("Gusht", gshtk));
        vitiKaluar.getData().add(new XYChart.Data("Shtator", shtk));
        vitiKaluar.getData().add(new XYChart.Data("Tetor", tetk));
        vitiKaluar.getData().add(new XYChart.Data("Nentor", nenk));
        vitiKaluar.getData().add(new XYChart.Data("Dhjetor", dhjk));

        int[] muajt = new int[12];
        muajt[0] = (int) jan;
        muajt[1] = (int) shk;
        muajt[2] = (int) mar;
        muajt[3] = (int) pri;
        muajt[4] = (int) maj;
        muajt[5] = (int) qer;
        muajt[6] = (int) kor;
        muajt[7] = (int) gsht;
        muajt[8] = (int) sht;
        muajt[9] = (int) tet;
        muajt[10] = (int) nen;
        muajt[11] = (int) dhj;

        Map<Integer, String> m_muajt = new HashMap<>();
        m_muajt.put(1, "Janar");
        m_muajt.put(2, "Shkurt");
        m_muajt.put(3, "Mars");
        m_muajt.put(4, "Prill");
        m_muajt.put(5, "Maj");
        m_muajt.put(6, "Qershor");
        m_muajt.put(7, "Korrik");
        m_muajt.put(8, "Gusht");
        m_muajt.put(9, "Shtator");
        m_muajt.put(10, "Tetor");
        m_muajt.put(11, "Nentor");
        m_muajt.put(12, "Dhjetor");

        int min = 1000, max = 0, tot = 0, muajiMax = 0, muajiMin = 0;
        for (int i = 0; i <= Calendar.getInstance().get(Calendar.MONTH); i++) {
            if (min > muajt[i] && muajt[i] > 0) {
                min = muajt[i];
                muajiMin = i + 1;
            }
            if (max < muajt[i]) {
                max = muajt[i];
                muajiMax = i + 1;
            }
            tot += muajt[i];
        }


        chart.getData().addAll(vitiKaluar, muaji);

        HBox comboLay = new HBox(10);
        comboLay.setPadding(new Insets(5, 5, 5, 0));
        comboLay.setAlignment(Pos.CENTER_RIGHT);
        Hyperlink rbAktual = new Hyperlink("Muaji aktual");
        Hyperlink rbPeriudha = new Hyperlink("6 Muajt e fundit");
        Hyperlink rbViti = new Hyperlink("Viti aktual");

//        Button btnRaporti = new Button("Krijo raport");

        ComboBox<String> cbMuaji = new ComboBox<>();
        for (Map.Entry<Integer, String> m : m_muajt.entrySet()) {
            if (m.getKey() > Calendar.getInstance().get(Calendar.MONTH) + 1) break;
            cbMuaji.getItems().add(m.getValue());
        }
        cbMuaji.getSelectionModel().select(0);

        cbMuaji.getSelectionModel().selectedIndexProperty().addListener((ol, ov, newVal) -> {
            if (newVal.intValue() + 1 < 10)
                muajiVitit(chart, "0" + (newVal.intValue() + 1));
            else muajiVitit(chart, "" + (newVal.intValue() + 1));
        });

        comboLay.getChildren().addAll(rbViti, rbAktual, rbPeriudha, cbMuaji);
        rbAktual.setOnAction(e -> {
            aktual(chart, m_muajt);
            rbAktual.setVisited(false);
        });

        rbViti.setOnAction(e -> {
            chart.getData().clear();
            chart.getData().addAll(vitiKaluar, muaji);
            rbViti.setVisited(false);
        });

        rbPeriudha.setOnAction(e -> {
            gjashtMujori(chart, Calendar.getInstance().get(Calendar.MONTH) + 1);
            rbPeriudha.setVisited(false);
        });

        for (int i = 0; i < 12; i++) {
            XYChart.Data item = (XYChart.Data) muaji.getData().get(i);
            Tooltip.install(item.getNode(), new Tooltip(item.getYValue() + " €"));
            XYChart.Data item2 = (XYChart.Data) vitiKaluar.getData().get(i);
            Tooltip.install(item2.getNode(), new Tooltip(item2.getYValue() + " €"));
        }

        btnRifresko.setGraphic(new ImageView(new Image("/sample/foto/refresh-24.png")));
        btnRifresko.setOnAction(e -> financat());

        Button btnKerko2 = new Button("Kerko");
        TextField txtKerkoPunet = new TextField();
        HBox hbk = new HBox(5);
        hbk.setAlignment(Pos.CENTER_RIGHT);
        hbk.setPadding(new Insets(0, 5, 0, 0));
        hbk.getChildren().addAll(txtKerkoPunet, btnKerko2);

        btnKerko2.setOnAction(e -> filtroFinancat(txtKerkoPunet));
        txtKerkoPunet.setOnKeyPressed(e -> {
            if (e.getCode().equals(KeyCode.ENTER)) {
                filtroFinancat(txtKerkoPunet);
                emriKons = -1;
            }
        });

        tblPunet.getSelectionModel().selectedItemProperty().addListener((o, ov, nv) -> {
            if (nv != null) {
                emriKons = nv.getId();
                if (nv.getKryer().equals("po")) kryer = true;
                else kryer = false;
            } else emriKons = -1;
        });

        ContextMenu cm = new ContextMenu();
        MenuItem cmStatusi = new MenuItem("Ndrysho statusin");
        MenuItem cmRaport = new MenuItem("Krijo raport per punen e zgjedhur");
        MenuItem cmRaportSot = new MenuItem("Krijo raport per sot");
        MenuItem cmRaportAktual = new MenuItem("Krijo raport per muajin aktual");
        MenuItem cmRaportTeGjitha = new MenuItem("Raport per te gjitha punet");
        MenuItem cmRaportiViti = new MenuItem("Krijo raport per kete vit");

        cmStatusi.setOnAction(e -> {
            if (emriKons > -1) {
                new RregulloPunen(emriKons, kryer, DritarjaKryesore.this);
            }
        });

        cmRaport.setOnAction(e -> {
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (emriKons > -1) {
                            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                            HashMap hm = new HashMap();
                            hm.put("kompania", "Emri i kompanise");
                            hm.put("Folderi", folderi);
                            hm.put("id", emriKons);
                            JasperReport jreport = JasperCompileManager.compileReport(raportiFatura);
                            JasperPrint jprint = JasperFillManager.fillReport(jreport, hm, conn);
                            JasperViewer.viewReport(jprint, false);
                            conn.close();
                        } else
                            new Mesazhi("Gabim", "Zgjedhni njerin", "Ju duhet te zgjedhni njeren nga punet ne tabele");
                    } catch (Exception ex) {
                        new Mesazhi("", "", ex.getMessage());
                    }
                }
            });
            t.start();
        });

        cmRaportSot.setOnAction(e -> {
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    String strData = Calendar.getInstance().get(Calendar.DAY_OF_MONTH) + "/" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" +
                            Calendar.getInstance().get(Calendar.YEAR);
                    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                    try {
                        Date data = format.parse(strData);
                        Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                        HashMap hm = new HashMap();
                        hm.put("data", data);
                        JasperReport jreport = JasperCompileManager.compileReport(raportiSot);
                        JasperPrint jprint = JasperFillManager.fillReport(jreport, hm, conn);
                        JasperViewer.viewReport(jprint, false);
                        conn.close();
                    } catch (JRException fnfe) {
                        new Mesazhi("Gabim", "Folderi nuk u gjet", "Te dhenat qe nevojiten per te krijuar raportin\n" +
                                "nuk u gjeten.");
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            });
            t.start();
        });

        cmRaportTeGjitha.setOnAction(e -> {
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                        HashMap hm = new HashMap();
                        JasperReport jreport = JasperCompileManager.compileReport(raportiTotal);
                        JasperPrint jprint = JasperFillManager.fillReport(jreport, hm, conn);
                        JasperViewer.viewReport(jprint, false);
                        conn.close();
                    } catch (JRException fnfe) {
                        new Mesazhi("Gabim", "Folderi nuk u gjet", "Te dhenat qe nevojiten per te krijuar raportin\n" +
                                "nuk u gjeten.");
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            });
            t.start();
        });

        cmRaportAktual.setOnAction(e -> {
            Thread raporti = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        HashMap hm = new HashMap();
                        String muajiAktual = (Calendar.getInstance().get(Calendar.MONTH) + 1) + "";
                        String Viti = Calendar.getInstance().get(Calendar.YEAR) + "";
                        hm.put("MuajiAktual", muajiAktual);
                        hm.put("Viti", Viti);
                        Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                        JasperReport jreport = JasperCompileManager.compileReport(raportiMujor);
                        JasperPrint jprint = JasperFillManager.fillReport(jreport, hm, conn);
                        JasperViewer.viewReport(jprint, false);
                        conn.close();
                    } catch (JRException fnfe) {
                        new Mesazhi("Gabim", "Folderi nuk u gjet", "Te dhenat qe nevojiten per te krijuar raportin\n" +
                                "nuk u gjeten.");
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            });
            raporti.start();
        });

        cmRaportiViti.setOnAction(e -> {
            Thread raportiViti = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        HashMap hm = new HashMap();
                        String Viti = Calendar.getInstance().get(Calendar.YEAR) + "";
                        hm.put("Viti", Viti);
                        Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
                        JasperReport jreport = JasperCompileManager.compileReport(strRaportiViti);
                        JasperPrint jprint = JasperFillManager.fillReport(jreport, hm, conn);
                        JasperViewer.viewReport(jprint, false);
                        conn.close();
                    } catch (JRException fnfe) {
                        new Mesazhi("Gabim", "Folderi nuk u gjet", "Te dhenat qe nevojiten per te krijuar raportin\n" +
                                "nuk u gjeten.");
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            });
            raportiViti.start();
        });

        cm.getItems().addAll(cmStatusi, new SeparatorMenuItem(), cmRaport, new SeparatorMenuItem(), cmRaportSot, cmRaportAktual, new SeparatorMenuItem(), cmRaportTeGjitha, cmRaportiViti);

        tblPunet.setRowFactory(tv -> {
            TableRow<TabelaPunet> row = new TableRow<TabelaPunet>();
            row.setOnMouseClicked(e -> {
                if (e.getButton() == MouseButton.SECONDARY) {
                    cm.show(stage, MouseInfo.getPointerInfo().getLocation().x, MouseInfo.getPointerInfo().getLocation().y);
                }
            });
            return row;
        });

        tblPunet.setMaxHeight(300);
        chart.setMaxHeight(300);

        //Informate perfundi Grafikut
        DecimalFormat df = new DecimalFormat("#,###.00€");
        DecimalFormat dfPerc = new DecimalFormat("#.0");
        Rectangle rect1 = new Rectangle();
        rect1.setWidth(210);
        rect1.setHeight(200);
        rect1.getStyleClass().add("rect");
        StackPane stack1 = new StackPane();
        BorderPane bp1 = new BorderPane();
        VBox vb1 = new VBox();
        Label lblTitulli1 = new Label("Muaji aktual");
        Label lblQmimi1 = new Label(muajt[Calendar.getInstance().get(Calendar.MONTH)] + "");
        Label lblKaluar1 = new Label(muajt[Calendar.getInstance().get(Calendar.MONTH) - 1] + "");
        lblQmimi1.setTooltip(new Tooltip("Muaji aktual"));
        lblKaluar1.setTooltip(new Tooltip("Muaji i kaluar"));
        Label lblDif1 = new Label(Double.parseDouble(lblQmimi1.getText()) - Double.parseDouble(lblKaluar1.getText()) + "");
        lblTitulli1.getStyleClass().add("titulli");
        lblKaluar1.getStyleClass().add("kaluar");
        lblQmimi1.getStyleClass().add("aktual");
        lblDif1.getStyleClass().add("dif");
        if (Double.parseDouble(lblKaluar1.getText()) != 0.0) {
            lblDif1.setText((Double.parseDouble(lblDif1.getText()) / Double.parseDouble(lblKaluar1.getText()) * 100) + "");
            if (Double.parseDouble(lblDif1.getText()) > 0) {
                lblDif1.setText(lblDif1.getText() + "");
                lblDif1.setGraphic(new ImageView(new Image("/sample/foto/up.png")));
            } else if (Double.parseDouble(lblDif1.getText()) < 0) {
                lblDif1.setText(Math.abs(Double.parseDouble(lblDif1.getText())) + "");
                lblDif1.setGraphic(new ImageView(new Image("/sample/foto/down_2.png")));
            } else {
                lblDif1.setText(Math.abs(Double.parseDouble(lblDif1.getText())) + "");
            }
        }else {
            if (Double.parseDouble(lblKaluar1.getText()) == 0 &&
                    Double.parseDouble(lblQmimi1.getText()) > 0){
                lblDif1.setText(lblQmimi1.getText() + "");
                lblDif1.setGraphic(new ImageView(new Image("/sample/foto/up.png")));
            }else if (Double.parseDouble(lblKaluar1.getText()) > 0 &&
                    Double.parseDouble(lblQmimi1.getText()) == 0){
                lblDif1.setText(lblKaluar1.getText() + "");
                lblDif1.setGraphic(new ImageView(new Image("/sample/foto/down_2.png")));
            }
        }
        vb1.getChildren().addAll(lblQmimi1, lblKaluar1);
        bp1.setTop(lblTitulli1);
        bp1.setCenter(vb1);
        bp1.setBottom(lblDif1);
        stack1.getChildren().addAll(rect1, bp1);
        vb1.setAlignment(Pos.CENTER);
        bp1.setAlignment(lblTitulli1, Pos.CENTER);
        bp1.setAlignment(lblDif1, Pos.CENTER);

        //**************************************
        Rectangle rect2 = new Rectangle();
        rect2.setWidth(210);
        rect2.setHeight(200);
        rect2.getStyleClass().add("rect");
        StackPane stack2 = new StackPane();
        BorderPane bp2 = new BorderPane();
        VBox vb2 = new VBox();
        Label lblTitulli2 = new Label("Viti aktual");
        Label lblQmimi2 = new Label(viti.get(tani) + "");
        Label lblKaluar2 = new Label(viti.get(kaluar) + "");
        lblQmimi2.setTooltip(new Tooltip("Viti " + Calendar.getInstance().get(Calendar.YEAR)));
        lblKaluar2.setTooltip(new Tooltip("Viti " + (Calendar.getInstance().get(Calendar.YEAR) - 1)));
        Label lblDif2 = new Label((Double.parseDouble(lblQmimi2.getText()) - Double.parseDouble(lblKaluar2.getText())) + "");
        lblTitulli2.getStyleClass().add("titulli");
        lblKaluar2.getStyleClass().add("kaluar");
        lblQmimi2.getStyleClass().add("aktual");
        lblDif2.getStyleClass().add("dif");
        if (Double.parseDouble(lblKaluar2.getText()) != 0.0 && Double.parseDouble(lblQmimi2.getText()) > 0.0) {
            lblDif2.setText((Double.parseDouble(lblDif2.getText()) / Double.parseDouble(lblKaluar2.getText()) * 100) + "");
            if (Double.parseDouble(lblDif2.getText()) > 0) {
                lblDif2.setText(lblDif2.getText() + "");
                lblDif2.setGraphic(new ImageView(new Image("/sample/foto/up.png")));
            } else if (Double.parseDouble(lblDif2.getText()) < 0) {
                lblDif2.setText(Math.abs(Double.parseDouble(lblDif2.getText())) + "");
                lblDif2.setGraphic(new ImageView(new Image("/sample/foto/down_2.png")));
            } else {
                lblDif2.setText(Math.abs(Double.parseDouble(lblDif2.getText())) + "");
            }
        }else {
            if (Double.parseDouble(lblKaluar2.getText()) == 0 &&
                    Double.parseDouble(lblQmimi2.getText()) > 0){
                lblDif2.setText(lblQmimi2.getText() + "");
                lblDif2.setGraphic(new ImageView(new Image("/sample/foto/up.png")));
            }else if (Double.parseDouble(lblKaluar2.getText()) > 0 &&
                    Double.parseDouble(lblQmimi2.getText()) == 0){
                lblDif2.setText(lblKaluar2.getText() + "");
                lblDif2.setGraphic(new ImageView(new Image("/sample/foto/down_2.png")));
            }
        }
        vb2.getChildren().addAll(lblQmimi2, lblKaluar2);
        bp2.setTop(lblTitulli2);
        bp2.setCenter(vb2);
        bp2.setBottom(lblDif2);
        stack2.getChildren().addAll(rect2, bp2);
        vb2.setAlignment(Pos.CENTER);
        bp2.setAlignment(lblTitulli2, Pos.CENTER);
        bp2.setAlignment(lblDif2, Pos.CENTER);

        if (Double.parseDouble(lblKaluar1.getText()) > 0 &&
                Double.parseDouble(lblQmimi1.getText()) > 0)
            lblDif1.setText(dfPerc.format(Double.parseDouble(lblDif1.getText())) + "%");
        else lblDif1.setText(df.format(Double.parseDouble(lblDif1.getText())) + "");
        if (Double.parseDouble(lblKaluar2.getText()) > 0 &&
                Double.parseDouble(lblQmimi2.getText()) > 0)
            lblDif2.setText(dfPerc.format(Double.parseDouble(lblDif2.getText())) + "%");
        else {
            lblDif2.setText(df.format(Double.parseDouble(lblDif2.getText())) + "");
        }
        lblQmimi1.setText(df.format(Double.parseDouble(lblQmimi1.getText())));
        lblQmimi2.setText(df.format(Double.parseDouble(lblQmimi2.getText())));
        lblKaluar1.setText(df.format(Double.parseDouble(lblKaluar1.getText())));
        lblKaluar2.setText(df.format(Double.parseDouble(lblKaluar2.getText())));
        //***************************************
        Rectangle rect3 = new Rectangle();
        rect3.setWidth(210);
        rect3.setHeight(200);
        rect3.getStyleClass().add("rect");
        StackPane stack3 = new StackPane();
        BorderPane bp3 = new BorderPane();
        VBox vb3 = new VBox();
        loadThreadMes(lblQmimi3);
        Label lblTitulli3 = new Label("Pagesa mesatare");
        lblTitulli3.getStyleClass().add("titulli");
        lblQmimi3.getStyleClass().add("aktual");
        vb3.getChildren().addAll(lblQmimi3);
        bp3.setTop(lblTitulli3);
        bp3.setCenter(vb3);
        stack3.getChildren().addAll(rect3, bp3);
        vb3.setAlignment(Pos.CENTER);
        bp3.setAlignment(lblTitulli3, Pos.CENTER);
        //******************************************
        Rectangle rect4 = new Rectangle();
        rect4.setWidth(210);
        rect4.setHeight(200);
        rect4.getStyleClass().add("rect");
        StackPane stack4 = new StackPane();
        BorderPane bp4 = new BorderPane();
        VBox vb4 = new VBox();
        Label lblTitulli4 = new Label("Punet e kryera");
        loadThread(lblQmimi4);
        lblTitulli4.getStyleClass().add("titulli");
        lblQmimi4.getStyleClass().add("aktual");
        lblQmimi4.setText(lblQmimi4.getText() + "");
        vb4.getChildren().addAll(lblQmimi4);
        bp4.setTop(lblTitulli4);
        bp4.setCenter(vb4);
        stack4.getChildren().addAll(rect4, bp4);
        vb4.setAlignment(Pos.CENTER);
        bp4.setAlignment(lblTitulli4, Pos.CENTER);

        HBox hbtn = new HBox(13);
        hbtn.getChildren().addAll(stack1, stack2, stack3, stack4);

        HBox hbtn0 = new HBox(5);
        hbtn0.getChildren().addAll(btnBack, btnRifresko);

        grid_fin.setHgrow(tblPunet, Priority.ALWAYS);
        tblPunet.setPlaceholder(new Label("Nuk ka te dhena"));
        tblPunet.setPrefWidth(940);
        tblPunet.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        grid_fin.getChildren().clear();
        grid_fin.add(hbtn0, 0, 0);
//        grid_fin.add(info, 2, 0);
//        grid_fin.add(hbMaxMin, 3, 0);
        grid_fin.add(hbk, 1, 0);
        grid_fin.add(tblPunet, 0, 1, 2, 1);
        grid_fin.add(hbtn, 0, 2, 2, 1);
        grid_fin.add(comboLay, 0, 3, 2, 1);
        grid_fin.add(chart, 0, 4, 2, 1);
        grid_fin.setVgap(10);
        grid_fin.setHgap(5);
        grid_fin.setPadding(new Insets(30, 0, 0, 15));
        sp.setContent(grid_fin);
        sp.getStyleClass().add("edge-to-edge");
        sp.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
        sp.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
    }

    private void aktual(AreaChart chart, Map<Integer, String> hm) {
        try {

            Map<String, Float> map = new HashMap<>();
            XYChart.Series aktual = new XYChart.Series();
            aktual.setName(hm.get(Calendar.getInstance().get(Calendar.MONTH)+1));

            for (int i = 0; i < tblPunet.getItems().size(); i++) {
                if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals((Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    if (!map.containsKey(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2)))
                        map.put(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2), colPagesa.getCellData(i));
                    else
                        map.put(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2), map.get(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2)) + colPagesa.getCellData(i));
                }
            }

            Map<String, Float> mp = new TreeMap<>(map);

            for (Map.Entry<String, Float> m : mp.entrySet()) {
                aktual.getData().add(new XYChart.Data(m.getKey(), m.getValue()));
            }

            chart.getData().clear();
            chart.getData().add(aktual);

            for (int i = 0; i < aktual.getData().size(); i++) {
                XYChart.Data item = (XYChart.Data) aktual.getData().get(i);
                Tooltip.install(item.getNode(), new Tooltip(item.getYValue() + " €"));
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private void muajiVitit(AreaChart chart, String muaji_nr) {
        Map<String, Float> map = new HashMap<>();
        XYChart.Series aktual = new XYChart.Series();


        for (int i = 0; i < tblPunet.getItems().size(); i++) {
            if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(muaji_nr + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                if (!map.containsKey(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2)))
                    map.put(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2), colPagesa.getCellData(i));
                else
                    map.put(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2), map.get(((String) tblPunet.getColumns().get(2).getCellData(i)).substring(0, 2)) + colPagesa.getCellData(i));
            }
        }

        Map<String, Float> mp = new TreeMap<>(map);

        for (Map.Entry<String, Float> m : mp.entrySet()) {
            aktual.getData().add(new XYChart.Data(m.getKey(), m.getValue()));
        }

        chart.getData().clear();
        chart.getData().add(aktual);

        for (int i = 0; i < aktual.getData().size(); i++) {
            XYChart.Data item = (XYChart.Data) aktual.getData().get(i);
            Tooltip.install(item.getNode(), new Tooltip(item.getYValue() + " €"));
        }
    }

    private void gjashtMujori(AreaChart<String, Number> chart, int aktual) {
        XYChart.Series muajt = new XYChart.Series();
        double m6 = 0, m5 = 0, m4 = 0, m3 = 0, m2 = 0, m1 = 0;
        if ((aktual - 6) > 0) {
            for (int i = 0; i < tblPunet.getItems().size(); i++) {
                if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                        (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR)) ||
                        ((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                                "0" + (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    m6 += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                        (Calendar.getInstance().get(Calendar.MONTH)) + "/" + Calendar.getInstance().get(Calendar.YEAR)) ||
                        ((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                                "0" + (Calendar.getInstance().get(Calendar.MONTH)) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    m5 += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                        (Calendar.getInstance().get(Calendar.MONTH) - 1) + "/" + Calendar.getInstance().get(Calendar.YEAR)) ||
                        ((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                                "0" + (Calendar.getInstance().get(Calendar.MONTH) - 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    m4 += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                        (Calendar.getInstance().get(Calendar.MONTH) - 2) + "/" + Calendar.getInstance().get(Calendar.YEAR)) ||
                        ((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                                "0" + (Calendar.getInstance().get(Calendar.MONTH) - 2) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    m3 += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                        (Calendar.getInstance().get(Calendar.MONTH) - 3) + "/" + Calendar.getInstance().get(Calendar.YEAR)) ||
                        ((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                                "0" + (Calendar.getInstance().get(Calendar.MONTH) - 3) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    m2 += colPagesa.getCellData(i);
                } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                        (Calendar.getInstance().get(Calendar.MONTH) - 4) + "/" + Calendar.getInstance().get(Calendar.YEAR)) ||
                        ((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                                "0" + (Calendar.getInstance().get(Calendar.MONTH) - 4) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                    m1 += colPagesa.getCellData(i);
                }
            }

        } else if (Calendar.getInstance().get(Calendar.MONTH) + 1 == 5) {
            gjmPesMuaj(m6, m5, m4, m3, m2, m1);
        } else if (Calendar.getInstance().get(Calendar.MONTH) + 1 == 4) {
            gjmKaterMuaj(m6, m5, m4, m3, m2, m1);
        } else if (Calendar.getInstance().get(Calendar.MONTH) + 1 == 3) {
            gjmTreMuaj(m6, m5, m4, m3, m2, m1);
        } else if (Calendar.getInstance().get(Calendar.MONTH) + 1 == 2) {
            gjmDyMuaj(m6, m5, m4, m3, m2, m1);
        } else if (Calendar.getInstance().get(Calendar.MONTH) + 1 == 1) {
            gjmNjeMuaj(m6, m5, m4, m3, m2, m1);
        }

        chart.getData().clear();
        muajt.getData().add(new XYChart.Data(Calendar.getInstance().get(Calendar.MONTH) - 4 + " " +
                Calendar.getInstance().get(Calendar.YEAR), m1));
        muajt.getData().add(new XYChart.Data(Calendar.getInstance().get(Calendar.MONTH) - 3 + " " +
                Calendar.getInstance().get(Calendar.YEAR), m2));
        muajt.getData().add(new XYChart.Data(Calendar.getInstance().get(Calendar.MONTH) - 2 + " " +
                Calendar.getInstance().get(Calendar.YEAR), m3));
        muajt.getData().add(new XYChart.Data(Calendar.getInstance().get(Calendar.MONTH) - 1 + " " +
                Calendar.getInstance().get(Calendar.YEAR), m4));
        muajt.getData().add(new XYChart.Data(Calendar.getInstance().get(Calendar.MONTH) + " " +
                Calendar.getInstance().get(Calendar.YEAR), m5));
        muajt.getData().add(new XYChart.Data(Calendar.getInstance().get(Calendar.MONTH) + 1 + " " +
                Calendar.getInstance().get(Calendar.YEAR), m6));
        chart.getData().add(muajt);
        for (int i = 0; i < 6; i++) {
            XYChart.Data item = (XYChart.Data) muajt.getData().get(i);
            Tooltip.install(item.getNode(), new Tooltip(item.getYValue() + " €"));
        }

    }

    private void gjmPesMuaj(double m6, double m5, double m4, double m3, double m2, double m1) {
        for (int i = 0; i < tblPunet.getItems().size(); i++) {
            if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m6 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH)) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m5 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) - 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m4 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) - 2) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m3 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) + 3) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m2 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "12/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m1 += colPagesa.getCellData(i);
            }
        }
    }

    private void gjmKaterMuaj(double m6, double m5, double m4, double m3, double m2, double m1) {
        for (int i = 0; i < tblPunet.getItems().size(); i++) {
            if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m6 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH)) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m5 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) - 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m4 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) - 2) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m3 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "11/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m2 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "12/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m1 += colPagesa.getCellData(i);
            }
        }
    }

    private void gjmTreMuaj(double m6, double m5, double m4, double m3, double m2, double m1) {
        for (int i = 0; i < tblPunet.getItems().size(); i++) {
            if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m6 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH)) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m5 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) - 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m4 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "10/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m3 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "11/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m2 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "12/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m1 += colPagesa.getCellData(i);
            }
        }
    }

    private void gjmDyMuaj(double m6, double m5, double m4, double m3, double m2, double m1) {
        for (int i = 0; i < tblPunet.getItems().size(); i++) {
            if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m6 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH)) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m5 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "09/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m4 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "10/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m3 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "11/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m2 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "12/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m1 += colPagesa.getCellData(i);
            }
        }
    }

    private void gjmNjeMuaj(double m6, double m5, double m4, double m3, double m2, double m1) {
        for (int i = 0; i < tblPunet.getItems().size(); i++) {
            if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    (Calendar.getInstance().get(Calendar.MONTH) + 1) + "/" + Calendar.getInstance().get(Calendar.YEAR))) {
                m6 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "08/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m5 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "09/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m4 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "10/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m3 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "11/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m2 += colPagesa.getCellData(i);
            } else if (((String) tblPunet.getColumns().get(2).getCellData(i)).substring(3, 10).equals(
                    "12/" + (Calendar.getInstance().get(Calendar.YEAR) - 1))) {
                m1 += colPagesa.getCellData(i);
            }
        }
    }

    private double mesatarja() {
        Double total = 0.0;
        try {
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select count(*), sum(qmimi) from punet where kryer = 'po' and year(data) = " +
            Calendar.getInstance().get(Calendar.YEAR));
            while (rs.next()) {
                if (rs.getInt(2) > 0 && rs.getInt(1) > 0)
                    total = rs.getInt(2) / rs.getDouble(1);
            }
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return total;
    }

    private int totalVitiAktual() {
        int total = 0;
        try {
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select count(*) from punet where kryer = 'po'");
            while (rs.next()) {
                total = rs.getInt(1);
            }
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return total;
    }

    private int totalPunet() {
        int total = 0;
        try {
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select count(*) from punet");
            while (rs.next()) {
                total = rs.getInt(1);
            }
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return total;
    }

    public void filtroFinancat(TextField puna) {
        try {
            String sql;
            if (!puna.getText().isEmpty())
                sql = "select * from Punet where lower(lloji) like lower('%" + puna.getText() + "%') or lower(konsumatori) like lower('%" + puna.getText() + "%'" +
                        ") order by data desc";
            else
                sql = "select * from Punet order by data desc";
            Connection conn = DriverManager.getConnection(CON_STR, "test", "test");
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            ObservableList<TabelaPunet> data = FXCollections.observableArrayList();
            Format format = new SimpleDateFormat("dd/MM/yyyy");
            while (rs.next()) {
                String d = format.format(rs.getDate("data"));
                data.add(new TabelaPunet(rs.getInt("id"), rs.getString("lloji").toUpperCase(), d,
                        rs.getFloat("qmimi"), rs.getString("konsumatori").toUpperCase(),
                        rs.getString("pershkrimi"), rs.getString("kryer"), rs.getString("makina").toUpperCase()));
            }
            tblPunet.getItems().clear();
            tblPunet.setItems(data);
            stmt.close();
            rs.close();
            conn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void loadThread(Label lbl) {
        Task task = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        lbl.setText(totalVitiAktual() + " / " + totalPunet());
                    }
                });
                return null;
            }
        };
        Thread newT = new Thread(task);
        newT.setDaemon(true);
        newT.start();
    }

    public void loadThreadMes(Label lbl) {
        Task tMes = new Task<Void>() {
            DecimalFormat df = new DecimalFormat("#.00€");

            @Override
            protected Void call() throws Exception {
                Platform.runLater(new Runnable() {
                    @Override
                    public void run() {
                        lbl.setText(df.format(mesatarja()) + "");
                    }
                });
                return null;
            }
        };
        Thread mesT = new Thread(tMes);
        mesT.setDaemon(true);
        mesT.start();
    }
}