565 lines
24 KiB
Java
565 lines
24 KiB
Java
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<Reglement> TableViewReglementFrs;
|
|
@FXML public TableColumn<Reglement ,String> TabColNumero;
|
|
@FXML public TableColumn<Reglement ,String> TabColMontant;
|
|
@FXML public TableColumn<Reglement ,String> TabColModePaiement;
|
|
@FXML public TableColumn<Reglement ,String> TabColFournisseur;
|
|
@FXML public TableColumn<Reglement ,String> TabColTypePaiement;
|
|
@FXML public TableColumn<Reglement ,String> TabColDatePayement;
|
|
@FXML public TableColumn<Reglement ,Boolean> 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<Void> 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<String> 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<Reglement, String>("Numero"));
|
|
|
|
TabColFournisseur.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;");
|
|
TabColFournisseur.getStyleClass().add("Center");
|
|
TabColFournisseur.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Reglement,String>, ObservableValue<String>>() {
|
|
@Override
|
|
public ObservableValue<String> call(TableColumn.CellDataFeatures<Reglement, String> 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<Reglement, String>("ModePaiement"));
|
|
TabColModePaiement.setCellFactory(new Callback<TableColumn<Reglement,String>,TableCell<Reglement,String>>(){
|
|
@Override
|
|
public TableCell<Reglement, String> call(TableColumn<Reglement, String> param) {
|
|
TableCell<Reglement, String> cell = new TableCell<Reglement, String>(){
|
|
@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<Reglement, String>("Montant"));
|
|
TabColMontant.setCellFactory(new Callback<TableColumn<Reglement,String>,TableCell<Reglement,String>>(){
|
|
@Override
|
|
public TableCell<Reglement, String> call(TableColumn<Reglement, String> param) {
|
|
TableCell<Reglement, String> cell = new TableCell<Reglement, String>(){
|
|
@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<Reglement, String>("TypePaiement"));
|
|
TabColTypePaiement.setCellFactory(new Callback<TableColumn<Reglement,String>,TableCell<Reglement,String>>(){
|
|
@Override
|
|
public TableCell<Reglement, String> call(TableColumn<Reglement, String> param) {
|
|
TableCell<Reglement, String> cell = new TableCell<Reglement, String>(){
|
|
@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<Reglement, String>("DateTimeCreation"));
|
|
|
|
|
|
|
|
TabColDetail.setStyle( "-fx-alignment: CENTER;");TabColDetail.getStyleClass().add("Center");
|
|
TabColDetail.setCellFactory(new Callback<TableColumn<Reglement, Boolean>, TableCell<Reglement, Boolean>>() {
|
|
@Override
|
|
public TableCell<Reglement, Boolean> call(TableColumn<Reglement, Boolean> personBooleanTableColumn) {
|
|
return new ButtonCell();
|
|
}
|
|
});
|
|
|
|
TextFieldFournisseur.textProperty().addListener(new ChangeListener<String>() {
|
|
@Override
|
|
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
|
|
if(newValue.contains(" - ")){
|
|
String[] array = newValue.split(" - ", -1);
|
|
IdFournisseur = array[0];
|
|
}
|
|
}
|
|
});
|
|
|
|
ComboBoxModePaiement.valueProperty().addListener(new ChangeListener<String>() {
|
|
@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<MouseEvent>() {
|
|
public void handle(MouseEvent me) {
|
|
SearchGestionReglement();
|
|
}
|
|
});
|
|
|
|
AnchorPaneGestionReglement.setOnKeyPressed(new EventHandler<KeyEvent>() {
|
|
@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<Reglement, Boolean> {
|
|
|
|
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<ActionEvent>(){ //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<Void>(){
|
|
@Override
|
|
protected Task<Void> createTask(){
|
|
return new Task<Void>(){
|
|
@Override
|
|
protected Void call() throws Exception{
|
|
|
|
ListFournisseur = new FournisseurDB().getAllFournisseur("CONCAT(`id_fourisseur`,' - ',`nom`)");
|
|
TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur);
|
|
|
|
return null;
|
|
}
|
|
};
|
|
}
|
|
};
|
|
ThreadSearchGestionReglement.setOnSucceeded(new EventHandler<WorkerStateEvent>(){
|
|
@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<Void>(){
|
|
@Override
|
|
protected Task<Void> createTask(){
|
|
return new Task<Void>(){
|
|
@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<Reglement> 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<WorkerStateEvent>(){
|
|
@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<Void>(){
|
|
@Override
|
|
protected Task<Void> createTask(){
|
|
return new Task<Void>(){
|
|
@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<Reglement> ListGestionReglement = new ReglementDB().SearchGestionReglementGestion(ParmPosition, ParamNbrligne, TextFieldNumero.getText(), IdFournisseur, TextFieldMontant.getText(), DatePayer, TypeRegement, Paiement);
|
|
|
|
TableViewReglementFrs.setItems(ListGestionReglement);
|
|
|
|
return null;
|
|
}
|
|
};
|
|
}
|
|
};
|
|
|
|
ThreadSearchGestionReglement.setOnSucceeded(new EventHandler<WorkerStateEvent>(){
|
|
@Override
|
|
public void handle(WorkerStateEvent event){
|
|
ProgressBarGestionReglement.setVisible(false);
|
|
ButtonSearchGestionReglement.setDisable(false);
|
|
}
|
|
});
|
|
ThreadSearchGestionReglement.start();
|
|
}
|
|
|
|
private void GestionSearchGestionReglement()
|
|
{
|
|
NbrLigne.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
|
|
|
|
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<MouseEvent>(){
|
|
@Override
|
|
public void handle(MouseEvent event) {
|
|
if(actuellepage<nbrpage)
|
|
{
|
|
position=position+nbrligne;
|
|
NextLastSearchGestionReglement(position, nbrligne);
|
|
actuellepage=actuellepage+1 ;
|
|
ActuellePage.setText(Integer.toString(actuellepage));
|
|
|
|
}
|
|
}
|
|
});
|
|
|
|
//last page
|
|
lastgroupe.setOnMousePressed(new EventHandler<MouseEvent>(){
|
|
@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<MouseEvent>(){
|
|
@Override
|
|
public void handle(MouseEvent event) {
|
|
if(actuellepage+3<nbrpage)
|
|
{
|
|
position=(position+4)+nbrligne;
|
|
NextLastSearchGestionReglement(position, nbrligne);
|
|
actuellepage=actuellepage+3 ;
|
|
ActuellePage.setText(Integer.toString(actuellepage));
|
|
|
|
}
|
|
}
|
|
});
|
|
|
|
//last page avec un pas de -5
|
|
retourgroupe.setOnMousePressed(new EventHandler<MouseEvent>(){
|
|
@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));
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
}
|