From ea5497237537e16449dcb708d0ab7f3a484f7c9f Mon Sep 17 00:00:00 2001 From: lucas <lucas@Lucas> Date: Fri, 28 Mar 2025 16:06:39 +0100 Subject: [PATCH] =?UTF-8?q?En=20tant=20que=20radiologue=20:=20possibilit?= =?UTF-8?q?=C3=A9=20de=20passer=20de=20la=20page=20radiologue=20=C3=A0=20l?= =?UTF-8?q?a=20page=20manipulateur=20(et=20aussi=20de=20revenir=20en=20arr?= =?UTF-8?q?i=C3=A8re)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ui/Radio_Manip.fxml | 56 +++++ src/ui/Radio_ManipController.java | 333 +++++++++++++++++++++++++++ src/ui/Radio_manip.java | 46 ++++ src/ui/RadiologuePage.fxml | 1 + src/ui/RadiologuePageController.java | 36 ++- 5 files changed, 471 insertions(+), 1 deletion(-) create mode 100644 src/ui/Radio_Manip.fxml create mode 100644 src/ui/Radio_ManipController.java create mode 100644 src/ui/Radio_manip.java diff --git a/src/ui/Radio_Manip.fxml b/src/ui/Radio_Manip.fxml new file mode 100644 index 0000000..f525769 --- /dev/null +++ b/src/ui/Radio_Manip.fxml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import java.net.URL?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> +<?import javafx.scene.control.DatePicker?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.ListView?> +<?import javafx.scene.control.TableColumn?> +<?import javafx.scene.control.TableView?> +<?import javafx.scene.control.TextField?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.AnchorPane?> + +<AnchorPane id="AnchorPane" prefHeight="777.0" prefWidth="975.0" styleClass="mainFxmlClass" xmlns="http://javafx.com/javafx/23.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.Radio_ManipController"> + <stylesheets> + <URL value="@fxml.css" /> + </stylesheets> + <children> + <ListView fx:id="liste_image" layoutX="55.0" layoutY="459.0" prefHeight="180.0" prefWidth="364.0" /> + <ImageView fx:id="image" fitHeight="202.0" fitWidth="317.0" layoutX="542.0" layoutY="441.0" pickOnBounds="true" preserveRatio="true" /> + <Label layoutX="132.0" layoutY="69.0" text="Rechercher un patient" /> + <TextField fx:id="fieldRecherhe" layoutX="278.0" layoutY="65.0" prefHeight="26.0" prefWidth="449.0" /> + <Button layoutX="761.0" layoutY="65.0" mnemonicParsing="false" onAction="#actionRechercher" text="Rechercher" /> + <Label fx:id="messageLabel" style="-fx-text-fill: red;" /> + <Label layoutX="215.0" layoutY="707.0" text="Date de l'examen" /> + <Button layoutX="459.0" layoutY="738.0" mnemonicParsing="false" onAction="#actionValider" text="Valider" /> + <Label layoutX="55.0" layoutY="441.0" text="Liste des images :" /> + <DatePicker fx:id="fieldExamen" layoutX="317.0" layoutY="703.0" prefHeight="25.0" prefWidth="141.0" /> + <Label layoutX="508.0" layoutY="707.0" text="H" /> + <ComboBox fx:id="comboBoxH" layoutX="518.0" layoutY="703.0" prefHeight="25.0" prefWidth="63.0" /> + <Label layoutX="588.0" layoutY="707.0" text="min" /> + <ComboBox fx:id="comboBoxMin" layoutX="614.0" layoutY="703.0" prefHeight="25.0" prefWidth="63.0" /> + <TableView fx:id="tableViewPatient" layoutX="133.0" layoutY="122.0" prefHeight="70.0" prefWidth="706.0"> + <columns> + <TableColumn fx:id="columnIpp" prefWidth="202.39996337890625" text="IPP Patient" /> + <TableColumn fx:id="columnPrenom" prefWidth="267.9999694824219" text="Prénom" /> + <TableColumn fx:id="columnNom" minWidth="0.0" prefWidth="236.0" text="Nom " /> + </columns> + </TableView> + <Label layoutX="637.0" layoutY="391.0" text="DMR" /> + <Button layoutX="859.0" layoutY="24.0" mnemonicParsing="false" onAction="#actionDeconnexion" text="déconnexion" /> + <Label layoutX="278.0" layoutY="662.0" text="Acte" /> + <ComboBox id="comboAnat" fx:id="comboAnat" layoutX="512.0" layoutY="658.0" prefHeight="25.0" prefWidth="133.0" promptText="Anatomie " /> + <ComboBox id="comboImagerie" fx:id="comboImagerie" layoutX="325.0" layoutY="658.0" prefHeight="25.0" prefWidth="133.0" promptText="Imagerie" /> + <TableView fx:id="tableViewDmrPatient" layoutX="133.0" layoutY="228.0" maxWidth="-Infinity" minHeight="-Infinity" prefHeight="202.0" prefWidth="706.0"> + <columns> + <TableColumn fx:id="columnPrenomDmr" prefWidth="136.0" text="Nom " /> + <TableColumn fx:id="columnNomDmr" prefWidth="138.39996337890625" text="Prénom" /> + <TableColumn fx:id="columnDateOuverture" prefWidth="128.79995727539062" text="Date d'ouverture" /> + <TableColumn fx:id="columnMotif" prefWidth="255.20001220703125" text="Motif" /> + </columns> + </TableView> + <Button fx:id="PageRadio" layoutX="735.0" layoutY="458.0" mnemonicParsing="false" onAction="#retourPageRadiologue" text="Revenir à la page Radiologue" /> + </children> +</AnchorPane> diff --git a/src/ui/Radio_ManipController.java b/src/ui/Radio_ManipController.java new file mode 100644 index 0000000..8feea00 --- /dev/null +++ b/src/ui/Radio_ManipController.java @@ -0,0 +1,333 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/javafx/FXMLController.java to edit this template + */ +package ui; + +import fc.Dmr; +import fc.DmrPatient; +import fc.Examen; +import fc.Genre; +import static fc.MessageDErreur.validerDate; +import static fc.MessageDErreur.validerNom; +import static fc.MessageDErreur.validerNumeroSecu; +import static fc.MessageDErreur.validerPrenom; +import fc.Pacs; +import fc.Patient; +import fc.Radiologue; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.sql.Date; +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; +import java.util.ResourceBundle; +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.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.DatePicker; +import javafx.scene.control.Label; +import javafx.scene.control.ListView; +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.stage.Stage; +import javafx.util.Pair; + +/** + * FXML Controller class + * + * @author valen + */ +public class Radio_ManipController implements Initializable { + + private Radiologue radiologue; + + public void setRadiologue(Radiologue radiologue) { + this.radiologue = radiologue; + + } + + /** + * Initializes the controller class. + */ + @FXML + private ListView liste_image = new ListView(); + + @FXML + private Button PageRadio; + + @FXML + private ListView liste_dmr = new ListView(); + + @FXML + private ImageView image = new ImageView(); + + @FXML + private TextField fieldDMR = new TextField(); + + @FXML + private TableView<DmrPatient> tableViewDmrPatient; + @FXML + private TableView<Patient> tableViewPatient; + + @FXML + private TableColumn<Patient, String> columnIpp; + @FXML + private TableColumn<Patient, String> columnNom; + @FXML + private TableColumn<Patient, String> columnPrenom; + @FXML + private TableColumn<DmrPatient, String> columnMotif; + @FXML + private TableColumn<DmrPatient, String> columnDateOuverture; + + @FXML + private TableColumn<DmrPatient, String> columnNomDmr; + @FXML + private TableColumn<DmrPatient, String> columnPrenomDmr; + + @FXML + private TextField fieldRecherhe = new TextField(); + + @FXML + private Label messageLabel; + + @FXML + private DatePicker fieldDateNaissance = new DatePicker(); + + @FXML + private DatePicker fieldExamen = new DatePicker(); + + @FXML + private ComboBox<Integer> comboBoxH; + + @FXML + private ComboBox<Integer> comboBoxMin; + + @FXML + private ComboBox<String> comboImagerie; + + @FXML + private ComboBox<String> comboAnat; + + @Override + public void initialize(URL url, ResourceBundle rb) { + // TODO + columnIpp.setCellValueFactory(new PropertyValueFactory<>("IPP")); + columnNom.setCellValueFactory(new PropertyValueFactory<>("nom")); + columnPrenom.setCellValueFactory(new PropertyValueFactory<>("prenom")); + + columnDateOuverture.setCellValueFactory(new PropertyValueFactory<>("dateOuverture")); + columnMotif.setCellValueFactory(new PropertyValueFactory<>("motif")); + columnNomDmr.setCellValueFactory(new PropertyValueFactory<>("nom")); + columnPrenomDmr.setCellValueFactory(new PropertyValueFactory<>("prenom")); + + Pacs p = new Pacs(); + liste_image.setItems(p.ListImage()); + + Dmr dmr = new Dmr(); + List<Dmr> dmr_actif = dmr.dmrActiver(); + List<DmrPatient> DmrPatient = new ArrayList<>(); + for (Dmr d : dmr_actif) { + Patient pat = new Patient(); + DmrPatient.add(new DmrPatient(d, pat.rechercherPatients(d.getIPP(), null, null, null, null, null).get(0))); + } + ObservableList<DmrPatient> patient_actif = FXCollections.observableArrayList(DmrPatient); + tableViewDmrPatient.setItems(patient_actif); + comboImagerie.getItems().add("Radio"); + comboImagerie.getItems().add("IRM"); + comboImagerie.getItems().add("Scanner"); + comboAnat.getItems().add("abdomen"); + comboAnat.getItems().add("sinus"); + comboAnat.getItems().add("brain"); + + for (int i = 0; i <= 24; i++) { + comboBoxH.getItems().add(i); + } + + for (int i = 0; i <= 60; i++) { + comboBoxMin.getItems().add(i); + } + + LocalTime currentTime = LocalTime.now(); + + int heure = currentTime.getHour(); // Récupère l'heure + int minute = currentTime.getMinute(); + + // Optionnel : définir une valeur par défaut + comboBoxH.setValue(heure); + comboBoxMin.setValue(minute); + + liste_image.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { // Vérifie qu'un élément est sélectionné + + System.out.println("Image sélectionnée : " + newValue); + actionSurSelection(p.pathWithNom(newValue.toString())); + + } + }); + tableViewPatient.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { // Vérifie qu'un élément est sélectionné + + actionSurSelectionPatient(newValue); + + } + }); + + } + + private void actionSurSelection(String path) { + try { + //Image image2 = new Image("file:" + "src/jpg/abdomen/cor494-i436.jpg"); + Image image2 = new Image(new FileInputStream(path));// Assurez-vous que le chemin est correct + this.image.setImage(image2); + this.image.setPreserveRatio(true); + this.image.setFitWidth(250); + this.image.setFitHeight(250); + + System.out.println("Image chargée : "); + } catch (Exception e) { + System.out.println("Erreur de chargement de l'image : " + e.getMessage()); + } + + } + + private void actionSurSelectionPatient(Patient patient) { + List<Dmr> dmrs = patient.recupererDMR(); + List<DmrPatient> DmrPatient = new ArrayList<>(); + for (Dmr d : dmrs) { + Patient pat = new Patient(); + DmrPatient.add(new DmrPatient(d, pat.rechercherPatients(d.getIPP(), null, null, null, null, null).get(0))); + } + ObservableList<DmrPatient> patient_actif = FXCollections.observableArrayList(DmrPatient); + tableViewDmrPatient.setItems(patient_actif); + + } + + @FXML + private void retourPageRadiologue(ActionEvent event) { + try { + + FXMLLoader loader = new FXMLLoader(getClass().getResource("RadiologuePage.fxml")); + Parent root = loader.load(); + + + RadiologuePageController controller = loader.getController(); + + + controller.setRadiologue(this.radiologue); + + Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); + + // Changer la scène + stage.setScene(new Scene(root)); + stage.setTitle("Page Radiologue"); + stage.setFullScreen(true); + stage.show(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @FXML + + private void actionRechercher() { + String rechercheUnifiee = fieldRecherhe.getText().trim(); + messageLabel.setText(""); + + // Validation simplifiée + if (rechercheUnifiee.isEmpty()) { + messageLabel.setText("Veuillez entrer un critère de recherche"); + return; + } + + // Utilisation de la nouvelle méthode de recherche + Patient patient = new Patient(); + Pair<List<Patient>, String> result = patient.rechercherPatients2(rechercheUnifiee); + + // Gestion des erreurs + if (!result.getValue().isEmpty()) { + messageLabel.setText(result.getValue()); + } + + // Affichage des résultats + ObservableList<Patient> items = FXCollections.observableArrayList(result.getKey()); + tableViewPatient.setItems(items); + } + + @FXML + private void actionDeconnexion(ActionEvent event) { + try { + // Charger la page de connexion + + Parent root = FXMLLoader.load(getClass().getResource("ConnexionPage.fxml")); + + // Obtenir la scène actuelle et la fenêtre + Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); + + Scene scene = new Scene(root); + + // Changer la scène pour la page de connexion + stage.setScene(scene); + stage.setTitle("Page de Connexion"); + stage.setFullScreen(true); + stage.show(); + } catch (IOException e) { + e.printStackTrace(); + // Afficher un message d'erreur à l'utilisateur si nécessaire + } + } + + @FXML + private void actionValider() { + + String imageselect = (String) liste_image.getSelectionModel().getSelectedItems().get(0); + + DmrPatient dmrselect = tableViewDmrPatient.getSelectionModel().getSelectedItems().get(0); + + LocalDate selectedDate = fieldExamen.getValue(); + + System.out.println(selectedDate); + int selectedIndexH = comboBoxH.getSelectionModel().getSelectedIndex(); + + Integer selectedItemH = comboBoxH.getItems().get(selectedIndexH); + int selectedIndexM = comboBoxH.getSelectionModel().getSelectedIndex(); + + Integer selectedItemM = comboBoxH.getItems().get(selectedIndexM); + String h = " " + selectedItemH + ":"; + String m = "" + selectedItemM + ""; + String date = selectedDate.toString() + h + m; + + System.out.println("date : " + date); + + if (imageselect == null || dmrselect == null) { + System.out.println("tous les champs ne sont pas remplis"); + + } + Pacs p = new Pacs(); + String chemin = p.pathWithNom(imageselect); + + Examen ex = new Examen(); + System.out.println("création"); + String acte = comboImagerie.getValue() + " " + comboAnat.getValue(); + System.out.println("motif :" + dmrselect.getMotif()); + ex.creerExamen(dmrselect.getId_dmr(), date, chemin, acte); + this.initialize(null, null); + + } + +} diff --git a/src/ui/Radio_manip.java b/src/ui/Radio_manip.java new file mode 100644 index 0000000..e846855 --- /dev/null +++ b/src/ui/Radio_manip.java @@ -0,0 +1,46 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package ui; + +import fc.Administration; +import fc.Manipulateur; +import java.io.IOException; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +/** + * + * @author valen + */ +public class Radio_manip extends Stage{ + + + private Manipulateur manip; + + public Radio_manip(Manipulateur manip) { + this.manip = manip; + loadFXML(); + } + + private void loadFXML() { + try { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/ui/Manip.fxml")); + Parent root = loader.load(); + ManipController controller = loader.getController(); + + + + Scene scene = new Scene(root, 800, 600); + this.setScene(scene); + this.setFullScreen(true); + this.setTitle("Page Manipulateur"); + } catch (IOException e) { + e.printStackTrace(); + } + } +} + diff --git a/src/ui/RadiologuePage.fxml b/src/ui/RadiologuePage.fxml index 64d9bb8..f7f282f 100644 --- a/src/ui/RadiologuePage.fxml +++ b/src/ui/RadiologuePage.fxml @@ -21,6 +21,7 @@ <TextField fx:id="fieldRecherhe" /> <Button mnemonicParsing="false" onAction="#actionRechercher" text="Rechercher" /> <Label fx:id="messageLabel" style="-fx-text-fill: red;" /> + <Button fx:id="PageManip" mnemonicParsing="false" onAction="#ouvertureManip" text="Ouvrir page Manipulateur" /> </children> </VBox> <VBox prefHeight="200.0" prefWidth="100.0"> diff --git a/src/ui/RadiologuePageController.java b/src/ui/RadiologuePageController.java index 78e295f..993a374 100644 --- a/src/ui/RadiologuePageController.java +++ b/src/ui/RadiologuePageController.java @@ -38,9 +38,13 @@ public class RadiologuePageController { @FXML private TextField textFieldDMR; @FXML - + private TextField fieldRecherhe; + @FXML + private Button PageManip; + + @FXML private Button buttonRechercher; @FXML @@ -231,6 +235,36 @@ public class RadiologuePageController { tableViewPatient.setItems(FXCollections.observableArrayList(result.getKey())); } + @FXML + + private void ouvertureManip(ActionEvent event) { + try { + // Charger la page Radio_Manip + FXMLLoader loader = new FXMLLoader(getClass().getResource("Radio_Manip.fxml")); + Parent root = loader.load(); + + // Obtenir le contrôleur de la nouvelle page + Radio_ManipController controller = loader.getController(); + + // Passer le radiologue au contrôleur de la nouvelle page + controller.setRadiologue(radiologue); + + // Obtenir la scène actuelle et la fenêtre + Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); + + Scene scene = new Scene(root); + + // Changer la scène pour la page Radio_Manip + stage.setScene(scene); + stage.setTitle("Page Manipulateur"); + stage.setFullScreen(true); + stage.show(); + } catch (IOException e) { + e.printStackTrace(); + showAlert("Erreur", "Impossible d'ouvrir la page manipulateur"); + } + } + private void CouleurDeLigne() { // Appliquer un style aux lignes en fonction de l'état du compte rendu tableViewExamens.setRowFactory(tv -> new TableRow<Examen>() { -- GitLab