Compare commits
117 Commits
Author | SHA1 | Date | |
---|---|---|---|
753219c1eb | |||
19ffff86ff | |||
5b8cea34de | |||
999f2def41 | |||
1ba74bbc29 | |||
474a292991 | |||
eaaed3b659 | |||
1be66fbd71 | |||
b1cd1f1a05 | |||
003da0f1b2 | |||
9a5cc4d9df | |||
15ada1cefd | |||
94efa435f2 | |||
89df2f5e13 | |||
e3e86891b8 | |||
20c0b8a76e | |||
d807472016 | |||
33c8f48282 | |||
9bbab2607d | |||
15df44a93b | |||
67219d0ae5 | |||
3f6383b076 | |||
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 |
1
.gitignore
vendored
@ -16,6 +16,7 @@ publish/release/
|
|||||||
x64/
|
x64/
|
||||||
win32/
|
win32/
|
||||||
[Rr]elease/
|
[Rr]elease/
|
||||||
|
[Rr]eleases/
|
||||||
[Dd]debug/
|
[Dd]debug/
|
||||||
Dist/
|
Dist/
|
||||||
build/
|
build/
|
||||||
|
3
.gitmodules
vendored
@ -1,3 +1,6 @@
|
|||||||
[submodule "www/PHPMailer"]
|
[submodule "www/PHPMailer"]
|
||||||
path = www/PHPMailer
|
path = www/PHPMailer
|
||||||
url = git@github.com:PHPMailer/PHPMailer.git
|
url = git@github.com:PHPMailer/PHPMailer.git
|
||||||
|
[submodule "deploy/VstoAddinInstaller"]
|
||||||
|
path = deploy/VstoAddinInstaller
|
||||||
|
url = git@github.com:bovender/VstoAddinInstaller.git
|
||||||
|
177
HISTORY.md
@ -1,5 +1,158 @@
|
|||||||
|
Version 2.2.4 (2016-04-05)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- VERBESSERT: Kleine Optimierungen beim Installationsprogramm.
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Version 2.2.3 (2016-03-30)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- REPARIERT: Installationsskript hat Add-in nicht aktiviert.
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Version 2.2.2 (2016-03-29)
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- VERBESSERT: Installationsprogramm erkennt jetzt, wenn Word bereits läuft, und bietet an, es zu schließen
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
Version 2.1.0 (2015-09-06)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- NEU: Optionale Kommentare zu Laborwerten.
|
- NEU: Optionale Kommentare zu Laborwerten.
|
||||||
- NEU: Sekretariatsmodus (siehe 'Einstellungen'), um die Nachfrage nach Zusatz-Kommentaren zu unterdrücken.
|
- NEU: Sekretariatsmodus (siehe 'Einstellungen'), um die Nachfrage nach Zusatz-Kommentaren zu unterdrücken.
|
||||||
@ -11,7 +164,7 @@ Version 2.1.0 (2015-09-06)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.1 (2015-09-02)
|
Version 2.0.1 (2015-09-02)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- FEHLERBEHEBUNG: Kein Absturz mehr, wenn zwei Spalten formatiert werden.
|
- FEHLERBEHEBUNG: Kein Absturz mehr, wenn zwei Spalten formatiert werden.
|
||||||
- VERBESSERT: Kein Absturz mehr, wenn das Demo-Dokument innerhalb der ZAA geöffnet wird (Exception ID 65a5c34e).
|
- VERBESSERT: Kein Absturz mehr, wenn das Demo-Dokument innerhalb der ZAA geöffnet wird (Exception ID 65a5c34e).
|
||||||
@ -22,7 +175,7 @@ Version 2.0.1 (2015-09-02)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-beta.5 (2015-08-25)
|
Version 2.0.0-beta.5 (2015-08-25)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- NEU: Auszeichnung pathologischer Werte kann eingestellt werden.
|
- NEU: Auszeichnung pathologischer Werte kann eingestellt werden.
|
||||||
- NEU: Für bestimmte Laborwerte ist die bevorzugte Nachkommastellenzahl hinterlegt (z.B. Kreatinin mit nur einer Nachkommastelle).
|
- NEU: Für bestimmte Laborwerte ist die bevorzugte Nachkommastellenzahl hinterlegt (z.B. Kreatinin mit nur einer Nachkommastelle).
|
||||||
@ -33,7 +186,7 @@ Version 2.0.0-beta.5 (2015-08-25)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-beta.4. (2015-08-23)
|
Version 2.0.0-beta.4. (2015-08-23)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- VERBESSERUNG: Aliasse für fT3 und fT4.
|
- VERBESSERUNG: Aliasse für fT3 und fT4.
|
||||||
- VERBESSERUNG: Ambulanz-Stil überarbeitet.
|
- VERBESSERUNG: Ambulanz-Stil überarbeitet.
|
||||||
@ -42,7 +195,7 @@ Version 2.0.0-beta.4. (2015-08-23)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-beta.3. (2015-08-20)
|
Version 2.0.0-beta.3. (2015-08-20)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- VERBESSERT: Bei Updates werden neue eingebaute Stile jetzt immer berücksichtigt.
|
- VERBESSERT: Bei Updates werden neue eingebaute Stile jetzt immer berücksichtigt.
|
||||||
- VERBESSERT: Formatierung erscheint nur noch als 1 Undo-Schritt.
|
- VERBESSERT: Formatierung erscheint nur noch als 1 Undo-Schritt.
|
||||||
@ -54,7 +207,7 @@ Version 2.0.0-beta.3. (2015-08-20)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-beta.2 (2015-08-16)
|
Version 2.0.0-beta.2 (2015-08-16)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- FIX: Kleinere Bugfixes.
|
- FIX: Kleinere Bugfixes.
|
||||||
- GEÄNDERT: Diff.-BB-Werte im Stations-Stil in Hämatologie-Zeile integriert.
|
- GEÄNDERT: Diff.-BB-Werte im Stations-Stil in Hämatologie-Zeile integriert.
|
||||||
@ -70,7 +223,7 @@ Version 2.0.0-beta.2 (2015-08-16)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-beta.1 (2015-08-13)
|
Version 2.0.0-beta.1 (2015-08-13)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- FIX: Datenimport funktioniert jetzt auch mit Word-Text und nicht nur in den Tests.
|
- FIX: Datenimport funktioniert jetzt auch mit Word-Text und nicht nur in den Tests.
|
||||||
- FIX: Mehrere Thesaurus-Fehler behoben.
|
- FIX: Mehrere Thesaurus-Fehler behoben.
|
||||||
@ -87,7 +240,7 @@ Version 2.0.0-beta.1 (2015-08-13)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-alpha.5. (2015-08-04)
|
Version 2.0.0-alpha.5. (2015-08-04)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- FIX: Daniels Spezial löscht nicht mehr die Unterschriften.
|
- FIX: Daniels Spezial löscht nicht mehr die Unterschriften.
|
||||||
- NEU: Eingebautes Demo-Dokument zum Ausprobieren.
|
- NEU: Eingebautes Demo-Dokument zum Ausprobieren.
|
||||||
@ -97,7 +250,7 @@ Version 2.0.0-alpha.5. (2015-08-04)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-alpha.3 (2015-07-31)
|
Version 2.0.0-alpha.3 (2015-07-31)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- FIX: Beim Start wird jetzt nach Updates gesucht.
|
- FIX: Beim Start wird jetzt nach Updates gesucht.
|
||||||
|
|
||||||
@ -105,7 +258,7 @@ Version 2.0.0-alpha.3 (2015-07-31)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-alpha.2 (2015-07-28)
|
Version 2.0.0-alpha.2 (2015-07-28)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- NEU: Fehlerbehandlung und Fehlerberichte.
|
- NEU: Fehlerbehandlung und Fehlerberichte.
|
||||||
|
|
||||||
@ -113,7 +266,7 @@ Version 2.0.0-alpha.2 (2015-07-28)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0-alpha.1 (2015-07-27)
|
Version 2.0.0-alpha.1 (2015-07-27)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- NEW: First release of version 2 series.
|
- NEW: First release of version 2 series.
|
||||||
|
|
||||||
@ -121,7 +274,7 @@ Version 2.0.0-alpha.1 (2015-07-27)
|
|||||||
|
|
||||||
|
|
||||||
Version 2.0.0 (2015-08-30)
|
Version 2.0.0 (2015-08-30)
|
||||||
========================================================================
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
- FEHLERBEHEBUNG: Kein Absturz mehr, wenn zwei Spalten formatiert werden.
|
- FEHLERBEHEBUNG: Kein Absturz mehr, wenn zwei Spalten formatiert werden.
|
||||||
- VERBESSERT: Kein Crash mehr, falls sich ein Komma in den Lauris-Block einschleicht.
|
- VERBESSERT: Kein Crash mehr, falls sich ein Komma in den Lauris-Block einschleicht.
|
||||||
|
@ -30,6 +30,7 @@ namespace Tests.Controller.Comments
|
|||||||
[Test]
|
[Test]
|
||||||
public void CreateCommentIfDoesNotExist()
|
public void CreateCommentIfDoesNotExist()
|
||||||
{
|
{
|
||||||
|
CommentPool.Default.Reset();
|
||||||
int n = CommentPool.Default.Count;
|
int n = CommentPool.Default.Count;
|
||||||
ItemComment i = CommentPool.Default.GetCommentFor("item \"<>\"");
|
ItemComment i = CommentPool.Default.GetCommentFor("item \"<>\"");
|
||||||
Assert.AreEqual(n + 1, CommentPool.Default.Count);
|
Assert.AreEqual(n + 1, CommentPool.Default.Count);
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -49,6 +49,11 @@ namespace Tests.Controller
|
|||||||
((Items)source.Elements[1]).Content,
|
((Items)source.Elements[1]).Content,
|
||||||
((Items)clone.Elements[1]).Content,
|
((Items)clone.Elements[1]).Content,
|
||||||
"Items 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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,6 +118,23 @@ namespace Tests.Formatter
|
|||||||
document.Range().Text);
|
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)
|
string GetResourceText(string resource)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -40,6 +40,7 @@ namespace Tests.Importer.ZaaImporter
|
|||||||
LaurisItem i = new LaurisItem(laurisString);
|
LaurisItem i = new LaurisItem(laurisString);
|
||||||
Assert.AreEqual(name, i.Name, "Name");
|
Assert.AreEqual(name, i.Name, "Name");
|
||||||
Assert.AreEqual(unit, i.Unit, "Unit");
|
Assert.AreEqual(unit, i.Unit, "Unit");
|
||||||
|
Assert.IsFalse(i.IsExtreme, "IsExtreme");
|
||||||
Assert.IsTrue(i.IsNumerical, "IsNumerical");
|
Assert.IsTrue(i.IsNumerical, "IsNumerical");
|
||||||
Assert.AreEqual(value, i.NumericalValue, "NumericalValue");
|
Assert.AreEqual(value, i.NumericalValue, "NumericalValue");
|
||||||
Assert.AreEqual(lowerLimit, i.LowerLimit, "Lower limit");
|
Assert.AreEqual(lowerLimit, i.LowerLimit, "Lower limit");
|
||||||
@ -50,6 +51,25 @@ namespace Tests.Importer.ZaaImporter
|
|||||||
Assert.IsTrue(i.HasUpperLimit, "HasUpperLimit");
|
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)]
|
[TestCase("HDL - Cholesterin: 45 [>= 35] mg/dl", "HDL - Cholesterin", 45, "mg/dl", 35, true)]
|
||||||
public void ParseLaurisWithLowerLimit(
|
public void ParseLaurisWithLowerLimit(
|
||||||
string laurisString, string name, double value,
|
string laurisString, string name, double value,
|
||||||
|
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);
|
serializer.Serialize(stream, element);
|
||||||
stream.Position = 0;
|
stream.Position = 0;
|
||||||
StreamReader sr = new StreamReader(stream);
|
StreamReader sr = new StreamReader(stream);
|
||||||
Console.WriteLine(sr.ReadToEnd());
|
// Console.WriteLine(sr.ReadToEnd());
|
||||||
stream.Position = 0;
|
stream.Position = 0;
|
||||||
SelectFirstDay deserialized = serializer.Deserialize(stream) as SelectFirstDay;
|
SelectFirstDay deserialized = serializer.Deserialize(stream) as SelectFirstDay;
|
||||||
Assert.IsNotNull(deserialized);
|
Assert.IsNotNull(deserialized);
|
||||||
|
@ -41,8 +41,8 @@
|
|||||||
<AssemblyOriginatorKeyFile>zaaReloaded2.pfx</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>zaaReloaded2.pfx</AssemblyOriginatorKeyFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Bovender, Version=0.2.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
|
<Reference Include="Bovender, Version=0.5.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Bovender.0.2.0.0\lib\net40\Bovender.dll</HintPath>
|
<HintPath>..\packages\Bovender.0.5.0.0\lib\net40\Bovender.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
||||||
@ -82,6 +82,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Controller\Comments\CommentPoolTest.cs" />
|
<Compile Include="Controller\Comments\CommentPoolTest.cs" />
|
||||||
<Compile Include="Controller\Comments\ItemCommentTest.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="SerializationTest.cs" />
|
||||||
<Compile Include="Controller\SettingsRepositoryTest.cs" />
|
<Compile Include="Controller\SettingsRepositoryTest.cs" />
|
||||||
<Compile Include="Controller\SettingsTest.cs" />
|
<Compile Include="Controller\SettingsTest.cs" />
|
||||||
|
@ -38,5 +38,39 @@ namespace Tests.ViewModels
|
|||||||
Assert.AreEqual(comment.Suffix, vm.Suffix);
|
Assert.AreEqual(comment.Suffix, vm.Suffix);
|
||||||
Assert.AreEqual(comment.Value, vm.Value);
|
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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<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="Expression.Blend.Sdk" version="1.0.2" targetFramework="net40" />
|
||||||
<package id="NUnit" version="2.6.4" targetFramework="net40" />
|
<package id="NUnit" version="2.6.4" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
1
deploy/VstoAddinInstaller
Submodule
32
deploy/make-installer.iss
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#expr Exec("C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.com", \
|
||||||
|
"x:\Code\zaaReloaded2\zaaReloaded2\zaaReloaded2.csproj /Build Release")
|
||||||
|
|
||||||
|
#define VERSIONFILE "..\zaaReloaded2\VERSION"
|
||||||
|
#define PUB_YEARS "2015-2016"
|
||||||
|
#define TARGET_HOST "word"
|
||||||
|
#define APP_GUID "{{8520B887-3AB1-422B-AB6B-A265D14FE4E5}"
|
||||||
|
#define ADDIN_NAME "zaaReloaded"
|
||||||
|
#define COMPANY "Daniel Kraus (bovender)"
|
||||||
|
#define DESCRIPTION "Word-Addin, das Lauris-Laborwerte in der Zentralen Arztbriefablage formatiert."
|
||||||
|
#define HOMEPAGE "http://zaa.nephrowiki.de"
|
||||||
|
#define REGKEY "zaaReloaded2"
|
||||||
|
|
||||||
|
#define SOURCEDIR "..\zaaReloaded2\bin\Release\"
|
||||||
|
#define VSTOFILE "zaaReloaded2.vsto"
|
||||||
|
|
||||||
|
; OUTPUTDIR is the directory where the installer will be saved.
|
||||||
|
#define OUTPUTDIR "releases\"
|
||||||
|
|
||||||
|
#define LOGFILE "ZAARELOADED2-INSTALL-LOG.TXT"
|
||||||
|
|
||||||
|
#define SETUPFILESDIR "setup-files\"
|
||||||
|
#define LICENSE_FILE "license.rtf"
|
||||||
|
#define INSTALLER_ICO "icon.ico"
|
||||||
|
#define INSTALLER_IMAGE_LARGE "installbanner.bmp"
|
||||||
|
#define INSTALLER_IMAGE_SMALL "installbanner-small.bmp"
|
||||||
|
|
||||||
|
; If the VstoAddinInstaller files are in a different subdirectory
|
||||||
|
; than 'VstoAddinInstaller', change the path below.
|
||||||
|
#include "VstoAddinInstaller\vsto-installer.iss"
|
||||||
|
|
||||||
|
; vim: ts=2 sts=2 sw=2 et
|
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 204 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 153 KiB After Width: | Height: | Size: 153 KiB |
BIN
gimp/m.xcf
Normal file
BIN
gimp/mm.xcf
Normal file
@ -1,760 +0,0 @@
|
|||||||
; Inno Setup script for zaaReloaded2
|
|
||||||
; (c) 2015 Daniel Kraus
|
|
||||||
; Apache License Version 2.0
|
|
||||||
|
|
||||||
[Setup]
|
|
||||||
; #define DEBUG
|
|
||||||
|
|
||||||
; Read the semantic and the installer file version from the VERSION file
|
|
||||||
#define FILE_HANDLE FileOpen("..\zaaReloaded2\VERSION")
|
|
||||||
#define SEMVER FileRead(FILE_HANDLE)
|
|
||||||
#define VER FileRead(FILE_HANDLE)
|
|
||||||
#expr FileClose(FILE_HANDLE)
|
|
||||||
|
|
||||||
#define YEAR "2015"
|
|
||||||
#define DEV "Daniel Kraus"
|
|
||||||
#define LOGFILE "INST-LOG.TXT"
|
|
||||||
#define REGKEY "Software\Microsoft\Office\Word\Addins\zaaReloaded2"
|
|
||||||
#define APPNAME "zaaReloaded"
|
|
||||||
#define SLOGAN "Word-Addin, das Lauris-Laborwerte in der Zentralen Arztbriefablage formatiert"
|
|
||||||
#define UNINSTALLDIR "{app}\setup"
|
|
||||||
#define ADDINNAME "zaaReloaded2"
|
|
||||||
#define DOTNETSHA1 "58da3d74db353aad03588cbb5cea8234166d8b99"
|
|
||||||
#define VSTORSHA1 "ad1dcc5325cb31754105c8c783995649e2208571"
|
|
||||||
|
|
||||||
#ifndef DEBUG
|
|
||||||
#define SOURCEDIR "Release"
|
|
||||||
#define VSTORURL "http://download.microsoft.com/download/2/E/9/2E9D2603-6D1F-4B12-BD37-DB1410B23597/vstor_redist.exe"
|
|
||||||
#define DOTNETURL "http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe"
|
|
||||||
; Build the solution with Release configuration
|
|
||||||
#expr Exec("C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.com", \
|
|
||||||
"x:\Code\zaaReloaded2\zaaReloaded2\zaaReloaded2.csproj /Build Release")
|
|
||||||
#else
|
|
||||||
#define SOURCEDIR "Debug"
|
|
||||||
#define VSTORURL "http://vhost/vstor_redist.exe"
|
|
||||||
#define DOTNETURL "http://vhost/dotNetFx40_Full_x86_x64.exe"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
; Specific AppID - NEVER CHANGE THIS!
|
|
||||||
AppId={{8520B887-3AB1-422B-AB6B-A265D14FE4E5}
|
|
||||||
|
|
||||||
; Compiler info
|
|
||||||
OutputDir=release
|
|
||||||
#ifndef DEBUG
|
|
||||||
OutputBaseFilename=zaaReloaded-{#SEMVER}
|
|
||||||
#else
|
|
||||||
OutputBaseFilename=zaaReloaded-debug
|
|
||||||
#endif
|
|
||||||
Compression=lzma
|
|
||||||
InternalCompressLevel=max
|
|
||||||
SolidCompression=true
|
|
||||||
LicenseFile=setup-files\license.rtf
|
|
||||||
|
|
||||||
; Application name, version, etc.
|
|
||||||
AppName={#APPNAME}
|
|
||||||
AppVersion={#SEMVER}
|
|
||||||
AppPublisher={#DEV}
|
|
||||||
AppCopyright=2008-{#YEAR} {#DEV}
|
|
||||||
AppComments={#SLOGAN}
|
|
||||||
VersionInfoDescription={#SLOGAN}
|
|
||||||
VersionInfoVersion={#VER}
|
|
||||||
VersionInfoProductVersion={#VER}
|
|
||||||
VersionInfoTextVersion={#SEMVER}
|
|
||||||
VersionInfoProductTextVersion={#SEMVER}
|
|
||||||
AppContact={#DEV}
|
|
||||||
AppPublisherURL=http://zaa.nephrowiki.de
|
|
||||||
AppSupportURL=http://zaa.nephrowiki.de
|
|
||||||
AppUpdatesURL=http://zaa.nephrowiki.de
|
|
||||||
|
|
||||||
; Setup wizard
|
|
||||||
SetupIconFile=setup-files\icon.ico
|
|
||||||
WizardImageFile=setup-files\installbanner.bmp
|
|
||||||
WizardSmallImageFile=setup-files\installbanner-small.bmp
|
|
||||||
ArchitecturesAllowed=x86 x64
|
|
||||||
ArchitecturesInstallIn64BitMode=x64
|
|
||||||
DisableProgramGroupPage=true
|
|
||||||
DisableDirPage=false
|
|
||||||
DisableReadyPage=false
|
|
||||||
LanguageDetectionMethod=locale
|
|
||||||
TimeStampsInUTC=false
|
|
||||||
PrivilegesRequired=lowest
|
|
||||||
WizardImageStretch=false
|
|
||||||
WizardImageBackColor=clWhite
|
|
||||||
; ChangesAssociations=true
|
|
||||||
AppendDefaultDirName=false
|
|
||||||
DefaultDirName={code:SuggestInstallDir}
|
|
||||||
CreateAppDir=true
|
|
||||||
CloseApplicationsFilter=*.*
|
|
||||||
DefaultDialogFontName=Segoe UI
|
|
||||||
|
|
||||||
; Uninstall
|
|
||||||
;UninstallDisplayIcon={#UNINSTALLDIR}\xltoolbox.ico
|
|
||||||
UninstallFilesDir={#UNINSTALLDIR}
|
|
||||||
|
|
||||||
; Inno Downloader Plugin is required for this
|
|
||||||
; Note that this include directive MUST be located at the end of the [setup]
|
|
||||||
; section.
|
|
||||||
#include <idp.iss>
|
|
||||||
|
|
||||||
[Languages]
|
|
||||||
Name: en; MessagesFile: compiler:Default.isl;
|
|
||||||
Name: de; MessagesFile: compiler:Languages\German.isl;
|
|
||||||
; Name: Brasileiro; MessagesFile: compiler:Languages\BrazilianPortuguese.isl;
|
|
||||||
; Name: Portugues; MessagesFile: compiler:Languages\Portuguese.isl;
|
|
||||||
#include "c:\Program Files (x86)\Inno Download Plugin\Unicode\idplang\german.iss"
|
|
||||||
|
|
||||||
[Files]
|
|
||||||
Source: "..\zaaReloaded2\bin\{#SOURCEDIR}\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs
|
|
||||||
; Source: "setup-files\xltoolbox.ico"; DestDir: "{#UNINSTALLDIR}"
|
|
||||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
|
||||||
|
|
||||||
[Registry]
|
|
||||||
; Keys for single-user install (HKCU)
|
|
||||||
Check: not IsMultiUserInstall; ValueName: Description; ValueData: {#SLOGAN}; ValueType: string; Root: HKCU; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: not IsMultiUserInstall; ValueName: FriendlyName; ValueData: {#APPNAME}; ValueType: string; Root: HKCU; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: not IsMultiUserInstall; ValueName: LoadBehavior; ValueData: 3; ValueType: dword; Root: HKCU; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: not IsMultiUserInstall; ValueName: Warmup; ValueData: 1; ValueType: dword; Root: HKCU; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: not IsMultiUserInstall; ValueName: Manifest; ValueData: file:///{code:ConvertSlash|{app}}/{#ADDINNAME}.vsto|vstolocal; ValueType: string; Root: HKCU; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
|
|
||||||
; Same keys again, this time for multi-user install (HKLM)
|
|
||||||
Check: IsMultiUserInstall; ValueName: Description; ValueData: {#SLOGAN}; ValueType: string; Root: HKLM; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: IsMultiUserInstall; ValueName: FriendlyName; ValueData: {#APPNAME}; ValueType: string; Root: HKLM; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: IsMultiUserInstall; ValueName: LoadBehavior; ValueData: 3; ValueType: dword; Root: HKLM; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: IsMultiUserInstall; ValueName: Warmup; ValueData: 1; ValueType: dword; Root: HKLM; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
Check: IsMultiUserInstall; ValueName: Manifest; ValueData: file:///{code:ConvertSlash|{app}}/{#ADDINNAME}.vsto|vstolocal; ValueType: string; Root: HKLM; Subkey: {#REGKEY}; Flags: uninsdeletekey
|
|
||||||
|
|
||||||
[Run]
|
|
||||||
; Filename: http://xltoolbox.sourceforge.net/welcome.html; Flags: shellexec nowait; Check: ShowWelcomePageInBrowser
|
|
||||||
|
|
||||||
[UninstallRun]
|
|
||||||
; Filename: http://xltoolbox.sourceforge.net/uninstall.html; Flags: shellexec nowait
|
|
||||||
|
|
||||||
[CustomMessages]
|
|
||||||
; General messages [EN]
|
|
||||||
en.SingleOrMulti=Single-user or system-wide install
|
|
||||||
en.SingleOrMultiSubcaption=Install for the current user only or for all users
|
|
||||||
en.SingleOrMultiDesc=Please indicate the scope of this installation:
|
|
||||||
en.SingleOrMultiSingle=Single user (only for me)
|
|
||||||
en.SingleOrMultiAll=All users (system-wide)
|
|
||||||
en.Word2007Required=zaaReloaded requires Word 2007 or later.
|
|
||||||
|
|
||||||
; CannotInstallPage [EN]
|
|
||||||
en.CannotInstallCaption=Administrator privileges required
|
|
||||||
en.CannotInstallDesc=You do not have the necessary rights to install additional required runtime files.
|
|
||||||
en.CannotInstallMsg=Additional runtime files from Microsoft are required to run this add-in. You may continue the installation, but the add-in won't start unless the required runtime files are installed by an administrator. Note: On Windows Vista and newer, right-click the installer file and choose 'Run as administrator'.
|
|
||||||
en.CannotInstallCont=Continue anyway, although it won't work without the required runtime files
|
|
||||||
en.CannotInstallAbort=Abort the installation (come back when the admin has installed the files)
|
|
||||||
|
|
||||||
; DownloadInfoPage [EN]
|
|
||||||
en.RequiredCaption=Additional runtime files required
|
|
||||||
en.RequiredDesc=Additional runtime files for the .NET framework from Microsoft are required in order to run the add-in.
|
|
||||||
en.RequiredMsg=%d file(s) totalling about %s MiB need to be downloaded from the Microsoft servers. Click 'Next' to start downloading.
|
|
||||||
|
|
||||||
; InstallInfoPage [EN]
|
|
||||||
en.InstallCaption=Runtime files downloaded
|
|
||||||
en.InstallDesc=The required runtime files are ready to install.
|
|
||||||
en.InstallMsg=Click 'Next' to beginn the installation.
|
|
||||||
|
|
||||||
en.StillNotInstalled=The required additional runtime files are still not installed. Setup cannot continue. You may try again, or abort the add-in installation.
|
|
||||||
en.DownloadNotValidated=A downloaded file has unexpected content. It may have not been downloaded correctly, or someone might have hampered with it. You may click 'Back' and then 'Next' to download it again.
|
|
||||||
|
|
||||||
; General messages [DE]
|
|
||||||
de.SingleOrMulti=Einzelner oder alle Benutzer
|
|
||||||
de.SingleOrMultiSubcaption=Geben Sie an, f<>r wen die Installation sein soll
|
|
||||||
de.SingleOrMultiDesc=Bitte geben Sie an, ob das Addin nur f<>r Sie oder f<>r alle Benutzer installiert werden soll.
|
|
||||||
de.SingleOrMultiSingle=Ein Benutzer (nur f<>r mich)
|
|
||||||
de.SingleOrMultiAll=Alle Benutzer (systemweit)
|
|
||||||
de.Word2007Required=Dieses Addin erfordert mindestens Word 2007.
|
|
||||||
|
|
||||||
; "Download required" messages (.NET and VSTOR runtimes) [DE]
|
|
||||||
de.CannotInstallCaption=Administratorrechte ben<65>tigt
|
|
||||||
de.CannotInstallDesc=Sie haben nicht die erforderlichen Benutzerrechte, um weitere ben<65>tigte Laufzeitdateien zu installieren.
|
|
||||||
de.CannotInstallMsg=Sie k<>nnen mit der Installation fortfahren, aber das Addin wird nicht starten, solange die VSTO-Laufzeitdateien nicht von einem Admin installiert wurden. Tipp: Wenn Sie Windows Vista oder neuer verwenden, klicken Sie mit der rechten Maustaste auf die Installationsdatei und w<>hlen "Als Administrator ausf<73>hren".
|
|
||||||
de.CannotInstallCont=Trotzdem installieren, obwohl es nicht funktionieren wird
|
|
||||||
de.CannotInstallAbort=Installation abbrechen
|
|
||||||
|
|
||||||
; DownloadInfoPage [EN]
|
|
||||||
de.RequiredCaption=Weitere Laufzeitdateien erforderlich
|
|
||||||
de.RequiredDesc=Weitere Laufzeitdateien f<>r das .NET-Framework von Microsoft werden ben<65>tigt, um das Addin verwenden zu k<>nnen.
|
|
||||||
de.RequiredMsg=%d Datei(en) mit ca. %s MiB mu<6D>/m<>ssen von den Microsoft-Servern heruntergeladen werden. Klicken Sie 'Weiter', um den Download zu beginnen.
|
|
||||||
|
|
||||||
; InstallInfoPage [EN]
|
|
||||||
de.InstallCaption=Weitere .NET-Laufzeitdateien heruntergeladen
|
|
||||||
de.InstallDesc=Die zus<75>tzlichen ben<65>tigten Dateien von Microsoft k<>nnen jetzt installiert werden.
|
|
||||||
de.InstallMsg=Klicken Sie 'Weiter', um mit der Installation zu beginnen.
|
|
||||||
|
|
||||||
de.StillNotInstalled=Die zus<75>tzlichen ben<65>tigten Dateien wurden leider nicht korrekt installiert, so da<64> die Installation nicht fortgesetzt werden kann.
|
|
||||||
de.DownloadNotValidated=Es wurde unerwarteter Inhalt in einer heruntergeladenen Datei gefunden. Die Installation kann so nicht fortgesetzt werden. Sie k<>nnen aber 'Zur<75>ck' und dann 'Weiter' klicken, um den Download neu zu beginnen.
|
|
||||||
|
|
||||||
[Code]
|
|
||||||
const
|
|
||||||
maxWord = 24; //< highest Word version number to check for.
|
|
||||||
|
|
||||||
var
|
|
||||||
PageDevelopmentInfo: TInputOptionWizardPage;
|
|
||||||
PageSingleOrMultiUser: TInputOptionWizardPage;
|
|
||||||
PageCannotInstall: TInputOptionWizardPage;
|
|
||||||
PageDownloadInfo: TOutputMsgWizardPage;
|
|
||||||
PageInstallInfo: TOutputMsgWizardPage;
|
|
||||||
prerequisitesChecked: boolean;
|
|
||||||
prerequisitesMet: boolean;
|
|
||||||
|
|
||||||
/// Returns the path for the Wow6432Node registry tree if the current operating
|
|
||||||
/// system is 64-bit, i.e., simulates WOW64 redirection.
|
|
||||||
function GetWowNode(): string;
|
|
||||||
begin
|
|
||||||
if IsWin64 then
|
|
||||||
begin
|
|
||||||
result := 'Wow6432Node\';
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
result := '';
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if a given Word version is installed
|
|
||||||
function IsWordVersionInstalled(version: integer): boolean;
|
|
||||||
var key: string;
|
|
||||||
var lookup1, lookup2: boolean;
|
|
||||||
begin
|
|
||||||
key := 'Microsoft\Office\' + IntToStr(version) + '.0\Word\InstallRoot';
|
|
||||||
lookup1 := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\' + GetWowNode + key);
|
|
||||||
|
|
||||||
// If checking for version >= 14.0 ("2010"), which was the first version
|
|
||||||
// that was produced in both 32-bit and 64-bit, on a 64-bit system we
|
|
||||||
// also need to check a path without 'Wow6434Node'.
|
|
||||||
if IsWin64 and (version >= 14) then
|
|
||||||
begin
|
|
||||||
lookup2 := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\' + key);
|
|
||||||
end;
|
|
||||||
|
|
||||||
result := lookup1 or lookup2;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if only Word 2007 is installed
|
|
||||||
function IsOnlyWord2007Installed(): boolean;
|
|
||||||
var
|
|
||||||
i: integer;
|
|
||||||
begin
|
|
||||||
result := IsWordVersionInstalled(12);
|
|
||||||
|
|
||||||
// Iterate through all
|
|
||||||
for i := 14 to maxWord do
|
|
||||||
begin
|
|
||||||
if IsWordVersionInstalled(i) then
|
|
||||||
begin
|
|
||||||
result := false;
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if hotfix KB976477 is installed. This hotfix
|
|
||||||
/// is required to make Word 2007 recognize add-ins in
|
|
||||||
/// the HKLM hive as well.
|
|
||||||
function IsHotfixInstalled(): boolean;
|
|
||||||
begin
|
|
||||||
result := RegKeyExists(HKEY_LOCAL_MACHINE,
|
|
||||||
'SOFTWARE\Microsoft\Windows\Current Version\Uninstall\KB976477');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Retrieves the build number of an installed Office version
|
|
||||||
/// in OutBuild. Returns true if the requested Office version
|
|
||||||
/// is installed and false if it is not installed.
|
|
||||||
function GetOfficeBuild(OfficeVersion: integer; var OutBuild: integer): boolean;
|
|
||||||
var
|
|
||||||
key: string;
|
|
||||||
value: string;
|
|
||||||
build: string;
|
|
||||||
begin
|
|
||||||
key := 'SOFTWARE\' + GetWowNode + 'Microsoft\Office\' +
|
|
||||||
IntToStr(OfficeVersion) + '.0\Common\ProductVersion';
|
|
||||||
if RegQueryStringValue(HKEY_LOCAL_MACHINE, key, 'LastProduct', value) then
|
|
||||||
begin
|
|
||||||
// Office build numbers always have 4 digits, at least as of Feb. 2015;
|
|
||||||
// from a string '14.0.1234.5000' simply copy 4 characters from the 5th
|
|
||||||
// position to get the build number. TODO: Make this future-proof.
|
|
||||||
build := Copy(value, 6, 4);
|
|
||||||
Log('Found ProductVersion "' + value + '" for queried Office version '
|
|
||||||
+ IntToStr(OfficeVersion) + ', extracted build number ' + build);
|
|
||||||
OutBuild := StrToInt(build);
|
|
||||||
result := true;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Log('Did not find LastProduct key for Office version ' +
|
|
||||||
IntToStr(OfficeVersion) + '.0.');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Asserts if Office 2007 is installed. Does not check whether other Office
|
|
||||||
/// versions are concurrently installed.
|
|
||||||
function IsOffice2007Installed(): boolean;
|
|
||||||
begin
|
|
||||||
result := IsWordVersionInstalled(12);
|
|
||||||
if result then Log('Detected Office 2007.');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Asserts if Office 2010 without service pack is installed.
|
|
||||||
/// For build number, see http://support.microsoft.com/kb/2121559/en-us
|
|
||||||
function IsOffice2010NoSpInstalled(): boolean;
|
|
||||||
var
|
|
||||||
build: integer;
|
|
||||||
begin
|
|
||||||
if GetOfficeBuild(14, build) then
|
|
||||||
begin
|
|
||||||
result := build = 4763; // 4763 is the original Office 2007 build
|
|
||||||
if result then
|
|
||||||
Log('Detected Office 2010 without service pack (v. 14.0, build 4763)')
|
|
||||||
else
|
|
||||||
Log('Detected Office 2010, apparently with some service pack (build ' +
|
|
||||||
IntToStr(build) + ').');
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if the VSTO runtime is installed. This is relevant if only
|
|
||||||
/// Word 2007 is installed. Since Office 2010, the CLR is
|
|
||||||
/// automatically included.
|
|
||||||
/// The presence of the VSTO runtime is indicated by the presence one of
|
|
||||||
/// four possible registry keys.
|
|
||||||
/// See: http://xltoolbox.sf.net/blog/2015/01/net-vsto-add-ins-getting-prerequisites-right
|
|
||||||
/// HKLM\SOFTWARE\Microsoft\VSTO Runtime Setup\v4R (32-bit)
|
|
||||||
/// HKLM\SOFTWARE\Wow6432Node\Microsoft\VSTO Runtime Setup\v4R (64-bit)
|
|
||||||
function IsVstorInstalled(): boolean;
|
|
||||||
var
|
|
||||||
software, vstorPath: string;
|
|
||||||
begin
|
|
||||||
software := 'SOFTWARE\';
|
|
||||||
vstorPath := 'Microsoft\VSTO Runtime Setup\v4R';
|
|
||||||
result := RegKeyExists(HKEY_LOCAL_MACHINE, software + GetWowNode + vstorPath);
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if the .NET 4.0 (or 4.5) runtime is installed.
|
|
||||||
/// See https://msdn.microsoft.com/en-us/library/hh925568
|
|
||||||
function IsNetInstalled(): boolean;
|
|
||||||
begin
|
|
||||||
result := RegKeyExists(HKEY_LOCAL_MACHINE,
|
|
||||||
'SOFTWARE\' + GetWowNode + 'Microsoft\NET Framework Setup\NDP\v4');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Asserts if the VSTO runtime for .NET 4.0 redistributable needs to be
|
|
||||||
/// downloaded and installed.
|
|
||||||
/// If Office 2010 SP 1 or newer is installed on the system, the VSTOR runtime
|
|
||||||
/// will be automagically configured as long as the .NET 4.0 runtime is present.
|
|
||||||
/// Office 2007 and Office 2010 without service pack need the VSTO runtime
|
|
||||||
/// redistributable. For details, see:
|
|
||||||
/// http://xltoolbox.sf.net/blog/2015/01/net-vsto-add-ins-getting-prerequisites-right
|
|
||||||
function NeedToInstallVstor(): boolean;
|
|
||||||
begin
|
|
||||||
result := false; // Default for Office 2010 SP1 or newer
|
|
||||||
if IsOffice2007Installed or IsOffice2010NoSpInstalled then
|
|
||||||
result := not IsVstorInstalled;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if all required prerequisites are met, i.e. if the necessary
|
|
||||||
/// runtimes are installed on the system
|
|
||||||
function PrerequisitesAreMet(): boolean;
|
|
||||||
begin
|
|
||||||
// Cache check result to avoid multiple registry lookups and log messages
|
|
||||||
if not prerequisitesChecked then
|
|
||||||
begin
|
|
||||||
prerequisitesMet := IsNetInstalled and not NeedToInstallVstor;
|
|
||||||
prerequisitesChecked := true;
|
|
||||||
end;
|
|
||||||
result := prerequisitesMet;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if a file exists and has a valid Sha1 sum.
|
|
||||||
function IsFileValid(file: string; expectedSha1: string): boolean;
|
|
||||||
var
|
|
||||||
actualSha1: string;
|
|
||||||
begin
|
|
||||||
try
|
|
||||||
if FileExists(file) then
|
|
||||||
begin
|
|
||||||
actualSha1 := GetSHA1OfFile(file);
|
|
||||||
end;
|
|
||||||
finally
|
|
||||||
result := actualSha1 = expectedSha1;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Returns the path to the downloaded VSTO runtime installer.
|
|
||||||
function GetVstorInstallerPath(): string;
|
|
||||||
begin
|
|
||||||
result := ExpandConstant('{%temp}\vstor_redist_40.exe');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Returns the path to the downloaded .NET runtime installer.
|
|
||||||
function GetNetInstallerPath(): string;
|
|
||||||
begin
|
|
||||||
result := ExpandConstant('{%temp}\dotNetFx40_Full_x86_x64.exe');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if the VSTO runtime redistributable setup file has already been
|
|
||||||
/// downloaded by comparing SHA1 checksums.
|
|
||||||
function IsVstorDownloaded(): boolean;
|
|
||||||
begin
|
|
||||||
result := IsFileValid(GetVstorInstallerPath, '{#VSTORSHA1}');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Checks if the .NET runtime setup file has already been
|
|
||||||
/// downloaded by comparing SHA1 checksums.
|
|
||||||
function IsNetDownloaded(): boolean;
|
|
||||||
begin
|
|
||||||
result := IsFileValid(GetNetInstallerPath, '{#DOTNETSHA1}');
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Determines if the VSTO runtime needs to be downloaded.
|
|
||||||
/// This is not the case it the runtime is already installed,
|
|
||||||
/// or if there is a file with a valid Sha1 sum.
|
|
||||||
function NeedToDownloadVstor: boolean;
|
|
||||||
begin
|
|
||||||
result := NeedToInstallVstor and not IsVstorDownloaded;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Determines if the VSTO runtime needs to be downloaded.
|
|
||||||
/// This is not the case it the runtime is already installed,
|
|
||||||
/// or if there is a file with a valid Sha1 sum.
|
|
||||||
function NeedToDownloadNet: boolean;
|
|
||||||
begin
|
|
||||||
result := not IsNetInstalled and not IsNetDownloaded;
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Determines whether or not a system-wide installation
|
|
||||||
/// is possible. This depends on whether the current user
|
|
||||||
/// is an administrator, and whether the hotfix KB976477
|
|
||||||
/// is present on the system if Word 2007 is the only version
|
|
||||||
/// of Word that is present (without that hotfix, Word
|
|
||||||
/// 2007 does not load add-ins that are registered in the
|
|
||||||
/// HKLM hive).
|
|
||||||
function CanInstallSystemWide(): boolean;
|
|
||||||
begin
|
|
||||||
if IsAdminLoggedOn then
|
|
||||||
begin
|
|
||||||
if IsOnlyWord2007Installed then
|
|
||||||
begin
|
|
||||||
result := IsHotfixInstalled;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
result := true;
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
result := false;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure CreateSingleOrAllUserPage();
|
|
||||||
begin
|
|
||||||
PageSingleOrMultiUser := CreateInputOptionPage(wpLicense,
|
|
||||||
CustomMessage('SingleOrMulti'), CustomMessage('SingleOrMultiSubcaption'),
|
|
||||||
CustomMessage('SingleOrMultiDesc'), True, False);
|
|
||||||
PageSingleOrMultiUser.Add(CustomMessage('SingleOrMultiSingle'));
|
|
||||||
PageSingleOrMultiUser.Add(CustomMessage('SingleOrMultiAll'));
|
|
||||||
if CanInstallSystemWide then
|
|
||||||
begin
|
|
||||||
PageSingleOrMultiUser.Values[1] := True;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
PageSingleOrMultiUser.Values[0] := True;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure CreateCannotInstallPage();
|
|
||||||
begin
|
|
||||||
PageCannotInstall := CreateInputOptionPage(wpWelcome,
|
|
||||||
CustomMessage('CannotInstallCaption'),
|
|
||||||
CustomMessage('CannotInstallDesc'),
|
|
||||||
CustomMessage('CannotInstallMsg'), True, False);
|
|
||||||
PageCannotInstall.Add(CustomMessage('CannotInstallCont'));
|
|
||||||
PageCannotInstall.Add(CustomMessage('CannotInstallAbort'));
|
|
||||||
PageCannotInstall.Values[1] := True;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure CreateDownloadInfoPage();
|
|
||||||
var
|
|
||||||
bytes: Int64;
|
|
||||||
mib: Single;
|
|
||||||
size: String;
|
|
||||||
begin
|
|
||||||
if idpGetFilesSize(bytes) then
|
|
||||||
begin
|
|
||||||
mib := bytes / 1048576;
|
|
||||||
size := Format('%.1f', [ mib ]);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
size := '[?]'
|
|
||||||
end;
|
|
||||||
PageDownloadInfo := CreateOutputMsgPage(PageSingleOrMultiUser.Id,
|
|
||||||
CustomMessage('RequiredCaption'),
|
|
||||||
CustomMessage('RequiredDesc'),
|
|
||||||
Format(CustomMessage('RequiredMsg'), [idpFilesCount, size]));
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure CreateInstallInfoPage();
|
|
||||||
begin
|
|
||||||
PageInstallInfo := CreateOutputMsgPage(PageDownloadInfo.Id,
|
|
||||||
CustomMessage('InstallCaption'),
|
|
||||||
CustomMessage('InstallDesc'),
|
|
||||||
CustomMessage('InstallMsg'));
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
function InitializeSetup(): boolean;
|
|
||||||
var
|
|
||||||
minWordInstalled: boolean;
|
|
||||||
i: integer;
|
|
||||||
begin
|
|
||||||
// Determine if Word 2007 or newer is installed (absolute requirement
|
|
||||||
// for this VSTO add-in). Word 2007 ist version 12.0.
|
|
||||||
for i := 12 to maxWord do
|
|
||||||
begin
|
|
||||||
minWordInstalled := minWordInstalled or IsWordVersionInstalled(i);
|
|
||||||
end;
|
|
||||||
|
|
||||||
if not minWordInstalled then
|
|
||||||
begin
|
|
||||||
result := False;
|
|
||||||
Log('Informing user that Word 2007 or newer is required.');
|
|
||||||
MsgBox(CustomMessage('Word2007Required'), mbInformation, MB_OK);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
result := True;
|
|
||||||
end
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure InitializeWizard();
|
|
||||||
begin
|
|
||||||
// CreateDevelopmentInfoPage;
|
|
||||||
CreateSingleOrAllUserPage;
|
|
||||||
if not PrerequisitesAreMet then
|
|
||||||
begin
|
|
||||||
Log('Not all prerequisites are met...');
|
|
||||||
CreateCannotInstallPage;
|
|
||||||
if NeedToDownloadNet then
|
|
||||||
begin
|
|
||||||
Log('Mark {#DOTNETURL} for download.');
|
|
||||||
idpAddFileSize('{#DOTNETURL}', GetNetInstallerPath, 50449456);
|
|
||||||
end;
|
|
||||||
if NeedToDownloadVstor then
|
|
||||||
begin
|
|
||||||
Log('Mark {#VSTORURL} for download.');
|
|
||||||
idpAddFileSize('{#VSTORURL}', GetVstorInstallerPath, 40123576);
|
|
||||||
end;
|
|
||||||
CreateDownloadInfoPage;
|
|
||||||
CreateInstallInfoPage;
|
|
||||||
idpDownloadAfter(PageDownloadInfo.Id);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function ExecuteNetSetup(): boolean;
|
|
||||||
var
|
|
||||||
exitCode: integer;
|
|
||||||
begin
|
|
||||||
result := true;
|
|
||||||
if not IsNetInstalled then
|
|
||||||
begin
|
|
||||||
if IsNetDownloaded then
|
|
||||||
begin
|
|
||||||
Log('Valid .NET runtime download found, installing.');
|
|
||||||
Exec(GetNetInstallerPath, '/norestart',
|
|
||||||
'', SW_SHOW, ewWaitUntilTerminated, exitCode);
|
|
||||||
BringToFrontAndRestore;
|
|
||||||
if not IsNetInstalled then
|
|
||||||
begin
|
|
||||||
MsgBox(CustomMessage('StillNotInstalled'), mbInformation, MB_OK);
|
|
||||||
result := False;
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Log('No or invalid .NET runtime download found, will not install.');
|
|
||||||
MsgBox(CustomMessage('DownloadNotValidated'), mbInformation, MB_OK);
|
|
||||||
result := False;
|
|
||||||
end;
|
|
||||||
end; // not IsNetInstalled
|
|
||||||
end;
|
|
||||||
|
|
||||||
function ExecuteVstorSetup(): boolean;
|
|
||||||
var
|
|
||||||
exitCode: integer;
|
|
||||||
begin
|
|
||||||
result := true;
|
|
||||||
if NeedToInstallVstor then
|
|
||||||
begin
|
|
||||||
if IsVstorDownloaded then
|
|
||||||
begin
|
|
||||||
Log('Valid VSTO runtime download found, installing.');
|
|
||||||
Exec(GetVstorInstallerPath, '/norestart', '', SW_SHOW,
|
|
||||||
ewWaitUntilTerminated, exitCode);
|
|
||||||
BringToFrontAndRestore;
|
|
||||||
if not IsVstorInstalled then
|
|
||||||
begin
|
|
||||||
MsgBox(CustomMessage('StillNotInstalled'), mbInformation, MB_OK);
|
|
||||||
result := False;
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Log('No or invalid VSTO runtime download found, will not install.');
|
|
||||||
MsgBox(CustomMessage('DownloadNotValidated'), mbInformation, MB_OK);
|
|
||||||
result := False;
|
|
||||||
end;
|
|
||||||
end; // not IsVstorInstalled
|
|
||||||
end;
|
|
||||||
|
|
||||||
function NextButtonClick(CurPageID: Integer): Boolean;
|
|
||||||
begin
|
|
||||||
result := True;
|
|
||||||
{
|
|
||||||
if not WizardSilent then
|
|
||||||
begin
|
|
||||||
if CurPageID = PageDevelopmentInfo.Id then
|
|
||||||
begin
|
|
||||||
if PageDevelopmentInfo.Values[0] = False then
|
|
||||||
begin
|
|
||||||
Log('Requesting user to acknowledge use of a developmental version.');
|
|
||||||
MsgBox(CustomMessage('DevVerMsgBox'), mbInformation, MB_OK);
|
|
||||||
result := False;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if not PrerequisitesAreMet then
|
|
||||||
begin
|
|
||||||
// Abort the installation if any of the runtimes are missing, the user
|
|
||||||
// is not an administrator, and requested to abort the installation.
|
|
||||||
if CurPageID = PageCannotInstall.ID then
|
|
||||||
begin
|
|
||||||
if PageCannotInstall.Values[1] = true then
|
|
||||||
begin
|
|
||||||
WizardForm.Close;
|
|
||||||
result := False;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Log('Non-admin user continues although not all required runtimes are installed.');
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if CurPageID = PageInstallInfo.ID then
|
|
||||||
begin
|
|
||||||
// Return true if installation succeeds (or no installation required)
|
|
||||||
result := ExecuteNetSetup and ExecuteVstorSetup;
|
|
||||||
end;
|
|
||||||
end; // not PrerequisitesAreMet
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Skips the folder selection, single/multi user, and ready pages for
|
|
||||||
/// normal users without power privileges.
|
|
||||||
/// This function also takes care of dynamically determining what wizard
|
|
||||||
/// pages to install, depending on the current system setup and whether
|
|
||||||
/// the current user is an administrator.
|
|
||||||
function ShouldSkipPage(PageID: Integer): Boolean;
|
|
||||||
begin
|
|
||||||
result := False;
|
|
||||||
|
|
||||||
if not PrerequisitesAreMet then
|
|
||||||
begin
|
|
||||||
// The PageDownloadCannotInstall will only have been initialized if
|
|
||||||
// PrerequisitesAreMet returned false.
|
|
||||||
if PageID = PageCannotInstall.ID then
|
|
||||||
begin
|
|
||||||
// Skip the warning if the user is an admin.
|
|
||||||
result := IsAdminLoggedOn
|
|
||||||
if not result then
|
|
||||||
begin
|
|
||||||
Log('Warning user that required runtimes cannot be installed due to missing privileges');
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if PageID = PageDownloadInfo.ID then
|
|
||||||
begin
|
|
||||||
// Skip page informing about downloads if no files need to be downloaded.
|
|
||||||
result := idpFilesCount = 0;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if PageID = IDPForm.Page.ID then
|
|
||||||
begin
|
|
||||||
// Skip downloader plugin if there are no files to download.
|
|
||||||
result := idpFilesCount = 0;
|
|
||||||
if not result then
|
|
||||||
begin
|
|
||||||
Log('Beginning download of ' + IntToStr(idpFilesCount) + ' file(s).');
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end; // not PrerequisitesAreMet
|
|
||||||
|
|
||||||
if PageID = PageSingleOrMultiUser.ID then
|
|
||||||
begin
|
|
||||||
if IsOnlyWord2007Installed then
|
|
||||||
begin
|
|
||||||
Log('Only Word 2007 appears to be installed on this system.');
|
|
||||||
if IsHotfixInstalled then
|
|
||||||
begin
|
|
||||||
Log('Hotfix KB976477 found; can install for all users.');
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Log('Hotfix KB976477 not found; cannot install for all users.');
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Log('Word 2010 or newer found on this system.');
|
|
||||||
end;
|
|
||||||
if CanInstallSystemWide then
|
|
||||||
begin
|
|
||||||
Log('Offer installation for all users.');
|
|
||||||
result := False;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Log('Offer single-user installation only.');
|
|
||||||
result := True;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
if (PageID = wpSelectDir) or (PageID = wpReady) then
|
|
||||||
begin
|
|
||||||
// Do not show the pages to select the target directory, and the ready
|
|
||||||
// page if the user is not an admin.
|
|
||||||
result := not IsAdminLoggedOn;
|
|
||||||
end
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Helper function that evaluates the custom PageSingleOrMultiUser page.
|
|
||||||
function IsMultiUserInstall(): Boolean;
|
|
||||||
begin
|
|
||||||
result := PageSingleOrMultiUser.Values[1];
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Suggest an initial target directory depending on whether
|
|
||||||
/// the installer is run with admin privileges.
|
|
||||||
function SuggestInstallDir(Param: string): string;
|
|
||||||
var
|
|
||||||
dir: string;
|
|
||||||
begin
|
|
||||||
if CanInstallSystemWide then
|
|
||||||
begin
|
|
||||||
dir := ExpandConstant('{pf}');
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
dir := ExpandConstant('{userappdata}');
|
|
||||||
end;
|
|
||||||
result := AddBackslash(dir) + 'zaaReloaded';
|
|
||||||
end;
|
|
||||||
|
|
||||||
/// Converts backslashes to forward slashes.
|
|
||||||
function ConvertSlash(Value: string): string;
|
|
||||||
begin
|
|
||||||
StringChangeEx(Value, '\', '/', True);
|
|
||||||
Result := Value;
|
|
||||||
end;
|
|
@ -22,9 +22,7 @@
|
|||||||
<![endif]-->
|
<![endif]-->
|
||||||
<title>zaaReloaded2</title>
|
<title>zaaReloaded2</title>
|
||||||
<meta name="author" content="Daniel Kraus">
|
<meta name="author" content="Daniel Kraus">
|
||||||
<meta name="descrption" content="Add-in für Microsoft Word 2010-2013,
|
<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.">
|
||||||
das die Zentrale Arztbriefablage um Funktionen für das Formatieren von
|
|
||||||
Laborwerten erweitert.">
|
|
||||||
<link rel="icon" type="image/png" href="img/icon.png">
|
<link rel="icon" type="image/png" href="img/icon.png">
|
||||||
<style>
|
<style>
|
||||||
floatbox {
|
floatbox {
|
||||||
@ -370,7 +368,7 @@
|
|||||||
|
|
||||||
<footer class="footer">
|
<footer class="footer">
|
||||||
<p>
|
<p>
|
||||||
© 2015 <a href="http://www.bovender.de">Daniel Kraus</a>
|
© 2015-2016 <a href="http://www.bovender.de">Daniel Kraus</a>
|
||||||
<span class="pull-right">
|
<span class="pull-right">
|
||||||
Handarbeit mit
|
Handarbeit mit
|
||||||
<a href="http://www.vim.org">
|
<a href="http://www.vim.org">
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
2.1.0
|
2.2.3
|
||||||
http://zaa.nephrowiki.de/downloads/zaaReloaded-2.1.0.exe
|
http://zaa.nephrowiki.de/downloads/zaaReloaded-$VERSION.exe
|
||||||
41976c8ac85092c12139884b175d1e8eadc7636b publish/release/zaaReloaded-2.1.0.exe
|
077df8d43cf97ef4082cda988393734a825b51cf0e023527cdc5752502c83f03 deploy/releases/zaaReloaded-2.2.3.exe
|
||||||
|
|
||||||
|
@ -138,6 +138,47 @@ namespace zaaReloaded2
|
|||||||
Globals.ThisAddIn.Application.Selection);
|
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
|
#endregion
|
||||||
|
|
||||||
#region Private methods
|
#region Private methods
|
||||||
|
@ -197,9 +197,12 @@ namespace zaaReloaded2.Controller.Comments
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected virtual void OnFillInComment()
|
protected virtual void OnFillInComment()
|
||||||
{
|
{
|
||||||
|
if (_isFilledIn) return;
|
||||||
|
|
||||||
EventHandler<ItemCommentEventArgs> h = FillInComment;
|
EventHandler<ItemCommentEventArgs> h = FillInComment;
|
||||||
if (h != null)
|
if (h != null)
|
||||||
{
|
{
|
||||||
|
_isFilledIn = true;
|
||||||
h(this, new ItemCommentEventArgs(this));
|
h(this, new ItemCommentEventArgs(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,6 +211,7 @@ namespace zaaReloaded2.Controller.Comments
|
|||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
|
bool _isFilledIn;
|
||||||
static readonly Regex _definition =
|
static readonly Regex _definition =
|
||||||
new Regex(@"(?<item>[^""]+)""(?<prefix>[^<]+)?<(?<value>[^>]*)>(?<suffix>[^""]+)?""");
|
new Regex(@"(?<item>[^""]+)""(?<prefix>[^<]+)?<(?<value>[^>]*)>(?<suffix>[^""]+)?""");
|
||||||
|
|
||||||
|
@ -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">
|
<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>
|
<Version>2</Version>
|
||||||
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
<_a>726346026</_a>
|
<_a>-903942278</_a>
|
||||||
<_b>-9272</_b>
|
<_b>-22298</_b>
|
||||||
<_c>16670</_c>
|
<_c>17811</_c>
|
||||||
<_d>156</_d>
|
<_d>139</_d>
|
||||||
<_e>154</_e>
|
<_e>190</_e>
|
||||||
<_f>68</_f>
|
<_f>233</_f>
|
||||||
<_g>185</_g>
|
<_g>83</_g>
|
||||||
<_h>192</_h>
|
<_h>158</_h>
|
||||||
<_i>11</_i>
|
<_i>73</_i>
|
||||||
<_j>64</_j>
|
<_j>21</_j>
|
||||||
<_k>27</_k>
|
<_k>115</_k>
|
||||||
</Uid>
|
</Uid>
|
||||||
<Name id="ref-3">Kopie von Standard für NepA</Name>
|
<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>
|
<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"/>
|
<Child16Object href="#ref-25"/>
|
||||||
<Child17Type href="#ref-8"/>
|
<Child17Type href="#ref-8"/>
|
||||||
<Child17Object href="#ref-26"/>
|
<Child17Object href="#ref-26"/>
|
||||||
<Child18Type href="#ref-27"/>
|
<Child18Type href="#ref-8"/>
|
||||||
<Child18Object href="#ref-28"/>
|
<Child18Object href="#ref-27"/>
|
||||||
<Child19Type href="#ref-27"/>
|
<Child19Type href="#ref-28"/>
|
||||||
<Child19Object href="#ref-29"/>
|
<Child19Object href="#ref-29"/>
|
||||||
<Child20Type href="#ref-27"/>
|
<Child20Type href="#ref-28"/>
|
||||||
<Child20Object href="#ref-30"/>
|
<Child20Object href="#ref-30"/>
|
||||||
<Child21Type href="#ref-8"/>
|
<Child21Type href="#ref-28"/>
|
||||||
<Child21Object href="#ref-31"/>
|
<Child21Object href="#ref-31"/>
|
||||||
</a4:SelectEachDay>
|
</a4:SelectEachDay>
|
||||||
<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
@ -90,23 +90,23 @@
|
|||||||
</a4:Items>
|
</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">
|
<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>
|
<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>
|
||||||
<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">
|
<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>
|
<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>
|
||||||
<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">
|
<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>
|
<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>
|
||||||
<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">
|
<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>
|
<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>
|
||||||
<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">
|
<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>
|
<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>
|
||||||
<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">
|
<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>
|
<Version>2</Version>
|
||||||
@ -130,7 +130,7 @@
|
|||||||
</a4:Items>
|
</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">
|
<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>
|
<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>
|
||||||
<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">
|
<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>
|
<Version>2</Version>
|
||||||
@ -150,28 +150,28 @@
|
|||||||
</a4:Items>
|
</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">
|
<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>
|
<Version>2</Version>
|
||||||
<Content id="ref-50">Medikamente: TAC "(Ziel-Talspiegel: <*** BITTE ANGEBEN***> µg/l)", CSA (C0) "(Ziel-Talspiegel: <*** BITTE ANGEBEN***> µg/l)", SIR "(Ziel-Talspiegel: <*** BITTE ANGEBEN***> µg/l)", 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>
|
</a4:Items>
|
||||||
<a2:UnitySerializationHolder id="ref-27" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
<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">
|
||||||
<Data id="ref-51">zaaReloaded2.Controller.Elements.CustomText</Data>
|
<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>
|
<UnityType>4</UnityType>
|
||||||
<AssemblyName href="#ref-7"/>
|
<AssemblyName href="#ref-7"/>
|
||||||
</a2:UnitySerializationHolder>
|
</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">
|
<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>
|
<Version>2</Version>
|
||||||
<Content id="ref-53">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
|
<Content id="ref-53">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
|
||||||
</a4:CustomText>
|
</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">
|
<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>
|
<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: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>
|
<Version>2</Version>
|
||||||
<Content id="ref-55">Tumormarker: PSA</Content>
|
<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:Items>
|
</a4:CustomText>
|
||||||
</SOAP-ENV:Body>
|
</SOAP-ENV:Body>
|
||||||
</SOAP-ENV:Envelope>
|
</SOAP-ENV:Envelope>
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# =========== ================== ======== ============== ======================= ===========
|
# =========== ================== ======== ============== ======================= ===========
|
||||||
"a1-Microglobulin (SU)" a1-Microglobulin SU
|
"a1-Microglobulin (SU)" a1-Microglobulin SU
|
||||||
"a1-Microglobulin (SU)/die" a1-Microglobulin SU
|
"a1-Microglobulin (SU)/die" a1-Microglobulin SU
|
||||||
|
"AFP (ECL, Elecsys, Roche)" AFP S --- X
|
||||||
"aktuelles Bicarbonat" Bic BGA
|
"aktuelles Bicarbonat" Bic BGA
|
||||||
Albumin Alb S
|
Albumin Alb S
|
||||||
"Albumin (PU)" Alb U
|
"Albumin (PU)" Alb U
|
||||||
@ -9,6 +10,8 @@ Albumin Alb S
|
|||||||
"Albumin (SU)/die" 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
|
"Albumin/Creatinin (PU)" ACR U 0
|
||||||
|
Aldosteron Aldosteron S --- X
|
||||||
|
Aldosteron-Renin-Quotient ARQ S --- X
|
||||||
"Alk. Phosphatase" AP S 0
|
"Alk. Phosphatase" AP S 0
|
||||||
"Alpha1-Globulin - Fraktion" a1-Globulin S --- X
|
"Alpha1-Globulin - Fraktion" a1-Globulin S --- X
|
||||||
"Alpha2-Globulin - Fraktion" a2-Globulin S --- X
|
"Alpha2-Globulin - Fraktion" a2-Globulin S --- X
|
||||||
@ -27,7 +30,7 @@ Calcium Ca S
|
|||||||
"Calcium (SU)/die" Ca SU
|
"Calcium (SU)/die" Ca SU
|
||||||
Calcium-Phosphat-Produkt CaxP S
|
Calcium-Phosphat-Produkt CaxP S
|
||||||
Cholesterin Chol S
|
Cholesterin Chol S
|
||||||
CK gesamt" CK S --- X
|
"CK gesamt" CK S --- X
|
||||||
"CK MB" CK-MB S
|
"CK MB" CK-MB S
|
||||||
Creatinin Krea S 1
|
Creatinin Krea S 1
|
||||||
"Creatinin (PU)" Krea U 0
|
"Creatinin (PU)" Krea U 0
|
||||||
@ -50,7 +53,7 @@ Gesamt-Bilirubin Bilirubin S
|
|||||||
Gesamt-Eiweiss Protein S
|
Gesamt-Eiweiss Protein S
|
||||||
"Gesamt-Eiweiss (PU)" Protein U
|
"Gesamt-Eiweiss (PU)" Protein U
|
||||||
"Gesamt-Eiweiss (SU)" Protein SU
|
"Gesamt-Eiweiss (SU)" Protein SU
|
||||||
"Gesamt-Eiweiss (SU)/die" Proteinurie SU
|
"Gesamt-Eiweiss (SU)/die" Prot SU
|
||||||
"Gesamt-Eiweiss/Creatinin (PU)" TPCR U 0
|
"Gesamt-Eiweiss/Creatinin (PU)" TPCR U 0
|
||||||
GGT GGT S 0
|
GGT GGT S 0
|
||||||
"glomerul. Filtrationsr. (MDRD)" "eGFR (MDRD)" S --- --- X
|
"glomerul. Filtrationsr. (MDRD)" "eGFR (MDRD)" S --- --- X
|
||||||
@ -64,7 +67,7 @@ Haptoglobin Haptoglobin S ---
|
|||||||
HAPTOGLOBIN Haptoglobin S --- X
|
HAPTOGLOBIN Haptoglobin S --- X
|
||||||
"Harnstoff (SU)" Hst SU
|
"Harnstoff (SU)" Hst SU
|
||||||
"Harnstoff (SU)/die" Hst/Tag SU
|
"Harnstoff (SU)/die" Hst/Tag SU
|
||||||
Harnstoff" Hst S
|
Harnstoff Hst S
|
||||||
"Harnstoff-Clearance (SU)/min" HstCl SU
|
"Harnstoff-Clearance (SU)/min" HstCl SU
|
||||||
Harnsäure Harnsäure S
|
Harnsäure Harnsäure S
|
||||||
"HbA1c (NGSP)" HbA1c E
|
"HbA1c (NGSP)" HbA1c E
|
||||||
@ -78,12 +81,14 @@ Kalium K S
|
|||||||
"Kalium (SU)" K U
|
"Kalium (SU)" K U
|
||||||
"Kalium (SU)/die" K SU
|
"Kalium (SU)/die" K SU
|
||||||
"Ketonkörper (U)" KK U
|
"Ketonkörper (U)" KK U
|
||||||
|
"kohlenhyd. def. Transferrin" CDT S 1 X
|
||||||
"Komplementfaktor C3c" C3c S --- X
|
"Komplementfaktor C3c" C3c S --- X
|
||||||
"Komplementfaktor C4" C4 S --- X
|
"Komplementfaktor C4" C4 S --- X
|
||||||
"Lactat Dehydrogenase" LDH S
|
"Lactat Dehydrogenase" LDH S
|
||||||
"LDL - Cholesterin" LDL S
|
"LDL - Cholesterin" LDL S
|
||||||
Leukozyten Leu E
|
Leukozyten Leu E
|
||||||
"Leukozyten (U)" Leu U
|
"Leukozyten (U)" Leu U
|
||||||
|
"Lipoprotein (a) (Gen. 2)" Lp(a) S 0 X
|
||||||
Lymphozyten Lym E
|
Lymphozyten Lym E
|
||||||
Magnesium Mg S --- X
|
Magnesium Mg S --- X
|
||||||
"MCH (HbE)" MCH E 0
|
"MCH (HbE)" MCH E 0
|
||||||
@ -108,10 +113,12 @@ pH pH BGA
|
|||||||
"PTH intakt" iPTH S
|
"PTH intakt" iPTH S
|
||||||
PTT PTT Z
|
PTT PTT Z
|
||||||
"Ratio int. norm." INR Z
|
"Ratio int. norm." INR Z
|
||||||
|
Plasma-Renin-Konzentration Renin S --- X
|
||||||
Retikulozyten Retikulozyten E --- X
|
Retikulozyten Retikulozyten E --- X
|
||||||
"Sammelmenge (U)" Volumen SU
|
"Sammelmenge (U)" Volumen SU
|
||||||
"Sammelzeit (U)" Zeit SU
|
"Sammelzeit (U)" Zeit SU
|
||||||
"Sauerstoffsättigung (art.)" SO2 BGA
|
"Sauerstoffsättigung (art.)" SO2 BGA
|
||||||
|
"Schwangerschaftstest (U)" Schwangerschaftstest U
|
||||||
Sirolimus SIR S
|
Sirolimus SIR S
|
||||||
"spezifisches Gewicht (U)" "spez. Gew." U
|
"spezifisches Gewicht (U)" "spez. Gew." U
|
||||||
"Standard Bicarbonat" "Std.-Bic." BGA
|
"Standard Bicarbonat" "Std.-Bic." BGA
|
||||||
@ -121,7 +128,7 @@ Thrombozyten Thr E
|
|||||||
Transferrin Transferrin S
|
Transferrin Transferrin S
|
||||||
"Transferrinsättigung" Tf.-Sätt. S
|
"Transferrinsättigung" Tf.-Sätt. S
|
||||||
"Triglyceride" TG S
|
"Triglyceride" TG S
|
||||||
"Troponin T (high sensitive)" hsTnT S
|
"Troponin (high sensitive)" hsTnT S
|
||||||
TSH TSH S
|
TSH TSH S
|
||||||
"Übergangsepithelien (U)" Übergangsep. U
|
"Übergangsepithelien (U)" Übergangsep. U
|
||||||
"Unreife Granulozyten" Gran E
|
"Unreife Granulozyten" Gran E
|
||||||
|
@ -3,21 +3,21 @@
|
|||||||
<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">
|
<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>
|
<Version>2</Version>
|
||||||
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
<_a>726346026</_a>
|
<_a>1038630179</_a>
|
||||||
<_b>-9272</_b>
|
<_b>-1437</_b>
|
||||||
<_c>16670</_c>
|
<_c>19419</_c>
|
||||||
<_d>156</_d>
|
<_d>151</_d>
|
||||||
<_e>154</_e>
|
<_e>122</_e>
|
||||||
<_f>68</_f>
|
<_f>7</_f>
|
||||||
<_g>185</_g>
|
<_g>44</_g>
|
||||||
<_h>192</_h>
|
<_h>130</_h>
|
||||||
<_i>11</_i>
|
<_i>195</_i>
|
||||||
<_j>64</_j>
|
<_j>52</_j>
|
||||||
<_k>27</_k>
|
<_k>194</_k>
|
||||||
</Uid>
|
</Uid>
|
||||||
<Name id="ref-3">neu fuer Station</Name>
|
<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">IfSpecialOrAbnormal</ReferenceStyle>
|
<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">Bold</AbnormalStyle>
|
<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>
|
<ElementsCount>4</ElementsCount>
|
||||||
<Element0Type href="#ref-4"/>
|
<Element0Type href="#ref-4"/>
|
||||||
<Element0Object href="#ref-5"/>
|
<Element0Object href="#ref-5"/>
|
||||||
@ -167,19 +167,19 @@
|
|||||||
</a4:Items>
|
</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">
|
<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>2</Version>
|
<Version>2</Version>
|
||||||
<Content id="ref-44">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Content>
|
<Content id="ref-44">Kardiale Marker: CK, CKMB, hsTnT, NT-proBNP</Content>
|
||||||
</a4:Items>
|
</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">
|
<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>2</Version>
|
<Version>2</Version>
|
||||||
<Content id="ref-45">Niere: Krea, Hst, eGFR (CKD-EPI)</Content>
|
<Content id="ref-45">Niere: Krea, Hst, eGFR (CKD-EPI), Cystatin C</Content>
|
||||||
</a4:Items>
|
</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">
|
<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>2</Version>
|
<Version>2</Version>
|
||||||
<Content id="ref-46">Sammelurin: SU-Proteinurie, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Natrium, SU-Zeit, SU-Volumen</Content>
|
<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>
|
||||||
<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">
|
<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>
|
<Version>2</Version>
|
||||||
<Content id="ref-47">Spot-Urin: U-TPCR, U-ACR, U-Ery, U-Leu, U-Bakt</Content>
|
<Content id="ref-47">Spot-Urin: U-TPCR, U-ACR, U-Alb, U-Ery, U-Leu, U-Bakt</Content>
|
||||||
</a4:Items>
|
</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">
|
<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>
|
<Version>2</Version>
|
||||||
@ -227,7 +227,7 @@
|
|||||||
</a4:Items>
|
</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">
|
<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>
|
<Version>2</Version>
|
||||||
<Content id="ref-59">Medikamente: TAC "(Ziel-Talspiegel: <*** BITTE ANGEBEN***> µg/l)", CSA (C0) "(Ziel-Talspiegel: <*** BITTE ANGEBEN***> µg/l)", SIR "(Ziel-Talspiegel: <*** BITTE ANGEBEN***> µg/l)", Vancomycin, Gentamicin, Tobramicin</Content>
|
<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>
|
</a4:Items>
|
||||||
<a2:UnitySerializationHolder id="ref-34" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
<a2:UnitySerializationHolder id="ref-34" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
<Data id="ref-60">zaaReloaded2.Controller.Elements.CustomText</Data>
|
<Data id="ref-60">zaaReloaded2.Controller.Elements.CustomText</Data>
|
||||||
@ -236,11 +236,11 @@
|
|||||||
</a2:UnitySerializationHolder>
|
</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">
|
<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>
|
<Version>2</Version>
|
||||||
<Content id="ref-61">Virologie (EDTA-Blut): CMV-PCR, BKV-PCR</Content>
|
<Content id="ref-61">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
|
||||||
</a4:CustomText>
|
</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">
|
<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>
|
<Version>2</Version>
|
||||||
<Content id="ref-62">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
|
<Content id="ref-62">Virologie (EDTA-Blut): CMV-PCR, BKV-PCR</Content>
|
||||||
</a4:CustomText>
|
</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">
|
<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>
|
<Version>2</Version>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
settings:WindowState.Save="True"
|
settings:WindowState.Save="True"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<DockPanel Margin="10">
|
<DockPanel Margin="10">
|
||||||
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,0,0">
|
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,10,0,0">
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
Title="Fehlerbericht versenden"
|
Title="Fehlerbericht versenden"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<StackPanel Margin="10" Orientation="Horizontal">
|
<StackPanel Margin="10" Orientation="Horizontal">
|
||||||
<TextBlock FontSize="72" FontWeight="Bold" Foreground="Red" Margin="0,0,10,0"
|
<TextBlock FontSize="72" FontWeight="Bold" Foreground="Red" Margin="0,0,10,0"
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
SizeToContent="WidthAndHeight"
|
SizeToContent="WidthAndHeight"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<i:Interaction.Triggers>
|
<i:Interaction.Triggers>
|
||||||
<i:EventTrigger SourceObject="{Binding CompletedMessage}" EventName="Sent">
|
<i:EventTrigger SourceObject="{Binding CompletedMessage}" EventName="Sent">
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
Title="Fehlerbericht versenden"
|
Title="Fehlerbericht versenden"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<StackPanel Margin="10" Orientation="Horizontal">
|
<StackPanel Margin="10" Orientation="Horizontal">
|
||||||
<TextBlock FontSize="48" FontWeight="Bold" Foreground="GreenYellow" Margin="0,0,10,0"
|
<TextBlock FontSize="48" FontWeight="Bold" Foreground="GreenYellow" Margin="0,0,10,0"
|
||||||
|
@ -69,9 +69,10 @@ namespace zaaReloaded2.Formatter
|
|||||||
find.Execute2007(FindText: "Assistent der Klinik", ReplaceWith: "Internist/Nephrologe", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "Assistent der Klinik", ReplaceWith: "Internist/Nephrologe", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "Professor Dr.", ReplaceWith: "Prof. Dr.", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "Professor Dr.", ReplaceWith: "Prof. Dr.", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "mmHg", ReplaceWith: "mm Hg", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "mmHg", ReplaceWith: "mm Hg", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "RR", ReplaceWith: "", Replace: WdReplace.wdReplaceAll, MatchCase: true, MatchWholeWord: true);
|
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: "HF ", ReplaceWith: "", Replace: WdReplace.wdReplaceAll, MatchCase: true, MatchWholeWord: true);
|
||||||
find.Execute2007(FindText: "TAC-Spiegel", ReplaceWith: "Tacrolimus-Talspiegel", Replace: WdReplace.wdReplaceAll);
|
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: "4-7", ReplaceWith: "4 bis 7", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "5-8", ReplaceWith: "5 bis 8", 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);
|
find.Execute2007(FindText: "8-10", ReplaceWith: "8 bis 10", Replace: WdReplace.wdReplaceAll);
|
||||||
|
@ -171,6 +171,14 @@ namespace zaaReloaded2.Formatter
|
|||||||
_buffer.AppendLine(text);
|
_buffer.AppendLine(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Appends a newline to the buffer.
|
||||||
|
/// </summary>
|
||||||
|
public void WriteLine()
|
||||||
|
{
|
||||||
|
_buffer.AppendLine();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Inserts text at the start of the buffer.
|
/// Inserts text at the start of the buffer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -250,7 +258,6 @@ namespace zaaReloaded2.Formatter
|
|||||||
// The splitting pattern must not contain subgroups!
|
// The splitting pattern must not contain subgroups!
|
||||||
static readonly Regex _markupRegex = new Regex(@"(<[^ >]+>)");
|
static readonly Regex _markupRegex = new Regex(@"(<[^ >]+>)");
|
||||||
static readonly Regex _styleRegex = new Regex(@"<style:(?<style>[^>]+)>");
|
static readonly Regex _styleRegex = new Regex(@"<style:(?<style>[^>]+)>");
|
||||||
static Range _highlightStart;
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -142,13 +142,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
// Create undo record and styles prior to iterating over the elements
|
// Create undo record and styles prior to iterating over the elements
|
||||||
// because a column switching element might trigger output to the
|
// because a column switching element might trigger output to the
|
||||||
// document.
|
// document.
|
||||||
bool hasAddin = Globals.ThisAddIn != null;
|
Helpers.StartUndo("Laborformatierung");
|
||||||
if (hasAddin)
|
|
||||||
{
|
|
||||||
Globals.ThisAddIn.Application.UndoRecord.StartCustomRecord(
|
|
||||||
String.Format("Laborformatierung ({0})", Properties.Settings.Default.AddinName)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
CreateStyles();
|
CreateStyles();
|
||||||
|
|
||||||
int current = 0;
|
int current = 0;
|
||||||
@ -177,10 +171,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
}
|
}
|
||||||
|
|
||||||
_secondaryBuffer.Flush();
|
_secondaryBuffer.Flush();
|
||||||
if (hasAddin)
|
Helpers.EndUndo();
|
||||||
{
|
|
||||||
Globals.ThisAddIn.Application.UndoRecord.EndCustomRecord();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
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 |
@ -203,7 +203,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
static readonly Regex _numericalRegex = new Regex(
|
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(
|
static readonly Regex _categoricalRegex = new Regex(
|
||||||
@"(?<name>[^:]+):\s*(?<value>[^[;]+)\s*(\[(?<normal>[^\]]+)])?");
|
@"(?<name>[^:]+):\s*(?<value>[^[;]+)\s*(\[(?<normal>[^\]]+)])?");
|
||||||
static readonly Regex _limitRegex = new Regex(@"\[(?<limit1>[-\d,.]+)?\s*(?<operator>\S+)\s*(?<limit2>[-\d,.]+)?]");
|
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)
|
void ParseParagraph(string paragraph)
|
||||||
{
|
{
|
||||||
if (_timeStampRegex.IsMatch(paragraph))
|
Match m = _timeStampRegex.Match(paragraph);
|
||||||
|
if (m.Success)
|
||||||
{
|
{
|
||||||
DateTime dt;
|
DateTime dt;
|
||||||
if (DateTime.TryParseExact(
|
if (DateTime.TryParseExact(
|
||||||
_timeStampRegex.Match(paragraph).Groups["datetime"].Value,
|
m.Groups["datetime"].Value,
|
||||||
"dd.MM.yyyy HH:mm",
|
"dd.MM.yyyy HH:mm",
|
||||||
CultureInfo.InvariantCulture,
|
CultureInfo.InvariantCulture,
|
||||||
DateTimeStyles.AllowWhiteSpaces,
|
DateTimeStyles.AllowWhiteSpaces,
|
||||||
@ -208,8 +209,24 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
{
|
{
|
||||||
TimeStamp = dt;
|
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
|
else
|
||||||
|
{
|
||||||
|
paragraph = String.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!String.IsNullOrEmpty(paragraph))
|
||||||
{
|
{
|
||||||
LaurisParagraph lp = new LaurisParagraph(
|
LaurisParagraph lp = new LaurisParagraph(
|
||||||
paragraph,
|
paragraph,
|
||||||
@ -236,7 +253,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// paragraph of a LaurisText.
|
/// paragraph of a LaurisText.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static readonly Regex _timeStampRegex = new Regex(
|
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;
|
IList<String> _paragraphs;
|
||||||
Parameters _parameterDictionary;
|
Parameters _parameterDictionary;
|
||||||
Units _unitDictionary;
|
Units _unitDictionary;
|
||||||
|
@ -67,12 +67,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// <param name="text">ZAA-formatted Lauris output to import.</param>
|
/// <param name="text">ZAA-formatted Lauris output to import.</param>
|
||||||
public void Import(string text)
|
public void Import(string text)
|
||||||
{
|
{
|
||||||
// Split the text into parargraphs. This implementation relies on the fact
|
string[] paragraphs = Helpers.SplitParagraphs(text);
|
||||||
// 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);
|
|
||||||
LaurisTimePoint timePoint = null;
|
LaurisTimePoint timePoint = null;
|
||||||
|
|
||||||
foreach (string paragraph in paragraphs)
|
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>
|
/// <summary>
|
||||||
/// Gets the normal value of the item. Need not be set. This is
|
/// Gets the normal value of the item. Need not be set. This is
|
||||||
/// used for items with nominal values (as opposed to numbers).
|
/// used for items with nominal values (as opposed to numbers).
|
||||||
@ -130,6 +143,8 @@ namespace zaaReloaded2.LabModel
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
if (IsExtreme) return false;
|
||||||
|
|
||||||
if (HasLimits)
|
if (HasLimits)
|
||||||
{
|
{
|
||||||
if (HasLowerLimit && HasUpperLimit)
|
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
|
||||||
|
}
|
||||||
|
}
|
23
zaaReloaded2/Properties/Settings.Designer.cs
generated
@ -46,7 +46,7 @@ namespace zaaReloaded2.Properties {
|
|||||||
|
|
||||||
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
[global::System.Configuration.ApplicationScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("2015")]
|
[global::System.Configuration.DefaultSettingValueAttribute("2016")]
|
||||||
public string PubYear {
|
public string PubYear {
|
||||||
get {
|
get {
|
||||||
return ((string)(this["PubYear"]));
|
return ((string)(this["PubYear"]));
|
||||||
@ -264,5 +264,26 @@ namespace zaaReloaded2.Properties {
|
|||||||
return ((string)(this["Repository"]));
|
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"]));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<Value Profile="(Default)">zaaReloaded2</Value>
|
<Value Profile="(Default)">zaaReloaded2</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="PubYear" Type="System.String" Scope="Application">
|
<Setting Name="PubYear" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">2015</Value>
|
<Value Profile="(Default)">2016</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="Authors" Type="System.String" Scope="Application">
|
<Setting Name="Authors" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">Daniel Kraus</Value>
|
<Value Profile="(Default)">Daniel Kraus</Value>
|
||||||
@ -77,5 +77,11 @@
|
|||||||
<Setting Name="Repository" Type="System.String" Scope="Application">
|
<Setting Name="Repository" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">http://git.bovender.de</Value>
|
<Value Profile="(Default)">http://git.bovender.de</Value>
|
||||||
</Setting>
|
</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>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
@ -87,7 +87,7 @@ namespace zaaReloaded2
|
|||||||
{
|
{
|
||||||
switch (control.Id)
|
switch (control.Id)
|
||||||
{
|
{
|
||||||
case "zrlFormat":
|
case "zrlFormatLab":
|
||||||
Commands.Format();
|
Commands.Format();
|
||||||
break;
|
break;
|
||||||
case "zrlSettings":
|
case "zrlSettings":
|
||||||
@ -105,6 +105,12 @@ namespace zaaReloaded2
|
|||||||
case "zrlDemo":
|
case "zrlDemo":
|
||||||
Commands.LoadDemo();
|
Commands.LoadDemo();
|
||||||
break;
|
break;
|
||||||
|
case "zrlFormatDrugsOneCol":
|
||||||
|
Commands.FormatDrugs(1);
|
||||||
|
break;
|
||||||
|
case "zrlFormatDrugsTwoCol":
|
||||||
|
Commands.FormatDrugs(2);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new InvalidOperationException("No operation defined for " + control.Id);
|
throw new InvalidOperationException("No operation defined for " + control.Id);
|
||||||
}
|
}
|
||||||
@ -150,6 +156,11 @@ namespace zaaReloaded2
|
|||||||
return Commands.CanFormat();
|
return Commands.CanFormat();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanFormatDrugs(Office.IRibbonControl control)
|
||||||
|
{
|
||||||
|
return Commands.CanFormat();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Public methods
|
#region Public methods
|
||||||
|
@ -23,12 +23,22 @@
|
|||||||
<ribbon>
|
<ribbon>
|
||||||
<tabs>
|
<tabs>
|
||||||
<tab id="zaaReloaded2" label="zaaReloaded2">
|
<tab id="zaaReloaded2" label="zaaReloaded2">
|
||||||
<group id="zrlFormatGroup" label="Formatieren">
|
<group id="zrlGroupLab" label="Laborwerte">
|
||||||
<button id="zrlFormat" label="Formatieren" image="f.png" onAction="Ribbon_Click" size="large"
|
<button id="zrlFormatLab" label="Formatieren" image="f.png" onAction="Ribbon_Click" size="large"
|
||||||
supertip="Formatiert den ausgewählten Bereich mit dem zuletzt verwendeten Stil."
|
supertip="Formatiert den ausgewählten Bereich mit dem zuletzt verwendeten Stil."
|
||||||
getEnabled="CanFormat" />
|
getEnabled="CanFormat" />
|
||||||
<button id="zrlSettings" label="Stilauswahl" image="fff.png" onAction="Ribbon_Click" size="large"
|
<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." />
|
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"
|
<button id="zrlDaniel" label="Daniels Spezial" image="dk.png" onAction="Ribbon_Click" size="large"
|
||||||
getVisible="Daniel_GetVisible"/>
|
getVisible="Daniel_GetVisible"/>
|
||||||
</group>
|
</group>
|
||||||
|
@ -45,7 +45,15 @@ namespace zaaReloaded2
|
|||||||
private void ThisAddIn_Startup(object sender, System.EventArgs e)
|
private void ThisAddIn_Startup(object sender, System.EventArgs e)
|
||||||
{
|
{
|
||||||
Bovender.ExceptionHandler.CentralHandler.ManageExceptionCallback += CentralHandler_ManageExceptionCallback;
|
Bovender.ExceptionHandler.CentralHandler.ManageExceptionCallback += CentralHandler_ManageExceptionCallback;
|
||||||
RegisterTextBoxSelectAll();
|
Bovender.WpfHelpers.RegisterTextBoxSelectAll();
|
||||||
|
|
||||||
|
if (Properties.Settings.Default.NeedUpgrade)
|
||||||
|
{
|
||||||
|
Properties.Settings.Default.Upgrade();
|
||||||
|
Properties.Settings.Default.NeedUpgrade = false;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
}
|
||||||
|
|
||||||
CheckForUpdates();
|
CheckForUpdates();
|
||||||
_oldCaption = Globals.ThisAddIn.Application.Caption;
|
_oldCaption = Globals.ThisAddIn.Application.Caption;
|
||||||
Globals.ThisAddIn.Application.Caption =
|
Globals.ThisAddIn.Application.Caption =
|
||||||
@ -155,49 +163,5 @@ namespace zaaReloaded2
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Make text boxes select all text on focus.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// http://stackoverflow.com/a/2553297/270712
|
|
||||||
/// </remarks>
|
|
||||||
void RegisterTextBoxSelectAll()
|
|
||||||
{
|
|
||||||
// Select the text in a TextBox when it receives focus.
|
|
||||||
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.PreviewMouseLeftButtonDownEvent,
|
|
||||||
new MouseButtonEventHandler(SelectivelyIgnoreMouseButton));
|
|
||||||
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.GotKeyboardFocusEvent,
|
|
||||||
new RoutedEventHandler(SelectAllText));
|
|
||||||
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.MouseDoubleClickEvent,
|
|
||||||
new RoutedEventHandler(SelectAllText));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SelectivelyIgnoreMouseButton(object sender, MouseButtonEventArgs e)
|
|
||||||
{
|
|
||||||
// Find the TextBox
|
|
||||||
DependencyObject parent = e.OriginalSource as UIElement;
|
|
||||||
while (parent != null && !(parent is TextBox))
|
|
||||||
parent = VisualTreeHelper.GetParent(parent);
|
|
||||||
|
|
||||||
if (parent != null)
|
|
||||||
{
|
|
||||||
var textBox = (TextBox)parent;
|
|
||||||
if (!textBox.IsKeyboardFocusWithin)
|
|
||||||
{
|
|
||||||
// If the text box is not yet focused, give it the focus and
|
|
||||||
// stop further processing of this click event.
|
|
||||||
textBox.Focus();
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SelectAllText(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var textBox = e.OriginalSource as TextBox;
|
|
||||||
if (textBox != null)
|
|
||||||
textBox.SelectAll();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
2.1.0
|
2.2.4
|
||||||
2.1.0.0
|
2.2.4.0
|
||||||
|
@ -41,7 +41,7 @@ namespace zaaReloaded2.ViewModels
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _itemComment.Value;
|
return _value;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
@ -56,7 +56,7 @@ namespace zaaReloaded2.ViewModels
|
|||||||
|
|
||||||
#region Commands
|
#region Commands
|
||||||
|
|
||||||
DelegatingCommand SaveCommand
|
public DelegatingCommand SaveCommand
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
Title="Über..."
|
Title="Über..."
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<StackPanel Margin="20">
|
<StackPanel Margin="20">
|
||||||
<Image Source="/zaaReloaded2;component/Icons/icon.png" Width="64" VerticalAlignment="Center" Margin="0 0 0 10" />
|
<Image Source="/zaaReloaded2;component/Icons/icon.png" Width="64" VerticalAlignment="Center" Margin="0 0 0 10" />
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
FocusManager.FocusedElement="{Binding ElementName=treeview}"
|
FocusManager.FocusedElement="{Binding ElementName=treeview}"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<DockPanel Margin="10">
|
<DockPanel Margin="10">
|
||||||
<Label DockPanel.Dock="Top" Content="Verfügbare Elemente:" Target="{Binding ElementName=ElementsTreeView}" />
|
<Label DockPanel.Dock="Top" Content="Verfügbare Elemente:" Target="{Binding ElementName=ElementsTreeView}" />
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
FocusManager.FocusedElement="{Binding ElementName=ContentTextBox}"
|
FocusManager.FocusedElement="{Binding ElementName=ContentTextBox}"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<DockPanel Margin="10">
|
<DockPanel Margin="10">
|
||||||
<Label DockPanel.Dock="Top" Content="Inhalt:" Target="{Binding ElementName=ContentTextBox}" />
|
<Label DockPanel.Dock="Top" Content="Inhalt:" Target="{Binding ElementName=ContentTextBox}" />
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
Title="Willkommen bei zaaReloaded"
|
Title="Willkommen bei zaaReloaded"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<StackPanel Margin="10">
|
<StackPanel Margin="10">
|
||||||
<TextBlock FontWeight="Bold" FontSize="20" Margin="0 0 0 5">
|
<TextBlock FontWeight="Bold" FontSize="20" Margin="0 0 0 5">
|
||||||
@ -51,7 +51,7 @@
|
|||||||
<Button Height="40" DockPanel.Dock="Left" Command="{Binding SelectTypistsModeCommand}" Content="Sekretariatsmodus"
|
<Button Height="40" DockPanel.Dock="Left" Command="{Binding SelectTypistsModeCommand}" Content="Sekretariatsmodus"
|
||||||
Width="160" Margin="0 0 10 0" VerticalAlignment="Center" />
|
Width="160" Margin="0 0 10 0" VerticalAlignment="Center" />
|
||||||
<TextBlock TextWrapping="Wrap" VerticalAlignment="Center">
|
<TextBlock TextWrapping="Wrap" VerticalAlignment="Center">
|
||||||
Im Ärztemodus werden beim Formatieren grundsätzlich keine Zusatzinformationen abgefragt.
|
Im Sekretariatsmodus werden beim Formatieren grundsätzlich keine Zusatzinformationen abgefragt.
|
||||||
</TextBlock>
|
</TextBlock>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<TextBlock TextWrapping="Wrap" Foreground="Gray">
|
<TextBlock TextWrapping="Wrap" Foreground="Gray">
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
Title="Import/Export-Fehler"
|
Title="Import/Export-Fehler"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<DockPanel Margin="10">
|
<DockPanel Margin="10">
|
||||||
<TextBlock DockPanel.Dock="Left" Margin="0 0 20 0" LineHeight="72" LineStackingStrategy="BlockLineHeight"
|
<TextBlock DockPanel.Dock="Left" Margin="0 0 20 0" LineHeight="72" LineStackingStrategy="BlockLineHeight"
|
||||||
|
@ -23,28 +23,26 @@
|
|||||||
xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
xmlns:b="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
||||||
ResizeMode="CanResizeWithGrip" ShowInTaskbar="False"
|
ResizeMode="CanResizeWithGrip" ShowInTaskbar="False"
|
||||||
WindowStyle="ToolWindow" Topmost="True"
|
WindowStyle="ToolWindow" Topmost="True"
|
||||||
SizeToContent="WidthAndHeight"
|
SizeToContent="WidthAndHeight" MaxWidth="500"
|
||||||
b:WindowState.CenterScreen="True" b:WindowState.Save="True"
|
b:WindowState.CenterScreen="True" b:WindowState.Save="True"
|
||||||
Title="Kommentar angeben"
|
Title="Kommentar angeben"
|
||||||
FocusManager.FocusedElement="{Binding ElementName=ValueTextBox}"
|
FocusManager.FocusedElement="{Binding ElementName=ValueTextBox}"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<DockPanel Margin="10">
|
<DockPanel Margin="10">
|
||||||
<Label DockPanel.Dock="Top" Content="{Binding Item}"
|
<Label DockPanel.Dock="Top" Content="{Binding Item}"
|
||||||
FontSize="16" FontWeight="Bold"
|
FontSize="16" FontWeight="Bold" Margin="0 0 0 10"
|
||||||
Target="{Binding ElementName=ValueTextBox}" Padding="0" />
|
Target="{Binding ElementName=ValueTextBox}" Padding="0" />
|
||||||
<UniformGrid DockPanel.Dock="Bottom" HorizontalAlignment="Right" Columns="2" Rows="1" Margin="0 10 0 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="OK" Command="{Binding SaveCommand}" IsDefault="True" Margin="0 0 5 0" />
|
||||||
<Button Content="Abbrechen" Command="{Binding CloseViewCommand}" IsCancel="True" Margin="5 0 0 0" />
|
<Button Content="Abbrechen" Command="{Binding CloseViewCommand}" IsCancel="True" Margin="5 0 0 0" />
|
||||||
</UniformGrid>
|
</UniformGrid>
|
||||||
<DockPanel Margin="0 10 0 10">
|
|
||||||
<TextBlock DockPanel.Dock="Left" Text="{Binding Prefix}" VerticalAlignment="Center" />
|
<TextBlock DockPanel.Dock="Left" Text="{Binding Prefix}" VerticalAlignment="Center" />
|
||||||
<TextBlock DockPanel.Dock="Right" Text="{Binding Suffix}" VerticalAlignment="Center" />
|
<TextBlock DockPanel.Dock="Right" Text="{Binding Suffix}" VerticalAlignment="Center" />
|
||||||
<TextBox Text="{Binding Value,Mode=TwoWay,UpdateSourceTrigger=LostFocus}"
|
<TextBox Text="{Binding Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
|
||||||
MinWidth="120" MaxWidth="240" VerticalAlignment="Center"
|
MinWidth="120" MaxWidth="240" VerticalAlignment="Center"
|
||||||
x:Name="ValueTextBox" Margin="5 0 5 0" />
|
x:Name="ValueTextBox" Margin="5 0 5 0" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</DockPanel>
|
|
||||||
</Window>
|
</Window>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
Title="Einstellungen"
|
Title="Einstellungen"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<DockPanel Margin="10">
|
<DockPanel Margin="10">
|
||||||
<UniformGrid DockPanel.Dock="Bottom" Columns="2" Rows="1"
|
<UniformGrid DockPanel.Dock="Bottom" Columns="2" Rows="1"
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
FocusManager.FocusedElement="{Binding ElementName=settingsList}"
|
FocusManager.FocusedElement="{Binding ElementName=settingsList}"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<i:Interaction.Triggers>
|
<i:Interaction.Triggers>
|
||||||
<i:EventTrigger SourceObject="{Binding EditSettingsMessage}" EventName="Sent">
|
<i:EventTrigger SourceObject="{Binding EditSettingsMessage}" EventName="Sent">
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
FocusManager.FocusedElement="{Binding ElementName=NameTextBox}"
|
FocusManager.FocusedElement="{Binding ElementName=NameTextBox}"
|
||||||
>
|
>
|
||||||
<Window.Resources>
|
<Window.Resources>
|
||||||
<ResourceDictionary Source="/zaaReloaded2;component/Style.xaml" />
|
<ResourceDictionary Source="/Bovender;component/Style.xaml" />
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<i:Interaction.Triggers>
|
<i:Interaction.Triggers>
|
||||||
<i:EventTrigger SourceObject="{Binding AddElementMessage}" EventName="Sent">
|
<i:EventTrigger SourceObject="{Binding AddElementMessage}" EventName="Sent">
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
<value>zaaReloaded2</value>
|
<value>zaaReloaded2</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="PubYear" serializeAs="String">
|
<setting name="PubYear" serializeAs="String">
|
||||||
<value>2015</value>
|
<value>2016</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="Authors" serializeAs="String">
|
<setting name="Authors" serializeAs="String">
|
||||||
<value>Daniel Kraus</value>
|
<value>Daniel Kraus</value>
|
||||||
@ -86,6 +86,9 @@
|
|||||||
<setting name="Repository" serializeAs="String">
|
<setting name="Repository" serializeAs="String">
|
||||||
<value>http://git.bovender.de</value>
|
<value>http://git.bovender.de</value>
|
||||||
</setting>
|
</setting>
|
||||||
|
<setting name="DrugsParagraph" serializeAs="String">
|
||||||
|
<value>zaaReloaded2-Medikamente</value>
|
||||||
|
</setting>
|
||||||
</zaaReloaded2.Properties.Settings>
|
</zaaReloaded2.Properties.Settings>
|
||||||
</applicationSettings>
|
</applicationSettings>
|
||||||
<userSettings>
|
<userSettings>
|
||||||
@ -108,6 +111,9 @@
|
|||||||
<setting name="FirstRunWizardShown" serializeAs="String">
|
<setting name="FirstRunWizardShown" serializeAs="String">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</setting>
|
</setting>
|
||||||
|
<setting name="NeedUpgrade" serializeAs="String">
|
||||||
|
<value>True</value>
|
||||||
|
</setting>
|
||||||
</zaaReloaded2.Properties.Settings>
|
</zaaReloaded2.Properties.Settings>
|
||||||
</userSettings>
|
</userSettings>
|
||||||
</configuration>
|
</configuration>
|
@ -19,6 +19,6 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
<packages>
|
<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="Expression.Blend.Sdk" version="1.0.2" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
@ -29,6 +29,7 @@
|
|||||||
<AssemblyName>zaaReloaded2</AssemblyName>
|
<AssemblyName>zaaReloaded2</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||||
<DefineConstants>VSTO40</DefineConstants>
|
<DefineConstants>VSTO40</DefineConstants>
|
||||||
|
<IsWebBootstrapper>False</IsWebBootstrapper>
|
||||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
<PublishUrl>publish\</PublishUrl>
|
<PublishUrl>publish\</PublishUrl>
|
||||||
<InstallUrl />
|
<InstallUrl />
|
||||||
@ -38,7 +39,6 @@
|
|||||||
<UpdateEnabled>true</UpdateEnabled>
|
<UpdateEnabled>true</UpdateEnabled>
|
||||||
<UpdateInterval>7</UpdateInterval>
|
<UpdateInterval>7</UpdateInterval>
|
||||||
<UpdateIntervalUnits>days</UpdateIntervalUnits>
|
<UpdateIntervalUnits>days</UpdateIntervalUnits>
|
||||||
<IsWebBootstrapper>False</IsWebBootstrapper>
|
|
||||||
<ProductName>zaaReloaded2</ProductName>
|
<ProductName>zaaReloaded2</ProductName>
|
||||||
<PublisherName />
|
<PublisherName />
|
||||||
<SupportUrl />
|
<SupportUrl />
|
||||||
@ -134,8 +134,9 @@
|
|||||||
-->
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Accessibility" />
|
<Reference Include="Accessibility" />
|
||||||
<Reference Include="Bovender">
|
<Reference Include="Bovender, Version=0.5.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Bovender.0.2.0.0\lib\net40\Bovender.dll</HintPath>
|
<HintPath>..\packages\Bovender.0.5.0.0\lib\net40\Bovender.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Expression.Interactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
<Reference Include="Microsoft.Expression.Interactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
@ -193,6 +194,7 @@
|
|||||||
-->
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Commands.cs" />
|
<Compile Include="Commands.cs" />
|
||||||
|
<Compile Include="Helpers.cs" />
|
||||||
<Compile Include="Importer\ZaaImporter\AutoDetect.cs" />
|
<Compile Include="Importer\ZaaImporter\AutoDetect.cs" />
|
||||||
<Compile Include="Controller\Comments\CommentPool.cs" />
|
<Compile Include="Controller\Comments\CommentPool.cs" />
|
||||||
<Compile Include="Controller\Elements\ControlElementBase.cs" />
|
<Compile Include="Controller\Elements\ControlElementBase.cs" />
|
||||||
@ -220,6 +222,9 @@
|
|||||||
<Compile Include="Formatter\DanielsStyle.cs" />
|
<Compile Include="Formatter\DanielsStyle.cs" />
|
||||||
<Compile Include="Formatter\DocumentWriter.cs" />
|
<Compile Include="Formatter\DocumentWriter.cs" />
|
||||||
<Compile Include="Formatter\NoLaboratoryDataException.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="Preferences.cs" />
|
||||||
<Compile Include="Ribbon.cs" />
|
<Compile Include="Ribbon.cs" />
|
||||||
<Compile Include="Thesaurus\ThesaurusBase.cs" />
|
<Compile Include="Thesaurus\ThesaurusBase.cs" />
|
||||||
@ -445,6 +450,12 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Icons\gear.png" />
|
<Resource Include="Icons\gear.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Resource Include="Icons\m.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Resource Include="Icons\mm.png" />
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||||
@ -453,10 +464,11 @@
|
|||||||
<SignManifests>true</SignManifests>
|
<SignManifests>true</SignManifests>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ManifestKeyFile>zaaReloaded2_TemporaryKey.pfx</ManifestKeyFile>
|
<ManifestKeyFile>
|
||||||
|
</ManifestKeyFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ManifestCertificateThumbprint>0EDB0CD8E3605AC48387A527A80943403E568BD9</ManifestCertificateThumbprint>
|
<ManifestCertificateThumbprint>6322CFC6CFA69B4D2DEFAE4A901473C8B35B0DB9</ManifestCertificateThumbprint>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SignAssembly>true</SignAssembly>
|
<SignAssembly>true</SignAssembly>
|
||||||
|