Compare commits
130 Commits
Author | SHA1 | Date | |
---|---|---|---|
c104568e5b | |||
687ce567e3 | |||
573cd743d1 | |||
0d4b60096a | |||
4c147a9764 | |||
d1fa0b797d | |||
2a3ff8c63e | |||
7e79256ffd | |||
1314cb0e4b | |||
d28d51e875 | |||
86c8a9a1b4 | |||
c3fde7fc28 | |||
e71e69d4c4 | |||
865e5bff1e | |||
2296fcfe41 | |||
92153f6d6c | |||
def5fce235 | |||
6ec282ee68 | |||
4479efc196 | |||
84e298e9ad | |||
61f494f10f | |||
21e7d44187 | |||
bcbed5bca3 | |||
c35c73f56a | |||
a255349672 | |||
5198fa7358 | |||
bed957a5cb | |||
d01bdabf35 | |||
346112b069 | |||
5d1ee1f96e | |||
3043a07632 | |||
da90e8e528 | |||
1f744c8c42 | |||
5868dc0cd4 | |||
fe1da47f84 | |||
c8492c6266 | |||
bbd7bd1d7b | |||
cb044015d2 | |||
08640363a2 | |||
578c126a20 | |||
180cb351a6 | |||
d5bb0cd5fb | |||
65c6f9335f | |||
80c8177a58 | |||
684a11a81a | |||
b62204109f | |||
f2443d6e93 | |||
0b4763bf99 | |||
45430302ae | |||
d5c4ec39ab | |||
9ae32ddaa6 | |||
796ba7b375 | |||
c94e704b01 | |||
220e98ce1f | |||
d2e236f88a | |||
1f0fadc181 | |||
ac8320b917 | |||
7a92c7bc1e | |||
4ec52d290a | |||
9f83041554 | |||
e80d75648e | |||
6e963b63cf | |||
9e39a7b868 | |||
80845150aa | |||
c3429e1105 | |||
799fb9e112 | |||
fa96c5df19 | |||
4953b40a39 | |||
f5ca26c5e0 | |||
10ad2d4f23 | |||
2eea99aa32 | |||
d71c8a02e3 | |||
e54f107c39 | |||
a29ee55003 | |||
c83b8726cc | |||
f7705a8bf3 | |||
174a49373c | |||
8717efdde5 | |||
7997e307fa | |||
7a5041e04c | |||
76bdbd36e8 | |||
65cb5c261f | |||
f382a8738b | |||
68d8c81951 | |||
921edd7920 | |||
1e168ba861 | |||
f58a13117c | |||
3f71c7a779 | |||
a974a6cd18 | |||
1116d240dd | |||
6fe2a41932 | |||
2f60c2c5d1 | |||
3ce046a238 | |||
300df897de | |||
c2d204ffeb | |||
044a5b82c2 | |||
4ab48ff596 | |||
a290de26e7 | |||
95dfa95562 | |||
c733c238de | |||
bf15d264ba | |||
687a5cce20 | |||
06aa271056 | |||
1d03ff0bbc | |||
78ceeb5017 | |||
c141fcff58 | |||
b04dc2cb4b | |||
01c971bef5 | |||
8c4de2915a | |||
dccb3145db | |||
16558cc9a1 | |||
e8959d1024 | |||
01f7538122 | |||
ca5028adce | |||
3a9969e439 | |||
2ca7f4211d | |||
0cbada1fc8 | |||
0f109d5be8 | |||
e366226a64 | |||
adaf75c5fc | |||
75a350764e | |||
1efaacfa97 | |||
9404d58809 | |||
5db6285a95 | |||
3f0b49815a | |||
ad7ea1457c | |||
9068dde1c3 | |||
02b4bc07a3 | |||
a89a8103e5 | |||
efbff88b1a |
141
HISTORY.md
@ -1,3 +1,144 @@
|
||||
Version 2.2.1 (2015-12-03)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: 'Alternative' Verordnungen wurden nicht erkannt, wenn in der selben Zeile nicht auch eine 'kanonische' Verordnung stand.
|
||||
- VERBESSERT: Fehlermeldung "Ein Name darf nicht mit dem Zeichen ' ' beginnen" wurde abgestellt (Fehlernr. 6a36e38b).
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.2.0 (2015-12-03)
|
||||
========================================================================
|
||||
|
||||
- NEU: Funktion zum Formatieren der Medikationsliste.
|
||||
- VERBESSERT: Kohlehydratdefizientes Transferrin hinzugefügt (als 'CDT') und Ambulanzstil angepaßt.
|
||||
- VERBESSERT: Referenzbereiche zu Immunologie-Vorlage im Ambulanzstil hinzugefügt.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.13 (2015-11-12)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Parameter für Aldosteron, Renin und Schwangerschaftstest einprogrammiert.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.12 (2015-11-04)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Lp(a) zu den bekannten Parametern hinzugefügt.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.11 (2015-10-28)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Ambulanzstil überarbeitet, CK-MB wird jetzt mit ausgegeben.
|
||||
- VERBESSERT: Benutzereinstellungen werden nicht mehr jedes Mal zurückgesetzt.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.10 (2015-10-24)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: PSA wird jetzt richtig erkannt.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.9 (2015-10-18)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Integritätsprüfung für Updates wurde für besseren Algorithmus (SHA-256) vorbereitet.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.8 (2015-10-11)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Alpha-Fetoprotein (AFP) zu den bekannten Parametern hinzugefügt.
|
||||
- VERBESSERT: Einstellungen werden nach Office-Update nicht vergessen.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.7 (2015-10-02)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Statt Sekretariatsmodus stand zweimal Ärztemodus im Begrüßungsbildschirm.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.6. (2015-09-27)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Eingebaute Stile überarbeitet.
|
||||
- VERBESSERT: Troponin T wurde nicht richtig verarbeitet.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.5. (2015-09-24)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: NT-proBNP wird jetzt korrekt ausgegeben.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.4 (2015-09-23)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Unkonventionell ausgegebene Laborwerte (v.a. Cyclosporin-A vor Gabe) wurden nicht richtig erkannt.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.3. (2015-09-18)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: CsA-Talspiegel tauchte nicht in der Ausgabe auf.
|
||||
- VERBESSERT: Extreme Werte (mit "<" oder ">") wurden nicht sehr schön formatiert.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.2 (2015-09-11)
|
||||
========================================================================
|
||||
|
||||
- GEÄNDERT: Sammelurin-Proteinurie als Prot abgekürzt.
|
||||
- VERBESSERT: Ambulanzstil überarbeitet.
|
||||
- VERBESSERT: Evtl. vorgegebener Kommentartext wird jetzt automatisch markiert, damit er b.B. einfach durch Lostippen überschrieben werden kann.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.1 (2015-09-07)
|
||||
========================================================================
|
||||
|
||||
- VERBESSERT: Fehler bei der Kommentaraufforderung wurden behoben.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.1.0 (2015-09-06)
|
||||
========================================================================
|
||||
|
||||
- NEU: Optionale Kommentare zu Laborwerten.
|
||||
- NEU: Sekretariatsmodus (siehe 'Einstellungen'), um die Nachfrage nach Zusatz-Kommentaren zu unterdrücken.
|
||||
- NEU: Wenn kein Text markiert ist, wird ein Versuch unternommen, die Labordaten im Arztbrief automatisch zu erkennen; dabei wird der erste erkannte Lauris-Laborblock formatiert.
|
||||
- VERBESSERT: Bug in der Markierung von speziellen Parametern, um immer Referenzbereiche auszugeben.
|
||||
- VERBESSERT: Kein Absturz mehr, wenn Labordaten NT-proBNP enthalten.
|
||||
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
|
||||
Version 2.0.1 (2015-09-02)
|
||||
========================================================================
|
||||
|
||||
|
22
README.md
@ -23,6 +23,28 @@ typischerweise so aussieht:
|
||||
Und so weiter, es gibt noch mehr Variationen.
|
||||
|
||||
|
||||
## Quellcode
|
||||
|
||||
zaaReloaded2 ist in C# mit VSTO geschrieben, unter Zuhilfenahme von
|
||||
Visual Studio Professional 2013. Der Quellcode liegt in einem öffentlich
|
||||
zugänglichen Git-Repository:
|
||||
|
||||
<http://git.bovender.de>
|
||||
|
||||
Clonen:
|
||||
|
||||
git clone http://git.bovender.de/zaaReloaded2.git
|
||||
|
||||
Schreibzugriff auf git.bovender.de gibt es nur per SSH...
|
||||
|
||||
Die Visual-Studio-Lösung läßt sich direkt nach dem Clonen nicht bauen,
|
||||
weil die Strong-Key-Datei `./zaaReloaded2/zaaReloaded2.pfx` nur ein
|
||||
symbolischer Link ist auf eine Datei außerhalb des Repositoriums, damit
|
||||
der Schüssel nicht öffentlich preisgegeben wird. Also einfach selber
|
||||
eine PFX-Datei generieren, oder in den Projekteinstellungen das
|
||||
Signieren ausschalten.
|
||||
|
||||
|
||||
## Programmteile
|
||||
|
||||
Im Sinne einer _separation of concerns_ ist die Programmlogik in
|
||||
|
61
Tests/Controller/Comments/CommentPoolTest.cs
Executable file
@ -0,0 +1,61 @@
|
||||
/* CommentPoolTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
|
||||
namespace Tests.Controller.Comments
|
||||
{
|
||||
[TestFixture]
|
||||
class CommentPoolTest
|
||||
{
|
||||
[Test]
|
||||
public void CreateCommentIfDoesNotExist()
|
||||
{
|
||||
CommentPool.Default.Reset();
|
||||
int n = CommentPool.Default.Count;
|
||||
ItemComment i = CommentPool.Default.GetCommentFor("item \"<>\"");
|
||||
Assert.AreEqual(n + 1, CommentPool.Default.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ReturnExistingComment()
|
||||
{
|
||||
ItemComment i = CommentPool.Default.GetCommentFor("item \"<>\"");
|
||||
int n = CommentPool.Default.Count;
|
||||
i = CommentPool.Default.GetCommentFor("item \"<>\"");
|
||||
Assert.AreEqual(n, CommentPool.Default.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void BuildingCommentRaisesEvent()
|
||||
{
|
||||
ItemComment i = CommentPool.Default.GetCommentFor("item \"<>\"");
|
||||
int eventRaised = 0;
|
||||
CommentPool.Default.FillInComment += (sender, args) =>
|
||||
{
|
||||
eventRaised += 1;
|
||||
};
|
||||
string comment = i.BuildComment();
|
||||
Assert.AreEqual(1, eventRaised);
|
||||
}
|
||||
}
|
||||
}
|
58
Tests/Controller/Comments/ItemCommentTest.cs
Executable file
@ -0,0 +1,58 @@
|
||||
/* ItemCommentTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using zaaReloaded2.Formatter;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
|
||||
namespace Tests.Controller.Comments
|
||||
{
|
||||
[TestFixture]
|
||||
class ItemCommentTest
|
||||
{
|
||||
[Test]
|
||||
public void FactoryWithGoodDefinition()
|
||||
{
|
||||
ItemComment i = ItemComment.FromDefinitionString("TAC \"(Zielbereich: <4-7> µg/l)\"");
|
||||
Assert.IsNotNull(i);
|
||||
Assert.AreEqual("(Zielbereich: ", i.Prefix);
|
||||
Assert.AreEqual("4-7", i.Value);
|
||||
Assert.AreEqual(" µg/l)", i.Suffix);
|
||||
Assert.AreEqual("TAC", i.Item);
|
||||
Assert.AreEqual("(Zielbereich: 4-7 µg/l)", i.BuildComment());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FactoryWithBadDefinition()
|
||||
{
|
||||
ItemComment i = ItemComment.FromDefinitionString("some bogus definition");
|
||||
Assert.IsNull(i);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void EmptyValueProducesEmptyComment()
|
||||
{
|
||||
ItemComment i = ItemComment.FromDefinitionString("TAC \"(Zielbereich: <default> µg/l)\"");
|
||||
i.Value = String.Empty;
|
||||
Assert.AreEqual(String.Empty, i.BuildComment());
|
||||
}
|
||||
}
|
||||
}
|
51
Tests/Controller/Elements/CloneTest.cs
Executable file
@ -0,0 +1,51 @@
|
||||
/* CloneTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using zaaReloaded2.Controller.Elements;
|
||||
|
||||
namespace Tests.Controller.Elements
|
||||
{
|
||||
[TestFixture(typeof(SelectFirstDay))]
|
||||
[TestFixture(typeof(SelectLastDay))]
|
||||
[TestFixture(typeof(SelectEachDay))]
|
||||
class CloneTest<T> where T : ControlElementBase, new()
|
||||
{
|
||||
[Test]
|
||||
public void CloneControlElement()
|
||||
{
|
||||
T original = new T();
|
||||
original.Children = new List<FormatElementBase>()
|
||||
{
|
||||
new Items("hello"),
|
||||
new Items("world")
|
||||
};
|
||||
T clone = original.Clone() as T;
|
||||
for (int i = 0; i < original.Children.Count; i++)
|
||||
{
|
||||
Assert.AreEqual(original.Children[i].Content, clone.Children[i].Content);
|
||||
}
|
||||
clone.Children[1].Content = "something else";
|
||||
Assert.AreNotEqual(clone.Children[1].Content, original.Children[1].Content,
|
||||
"Clone's child #1 should have different content than original's child #1");
|
||||
}
|
||||
}
|
||||
}
|
@ -16,14 +16,12 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using Microsoft.Office.Interop.Word;
|
||||
using zaaReloaded2.LabModel;
|
||||
using zaaReloaded2.Formatter;
|
||||
using zaa = zaaReloaded2.Controller.Elements;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace Tests.Controller.Elements
|
||||
@ -152,7 +150,7 @@ namespace Tests.Controller.Elements
|
||||
StripMarkup(
|
||||
TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00))
|
||||
)+
|
||||
"Klinische Chemie: Na 133, SU-Protein 2,8\r\r").Replace(Environment.NewLine, "\r");
|
||||
"Klinische Chemie: Na 133, SU-Protein 3\r\r").Replace(Environment.NewLine, "\r");
|
||||
Assert.AreEqual(expected, _document.Range().Text);
|
||||
}
|
||||
|
||||
@ -176,11 +174,63 @@ namespace Tests.Controller.Elements
|
||||
StripMarkup(
|
||||
TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00))
|
||||
) +
|
||||
"Klinische Chemie: Na 133, SU-Protein 2,8, Cl 110, U-Na 99\r\r")
|
||||
"Klinische Chemie: Na 133, SU-Protein 3, Cl 110, U-Na 99\r\r")
|
||||
.Replace(Environment.NewLine, "\r");
|
||||
Assert.AreEqual(expected, _document.Range().Text);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ItemCommentWithoutHandler()
|
||||
{
|
||||
CommentPool.Default.Reset();
|
||||
Laboratory lab = new Laboratory();
|
||||
TimePoint tp = new TimePoint();
|
||||
tp.TimeStamp = new DateTime(2015, 7, 13, 13, 31, 00);
|
||||
tp.AddItem(new LabItem("Na", "133", "133"));
|
||||
tp.AddItem(new LabItem("K", "6", "5"));
|
||||
lab.AddTimePoint(tp);
|
||||
|
||||
_formatter.Laboratory = lab;
|
||||
_formatter.Settings.Elements.Add(
|
||||
new zaa.Items("Na \"(Zielbereich: <> mmol/l)\""));
|
||||
_formatter.Run();
|
||||
string expected = (
|
||||
StripMarkup(
|
||||
TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) +
|
||||
"Na 133\r\r").Replace(Environment.NewLine, "\r")
|
||||
);
|
||||
Assert.AreEqual(expected, _document.Range().Text);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ItemCommentWithHandler()
|
||||
{
|
||||
Laboratory lab = new Laboratory();
|
||||
TimePoint tp = new TimePoint();
|
||||
tp.TimeStamp = new DateTime(2015, 7, 13, 13, 31, 00);
|
||||
tp.AddItem(new LabItem("Na", "133", "133"));
|
||||
tp.AddItem(new LabItem("K", "6", "5"));
|
||||
lab.AddTimePoint(tp);
|
||||
|
||||
_formatter.Laboratory = lab;
|
||||
_formatter.Settings.Elements.Add(
|
||||
new zaa.Items("Na \"(Zielbereich: <default> µg/l)\""));
|
||||
bool messageSent = false;
|
||||
CommentPool.Default.FillInComment += (sender, args) =>
|
||||
{
|
||||
messageSent = true;
|
||||
args.Comment.Value = "4-7";
|
||||
};
|
||||
_formatter.Run();
|
||||
Assert.IsTrue(messageSent, "FillInComment message was not sent");
|
||||
string expected = (
|
||||
StripMarkup(
|
||||
TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) +
|
||||
"Na 133 (Zielbereich: 4-7 µg/l)\r\r").Replace(Environment.NewLine, "\r")
|
||||
);
|
||||
Assert.AreEqual(expected, _document.Range().Text);
|
||||
}
|
||||
|
||||
static string StripMarkup(string s)
|
||||
{
|
||||
return _markupStripper.Replace(s, string.Empty);
|
||||
|
@ -49,6 +49,11 @@ namespace Tests.Controller
|
||||
((Items)source.Elements[1]).Content,
|
||||
((Items)clone.Elements[1]).Content,
|
||||
"Items content");
|
||||
((Items)clone.Elements[1]).Content = "something else";
|
||||
Assert.AreNotEqual(
|
||||
((Items)source.Elements[1]).Content,
|
||||
((Items)clone.Elements[1]).Content,
|
||||
"Items content should be different");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
|
||||
Laborwerte vom 04.07.2015 12:31:00:
|
||||
Laborwerte vom 04.07.2015 12:31:00:
|
||||
Klinische Chemie: Na 144 mM, K 4,3 mM
|
||||
|
||||
Laborwerte vom 06.07.2015 10:28:00:
|
||||
Klinische Chemie: Na 138 mM, K 4,6 mM
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
|
||||
Laborwerte vom 04.07.2015:
|
||||
Laborwerte vom 04.07.2015:
|
||||
Klinische Chemie: Na 144 mM, K 4,3 mM
|
||||
|
||||
Laborwerte vom 06.07.2015:
|
||||
Klinische Chemie: Na 138 mM, K 4,6 mM
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
Laborwerte vom 04.07.2015:
|
||||
Laborwerte vom 04.07.2015:
|
||||
Klinische Chemie: Na 144 mM, K 4,3 mM
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
Laborwerte vom 06.07.2015:
|
||||
Laborwerte vom 06.07.2015:
|
||||
Klinische Chemie: Na 138 mM, K 4,6 mM
|
||||
|
||||
|
@ -118,6 +118,23 @@ namespace Tests.Formatter
|
||||
document.Range().Text);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FormatCyclosporine()
|
||||
{
|
||||
ZaaImporter importer = new ZaaImporter();
|
||||
importer.Import(
|
||||
"(17.09.2015 10:44:00) Cyclosporin-A vor Gabe: 130 µg/l; CK gesamt: 123 [<= 170] U/l; Cholesterin: 211");
|
||||
Document document = new Document();
|
||||
f.Formatter formatter = new f.Formatter(document);
|
||||
formatter.Laboratory = importer.Laboratory;
|
||||
formatter.Settings = new zaaReloaded2.Controller.Settings(
|
||||
new List<ElementBase>() { new Items("CsA (C0) \"(Ziel-Talspiegel: <> µg/l)\"") });
|
||||
formatter.Run();
|
||||
Assert.AreEqual(
|
||||
"Laborwerte vom 17.09.2015 10:44:00:\rCsA (C0) 130 µg/l\r\r",
|
||||
document.Range().Text);
|
||||
}
|
||||
|
||||
string GetResourceText(string resource)
|
||||
{
|
||||
try
|
||||
|
@ -40,6 +40,7 @@ namespace Tests.Importer.ZaaImporter
|
||||
LaurisItem i = new LaurisItem(laurisString);
|
||||
Assert.AreEqual(name, i.Name, "Name");
|
||||
Assert.AreEqual(unit, i.Unit, "Unit");
|
||||
Assert.IsFalse(i.IsExtreme, "IsExtreme");
|
||||
Assert.IsTrue(i.IsNumerical, "IsNumerical");
|
||||
Assert.AreEqual(value, i.NumericalValue, "NumericalValue");
|
||||
Assert.AreEqual(lowerLimit, i.LowerLimit, "Lower limit");
|
||||
@ -50,6 +51,25 @@ namespace Tests.Importer.ZaaImporter
|
||||
Assert.IsTrue(i.HasUpperLimit, "HasUpperLimit");
|
||||
}
|
||||
|
||||
[TestCase("Folsäure: > 20 [2.0 - 9.1] ng/ml; ", "Folsäure", "> 20", "ng/ml", 2, 9.1, false)]
|
||||
public void ParseLaurisWithGreaterOrLowerValue(
|
||||
string laurisString, string name, string value,
|
||||
string unit, double lowerLimit, double upperLimit, bool isNormal)
|
||||
{
|
||||
LaurisItem i = new LaurisItem(laurisString);
|
||||
Assert.AreEqual(name, i.Name, "Name");
|
||||
Assert.AreEqual(unit, i.Unit, "Unit");
|
||||
Assert.IsTrue(i.IsExtreme, "IsExtreme");
|
||||
Assert.IsFalse(i.IsNumerical, "IsNumerical");
|
||||
Assert.AreEqual(value, i.Value, "Value");
|
||||
Assert.AreEqual(lowerLimit, i.LowerLimit, "Lower limit");
|
||||
Assert.AreEqual(upperLimit, i.UpperLimit, "Upper limit");
|
||||
Assert.AreEqual(isNormal, i.IsNormal, "IsNormal");
|
||||
Assert.IsTrue(i.HasLimits, "HasLimits");
|
||||
Assert.IsTrue(i.HasLowerLimit, "HasLowerLimit");
|
||||
Assert.IsTrue(i.HasUpperLimit, "HasUpperLimit");
|
||||
}
|
||||
|
||||
[TestCase("HDL - Cholesterin: 45 [>= 35] mg/dl", "HDL - Cholesterin", 45, "mg/dl", 35, true)]
|
||||
public void ParseLaurisWithLowerLimit(
|
||||
string laurisString, string name, double value,
|
||||
@ -86,6 +106,7 @@ namespace Tests.Importer.ZaaImporter
|
||||
|
||||
[TestCase("Niedermol. Heparin (Anti-Xa): 0.99 U/ml;", "Niedermol. Heparin (Anti-Xa)", 0.99, "U/ml")]
|
||||
[TestCase("glomerul. Filtrationsr. CKD-EP: 42 ml/min /1,73qm;", "glomerul. Filtrationsr. CKD-EP", 42, "ml/min /1,73qm")]
|
||||
[TestCase("NT-proBNP: 598 [s. Bem.] pg/ml;", "NT-proBNP", 598, "pg/ml")]
|
||||
public void ParseLaurisWithoutLimits(
|
||||
string laurisString, string name, double value,
|
||||
string unit)
|
||||
|
45
Tests/Medication/ImporterTest.cs
Executable file
@ -0,0 +1,45 @@
|
||||
/* ImporterTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Tests.Medication
|
||||
{
|
||||
[TestFixture]
|
||||
class ImporterTest
|
||||
{
|
||||
[Test]
|
||||
public void ImportDrugsTwoColumns()
|
||||
{
|
||||
string s =
|
||||
"Aktuelle Medikation:\r" +
|
||||
"Advagraf 1 mg 2-0-0 CellCept 500 mg 1-0-1\r" +
|
||||
"CellCept 250 mg 1-0-1 Decortin 10 mg 1-0-0\r" +
|
||||
"Beloc-Zok mite 1-0-1 Ramipril 5 mg 0-0-1 (neu)\r" +
|
||||
"Pantozol 40 mg 0-0-1 Decostriol 0,5 µg 2-0-0\r" +
|
||||
"Euthyrox 200 µg 1-1-1 (gesteigert) Ossofortin forte 1-0-1\r" +
|
||||
"Vfend 200 mg 2-0-2 CPS-Pulver 0-1-0\r" +
|
||||
"Cyklokapron 500 mg 1-1-1 Tamsulosin 0,4 mg 1-0-0 ";
|
||||
zaaReloaded2.Medication.Importer i = new zaaReloaded2.Medication.Importer(s);
|
||||
Assert.AreEqual(14, i.Prescriptions.Count);
|
||||
}
|
||||
}
|
||||
}
|
128
Tests/Medication/PrescriptionTest.cs
Executable file
@ -0,0 +1,128 @@
|
||||
/* PrescriptionTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using zaaReloaded2.Medication;
|
||||
|
||||
namespace Tests.Medication
|
||||
{
|
||||
[TestFixture]
|
||||
class PrescriptionTest
|
||||
{
|
||||
[Test]
|
||||
[TestCase("Ramipril 5 mg 1-2-3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 -2 - 3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 - 2 - 3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 - 2 - 3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 1/2-2-3", "Ramipril 5 mg", "1 1/2", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 1/2 - 2 - 3", "Ramipril 5 mg", "1 1/2", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg ½-⅓-¼", "Ramipril 5 mg", "½", "⅓", "¼")]
|
||||
public void ParseLine(string line, string drug, string morning,
|
||||
string noon, string evening)
|
||||
{
|
||||
Prescription p = Prescription.FromLine(line);
|
||||
Assert.AreEqual(drug, p.Drug, "Drug should be " + drug);
|
||||
Assert.AreEqual(morning, p.Morning, "Morning should be " + morning);
|
||||
Assert.AreEqual(noon, p.Noon, "Noon should be " + noon);
|
||||
Assert.AreEqual(evening, p.Evening, "Evening should be " + evening);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MultiplePrescriptions()
|
||||
{
|
||||
IEnumerable<Prescription> list = Prescription.ManyFromLine(
|
||||
"Ramipril 5 mg 1-0-0 \t Prograf 1 mg 1-0-1");
|
||||
Assert.AreEqual(2, list.Count());
|
||||
Assert.AreEqual("Ramipril 5 mg\t1-0-0", list.First().ToString());
|
||||
Assert.AreEqual("Prograf 1 mg\t1-0-1", list.Last().ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCase("Ramipril 5 mg", "1", "0", "0", "0", "Ramipril 5 mg\t1-0-0-0")]
|
||||
[TestCase("Ramipril 5 mg", "1", "0", "0", "", "Ramipril 5 mg\t1-0-0")]
|
||||
[TestCase("Ramipril 5 mg", "1", "0", "", "", "Ramipril 5 mg\t1-0")]
|
||||
[TestCase("Ramipril 5 mg", "1", "", "", "", "Ramipril 5 mg\t1")]
|
||||
[TestCase("Ramipril 5 mg", "1", "", "0", "0", "Ramipril 5 mg\t1-0-0-0")]
|
||||
[TestCase("Ramipril 5 mg", "1", "0", "", "0", "Ramipril 5 mg\t1-0-0-0")]
|
||||
[TestCase("Ramipril 5 mg", "1", "", "", "0", "Ramipril 5 mg\t1-0-0-0")]
|
||||
[TestCase("Ramipril 5 mg", "", "", "", "", "Ramipril 5 mg\t")]
|
||||
public void PrescriptionToString(string drug, string morning, string noon,
|
||||
string evening, string night, string formatted)
|
||||
{
|
||||
Prescription p = new Prescription(drug, morning, noon, evening, night);
|
||||
Assert.AreEqual(formatted, p.ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PrescriptionWithComment()
|
||||
{
|
||||
Prescription p = Prescription.FromLine("Ramipril 5 mg 1-0-2 (gesteigert)");
|
||||
Assert.AreEqual("Ramipril 5 mg", p.Drug);
|
||||
Assert.AreEqual("1", p.Morning);
|
||||
Assert.AreEqual("0", p.Noon);
|
||||
Assert.AreEqual("2", p.Evening);
|
||||
Assert.AreEqual("(gesteigert)", p.Comment);
|
||||
Assert.AreEqual("Ramipril 5 mg\t1-0-2 (gesteigert)", p.ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PrescriptionsLineWithComment()
|
||||
{
|
||||
IList<Prescription> list = Prescription.ManyFromLine(
|
||||
"Ramipril 5 mg 1-0-2 (gesteigert) \t Concor 2,5 mg 3-2-1-0 neu");
|
||||
Assert.AreEqual(2, list.Count);
|
||||
Assert.AreEqual("Ramipril 5 mg", list[0].Drug);
|
||||
Assert.AreEqual("1", list[0].Morning);
|
||||
Assert.AreEqual("0", list[0].Noon);
|
||||
Assert.AreEqual("2", list[0].Evening);
|
||||
Assert.AreEqual("", list[0].Night);
|
||||
Assert.AreEqual("(gesteigert)", list[0].Comment);
|
||||
Assert.AreEqual("Concor 2,5 mg", list[1].Drug);
|
||||
Assert.AreEqual("3", list[1].Morning);
|
||||
Assert.AreEqual("2", list[1].Noon);
|
||||
Assert.AreEqual("1", list[1].Evening);
|
||||
Assert.AreEqual("0", list[1].Night);
|
||||
Assert.AreEqual("neu", list[1].Comment);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PrescriptionWithoutTypicalDosing()
|
||||
{
|
||||
Prescription p = Prescription.FromLine("Eusaprim forte\t alle zwei Tage");
|
||||
Assert.AreEqual("Eusaprim forte", p.Drug);
|
||||
Assert.AreEqual("alle zwei Tage", p.Comment);
|
||||
Assert.AreEqual("Eusaprim forte\talle zwei Tage", p.ToString(), "ToString");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[TestCase("CellCept 500 mg", true)]
|
||||
[TestCase("Cell CEpt 500 mg", true)]
|
||||
[TestCase("Myfortic", true)]
|
||||
[TestCase("Mycophenolatmofetil 500 mg", true)]
|
||||
[TestCase("Cellophan 5 g", false)]
|
||||
[TestCase("MMF 500 mg", true)]
|
||||
public void MmfProperty(string drug, bool isMmf)
|
||||
{
|
||||
Prescription p = new Prescription(drug);
|
||||
Assert.AreEqual(isMmf, p.IsMmf);
|
||||
}
|
||||
}
|
||||
}
|
@ -50,7 +50,7 @@ namespace Tests.Controller
|
||||
serializer.Serialize(stream, element);
|
||||
stream.Position = 0;
|
||||
StreamReader sr = new StreamReader(stream);
|
||||
Console.WriteLine(sr.ReadToEnd());
|
||||
// Console.WriteLine(sr.ReadToEnd());
|
||||
stream.Position = 0;
|
||||
SelectFirstDay deserialized = serializer.Deserialize(stream) as SelectFirstDay;
|
||||
Assert.IsNotNull(deserialized);
|
||||
|
@ -41,8 +41,8 @@
|
||||
<AssemblyOriginatorKeyFile>zaaReloaded2.pfx</AssemblyOriginatorKeyFile>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Bovender, Version=0.2.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Bovender.0.2.0.0\lib\net40\Bovender.dll</HintPath>
|
||||
<Reference Include="Bovender, Version=0.5.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Bovender.0.5.0.0\lib\net40\Bovender.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
||||
@ -80,10 +80,16 @@
|
||||
</Otherwise>
|
||||
</Choose>
|
||||
<ItemGroup>
|
||||
<Compile Include="Controller\Comments\CommentPoolTest.cs" />
|
||||
<Compile Include="Controller\Comments\ItemCommentTest.cs" />
|
||||
<Compile Include="Controller\Elements\CloneTest.cs" />
|
||||
<Compile Include="Medication\ImporterTest.cs" />
|
||||
<Compile Include="Medication\PrescriptionTest.cs" />
|
||||
<Compile Include="SerializationTest.cs" />
|
||||
<Compile Include="Controller\SettingsRepositoryTest.cs" />
|
||||
<Compile Include="Controller\SettingsTest.cs" />
|
||||
<Compile Include="Formatter\DocumentWriterTest.cs" />
|
||||
<Compile Include="Thesaurus\ParametersTest.cs" />
|
||||
<Compile Include="Thesaurus\ThesaurusTest.cs" />
|
||||
<Compile Include="Controller\Elements\ItemsTest.cs" />
|
||||
<Compile Include="Formatter\FormatterTest.cs" />
|
||||
@ -96,6 +102,7 @@
|
||||
<Compile Include="Importer\ZaaImporter\TimePointTest.cs" />
|
||||
<Compile Include="TestHelpers.cs" />
|
||||
<Compile Include="ViewModels\ElementPickerViewModelTest.cs" />
|
||||
<Compile Include="ViewModels\ItemCommentViewModelTest.cs" />
|
||||
<Compile Include="ViewModels\SettingsRepositoryViewModelTest.cs" />
|
||||
<Compile Include="ViewModels\SettingsViewModelTest.cs" />
|
||||
</ItemGroup>
|
||||
|
56
Tests/Thesaurus/ParametersTest.cs
Executable file
@ -0,0 +1,56 @@
|
||||
/* ParametersTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using zaaReloaded2.Thesaurus;
|
||||
|
||||
namespace Tests.Thesaurus
|
||||
{
|
||||
[TestFixture]
|
||||
class ParametersTest
|
||||
{
|
||||
[Test]
|
||||
public void GetCanonicalName()
|
||||
{
|
||||
Assert.AreEqual("CRP",
|
||||
Parameters.Default.GetCanonicalName("C-reaktives Protein"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetPrecision()
|
||||
{
|
||||
Assert.AreEqual(1,
|
||||
Parameters.Default.GetPrecision("Creatinin"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetForceReferenceDisplay()
|
||||
{
|
||||
Assert.IsTrue(Parameters.Default.GetForceReferenceDisplay("Magnesium"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetIsBlacklisted()
|
||||
{
|
||||
Assert.IsTrue(Parameters.Default.GetIsBlacklisted("glomerul. Filtrationsr. (MDRD)"));
|
||||
}
|
||||
}
|
||||
}
|
76
Tests/ViewModels/ItemCommentViewModelTest.cs
Executable file
@ -0,0 +1,76 @@
|
||||
/* ItemCommentViewModelTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
using zaaReloaded2.ViewModels;
|
||||
|
||||
namespace Tests.ViewModels
|
||||
{
|
||||
[TestFixture]
|
||||
class ItemCommentViewModelTest
|
||||
{
|
||||
[Test]
|
||||
public void Properties()
|
||||
{
|
||||
ItemComment comment = new ItemComment("item", "pre", "val", "suf");
|
||||
ItemCommentViewModel vm = new ItemCommentViewModel(comment);
|
||||
Assert.AreEqual(comment.Item, vm.Item);
|
||||
Assert.AreEqual(comment.Prefix, vm.Prefix);
|
||||
Assert.AreEqual(comment.Suffix, vm.Suffix);
|
||||
Assert.AreEqual(comment.Value, vm.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void EnterComment()
|
||||
{
|
||||
ItemComment comment = new ItemComment("TAC", "(Ziel-Talspiegel: ", "", "µg/l)");
|
||||
ItemCommentViewModel vm = new ItemCommentViewModel(comment);
|
||||
vm.Value = "8-10";
|
||||
bool eventRaised = false;
|
||||
vm.RequestCloseView += (sender, args) =>
|
||||
{
|
||||
eventRaised = true;
|
||||
};
|
||||
vm.SaveCommand.Execute(null);
|
||||
Assert.IsTrue(eventRaised, "Event was not raised.");
|
||||
Assert.IsFalse(comment.IsCancelled, "Comment.IsCancelled should be false");
|
||||
Assert.AreEqual("8-10", comment.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CancelComment()
|
||||
{
|
||||
ItemComment comment = new ItemComment("TAC", "(Ziel-Talspiegel: ", "default", "µg/l)");
|
||||
ItemCommentViewModel vm = new ItemCommentViewModel(comment);
|
||||
vm.Value = "blabla";
|
||||
bool eventRaised = false;
|
||||
vm.RequestCloseView += (sender, args) =>
|
||||
{
|
||||
eventRaised = true;
|
||||
};
|
||||
vm.CloseViewCommand.Execute(null);
|
||||
Assert.IsTrue(eventRaised, "Event was not raised.");
|
||||
Assert.IsTrue(comment.IsCancelled, "Comment.IsCancelled should be true");
|
||||
Assert.AreEqual("default", comment.Value);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Bovender" version="0.2.0.0" targetFramework="net40" />
|
||||
<package id="Bovender" version="0.5.0.0" targetFramework="net40" />
|
||||
<package id="Expression.Blend.Sdk" version="1.0.2" targetFramework="net40" />
|
||||
<package id="NUnit" version="2.6.4" targetFramework="net40" />
|
||||
</packages>
|
BIN
gimp/m.xcf
Normal file
BIN
gimp/mm.xcf
Normal file
BIN
www/img/firstrun.png
Executable file
After Width: | Height: | Size: 21 KiB |
BIN
www/img/itemcomment.png
Executable file
After Width: | Height: | Size: 10 KiB |
BIN
www/img/itemcommentresult.png
Executable file
After Width: | Height: | Size: 23 KiB |
BIN
www/img/itemcommentview.png
Executable file
After Width: | Height: | Size: 6.6 KiB |
BIN
www/img/preferences.png
Executable file
After Width: | Height: | Size: 6.8 KiB |
BIN
www/img/ribbon.png
Normal file → Executable file
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 6.6 KiB |
395
www/index.html
@ -10,6 +10,10 @@
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/jumbotron-narrow.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
h5 { font-weight:bold; }
|
||||
</style>
|
||||
|
||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
@ -18,19 +22,32 @@
|
||||
<![endif]-->
|
||||
<title>zaaReloaded2</title>
|
||||
<meta name="author" content="Daniel Kraus">
|
||||
<meta name="descrption" content="Add-in für Microsoft Word 2010-2013,
|
||||
das die Zentrale Arztbriefablage um Funktionen für das Formatieren von
|
||||
Laborwerten erweitert.">
|
||||
<meta name="description" content="Add-in für Microsoft Word 2010-2013, das die Zentrale Arztbriefablage um Funktionen für das Formatieren von Laborwerten erweitert.">
|
||||
<link rel="icon" type="image/png" href="img/icon.png">
|
||||
<style>
|
||||
floatbox {
|
||||
padding: 0;
|
||||
margin: 0 0.5em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header clearfix">
|
||||
<nav>
|
||||
<ul class="nav nav-pills pull-right">
|
||||
<li>
|
||||
<a href="#anleitung">Anleitung</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#anpassen">Anpassen</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="downloads/">Download</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="http://git.bovender.de">Code</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="doc/">Code Docs</a>
|
||||
</li>
|
||||
@ -55,61 +72,134 @@
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h2 class="panel-title">Vorher</h2>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<img class="img-responsive center-block" src="img/vorher.png" alt="Vorher">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h2 class="panel-title">Nachher</h2>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<img class="img-responsive center-block" src="img/nachher.png" alt="Nachher">
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<p>Am Beispiel des Ambulanz-Stils</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="clearfix">
|
||||
<h2 class="page-header">
|
||||
<img class="pull-right img-responsive" src="img/ribbon.png" alt="zaaReloaded2-Ribbon" />
|
||||
<h2 class="page-header" id="anleitung">
|
||||
Anleitung
|
||||
</h2>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
<p>
|
||||
<img class="center-block img-responsive" src="img/firstrun.png" alt="Begrüßungsfrage">
|
||||
</p>
|
||||
<p>
|
||||
Beim allerersten Mal, wenn das Add-in zusammen mit Word
|
||||
gestartet wird, wird man gefragt, in welchem Modus das
|
||||
Add-in operieren soll. Im <em>Ärztemodus</em> wird man ggf.
|
||||
aufgefordert, Zusatzinformationen zu Laborparametern (z.B.
|
||||
Ziel-Spiegel von Medikamenten) anzugeben; im
|
||||
<em>Sekretariatsmodus</em> unterbleiben solche Nachfragen.
|
||||
</p>
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
1. Labor einfügen
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>
|
||||
<img class="center-block img-responsive" src="img/vorher.png" alt="Vorher">
|
||||
</p>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<p>
|
||||
Laborwerte auf üblichem Wege in einen Arztbrief einfügen
|
||||
(alternativ kann der Befehl "Demo" ausgeführt werden, dann wird
|
||||
ein Beispieldokument mit Laborwerten geöffnet).
|
||||
</li>
|
||||
<li>
|
||||
<img class="pull-right img-responsive" src="img/stilauswahl.png" alt="Stil auswählen" />
|
||||
(alternativ kann der Befehl "Demo" ausgeführt werden,
|
||||
dann wird ein Beispieldokument mit Laborwerten
|
||||
geöffnet).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
2. zaaReloaded-Funktion aufrufen
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>
|
||||
<img class="center-block img-responsive" src="img/ribbon.png" alt="zaaReloaded2-Ribbon">
|
||||
</p>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<p>
|
||||
Im zaaReloaded-Tab (s.o.) den linken Knopf "Formatieren"
|
||||
klicken.
|
||||
</li>
|
||||
<li>
|
||||
Beim ersten Mal erscheint eine Liste mit Stilen, aus der man den
|
||||
gewünschten Stil auswählt (siehe Abbildung). Beim nächsten Mal,
|
||||
wenn man auf diesen Knopf drückt, wird der zuletzt verwendete Stil
|
||||
genommen.
|
||||
</li>
|
||||
<li>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
3. Ggf. Stil auswählen
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>
|
||||
<img class="center-block img-responsive" src="img/stilauswahl.png" alt="Stil auswählen">
|
||||
</p>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<p>
|
||||
Beim ersten Mal erscheint eine Liste mit Stilen, aus der
|
||||
man den gewünschten Stil auswählt (siehe Abbildung).
|
||||
Beim nächsten Mal, wenn man auf diesen Knopf drückt,
|
||||
wird der zuletzt verwendete Stil genommen.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
4. Ggf. Kommentar ergänzen
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>
|
||||
<img class="center-block img-responsive" src="img/itemcommentview.png" alt="Kommentar eingeben">
|
||||
</p>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<p>
|
||||
Sofern der <em>Ärztemodus</em> eingestellt ist, können
|
||||
für bestimmte Laborparameter Zusatzkommentare eingegeben
|
||||
werden, z.B. um den Zielspiegelbereich eines
|
||||
Medikamentes anzugeben.
|
||||
</p>
|
||||
<p>
|
||||
Wenn man diesen Dialog mit "Abbrechen" oder
|
||||
<kbd>ESC</kbd> beendet, erscheint ein gelb markierter
|
||||
Hinweis im formatieren Laborblock.
|
||||
</p>
|
||||
<p>
|
||||
Wenn man hingegen keinen Kommentartext eingibt, wird
|
||||
kein Kommentar eingefügt, also auch das Präfix (hier
|
||||
"(Ziel-Talspiegel:") und das Suffix (hier "µg/l)")
|
||||
nicht.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
5. Fertig!
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>
|
||||
<img class="center-block img-responsive" src="img/nachher.png" alt="Nachher">
|
||||
</p>
|
||||
</div>
|
||||
<div class="panel-footer">
|
||||
<p>
|
||||
Einen Moment warten... Voilà.
|
||||
</li>
|
||||
</ol>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 class="page-header">
|
||||
@ -120,112 +210,161 @@
|
||||
diese bei Bedarf im Hintergrund.
|
||||
</p>
|
||||
|
||||
<h2 class="page-header">
|
||||
<h2 class="page-header" id="anpassen">
|
||||
Anpassen
|
||||
</h2>
|
||||
<p>
|
||||
Das Addin enthält einen Stil-Editor, mit dem die eingebauten Stile
|
||||
bearbeitet und neue Stile entworfen werden können:
|
||||
zaaReloaded liest die Laborwerte aus einem Arztbrief ein,
|
||||
analysiert sie, und gibt sie entsprechend einem vom Benutzer
|
||||
programmierbaren Stil wieder aus.
|
||||
</p>
|
||||
<p class="text-center">
|
||||
<img src="img/stilbearbeiten.png" alt="Stil bearbeiten" />
|
||||
</p>
|
||||
|
||||
<p class="clearfix">
|
||||
<img src="img/elementpicker.png" alt="Elemente" class="pull-right" />
|
||||
Jeder Stil setzt sich aus sog. <i>Elementen</i> zusammen. Es gibt
|
||||
<i>Steuerelemente</i>, die zum Beispiel für die Auswahl eines Tages
|
||||
(erster Tag/letzter Tag) zuständig sind, und es gibt
|
||||
<i>Ausgabeelemente</i>, die die eigentliche Formatierung und Ausgabe
|
||||
der Laborwerte übernehmen.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
Steuerelemente
|
||||
</h3>
|
||||
</div>
|
||||
<div class="panel panel-default col-lg-7 col-md-5 pull-right floatbox">
|
||||
<div class="panel-body">
|
||||
<ul>
|
||||
<li>Ersten Tag auswählen</li>
|
||||
<li>Letzten Tag auswählen</li>
|
||||
<li>Jeden Tag nacheinander auswählen</li>
|
||||
<li>Zwei Spalten einfügen/zur nächsten Spalte wechseln</li>
|
||||
</ul>
|
||||
<img class="img-responsive center-block" src="img/stilbearbeiten.png" alt="Stil bearbeiten">
|
||||
Screenshot des Stil-Editors
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">
|
||||
<p>
|
||||
Das Addin enthält einen Stil-Editor, mit dem die eingebauten Stile
|
||||
bearbeitet und neue Stile entworfen werden können. Stile
|
||||
können importiert und exportiert werden.
|
||||
</p>
|
||||
<p>
|
||||
Bei einem Stil kann definiert werden, ob pathologische
|
||||
Laborwerte auf bestimmte Weise hervorgehoben werden sollen
|
||||
(fett, kursiv, unterstrichen), und in welchen Situationen
|
||||
der Referenzbereich ausgegeben werden soll: Niemals, immer
|
||||
oder bei pathologischen Werten und/oder Parametern, die
|
||||
intern als "speziell" markiert sind (<a href="#parameter">s.u.</a>).
|
||||
</p>
|
||||
<p>
|
||||
Die Stile bestehen aus sogenannten Elementen, die der Reihe
|
||||
nach abgearbeitet werden. Ein Element ist entweder ein
|
||||
<em>Steuerelement</em> oder ein <em>Ausgabeelement</em>.
|
||||
</p>
|
||||
<h3>
|
||||
Ausgabeelemente
|
||||
</h3>
|
||||
</div>
|
||||
<p>
|
||||
<em>Ausgabeelemente</em> sind für die Ausgabe von Laborwerten
|
||||
oder anderem Text zuständig. Ein Beliebiger-Text-Element gibt
|
||||
ganz einfach den Text aus, den es enthält. Auf diese Weise
|
||||
kann man z.B. zusätzliche Zeilen in die Laborausgabe einfügen
|
||||
für Werte, die nicht aus dem Lauris übernommen werden, etwa
|
||||
ein Nephrologisches Sediment, das dann noch händisch
|
||||
vervollständigt werden muß.
|
||||
</p>
|
||||
<div class="panel panel-default col-lg-7 col-md-5 pull-right floatbox">
|
||||
<div class="panel-body">
|
||||
<ul>
|
||||
<li>Laborparameter</li>
|
||||
<li>Beliebiger Text</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<img class="img-responsive center-block"
|
||||
src="img/elementbearbeiten.png" alt="Laborparameter-Element bearbeiten">
|
||||
Laborparameter-Ausgabeelement
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h4>
|
||||
Laborparameter-Element
|
||||
</h4>
|
||||
<p>
|
||||
"Beliebiger Text" kann, wie der Name schon sagt, beliebigen Text
|
||||
enthalten, der nicht weiter bearbeitet wird. Auf diese Weise kann
|
||||
man z.B. Platzhalter für Urinsedimente ausgeben lassen, die dann
|
||||
noch händisch vervollständigt werden.
|
||||
Die eigentliche Power des Add-ins liegt in
|
||||
Laborparameter-Elementen. Jedes Element gibt einen Absatz mit
|
||||
Laborwerten aus, die frei definiert werden können (vgl.
|
||||
Abbbildung).
|
||||
</p>
|
||||
<p>
|
||||
"Laborparameter" enthalten eine durch Kommata getrennte Auflistung
|
||||
von Parametern, die ausgegeben werden sollen. Jedes Element
|
||||
"Laborparameter" kann optional einen Titel enthalten:
|
||||
Man schreibt einfach die gewünschten Parameter durch Kommata
|
||||
getrennt in das Eingabefeld. Optional kann man durch einen
|
||||
Doppelpunkt getrennt eine Beschriftung voranstellen. In der
|
||||
Abbildung ist das "Klinische Chemie".
|
||||
</p>
|
||||
<h5 id="parameter">
|
||||
Parameter-Bezeichnungen
|
||||
</h5>
|
||||
<p>
|
||||
zaaReloaded2 verwendet teilweise eigene Bezeichnungen für
|
||||
Parameter, bspw. "Na" für Natrium, während in der originalen
|
||||
Lauris-Ausgabe "Natrium" steht. Momentan gibt es noch keine
|
||||
Möglichkeit, die bekannten Parameter im Add-in selbst
|
||||
einzusehen; die Liste steht aber im Quellcode: <a
|
||||
href="http://git.bovender.de/?p=zaaReloaded2.git;a=blob;f=zaaReloaded2/Defaults/parameters.txt"
|
||||
target="_blank">git.bovender.de/.../paramteters.txt</a>. In
|
||||
der Datei ist für manche Parameter auch die gewünschte Zahl
|
||||
an Dezimalstellen hinterlegt sowie die Angabe, ob in der
|
||||
Referenzbereich auch bei normalem Wert mit ausgeben werden
|
||||
soll (abhängig von der Stil-Einstellung).
|
||||
</p>
|
||||
<h5>
|
||||
Kommentare
|
||||
</h5>
|
||||
<p>
|
||||
<img class="img-responsive center-block" src="img/itemcomment.png" alt="Parameter-Kommentar">
|
||||
</p>
|
||||
<p>
|
||||
Beispiel:
|
||||
</p>
|
||||
<blockquote>
|
||||
<p>
|
||||
<img src="img/elementbearbeiten.png" alt="Element bearbeiten" />
|
||||
Wenn hinter einem Parameter-Namen ein Text in
|
||||
Anführungszeichen eingegeben wird, wird dieser Text als
|
||||
<em>Kommentar</em> ausgewertet (siehe Abbildung oben). Beim
|
||||
Formatieren wird dieser Kommentar mit einer
|
||||
Eingabe-Aufforderung angezeigt, wobei der Text zwischen den
|
||||
spitzen Klammern (im Beispiel "<*** BITTE ANGEBEN
|
||||
***>") als Vorgabe verwendet wird (die spitzen Klammern
|
||||
verschwinden natürlich):
|
||||
</p>
|
||||
<p>
|
||||
Klinische Chemie: Na, K, Cl, (usw.)
|
||||
</p>
|
||||
</blockquote>
|
||||
<p>
|
||||
In diesem Fall ist "Klinische Chemie:" der optionale Titel.
|
||||
<img class="img-responsive center-block" src="img/itemcommentview.png" alt="Eingabeaufforderung für Kommentar">
|
||||
</p>
|
||||
<p>
|
||||
Die Bezeichnungen der einzelnen Parameter sind fest einprogrammiert.
|
||||
Teils decken sie sich mit den Bezeichnungen, wie sie in der
|
||||
Zentralen Arztbriefablage erscheinen; teils sind sie aber auch
|
||||
Surrogate (z.B. "eGFR (CKD-EPI)" anstatt "glomerul. Filtrationsr.
|
||||
CKD-EP").
|
||||
In den <em>Einstellungen</em> können die
|
||||
Eingabe-Aufforderungen für Kommentare im Sinne eines
|
||||
<em>Sekretariatsmodus</em> ausgeschaltet werden. Dann wird
|
||||
der Kommentar in der Ausgabe <mark>gelb
|
||||
hervorgehoben</mark>.
|
||||
</p>
|
||||
<h5>
|
||||
Platzhalter
|
||||
</h5>
|
||||
<p>
|
||||
Die Platzhalter "SU-*", "U-*" und "*" geben die noch nicht
|
||||
verwendeten Werte für Sammelurin, Spontanurin und alles weitere aus.
|
||||
"*" sollte daher als letztes verwendet werden.
|
||||
Mittels <em>Platzhaltern</em> ("Jokern", "Wildcards") können
|
||||
alle Laborwerte ausgegeben werden, die bis dahin noch nicht
|
||||
explizit ausgewählt wurden. Wenn man "*" verwendet, werden
|
||||
alle noch nicht selektierten Werte ausgegeben. Mit "U-*"
|
||||
werden nur die noch nicht verwendeten Werte des Spot-Urins
|
||||
ausgegeben und mit "SU-*" die noch nicht verwendeten Werte
|
||||
des Sammelurins.
|
||||
</p>
|
||||
<p>
|
||||
Die Liste der möglichen Parameternamen ist momentan fest
|
||||
einprogrammiert und kann auch noch nicht angezeigt werden. Man kann
|
||||
beim Entwickeln eines Stils aber probehalber den Platzhalter "*"
|
||||
verwenden und sieht dann, welche Parameternamen noch verwendet
|
||||
werden könnten.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4>
|
||||
Beliebiger Text
|
||||
</h4>
|
||||
<p>
|
||||
Das Ausgabe-Element "Beliebiger Text" macht genau das:
|
||||
Beliebigen Text ausgeben, der nicht weiter bearbeitet wird.
|
||||
Auf diese Weise kann man z.B. Platzhalter für Urinsedimente
|
||||
ausgeben lassen, die dann noch händisch vervollständigt
|
||||
werden müssen.
|
||||
</p>
|
||||
|
||||
<h3>
|
||||
Steuerelemente
|
||||
</h3>
|
||||
<p>
|
||||
Mit <em>Steuerelementen</em> kann z.B. die Auswahl eines Datums
|
||||
für die Laborausgabe (erster/letzter Tag usw.) kontrolliert oder
|
||||
auch der Dokumentfluß gesteuert werden, wobei bislang nur die
|
||||
Ausgabe in zwei Spalten implementiert ist.
|
||||
</p>
|
||||
<p>
|
||||
Steuerelemente zur Auswahl von bestimmten Daten
|
||||
(erster/letzter Tag usw.) enthalten <em>Kindelemente</em>. Nur
|
||||
Ausgabeelemente können Kindelemente sein. Ein Steuerelement
|
||||
wählt die Laborwerte für das entsprechende Datum aus und
|
||||
übergibt sie den Kindelementen, die die Laborwerte ausgeben.
|
||||
Mit dem Steuerelement <em>Jeder Tag</em> werden alle
|
||||
Laborwerte nach Kalendertagen sortiert, und die Kindelemente
|
||||
geben die Werte für jeden Kalendertag aus.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<p>
|
||||
|
@ -1,4 +1,4 @@
|
||||
2.0.1
|
||||
http://zaa.nephrowiki.de/downloads/zaaReloaded-2.0.1.exe
|
||||
96efab4fd34411f9cdd03b5d31ddcf4f6fe8b904 publish/release/zaaReloaded-2.0.1.exe
|
||||
2.2.1
|
||||
http://zaa.nephrowiki.de/downloads/zaaReloaded-$VERSION.exe
|
||||
5d961a309294b43c88b17905206f1162791e14e7dad8d367dc47c21205a60e3e publish/release/zaaReloaded-2.2.1.exe
|
||||
|
||||
|
243
zaaReloaded2/Commands.cs
Executable file
@ -0,0 +1,243 @@
|
||||
using Bovender.Mvvm.Actions;
|
||||
/* Commands.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using zaaReloaded2.Controller;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
using zaaReloaded2.Formatter;
|
||||
using zaaReloaded2.Importer.ZaaImporter;
|
||||
using zaaReloaded2.ViewModels;
|
||||
using zaaReloaded2.Views;
|
||||
using Word = Microsoft.Office.Interop.Word;
|
||||
|
||||
namespace zaaReloaded2
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
static class Commands
|
||||
{
|
||||
#region Command methods
|
||||
|
||||
public static void Format()
|
||||
{
|
||||
if (CanFormat())
|
||||
{
|
||||
SettingsRepository repository = SettingsRepository.Load();
|
||||
Guid lastSettingsUid = Properties.Settings.Default.LastSettings;
|
||||
Settings lastSettings = repository.FindByGuid(lastSettingsUid);
|
||||
if (lastSettings != null)
|
||||
{
|
||||
DoFormat(lastSettings);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChooseSettings();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static bool CanFormat()
|
||||
{
|
||||
return Globals.ThisAddIn.Application.ActiveDocument != null;
|
||||
//Word.Selection s = Globals.ThisAddIn.Application.ActiveWindow.Selection;
|
||||
//return s.Paragraphs.Count > 1 ||
|
||||
// (s.Text.Length > 1 && s.Text.EndsWith("\r"));
|
||||
}
|
||||
|
||||
public static void ChooseSettings()
|
||||
{
|
||||
SettingsRepository repository = SettingsRepository.Load();
|
||||
SettingsRepositoryViewModel vm = new SettingsRepositoryViewModel(repository);
|
||||
vm.UseSettingsMessage.Sent += (sender, args) =>
|
||||
{
|
||||
SettingsViewModel settingsVM = args.Content.ViewModel as SettingsViewModel;
|
||||
Settings settings = settingsVM.RevealModelObject() as Settings;
|
||||
DoFormat(settings);
|
||||
Properties.Settings.Default.LastSettings = settings.Uid;
|
||||
Properties.Settings.Default.Save();
|
||||
};
|
||||
vm.InjectInto<SettingsRepositoryView>().ShowDialog();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the embedded demo document.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If Word is running in an embedded environment (e.g. in the ZAA),
|
||||
/// adding a document causes a COMException. Unfortunately, it is
|
||||
/// not trivial to test if Word is running embedded, so we use a
|
||||
/// try...catch structure and catch all COMExceptions. The error
|
||||
/// message might be not quite right if the exception was caused by
|
||||
/// a different problem.
|
||||
/// See http://davecra.com/2013/04/10/how-to-determine-if-an-excel-workbook-is-embedded-and-more
|
||||
/// </remarks>
|
||||
public static void LoadDemo()
|
||||
{
|
||||
try
|
||||
{
|
||||
Demo.Demo.OpenDemoDocument();
|
||||
}
|
||||
catch (System.Runtime.InteropServices.COMException e)
|
||||
{
|
||||
// HRESULT comparison according to http://stackoverflow.com/a/1426198/270712
|
||||
// Fix for exception ID 65a5c34e
|
||||
if (e.ErrorCode == unchecked((int)0x800A11FD))
|
||||
{
|
||||
NotificationAction a = new NotificationAction();
|
||||
a.Caption = "Kann Demo-Dokument nicht laden";
|
||||
a.Message = "Das Demo-Dokument kann nicht geladen werden, "
|
||||
+ "wenn Word in der Zentralen Arztbriefablage ausgeführt wird.\r"
|
||||
+ "Bitte Word als eigenständige Anwendung starten und dann "
|
||||
+ "noch einmal versuchen.";
|
||||
a.OkButtonLabel = "Schließen";
|
||||
a.Invoke();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void ShowAbout()
|
||||
{
|
||||
ViewModels.AboutViewModel vm = new ViewModels.AboutViewModel();
|
||||
vm.InjectInto<Views.AboutView>().ShowDialog();
|
||||
}
|
||||
|
||||
public static void ShowPreferences()
|
||||
{
|
||||
ViewModels.PreferencesViewModel.Default.InjectInto<Views.PreferencesView>()
|
||||
.ShowDialog();
|
||||
}
|
||||
|
||||
public static void ApplyDanielsStyle()
|
||||
{
|
||||
Formatter.DanielsStyle.Apply(
|
||||
Globals.ThisAddIn.Application.ActiveDocument,
|
||||
Globals.ThisAddIn.Application.Selection);
|
||||
}
|
||||
|
||||
public static void FormatDrugs(int columns)
|
||||
{
|
||||
if (columns < 1 || columns > 2)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("Can only format 1 or 2 columns, not " + columns);
|
||||
}
|
||||
|
||||
// If no "real" selection exists, attempt to auto-detect the drugs section.
|
||||
// (NB Technically, there is never _no_ selection in a document.)
|
||||
Word.Window activeWindow = Globals.ThisAddIn.Application.ActiveWindow;
|
||||
Word.Selection sel = activeWindow.Selection;
|
||||
if (!(sel.Paragraphs.Count > 1
|
||||
|| (sel.Text.Length > 1 && sel.Text.EndsWith("\r"))))
|
||||
{
|
||||
if (!Medication.Importer.AutoDetect(activeWindow.Document))
|
||||
{
|
||||
NotificationAction a = new NotificationAction();
|
||||
a.Caption = "Formatieren nicht möglich";
|
||||
a.Message = "Das Dokument scheint keine Medikationsliste zu enthalten.";
|
||||
a.OkButtonLabel = "Schließen";
|
||||
a.Invoke();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Medication.Importer importer = new Medication.Importer(activeWindow.Selection.Text);
|
||||
Medication.Formatter formatter = new Medication.Formatter(importer.Prescriptions);
|
||||
|
||||
switch (columns)
|
||||
{
|
||||
case 1:
|
||||
formatter.FormatOneColumn(activeWindow.Document);
|
||||
break;
|
||||
case 2:
|
||||
formatter.FormatTwoColumns(activeWindow.Document);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
private static void DoFormat(Settings settings)
|
||||
{
|
||||
// If no "real" selection exists, attempt to auto-detect the lab data.
|
||||
// (NB Technically, there is never _no_ selection in a document.)
|
||||
Word.Window activeWindow = Globals.ThisAddIn.Application.ActiveWindow;
|
||||
Word.Selection sel = activeWindow.Selection;
|
||||
if (!(sel.Paragraphs.Count > 1
|
||||
|| (sel.Text.Length > 1 && sel.Text.EndsWith("\r"))))
|
||||
{
|
||||
if (!AutoDetect.Detect(activeWindow.Document))
|
||||
{
|
||||
NotificationAction a = new NotificationAction();
|
||||
a.Caption = "Formatieren nicht möglich";
|
||||
a.Message = "Das Dokument scheint keine Lauris-Labordaten zu enthalten.";
|
||||
a.OkButtonLabel = "Schließen";
|
||||
a.Invoke();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ZaaImporter importer = new ZaaImporter();
|
||||
importer.Import(Globals.ThisAddIn.Application.ActiveWindow.Selection.Text);
|
||||
Formatter.Formatter formatter = new Formatter.Formatter(
|
||||
Globals.ThisAddIn.Application.ActiveDocument);
|
||||
formatter.Settings = settings;
|
||||
formatter.Laboratory = importer.Laboratory;
|
||||
CommentPool.Default.Reset();
|
||||
CommentPool.Default.FillInComment += CommentPool_FillInComment;
|
||||
try
|
||||
{
|
||||
formatter.Run();
|
||||
}
|
||||
catch (NoLaboratoryDataException)
|
||||
{
|
||||
NotificationAction a = new NotificationAction();
|
||||
a.Caption = "Formatieren nicht möglich";
|
||||
a.Message = "Die aktuelle Markierung scheint keine Labordaten zu enthalten.";
|
||||
a.OkButtonLabel = "Schließen";
|
||||
a.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
private static void CommentPool_FillInComment(object sender, ItemCommentEventArgs e)
|
||||
{
|
||||
if (Preferences.Default.SuppressItemCommentInteraction)
|
||||
{
|
||||
e.Comment.IsCancelled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemCommentViewModel vm = new ItemCommentViewModel(e.Comment);
|
||||
vm.InjectInto<ItemCommentView>().ShowDialog();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
144
zaaReloaded2/Controller/Comments/CommentPool.cs
Executable file
@ -0,0 +1,144 @@
|
||||
/* CommentPool.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace zaaReloaded2.Controller.Comments
|
||||
{
|
||||
/// <summary>
|
||||
/// A pool of comments.
|
||||
/// </summary>
|
||||
class CommentPool
|
||||
{
|
||||
#region Singleton
|
||||
|
||||
/// <summary>
|
||||
/// Gets the singleton instance of the CommentPool.
|
||||
/// </summary>
|
||||
public static CommentPool Default
|
||||
{
|
||||
get
|
||||
{
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly CommentPool _instance = new CommentPool();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of ItemComments in the pool.
|
||||
/// </summary>
|
||||
public int Count { get { return _itemComments.Count; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Event
|
||||
|
||||
public event EventHandler<ItemCommentEventArgs> FillInComment;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
/// <summary>
|
||||
/// Static constructor to support the singleton implementation.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// See http://csharpindepth.com/Articles/General/Singleton.aspx#cctor
|
||||
/// </remarks>
|
||||
static CommentPool() { }
|
||||
|
||||
private CommentPool()
|
||||
{
|
||||
_itemComments = new List<ItemComment>();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
/// <summary>
|
||||
/// Clear the pool of ItemComments and sets the event handler
|
||||
/// to null.
|
||||
/// </summary>
|
||||
public void Reset()
|
||||
{
|
||||
_itemComments.Clear();
|
||||
FillInComment = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the ItemComment for a given definitionString;
|
||||
/// creates a new ItemComment object if necessary.
|
||||
/// </summary>
|
||||
/// <param name="definitionString"></param>
|
||||
/// <returns>ItemComment derived from the
|
||||
/// <paramref name="definitionString"/></returns>
|
||||
public ItemComment GetCommentFor(string definitionString)
|
||||
{
|
||||
ItemComment itemComment = _itemComments.FirstOrDefault(
|
||||
i => i.Definition == definitionString);
|
||||
if (itemComment == null)
|
||||
{
|
||||
itemComment = ItemComment.FromDefinitionString(definitionString);
|
||||
if (itemComment != null)
|
||||
{
|
||||
_itemComments.Add(itemComment);
|
||||
itemComment.FillInComment += itemComment_FillInComment;
|
||||
}
|
||||
}
|
||||
return itemComment;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
protected virtual void itemComment_FillInComment(object sender, ItemCommentEventArgs e)
|
||||
{
|
||||
OnFillInComment(e);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Protected methods
|
||||
|
||||
protected virtual void OnFillInComment(ItemCommentEventArgs args)
|
||||
{
|
||||
EventHandler<ItemCommentEventArgs> h = FillInComment;
|
||||
if (h != null)
|
||||
{
|
||||
h(this, args);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
List<ItemComment> _itemComments;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
220
zaaReloaded2/Controller/Comments/ItemComment.cs
Executable file
@ -0,0 +1,220 @@
|
||||
/* ParameterComment.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace zaaReloaded2.Controller.Comments
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an optional comment for a laboratory item.
|
||||
/// The zaaReloaded2.Controller.Elements.Items class can
|
||||
/// parse these optional comment strings which may be used
|
||||
/// to prompt users to enter target ranges etc.
|
||||
/// </summary>
|
||||
/// <example>
|
||||
/// TAC "(Zielspiegel: <8-10> µg/l)"
|
||||
/// </example>
|
||||
/// <remarks>
|
||||
/// In the example, the tacrolimus trough level TAC carries a comment about the
|
||||
/// recommended range. The comment must be enclosed in quotes in order for it
|
||||
/// to be recognized. The quotes will be stripped. The angle brackets denote
|
||||
/// a place holder that will be replaced by the comment that is set in the
|
||||
/// RequestParameterComment's event args. The text between the angle brackets
|
||||
/// ("8-10") is an optional default value. One could also just use 'empty'
|
||||
/// brackets ("<>").
|
||||
/// </remarks>
|
||||
public class ItemComment
|
||||
{
|
||||
#region Factory
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new ItemComment object from a definition string.
|
||||
/// </summary>
|
||||
/// <param name="definitionString">String that complies
|
||||
/// with the definition pattern (item "optional prefix <optional
|
||||
/// default value> optioal suffix").</param>
|
||||
public static ItemComment FromDefinitionString(string definitionString)
|
||||
{
|
||||
Match match = _definition.Match(definitionString);
|
||||
if (match.Success)
|
||||
{
|
||||
return new ItemComment(
|
||||
definitionString,
|
||||
match.Groups["item"].Value.Trim(),
|
||||
match.Groups["prefix"].Value,
|
||||
match.Groups["value"].Value,
|
||||
match.Groups["suffix"].Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the item name that this comment is for.
|
||||
/// </summary>
|
||||
public string Item { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Prefix of this comment, e.g. "(target trough level: "
|
||||
/// </summary>
|
||||
public string Prefix { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Value of this comment; String.Empty represents a
|
||||
/// cancelled comment.
|
||||
/// </summary>
|
||||
public string Value { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Suffix of this comment, e.g. " µg/l)"
|
||||
/// </summary>
|
||||
public string Suffix { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the original definition string that this ItemComment
|
||||
/// was created from.
|
||||
/// </summary>
|
||||
public string Definition { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets whether this comment has been cancelled.mo
|
||||
/// </summary>
|
||||
public bool IsCancelled { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Event
|
||||
|
||||
/// <summary>
|
||||
/// Event that is raised when the comment value needs to be
|
||||
/// filled in by someone or something.
|
||||
/// </summary>
|
||||
public event EventHandler<ItemCommentEventArgs> FillInComment;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public ItemComment()
|
||||
{
|
||||
Item = String.Empty;
|
||||
Prefix = String.Empty;
|
||||
Value = String.Empty;
|
||||
Suffix = String.Empty;
|
||||
}
|
||||
|
||||
public ItemComment(string item, string prefix, string value, string suffix)
|
||||
: this()
|
||||
{
|
||||
Item = item;
|
||||
Prefix = prefix;
|
||||
Value = value;
|
||||
Suffix = suffix;
|
||||
}
|
||||
|
||||
public ItemComment(string definition, string item, string prefix, string value, string suffix)
|
||||
: this(item, prefix, value, suffix)
|
||||
{
|
||||
Definition = definition;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
/// <summary>
|
||||
/// Builds the comment string from the prefix, the value, and
|
||||
/// the suffix. Raises the FillInComment event to get the value
|
||||
/// first. If the value is an empty string, the entire comment
|
||||
/// string will be an empty string.
|
||||
/// </summary>
|
||||
/// <returns>Comment string with filled-in value, or String.Empty
|
||||
/// if the value is an empty string.</returns>
|
||||
public string BuildComment()
|
||||
{
|
||||
OnFillInComment();
|
||||
|
||||
string value = Value;
|
||||
if (String.IsNullOrEmpty(value))
|
||||
{
|
||||
// If the comment was not cancelled and an empty
|
||||
// value was deliberately entered, return an
|
||||
// empty string.
|
||||
if (!IsCancelled)
|
||||
{
|
||||
return String.Empty;
|
||||
}
|
||||
// If the comment was cancelled and the default
|
||||
// value is an empty string, insert a prompt
|
||||
// to manually enter the comment.
|
||||
else
|
||||
{
|
||||
value = Properties.Settings.Default.ManualCommentPrompt;
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsCancelled)
|
||||
{
|
||||
return Prefix + value + Suffix;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Prefix + "<highlight>" + value + "</highlight>" + Suffix;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
/// <summary>
|
||||
/// Raises the FillInComment event.
|
||||
/// </summary>
|
||||
protected virtual void OnFillInComment()
|
||||
{
|
||||
if (_isFilledIn) return;
|
||||
|
||||
EventHandler<ItemCommentEventArgs> h = FillInComment;
|
||||
if (h != null)
|
||||
{
|
||||
_isFilledIn = true;
|
||||
h(this, new ItemCommentEventArgs(this));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
bool _isFilledIn;
|
||||
static readonly Regex _definition =
|
||||
new Regex(@"(?<item>[^""]+)""(?<prefix>[^<]+)?<(?<value>[^>]*)>(?<suffix>[^""]+)?""");
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
49
zaaReloaded2/Controller/Comments/ItemCommentEventArgs.cs
Executable file
@ -0,0 +1,49 @@
|
||||
/* ParameterCommentEventArgs.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace zaaReloaded2.Controller.Comments
|
||||
{
|
||||
/// <summary>
|
||||
/// Event arguments used in item commenting.
|
||||
/// </summary>
|
||||
public class ItemCommentEventArgs : EventArgs
|
||||
{
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets the comment object for this parameter.
|
||||
/// </summary>
|
||||
public ItemComment Comment { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public ItemCommentEventArgs(
|
||||
ItemComment comment)
|
||||
{
|
||||
Comment = comment;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -24,6 +24,7 @@ using Microsoft.Office.Interop.Word;
|
||||
using zaaReloaded2.LabModel;
|
||||
using zaaReloaded2.Formatter;
|
||||
using System.Runtime.Serialization;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
|
||||
namespace zaaReloaded2.Controller.Elements
|
||||
{
|
||||
@ -123,7 +124,7 @@ namespace zaaReloaded2.Controller.Elements
|
||||
{
|
||||
_items = null;
|
||||
_caption = null;
|
||||
Regex r = new Regex(@"((?<caption>[^:]+):\s*)?((?<items>[^,]+),\s*)*(?<items>[^,]+)");
|
||||
Regex r = new Regex(@"((?<caption>[^:""]+):\s*)?((?<items>[^,]+),\s*)*(?<items>[^,]+)");
|
||||
Match m = r.Match(Content);
|
||||
if (m.Success)
|
||||
{
|
||||
@ -186,9 +187,20 @@ namespace zaaReloaded2.Controller.Elements
|
||||
/// <summary>
|
||||
/// Collects items for output by name.
|
||||
/// </summary>
|
||||
/// <param name="name">Item name to look for.</param>
|
||||
/// <param name="name">Item name to look for. If the item name contains
|
||||
/// a comment definition (see example in the description of the
|
||||
/// <see cref="RequestParameterComment"/> event), </param>
|
||||
List<ItemFormatter> CollectByName(zaaReloaded2.Formatter.Formatter formatter, string name)
|
||||
{
|
||||
// First, check if the item name contains an optional comment
|
||||
// definition
|
||||
ItemComment comment = CommentPool.Default.GetCommentFor(name);
|
||||
if (comment != null)
|
||||
{
|
||||
name = comment.Item;
|
||||
}
|
||||
|
||||
// Then, see if we have such an item
|
||||
List<ItemFormatter> items = new List<ItemFormatter>();
|
||||
TimePointFormatter tpf = formatter.WorkingTimePoints
|
||||
.FirstOrDefault(tp => tp.Value.ContainsItem(name))
|
||||
@ -200,6 +212,7 @@ namespace zaaReloaded2.Controller.Elements
|
||||
ItemFormatter i = tpf.ItemFormatters[name];
|
||||
i.HasBeenUsed = true;
|
||||
i.IncludeMaterial = false;
|
||||
i.Comment = comment;
|
||||
items.Add(i);
|
||||
}
|
||||
return items;
|
||||
@ -211,7 +224,7 @@ namespace zaaReloaded2.Controller.Elements
|
||||
|
||||
string _caption;
|
||||
List<string> _items;
|
||||
static Regex _wildcard = new Regex(@"(?<material>[^-]+-)?\*");
|
||||
static readonly Regex _wildcard = new Regex(@"^(?<material>[^-]+-)?\*$");
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -3,17 +3,17 @@
|
||||
<a1:Settings id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<_a>1173493659</_a>
|
||||
<_b>4743</_b>
|
||||
<_c>20075</_c>
|
||||
<_d>156</_d>
|
||||
<_e>83</_e>
|
||||
<_f>220</_f>
|
||||
<_g>163</_g>
|
||||
<_h>70</_h>
|
||||
<_i>3</_i>
|
||||
<_j>116</_j>
|
||||
<_k>11</_k>
|
||||
<_a>-903942278</_a>
|
||||
<_b>-22298</_b>
|
||||
<_c>17811</_c>
|
||||
<_d>139</_d>
|
||||
<_e>190</_e>
|
||||
<_f>233</_f>
|
||||
<_g>83</_g>
|
||||
<_h>158</_h>
|
||||
<_i>73</_i>
|
||||
<_j>21</_j>
|
||||
<_k>115</_k>
|
||||
</Uid>
|
||||
<Name id="ref-3">Kopie von Standard für NepA</Name>
|
||||
<ReferenceStyle xsi:type="a3:ReferenceStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">IfSpecialItem</ReferenceStyle>
|
||||
@ -66,13 +66,13 @@
|
||||
<Child16Object href="#ref-25"/>
|
||||
<Child17Type href="#ref-8"/>
|
||||
<Child17Object href="#ref-26"/>
|
||||
<Child18Type href="#ref-27"/>
|
||||
<Child18Object href="#ref-28"/>
|
||||
<Child19Type href="#ref-27"/>
|
||||
<Child18Type href="#ref-8"/>
|
||||
<Child18Object href="#ref-27"/>
|
||||
<Child19Type href="#ref-28"/>
|
||||
<Child19Object href="#ref-29"/>
|
||||
<Child20Type href="#ref-27"/>
|
||||
<Child20Type href="#ref-28"/>
|
||||
<Child20Object href="#ref-30"/>
|
||||
<Child21Type href="#ref-8"/>
|
||||
<Child21Type href="#ref-28"/>
|
||||
<Child21Object href="#ref-31"/>
|
||||
</a4:SelectEachDay>
|
||||
<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
@ -90,23 +90,23 @@
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-11" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-35">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Content>
|
||||
<Content id="ref-35">Kardiale Marker: CK, CK-MB, hsTnT, NT-proBNP</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-12" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-36">Niere: Krea, Hst, eGFR (CKD-EPI)</Content>
|
||||
<Content id="ref-36">Niere: Krea, Hst, eGFR (CKD-EPI), Cystatin C</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-13" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-37">Sammelurin: SU-Proteinurie, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Natrium, SU-Zeit, SU-Volumen</Content>
|
||||
<Content id="ref-37">Sammelurin: SU-Prot, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Na, SU-Zeit, SU-Volumen</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-14" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-38">Spot-Urin: U-TPCR, U-ACR, U-Ery, U-Leu, U-Bakt</Content>
|
||||
<Content id="ref-38">Spot-Urin: U-TPCR, U-ACR, U-Alb, U-Ery, U-Leu, U-Bakt, U-Schwangerschaftstest</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-15" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-39">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE</Content>
|
||||
<Content id="ref-39">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE, CDT</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-16" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
@ -130,7 +130,7 @@
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-21" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-45">Hormone: iPTH, TSH, fT3, fT4</Content>
|
||||
<Content id="ref-45">Hormone: iPTH, TSH, fT3, fT4, Aldosteron, Renin, ARQ</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-22" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
@ -150,28 +150,28 @@
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-26" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-50">Medikamente: TAC, CSA (C0), SIR, Vancomycin, Gentamicin, Tobramicin</Content>
|
||||
<Content id="ref-50">Medikamente: TAC "(Ziel-Talspiegel: <> µg/l)", CsA (C0) "(Ziel-Talspiegel: <> µg/l)", SIR "(Ziel-Talspiegel: <> µg/l)", Vancomycin, Gentamicin, Tobramicin</Content>
|
||||
</a4:Items>
|
||||
<a2:UnitySerializationHolder id="ref-27" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<Data id="ref-51">zaaReloaded2.Controller.Elements.CustomText</Data>
|
||||
<a4:Items id="ref-27" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-51">Tumormarker: PSA, AFP</Content>
|
||||
</a4:Items>
|
||||
<a2:UnitySerializationHolder id="ref-28" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<Data id="ref-52">zaaReloaded2.Controller.Elements.CustomText</Data>
|
||||
<UnityType>4</UnityType>
|
||||
<AssemblyName href="#ref-7"/>
|
||||
</a2:UnitySerializationHolder>
|
||||
<a4:CustomText id="ref-28" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-52">Virologie (EDTA-Blut): CMV-PCR, BKV-PCR</Content>
|
||||
</a4:CustomText>
|
||||
<a4:CustomText id="ref-29" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-53">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
|
||||
</a4:CustomText>
|
||||
<a4:CustomText id="ref-30" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-54">Autoantikörper: ANCA (IF), MPO-ANCA (ELISA), PR3-ANCA (ELISA), ANA (IF), AnDNA (ELISA), AnDNA (RIA)</Content>
|
||||
<Content id="ref-54">Virologie (EDTA-Blut): CMV-PCR, BKV-PCR</Content>
|
||||
</a4:CustomText>
|
||||
<a4:Items id="ref-31" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<a4:CustomText id="ref-31" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-55">Tumormarker: PSA</Content>
|
||||
</a4:Items>
|
||||
<Content id="ref-55">Autoantikörper: ANCA (IF) 1: (Ref. < 1:40), MPO-ANCA (ELISA) IU/ml (Ref. < 9), PR3-ANCA (ELISA) IU/ml (Ref. < 3,5), ANA (IF), AnDNA (ELISA), AnDNA (RIA)</Content>
|
||||
</a4:CustomText>
|
||||
</SOAP-ENV:Body>
|
||||
</SOAP-ENV:Envelope>
|
||||
|
@ -2,24 +2,27 @@
|
||||
# =========== ================== ======== ============== ======================= ===========
|
||||
"a1-Microglobulin (SU)" a1-Microglobulin SU
|
||||
"a1-Microglobulin (SU)/die" a1-Microglobulin SU
|
||||
"AFP (ECL, Elecsys, Roche)" AFP S --- X
|
||||
"aktuelles Bicarbonat" Bic BGA
|
||||
Albumin Alb S
|
||||
"Albumin (PU)" Alb U
|
||||
"Albumin (SU)" Alb SU
|
||||
"Albumin (SU)/die" Alb SU
|
||||
"Albumin - Fraktion" Albumin-Fraktion S X
|
||||
"Albumin - Fraktion" Albumin-Fraktion S --- X
|
||||
"Albumin/Creatinin (PU)" ACR U 0
|
||||
Aldosteron Aldosteron S --- X
|
||||
Aldosteron-Renin-Quotient ARQ S --- X
|
||||
"Alk. Phosphatase" AP S 0
|
||||
"Alpha1-Globulin - Fraktion" a1-Globulin S X
|
||||
"Alpha2-Globulin - Fraktion" a2-Globulin S X
|
||||
"Alpha1-Globulin - Fraktion" a1-Globulin S --- X
|
||||
"Alpha2-Globulin - Fraktion" a2-Globulin S --- X
|
||||
Amylase Amylase S
|
||||
"anorg. Phosphat" P S
|
||||
"Anti-DNAse B" "Anti-DNAse B" S X
|
||||
Anti-Streptolysin ASL S X
|
||||
"Anti-DNAse B" "Anti-DNAse B" S --- X
|
||||
Anti-Streptolysin ASL S --- X
|
||||
"Bakterien (U)" Bakt U
|
||||
Basenabweichung BE BGA
|
||||
Basophile Baso E
|
||||
"Beta-Globulin - Fraktion" b-Globulin S X
|
||||
"Beta-Globulin - Fraktion" b-Globulin S --- X
|
||||
"Bilirubin (U)" Bilirubin U
|
||||
"C-reaktives Protein" CRP S
|
||||
Calcium Ca S
|
||||
@ -27,44 +30,44 @@ Calcium Ca S
|
||||
"Calcium (SU)/die" Ca SU
|
||||
Calcium-Phosphat-Produkt CaxP S
|
||||
Cholesterin Chol S
|
||||
CK gesamt" CK S X
|
||||
"CK gesamt" CK S --- X
|
||||
"CK MB" CK-MB S
|
||||
Creatinin Krea S 1
|
||||
"Creatinin (PU)" Krea U 0
|
||||
"Creatinin (SU)" Krea SU 0
|
||||
"Creatinin-Clearance (SU)/min" CrCl SU
|
||||
"Cyclosporin-A vor Gabe" "CsA (C0)" S X
|
||||
"Cystatin C (Latex Gen. 2)" "Cystatin C" S X
|
||||
"Cystatin C (N Latex)" "Cystatin C" S X
|
||||
"Cyclosporin-A vor Gabe" "CsA (C0)" S --- X
|
||||
"Cystatin C (Latex Gen. 2)" "Cystatin C" S --- X
|
||||
"Cystatin C (N Latex)" "Cystatin C" S --- X
|
||||
Eisen Fe S
|
||||
Eosinophile Eos E
|
||||
Erythrozyten Ery E
|
||||
"Erythrozyten (U)" Ery U
|
||||
Ferritin Ferr S
|
||||
Folsäure Folsäure S X
|
||||
Folsäure Folsäure S --- X
|
||||
FRAGMENTOZYTEN Fragmentozyten E
|
||||
"freies T3" fT3 S X
|
||||
"freies T4" fT4 S X
|
||||
"Gammaglobulin - Fraktion" g-Globulin S X
|
||||
"freies T3" fT3 S --- X
|
||||
"freies T4" fT4 S --- X
|
||||
"Gammaglobulin - Fraktion" g-Globulin S --- X
|
||||
Gesamt-Bilirubin Bilirubin S
|
||||
Gesamt-Eiweiss Protein S
|
||||
"Gesamt-Eiweiss (PU)" Protein U
|
||||
"Gesamt-Eiweiss (SU)" Protein SU
|
||||
"Gesamt-Eiweiss (SU)/die" Proteinurie SU
|
||||
"Gesamt-Eiweiss (SU)/die" Prot SU
|
||||
"Gesamt-Eiweiss/Creatinin (PU)" TPCR U 0
|
||||
GGT GGT S 0
|
||||
"glomerul. Filtrationsr. (MDRD)" "eGFR (MDRD)" S --- X
|
||||
"glomerul. Filtrationsr. (MDRD)" "eGFR (MDRD)" S --- --- X
|
||||
"glomerul. Filtrationsr. CKD-EP" "eGFR (CKD-EPI)" S
|
||||
"glomeruläre Filtrationsrate" GFR SU
|
||||
Glucose Glukose S
|
||||
"Glucose (U)" Glukose U
|
||||
"GOT (ASAT)" GOT S 0
|
||||
"GPT (ALAT)" GPT S 0
|
||||
Haptoglobin Haptoglobin S X
|
||||
HAPTOGLOBIN Haptoglobin S X
|
||||
Haptoglobin Haptoglobin S --- X
|
||||
HAPTOGLOBIN Haptoglobin S --- X
|
||||
"Harnstoff (SU)" Hst SU
|
||||
"Harnstoff (SU)/die" Hst/Tag SU
|
||||
Harnstoff" Hst S
|
||||
Harnstoff Hst S
|
||||
"Harnstoff-Clearance (SU)/min" HstCl SU
|
||||
Harnsäure Harnsäure S
|
||||
"HbA1c (NGSP)" HbA1c E
|
||||
@ -78,14 +81,16 @@ Kalium K S
|
||||
"Kalium (SU)" K U
|
||||
"Kalium (SU)/die" K SU
|
||||
"Ketonkörper (U)" KK U
|
||||
"Komplementfaktor C3c" C3c S X
|
||||
"Komplementfaktor C4" C4 S X
|
||||
"kohlenhyd. def. Transferrin" CDT S 1 X
|
||||
"Komplementfaktor C3c" C3c S --- X
|
||||
"Komplementfaktor C4" C4 S --- X
|
||||
"Lactat Dehydrogenase" LDH S
|
||||
"LDL - Cholesterin" LDL S
|
||||
Leukozyten Leu E
|
||||
"Leukozyten (U)" Leu U
|
||||
"Lipoprotein (a) (Gen. 2)" Lp(a) S 0 X
|
||||
Lymphozyten Lym E
|
||||
Magnesium Mg S X
|
||||
Magnesium Mg S --- X
|
||||
"MCH (HbE)" MCH E 0
|
||||
MCHC MCHC E 0
|
||||
MCV MCV E 0
|
||||
@ -104,14 +109,16 @@ pH pH BGA
|
||||
"Plattenepithelien (U)" Plattenep U
|
||||
"PO2 (art.)" pO2 BGA
|
||||
"Protein (U)" Protein U
|
||||
"PSA ges. (ECL,Elecsys,Roche)" PSA S X
|
||||
"PSA ges. (ECL,Elecsys,Roche)" PSA S --- X
|
||||
"PTH intakt" iPTH S
|
||||
PTT PTT Z
|
||||
"Ratio int. norm." INR Z
|
||||
Retikulozyten Retikulozyten E X
|
||||
Plasma-Renin-Konzentration Renin S --- X
|
||||
Retikulozyten Retikulozyten E --- X
|
||||
"Sammelmenge (U)" Volumen SU
|
||||
"Sammelzeit (U)" Zeit SU
|
||||
"Sauerstoffsättigung (art.)" SO2 BGA
|
||||
"Schwangerschaftstest (U)" Schwangerschaftstest U
|
||||
Sirolimus SIR S
|
||||
"spezifisches Gewicht (U)" "spez. Gew." U
|
||||
"Standard Bicarbonat" "Std.-Bic." BGA
|
||||
@ -121,10 +128,10 @@ Thrombozyten Thr E
|
||||
Transferrin Transferrin S
|
||||
"Transferrinsättigung" Tf.-Sätt. S
|
||||
"Triglyceride" TG S
|
||||
"Troponin T (high sensitive)" hsTnT S
|
||||
"Troponin (high sensitive)" hsTnT S
|
||||
TSH TSH S
|
||||
"Übergangsepithelien (U)" Übergangsep. U
|
||||
Unreife Granulozyten" Gran E
|
||||
"Unreife Granulozyten" Gran E
|
||||
"Urobilinogen (U)" Urobilinogen U
|
||||
Vitamin B12 B12 S X
|
||||
"Vitamin B12" B12 S --- X
|
||||
# vim: tw=160 et nowrap fo-=t
|
||||
|
@ -1,22 +1,23 @@
|
||||
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
<SOAP-ENV:Body>
|
||||
<a1:Settings id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Version>2</Version>
|
||||
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<_a>1443045381</_a>
|
||||
<_b>29162</_b>
|
||||
<_c>17774</_c>
|
||||
<_d>182</_d>
|
||||
<_e>243</_e>
|
||||
<_f>111</_f>
|
||||
<_g>227</_g>
|
||||
<_h>16</_h>
|
||||
<_i>47</_i>
|
||||
<_j>142</_j>
|
||||
<_k>57</_k>
|
||||
<_a>1038630179</_a>
|
||||
<_b>-1437</_b>
|
||||
<_c>19419</_c>
|
||||
<_d>151</_d>
|
||||
<_e>122</_e>
|
||||
<_f>7</_f>
|
||||
<_g>44</_g>
|
||||
<_h>130</_h>
|
||||
<_i>195</_i>
|
||||
<_j>52</_j>
|
||||
<_k>194</_k>
|
||||
</Uid>
|
||||
<Name id="ref-3">Kopie von Standard für Station</Name>
|
||||
<ReferenceStyle xsi:type="a3:ReferenceStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">IfSpecialOrAbnormal</ReferenceStyle>
|
||||
<Name id="ref-3">Station ganz neu</Name>
|
||||
<ReferenceStyle xsi:type="a3:ReferenceStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">IfSpecialItem</ReferenceStyle>
|
||||
<AbnormalStyle xsi:type="a3:AbnormalStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">None</AbnormalStyle>
|
||||
<ElementsCount>4</ElementsCount>
|
||||
<Element0Type href="#ref-4"/>
|
||||
<Element0Object href="#ref-5"/>
|
||||
@ -33,7 +34,7 @@
|
||||
<AssemblyName id="ref-13">zaaReloaded2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6ec8d075a1ab1383</AssemblyName>
|
||||
</a2:UnitySerializationHolder>
|
||||
<a4:TwoColumns id="ref-5" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Version>2</Version>
|
||||
<ChildrenCount>0</ChildrenCount>
|
||||
</a4:TwoColumns>
|
||||
<a2:UnitySerializationHolder id="ref-6" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
@ -42,8 +43,8 @@
|
||||
<AssemblyName href="#ref-13"/>
|
||||
</a2:UnitySerializationHolder>
|
||||
<a4:SelectFirstDay id="ref-7" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<ChildrenCount>16</ChildrenCount>
|
||||
<Version>2</Version>
|
||||
<ChildrenCount>22</ChildrenCount>
|
||||
<Child0Type href="#ref-15"/>
|
||||
<Child0Object href="#ref-16"/>
|
||||
<Child1Type href="#ref-15"/>
|
||||
@ -76,24 +77,36 @@
|
||||
<Child14Object href="#ref-30"/>
|
||||
<Child15Type href="#ref-15"/>
|
||||
<Child15Object href="#ref-31"/>
|
||||
<Child16Type href="#ref-15"/>
|
||||
<Child16Object href="#ref-32"/>
|
||||
<Child17Type href="#ref-15"/>
|
||||
<Child17Object href="#ref-33"/>
|
||||
<Child18Type href="#ref-34"/>
|
||||
<Child18Object href="#ref-35"/>
|
||||
<Child19Type href="#ref-34"/>
|
||||
<Child19Object href="#ref-36"/>
|
||||
<Child20Type href="#ref-34"/>
|
||||
<Child20Object href="#ref-37"/>
|
||||
<Child21Type href="#ref-15"/>
|
||||
<Child21Object href="#ref-38"/>
|
||||
</a4:SelectFirstDay>
|
||||
<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<Data id="ref-32">zaaReloaded2.Controller.Elements.NextColumn</Data>
|
||||
<Data id="ref-39">zaaReloaded2.Controller.Elements.NextColumn</Data>
|
||||
<UnityType>4</UnityType>
|
||||
<AssemblyName href="#ref-13"/>
|
||||
</a2:UnitySerializationHolder>
|
||||
<a4:NextColumn id="ref-9" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Version>2</Version>
|
||||
<ChildrenCount>0</ChildrenCount>
|
||||
</a4:NextColumn>
|
||||
<a2:UnitySerializationHolder id="ref-10" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<Data id="ref-33">zaaReloaded2.Controller.Elements.SelectLastDay</Data>
|
||||
<Data id="ref-40">zaaReloaded2.Controller.Elements.SelectLastDay</Data>
|
||||
<UnityType>4</UnityType>
|
||||
<AssemblyName href="#ref-13"/>
|
||||
</a2:UnitySerializationHolder>
|
||||
<a4:SelectLastDay id="ref-11" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<ChildrenCount>16</ChildrenCount>
|
||||
<Version>2</Version>
|
||||
<ChildrenCount>22</ChildrenCount>
|
||||
<Child0Type href="#ref-15"/>
|
||||
<Child0Object href="#ref-16"/>
|
||||
<Child1Type href="#ref-15"/>
|
||||
@ -126,75 +139,116 @@
|
||||
<Child14Object href="#ref-30"/>
|
||||
<Child15Type href="#ref-15"/>
|
||||
<Child15Object href="#ref-31"/>
|
||||
<Child16Type href="#ref-15"/>
|
||||
<Child16Object href="#ref-32"/>
|
||||
<Child17Type href="#ref-15"/>
|
||||
<Child17Object href="#ref-33"/>
|
||||
<Child18Type href="#ref-34"/>
|
||||
<Child18Object href="#ref-35"/>
|
||||
<Child19Type href="#ref-34"/>
|
||||
<Child19Object href="#ref-36"/>
|
||||
<Child20Type href="#ref-34"/>
|
||||
<Child20Object href="#ref-37"/>
|
||||
<Child21Type href="#ref-15"/>
|
||||
<Child21Object href="#ref-38"/>
|
||||
</a4:SelectLastDay>
|
||||
<a2:UnitySerializationHolder id="ref-15" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<Data id="ref-34">zaaReloaded2.Controller.Elements.Items</Data>
|
||||
<Data id="ref-41">zaaReloaded2.Controller.Elements.Items</Data>
|
||||
<UnityType>4</UnityType>
|
||||
<AssemblyName href="#ref-13"/>
|
||||
</a2:UnitySerializationHolder>
|
||||
<a4:Items id="ref-16" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-35">Klinische Chemie: Na, K, Cl, Mg, Ca, P, CaxP, Alb, Prot, Haptoglobin, LDH, Glukose, Harnsäure</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-42">Klinische Chemie: Na, K, Cl, Mg, Ca, P, CaxP, Alb, Prot, Haptoglobin, LDH, Glukose, Harnsäure</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-17" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-36">Entzündung/Immunsystem: CRP, Pct, C3c, C4, Anti-DNAse B, ASL</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-43">Entzündung/Immunsystem: CRP, Pct, C3c, C4, Anti-DNAse B, ASL</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-18" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-37">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-44">Kardiale Marker: CK, CKMB, hsTnT, NT-proBNP</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-19" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-38">Niere: Krea, Hst, eGFR (CKD-EPI)</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-45">Niere: Krea, Hst, eGFR (CKD-EPI), Cystatin C</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-20" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-39">Sammelurin: SU-Proteinurie, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Natrium, SU-Zeit, SU-Volumen</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-46">Sammelurin: SU-Prot, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Na, SU-Zeit, SU-Volumen</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-21" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-40">Spot-Urin: U-*</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-47">Spot-Urin: U-TPCR, U-ACR, U-Alb, U-Ery, U-Leu, U-Bakt</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-22" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-41">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-48">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-23" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-42">Blutfette: TG, Chol, LDL, HDL, Lp(a)</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-49">Blutfette: TG, Chol, LDL, HDL, Lp(a)</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-24" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-43">Hämatologie: Hb, Hkt, Reti, Leu, Thr, Ery, Neu, Lym, Mon, Baso, Eos, MCV, HbA1c, Retikulozyten, Fragmentozyten</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-50">Hämatologie: Hb, Hkt, Reti, Leu, Thr, MCV, HbA1c, Retikulozyten, Fragmentozyten</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-25" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-44">Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-51">Diff.-BB: Neu, Lym, Mon, Baso, Eos</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-26" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-45">Hormone: iPTH, TSH</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-52">Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-27" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-46">Medikamente: TAC, CSA, SIR, Vancomycin, Gentamicin, Tobramicin</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-53">Serum-Elektrophorese: Albumin-Fraktion, a1-Globulin, a2-Globulin, b-Globulin, g-Globulin</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-28" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-47">Eisenhaushalt: Eisen, Ferritin, Transferrin, Tf.-Sätt.</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-54">Hormone: iPTH, TSH, fT3, fT4</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-29" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-48">BGA: pH, Std.-Bic., BE</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-55">Vitamine: B12, Folsäure</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-30" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-49">Hepatitis-Serologie: Anti-HBs, Anti-HBc</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-56">Eisenhaushalt: Eisen, Ferritin, Transferrin, Tf.-Sätt.</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-31" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>1</Version>
|
||||
<Content id="ref-50">Weitere Werte: *</Content>
|
||||
<Version>2</Version>
|
||||
<Content id="ref-57">BGA: pH, Std.-Bic., BE</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-32" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-58">Hepatitis-Serologie: Anti-HBs, Anti-HBc</Content>
|
||||
</a4:Items>
|
||||
<a4:Items id="ref-33" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-59">Medikamente: TAC "(Ziel-Talspiegel: <> µg/l)", CsA (C0) "(Ziel-Talspiegel: <> µg/l)", SIR "(Ziel-Talspiegel: <> µg/l)", Vancomycin, Gentamicin, Tobramicin</Content>
|
||||
</a4:Items>
|
||||
<a2:UnitySerializationHolder id="ref-34" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||
<Data id="ref-60">zaaReloaded2.Controller.Elements.CustomText</Data>
|
||||
<UnityType>4</UnityType>
|
||||
<AssemblyName href="#ref-13"/>
|
||||
</a2:UnitySerializationHolder>
|
||||
<a4:CustomText id="ref-35" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-61">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
|
||||
</a4:CustomText>
|
||||
<a4:CustomText id="ref-36" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-62">Virologie (EDTA-Blut): CMV-PCR, BKV-PCR</Content>
|
||||
</a4:CustomText>
|
||||
<a4:CustomText id="ref-37" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-63">Autoantikörper: ANCA (IF), MPO-ANCA (ELISA), PR3-ANCA (ELISA), ANA (IF), AnDNA (ELISA), AnDNA (RIA)</Content>
|
||||
</a4:CustomText>
|
||||
<a4:Items id="ref-38" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||
<Version>2</Version>
|
||||
<Content id="ref-64">Tumormarker: PSA</Content>
|
||||
</a4:Items>
|
||||
</SOAP-ENV:Body>
|
||||
</SOAP-ENV:Envelope>
|
||||
|
@ -15,11 +15,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.Office.Interop.Word;
|
||||
|
||||
namespace zaaReloaded2.Demo
|
||||
@ -43,6 +39,7 @@ namespace zaaReloaded2.Demo
|
||||
Document demoDoc = Globals.ThisAddIn.Application.Documents
|
||||
.Add(Template: tempFile);
|
||||
File.Delete(tempFile);
|
||||
Globals.ThisAddIn.Ribbon.ActivateZaaTab();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -32,7 +32,7 @@
|
||||
settings:WindowState.Save="True"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<DockPanel Margin="10">
|
||||
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,0,0">
|
||||
|
@ -25,7 +25,7 @@
|
||||
Title="Fehlerbericht versenden"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<StackPanel Margin="10" Orientation="Horizontal">
|
||||
<TextBlock FontSize="72" FontWeight="Bold" Foreground="Red" Margin="0,0,10,0"
|
||||
|
@ -29,7 +29,7 @@
|
||||
SizeToContent="WidthAndHeight"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger SourceObject="{Binding CompletedMessage}" EventName="Sent">
|
||||
|
@ -25,7 +25,7 @@
|
||||
Title="Fehlerbericht versenden"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<StackPanel Margin="10" Orientation="Horizontal">
|
||||
<TextBlock FontSize="48" FontWeight="Bold" Foreground="GreenYellow" Margin="0,0,10,0"
|
||||
|
@ -72,6 +72,7 @@ namespace zaaReloaded2.Formatter
|
||||
find.Execute2007(FindText: "RR ", ReplaceWith: "", Replace: WdReplace.wdReplaceAll, MatchCase: true, MatchWholeWord: true);
|
||||
find.Execute2007(FindText: "HF ", ReplaceWith: "", Replace: WdReplace.wdReplaceAll, MatchCase: true, MatchWholeWord: true);
|
||||
find.Execute2007(FindText: "TAC-Spiegel", ReplaceWith: "Tacrolimus-Talspiegel", Replace: WdReplace.wdReplaceAll);
|
||||
find.Execute2007(FindText: "ammelruin", ReplaceWith: "ammelurin", Replace: WdReplace.wdReplaceAll, MatchWholeWord: false);
|
||||
find.Execute2007(FindText: "4-7", ReplaceWith: "4 bis 7", Replace: WdReplace.wdReplaceAll);
|
||||
find.Execute2007(FindText: "5-8", ReplaceWith: "5 bis 8", Replace: WdReplace.wdReplaceAll);
|
||||
find.Execute2007(FindText: "8-10", ReplaceWith: "8 bis 10", Replace: WdReplace.wdReplaceAll);
|
||||
@ -83,7 +84,7 @@ namespace zaaReloaded2.Formatter
|
||||
static void FixSalutation(Document document)
|
||||
{
|
||||
Regex sal = new Regex(@"^Mit.*?Grüßen\r");
|
||||
Regex med = new Regex(@"^((Häusl|Empf).*?Medikat)|Therapieempf");
|
||||
Regex med = new Regex(@"^((Häusl|Empf).*?Medikat)|^Therapieempf");
|
||||
foreach (Paragraph p in document.Paragraphs)
|
||||
{
|
||||
if (sal.IsMatch(p.Range.Text)) p.Range.Text = "Mit freundlichen, kollegialen Grüßen,\r";
|
||||
|
@ -21,6 +21,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.Office.Interop.Word;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace zaaReloaded2.Formatter
|
||||
{
|
||||
@ -170,6 +171,14 @@ namespace zaaReloaded2.Formatter
|
||||
_buffer.AppendLine(text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Appends a newline to the buffer.
|
||||
/// </summary>
|
||||
public void WriteLine()
|
||||
{
|
||||
_buffer.AppendLine();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Inserts text at the start of the buffer.
|
||||
/// </summary>
|
||||
@ -192,6 +201,7 @@ namespace zaaReloaded2.Formatter
|
||||
{
|
||||
string[] substrings = _markupRegex.Split(text);
|
||||
Selection sel = Document.ActiveWindow.Selection;
|
||||
Highlights hightlights = new Highlights();
|
||||
foreach (string substring in substrings)
|
||||
{
|
||||
switch (substring)
|
||||
@ -214,6 +224,12 @@ namespace zaaReloaded2.Formatter
|
||||
case "</u>":
|
||||
sel.Font.Underline = WdUnderline.wdUnderlineNone;
|
||||
break;
|
||||
case "<highlight>":
|
||||
hightlights.Start(sel.Range);
|
||||
break;
|
||||
case "</highlight>":
|
||||
hightlights.Stop(sel.Range);
|
||||
break;
|
||||
case "</style>":
|
||||
sel.ClearCharacterStyle();
|
||||
break;
|
||||
@ -230,6 +246,7 @@ namespace zaaReloaded2.Formatter
|
||||
break;
|
||||
}
|
||||
}
|
||||
hightlights.ApplyHighlights();
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -242,6 +259,50 @@ namespace zaaReloaded2.Formatter
|
||||
static readonly Regex _markupRegex = new Regex(@"(<[^ >]+>)");
|
||||
static readonly Regex _styleRegex = new Regex(@"<style:(?<style>[^>]+)>");
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helper class for highlighting
|
||||
|
||||
/// <summary>
|
||||
/// Embedded helper class to manage highlights.
|
||||
/// </summary>
|
||||
class Highlights
|
||||
{
|
||||
public void Start(Range start)
|
||||
{
|
||||
if (_currentHighlight == null)
|
||||
{
|
||||
_currentHighlight = start;
|
||||
_highlights.Add(_currentHighlight);
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop(Range stop)
|
||||
{
|
||||
if (_currentHighlight != null)
|
||||
{
|
||||
_currentHighlight.End = stop.End;
|
||||
_currentHighlight = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyHighlights()
|
||||
{
|
||||
foreach (Range r in _highlights)
|
||||
{
|
||||
r.HighlightColorIndex = WdColorIndex.wdYellow;
|
||||
}
|
||||
}
|
||||
|
||||
public Highlights()
|
||||
{
|
||||
_highlights = new Collection<Range>();
|
||||
_currentHighlight = null;
|
||||
}
|
||||
|
||||
Collection<Range> _highlights;
|
||||
Range _currentHighlight;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -34,6 +34,9 @@ namespace zaaReloaded2.Formatter
|
||||
{
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the Settings that this Formatter works with.
|
||||
/// </summary>
|
||||
public Settings Settings { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -66,9 +69,17 @@ namespace zaaReloaded2.Formatter
|
||||
|
||||
/// <summary>
|
||||
/// Is true if this Formatter object carries a Laboratory with
|
||||
/// at least one time point.
|
||||
/// at least one time point, and if there are Settings to work with.
|
||||
/// </summary>
|
||||
public bool CanRun { get { return Laboratory.TimePoints.Count > 0; } }
|
||||
public bool CanRun
|
||||
{
|
||||
get
|
||||
{
|
||||
return (Settings != null)
|
||||
&& (Laboratory != null)
|
||||
&& (Laboratory.TimePoints.Count > 0);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@ -119,14 +130,19 @@ namespace zaaReloaded2.Formatter
|
||||
/// current position of the cursor).</param>
|
||||
public void Run()
|
||||
{
|
||||
if (!CanRun) throw new NoLaboratoryDataException("No laboratory data to format.");
|
||||
if (!CanRun)
|
||||
{
|
||||
if (Settings == null)
|
||||
throw new InvalidOperationException("No settings data to work with.");
|
||||
if ((Laboratory == null) || Laboratory.TimePoints.Count == 0)
|
||||
throw new NoLaboratoryDataException("No laboratory data to format.");
|
||||
throw new InvalidOperationException("Cannot run formatter.");
|
||||
}
|
||||
|
||||
// Create undo record and styles prior to iterating over the elements
|
||||
// because a column switching element might trigger output to the
|
||||
// document.
|
||||
Globals.ThisAddIn.Application.UndoRecord.StartCustomRecord(
|
||||
String.Format("Laborformatierung ({0})", Properties.Settings.Default.AddinName)
|
||||
);
|
||||
Helpers.StartUndo("Laborformatierung");
|
||||
CreateStyles();
|
||||
|
||||
int current = 0;
|
||||
@ -155,7 +171,7 @@ namespace zaaReloaded2.Formatter
|
||||
}
|
||||
|
||||
_secondaryBuffer.Flush();
|
||||
Globals.ThisAddIn.Application.UndoRecord.EndCustomRecord();
|
||||
Helpers.EndUndo();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -21,6 +21,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.Office.Interop.Word;
|
||||
using zaaReloaded2.LabModel;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
|
||||
namespace zaaReloaded2.Formatter
|
||||
{
|
||||
@ -70,6 +71,11 @@ namespace zaaReloaded2.Formatter
|
||||
/// </summary>
|
||||
public bool IsBlacklisted { get { return LabItem.IsBlacklisted; } }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the item's comment.
|
||||
/// </summary>
|
||||
public ItemComment Comment { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
@ -169,21 +175,31 @@ namespace zaaReloaded2.Formatter
|
||||
value = LabItem.Value;
|
||||
}
|
||||
|
||||
string comment = String.Empty;
|
||||
if (Comment != null)
|
||||
{
|
||||
comment = Comment.BuildComment();
|
||||
if (comment != String.Empty) comment = " " + comment;
|
||||
}
|
||||
|
||||
string name = IncludeMaterial ? LabItem.QualifiedName : LabItem.Name;
|
||||
|
||||
|
||||
string output =
|
||||
String.Format(
|
||||
"{0} {1}{2}{3}",
|
||||
"{0} {1}{2}{3}{4}",
|
||||
name,
|
||||
value,
|
||||
unit,
|
||||
reference
|
||||
reference,
|
||||
comment
|
||||
);
|
||||
if (!LabItem.IsNormal)
|
||||
{
|
||||
output = AbnormalStyle.ToMarkup(false) + output + AbnormalStyle.ToMarkup(true);
|
||||
}
|
||||
|
||||
|
||||
formatter.Write(output);
|
||||
HasBeenUsed = true;
|
||||
}
|
||||
|
69
zaaReloaded2/Helpers.cs
Executable file
@ -0,0 +1,69 @@
|
||||
/* Helpers.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
|
||||
namespace zaaReloaded2
|
||||
{
|
||||
/// <summary>
|
||||
/// Common helper methods.
|
||||
/// </summary>
|
||||
public static class Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Splits a text into paragraphs.
|
||||
/// </summary>
|
||||
/// <param name="paragraph">Text to split.</param>
|
||||
/// <returns>Array of paragraphs in the text.</returns>
|
||||
/// <remarks>
|
||||
/// This implementation relies on the fact that the order of
|
||||
/// splitting strings in C#'s String.Split() method is
|
||||
/// important; see http://stackoverflow.com/a/8664639/270712
|
||||
/// </remarks>
|
||||
public static string[] SplitParagraphs(string text)
|
||||
{
|
||||
return text.Split(
|
||||
new string[] { "\r\n", "\n\r", "\r", "\n" },
|
||||
StringSplitOptions.RemoveEmptyEntries);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts a custom undo record.
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
public static void StartUndo(string message)
|
||||
{
|
||||
if (Globals.ThisAddIn != null)
|
||||
{
|
||||
Globals.ThisAddIn.Application.UndoRecord.StartCustomRecord(
|
||||
String.Format("{0} ({1})", message, Properties.Settings.Default.AddinName)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ends an undo record.
|
||||
/// </summary>
|
||||
public static void EndUndo()
|
||||
{
|
||||
if (Globals.ThisAddIn != null)
|
||||
{
|
||||
Globals.ThisAddIn.Application.UndoRecord.EndCustomRecord();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
BIN
zaaReloaded2/Icons/m.png
Normal file
After Width: | Height: | Size: 778 B |
BIN
zaaReloaded2/Icons/mm.png
Normal file
After Width: | Height: | Size: 723 B |
118
zaaReloaded2/Importer/ZaaImporter/AutoDetect.cs
Executable file
@ -0,0 +1,118 @@
|
||||
using Microsoft.Office.Interop.Word;
|
||||
/* AutoDetect.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace zaaReloaded2.Importer.ZaaImporter
|
||||
{
|
||||
static class AutoDetect
|
||||
{
|
||||
/// <summary>
|
||||
/// Attempts to automatically detect laboratory data in the Word
|
||||
/// document.
|
||||
/// </summary>
|
||||
/// <param name="document">Document which to parse for laboratory
|
||||
/// data.</param>
|
||||
/// <returns>True if laboratory data was detected, false if not.</returns>
|
||||
/// <exception cref="ArgumentNullException">if <paramref name="document"/>
|
||||
/// is null.</exception>
|
||||
public static bool Detect(Document document)
|
||||
{
|
||||
if (document == null)
|
||||
{
|
||||
throw new ArgumentNullException(
|
||||
"Automatic laboratory detection requires a document.");
|
||||
}
|
||||
|
||||
// TODO: Try to make this algorithm more elegant.
|
||||
Paragraph start = null;
|
||||
Paragraph end = null;
|
||||
int i = 1;
|
||||
|
||||
if (document.Bookmarks.Exists("Labor"))
|
||||
{
|
||||
i = GetParagraphIndex(
|
||||
document,
|
||||
document.Bookmarks["Labor"].Range.Paragraphs[1]);
|
||||
}
|
||||
|
||||
while (i <= document.Paragraphs.Count)
|
||||
{
|
||||
// Expect the first paragraph of a Lauris block to be
|
||||
// a time stamp. This prevents erroneous detection of
|
||||
// lines such as "Tel. (09 31) 201-39432; -39126", which
|
||||
// happen to structurally resemble a paragraph with
|
||||
// laboratory items.
|
||||
if (LaurisTimePoint.IsTimeStampLine(
|
||||
document.Paragraphs[i].Range.Text))
|
||||
{
|
||||
start = document.Paragraphs[i];
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if (start != null)
|
||||
{
|
||||
end = start;
|
||||
while (i <= document.Paragraphs.Count - 1)
|
||||
{
|
||||
if (!IsLabParagraph(document.Paragraphs[i+1]))
|
||||
{
|
||||
end = document.Paragraphs[i];
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
document.Range(start.Range.Start, end.Range.End).Select();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if a paragraph is either a time stamp line
|
||||
/// or a paragraph with laboratory items.
|
||||
/// </summary>
|
||||
/// <param name="paragraph"></param>
|
||||
/// <returns></returns>
|
||||
private static bool IsLabParagraph(Paragraph paragraph)
|
||||
{
|
||||
string text = paragraph.Range.Text;
|
||||
return (LaurisParagraph.ResemblesLaurisParagraph(text)
|
||||
|| LaurisTimePoint.IsTimeStampLine(text));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the index of a paragraph.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// http://word.mvps.org/faqs/macrosvba/GetIndexNoOfPara.htm
|
||||
/// </remarks>
|
||||
/// <param name="paragraph">Paragraph whose index to return.</param>
|
||||
/// <returns>Index of the paragraph.</returns>
|
||||
private static int GetParagraphIndex(Document document, Paragraph paragraph)
|
||||
{
|
||||
return document.Range(0, paragraph.Range.Start).Paragraphs.Count;
|
||||
}
|
||||
}
|
||||
}
|
@ -154,6 +154,10 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
||||
LowerLimit = Double.Parse(limitMatch.Groups["limit2"].Value.Replace(',', '.'),
|
||||
CultureInfo.InvariantCulture);
|
||||
break;
|
||||
case "":
|
||||
// NOOP for special cases such as "[s. Bem.]" which occurs in NT-proBNP
|
||||
// Fixes exception ID 65ca8575.
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException(
|
||||
String.Format("Unknown operator in {0}",
|
||||
@ -199,7 +203,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
||||
#region Fields
|
||||
|
||||
static readonly Regex _numericalRegex = new Regex(
|
||||
@"(?<name>[^:]+):\s*(?<value>[\d,.]+)\s*(?<limits>\[[^\]]+])?\s*(?<unit>[^;]+)?");
|
||||
@"(?<name>[^:]+):\s*(?<value>([\<\>]\s)?[\d,.]+)\s*(?<limits>\[[^\]]+])?\s*(?<unit>[^;]+)?");
|
||||
static readonly Regex _categoricalRegex = new Regex(
|
||||
@"(?<name>[^:]+):\s*(?<value>[^[;]+)\s*(\[(?<normal>[^\]]+)])?");
|
||||
static readonly Regex _limitRegex = new Regex(@"\[(?<limit1>[-\d,.]+)?\s*(?<operator>\S+)\s*(?<limit2>[-\d,.]+)?]");
|
||||
|
@ -196,11 +196,12 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
||||
|
||||
void ParseParagraph(string paragraph)
|
||||
{
|
||||
if (_timeStampRegex.IsMatch(paragraph))
|
||||
Match m = _timeStampRegex.Match(paragraph);
|
||||
if (m.Success)
|
||||
{
|
||||
DateTime dt;
|
||||
if (DateTime.TryParseExact(
|
||||
_timeStampRegex.Match(paragraph).Groups["datetime"].Value,
|
||||
m.Groups["datetime"].Value,
|
||||
"dd.MM.yyyy HH:mm",
|
||||
CultureInfo.InvariantCulture,
|
||||
DateTimeStyles.AllowWhiteSpaces,
|
||||
@ -208,8 +209,24 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
||||
{
|
||||
TimeStamp = dt;
|
||||
}
|
||||
|
||||
// Put the remainder of the line back to the
|
||||
// 'paragraph' parameter to deal with exceptional
|
||||
// lines such as
|
||||
// "(17.09.2015 10:44:00) Cyclosporin-A vor Gabe: 130 µg/l;"
|
||||
// We need to add a dummy caption because this is
|
||||
// the normal format of a paragraph generated from Lauris.
|
||||
if (m.Groups["tail"].Success)
|
||||
{
|
||||
paragraph = "DUMMY CAPTION: " + m.Groups["tail"].Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
paragraph = String.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
if (!String.IsNullOrEmpty(paragraph))
|
||||
{
|
||||
LaurisParagraph lp = new LaurisParagraph(
|
||||
paragraph,
|
||||
@ -236,7 +253,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
||||
/// paragraph of a LaurisText.
|
||||
/// </summary>
|
||||
static readonly Regex _timeStampRegex = new Regex(
|
||||
@"^(Labor:)?\s*\(?\s*(?<datetime>\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)");
|
||||
@"^(Labor:?)?\s*\(?\s*(?<datetime>\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)(:00\)\s*(?<tail>.+)?)?$");
|
||||
IList<String> _paragraphs;
|
||||
Parameters _parameterDictionary;
|
||||
Units _unitDictionary;
|
||||
|
@ -67,12 +67,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
||||
/// <param name="text">ZAA-formatted Lauris output to import.</param>
|
||||
public void Import(string text)
|
||||
{
|
||||
// Split the text into parargraphs. This implementation relies on the fact
|
||||
// that the order or splitting strings in C#'s String.Split() method is
|
||||
// important; see http://stackoverflow.com/a/8664639/270712
|
||||
string[] paragraphs = text.Split(
|
||||
new string[] { "\r\n", "\n\r", "\r", "\n" },
|
||||
StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] paragraphs = Helpers.SplitParagraphs(text);
|
||||
LaurisTimePoint timePoint = null;
|
||||
|
||||
foreach (string paragraph in paragraphs)
|
||||
|
@ -74,6 +74,19 @@ namespace zaaReloaded2.LabModel
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns whether or not the value is an 'extreme' value,
|
||||
/// i.e. marked with ">" or "<". These values are not
|
||||
/// strictly numeric, and IsNumerical returns false for them.
|
||||
/// </summary>
|
||||
public bool IsExtreme
|
||||
{
|
||||
get
|
||||
{
|
||||
return "<>".Contains(Value.Substring(0, 1));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the normal value of the item. Need not be set. This is
|
||||
/// used for items with nominal values (as opposed to numbers).
|
||||
@ -130,6 +143,8 @@ namespace zaaReloaded2.LabModel
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsExtreme) return false;
|
||||
|
||||
if (HasLimits)
|
||||
{
|
||||
if (HasLowerLimit && HasUpperLimit)
|
||||
|
210
zaaReloaded2/Medication/Formatter.cs
Executable file
@ -0,0 +1,210 @@
|
||||
using Microsoft.Office.Interop.Word;
|
||||
/* Formatter.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace zaaReloaded2.Medication
|
||||
{
|
||||
/// <summary>
|
||||
/// Formats prescriptions
|
||||
/// </summary>
|
||||
public class Formatter
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public IList<Prescription> Prescriptions { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public Formatter() { }
|
||||
|
||||
public Formatter(IList<Prescription> prescriptions)
|
||||
: this()
|
||||
{
|
||||
Prescriptions = prescriptions;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
/// <summary>
|
||||
/// Writes a block of prescriptions with one column to a
|
||||
/// Word document.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
public void FormatOneColumn(Document document)
|
||||
{
|
||||
DoFormat("Medikation einspaltig formatieren",
|
||||
document,
|
||||
writer =>
|
||||
{
|
||||
foreach (Prescription p in Prescriptions)
|
||||
{
|
||||
writer.WriteLine(p.ToString());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes a block of prescriptions with two columns to a
|
||||
/// Word document.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
public void FormatTwoColumns(Document document)
|
||||
{
|
||||
DoFormat("Medikation zweispaltig formatieren",
|
||||
document,
|
||||
writer =>
|
||||
{
|
||||
int half = Prescriptions.Count / 2 + Prescriptions.Count % 2;
|
||||
for (int i = 0; i < half; i++)
|
||||
{
|
||||
writer.Write(Prescriptions[i].ToString());
|
||||
if (i + half < Prescriptions.Count)
|
||||
{
|
||||
writer.Write("\t" + Prescriptions[i + half].ToString());
|
||||
}
|
||||
writer.WriteLine();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a table containing all prescriptions and copies it to
|
||||
/// the clipboard.
|
||||
/// </summary>
|
||||
public void CreatePrescriptionsTable()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
void AddDisclaimer(zaaReloaded2.Formatter.DocumentWriter writer)
|
||||
{
|
||||
if (HasMMF())
|
||||
{
|
||||
writer.WriteLine();
|
||||
writer.WriteLine("<b>Hinweis: Während und nach Therapie mit Mycophenolsäurederivaten wie CellCept\u00ae " +
|
||||
"und Myfortic\u00ae müssen Frauen und Männer eine Schwangerschaft sicher verhüten (siehe Rote-Hand-Brief zu " +
|
||||
"CellCept\u00ae vom 10.11.2015).</b>");
|
||||
writer.WriteLine();
|
||||
}
|
||||
writer.WriteLine("<highlight><b>Bitte Medikation überprüfen!</b></highlight>");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a paragraph and character styles in the document.
|
||||
/// </summary>
|
||||
void CreateStyles(Document document)
|
||||
{
|
||||
if (document != null)
|
||||
{
|
||||
Style style;
|
||||
// Don't see a better way to check for the existence of a particular
|
||||
// paragraph style than by using a try...catch construction.
|
||||
try
|
||||
{
|
||||
style = document.Styles[Properties.Settings.Default.DrugsParagraph];
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Add default paragraph style for laboratory
|
||||
style = document.Styles.Add(Properties.Settings.Default.DrugsParagraph);
|
||||
style.Font.Size = 10; // pt
|
||||
style.Font.Bold = 0;
|
||||
style.Font.Italic = 0;
|
||||
style.Font.Underline = 0;
|
||||
style.ParagraphFormat.SpaceAfter = 0;
|
||||
style.ParagraphFormat.SpaceBefore = 0;
|
||||
style.ParagraphFormat.LeftIndent = 0; // pt
|
||||
style.ParagraphFormat.FirstLineIndent = 0; // pt
|
||||
style.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft;
|
||||
style.ParagraphFormat.TabStops.ClearAll();
|
||||
int tabStop = 108; // 108 pt = 2.5 in = 3.8 cm
|
||||
int halfWay = 227; // 227 pt = 3.15 in = 8 cm
|
||||
style.ParagraphFormat.TabStops.Add(tabStop);
|
||||
style.ParagraphFormat.TabStops.Add(halfWay);
|
||||
style.ParagraphFormat.TabStops.Add(halfWay + tabStop);
|
||||
}
|
||||
|
||||
// try
|
||||
// {
|
||||
// style = document.Styles[Properties.Settings.Default.DrugsHeader];
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// // Add header paragraph style for laboratory
|
||||
// style = document.Styles.Add(Properties.Settings.Default.DrugsHeader);
|
||||
// style.Font.Size = 10; // pt
|
||||
// style.Font.Bold = 1;
|
||||
// style.Font.Italic = 0;
|
||||
// style.Font.Underline = WdUnderline.wdUnderlineSingle;
|
||||
// style.ParagraphFormat.SpaceAfter = 0;
|
||||
// style.ParagraphFormat.SpaceBefore = 12;
|
||||
// style.ParagraphFormat.LeftIndent = 36; // pt
|
||||
// style.ParagraphFormat.FirstLineIndent = -36; // pt
|
||||
// style.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphJustify;
|
||||
// style.set_NextParagraphStyle(document.Styles[Properties.Settings.Default.DrugsParagraph]);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Does the heavy lifting in a DRY way.
|
||||
/// </summary>
|
||||
void DoFormat(string description, Document document,
|
||||
Action<zaaReloaded2.Formatter.DocumentWriter> outputAction)
|
||||
{
|
||||
if (document == null)
|
||||
{
|
||||
throw new ArgumentNullException(
|
||||
"Cannot format prescriptions because no document was given.");
|
||||
}
|
||||
|
||||
Helpers.StartUndo(description);
|
||||
zaaReloaded2.Formatter.DocumentWriter writer = new zaaReloaded2.Formatter.DocumentWriter(document);
|
||||
CreateStyles(document);
|
||||
writer.Write(String.Format("<style:{0}>", Properties.Settings.Default.DrugsParagraph));
|
||||
outputAction(writer);
|
||||
AddDisclaimer(writer);
|
||||
// writer.Write("</style>"); // causes COM exceptions, needs fix
|
||||
writer.Flush();
|
||||
Helpers.EndUndo();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether MMF or MPA is contained in the prescriptions.
|
||||
/// </summary>
|
||||
/// <returns>True if MMF or MPA is prescribed.</returns>
|
||||
bool HasMMF()
|
||||
{
|
||||
return Prescriptions.FirstOrDefault(p => p.IsMmf) != null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
208
zaaReloaded2/Medication/Importer.cs
Executable file
@ -0,0 +1,208 @@
|
||||
using Microsoft.Office.Interop.Word;
|
||||
/* Importer.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace zaaReloaded2.Medication
|
||||
{
|
||||
/// <summary>
|
||||
/// Imports prescriptions from a physician's letter.
|
||||
/// </summary>
|
||||
public class Importer
|
||||
{
|
||||
#region Static methods
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to automatically detect a block of prescriptions
|
||||
/// in a document. The document is screened from end to start.
|
||||
/// The detected block is selected.
|
||||
/// </summary>
|
||||
/// <returns>True if a block was detected, false if not.</returns>
|
||||
/// <remarks>
|
||||
/// <para>
|
||||
/// Autodetection works by examining the document paragraph by
|
||||
/// paragraph, starting at the end of the document. The first
|
||||
/// block of at least two lines that are identified as prescription
|
||||
/// lines is selected.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// It should be noted that every paragraph (a.k.a. line) may
|
||||
/// be regarded as one of three things:
|
||||
/// </para>
|
||||
/// <list type="ol">
|
||||
/// <item>A typical prescription line (in the form "Ramipril 5 mg 1-0-0")</item>
|
||||
/// <item>A typical non-prescription text line</item>
|
||||
/// <item>Something inbetween, e.g. a line with tab stops as in
|
||||
/// "Ramipril 5 mg \t alle zwei Tage" or in "Prof. B. Oss \t Dr. A. Sistent"
|
||||
/// </item>
|
||||
/// </list>
|
||||
/// <para>
|
||||
/// It is the third type of line that may cause confusion. If such a line
|
||||
/// is encountered at the start of a putative block of prescriptions, we
|
||||
/// therefore enter a "fuzzy" state in the detection algorithm and take
|
||||
/// it from there, i.e. disregard the block if there are no lines that
|
||||
/// are clearly prescriptions lines, or accept the block if we do detect
|
||||
/// adjacent lines with unequivocal prescriptions.
|
||||
/// </para>
|
||||
///
|
||||
/// </remarks>
|
||||
public static bool AutoDetect(Document document)
|
||||
{
|
||||
Paragraph start = null;
|
||||
Paragraph end = null;
|
||||
bool insideBlock = false;
|
||||
bool fuzzy = false;
|
||||
bool result = false;
|
||||
int i = document.Paragraphs.Count;
|
||||
|
||||
while (i > 1)
|
||||
{
|
||||
string line = document.Paragraphs[i].Range.Text;
|
||||
|
||||
if (Prescription.IsCanonicalPrescriptionLine(line))
|
||||
{
|
||||
// The current line is unequivocally a prescription line:
|
||||
// If we're not inside a block already, mark the bottom
|
||||
// of the block.
|
||||
// If we are inside a block already, make sure to leave
|
||||
// the 'fuzzy' state because this clearly now is a prescription
|
||||
// block.
|
||||
if (insideBlock)
|
||||
{
|
||||
fuzzy = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
end = document.Paragraphs[i];
|
||||
insideBlock = true;
|
||||
}
|
||||
}
|
||||
else if (Prescription.IsPotentialPrescriptionLine(line))
|
||||
{
|
||||
// The current line is a putative prescription line:
|
||||
// If we're not inside a block already, enter the
|
||||
// "fuzzy" state.
|
||||
// If we are inside a block, no special action is
|
||||
// needed, we can continue with the next paragraph.
|
||||
if (!insideBlock)
|
||||
{
|
||||
fuzzy = true;
|
||||
insideBlock = true;
|
||||
end = document.Paragraphs[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// The current line is not a prescription line:
|
||||
// If we are currently in a definitive block of prescriptions,
|
||||
// mark the line below the current line as the start of the block.
|
||||
// If we're in a putative block, discard the information
|
||||
// about the bottom end of the block and reset all flags.
|
||||
if (insideBlock)
|
||||
{
|
||||
if (!fuzzy)
|
||||
{
|
||||
start = document.Paragraphs[i + 1];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
fuzzy = false;
|
||||
insideBlock = false;
|
||||
end = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i--;
|
||||
}
|
||||
|
||||
if (end != null)
|
||||
{
|
||||
// If we don't have a start paragraph,
|
||||
// but do have an end paragraph, we set the start paragraph to the
|
||||
// first paragraph of the document.
|
||||
if (start == null)
|
||||
{
|
||||
start = document.Paragraphs[1];
|
||||
}
|
||||
document.Range(start.Range.Start, end.Range.End).Select();
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public List<Prescription> Prescriptions { get; protected set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public Importer() { }
|
||||
|
||||
public Importer(string text)
|
||||
: this()
|
||||
{
|
||||
Import(text);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
protected virtual void Import(string text)
|
||||
{
|
||||
List<Prescription> list = new List<Prescription>();
|
||||
IList<Prescription> addition;
|
||||
int columns = 1;
|
||||
string[] lines = Helpers.SplitParagraphs(text);
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (Prescription.IsPotentialPrescriptionLine(line))
|
||||
{
|
||||
addition = Prescription.ManyFromLine(line);
|
||||
columns = System.Math.Max(columns, addition.Count);
|
||||
list.AddRange(addition);
|
||||
}
|
||||
}
|
||||
|
||||
// If the input had several columns, sort the prescriptions by
|
||||
// column.
|
||||
// TODO: Make this more generic so it works with 3 or 4 columns as well.
|
||||
if (columns == 2)
|
||||
{
|
||||
var firstCol = list.Where((item, index) => index % 2 == 0);
|
||||
var secondCol = list.Where((item, index) => index % 2 != 0);
|
||||
Prescriptions = firstCol.Concat(secondCol).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
Prescriptions = list;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
273
zaaReloaded2/Medication/Prescription.cs
Executable file
@ -0,0 +1,273 @@
|
||||
/* Prescription.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace zaaReloaded2.Medication
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a prescription
|
||||
/// </summary>
|
||||
public class Prescription
|
||||
{
|
||||
#region Static methods
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether a line contains prescriptions.
|
||||
/// </summary>
|
||||
/// <param name="line">Line to inspect.</param>
|
||||
/// <returns>True if the line contains prescriptions.</returns>
|
||||
public static bool IsCanonicalPrescriptionLine(string line)
|
||||
{
|
||||
return canonicalRegex.IsMatch(line);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if a line contains prescriptions, either canonical
|
||||
/// ones or alternative ones (in the form "Ramipril 5 mg \t alle 2 Tage").
|
||||
/// </summary>
|
||||
/// <param name="line">Line to examine.</param>
|
||||
/// <returns>True if the line potentially contains prescriptions.</returns>
|
||||
public static bool IsPotentialPrescriptionLine(string line)
|
||||
{
|
||||
return unifiedRegex.IsMatch(line);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Factory
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new Prescription object by parsing a line (e.g.,
|
||||
/// from a physician's letter).
|
||||
/// </summary>
|
||||
/// <param name="line">Line to parse</param>
|
||||
/// <returns>Prescription created from the <paramref name="Line"/></returns>
|
||||
public static Prescription FromLine(string line)
|
||||
{
|
||||
// Replace any runs of whitespace with a single space
|
||||
// (from http://stackoverflow.com/a/206946/270712)
|
||||
// line = Regex.Replace(line, @"\s+", " ");
|
||||
Match m = unifiedRegex.Match(line);
|
||||
int n = m.Groups[DOSE_GROUP].Captures.Count;
|
||||
|
||||
return new Prescription(
|
||||
spaceRegex.Replace(m.Groups["drug"].Value, " "),
|
||||
n > 0 ? m.Groups[DOSE_GROUP].Captures[0].Value : String.Empty,
|
||||
n > 1 ? m.Groups[DOSE_GROUP].Captures[1].Value : String.Empty,
|
||||
n > 2 ? m.Groups[DOSE_GROUP].Captures[2].Value : String.Empty,
|
||||
n > 3 ? m.Groups[DOSE_GROUP].Captures[3].Value : String.Empty,
|
||||
m.Groups["comment"].Value
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Extracts several prescriptions from a given line.
|
||||
/// </summary>
|
||||
/// <param name="line">Line that contains several prescriptions.</param>
|
||||
/// <returns>Enumerable with <see cref="Prescription"/>s.</returns>
|
||||
public static IList<Prescription> ManyFromLine(string line)
|
||||
{
|
||||
// line = Regex.Replace(line, @"\s+", " ");
|
||||
MatchCollection mc = unifiedRegex.Matches(line);
|
||||
List<Prescription> list = new List<Prescription>();
|
||||
foreach (Match m in mc)
|
||||
{
|
||||
int n = m.Groups[DOSE_GROUP].Captures.Count;
|
||||
list.Add(new Prescription(
|
||||
spaceRegex.Replace(m.Groups["drug"].Value, " "),
|
||||
n > 0 ? m.Groups[DOSE_GROUP].Captures[0].Value : String.Empty,
|
||||
n > 1 ? m.Groups[DOSE_GROUP].Captures[1].Value : String.Empty,
|
||||
n > 2 ? m.Groups[DOSE_GROUP].Captures[2].Value : String.Empty,
|
||||
n > 3 ? m.Groups[DOSE_GROUP].Captures[3].Value : String.Empty,
|
||||
m.Groups["comment"].Value
|
||||
)
|
||||
);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string Drug { get; set; }
|
||||
|
||||
public string Morning { get; set; }
|
||||
|
||||
public string Noon { get; set; }
|
||||
|
||||
public string Evening { get; set; }
|
||||
|
||||
public string Night { get; set; }
|
||||
|
||||
public string Comment { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the drug is MMF or a derivative.
|
||||
/// </summary>
|
||||
public bool IsMmf
|
||||
{
|
||||
get
|
||||
{
|
||||
string d = Drug.ToLower();
|
||||
return
|
||||
d.StartsWith("mmf") ||
|
||||
d.StartsWith("cellcept") ||
|
||||
d.StartsWith("cell cept") ||
|
||||
d.StartsWith("myfortic") ||
|
||||
d.StartsWith("mycophenol");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string s = Drug + "\t";
|
||||
if (!String.IsNullOrEmpty(Morning))
|
||||
{
|
||||
s += Morning;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(String.IsNullOrEmpty(Noon) && String.IsNullOrEmpty(Evening) &&
|
||||
String.IsNullOrEmpty(Night)))
|
||||
{
|
||||
s += "0";
|
||||
}
|
||||
}
|
||||
if (!String.IsNullOrEmpty(Noon))
|
||||
{
|
||||
s += "-" + Noon;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(String.IsNullOrEmpty(Evening) && String.IsNullOrEmpty(Night)))
|
||||
{
|
||||
s += "-0";
|
||||
}
|
||||
}
|
||||
if (!String.IsNullOrEmpty(Evening))
|
||||
{
|
||||
s += "-" + Evening;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!String.IsNullOrEmpty(Night))
|
||||
{
|
||||
s += "-0";
|
||||
}
|
||||
}
|
||||
if (!String.IsNullOrEmpty(Night))
|
||||
{
|
||||
s += "-" + Night;
|
||||
}
|
||||
if (!String.IsNullOrEmpty(Comment))
|
||||
{
|
||||
if (!s.EndsWith("\t"))
|
||||
{
|
||||
s += " ";
|
||||
}
|
||||
s += Comment;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public Prescription() { }
|
||||
|
||||
public Prescription(string drug)
|
||||
: this()
|
||||
{
|
||||
Drug = drug.Trim();
|
||||
}
|
||||
|
||||
public Prescription(string drug, string morning, string noon,
|
||||
string evening, string night)
|
||||
: this(drug)
|
||||
{
|
||||
Morning = morning.Trim();
|
||||
Noon = noon.Trim();
|
||||
Evening = evening.Trim();
|
||||
Night = night.Trim();
|
||||
}
|
||||
|
||||
public Prescription(string drug, string morning, string noon,
|
||||
string evening, string night, string comment)
|
||||
: this(drug, morning, noon, evening, night)
|
||||
{
|
||||
Comment = comment.Trim();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private const string DOSE_GROUP = "dose";
|
||||
private const string DOSE = @"(\d\s+1/[234]|(\d\s?)?[\u00bd\u2153\u00bc]|\d+)";
|
||||
private const string SPACER = @"(\s*[-\u2012\u2013\u2014]+\s*)";
|
||||
|
||||
/// <summary>
|
||||
/// The 'canonical' regex matches a prescription the form "Ramipril 5 mg 1-0-0"
|
||||
/// with or without trailing comment.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Enclose entire regular expression in parentheses so we can use it
|
||||
/// with or without trailing comment.
|
||||
/// </remarks>
|
||||
private const string canonicalPattern =
|
||||
@"((?<drug>[^\t]+)\s+" +
|
||||
@"(?<dose>" + DOSE + @")" + SPACER +
|
||||
@"(?<dose>" + DOSE + @")" + SPACER +
|
||||
@"(?<dose>" + DOSE + @")" +
|
||||
@"(" + SPACER + @"(?<dose>" + DOSE + @"))?" +
|
||||
@"( +(?<comment>[^\t]+))?\s*)";
|
||||
private static readonly Regex canonicalRegex = new Regex(canonicalPattern);
|
||||
|
||||
/// <summary>
|
||||
/// The 'alternative' regex matches prescriptions that do not contain regular
|
||||
/// dosing intervals ("1-0-0"), but free-style comments: "Cotrim forte alle 2 Tage".
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Because this alternative pattern matches other lines as well (e.g. with
|
||||
/// signature names), it requires special handling.
|
||||
/// </remarks>
|
||||
private const string alternativePattern =
|
||||
@"((?<drug>[^\t]+)( +|\t+)(?<comment>[^\t]+))";
|
||||
private static readonly Regex alternativeRegex = new Regex(alternativePattern);
|
||||
|
||||
private static readonly Regex unifiedRegex = new Regex(
|
||||
"(" + canonicalPattern + "|" + alternativePattern + ")");
|
||||
|
||||
/// <summary>
|
||||
/// A 'cached', reusable regex to match several whitespace characters.
|
||||
/// </summary>
|
||||
private static readonly Regex spaceRegex = new Regex(@"\s+");
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
73
zaaReloaded2/Preferences.cs
Executable file
@ -0,0 +1,73 @@
|
||||
/* Preferences.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace zaaReloaded2
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds user preferences.
|
||||
/// </summary>
|
||||
public class Preferences
|
||||
{
|
||||
#region Singleton
|
||||
|
||||
public static Preferences Default
|
||||
{
|
||||
get
|
||||
{
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
static readonly Preferences _instance = new Preferences();
|
||||
|
||||
static Preferences() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets whether the add-in should not ask for
|
||||
/// item comments (i.e. typist mode).
|
||||
/// </summary>
|
||||
public bool SuppressItemCommentInteraction
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.SuppressItemCommentInteraction;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.SuppressItemCommentInteraction = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
protected Preferences() { }
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
63
zaaReloaded2/Properties/Settings.Designer.cs
generated
@ -222,5 +222,68 @@ namespace zaaReloaded2.Properties {
|
||||
return ((global::zaaReloaded2.Formatter.AbnormalStyle)(this["AbnormalStyle"]));
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool SuppressItemCommentInteraction {
|
||||
get {
|
||||
return ((bool)(this["SuppressItemCommentInteraction"]));
|
||||
}
|
||||
set {
|
||||
this["SuppressItemCommentInteraction"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool FirstRunWizardShown {
|
||||
get {
|
||||
return ((bool)(this["FirstRunWizardShown"]));
|
||||
}
|
||||
set {
|
||||
this["FirstRunWizardShown"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("BITTE_ERGÄNZEN")]
|
||||
public string ManualCommentPrompt {
|
||||
get {
|
||||
return ((string)(this["ManualCommentPrompt"]));
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("http://git.bovender.de")]
|
||||
public string Repository {
|
||||
get {
|
||||
return ((string)(this["Repository"]));
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool NeedUpgrade {
|
||||
get {
|
||||
return ((bool)(this["NeedUpgrade"]));
|
||||
}
|
||||
set {
|
||||
this["NeedUpgrade"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("zaaReloaded2-Medikamente")]
|
||||
public string DrugsParagraph {
|
||||
get {
|
||||
return ((string)(this["DrugsParagraph"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -65,5 +65,23 @@
|
||||
<Setting Name="AbnormalStyle" Type="zaaReloaded2.Formatter.AbnormalStyle" Scope="Application">
|
||||
<Value Profile="(Default)">None</Value>
|
||||
</Setting>
|
||||
<Setting Name="SuppressItemCommentInteraction" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="FirstRunWizardShown" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ManualCommentPrompt" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">BITTE_ERGÄNZEN</Value>
|
||||
</Setting>
|
||||
<Setting Name="Repository" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">http://git.bovender.de</Value>
|
||||
</Setting>
|
||||
<Setting Name="NeedUpgrade" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="DrugsParagraph" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">zaaReloaded2-Medikamente</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
@ -23,13 +23,6 @@ using System.Windows;
|
||||
using System.Drawing;
|
||||
using System.Windows.Resources;
|
||||
using Office = Microsoft.Office.Core;
|
||||
using zaaReloaded2.Views;
|
||||
using zaaReloaded2.ViewModels;
|
||||
using zaaReloaded2.Importer.ZaaImporter;
|
||||
using zaaReloaded2.Formatter;
|
||||
using zaaReloaded2.Controller;
|
||||
using Word = Microsoft.Office.Interop.Word;
|
||||
using Bovender.Mvvm.Actions;
|
||||
|
||||
// TODO: Follow these steps to enable the Ribbon (XML) item:
|
||||
|
||||
@ -94,23 +87,29 @@ namespace zaaReloaded2
|
||||
{
|
||||
switch (control.Id)
|
||||
{
|
||||
case "zrlFormat":
|
||||
DoFormat();
|
||||
case "zrlFormatLab":
|
||||
Commands.Format();
|
||||
break;
|
||||
case "zrlSettings":
|
||||
DoChooseSettings();
|
||||
Commands.ChooseSettings();
|
||||
break;
|
||||
case "zrlAbout":
|
||||
ViewModels.AboutViewModel vm = new ViewModels.AboutViewModel();
|
||||
vm.InjectInto<Views.AboutView>().ShowDialog();
|
||||
Commands.ShowAbout();
|
||||
break;
|
||||
case "zrlPreferences":
|
||||
Commands.ShowPreferences();
|
||||
break;
|
||||
case "zrlDaniel":
|
||||
Formatter.DanielsStyle.Apply(
|
||||
Globals.ThisAddIn.Application.ActiveDocument,
|
||||
Globals.ThisAddIn.Application.Selection);
|
||||
Commands.ApplyDanielsStyle();
|
||||
break;
|
||||
case "zrlDemo":
|
||||
DoLoadDemo();
|
||||
Commands.LoadDemo();
|
||||
break;
|
||||
case "zrlFormatDrugsOneCol":
|
||||
Commands.FormatDrugs(1);
|
||||
break;
|
||||
case "zrlFormatDrugsTwoCol":
|
||||
Commands.FormatDrugs(2);
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException("No operation defined for " + control.Id);
|
||||
@ -152,130 +151,37 @@ namespace zaaReloaded2
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if there is at least one paragraph selected.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The Selection object in Word is a bit tricky: Its Length property
|
||||
/// is never 0, because even if no text passage is selected, the character
|
||||
/// after the cursor is the content of the Selection.
|
||||
/// </remarks>
|
||||
public bool CanFormat(Office.IRibbonControl control)
|
||||
{
|
||||
Word.Selection s = Globals.ThisAddIn.Application.ActiveWindow.Selection;
|
||||
return s.Paragraphs.Count > 1 ||
|
||||
(s.Text.Length > 1 && s.Text.EndsWith("\r"));
|
||||
return Commands.CanFormat();
|
||||
}
|
||||
|
||||
public bool CanFormatDrugs(Office.IRibbonControl control)
|
||||
{
|
||||
return Commands.CanFormat();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
|
||||
/// <summary>
|
||||
/// Activates the add-in's tab.
|
||||
/// </summary>
|
||||
public void ActivateZaaTab()
|
||||
{
|
||||
_ribbon.ActivateTab("zaaReloaded2");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
void DoFormat()
|
||||
{
|
||||
if (CanFormat(null))
|
||||
{
|
||||
SettingsRepository repository = SettingsRepository.Load();
|
||||
Guid lastSettingsUid = Properties.Settings.Default.LastSettings;
|
||||
Settings lastSettings = repository.FindByGuid(lastSettingsUid);
|
||||
if (lastSettings != null)
|
||||
{
|
||||
DoFormat(lastSettings);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoChooseSettings();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DoFormat(Settings settings)
|
||||
{
|
||||
ZaaImporter importer = new ZaaImporter();
|
||||
importer.Import(Globals.ThisAddIn.Application.ActiveWindow.Selection.Text);
|
||||
Formatter.Formatter formatter = new Formatter.Formatter(
|
||||
Globals.ThisAddIn.Application.ActiveDocument);
|
||||
formatter.Settings = settings;
|
||||
formatter.Laboratory = importer.Laboratory;
|
||||
try
|
||||
{
|
||||
formatter.Run();
|
||||
}
|
||||
catch (NoLaboratoryDataException)
|
||||
{
|
||||
NotificationAction a = new NotificationAction();
|
||||
a.Caption = "Formatieren nicht möglich";
|
||||
a.Message = "Die aktuelle Markierung scheint keine Labordaten zu enthalten.";
|
||||
a.OkButtonLabel = "Schließen";
|
||||
a.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
void DoChooseSettings()
|
||||
{
|
||||
SettingsRepository repository = SettingsRepository.Load();
|
||||
SettingsRepositoryViewModel vm = new SettingsRepositoryViewModel(repository);
|
||||
vm.UseSettingsMessage.Sent += (sender, args) =>
|
||||
{
|
||||
SettingsViewModel settingsVM = args.Content.ViewModel as SettingsViewModel;
|
||||
Settings settings = settingsVM.RevealModelObject() as Settings;
|
||||
DoFormat(settings);
|
||||
Properties.Settings.Default.LastSettings = settings.Uid;
|
||||
Properties.Settings.Default.Save();
|
||||
};
|
||||
vm.InjectInto<SettingsRepositoryView>().ShowDialog();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the embedded demo document.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If Word is running in an embedded environment (e.g. in the ZAA),
|
||||
/// adding a document causes a COMException. Unfortunately, it is
|
||||
/// not trivial to test if Word is running embedded, so we use a
|
||||
/// try...catch structure and catch all COMExceptions. The error
|
||||
/// message might be not quite right if the exception was caused by
|
||||
/// a different problem.
|
||||
/// See http://davecra.com/2013/04/10/how-to-determine-if-an-excel-workbook-is-embedded-and-more
|
||||
/// </remarks>
|
||||
void DoLoadDemo()
|
||||
{
|
||||
try
|
||||
{
|
||||
Demo.Demo.OpenDemoDocument();
|
||||
}
|
||||
catch (System.Runtime.InteropServices.COMException e)
|
||||
{
|
||||
// HRESULT comparison according to http://stackoverflow.com/a/1426198/270712
|
||||
// Fix for exception ID 65a5c34e
|
||||
if (e.ErrorCode == unchecked((int)0x800A11FD))
|
||||
{
|
||||
NotificationAction a = new NotificationAction();
|
||||
a.Caption = "Kann Demo-Dokument nicht laden";
|
||||
a.Message = "Das Demo-Dokument kann nicht geladen werden, "
|
||||
+ "wenn Word in der Zentralen Arztbriefablage ausgeführt wird.\r"
|
||||
+ "Bitte Word als eigenständige Anwendung starten und dann "
|
||||
+ "noch einmal versuchen.";
|
||||
a.OkButtonLabel = "Schließen";
|
||||
a.Invoke();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void Application_WindowSelectionChange(Microsoft.Office.Interop.Word.Selection Sel)
|
||||
private void Application_WindowSelectionChange(Microsoft.Office.Interop.Word.Selection Sel)
|
||||
{
|
||||
_ribbon.Invalidate();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Helpers
|
||||
|
||||
private static string GetResourceText(string resourceName)
|
||||
{
|
||||
Assembly asm = Assembly.GetExecutingAssembly();
|
||||
|
@ -23,12 +23,22 @@
|
||||
<ribbon>
|
||||
<tabs>
|
||||
<tab id="zaaReloaded2" label="zaaReloaded2">
|
||||
<group id="zrlFormatGroup" label="Formatieren">
|
||||
<button id="zrlFormat" label="Formatieren" image="f.png" onAction="Ribbon_Click" size="large"
|
||||
<group id="zrlGroupLab" label="Laborwerte">
|
||||
<button id="zrlFormatLab" label="Formatieren" image="f.png" onAction="Ribbon_Click" size="large"
|
||||
supertip="Formatiert den ausgewählten Bereich mit dem zuletzt verwendeten Stil."
|
||||
getEnabled="CanFormat" />
|
||||
<button id="zrlSettings" label="Stilauswahl" image="fff.png" onAction="Ribbon_Click" size="large"
|
||||
supertip="Zeigt eine Liste vorhandener Stile an. Stile können bearbeitet, hinzugefügt, gelöscht werden." />
|
||||
</group>
|
||||
<group id="zrlGroupDrugs" label="Medikamente">
|
||||
<button id="zrlFormatDrugsOneCol" label="Einspaltig" image="m.png" onAction="Ribbon_Click" size="large"
|
||||
supertip="Formatiert die Medikationsliste einspaltig"
|
||||
getEnabled="CanFormatDrugs" />
|
||||
<button id="zrlFormatDrugsTwoCol" label="Zweispaltig" image="mm.png" onAction="Ribbon_Click" size="large"
|
||||
supertip="Formatiert die Medikationsliste zweispaltig"
|
||||
getEnabled="CanFormatDrugs" />
|
||||
</group>
|
||||
<group id="zrlSpecial" label="Spezial">
|
||||
<button id="zrlDaniel" label="Daniels Spezial" image="dk.png" onAction="Ribbon_Click" size="large"
|
||||
getVisible="Daniel_GetVisible"/>
|
||||
</group>
|
||||
@ -36,6 +46,9 @@
|
||||
<button id="zrlDemo" label="Demo" image="d.png" onAction="Ribbon_Click" size="large"
|
||||
screentip="Demo-Dokument öffnen"
|
||||
supertip="Öffnet ein eingebautes Demo-Dokument, das zum Ausprobieren verwendet werden kann." />
|
||||
<button id="zrlPreferences" label="Einstellungen" image="gear.png" onAction="Ribbon_Click" size="large"
|
||||
screentip="Benutzer-Einstellungen"
|
||||
supertip="Erlaubt das Einschalten des Sekretariats-Modus." />
|
||||
<button id="zrlAbout" label="Über..." image="i.png" onAction="Ribbon_Click" size="large"
|
||||
screentip="Über zaaReloaded"
|
||||
supertip="Zeigt Informationen über das Add-in an." />
|
||||
|
@ -16,17 +16,14 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Xml.Linq;
|
||||
using System.IO;
|
||||
using Word = Microsoft.Office.Interop.Word;
|
||||
using Office = Microsoft.Office.Core;
|
||||
using Microsoft.Office.Tools.Word;
|
||||
using Bovender.Versioning;
|
||||
using Bovender.Mvvm.Messaging;
|
||||
using zaaReloaded2.ExceptionHandler;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace zaaReloaded2
|
||||
{
|
||||
@ -48,6 +45,15 @@ namespace zaaReloaded2
|
||||
private void ThisAddIn_Startup(object sender, System.EventArgs e)
|
||||
{
|
||||
Bovender.ExceptionHandler.CentralHandler.ManageExceptionCallback += CentralHandler_ManageExceptionCallback;
|
||||
Bovender.WpfHelpers.RegisterTextBoxSelectAll();
|
||||
|
||||
if (Properties.Settings.Default.NeedUpgrade)
|
||||
{
|
||||
Properties.Settings.Default.Upgrade();
|
||||
Properties.Settings.Default.NeedUpgrade = false;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
|
||||
CheckForUpdates();
|
||||
_oldCaption = Globals.ThisAddIn.Application.Caption;
|
||||
Globals.ThisAddIn.Application.Caption =
|
||||
@ -57,6 +63,7 @@ namespace zaaReloaded2
|
||||
Properties.Settings.Default.AddinName,
|
||||
Updater.Version.CurrentVersion().ToString()
|
||||
);
|
||||
ViewModels.FirstRunViewModel.InjectIntoIfNeeded<Views.FirstRunView>();
|
||||
}
|
||||
|
||||
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
|
||||
|
@ -1,2 +1,2 @@
|
||||
2.0.1
|
||||
2.0.0.12
|
||||
2.2.1
|
||||
2.2.1.0
|
||||
|
@ -79,6 +79,14 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public string Repository
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.Repository.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public string LicenseUrl
|
||||
{
|
||||
get
|
||||
@ -104,6 +112,19 @@ namespace zaaReloaded2.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public DelegatingCommand GotoRepositoryCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_gotoRepositoryCommand == null)
|
||||
{
|
||||
_gotoRepositoryCommand = new DelegatingCommand(
|
||||
param => { Process.Start(new ProcessStartInfo(Repository)); });
|
||||
}
|
||||
return _gotoRepositoryCommand;
|
||||
}
|
||||
}
|
||||
|
||||
public DelegatingCommand GotoLicenseCommand
|
||||
{
|
||||
get
|
||||
@ -131,6 +152,7 @@ namespace zaaReloaded2.ViewModels
|
||||
#region Fields
|
||||
|
||||
DelegatingCommand _gotoHomepageCommand;
|
||||
DelegatingCommand _gotoRepositoryCommand;
|
||||
DelegatingCommand _gotoLicenseCommand;
|
||||
|
||||
#endregion
|
||||
|
140
zaaReloaded2/ViewModels/FirstRunViewModel.cs
Executable file
@ -0,0 +1,140 @@
|
||||
/* FirstRunViewModel.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Bovender.Mvvm;
|
||||
using Bovender.Mvvm.ViewModels;
|
||||
|
||||
namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for the first-run wizard
|
||||
/// </summary>
|
||||
class FirstRunViewModel : ViewModelBase
|
||||
{
|
||||
#region Static method
|
||||
|
||||
/// <summary>
|
||||
/// If the first-run wizard hasn't been shown to this user
|
||||
/// yet, creates a new instance of FirstRunViewModel,
|
||||
/// injects it into the view T and shows the view.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Window to inject the view model into.</typeparam>
|
||||
public static void InjectIntoIfNeeded<T>()
|
||||
where T: System.Windows.Window, new()
|
||||
{
|
||||
if (!Properties.Settings.Default.FirstRunWizardShown)
|
||||
{
|
||||
FirstRunViewModel vm = new FirstRunViewModel();
|
||||
vm.InjectInto<T>().Show();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Commands
|
||||
|
||||
public DelegatingCommand SelectDoctorsModeCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_selectDoctorsModeCommand == null)
|
||||
{
|
||||
_selectDoctorsModeCommand = new DelegatingCommand(
|
||||
param => DoSelectDoctorsMode());
|
||||
}
|
||||
return _selectDoctorsModeCommand;
|
||||
}
|
||||
}
|
||||
|
||||
public DelegatingCommand SelectTypistsModeCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_selectTypistsModeCommand == null)
|
||||
{
|
||||
_selectTypistsModeCommand = new DelegatingCommand(
|
||||
param => DoSelectTypistsMode());
|
||||
}
|
||||
return _selectTypistsModeCommand;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
/// <summary>
|
||||
/// Private constructor to enforce using the static
|
||||
/// </summary>
|
||||
private FirstRunViewModel() : base() { }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
void DoSelectDoctorsMode()
|
||||
{
|
||||
// Properties will be saved by the DoCloseView override.
|
||||
Properties.Settings.Default.SuppressItemCommentInteraction = false;
|
||||
CloseViewCommand.Execute(null);
|
||||
}
|
||||
|
||||
void DoSelectTypistsMode()
|
||||
{
|
||||
// Properties will be saved by the DoCloseView override.
|
||||
Properties.Settings.Default.SuppressItemCommentInteraction = true;
|
||||
CloseViewCommand.Execute(null);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Overrides
|
||||
|
||||
/// <summary>
|
||||
/// Sets the FirstRunWizardShown property of the assembly properties
|
||||
/// to true and calls the base function to close the associated view.
|
||||
/// </summary>
|
||||
protected override void DoCloseView()
|
||||
{
|
||||
Properties.Settings.Default.FirstRunWizardShown = true;
|
||||
Properties.Settings.Default.Save();
|
||||
base.DoCloseView();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Implementation of ViewModelBase
|
||||
|
||||
public override object RevealModelObject()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
DelegatingCommand _selectDoctorsModeCommand;
|
||||
DelegatingCommand _selectTypistsModeCommand;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
113
zaaReloaded2/ViewModels/ItemCommentViewModel.cs
Executable file
@ -0,0 +1,113 @@
|
||||
/* ItemCommentViewModel.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Bovender.Mvvm;
|
||||
using Bovender.Mvvm.ViewModels;
|
||||
using Bovender.Mvvm.Messaging;
|
||||
using zaaReloaded2.Controller.Comments;
|
||||
|
||||
namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for zaaReloaded2.Controller.Comments.ItemComment.
|
||||
/// </summary>
|
||||
public class ItemCommentViewModel : ViewModelBase
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public string Item { get { return _itemComment.Item; } }
|
||||
|
||||
public string Prefix { get { return _itemComment.Prefix; } }
|
||||
|
||||
public string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _value;
|
||||
}
|
||||
set
|
||||
{
|
||||
_value = value;
|
||||
OnPropertyChanged("Value");
|
||||
}
|
||||
}
|
||||
|
||||
public string Suffix { get { return _itemComment.Suffix; } }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Commands
|
||||
|
||||
public DelegatingCommand SaveCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_saveCommand == null)
|
||||
{
|
||||
_saveCommand = new DelegatingCommand(
|
||||
param => DoSave());
|
||||
}
|
||||
return _saveCommand;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public ItemCommentViewModel(ItemComment itemComment)
|
||||
{
|
||||
_itemComment = itemComment;
|
||||
_value = _itemComment.Value;
|
||||
_itemComment.IsCancelled = true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Implementation of ViewModelBase
|
||||
|
||||
public override object RevealModelObject()
|
||||
{
|
||||
return _itemComment;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
void DoSave()
|
||||
{
|
||||
_itemComment.Value = Value;
|
||||
_itemComment.IsCancelled = false;
|
||||
DoCloseView();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
string _value;
|
||||
DelegatingCommand _saveCommand;
|
||||
ItemComment _itemComment;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
111
zaaReloaded2/ViewModels/PreferencesViewModel.cs
Executable file
@ -0,0 +1,111 @@
|
||||
/* PreferencesViewModel.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Bovender.Mvvm;
|
||||
using Bovender.Mvvm.ViewModels;
|
||||
|
||||
namespace zaaReloaded2.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// View model for zaaReloaded2.Preferences.
|
||||
/// </summary>
|
||||
public class PreferencesViewModel : ViewModelBase
|
||||
{
|
||||
#region Singleton
|
||||
|
||||
public static PreferencesViewModel Default
|
||||
{
|
||||
get
|
||||
{
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
static PreferencesViewModel() { }
|
||||
|
||||
static readonly PreferencesViewModel _instance = new PreferencesViewModel();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public bool SuppressItemCommentInteraction { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Command
|
||||
|
||||
public DelegatingCommand SaveCommand
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_saveCommand == null)
|
||||
{
|
||||
_saveCommand = new DelegatingCommand(
|
||||
param => DoSave(),
|
||||
param => CanSave());
|
||||
}
|
||||
return _saveCommand;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public PreferencesViewModel()
|
||||
{
|
||||
SuppressItemCommentInteraction = Preferences.Default.SuppressItemCommentInteraction;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private methods
|
||||
|
||||
void DoSave()
|
||||
{
|
||||
Preferences.Default.SuppressItemCommentInteraction = SuppressItemCommentInteraction;
|
||||
DoCloseView();
|
||||
}
|
||||
|
||||
bool CanSave()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Field
|
||||
|
||||
DelegatingCommand _saveCommand;
|
||||
|
||||
#endregion
|
||||
|
||||
#region ViewModelBase implementation
|
||||
|
||||
public override object RevealModelObject()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -319,12 +319,7 @@ namespace zaaReloaded2.ViewModels
|
||||
|
||||
bool CanUseSettings()
|
||||
{
|
||||
Selection selection = Globals.ThisAddIn.Application.ActiveWindow.Selection;
|
||||
return LastSelected != null && LastSelected.IsSelected &&
|
||||
(
|
||||
selection.Paragraphs.Count > 1
|
||||
|| (selection.Text.Length > 1 && selection.Text.EndsWith("\r"))
|
||||
);
|
||||
return Commands.CanFormat();
|
||||
}
|
||||
|
||||
void DoAddSettings()
|
||||
|
@ -20,17 +20,20 @@
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
||||
Width="360" Height="320" ResizeMode="NoResize" ShowInTaskbar="False"
|
||||
Width="360" SizeToContent="Height" ResizeMode="NoResize" ShowInTaskbar="False"
|
||||
b:WindowState.CenterScreen="True"
|
||||
Title="Über..."
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<StackPanel Margin="20">
|
||||
<Image Source="/zaaReloaded2;component/Icons/icon.png" Width="64" VerticalAlignment="Center" Margin="0 0 0 10" />
|
||||
<TextBlock TextAlignment="Center" Text="{Binding AddinName}" FontSize="20" FontWeight="Bold" />
|
||||
<TextBlock TextAlignment="Center" Text="{Binding Version}" Margin="0, 5, 0, 10" />
|
||||
<TextBlock TextAlignment="Center" Margin="0, 5, 0, 10" FontWeight="Bold">
|
||||
Version
|
||||
<TextBlock Text="{Binding Version}" />
|
||||
</TextBlock>
|
||||
<TextBlock TextAlignment="Center" Text="{Binding CopyrightString}" Margin="0, 0, 0, 10" />
|
||||
<TextBlock TextAlignment="Center" Margin="0, 10, 0, 10">
|
||||
Homepage:
|
||||
@ -38,6 +41,11 @@
|
||||
<TextBlock Text="zaa.nephrowiki.de" />
|
||||
</Hyperlink>
|
||||
<LineBreak />
|
||||
Quellcode:
|
||||
<Hyperlink Command="{Binding GotoRepositoryCommand}">
|
||||
<TextBlock Text="git.bovender.de" />
|
||||
</Hyperlink>
|
||||
<LineBreak />
|
||||
Lizenz:
|
||||
<Hyperlink Command="{Binding GotoLicenseCommand}">
|
||||
<TextBlock Text="Apache 2.0" />
|
||||
|
@ -28,7 +28,7 @@
|
||||
FocusManager.FocusedElement="{Binding ElementName=treeview}"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<DockPanel Margin="10">
|
||||
<Label DockPanel.Dock="Top" Content="Verfügbare Elemente:" Target="{Binding ElementName=ElementsTreeView}" />
|
||||
|
@ -29,7 +29,7 @@
|
||||
FocusManager.FocusedElement="{Binding ElementName=ContentTextBox}"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<DockPanel Margin="10">
|
||||
<Label DockPanel.Dock="Top" Content="Inhalt:" Target="{Binding ElementName=ContentTextBox}" />
|
||||
|
61
zaaReloaded2/Views/FirstRunView.xaml
Executable file
@ -0,0 +1,61 @@
|
||||
<!--
|
||||
FirstRunView.xaml
|
||||
part of zaaReloaded2
|
||||
|
||||
Copyright 2015 Daniel Kraus
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<Window x:Class="zaaReloaded2.Views.FirstRunView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
||||
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
|
||||
xmlns:action="clr-namespace:Bovender.Mvvm.Actions;assembly=Bovender"
|
||||
ResizeMode="NoResize" ShowInTaskbar="False" Topmost="True"
|
||||
SizeToContent="Height" Width="480"
|
||||
b:WindowState.CenterScreen="True"
|
||||
Title="Willkommen bei zaaReloaded"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<StackPanel Margin="10">
|
||||
<TextBlock FontWeight="Bold" FontSize="20" Margin="0 0 0 5">
|
||||
Willkommen bei zaaReloaded
|
||||
</TextBlock>
|
||||
<Rectangle Fill="Navy" Height="1.5" HorizontalAlignment="Stretch" />
|
||||
<TextBlock Margin="0 10 0 0">
|
||||
Bitte den Arbeitsmodus auswählen:
|
||||
</TextBlock>
|
||||
<DockPanel Margin="0 10 0 5">
|
||||
<Button Height="40" DockPanel.Dock="Left" Command="{Binding SelectDoctorsModeCommand}" Content="Ärztemodus"
|
||||
Width="160" Margin="0 0 10 0" VerticalAlignment="Center" />
|
||||
<TextBlock TextWrapping="Wrap" VerticalAlignment="Center">
|
||||
Im Ärztemodus werden beim Formatieren bei Bedarf Zusatzinformationen zu Laborparametern
|
||||
abgefragt (z.B. Medikamenten-Zielspiegel).
|
||||
</TextBlock>
|
||||
</DockPanel>
|
||||
<DockPanel Margin="0 5 0 10">
|
||||
<Button Height="40" DockPanel.Dock="Left" Command="{Binding SelectTypistsModeCommand}" Content="Sekretariatsmodus"
|
||||
Width="160" Margin="0 0 10 0" VerticalAlignment="Center" />
|
||||
<TextBlock TextWrapping="Wrap" VerticalAlignment="Center">
|
||||
Im Sekretariatsmodus werden beim Formatieren grundsätzlich keine Zusatzinformationen abgefragt.
|
||||
</TextBlock>
|
||||
</DockPanel>
|
||||
<TextBlock TextWrapping="Wrap" Foreground="Gray">
|
||||
Die Einstellungen können jederzeit unter "Einstellungen" wieder geändert werden.
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
</Window>
|
33
zaaReloaded2/Views/FirstRunView.xaml.cs
Executable file
@ -0,0 +1,33 @@
|
||||
/* FirstRunView.xaml.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
using System.Windows;
|
||||
|
||||
namespace zaaReloaded2.Views
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for FirstRunView.xaml
|
||||
/// </summary>
|
||||
public partial class FirstRunView : Window
|
||||
{
|
||||
public FirstRunView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
@ -28,7 +28,7 @@
|
||||
Title="Import/Export-Fehler"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<DockPanel Margin="10">
|
||||
<TextBlock DockPanel.Dock="Left" Margin="0 0 20 0" LineHeight="72" LineStackingStrategy="BlockLineHeight"
|
||||
|
48
zaaReloaded2/Views/ItemCommentView.xaml
Executable file
@ -0,0 +1,48 @@
|
||||
<!--
|
||||
ItemCommentView.xaml
|
||||
part of zaaReloaded2
|
||||
|
||||
Copyright 2015 Daniel Kraus
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<Window x:Class="zaaReloaded2.Views.ItemCommentView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
||||
ResizeMode="CanResizeWithGrip" ShowInTaskbar="False"
|
||||
WindowStyle="ToolWindow" Topmost="True"
|
||||
SizeToContent="WidthAndHeight" MaxWidth="500"
|
||||
b:WindowState.CenterScreen="True" b:WindowState.Save="True"
|
||||
Title="Kommentar angeben"
|
||||
FocusManager.FocusedElement="{Binding ElementName=ValueTextBox}"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<DockPanel Margin="10">
|
||||
<Label DockPanel.Dock="Top" Content="{Binding Item}"
|
||||
FontSize="16" FontWeight="Bold" Margin="0 0 0 10"
|
||||
Target="{Binding ElementName=ValueTextBox}" Padding="0" />
|
||||
<UniformGrid DockPanel.Dock="Bottom" HorizontalAlignment="Right" Columns="2" Rows="1" Margin="0 15 0 0">
|
||||
<Button Content="OK" Command="{Binding SaveCommand}" IsDefault="True" Margin="0 0 5 0" />
|
||||
<Button Content="Abbrechen" Command="{Binding CloseViewCommand}" IsCancel="True" Margin="5 0 0 0" />
|
||||
</UniformGrid>
|
||||
<TextBlock DockPanel.Dock="Left" Text="{Binding Prefix}" VerticalAlignment="Center" />
|
||||
<TextBlock DockPanel.Dock="Right" Text="{Binding Suffix}" VerticalAlignment="Center" />
|
||||
<TextBox Text="{Binding Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
|
||||
MinWidth="120" MaxWidth="240" VerticalAlignment="Center"
|
||||
x:Name="ValueTextBox" Margin="5 0 5 0" />
|
||||
</DockPanel>
|
||||
</Window>
|
33
zaaReloaded2/Views/ItemCommentView.xaml.cs
Executable file
@ -0,0 +1,33 @@
|
||||
/* ItemCommentView.xaml.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
using System.Windows;
|
||||
|
||||
namespace zaaReloaded2.Views
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for ItemCommentView.xaml
|
||||
/// </summary>
|
||||
public partial class ItemCommentView : Window
|
||||
{
|
||||
public ItemCommentView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
44
zaaReloaded2/Views/PreferencesView.xaml
Executable file
@ -0,0 +1,44 @@
|
||||
<!--
|
||||
PreferencesView.xaml
|
||||
part of zaaReloaded2
|
||||
|
||||
Copyright 2015 Daniel Kraus
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<Window x:Class="zaaReloaded2.Views.PreferencesView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
||||
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
|
||||
xmlns:action="clr-namespace:Bovender.Mvvm.Actions;assembly=Bovender"
|
||||
SizeToContent="WidthAndHeight" ResizeMode="NoResize" ShowInTaskbar="False"
|
||||
b:WindowState.CenterScreen="True" b:WindowState.Save="True"
|
||||
Title="Einstellungen"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<DockPanel Margin="10">
|
||||
<UniformGrid DockPanel.Dock="Bottom" Columns="2" Rows="1"
|
||||
HorizontalAlignment="Right" Margin="0 10 0 0">
|
||||
<Button Command="{Binding SaveCommand}" Content="OK" IsDefault="True" Margin="0 0 5 0" />
|
||||
<Button Command="{Binding CloseViewCommand}" Content="Abbrechen" IsCancel="True" Margin="5 0 0 0" />
|
||||
</UniformGrid>
|
||||
<GroupBox Header="Sekretariatsmodus" Padding="10">
|
||||
<CheckBox IsChecked="{Binding SuppressItemCommentInteraction}" Content="Keine Interaktion für _Kommentare">
|
||||
</CheckBox>
|
||||
</GroupBox>
|
||||
</DockPanel>
|
||||
</Window>
|
33
zaaReloaded2/Views/PreferencesView.xaml.cs
Executable file
@ -0,0 +1,33 @@
|
||||
/* PreferencesView.xaml.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
using System.Windows;
|
||||
|
||||
namespace zaaReloaded2.Views
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for PreferencesView.xaml
|
||||
/// </summary>
|
||||
public partial class PreferencesView : Window
|
||||
{
|
||||
public PreferencesView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
@ -31,7 +31,7 @@
|
||||
FocusManager.FocusedElement="{Binding ElementName=settingsList}"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger SourceObject="{Binding EditSettingsMessage}" EventName="Sent">
|
||||
|
@ -31,7 +31,7 @@
|
||||
FocusManager.FocusedElement="{Binding ElementName=NameTextBox}"
|
||||
>
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
||||
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||
</Window.Resources>
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger SourceObject="{Binding AddElementMessage}" EventName="Sent">
|
||||
|
@ -80,6 +80,15 @@
|
||||
<setting name="AbnormalStyle" serializeAs="String">
|
||||
<value>None</value>
|
||||
</setting>
|
||||
<setting name="ManualCommentPrompt" serializeAs="String">
|
||||
<value>BITTE_ERGÄNZEN</value>
|
||||
</setting>
|
||||
<setting name="Repository" serializeAs="String">
|
||||
<value>http://git.bovender.de</value>
|
||||
</setting>
|
||||
<setting name="DrugsParagraph" serializeAs="String">
|
||||
<value>zaaReloaded2-Medikamente</value>
|
||||
</setting>
|
||||
</zaaReloaded2.Properties.Settings>
|
||||
</applicationSettings>
|
||||
<userSettings>
|
||||
@ -96,6 +105,15 @@
|
||||
<setting name="ImportExportPath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="SuppressItemCommentInteraction" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="FirstRunWizardShown" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="NeedUpgrade" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
</zaaReloaded2.Properties.Settings>
|
||||
</userSettings>
|
||||
</configuration>
|
@ -19,6 +19,6 @@
|
||||
limitations under the License.
|
||||
-->
|
||||
<packages>
|
||||
<package id="Bovender" version="0.2.0.0" targetFramework="net40" />
|
||||
<package id="Bovender" version="0.5.0.0" targetFramework="net40" />
|
||||
<package id="Expression.Blend.Sdk" version="1.0.2" targetFramework="net40" />
|
||||
</packages>
|
@ -29,6 +29,7 @@
|
||||
<AssemblyName>zaaReloaded2</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<DefineConstants>VSTO40</DefineConstants>
|
||||
<IsWebBootstrapper>False</IsWebBootstrapper>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<InstallUrl />
|
||||
@ -38,7 +39,6 @@
|
||||
<UpdateEnabled>true</UpdateEnabled>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>days</UpdateIntervalUnits>
|
||||
<IsWebBootstrapper>False</IsWebBootstrapper>
|
||||
<ProductName>zaaReloaded2</ProductName>
|
||||
<PublisherName />
|
||||
<SupportUrl />
|
||||
@ -134,8 +134,9 @@
|
||||
-->
|
||||
<ItemGroup>
|
||||
<Reference Include="Accessibility" />
|
||||
<Reference Include="Bovender">
|
||||
<HintPath>..\packages\Bovender.0.2.0.0\lib\net40\Bovender.dll</HintPath>
|
||||
<Reference Include="Bovender, Version=0.5.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Bovender.0.5.0.0\lib\net40\Bovender.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Expression.Interactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
||||
<Reference Include="PresentationCore" />
|
||||
@ -192,9 +193,15 @@
|
||||
can be found.
|
||||
-->
|
||||
<ItemGroup>
|
||||
<Compile Include="Commands.cs" />
|
||||
<Compile Include="Helpers.cs" />
|
||||
<Compile Include="Importer\ZaaImporter\AutoDetect.cs" />
|
||||
<Compile Include="Controller\Comments\CommentPool.cs" />
|
||||
<Compile Include="Controller\Elements\ControlElementBase.cs" />
|
||||
<Compile Include="Controller\Elements\FormatElementBase.cs" />
|
||||
<Compile Include="Controller\Elements\NextColumn.cs" />
|
||||
<Compile Include="Controller\Comments\ItemComment.cs" />
|
||||
<Compile Include="Controller\Comments\ItemCommentEventArgs.cs" />
|
||||
<Compile Include="Controller\Elements\SelectEachDay.cs" />
|
||||
<Compile Include="Controller\Elements\SelectLastDay.cs" />
|
||||
<Compile Include="Controller\Elements\SelectFirstDay.cs" />
|
||||
@ -215,6 +222,10 @@
|
||||
<Compile Include="Formatter\DanielsStyle.cs" />
|
||||
<Compile Include="Formatter\DocumentWriter.cs" />
|
||||
<Compile Include="Formatter\NoLaboratoryDataException.cs" />
|
||||
<Compile Include="Medication\Formatter.cs" />
|
||||
<Compile Include="Medication\Importer.cs" />
|
||||
<Compile Include="Medication\Prescription.cs" />
|
||||
<Compile Include="Preferences.cs" />
|
||||
<Compile Include="Ribbon.cs" />
|
||||
<Compile Include="Thesaurus\ThesaurusBase.cs" />
|
||||
<Compile Include="Formatter\IItemFormatterDictionary.cs" />
|
||||
@ -251,10 +262,16 @@
|
||||
<Compile Include="ViewModels\CategoryViewModel.cs" />
|
||||
<Compile Include="ViewModels\ElementPickerViewModel.cs" />
|
||||
<Compile Include="ViewModels\ElementViewModel.cs" />
|
||||
<Compile Include="ViewModels\FirstRunViewModel.cs" />
|
||||
<Compile Include="ViewModels\FormatElementViewModel.cs" />
|
||||
<Compile Include="ViewModels\ControlElementViewModel.cs" />
|
||||
<Compile Include="ViewModels\IoErrorViewModel.cs" />
|
||||
<Compile Include="ViewModels\ItemCommentViewModel.cs" />
|
||||
<Compile Include="ViewModels\PreferencesViewModel.cs" />
|
||||
<Compile Include="ViewModels\SettingsRepositoryViewModel.cs" />
|
||||
<Compile Include="Views\ItemCommentView.xaml.cs">
|
||||
<DependentUpon>ItemCommentView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\IoErrorView.xaml.cs">
|
||||
<DependentUpon>IoErrorView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
@ -264,6 +281,12 @@
|
||||
<Compile Include="Views\ElementView.xaml.cs">
|
||||
<DependentUpon>ElementView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\FirstRunView.xaml.cs">
|
||||
<DependentUpon>FirstRunView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\PreferencesView.xaml.cs">
|
||||
<DependentUpon>PreferencesView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\SettingsView.xaml.cs">
|
||||
<DependentUpon>SettingsView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
@ -340,6 +363,10 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Resource>
|
||||
<Page Include="Views\ItemCommentView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Views\IoErrorView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
@ -352,6 +379,14 @@
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Views\FirstRunView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Views\PreferencesView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Views\SettingsView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
@ -412,6 +447,15 @@
|
||||
<ItemGroup>
|
||||
<Resource Include="Icons\icon.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Icons\gear.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Icons\m.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Icons\mm.png" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
|