From 21e7d4418780dc855231fa07425e9e110970d02d Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Thu, 26 Nov 2015 21:33:10 +0100 Subject: [PATCH] First working version of drugs formatting. --- Tests/Medication/ImporterTest.cs | 45 +++++++++++++++ Tests/Tests.csproj | 1 + gimp/m.xcf | Bin 0 -> 2537 bytes zaaReloaded2/Commands.cs | 25 ++++++++ zaaReloaded2/Demo/Demo.docx | Bin 27125 -> 23665 bytes zaaReloaded2/Formatter/Formatter.cs | 13 +---- zaaReloaded2/Helpers.cs | 25 ++++++++ zaaReloaded2/Icons/m.png | Bin 0 -> 778 bytes zaaReloaded2/Medication/Formatter.cs | 83 +++++++++++++++++++++++++++ zaaReloaded2/Medication/Importer.cs | 14 ++--- zaaReloaded2/Ribbon.cs | 8 +++ zaaReloaded2/Ribbon.xml | 9 ++- zaaReloaded2/zaaReloaded2.csproj | 4 ++ 13 files changed, 207 insertions(+), 20 deletions(-) create mode 100755 Tests/Medication/ImporterTest.cs create mode 100644 gimp/m.xcf create mode 100644 zaaReloaded2/Icons/m.png create mode 100755 zaaReloaded2/Medication/Formatter.cs diff --git a/Tests/Medication/ImporterTest.cs b/Tests/Medication/ImporterTest.cs new file mode 100755 index 0000000..2a69659 --- /dev/null +++ b/Tests/Medication/ImporterTest.cs @@ -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); + } + } +} diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index d47ddf6..91145c5 100755 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -83,6 +83,7 @@ + diff --git a/gimp/m.xcf b/gimp/m.xcf new file mode 100644 index 0000000000000000000000000000000000000000..bf91a15722b2bab2b9fc0dc972d39cba26490bc7 GIT binary patch literal 2537 zcmeHJ%Wl&^6dfn&BYlVhr9!1bqppgOQ4#O~v!@$pRNdL@3#z-(mAtgu;WK3g+2Eqkk%lny%o|i$o9#JCeQ^o*9^`I=1in0iQ~h88{0T zpFTI8jxON5cAY`$LYLIs&;Jc5wGl2^w)7l+K3@yQW;dg@nRQP_*u1?cXx9zDS`9_i z+8|~BZOSa2sZZ|Ic`B`Hy(*bWV%*U1TdvHetC*)e6lu)>QsFX zaMrH}QUv_ExXWjJw~~9zP~H>#;-&m@v-s4SRc}c)giD3DyhvKEv_jrYFJcjVGBajX z>#mCk*Ycb?*vBU;g63baLSa^9kWr4iQ2^tgoZE*kx9edft4(f${(|yd=?OEZ%Z0sd zyCOnB%VXv&q<#1ev*uR>uQWZYCT(p>dDS`|9fxR{9*zpBM{!MqoFX7Y@oT58M3=&r z3ll7k6IE34mpCaVyE|+rDJ60Ih80<_N)lC4M$)I^MypG+|)WH~B3%w8rXDs`U6Zmy6{VQ@% qA5yHGj&2{){G*P5@)I4$p-J#wFRwt;;F*+H>0!CV#v$8Uzx)l;mLJOi literal 0 HcmV?d00001 diff --git a/zaaReloaded2/Commands.cs b/zaaReloaded2/Commands.cs index 6cd54ec..6354980 100755 --- a/zaaReloaded2/Commands.cs +++ b/zaaReloaded2/Commands.cs @@ -138,6 +138,31 @@ namespace zaaReloaded2 Globals.ThisAddIn.Application.Selection); } + public static void FormatDrugs() + { + // 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); + formatter.FormatOneColumn(activeWindow.Document); + } + #endregion #region Private methods diff --git a/zaaReloaded2/Demo/Demo.docx b/zaaReloaded2/Demo/Demo.docx index ac0714c8bfbbf7a344906a2ad0bbb476bfb4f05a..e9f87bcb21b9f4499194a24ff00322add02fb2f5 100755 GIT binary patch delta 18533 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 delta 21924 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 diff --git a/zaaReloaded2/Formatter/Formatter.cs b/zaaReloaded2/Formatter/Formatter.cs index 2d39b55..27c0c2b 100755 --- a/zaaReloaded2/Formatter/Formatter.cs +++ b/zaaReloaded2/Formatter/Formatter.cs @@ -142,13 +142,7 @@ namespace zaaReloaded2.Formatter // Create undo record and styles prior to iterating over the elements // because a column switching element might trigger output to the // document. - bool hasAddin = Globals.ThisAddIn != null; - if (hasAddin) - { - Globals.ThisAddIn.Application.UndoRecord.StartCustomRecord( - String.Format("Laborformatierung ({0})", Properties.Settings.Default.AddinName) - ); - } + Helpers.StartUndo("Laborformatierung"); CreateStyles(); int current = 0; @@ -177,10 +171,7 @@ namespace zaaReloaded2.Formatter } _secondaryBuffer.Flush(); - if (hasAddin) - { - Globals.ThisAddIn.Application.UndoRecord.EndCustomRecord(); - } + Helpers.EndUndo(); } /// diff --git a/zaaReloaded2/Helpers.cs b/zaaReloaded2/Helpers.cs index 265bd15..b658361 100755 --- a/zaaReloaded2/Helpers.cs +++ b/zaaReloaded2/Helpers.cs @@ -40,5 +40,30 @@ namespace zaaReloaded2 new string[] { "\r\n", "\n\r", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); } + + /// + /// Starts a custom undo record. + /// + /// + public static void StartUndo(string message) + { + if (Globals.ThisAddIn != null) + { + Globals.ThisAddIn.Application.UndoRecord.StartCustomRecord( + String.Format("{0} ({1})", message, Properties.Settings.Default.AddinName) + ); + } + } + + /// + /// Ends an undo record. + /// + public static void EndUndo() + { + if (Globals.ThisAddIn != null) + { + Globals.ThisAddIn.Application.UndoRecord.EndCustomRecord(); + } + } } } diff --git a/zaaReloaded2/Icons/m.png b/zaaReloaded2/Icons/m.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c5cbac5ed39308e8ea2a15b49b31b69295a94b GIT binary patch literal 778 zcmV+l1NHogP)eSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00Lr3 zL_t(o!|hg2PZ~iK|II90D5Oa#=>-Bev9SlJMCGC}(eL09u6_n?db3Ip$V}H3=F%|)0kmd*zzYKHok=H&Trqm_nUdYc>{^EXc?+SS+v};TD&%> zJqsZOkshYs%m4sY2LM2vF^CXC$U&?ZyY$Hy3Hs!Vj589$X)jqzdg-e=bBGoIWO=sc z7Qr*czj2rtL0!0NS(dFfNTZJ^iyVGCQrVgeYtkya_@X+EMlO~U3buiekO)yD zV0;6Bo!-uE9rd2XI(Eli;VTu_J!p_d9{}2OPSrC0IQ6Yv2*j^-i-tq^y+9M{;|)uDFyd7tiw6C@GP zp_3+>{gPe!b7Gw|tEhHUNWDMM4nAc_=0k!c0zm|62OX;}>fJN@taWOg{^o>>u^MpG z`J%01H`s1}_Xi`)9w|Yr7rT@{x5u^dX=qKjt9rT-29&GC#%Sd_bHaT zPO@a>h#$T9#c4cn{_gyX=P7XR#wOdmF^S2&y2BRRx_KZEo_@|ndWz63xtqBqe>;Y+ zhd_?zB8G0H$6Y&yZlrTG7n!J)8U3c}1C#z}&+7Mf87-Z_Ux3no6Kdf47XSbN07*qo IM6N<$g5;P}U;qFB literal 0 HcmV?d00001 diff --git a/zaaReloaded2/Medication/Formatter.cs b/zaaReloaded2/Medication/Formatter.cs new file mode 100755 index 0000000..9aadc30 --- /dev/null +++ b/zaaReloaded2/Medication/Formatter.cs @@ -0,0 +1,83 @@ +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 +{ + /// + /// Formats prescriptions + /// + public class Formatter + { + #region Properties + + public IList Prescriptions { get; set; } + + #endregion + + #region Constructor + + public Formatter() { } + + public Formatter(IList prescriptions) + : this() + { + Prescriptions = prescriptions; + } + + #endregion + + #region Methods + + /// + /// Writes a block of prescriptions with one column to a + /// Word document. + /// + /// + public void FormatOneColumn(Document document) + { + if (document == null) + { + throw new ArgumentNullException( + "Cannot format prescriptions because no document was given."); + } + + Helpers.StartUndo("Medikation formatieren"); + foreach (Prescription p in Prescriptions) + { + document.ActiveWindow.Selection.TypeText(p.ToString() + "\r"); + } + Helpers.EndUndo(); + } + + /// + /// Creates a table containing all prescriptions and copies it to + /// the clipboard. + /// + public void CreatePrescriptionsTable() + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/zaaReloaded2/Medication/Importer.cs b/zaaReloaded2/Medication/Importer.cs index 2da3f3d..2057683 100755 --- a/zaaReloaded2/Medication/Importer.cs +++ b/zaaReloaded2/Medication/Importer.cs @@ -36,7 +36,7 @@ namespace zaaReloaded2.Medication /// The detected block is selected. /// /// True if a block was detected, false if not. - public bool AutoDetect(Document document) + public static bool AutoDetect(Document document) { Paragraph start = null; Paragraph end = null; @@ -47,20 +47,20 @@ namespace zaaReloaded2.Medication string line = document.Paragraphs[i].Range.Text; if (Prescription.IsPrescriptionLine(line)) { - start = document.Paragraphs[i]; + end = document.Paragraphs[i]; break; } i--; } - if (start != null) + if (end != null) { - end = start; - while (i > 1) + start = end; + while (i > 2) { if (!Prescription.IsPrescriptionLine(document.Paragraphs[i - 1].Range.Text)) { - end = document.Paragraphs[i]; + start = document.Paragraphs[i]; break; } i--; @@ -102,7 +102,7 @@ namespace zaaReloaded2.Medication { if (Prescription.IsPrescriptionLine(line)) { - Prescriptions.Add(Prescription.FromLine(line)); + Prescriptions.AddRange(Prescription.ManyFromLine(line)); } } } diff --git a/zaaReloaded2/Ribbon.cs b/zaaReloaded2/Ribbon.cs index d098166..95996b6 100755 --- a/zaaReloaded2/Ribbon.cs +++ b/zaaReloaded2/Ribbon.cs @@ -105,6 +105,9 @@ namespace zaaReloaded2 case "zrlDemo": Commands.LoadDemo(); break; + case "zrlFormatDrugs": + Commands.FormatDrugs(); + break; default: throw new InvalidOperationException("No operation defined for " + control.Id); } @@ -150,6 +153,11 @@ namespace zaaReloaded2 return Commands.CanFormat(); } + public bool CanFormatDrugs(Office.IRibbonControl control) + { + return Commands.CanFormat(); + } + #endregion #region Public methods diff --git a/zaaReloaded2/Ribbon.xml b/zaaReloaded2/Ribbon.xml index 0fb6d2e..a59f63b 100755 --- a/zaaReloaded2/Ribbon.xml +++ b/zaaReloaded2/Ribbon.xml @@ -23,8 +23,8 @@ - -