package Controllers.DevisClt; import Controllers.Traitement.Adaptateur; import Controllers.Traitement.ParametreSystem; import Models.DevisClt.Devis; import Models.Produit.ListeProduit; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Control; import javafx.scene.control.TableCell; 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.text.Text; import javafx.util.Callback; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; /** * FXML Controller class * @author Maher Ben Tili */ public class DevisCltPrintController implements Initializable { @FXML public ImageView ImageViewLogo; @FXML private Text TextSteNom1; @FXML private Text TextReference; @FXML private Text TextDate; @FXML private Text TextEcheance; @FXML private Text TextClient; @FXML private Text TextNumDevie; @FXML private Text TextTotalHT; @FXML private Text TextTVA; @FXML private Text TextTotalTTC; @FXML private Text TextSteNom2; @FXML private Text TextSteContact; @FXML private Text TextSteSIREN; @FXML private TableView TableViewProdDevis ; @FXML private TableColumn TabColDevisReference; @FXML private TableColumn TabColDevisDesignation; @FXML private TableColumn TabColDevisQuantite ; @FXML private TableColumn TabColDevisPrix; @FXML private TableColumn TabColDevisMontant; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { setImageLogo(); TabColDevisReference.setCellValueFactory(new PropertyValueFactory("Reference")); TabColDevisDesignation.setCellValueFactory(new PropertyValueFactory("Description")); TabColDevisDesignation.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) { super.setText(null); super.setGraphic(null); } else { String newItem = item.trim().toLowerCase(); Text text = new Text(newItem); super.setPrefHeight(Control.USE_COMPUTED_SIZE); text.wrappingWidthProperty().bind(super.widthProperty()); super.setGraphic(text); } } }; return cell; } }); TabColDevisQuantite.setCellValueFactory(new PropertyValueFactory("Quantite")); TabColDevisQuantite.setStyle( "-fx-alignment: CENTER;"); TabColDevisQuantite.getStyleClass().add("Center"); TabColDevisPrix.setCellValueFactory(new PropertyValueFactory("Prix")); TabColDevisPrix.setStyle( "-fx-alignment: CENTER;"); TabColDevisPrix.getStyleClass().add("Center"); TabColDevisMontant.setCellValueFactory(new PropertyValueFactory("Montant")); TabColDevisMontant.setStyle( "-fx-alignment: CENTER;"); TabColDevisMontant.getStyleClass().add("Center"); TextSteNom1.setText(ParametreSystem.CompanyName); TextSteNom2.setText("Ste:"+ParametreSystem.CompanyName+" | Adress:"+ParametreSystem.CompanyAddress+" | Tele: "+ParametreSystem.CompanyTele); TextSteContact.setText("Fax:"+ParametreSystem.CompanyFax+" | Mail:"+ParametreSystem.CompanyMail+" | Site:"+ParametreSystem.CompanySite); TextSteSIREN.setText(ParametreSystem.CompanySIREN); } public void SetDevis(Devis devis) { TextReference.setText(devis.getCodeDevis()); TextDate.setText(Adaptateur.NormalDateFormat(devis.getDate())); TextEcheance.setText(devis.getValidite()); TextClient.setText(devis.getCodeClient()+" - "+devis.getNom()+" - "+devis.getPrenom()); TextNumDevie.setText(devis.getCodeDevis()); ObservableList PodDevis = FXCollections.observableArrayList(); for(ListeProduit liste : devis.getListeproduit()){ if(!liste.getReference().equals("")){ float remise = Adaptateur.ArrondStringToFloat(liste.getRemise().replace("%", "")) ; float prixht = Adaptateur.ArrondStringToFloat(liste.getPrixHT()) ; float tva = Adaptateur.StringToFloat(liste.getTVA().replace("%", "")) ; float qte = Adaptateur.StringToFloat(liste.getQuantite()) ; float totalht = (prixht - ((prixht * remise)/100)) ; float prixttc = totalht + ((totalht * tva)/100) ; float montant = prixttc * qte; PodDevis.add(new ListProdDevis(liste.getReference(), liste.getDesignation(), liste.getQuantite(), Adaptateur.FloatToStringEspace(prixttc), Adaptateur.FloatToStringEspace(montant))); } } TextTVA.setText(Adaptateur.StringToStringEspaceCurrency(devis.getTotalTVA())); TextTotalHT.setText(Adaptateur.StringToStringEspaceCurrency(devis.getTotalHorsTaxNet())); TextTotalTTC.setText(Adaptateur.StringToStringEspaceCurrency(devis.getNetAPayer())); TableViewProdDevis.setItems(PodDevis); } private void setImageLogo() { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { // optional, but recommended // process XML securely, avoid attacks like XML External Entities (XXE) dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); // parse XML file DocumentBuilder db = dbf.newDocumentBuilder(); //PowerERP\conf\logo.xml Document doc = db.parse(new File("./conf/logo.xml")); doc.getDocumentElement().normalize(); Element elementCNX = (Element) doc.getElementsByTagName("DevisCltPrint").item(0); String pathLogo = elementCNX.getElementsByTagName("PathImage").item(0).getTextContent(); FileInputStream fis = new FileInputStream(pathLogo); ImageViewLogo.setImage(new Image(fis)); ImageViewLogo.setFitWidth(Double.parseDouble(elementCNX.getElementsByTagName("FitWidth").item(0).getTextContent())); ImageViewLogo.setFitHeight(Double.parseDouble(elementCNX.getElementsByTagName("FitHeight").item(0).getTextContent())); ImageViewLogo.setLayoutX(Double.parseDouble(elementCNX.getElementsByTagName("LayoutX").item(0).getTextContent())); ImageViewLogo.setLayoutY(Double.parseDouble(elementCNX.getElementsByTagName("LayoutY").item(0).getTextContent())); } catch (ParserConfigurationException | SAXException | IOException e) { System.out.println("error AuthentificationController/setImageLogo "+e.getMessage()); } } public static class ListProdDevis { private final SimpleStringProperty Reference; private final SimpleStringProperty Description; private final SimpleStringProperty Quantite; private final SimpleStringProperty Prix; private final SimpleStringProperty Montant; private ListProdDevis(String reference, String description, String quantite, String prix, String montant) { this.Reference = new SimpleStringProperty(reference); this.Description = new SimpleStringProperty(description); this.Quantite = new SimpleStringProperty(quantite); this.Prix = new SimpleStringProperty(prix); this.Montant = new SimpleStringProperty(montant); } public String getReference() { return Reference.get(); } public void setReference(String reference) { Reference.set(reference); } public String getDescription() { return Description.get(); } public void setDescription(String description) { Description.set(description); } public String getQuantite() { return Quantite.get(); } public void setQuantite(String quantite) { Quantite.set(quantite); } public String getPrix() { return Prix.get(); } public void setPrix(String prix) { Prix.set(prix); } public String getMontant() { return Montant.get(); } public void setMontant(String montant) { Montant.set(montant); } } }