mirror of
https://github.com/pcvolkmer/osc-variant.git
synced 2025-04-19 19:56:50 +00:00
Add 'anzeige' and 'anzeige_auswahl' to profile
This commit is contained in:
parent
1224f93764
commit
636fa34efc
32
README.md
32
README.md
@ -8,4 +8,34 @@ Diese Anwendung passt eine OSC-Datei so an, dass (standortbezogene) Formularvari
|
|||||||
verwendet werden.
|
verwendet werden.
|
||||||
|
|
||||||
Hierzu wird die Datei deserialisiert, die entsprechenden Formularfelder ermittelt und die Formularvariante
|
Hierzu wird die Datei deserialisiert, die entsprechenden Formularfelder ermittelt und die Formularvariante
|
||||||
sowie die Anzeige anhand eines Profils angepasst.
|
sowie die Anzeige anhand eines Profils angepasst.
|
||||||
|
|
||||||
|
## Profile
|
||||||
|
|
||||||
|
Zum Erstellen von Varianten einer OSC-Datei wird eine Profildatei im YAML-Format verwendet.
|
||||||
|
|
||||||
|
In ihr sind die durchzuführenden Änderungen definiert. Eine Profildatei hat die folgende Form:
|
||||||
|
|
||||||
|
```
|
||||||
|
forms:
|
||||||
|
- name: "ExampleForm"
|
||||||
|
fields:
|
||||||
|
- name: "ref_first_mtb"
|
||||||
|
referenced_data_form: "Formularverweis.Variante"
|
||||||
|
anzeige_auswahl: "Referenziertes Formular vom: {Datum}"
|
||||||
|
anzeige: "Datum im referenzierten Formular: {Datum}"
|
||||||
|
```
|
||||||
|
|
||||||
|
Hierzu wird die Anwendung angewiesen im Formular "ExampleForm" den Formularverweis im Formularfeld "ref_first_mtb":
|
||||||
|
|
||||||
|
* den Verweis auf das Formular "Formularverweis.Variante" zu setzen
|
||||||
|
* die Anzeige im Auswahlmenü auf "Referenziertes Formular vom: {Datum}" zu setzen
|
||||||
|
* die Anzeige unterhalb des Auswahlmenüs auf "Datum im referenzierten Formular: {Datum}" zu setzen
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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.
|
||||||
|
@ -22,12 +22,12 @@
|
|||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use std::str::FromStr;
|
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct Profile {
|
struct Profile {
|
||||||
forms: Vec<Form>
|
forms: Vec<Form>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for Profile {
|
impl FromStr for Profile {
|
||||||
@ -36,7 +36,7 @@ impl FromStr for Profile {
|
|||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
match serde_yaml::from_str::<Profile>(s) {
|
match serde_yaml::from_str::<Profile>(s) {
|
||||||
Ok(profile) => Ok(profile),
|
Ok(profile) => Ok(profile),
|
||||||
Err(err) => Err(err.to_string())
|
Err(err) => Err(err.to_string()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,28 +44,31 @@ impl FromStr for Profile {
|
|||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct Form {
|
struct Form {
|
||||||
name: String,
|
name: String,
|
||||||
fields: Vec<FieldChanges>
|
fields: Vec<FieldChanges>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct FieldChanges {
|
struct FieldChanges {
|
||||||
name: String,
|
name: String,
|
||||||
referenced_data_form: Option<String>
|
referenced_data_form: Option<String>,
|
||||||
|
anzeige: Option<String>,
|
||||||
|
anzeige_auswahl: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::str::FromStr;
|
|
||||||
use crate::profile::Profile;
|
use crate::profile::Profile;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_deserialize_profile() {
|
fn should_deserialize_profile() {
|
||||||
let content =
|
let content = "forms:
|
||||||
"forms:
|
|
||||||
- name: 'DNPM Therapieplan'
|
- name: 'DNPM Therapieplan'
|
||||||
fields:
|
fields:
|
||||||
- name: ref_first_mtb
|
- name: ref_first_mtb
|
||||||
referenced_data_form: 'OS.Tumorkonferenz.VarianteUKW'
|
referenced_data_form: 'OS.Tumorkonferenz.VarianteUKW'
|
||||||
|
anzeige: 'Datum: {Datum}'
|
||||||
|
anzeige_auswahl: 'TK vom {Datum}'
|
||||||
";
|
";
|
||||||
|
|
||||||
match Profile::from_str(content) {
|
match Profile::from_str(content) {
|
||||||
@ -74,16 +77,48 @@ mod tests {
|
|||||||
assert_eq!(profile.forms[0].name, "DNPM Therapieplan");
|
assert_eq!(profile.forms[0].name, "DNPM Therapieplan");
|
||||||
assert_eq!(profile.forms[0].fields.len(), 1);
|
assert_eq!(profile.forms[0].fields.len(), 1);
|
||||||
assert_eq!(profile.forms[0].fields[0].name, "ref_first_mtb");
|
assert_eq!(profile.forms[0].fields[0].name, "ref_first_mtb");
|
||||||
assert_eq!(profile.forms[0].fields[0].referenced_data_form, Some("OS.Tumorkonferenz.VarianteUKW".to_string()));
|
assert_eq!(
|
||||||
},
|
profile.forms[0].fields[0].referenced_data_form,
|
||||||
Err(e) => panic!("Cannot deserialize profile: {}", e)
|
Some("OS.Tumorkonferenz.VarianteUKW".to_string())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
profile.forms[0].fields[0].anzeige,
|
||||||
|
Some("Datum: {Datum}".to_string())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
profile.forms[0].fields[0].anzeige_auswahl,
|
||||||
|
Some("TK vom {Datum}".to_string())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
Err(e) => panic!("Cannot deserialize profile: {}", e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_deserialize_profile_with_no_changes() {
|
||||||
|
let content = "forms:
|
||||||
|
- name: 'DNPM Therapieplan'
|
||||||
|
fields:
|
||||||
|
- name: ref_first_mtb
|
||||||
|
";
|
||||||
|
|
||||||
|
match Profile::from_str(content) {
|
||||||
|
Ok(profile) => {
|
||||||
|
assert_eq!(profile.forms.len(), 1);
|
||||||
|
assert_eq!(profile.forms[0].name, "DNPM Therapieplan");
|
||||||
|
assert_eq!(profile.forms[0].fields.len(), 1);
|
||||||
|
assert_eq!(profile.forms[0].fields[0].name, "ref_first_mtb");
|
||||||
|
assert_eq!(profile.forms[0].fields[0].referenced_data_form, None);
|
||||||
|
assert_eq!(profile.forms[0].fields[0].anzeige, None);
|
||||||
|
assert_eq!(profile.forms[0].fields[0].anzeige_auswahl, None);
|
||||||
|
}
|
||||||
|
Err(e) => panic!("Cannot deserialize profile: {}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_not_deserialize_bad_profile() {
|
fn should_not_deserialize_bad_profile() {
|
||||||
let content =
|
let content = "forms:
|
||||||
"forms:
|
|
||||||
- name: 'DNPM Therapieplan'
|
- name: 'DNPM Therapieplan'
|
||||||
# incomplete profile ...
|
# incomplete profile ...
|
||||||
";
|
";
|
||||||
@ -91,5 +126,4 @@ mod tests {
|
|||||||
let actual = Profile::from_str(content);
|
let actual = Profile::from_str(content);
|
||||||
assert!(actual.is_err());
|
assert!(actual.is_err());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user