package Controllers.FactureClt; import Models.FactureClt.FactureCltDB; import javafx.collections.FXCollections; import Models.FactureClt.FactureCltGestionList; import com.gluonhq.charm.glisten.control.ProgressBar; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; 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.Parent; import javafx.scene.control.Button; import javafx.scene.control.ChoiceBox; 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 FactureCltGestionController implements Initializable { @FXML private AnchorPane PaneFactureGestion ; @FXML private ProgressBar ProgressBarFactureClt; @FXML private Button ButtonSearchFactureClt; @FXML public TableView TableViewFactureCltListGestion; @FXML public TableColumn TabColCodeFacture; @FXML public TableColumn TabColTypeClient; @FXML public TableColumn TabColCodeClient; @FXML public TableColumn TabColMode ; @FXML public TableColumn TabColTotal; @FXML public TableColumn TabColCodeCommande; @FXML public TableColumn TabColCreation; @FXML public TableColumnTabColDetail ; @FXML public TextField TextFieldCodeFacture ; @FXML public TextField TextFieldCodeClient ; @FXML public TextField TextFieldCodeCommande ; @FXML public DatePicker PickerDateCreation; @FXML public RadioButton RadioComptant; @FXML public RadioButton RadioFacilite; @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 ThreadSearchFactureClt; 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; @Override public void initialize(URL url, ResourceBundle rb) { //comboboxnombre des lignes tableview NbrLigne.setItems(cursors); NbrLigne.getSelectionModel().selectFirst(); TableViewFactureCltListGestion.setEditable(true); TabColCodeFacture.setStyle( "-fx-alignment: CENTER;");TabColCodeFacture.getStyleClass().add("Center"); TabColCodeFacture.setCellValueFactory(new PropertyValueFactory("CodeFacture")); TabColTypeClient.setStyle( "-fx-alignment: CENTER;");TabColTypeClient.getStyleClass().add("Center"); TabColTypeClient.setCellValueFactory(new PropertyValueFactory("TypeClient")); TabColCodeClient.setStyle( "-fx-alignment: CENTER;");TabColCodeClient.getStyleClass().add("Center"); TabColCodeClient.setCellValueFactory(new PropertyValueFactory("CodeClient")); TabColMode.setStyle( "-fx-alignment: CENTER;");TabColMode.getStyleClass().add("Center"); TabColMode.setCellValueFactory(new PropertyValueFactory("Mode")); TabColMode.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("Comptant")){ Text text = new Text(item); text.setFill(Color.web("#428BCA")); text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); setGraphic(text); }else if(item!= null && item.equals("Facilité")){ Text text = new Text(item); text.setFill(Color.web("#000000")); text.setFont(Font.font("Arial", FontWeight.BOLD, 14)); setGraphic(text); }else{ setGraphic(null); } } }; return cell; } }); TabColTotal.setStyle( "-fx-alignment: CENTER;");TabColTotal.getStyleClass().add("Center"); TabColTotal.setCellValueFactory(new PropertyValueFactory("Total")); TabColCodeCommande.setStyle( "-fx-alignment: CENTER;");TabColCodeCommande.getStyleClass().add("Center"); TabColCodeCommande.setCellValueFactory(new PropertyValueFactory("CodeCommande")); TabColCreation.setStyle( "-fx-alignment: CENTER;");TabColCreation.getStyleClass().add("Center"); TabColCreation.setCellValueFactory(new PropertyValueFactory("DateCreation")); TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center"); TabColDetail.setCellFactory(new Callback, TableCell>() { @Override public TableCell call(TableColumn personBooleanTableColumn) { return new ButtonCell(); } }); ButtonSearchFactureClt.setOnMouseClicked(new EventHandler() { public void handle(MouseEvent me) { SearchFactureClt(); } }); PaneFactureGestion.setOnKeyPressed(new EventHandler() { @Override public void handle(KeyEvent ke) { if (ke.getCode().equals(KeyCode.ENTER)) { SearchFactureClt(); } } }); RadioComptant.setOnMouseClicked(new EventHandler() { public void handle(MouseEvent me) { SearchFactureClt(); } }); RadioFacilite.setOnMouseClicked(new EventHandler() { public void handle(MouseEvent me) { SearchFactureClt(); } }); GestionSearchFactureClt(); } 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) { try { // get Selected Item FactureCltGestionList current = (FactureCltGestionList) ButtonCell.this.getTableView().getItems().get(ButtonCell.this.getIndex()); String code_facture = current.getCodeFacture(); FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltDetail.fxml")); Parent NodeFactureCltDetail = (Parent)fxmlLoader.load(); FactureCltDetailController FactureCltDetail= fxmlLoader.getController(); FactureCltDetail.PaneSucces.setVisible(false); FactureCltDetail.codeFactClt = code_facture; FactureCltDetail.SowDetailFactureClt(false); PaneFactureGestion.getChildren().clear(); PaneFactureGestion.getChildren().add(NodeFactureCltDetail); FactureCltDetail.ButtonImprimerTraite.setVisible(false); } catch (IOException ex) { Logger.getLogger(FactureCltAjouterController.class.getName()).log(Level.SEVERE, null, ex); } } }); } //Display button if the row is not empty @Override protected void updateItem(Boolean t, boolean empty) { if(!empty){ setGraphic(cellButton); } else { setGraphic(null); } } } @FXML private void FactureCltAjouterButtonAction(ActionEvent event) throws IOException { PaneFactureGestion.getChildren().clear(); PaneFactureGestion.getChildren().add((Node) FXMLLoader.load(getClass().getResource("/Views/FactureClt/FactureCltAjouter.fxml"))); } /****************************************************************************** * * * * Methode last Next TableView * * * * ******************************************************************************/ private void SearchFactureClt() { ProgressBarFactureClt.setVisible(true); ButtonSearchFactureClt.setDisable(true); ThreadSearchFactureClt = new Service(){ @Override protected Task createTask(){ return new Task(){ @Override protected Void call() throws Exception{ position = 0; actuellepage = 1; String DateCreation = ""; if(PickerDateCreation.getValue() != null){ DateCreation = PickerDateCreation.getValue().toString(); } // 0comptant 1facilité String TypeRegement = ""; if(RadioComptant.isSelected()){ TypeRegement = "0"; }else if(RadioFacilite.isSelected()){ TypeRegement = "1"; } ObservableList ListFactureClts = new FactureCltDB().SearchFactureCltGestion( position, nbrligne, TextFieldCodeFacture.getText(), TextFieldCodeClient.getText(), TypeRegement, TextFieldCodeCommande.getText(), DateCreation); TableViewFactureCltListGestion.setItems(ListFactureClts); totalcount = new FactureCltDB().nbrFactureCltGestion(TextFieldCodeFacture.getText(), TextFieldCodeClient.getText(), TypeRegement, TextFieldCodeCommande.getText(), DateCreation); 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; } }; } }; ThreadSearchFactureClt.setOnSucceeded(new EventHandler(){ @Override public void handle(WorkerStateEvent event){ ProgressBarFactureClt.setVisible(false); ButtonSearchFactureClt.setDisable(false); LabelCount.setText(totalcount.toString()); } }); ThreadSearchFactureClt.start(); } private void NextLastSearchFactureClt(Integer ParmPosition, Integer ParamNbrligne) { ProgressBarFactureClt.setVisible(true); ButtonSearchFactureClt.setDisable(true); ThreadSearchFactureClt = new Service(){ @Override protected Task createTask(){ return new Task(){ @Override protected Void call() throws Exception{ String DateCreation = ""; if(PickerDateCreation.getValue() != null){ DateCreation = PickerDateCreation.getValue().toString(); } ObservableList ListFactureClts = new FactureCltDB().SearchFactureCltGestion(ParmPosition, ParamNbrligne, TextFieldCodeFacture.getText(), TextFieldCodeClient.getText(), "", TextFieldCodeCommande.getText(), DateCreation); TableViewFactureCltListGestion.setItems(ListFactureClts); return null; } }; } }; ThreadSearchFactureClt.setOnSucceeded(new EventHandler(){ @Override public void handle(WorkerStateEvent event){ ProgressBarFactureClt.setVisible(false); ButtonSearchFactureClt.setDisable(false); } }); ThreadSearchFactureClt.start(); } private void GestionSearchFactureClt() { 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; NextLastSearchFactureClt(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; NextLastSearchFactureClt(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; NextLastSearchFactureClt(position, nbrligne); actuellepage=actuellepage-3 ; ActuellePage.setText(Integer.toString(actuellepage)); } } }); } }