package Controllers.Reglement; import Models.Fournisseur.FournisseurDB; import Models.Reglement.Reglement; import Models.Reglement.ReglementDB; import com.gluonhq.charm.glisten.control.ProgressBar; import java.io.IOException; import org.controlsfx.control.textfield.TextFields; import java.net.URL; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.ResourceBundle; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Service; import javafx.concurrent.Task; import javafx.concurrent.WorkerStateEvent; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ChoiceBox; import javafx.scene.control.ComboBox; import javafx.scene.control.DatePicker; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; 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.KeyEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.AnchorPane; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javafx.scene.text.Text; import javafx.util.Callback; /** * FXML Controller class * @author Maher Ben Tili */ public class GestionReglementController implements Initializable { @FXML private ProgressBar ProgressBarGestionReglement; @FXML private Button ButtonSearchGestionReglement; @FXML private AnchorPane AnchorPaneGestionReglement; @FXML private TextField TextFieldFournisseur ; @FXML public TextField TextFieldNumero ; @FXML public TextField TextFieldMontant ; @FXML private ComboBox ComboBoxModePaiement; @FXML private DatePicker DatePickerDatePayer; @FXML private RadioButton RadioComptant; @FXML private RadioButton RadioFacilite; @FXML public TableView TableViewReglementFrs; @FXML public TableColumn TabColNumero; @FXML public TableColumn TabColMontant; @FXML public TableColumn TabColModePaiement; @FXML public TableColumn TabColFournisseur; @FXML public TableColumn TabColTypePaiement; @FXML public TableColumn TabColDatePayement; @FXML public TableColumn TabColDetail; @FXML private Text ActuellePage ; @FXML private Text NbrPage ; @FXML private Group nextgroupe ; @FXML private Group avancergroupe ; @FXML private Group lastgroupe ; @FXML private Group retourgroupe ; @FXML private Label LabelCount; @FXML private ChoiceBox NbrLigne ; private Service ThreadSearchGestionReglement; ObservableList cursors = FXCollections.observableArrayList("10","15","20"); private Integer nbrligne = 10 ; private Integer totalcount = 0; private Integer nbrpage = 0; private Integer actuellepage = 1; Integer position = 0; public ArrayList ListFournisseur = new ArrayList<>(); ReglementDB reglementDB= new ReglementDB(); DecimalFormat Formatter = new DecimalFormat("##,###.## "); ObservableList ListPaiement = FXCollections.observableArrayList("Espace", "Chèque", "Carte bancaire", "Traite"); String IdFournisseur = ""; String Paiement = ""; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { setFournisseurFormData(); ComboBoxModePaiement.setItems(ListPaiement); NbrLigne.setItems(cursors); NbrLigne.getSelectionModel().selectFirst(); TabColNumero.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); TabColNumero.getStyleClass().add("Center"); TabColNumero.setCellValueFactory(new PropertyValueFactory("Numero")); TabColFournisseur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); TabColFournisseur.getStyleClass().add("Center"); TabColFournisseur.setCellValueFactory(new Callback, ObservableValue>() { @Override public ObservableValue call(TableColumn.CellDataFeatures data) { return new SimpleStringProperty(data.getValue().getFournisseur().getNom()); } }); TabColModePaiement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); TabColModePaiement.getStyleClass().add("Center"); TabColModePaiement.setCellValueFactory(new PropertyValueFactory("ModePaiement")); TabColModePaiement.setCellFactory(new Callback,TableCell>(){ @Override public TableCell call(TableColumn param) { TableCell cell = new TableCell(){ @Override public void updateItem(String item, boolean empty) { //0 :espace | 1:Chèque | 2 :carte bancaire | 3: Traite if(item!= null && item.equals("0")){ Text text = new Text("Espace"); text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); setGraphic(text); }else if(item!= null && item.equals("1")){ Text text = new Text("Chèque"); text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); setGraphic(text); }else if(item!= null && item.equals("2")){ Text text = new Text("Carte Bancaire"); text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); setGraphic(text); }else if(item!= null && item.equals("3")){ Text text = new Text("Traite"); text.setFont(Font.font("Arial", FontWeight.NORMAL, 14)); setGraphic(text); }else{ setGraphic(null); } } }; return cell; } }); TabColMontant.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); TabColMontant.getStyleClass().add("Center"); TabColMontant.setCellValueFactory(new PropertyValueFactory("Montant")); TabColMontant.setCellFactory(new Callback,TableCell>(){ @Override public TableCell call(TableColumn param) { TableCell cell = new TableCell(){ @Override public void updateItem(String item, boolean empty) { if(item!= null){ Text text = new Text(Formatter.format(Float.parseFloat(item))); setGraphic(text); }else{ setGraphic(null); } } }; return cell; } }); TabColTypePaiement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); TabColTypePaiement.getStyleClass().add("Center"); TabColTypePaiement.setCellValueFactory(new PropertyValueFactory("TypePaiement")); TabColTypePaiement.setCellFactory(new Callback,TableCell>(){ @Override public TableCell call(TableColumn param) { TableCell cell = new TableCell(){ @Override public void updateItem(String item, boolean empty) { if(item!= null && item.equals("0")){ Text text = new Text("Comptant"); text.setFill(Color.web("#428BCA")); text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); setGraphic(text); }else if(item!= null && item.equals("1")){ Text text = new Text("Facilité"); text.setFill(Color.web("#000000")); text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); setGraphic(text); }else{ setGraphic(null); } } }; return cell; } }); TabColDatePayement.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;"); TabColDatePayement.getStyleClass().add("Center"); TabColDatePayement.setCellValueFactory(new PropertyValueFactory("DateTimeCreation")); TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); TabColDetail.setCellFactory(new Callback, TableCell>() { @Override public TableCell call(TableColumn personBooleanTableColumn) { return new ButtonCell(); } }); TextFieldFournisseur.textProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, String oldValue, String newValue) { if(newValue.contains(" - ")){ String[] array = newValue.split(" - ", -1); IdFournisseur = array[0]; } } }); ComboBoxModePaiement.valueProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue ov, String t, String ValLocal) { //0 :espace | 1:Chèque | 2 :carte bancaire | 3: Traite if(ValLocal.equals("Espace")){ Paiement = "0"; }else if(ValLocal.equals("Chèque")){ Paiement = "1"; }else if(ValLocal.equals("Carte bancaire")){ Paiement = "2"; }else if(ValLocal.equals("Traite")){ Paiement = "3"; } } }); ButtonSearchGestionReglement.setOnMouseClicked(new EventHandler() { public void handle(MouseEvent me) { SearchGestionReglement(); } }); AnchorPaneGestionReglement.setOnKeyPressed(new EventHandler() { @Override public void handle(KeyEvent ke) { if (ke.getCode().equals(KeyCode.ENTER)) { SearchGestionReglement(); } } }); GestionSearchGestionReglement(); } @FXML private void ReglementAjouterButtonAction(ActionEvent event) throws IOException { AnchorPaneGestionReglement.getChildren().clear(); AnchorPaneGestionReglement.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/Reglement/ReglementAjouter1.fxml"))); } private class ButtonCell extends TableCell { final Button cellButton = new Button(); ButtonCell(){ cellButton.getStyleClass().add("btn-icon-primary"); Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/detailbutton.png")); ImageView buttonGraphic = new ImageView(); buttonGraphic.setImage(coffeeImage); cellButton.setGraphic(buttonGraphic); cellButton.setOnAction(new EventHandler(){ //Action when the button is pressed @Override public void handle(ActionEvent t) { Reglement reglement = ((Reglement)getTableRow().getItem()); ReglementDialogDetailController ReglementDialogDetail = new ReglementDialogDetailController(); ReglementDialogDetail.Show(); ReglementDialogDetail.LanchShowReglement(reglement.getNumero()); } }); } //Display button if the row is not empty @Override protected void updateItem(Boolean t, boolean empty) { if(!empty){ setGraphic(cellButton); } else { setGraphic(null); } } } private void setFournisseurFormData() { ProgressBarGestionReglement.setVisible(true); ThreadSearchGestionReglement = new Service(){ @Override protected Task createTask(){ return new Task(){ @Override protected Void call() throws Exception{ ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)"); TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur); return null; } }; } }; ThreadSearchGestionReglement.setOnSucceeded(new EventHandler(){ @Override public void handle(WorkerStateEvent event){ ProgressBarGestionReglement.setVisible(false); } }); ThreadSearchGestionReglement.start(); } /****************************************************************************** * * * * Methode last Next TableView * * * * ******************************************************************************/ private void SearchGestionReglement() { ProgressBarGestionReglement.setVisible(true); ButtonSearchGestionReglement.setDisable(true); ThreadSearchGestionReglement = new Service(){ @Override protected Task createTask(){ return new Task(){ @Override protected Void call() throws Exception{ position = 0; actuellepage = 1; String DatePayer = ""; if(DatePickerDatePayer.getValue() != null){ DatePayer = DatePickerDatePayer.getValue().toString(); } // 0comptant 1facilité String TypeRegement = ""; if(RadioComptant.isSelected()){ TypeRegement = "0"; }else if(RadioFacilite.isSelected()){ TypeRegement = "1"; } ObservableList ListGestionReglements = new ReglementDB().SearchGestionReglementGestion( position, nbrligne, TextFieldNumero.getText(), IdFournisseur, TextFieldMontant.getText(), DatePayer, TypeRegement, Paiement); TableViewReglementFrs.setItems(ListGestionReglements); totalcount = new ReglementDB().nbrGestionReglementGestion(TextFieldNumero.getText(), IdFournisseur, TextFieldMontant.getText(), DatePayer, TypeRegement, Paiement); if(totalcount > 0){ ActuellePage.setText("1"); }else{ ActuellePage.setText("0"); } if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ; } else{ nbrpage = (totalcount / nbrligne) + 1 ; } NbrPage.setText(Integer.toString(nbrpage)); return null; } }; } }; ThreadSearchGestionReglement.setOnSucceeded(new EventHandler(){ @Override public void handle(WorkerStateEvent event){ ProgressBarGestionReglement.setVisible(false); ButtonSearchGestionReglement.setDisable(false); LabelCount.setText(totalcount.toString()); } }); ThreadSearchGestionReglement.start(); } private void NextLastSearchGestionReglement(Integer ParmPosition, Integer ParamNbrligne) { ProgressBarGestionReglement.setVisible(true); ButtonSearchGestionReglement.setDisable(true); ThreadSearchGestionReglement = new Service(){ @Override protected Task createTask(){ return new Task(){ @Override protected Void call() throws Exception{ String DatePayer = ""; if(DatePickerDatePayer.getValue() != null){ DatePayer = DatePickerDatePayer.getValue().toString(); } // 0comptant 1facilité String TypeRegement = ""; if(RadioComptant.isSelected()){ TypeRegement = "0"; }else if(RadioFacilite.isSelected()){ TypeRegement = "1"; } ObservableList ListGestionReglement = new ReglementDB().SearchGestionReglementGestion(ParmPosition, ParamNbrligne, TextFieldNumero.getText(), IdFournisseur, TextFieldMontant.getText(), DatePayer, TypeRegement, Paiement); TableViewReglementFrs.setItems(ListGestionReglement); return null; } }; } }; ThreadSearchGestionReglement.setOnSucceeded(new EventHandler(){ @Override public void handle(WorkerStateEvent event){ ProgressBarGestionReglement.setVisible(false); ButtonSearchGestionReglement.setDisable(false); } }); ThreadSearchGestionReglement.start(); } private void GestionSearchGestionReglement() { NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { public void changed(ObservableValue ov, Number value, Number new_value) { nbrligne= Integer.parseInt((String) cursors.get(new_value.intValue())); if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} else{ nbrpage = (totalcount / nbrligne) + 1 ; } NbrPage.setText(Integer.toString(nbrpage)); position=0; ActuellePage.setText("1"); actuellepage=1; NextLastSearchGestionReglement(position, nbrligne); } }); if(totalcount % nbrligne==0){ nbrpage = totalcount / nbrligne ;} else{ nbrpage = (totalcount / nbrligne) + 1 ; } NbrPage.setText(Integer.toString(nbrpage)); //next page nextgroupe.setOnMousePressed(new EventHandler(){ @Override public void handle(MouseEvent event) { if(actuellepage(){ @Override public void handle(MouseEvent event) { if(actuellepage>1) { position=position-nbrligne; NextLastSearchGestionReglement(position, nbrligne); actuellepage=actuellepage-1 ; ActuellePage.setText(Integer.toString(actuellepage)); } } }); //next page avec pas de 5 avancergroupe.setOnMousePressed(new EventHandler(){ @Override public void handle(MouseEvent event) { if(actuellepage+3(){ @Override public void handle(MouseEvent event) { if(actuellepage-3>1){ position=(position-4)-nbrligne; NextLastSearchGestionReglement(position, nbrligne); actuellepage=actuellepage-3 ; ActuellePage.setText(Integer.toString(actuellepage)); } } }); } }