package Controllers.FactureFrs;

import Controllers.CommandeClt.CommandeCltPasserController;
import Controllers.Dialog.MessageControle;
import Controllers.Produit.RechercherProduitController;
import Controllers.Traitement.Adaptateur;
import Controllers.Traitement.MyWindow;
import Controllers.Traitement.ParametreSystem;
import Controllers.Traitement.contro;
import Models.FactureFrs.FactureFrs;
import Models.FactureFrs.FactureFrsDB;
import Models.Fournisseur.Fournisseur;
import Models.Fournisseur.FournisseurDB;
import Models.Produit.ListeProduit;
import Models.Produit.Produit;
import Models.Produit.ProduitDB;
import Models.Stock.StockDB;
import java.io.IOException;
import java.net.URL;
import java.time.LocalDate;
import java.time.LocalDateTime;
import javafx.application.Platform;
import java.util.ArrayList;
import java.util.ResourceBundle;
import org.apache.log4j.Logger;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.ProgressIndicator;
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.control.cell.TextFieldTableCell;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
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;
import org.controlsfx.control.textfield.TextFields;

/**
 * FXML Controller class
 * @author Maher Ben Tili
 */
public class FactureFrsAjouterController implements Initializable {

    Logger logger = Logger.getLogger(FactureFrsAjouterController.class.getName());
    
    @FXML public AnchorPane PaneFactureFrsAjouter ;
    
    @FXML public Text TotalTVA ;
    @FXML public Text Remise ;
    @FXML public Text NetAPayer ;
    @FXML public Text Timbre ;
    @FXML public Text TotalHTNet ;
    
    @FXML public Button RechercheProduit ;
    @FXML public Button ButtonFactureFrsAjouter;
     
    @FXML public TableView<ListeProduit> TableViewListeProduit ;
    @FXML public TableColumn<ListeProduit ,String> TabColReference;
    @FXML public TableColumn<ListeProduit ,String> TabColDesignaton;
    @FXML public TableColumn<ListeProduit ,String> TabColQuantite ;
    @FXML public TableColumn<ListeProduit ,String> TabColPrixHT;
    @FXML public TableColumn<ListeProduit ,String> TabColTotalHT;
    @FXML public TableColumn<ListeProduit ,String> TabColRemise;
    @FXML public TableColumn<ListeProduit ,String> TabColTVA;
    @FXML public TableColumn<ListeProduit ,String> TabColTotalTTC;
    @FXML public TableColumn<ListeProduit ,Boolean> TabColAddAction ;
    
    
    @FXML public TextField  TextFieldNumero ;
    @FXML public TextField  TextFieldTransporteur ;
    @FXML public TextField  TextFieldHeur ;
    @FXML private TextField TextFieldFournisseur ;
    @FXML public DatePicker DatePickerDateReception;
    
    
    
    @FXML public ChoiceBox ChoiceBoxLocalReception ;
    
    @FXML public Text TextNumero ;
    @FXML public Text TextHeur ;
    @FXML public Text TextDateReception;
    @FXML public Text TextFournisseur ;
    @FXML public Text TextLocalReception ;
    
    @FXML public ProgressIndicator ProgressIndicatorSaveFactureFrs ;
    
    
    public ObservableList<ListeProduit> ListProd = FXCollections.observableArrayList();
    Produit produit=  new Produit();
    ProduitDB produitDB= new ProduitDB();
    contro Controle = new contro();
    
    public  ArrayList<String> ListFournisseur = new  ArrayList<>();
    public  ArrayList<String> ListLocale = new  ArrayList<>();
    
    float  netaPayer = 0;
    float  Remises = 0;
    float  totalTVA = 0;
    float  total_H_T_Net= 0;
        
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
       
        DatePickerDateReception.setValue(LocalDate.now());
        TextFieldHeur.setText(LocalDateTime.now().getHour()+":"+LocalDateTime.now().getMinute());

        TabColReference.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("reference"));
        TabColDesignaton.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("designation"));

        TabColQuantite.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("quantite"));
        TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;");
        TabColQuantite.getStyleClass().add("Center");

        TabColPrixHT.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("PrixHT"));
        TabColPrixHT.setStyle( "-fx-alignment: CENTER;");
        TabColPrixHT.getStyleClass().add("Center");

        TabColRemise.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("Remise"));
        TabColRemise.setStyle( "-fx-alignment: CENTER;");
        TabColRemise.getStyleClass().add("Center");
        
        TabColTotalHT.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("TotalHT"));
        TabColTotalHT.setStyle( "-fx-alignment: CENTER;");
        TabColTotalHT.getStyleClass().add("Center");

        TabColTVA.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("TVA"));
        TabColTVA.setStyle( "-fx-alignment: CENTER;");
        TabColTVA.getStyleClass().add("Center");

        TabColTotalTTC.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("TotalTTC"));
        TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;");
        TabColTotalTTC.getStyleClass().add("Center");

        TabColReference.setCellFactory(TextFieldTableCell.<ListeProduit>forTableColumn());
        TabColQuantite.setCellFactory(TextFieldTableCell.<ListeProduit>forTableColumn());
        TabColRemise.setCellFactory(TextFieldTableCell.<ListeProduit>forTableColumn());
        
        TabColAddAction.setSortable(true);
        TabColAddAction.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ListeProduit, Boolean>, 
                ObservableValue<Boolean>>() {
                @Override
                public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<ListeProduit, Boolean> p) {
                    return new SimpleBooleanProperty(p.getValue() != null);
                }
            });

        // create a cell value factory with an add button for each row in the table.
        TabColAddAction.setCellFactory(new Callback<TableColumn<ListeProduit, Boolean>, TableCell<ListeProduit, Boolean>>() {
              @Override 
              public TableCell<ListeProduit, Boolean> call(TableColumn<ListeProduit, Boolean> personBooleanTableColumn) {
                return new FactureFrsAjouterController.ButtonCell();
              }
            });
        TabColAddAction.setStyle( "-fx-alignment: CENTER;");
        TabColAddAction.getStyleClass().add("Center");

        StockDB Stock = new StockDB();
        ListLocale = Stock.getAllListLocal();
        ChoiceBoxLocalReception.getItems().addAll(ListLocale);
        
        ListFournisseur = new FournisseurDB().getIdNomFournisseur();
        TextFields.bindAutoCompletion(TextFieldFournisseur, ListFournisseur);
        
        
        this.ReferenceMouseClick();
        this.QantiteMouseClick();
        this.RemiseMouseClick();
        
        TabColAddAction.setSortable(true);
        TabColAddAction.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ListeProduit, Boolean>, 
            ObservableValue<Boolean>>() {
            @Override
            public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<ListeProduit, Boolean> p) {
                return new SimpleBooleanProperty(p.getValue() != null);
            }
        });
        
        // create a cell value factory with an add button for each row in the table.
        TabColAddAction.setCellFactory(new Callback<TableColumn<ListeProduit, Boolean>, TableCell<ListeProduit, Boolean>>() {
              @Override 
              public TableCell<ListeProduit, Boolean> call(TableColumn<ListeProduit, Boolean> personBooleanTableColumn) {
                return new FactureFrsAjouterController.ButtonCell();
              }
        });
    
    
        TableViewListeProduit.setItems(ListProd);
       

        //Ajouter une ligne vide clors ce que en click sur la tableview
        TableViewListeProduit.setOnMouseClicked(new EventHandler<javafx.scene.input.MouseEvent>(){
            public void handle(MouseEvent event){
                int nbrligne = TableViewListeProduit.getItems().size() ;
                if(nbrligne == 0){
                    ListProd.add(new ListeProduit("","","","","","","",""));
                    TableViewListeProduit.setItems(ListProd);
                }
                else{
                    ListeProduit Liste =  TableViewListeProduit.getItems().get(nbrligne - 1);
                    if(!Liste.getTotalTTC().isEmpty()){
                       ListProd.add(new ListeProduit("","","","","","","",""));
                       TableViewListeProduit.setItems(ListProd); 
                       TableViewListeProduit.getSelectionModel().select(nbrligne);
                    }
                }    
            }
        });
        
        
        ButtonFactureFrsAjouter.setOnAction(new EventHandler<ActionEvent>() {     //supprimer le message du suucés et reaficher les formulaires  
            @Override
            public void handle(ActionEvent event) {
                
                ButtonFactureFrsAjouter.setText("");
                ButtonFactureFrsAjouter.setDisable(true);
                ProgressIndicatorSaveFactureFrs.setVisible(true);
                
                if( Controle.ContrNumeriqueNotnull(TextFieldNumero, TextNumero) &&
                    Controle.ContrNull(TextFieldFournisseur, TextFournisseur) &&
                    Controle.ContrNullDatePicker(DatePickerDateReception, TextDateReception) &&
                    Controle.ContrHour(TextFieldHeur, TextHeur) &&
                    Controle.ContrNullValue(ChoiceBoxLocalReception, TextLocalReception)
                ){
                    
                    Runnable task = new Runnable(){// Create a Runnable
                        public void run(){
                            Platform.runLater(new Runnable(){
                                @Override
                                public void run(){
                                    String Numero = TextFieldNumero.getText();
                                    String IdFournisseur = TextFieldFournisseur.getText().split(" - ", -1)[0];
                                    FactureFrsDB FactureDB = new FactureFrsDB();
                                    String IdFactureFrs = FactureDB.getFactureFrs(null, Numero, IdFournisseur).getIdFactureFrs();
                                   if(IdFactureFrs != null){
                                        TextFieldNumero.setStyle("-fx-border-color:#f20606;");
                                        TextNumero.setText("Facture Fournisseur existe déja");
                                    }else{
                                        if(ListProd.size()>0){
                                            FactureFrs FactureFrs = SetFacture();
                                            FactureDB.setFactureFrsDB(FactureFrs);
                                            try {
                                                FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureFrs/FactureFrsDetail.fxml"));
                                                Parent ParentFxmlFournisseur = (Parent)fxmlLoader.load();

                                                FactureFrsDetailController FactureFrsDetail = fxmlLoader.getController();
                                                FactureFrsDetail.setDataFactureDetailFrs(FactureFrs.getIdFactureFrs());
                                                FactureFrsDetail.PaneSucessFrs.setVisible(true);
                                                PaneFactureFrsAjouter.getChildren().clear();
                                                PaneFactureFrsAjouter.getChildren().add(ParentFxmlFournisseur);

                                            }catch (IOException ex) {
                                                logger.error("FactureFrsAjouterController  : FactureFrsDetail.fxml :" + ex.getMessage());
                                            }
                                        }else{
                                            final MessageControle messagecontrol = new MessageControle();
                                            Text text3 = new Text();
                                            text3.setText("Vous devez ajouter au moin un produit à la liste des produits");
                                            text3.setFont(Font.font("Arial", FontWeight.BOLD, 13));
                                            text3.setFill(Color.web("#363a38"));
                                            messagecontrol.DetailMSG.getChildren().add(text3);

                                            messagecontrol.bouttonOK.setOnAction(new EventHandler<ActionEvent>() {
                                                @Override
                                                public void handle(ActionEvent event) {
                                                    messagecontrol.stackpane.setVisible(false);
                                                }
                                            });
                                            messagecontrol.ShowNotification();
                                        }
                                        
                                    }
                                }
                            });	
                        }
                    };
                    Thread backgroundThread = new Thread(task);// Run the task in a background thread
                    backgroundThread.setDaemon(true);// Terminate the running thread if the application exits
                    backgroundThread.start();// Start the thread
                }
                
                ButtonFactureFrsAjouter.setText("Enregister La Facture");
                ButtonFactureFrsAjouter.setDisable(false);
                ProgressIndicatorSaveFactureFrs.setVisible(false);
                
            }
        });
    }  
    
    public FactureFrs SetFacture(){
        FactureFrs Facture = new FactureFrs();
        
        if(!TextFieldFournisseur.getText().equals("")){
            String[] Fournisseur = TextFieldFournisseur.getText().split(" - ", -1);
            Fournisseur Frs = new Fournisseur();
            Frs.setCode(Fournisseur[0]);
            Frs.setNom(Fournisseur[1]);
            Facture.setFournisseur(Frs);
        }
        
        if(ChoiceBoxLocalReception.getValue() != null){
            Facture.setLocal(ChoiceBoxLocalReception.getValue().toString());
        }
        
        if(DatePickerDateReception.getValue() != null){
            Facture.setDateCreation(DatePickerDateReception.getValue().toString());
        }
        
        Facture.setNumero(TextFieldNumero.getText());
        Facture.setHeurCreation(TextFieldHeur.getText());
        Facture.setTotalHorsTaxNet(Adaptateur.floatDeleZero(total_H_T_Net));
        Facture.setTotalTVA(Adaptateur.floatDeleZero(totalTVA));
        Facture.setRemise(Adaptateur.floatDeleZero(Remises));
        Facture.setNetAPayer(Adaptateur.floatDeleZero(netaPayer));
        Facture.setTimbre(Timbre.getText());
        Facture.setListProduit(ListProd);
        Facture.setTypeReglement(null);
        Facture.setEtatReglement(null);
        
       
        return Facture;
    }
    
    
    public void getFacture(FactureFrs Facture){
        
        TextFieldNumero.setText(Facture.getNumero());
        TextFieldHeur.setText(Facture.getHeurCreation());
        DatePickerDateReception.setValue(Adaptateur.StringToLocalDate(Facture.getDateCreation()));
        
        Fournisseur Frs = Facture.getFournisseur();
        if(Frs != null){
            TextFieldFournisseur.setText(Frs.getCode()+" - "+Frs.getNom());
        }
        
        String Local = Facture.getLocal();
        if(Local != null){
            int indexLocale = ListLocale.indexOf(Local);
            ChoiceBoxLocalReception.getSelectionModel().select(indexLocale);
        }
    }
    
    //Define the button cell
    private class ButtonCell extends TableCell<ListeProduit, Boolean> {
        
        final Button cellButton = new Button();
        
        ButtonCell(){
            cellButton.getStyleClass().add("btn-danger");
            Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icondelete.png"));
            ImageView buttonGraphic = new ImageView();
            buttonGraphic.setImage(coffeeImage);
            cellButton.setGraphic(buttonGraphic);

            //Action when the button is pressed
            cellButton.setOnAction(new EventHandler<ActionEvent>(){
                @Override
                public void handle(ActionEvent t) {
                    int selectdIndex = getTableRow().getIndex();
                    ListProd.remove(selectdIndex);
                    CalculeListeProduit();
                    TableViewListeProduit.setStyle(".table-row-cell:selected{ -fx-background-color:transparent ;}");
                    
                }
            });
        }
        //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 AddLigneButtonAction(ActionEvent event) throws IOException {
        int nbrligne = TableViewListeProduit.getItems().size() ;
        if(nbrligne == 0){
            ListProd.add(new ListeProduit("","","","","","","",""));
            TableViewListeProduit.setItems(ListProd);
        }
        else{
            ListeProduit Liste =  TableViewListeProduit.getItems().get(nbrligne - 1);
            if(!Liste.getTotalTTC().isEmpty()){
               ListProd.add(new ListeProduit("","","","","","","",""));
               TableViewListeProduit.setItems(ListProd); 
               TableViewListeProduit.getSelectionModel().select(nbrligne);
            }
        }
    }
    
    private void ReferenceMouseClick(){
        TabColReference.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<ListeProduit, String>>() {
        @Override
        public void handle(TableColumn.CellEditEvent<ListeProduit, String> t) {
            produit = produitDB.getProduit(t.getNewValue());
            if(produit.getReference() != null){
                ListeProduit Liste = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixachatht(),"0","",produit.getTvaachat(),"0");
                AffectationTableView(Liste,t.getTablePosition().getRow()) ;
            }
            else{
                AffectationTableView(new ListeProduit("","","","","","","",""),t.getTablePosition().getRow()) ;
            }
             
        }
     });
    }
    
    private void QantiteMouseClick(){
        TabColQuantite.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<ListeProduit, String>>() {
        @Override
        public void handle(TableColumn.CellEditEvent<ListeProduit, String> t) {
            String newquantite = t.getNewValue() ;
            try{
                newquantite = newquantite.replace(',','.');
                if(Float.parseFloat(newquantite)<1){
                    newquantite = "1";
                }
            }
            catch(NumberFormatException nfe){
                newquantite = "1";
            }
            
            ListeProduit Liste = t.getRowValue() ;
             
            if(Liste.getReference().isEmpty()){ //le cas en ajoute un quantité dans un ligne vide
                TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false);
                TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true);
            }
            else{
                Liste.setQuantite(newquantite);
                ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), newquantite,Liste.getPrixHT(), Liste.getRemise(),"",Liste.getTVA(),"");
                //NewList = CalculeProduit(NewList);
                AffectationTableView(NewList,t.getTablePosition().getRow()) ;
           
            }
        }
     });
    }
    
    
    private void RemiseMouseClick(){
        TabColRemise.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<ListeProduit, String>>() {
        @Override
        public void handle(TableColumn.CellEditEvent<ListeProduit, String> t) {
            String newRemise = t.getNewValue() ;
            try{
                newRemise = newRemise.replace(',','.');
                if(Float.parseFloat(newRemise)<0){
                    newRemise = "0";
                }
            }
            catch(NumberFormatException nfe){
                newRemise = "0";
            }
            
            ListeProduit Liste = t.getRowValue() ;
            
            if(Liste.getReference().isEmpty()){ //le cas en ajoute un remise dans un ligne vide
                TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(false);
                TableViewListeProduit.getColumns().get(t.getTablePosition().getRow()).setVisible(true);
            }
            else{
                Liste.setRemise(newRemise);
                ListeProduit NewList = new ListeProduit(Liste.getReference(),Liste.getDesignation(), Liste.getQuantite(),Liste.getPrixHT(), newRemise, "", Liste.getTVA(), "");
                AffectationTableView(NewList, t.getTablePosition().getRow());
            }
            
        }
     });
    }
    private void AffectationTableView(ListeProduit ListeProd, int EmplacementLigne){
        boolean result = false ;    
        int indise=0;
        int Position = 0;

        if(ListProd.size()>0){
            do{ //Vérifier si le produit exsiste deja 
                if(ListProd.get(indise).getReference().equals(ListeProd.getReference())){
                    result = true ;
                    Position = indise ;
                    //System.out.println("existe Position:"+indise);
                }
                indise++;
            }while(ListProd.size()>indise && !result);

            if(result){ //si la ligne exsite déja
                if(EmplacementLigne!= -1){
                    if(Position == EmplacementLigne){
                        ListProd.set(Position, ListeProd);
                    }
                    else{
                        ListProd.set(EmplacementLigne, new ListeProduit("","","","","","","",""));
                    }
                }
            }else{
                if(EmplacementLigne!= -1){
                    ListProd.set(EmplacementLigne, ListeProd);
                }else{
                    ListProd.add(ListeProd);
                }
            }
        }
        else{
            ListProd.add(ListeProd);
        }

        CalculeListeProduit();

        TableViewListeProduit.setItems(ListProd);
        TableViewListeProduit.setVisible(false);
        TableViewListeProduit.setVisible(true);
    }
    
    private void CalculeListeProduit(){ //calculer et afficher la détail des produits
        netaPayer = 0;
        Remises = 0;
        totalTVA = 0;
        total_H_T_Net= 0;
        
        TotalTVA.setText("");
        Remise.setText("");
        NetAPayer.setText("");
        Timbre.setText("");
        TotalHTNet.setText("");
        
        //calcule
        for(ListeProduit liste : ListProd){
            float totaht = Adaptateur.StringToFloat(liste.getTotalHT()) ;
            float prix_U_H_T = Adaptateur.StringToFloat(liste.getPrixHT()) ;
            float remises = Adaptateur.StringToFloat(liste.getRemise().replace("%", "")) ;
            float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", ""));
            float qte = Adaptateur.StringToFloat(liste.getQuantite());
            
            totalTVA = totalTVA + ((totaht *  tva) /100) ;
            Remises =  Remises + (prix_U_H_T * remises)/100 ;
            total_H_T_Net = total_H_T_Net + totaht ;
        }

        if(total_H_T_Net>0){
            float timbre = Adaptateur.StringToFloat(ParametreSystem.Timbre);
            netaPayer = total_H_T_Net + totalTVA + timbre ;
            TotalTVA.setText(Adaptateur.FloatToStringEspace(totalTVA));
            Remise.setText(Adaptateur.FloatToStringEspace(Remises));
            NetAPayer.setText(Adaptateur.FloatToStringEspaceCurrency(netaPayer));
            Timbre.setText(ParametreSystem.Timbre);
            TotalHTNet.setText(Adaptateur.FloatToStringEspace(total_H_T_Net));
        }
    }
    
    
    public Object[]  getDefaultSaveDataImport(){
        Object[] ArrayObject = new Object[10];
        ArrayObject[0] = this.ListProd;
        ArrayObject[1] = SetFacture();
        return ArrayObject;
    }
    
    
    
    public void SetDefaultSaveDataImport(Object[] ArrayObject){
        if(ArrayObject[0] != null){
            this.ListProd = (ObservableList<ListeProduit>) ArrayObject[0];
            this.CalculeListeProduit();
            this.TableViewListeProduit.setItems(ListProd);
        }
        if(ArrayObject[1] != null){
            FactureFrs Facture = (FactureFrs) ArrayObject[1];
            getFacture(Facture);
        }
        
        if(ArrayObject[6] != null){
            this.SetProduit( (Produit) ArrayObject[6] );
        }
    }
    
    @FXML
    private void RechercheProduitButtonAction(ActionEvent event) throws IOException {
        
       final RechercherProduitController rechercheproduit = new RechercherProduitController(false);
       
       rechercheproduit.ArrayObjectDataSave = this.getDefaultSaveDataImport();
       
       rechercheproduit.Show();
       
       rechercheproduit.TabColAction.setCellFactory(new Callback<TableColumn<Produit, String>, TableCell<Produit, String>>() {
	@Override
	public TableCell<Produit, String> call(TableColumn<Produit, String> paramP) {
            return new TableCell<Produit, String>() {
            final Button cellButton = new Button("");
            {
                cellButton.getStyleClass().add("btn-icon-primary");
                Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/iconaffecter.png"));
                ImageView buttonGraphic = new ImageView();
                buttonGraphic.setImage(coffeeImage);
                cellButton.setGraphic(buttonGraphic);

                cellButton.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent arg0) {
                    try {
                        // get Selected ItemButtonCell
                        rechercheproduit.ArrayObjectDataSave[6] = ((Produit)getTableRow().getItem());
                        
                        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureFrs/FactureFrsAjouter.fxml"));
                        Parent ParentBonReceptionAjouterFXML = (Parent) fxmlLoader.load();
                        
                        FactureFrsAjouterController FactureFrsAjouter = fxmlLoader.getController();
                        
                        FactureFrsAjouter.SetDefaultSaveDataImport(rechercheproduit.ArrayObjectDataSave);
                        
                        
                        MyWindow mywindows = new MyWindow();
                        mywindows.Refresh(ParentBonReceptionAjouterFXML, 2);
                        
                    
                    } catch (IOException ex) {
                        logger.error("FactureFrsAjouterController  : FactureFrsAjouter.fxml :" + ex.getMessage());
                    }
                    
                    }
                });
            }
            @Override
            protected void updateItem(String paramT, boolean isEmpty) {
                super.updateItem(paramT, isEmpty);
                if (!isEmpty) {
                    setGraphic(cellButton);
		} else {
			setGraphic(null);
                    }
		}
            };
	}
	});
    }
    
    public void SetProduit(Produit produit){
        
        //Supprimer les igne vide
        if((ListProd.size()>0) && (ListProd.get(ListProd.size()-1).getReference().isEmpty())){
            ListProd.remove(ListProd.size()-1);
        }
        
        if(produit != null){
            ListeProduit ListeProd = new ListeProduit(produit.getReference(),produit.getDesignation(),"1",produit.getPrixachatht(),"0",produit.getPrixachatttc(),produit.getTvaachat(),"0");
            AffectationTableView(ListeProd,-1);
        }
    
    }
    
    
}
