From f9b9c6d312ff9b2b55f3ce3693cf6dbfc3c27548 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 5 Jun 2023 14:42:23 +0200 Subject: [PATCH] Add menu category changes --- README.md | 7 ++++ src/model/data_form.rs | 8 +++++ src/model/unterformular.rs | 8 +++++ src/profile.rs | 65 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) diff --git a/README.md b/README.md index 5fba21a..4d454c4 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,10 @@ forms: referenced_data_form: "Formularverweis.Variante" anzeige_auswahl: "Referenziertes Formular vom: {Datum}" anzeige: "Datum im referenzierten Formular: {Datum}" + menu_category: + name: Beispielformulare + position: 1.0 + column: 0 ``` Hierzu wird die Anwendung angewiesen im Formular "ExampleForm" den Formularverweis im Formularfeld "ref_first_mtb": @@ -60,6 +64,9 @@ und dabei die vorhandenen Angaben für den Formularverweis zu ersetzen. Die Angaben für `referenced_data_form`, `anzeige_auswahl` und `anzeige` sind optional. Wird keine Angabe gemacht, wird der bestehende Wert beibehalten. +Zudem kann die Menükategorie angepasst werden. +Hierbei sind alle Felder `name`, `position` und `column` verpflichtend, wenn eine Angabe zu einer Änderung der Menükategorie gemacht wird. + Es können beliebig viele Formulare mit beliebig vielen Änderungen zu Formularverweisen in einer Profildatei hinterlegt werden, jedoch ist mindestens eine Angabe zu einem Formularfeld erforderlich. diff --git a/src/model/data_form.rs b/src/model/data_form.rs index 96d18d5..1606e5a 100644 --- a/src/model/data_form.rs +++ b/src/model/data_form.rs @@ -172,6 +172,14 @@ impl DataForm { } } }); + + if let Some(menu_category) = &profile_form.menu_category { + self.menu_category = Some(MenuCategory { + name: menu_category.name.clone(), + position: menu_category.position.clone(), + column: menu_category.column.clone(), + }); + } }) } }); diff --git a/src/model/unterformular.rs b/src/model/unterformular.rs index 72ac737..34dff5f 100644 --- a/src/model/unterformular.rs +++ b/src/model/unterformular.rs @@ -181,6 +181,14 @@ impl Unterformular { } } }); + + if let Some(menu_category) = &profile_form.menu_category { + self.menu_category = Some(MenuCategory { + name: menu_category.name.clone(), + position: menu_category.position.clone(), + column: menu_category.column.clone(), + }); + } }) } }); diff --git a/src/profile.rs b/src/profile.rs index b754500..9e76df5 100644 --- a/src/profile.rs +++ b/src/profile.rs @@ -44,7 +44,9 @@ impl FromStr for Profile { #[derive(Deserialize)] pub struct Form { pub name: String, + #[serde(default)] pub form_references: Vec, + pub menu_category: Option, } #[derive(Deserialize)] @@ -55,6 +57,13 @@ pub struct FormReference { pub anzeige_auswahl: Option, } +#[derive(Deserialize)] +pub struct MenuCategory { + pub name: String, + pub position: String, + pub column: String, +} + #[cfg(test)] mod tests { use crate::profile::Profile; @@ -62,6 +71,32 @@ mod tests { #[test] fn should_deserialize_profile() { + let content = "forms: + - name: 'DNPM Therapieplan' + menu_category: + name: DNPM + position: 3.0 + column: 1 + form_references: + - name: ref_first_mtb + referenced_data_form: 'OS.Tumorkonferenz.VarianteUKW' + anzeige: 'Datum: {Datum}' + anzeige_auswahl: 'TK vom {Datum}' + "; + + match Profile::from_str(content) { + Ok(profile) => { + assert_eq!(profile.forms.len(), 1); + assert_eq!(profile.forms[0].name, "DNPM Therapieplan"); + assert!(profile.forms[0].menu_category.is_some()); + assert_eq!(profile.forms[0].form_references.len(), 1); + } + Err(e) => panic!("Cannot deserialize profile: {}", e), + } + } + + #[test] + fn should_deserialize_form_reference() { let content = "forms: - name: 'DNPM Therapieplan' form_references: @@ -94,6 +129,35 @@ mod tests { } } + #[test] + fn should_deserialize_menu_category() { + let content = "forms: + - name: 'DNPM Therapieplan' + menu_category: + name: DNPM + position: 3.0 + column: 1 + "; + + match Profile::from_str(content) { + Ok(profile) => { + assert_eq!(profile.forms.len(), 1); + assert_eq!(profile.forms[0].name, "DNPM Therapieplan"); + assert!(profile.forms[0].menu_category.is_some()); + assert!(profile.forms[0] + .menu_category + .as_ref() + .is_some_and(|menu_category| { + assert_eq!(menu_category.name, "DNPM"); + assert_eq!(menu_category.position, "3.0"); + assert_eq!(menu_category.column, "1"); + true + })); + } + Err(e) => panic!("Cannot deserialize profile: {}", e), + } + } + #[test] fn should_deserialize_profile_with_no_changes() { let content = "forms: @@ -123,6 +187,7 @@ mod tests { fn should_not_deserialize_bad_profile() { let content = "forms: - name: 'DNPM Therapieplan' + - form_references: Unknown # incomplete profile ... ";