/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controllers.Stock;

import Controllers.Traitement.Adaptateur;
import Models.Stock.BonSortie;
import Models.Stock.BondeSortieDB;
import Models.Stock.StockDB;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.print.JobSettings;
import javafx.print.PageRange;
import javafx.print.PrinterJob;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Text;

/**
 * FXML Controller class
 *
 * @author PC-Maher
 */
public class BondeSortieDetailController implements Initializable {

    @FXML private AnchorPane   BonSortieDetail;
    
    @FXML private Button RecreerBD ;
    
    @FXML private Text recepteur ;
    @FXML private Text id ;
    @FXML private Text date ;
    @FXML private Text heur ;
    @FXML private Text transporteur ;
    
    @FXML private TableView<ListProduitBon> TableViewListeProduitBon ;
    @FXML private TableColumn<ListProduitBon ,String> TabColBonReference;
    @FXML private TableColumn<ListProduitBon ,String> TabColBonDesignaton;
    @FXML private TableColumn<ListProduitBon ,String> TabColBonMarque ;
    @FXML private TableColumn<ListProduitBon ,String> TabColBonCategorie;
    @FXML private TableColumn<ListProduitBon ,String> TabColBonPrixTTC;
    @FXML private TableColumn<ListProduitBon ,String> TabColBonQuantiteTTC;
    @FXML private TableColumn<ListProduitBon ,String> TabColBonTVA;
    
    public  static String id_bonsortie ;
    BondeSortieDB MyBondeSortieDB = new BondeSortieDB();
    BonSortie MyBonSortie = new BonSortie();
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        Image coffeeImage = new Image(getClass().getResourceAsStream("/Public/icon/icon-relogin.png"));
        ImageView buttonGraphic = new ImageView();
        buttonGraphic.setImage(coffeeImage);
        RecreerBD.setGraphic(buttonGraphic);
        
        TabColBonReference.setCellValueFactory(new PropertyValueFactory<ListProduitBon, String>("reference"));
        TabColBonDesignaton.setCellValueFactory(new PropertyValueFactory<ListProduitBon, String>("designaton"));
        TabColBonMarque.setCellValueFactory(new PropertyValueFactory<ListProduitBon, String>("marque"));
        TabColBonCategorie.setCellValueFactory(new PropertyValueFactory<ListProduitBon, String>("categorie"));
        TabColBonPrixTTC.setCellValueFactory(new PropertyValueFactory<ListProduitBon, String>("prixttc"));
        TabColBonPrixTTC.setStyle( "-fx-alignment: CENTER_RIGHT;");
        TabColBonTVA.setCellValueFactory(new PropertyValueFactory<ListProduitBon, String>("tva"));
        TabColBonTVA.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;");
        
        TabColBonQuantiteTTC.setCellValueFactory(new PropertyValueFactory<ListProduitBon, String>("quantite"));
        TabColBonQuantiteTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;");
        
        MyBonSortie = MyBondeSortieDB.getBonSortie(id_bonsortie);
        
        id.setText(MyBonSortie.getId());
        recepteur.setText(MyBonSortie.getLocal_recepteur());
        date.setText(Adaptateur.NormalDateFormat(MyBonSortie.getDate().toString()));
        heur.setText(MyBonSortie.getHeur().toString());
        transporteur.setText(MyBonSortie.getTransporteur());
        TableViewListeProduitBon.setItems(MyBonSortie.getListe_prod());
        
        //Methode qui supprime les produit qont la quantité est égale à 0
        StockDB MyStock = new StockDB();
        MyStock.DeleteProdStock();
             
    }    
    
    
    @FXML
    private void PDFBonSortieButtonAction(ActionEvent event) throws IOException {
        try {
            ObservableList<ListProduitBon> ListProd = MyBonSortie.getListe_prod();
            PrinterJob jobExportPDF = PrinterJob.createPrinterJob();
            int SizelistMouvement = ListProd.size();
            int total = SizelistMouvement / 20 + 1 ;
            int page = 0;
            for (int i=0; i<SizelistMouvement; i+=20){
                ObservableList<ListProduitBon> listProdTemp = FXCollections.observableArrayList();
                for (int j=i; (j<(i+20)) && (j<SizelistMouvement); j++){
                    listProdTemp.add(ListProd.get(j));
                }
                FXMLLoader fxmlLoaderPrintBonSortie = new FXMLLoader(getClass().getResource("/Views/Stock/PrintBon.fxml"));
                final Node ParentFxmlPrintBonSortie = (Node)fxmlLoaderPrintBonSortie.load();
                BondeEnterPrintController PrintBonSortie = fxmlLoaderPrintBonSortie.getController();
                page++;
                PrintBonSortie.setDataBonEnter(listProdTemp, "Bon de sortie à ", MyBonSortie.getLocal_recepteur(), "Emetteur: ",  MyBonSortie.getLocal_emetteur(), MyBonSortie.getId(),  MyBonSortie.getDate().toString(), MyBonSortie.getHeur().toString(), MyBonSortie.getTransporteur(), page+"/"+total);
                jobExportPDF.printPage(ParentFxmlPrintBonSortie);
            }
            jobExportPDF.endJob();
        } catch (IOException ex) {
            System.err.println("BondeSortierDetailController PDFBonSortieButtonAction ! \n"+ex.getMessage());
        }
    }
    
    @FXML
    private void PrintBonSortieButtonAction(ActionEvent event) throws IOException {
        try {
            ObservableList<ListProduitBon> ListProd = MyBonSortie.getListe_prod();
            
            int SizelistMouvement = ListProd.size();
            int total = SizelistMouvement / 20 + 1 ;
            int page = 0;
            
            PrinterJob jobPrint = PrinterJob.createPrinterJob();  
            jobPrint.getJobSettings().setPageRanges(new PageRange(1, total));
            
            if (jobPrint.showPrintDialog(null)) {
                JobSettings jsPrint = jobPrint.getJobSettings();
                for (int i=0; i<SizelistMouvement; i+=20){
                    ObservableList<ListProduitBon> listProdTemp = FXCollections.observableArrayList();
                    for (int j=i; (j<(i+20)) && (j<SizelistMouvement); j++){
                        listProdTemp.add(ListProd.get(j));
                    }
                    FXMLLoader fxmlLoaderPrintBonSortie = new FXMLLoader(getClass().getResource("/Views/Stock/PrintBon.fxml"));
                    final Node ParentFxmlPrintBonSortie = (Node)fxmlLoaderPrintBonSortie.load();
                    BondeEnterPrintController PrintBonSortie = fxmlLoaderPrintBonSortie.getController();
                    page++;
                    PrintBonSortie.setDataBonEnter(listProdTemp, "Bon de sortie à ", MyBonSortie.getLocal_recepteur(), "Emetteur: ",  MyBonSortie.getLocal_emetteur(), MyBonSortie.getId(),  MyBonSortie.getDate().toString(), MyBonSortie.getHeur().toString(), MyBonSortie.getTransporteur(), page+"/"+total);
                jobPrint.printPage(ParentFxmlPrintBonSortie);
                }
                jobPrint.endJob();
            }
        } catch (IOException ex) {
            System.err.println("BondeSortierDetailController PrintBonSortieButtonAction ! \n"+ex.getMessage());
        }
    }
    
    
    @FXML
    private void NewBonSortieButtonAction(ActionEvent event) throws IOException {
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/Stock/BondeSortie.fxml"));
            Parent root = (Parent)fxmlLoader.load();
            BonSortieDetail.getChildren().clear();
            BonSortieDetail.getChildren().add(root);
        } catch (IOException ex) {
            Logger.getLogger(BondeEntrerController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
