# Questionnaires für SecurityArea - Implementierungsplan ## Übersicht Implementierung der Funktionalität zur Hinzufügung von Fragebögen (Questionnaires) zu SecurityArea-Entitäten in den Basisdaten. Dies ermöglicht es, Fragebögen bereits bei der Erstellung von Sicherheitsbereichen zu hinterlegen, anstatt erst bei der Ticket-Erstellung. ## Hintergrund - **Aktueller Stand**: Questionnaires werden nur zu TicketSecurityArea hinzugefügt - **Neues Ziel**: Questionnaires sollen auch zu SecurityArea (Basisdaten) hinzugefügt werden können - **Grund**: Verbesserung des Workflows entsprechend Kundenwunsch ## Schritt-für-Schritt Implementierung ### 1. Datenbankmodell erweitern #### 1.1 SecurityArea Entität anpassen - **Datei**: `src/main/java/model/securityarea/SecurityArea.java` - **Aufgabe**: - Neue Beziehung zu Questionnaires hinzufügen - `@OneToMany` Mapping für `SecurityAreaQuestionnaire` implementieren - Ähnlich wie bei TicketSecurityArea → SecurityAreaQuestionnaire #### 1.2 Neue Entität: SecurityAreaQuestionnaire - **Datei**: `src/main/java/model/securityarea/SecurityAreaQuestionnaire.java` (neu erstellen) - **Aufgabe**: - Entität ähnlich zu `TicketSecurityAreaQuestionnaire` erstellen - `@ManyToOne` Beziehung zu SecurityArea - `@OneToMany` Beziehung zu SecurityAreaQuestion - Konstruktor für Kopieren von Questionnaire → SecurityAreaQuestionnaire #### 1.3 Neue Entität: SecurityAreaQuestion - **Datei**: `src/main/java/model/securityarea/SecurityAreaQuestion.java` (neu erstellen) - **Aufgabe**: - Entität ähnlich zu `SecurityAreaQuestion` aus tickets package erstellen - `@ManyToOne` Beziehung zu SecurityAreaQuestionnaire - Alle notwendigen Felder für Fragen implementieren ### 2. Business Logic implementieren #### 2.1 SecurityAreaManager erweitern - **Datei**: `src/main/java/business/securityarea/SecurityAreaManager.java` - **Aufgabe**: - Methoden für Questionnaire-Management hinzufügen - `addQuestionnaireToSecurityArea()` - `removeQuestionnaireFromSecurityArea()` - `getAvailableQuestionnaires()` #### 2.2 QuestionnaireManager anpassen - **Datei**: `src/main/java/business/questions/QuestionnaireManager.java` - **Aufgabe**: - Methoden für SecurityArea-Questionnaire Verknüpfung - Validierung für Questionnaire-Zuordnung ### 3. Controller Layer erweitern #### 3.1 SecurityAreaController anpassen - **Datei**: `src/main/java/controller/securityarea/SecurityAreaController.java` - **Aufgabe**: - Properties für Questionnaire-Auswahl hinzufügen - `selectedQuestionnaire`, `availableQuestionnaires` - Methoden: `addQuestionnaireToArea()`, `removeQuestionnaireFromArea()` - Integration in `save()` und `editSelected()` Methoden #### 3.2 Neue Controller für SecurityAreaQuestionnaire - **Datei**: `src/main/java/controller/securityarea/SecurityAreaQuestionnaireController.java` (optional) - **Aufgabe**: - Dedicated Controller für Questionnaire-Management - Ähnlich zu bestehenden Questionnaire-Controllern ### 4. UI Implementation #### 4.1 Hauptseite erweitern - **Datei**: `src/main/webapp/resources/user/sec/create.xhtml` - **Aufgabe**: - Neue Sektion für Questionnaires in SecurityArea-Details hinzufügen - Position: Nach den DangerPoints, vor dem Bottom-Bereich - Accordion-Panel für Questionnaires ähnlich wie bei SecurityDevices #### 4.2 Questionnaire-Management UI - **Komponenten hinzufügen**: - DataTable für angehängte Questionnaires - Buttons: "Fragebogen hinzufügen", "Bearbeiten", "Entfernen" - Dialog für Questionnaire-Auswahl - Dialog für Questionnaire-Bearbeitung #### 4.3 Dialog-Implementierung - **Neue Dialogs in create.xhtml**: - `dlgAddQuestionnaire`: Auswahl verfügbarer Questionnaires - `dlgEditQuestionnaire`: Bearbeitung der Questions - Ähnlich zu bestehenden Device/DangerPoint Dialogs ### 5. Integration und Workflow #### 5.1 Ticket-Erstellung anpassen - **Aufgabe**: Bei Ticket-Erstellung Questionnaires von SecurityArea automatisch kopieren - **Dateien**: - Ticket-Erstellungs-Controller - TicketSecurityArea-Business-Logic #### 5.2 Copy/Clone Funktionalität - **Aufgabe**: Beim Kopieren von SecurityAreas auch Questionnaires mitkopieren - **Betroffene Methoden**: `cloneToSelectedMachine()` in SecurityAreaController ### 6. UI/UX Details #### 6.1 SecurityArea-Karte erweitern ```html