From e55768b6d9c673b6f1ec3d0c46c37912adf983f4 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sat, 17 May 2025 11:24:38 +0200 Subject: [PATCH] feat: add minimal form references for given profile --- src/model/form.rs | 66 ++++++++++++++++++++++++++++++++++++++++++++++ src/model/other.rs | 18 +++++++++++-- 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/src/model/form.rs b/src/model/form.rs index f240b5d..776e4b2 100644 --- a/src/model/form.rs +++ b/src/model/form.rs @@ -586,6 +586,72 @@ impl Checkable for Form { } } +impl Form { + /// Create a new minimal form reference with given form name + pub fn new_form_reference(reference_name: &str) -> Self { + Self { + _type: PhantomData::, + data_catalogues: None, + category: "0".to_string(), + name: reference_name.to_string(), + version: None, + menu_entry: None, + title: None, + description: None, + note: None, + readonly: false, + active: None, + tudok_position: "0".to_string(), + aktenbereich: None, + befragung_relevant: None, + hotkey: None, + summary: None, + big_summary: None, + kalender_schnipsel: None, + mail_template: None, + erkrankung_text: None, + erkrankung_text_long: None, + erkrankung_prozedur_text: None, + erkrankung_summary: None, + erkrankung_big_summary: None, + kontext: None, + datenart: None, + show_history_button: None, + tudok_readonly: None, + vitalstatus_relevant: None, + auto_nummerierung: None, + zwischenspeichern: None, + zurueckblaettern: None, + datenbankexport: None, + datenschutz_relevant: None, + konferenz_relevant: None, + drucken: None, + hat_unterformulare: false, + script_beim_schliessen: None, + script_beim_speichern: None, + script_beim_neuanlegen: None, + script_beim_bearbeiten: None, + script_beim_kopieren: None, + script_beim_import: None, + script_beim_anonymisieren: None, + sid: "".to_string(), + guid: "".to_string(), + revision: 0, + max_anzahl: None, + verknuepft_guid: None, + seitenanzahl_sichtbar: None, + entries: None, + plausibility_rules: None, + haeufigkeiten: None, + kennzahlen: None, + ordner: None, + menu_category: None, + punkte_kategorien: None, + ansichten: None, + } + } +} + #[derive(Serialize, Deserialize, Debug)] #[serde(deny_unknown_fields)] pub struct DataCatalogues { diff --git a/src/model/other.rs b/src/model/other.rs index ce14f44..794d80f 100644 --- a/src/model/other.rs +++ b/src/model/other.rs @@ -19,7 +19,7 @@ */ use crate::model::form::{DataFormReferenceType, Form}; -use crate::model::{Ansicht, Filter, FormEntry, Ordner, RefEntries, Script, Sortable}; +use crate::model::{Ansicht, Comparable, Filter, FormEntry, Ordner, RefEntries, Script, Sortable}; use serde::{Deserialize, Serialize}; // Ablaufschema ... @@ -519,7 +519,21 @@ impl FormEntry for Entry { } fn update_referenced_data_form(&mut self, value: String) { - self.referenced_data_form = Some(value); + self.referenced_data_form = Some(value.to_string()); + + // Add new minimal form reference if not already present + if let Some(ref mut form) = self.data_form_references { + if !form + .referenced_data_form + .iter() + .map(super::Comparable::get_name) + .collect::>() + .contains(&value) + { + form.referenced_data_form + .push(Form::new_form_reference(&value)); + } + } } fn update_anzeige(&mut self, value: String) {