source: cprs/branches/tmg-cprs/CPRS-Chart/fNotes.pas@ 801

Last change on this file since 801 was 801, checked in by Kevin Toppenberg, 14 years ago

Bug fixes. Improved Adding Image

File size: 192.5 KB
Line 
1//kt -- Modified with SourceScanner on 7/19/2007, also 8/09
2unit fNotes;
3{$O-}
4
5interface
6
7uses
8 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
9 fHSplit, StdCtrls, ExtCtrls, Menus, ComCtrls, ORCtrls, ORFn, uConst, ORDtTm,
10 uPCE, ORClasses, fDrawers, ImgList, rTIU, uTIU, uDocTree, fRptBox, fPrintList,
11 MSHTML,TMGHTML2,ActiveX, //kt added this line 8/09 for HTML editing
12 fNoteST, ORNet, fNoteSTStop, OleCtrls, SHDocVw, DKLang, Buttons, ToolWin;
13
14type
15 TEditModes = (emNone,emText,emHTML); //kt 8/09
16 TViewModes = (vmEdit,vmView,vmText,vmHTML); //kt 8/09
17 TViewModeSet = Set of TViewModes; //kt 8/09
18const
19 vmHTML_MODE : array [false..true] of TViewModes = (vmText,vmHTML); //kt 8/09
20 emHTML_MODE : array [false..true] of TEditModes = (emText,emHTML); //kt 8/09
21
22type
23 TfrmNotes = class(TfrmHSplit)
24 mnuNotes: TMainMenu;
25 mnuView: TMenuItem;
26 mnuViewChart: TMenuItem;
27 mnuChartReports: TMenuItem;
28 mnuChartLabs: TMenuItem;
29 mnuChartDCSumm: TMenuItem;
30 mnuChartCslts: TMenuItem;
31 mnuChartNotes: TMenuItem;
32 mnuChartOrders: TMenuItem;
33 mnuChartMeds: TMenuItem;
34 mnuChartProbs: TMenuItem;
35 mnuChartCover: TMenuItem;
36 Z1: TMenuItem;
37 mnuViewDetail: TMenuItem;
38 mnuAct: TMenuItem;
39 mnuActNew: TMenuItem;
40 Z2: TMenuItem;
41 mnuActSave: TMenuItem;
42 mnuActDelete: TMenuItem;
43 mnuActEdit: TMenuItem;
44 mnuActSign: TMenuItem;
45 mnuActAddend: TMenuItem;
46 lblNotes: TOROffsetLabel;
47 pnlRead: TPanel;
48 lblTitle: TOROffsetLabel;
49 memNote: TRichEdit;
50 pnlWrite: TPanel;
51 memNewNote: TRichEdit;
52 WebBrowser1: TWebBrowser; //kt added (and WebBrowser1 object in form file)
53 Z3: TMenuItem;
54 mnuViewAll: TMenuItem;
55 mnuViewByAuthor: TMenuItem;
56 mnuViewByDate: TMenuItem;
57 mnuViewUncosigned: TMenuItem;
58 mnuViewUnsigned: TMenuItem;
59 mnuActSignList: TMenuItem;
60 cmdNewNote: TORAlignButton;
61 cmdPCE: TORAlignButton;
62 lblSpace1: TLabel;
63 popNoteMemo: TPopupMenu;
64 popNoteMemoCut: TMenuItem;
65 popNoteMemoCopy: TMenuItem;
66 popNoteMemoPaste: TMenuItem;
67 Z10: TMenuItem;
68 popNoteMemoSignList: TMenuItem;
69 popNoteMemoDelete: TMenuItem;
70 popNoteMemoEdit: TMenuItem;
71 popNoteMemoSave: TMenuItem;
72 popNoteMemoSign: TMenuItem;
73 popNoteList: TPopupMenu;
74 popNoteListAll: TMenuItem;
75 popNoteListByAuthor: TMenuItem;
76 popNoteListByDate: TMenuItem;
77 popNoteListUncosigned: TMenuItem;
78 popNoteListUnsigned: TMenuItem;
79 sptVert: TSplitter;
80 memPCEShow: TRichEdit;
81 mnuActIdentifyAddlSigners: TMenuItem;
82 popNoteMemoAddlSign: TMenuItem;
83 Z11: TMenuItem;
84 popNoteMemoSpell: TMenuItem;
85 popNoteMemoGrammar: TMenuItem;
86 mnuViewCustom: TMenuItem;
87 N1: TMenuItem;
88 mnuViewSaveAsDefault: TMenuItem;
89 ReturntoDefault1: TMenuItem;
90 pnlDrawers: TPanel;
91 lstNotes: TORListBox;
92 splDrawers: TSplitter;
93 popNoteMemoTemplate: TMenuItem;
94 Z12: TMenuItem;
95 mnuOptions: TMenuItem;
96 mnuEditTemplates: TMenuItem;
97 mnuNewTemplate: TMenuItem;
98 N2: TMenuItem;
99 mnuEditSharedTemplates: TMenuItem;
100 mnuNewSharedTemplate: TMenuItem;
101 popNoteMemoAddend: TMenuItem;
102 pnlFields: TPanel;
103 lblNewTitle: TStaticText;
104 lblRefDate: TStaticText;
105 lblAuthor: TStaticText;
106 lblVisit: TStaticText;
107 lblCosigner: TStaticText;
108 cmdChange: TButton;
109 lblSubject: TStaticText;
110 txtSubject: TCaptionEdit;
111 timAutoSave: TTimer;
112 popNoteMemoPaste2: TMenuItem;
113 popNoteMemoReformat: TMenuItem;
114 Z4: TMenuItem;
115 mnuActChange: TMenuItem;
116 mnuActLoadBoiler: TMenuItem;
117 bvlNewTitle: TBevel;
118 popNoteMemoSaveContinue: TMenuItem;
119 N3: TMenuItem;
120 mnuEditDialgFields: TMenuItem;
121 tvNotes: TORTreeView;
122 lvNotes: TCaptionListView;
123 sptList: TSplitter;
124 N4: TMenuItem;
125 popNoteListExpandSelected: TMenuItem;
126 popNoteListExpandAll: TMenuItem;
127 popNoteListCollapseSelected: TMenuItem;
128 popNoteListCollapseAll: TMenuItem;
129 popNoteListCustom: TMenuItem;
130 mnuActDetachFromIDParent: TMenuItem;
131 N5: TMenuItem;
132 popNoteListDetachFromIDParent: TMenuItem;
133 popNoteListAddIDEntry: TMenuItem;
134 mnuActAddIDEntry: TMenuItem;
135 mnuIconLegend: TMenuItem;
136 N6: TMenuItem;
137 popNoteMemoFind: TMenuItem;
138 dlgFindText: TFindDialog;
139 dlgReplaceText: TReplaceDialog;
140 popNoteMemoReplace: TMenuItem;
141 N7: TMenuItem;
142 mnuChartSurgery: TMenuItem;
143 mnuActAttachtoIDParent: TMenuItem;
144 popNoteListAttachtoIDParent: TMenuItem;
145 N8: TMenuItem;
146 popNoteMemoPreview: TMenuItem;
147 popNoteMemoInsTemplate: TMenuItem;
148 popNoteMemoEncounter: TMenuItem;
149 mnuSearchForText: TMenuItem;
150 popSearchForText: TMenuItem;
151 mnuViewInformation: TMenuItem;
152 mnuViewDemo: TMenuItem;
153 mnuViewVisits: TMenuItem;
154 mnuViewPrimaryCare: TMenuItem;
155 mnuViewMyHealtheVet: TMenuItem;
156 mnuInsurance: TMenuItem;
157 mnuViewFlags: TMenuItem;
158 mnuViewReminders: TMenuItem;
159 mnuViewRemoteData: TMenuItem;
160 mnuViewPostings: TMenuItem;
161 pnlHtmlViewer: TPanel; //kt 8/09
162 pnlTextWrite: TPanel; //kt 8/09
163 popNoteMemoHTMLFormat: TMenuItem; //kt 8/09
164 pnlHTMLWrite: TPanel; //kt 8/09
165 pnlHTMLEdit: TPanel; //kt 8/09
166 ToolBar: TToolBar; //kt 8/09
167 cbFontNames: TComboBox; //kt 8/09
168 cbFontSize: TComboBox; //kt 8/09
169 btnFonts: TSpeedButton; //kt 8/09
170 btnItalic: TSpeedButton; //kt 8/09
171 btnBold: TSpeedButton; //kt 8/09
172 btnUnderline: TSpeedButton; //kt 8/09
173 btnBullets: TSpeedButton; //kt 8/09
174 btnNumbers: TSpeedButton; //kt 8/09
175 btnLeftAlign: TSpeedButton; //kt 8/09
176 btnCenterAlign: TSpeedButton; //kt 8/09
177 btnRightAlign: TSpeedButton; //kt 8/09
178 btnMoreIndent: TSpeedButton; //kt 8/09
179 btnLessIndent: TSpeedButton; //kt 8/09
180 btnTextColor: TSpeedButton; //kt 8/09
181 btnBackColor: TSpeedButton; //kt 8/09
182 btnImage: TSpeedButton;
183 popupAddImage: TPopupMenu;
184 mnuSelectExistingImage: TMenuItem;
185 mnuAddNewImage: TMenuItem; //kt 4/10
186 procedure mnuChartTabClick(Sender: TObject);
187 procedure lstNotesClick(Sender: TObject);
188 procedure pnlRightResize(Sender: TObject);
189 procedure cmdNewNoteClick(Sender: TObject);
190 procedure mnuActNewClick(Sender: TObject);
191 procedure mnuActAddIDEntryClick(Sender: TObject);
192 procedure mnuActSaveClick(Sender: TObject);
193 procedure mnuViewClick(Sender: TObject);
194 procedure mnuActAddendClick(Sender: TObject);
195 procedure mnuActDetachFromIDParentClick(Sender: TObject);
196 procedure mnuActSignListClick(Sender: TObject);
197 procedure mnuActDeleteClick(Sender: TObject);
198 procedure mnuActEditClick(Sender: TObject);
199 procedure mnuActSignClick(Sender: TObject);
200 procedure cmdPCEClick(Sender: TObject);
201 procedure popNoteMemoCutClick(Sender: TObject);
202 procedure popNoteMemoCopyClick(Sender: TObject);
203 procedure popNoteMemoPasteClick(Sender: TObject);
204 procedure popNoteMemoPopup(Sender: TObject);
205 procedure pnlWriteResize(Sender: TObject);
206 procedure FormCreate(Sender: TObject);
207 procedure mnuViewDetailClick(Sender: TObject);
208 procedure FormClose(Sender: TObject; var Action: TCloseAction);
209 procedure mnuActIdentifyAddlSignersClick(Sender: TObject);
210 procedure popNoteMemoAddlSignClick(Sender: TObject);
211 procedure popNoteMemoSpellClick(Sender: TObject);
212 procedure popNoteMemoGrammarClick(Sender: TObject);
213 procedure mnuViewSaveAsDefaultClick(Sender: TObject);
214 procedure mnuViewReturntoDefaultClick(Sender: TObject);
215 procedure popNoteMemoTemplateClick(Sender: TObject);
216 procedure mnuEditTemplatesClick(Sender: TObject);
217 procedure mnuNewTemplateClick(Sender: TObject);
218 procedure mnuEditSharedTemplatesClick(Sender: TObject);
219 procedure mnuNewSharedTemplateClick(Sender: TObject);
220 procedure mnuOptionsClick(Sender: TObject);
221 procedure FormDestroy(Sender: TObject);
222 procedure cmdChangeClick(Sender: TObject);
223 procedure pnlFieldsResize(Sender: TObject);
224 procedure timAutoSaveTimer(Sender: TObject);
225 procedure memNewNoteChange(Sender: TObject);
226 procedure popNoteMemoReformatClick(Sender: TObject);
227 procedure mnuActChangeClick(Sender: TObject);
228 procedure mnuActLoadBoilerClick(Sender: TObject);
229 procedure popNoteMemoSaveContinueClick(Sender: TObject);
230 procedure mnuEditDialgFieldsClick(Sender: TObject);
231 procedure tvNotesChange(Sender: TObject; Node: TTreeNode);
232 procedure tvNotesClick(Sender: TObject);
233 procedure tvNotesCollapsed(Sender: TObject; Node: TTreeNode);
234 procedure tvNotesExpanded(Sender: TObject; Node: TTreeNode);
235 procedure tvNotesStartDrag(Sender: TObject;
236 var DragObject: TDragObject);
237 procedure tvNotesDragDrop(Sender, Source: TObject; X, Y: Integer);
238 procedure tvNotesDragOver(Sender, Source: TObject; X, Y: Integer;
239 State: TDragState; var Accept: Boolean);
240 procedure lvNotesColumnClick(Sender: TObject; Column: TListColumn);
241 procedure lvNotesCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
242 procedure lvNotesSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
243 procedure popNoteListExpandAllClick(Sender: TObject);
244 procedure popNoteListCollapseAllClick(Sender: TObject);
245 procedure popNoteListExpandSelectedClick(Sender: TObject);
246 procedure popNoteListCollapseSelectedClick(Sender: TObject);
247 procedure popNoteListPopup(Sender: TObject);
248 procedure lvNotesResize(Sender: TObject);
249 procedure mnuIconLegendClick(Sender: TObject);
250 procedure popNoteMemoFindClick(Sender: TObject);
251 procedure dlgFindTextFind(Sender: TObject);
252 procedure popNoteMemoReplaceClick(Sender: TObject);
253 procedure dlgReplaceTextReplace(Sender: TObject);
254 procedure dlgReplaceTextFind(Sender: TObject);
255 procedure mnuActAttachtoIDParentClick(Sender: TObject);
256 procedure memNewNoteKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
257 procedure sptHorzCanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean);
258 //kt procedure WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); //kt added
259 procedure popNoteMemoInsTemplateClick(Sender: TObject);
260 procedure popNoteMemoPreviewClick(Sender: TObject);
261 procedure tvNotesAddition(Sender: TObject; Node: TTreeNode);
262 procedure tvNotesDeletion(Sender: TObject; Node: TTreeNode);
263 procedure tvNotesExit(Sender: TObject);
264 procedure pnlReadExit(Sender: TObject);
265 procedure cmdNewNoteExit(Sender: TObject);
266 procedure FormHide(Sender: TObject);
267 procedure FormShow(Sender: TObject);
268 procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
269 Y: Integer);
270 procedure memNewNoteKeyPress(Sender: TObject; var Key: Char);
271 procedure memNewNoteKeyUp(Sender: TObject; var Key: Word;
272 Shift: TShiftState);
273 procedure memPCEShowExit(Sender: TObject);
274 procedure cmdChangeExit(Sender: TObject);
275 procedure cmdPCEExit(Sender: TObject);
276 procedure ViewInfo(Sender: TObject);
277 procedure mnuViewInformationClick(Sender: TObject);
278 procedure btnBackColorClick(Sender: TObject); //kt 8/09
279 procedure btnBoldClick(Sender: TObject); //kt 8/09
280 procedure btnBulletsClick(Sender: TObject); //kt 8/09
281 procedure btnCenterAlignClick(Sender: TObject); //kt 8/09
282 procedure btnFontsClick(Sender: TObject); //kt 8/09
283 procedure btnItalicClick(Sender: TObject); //kt 8/09
284 procedure btnLeftAlignClick(Sender: TObject); //kt 8/09
285 procedure btnLessIndentClick(Sender: TObject); //kt 8/09
286 procedure btnMoreIndentClick(Sender: TObject); //kt 8/09
287 procedure btnNumbersClick(Sender: TObject); //kt 8/09
288 procedure btnRightAlignClick(Sender: TObject); //kt 8/09
289 procedure btnTextColorClick(Sender: TObject); //kt 8/09
290 procedure btnUnderlineClick(Sender: TObject); //kt 8/09
291 procedure cbFontNamesChange(Sender: TObject); //kt 8/09
292 procedure cbFontSizeChange(Sender: TObject); //kt 8/09
293 procedure btnImageClick(Sender: TObject); //kt 4/10
294 procedure popNoteMemoHTMLFormatClick(Sender: TObject);
295 procedure mnuAddNewImageClick(Sender: TObject);
296 procedure mnuSelectExistingImageClick(Sender: TObject); //kt 8/09
297 private
298 FNavigatingTab : Boolean; //Currently Using tab to navigate
299 FEditingIndex: Integer; // index of note being currently edited
300 FChanged: Boolean; // true if any text has changed in the note
301 FEditCtrl: TCustomEdit;
302 FSilent: Boolean;
303 FCurrentContext: TTIUContext;
304 FDefaultContext: TTIUContext;
305 FOrderID: string;
306 FImageFlag: TBitmap;
307 FEditNote: TEditNoteRec;
308 FViewNote : TStringList; //kt 8/09
309 FWarmedUp : boolean; //kt 8/09
310 FVerifyNoteTitle: Integer;
311 FDocList: TStringList;
312 FConfirmed: boolean;
313 FLastNoteID: string;
314 FNewIDChild: boolean;
315 FEditingNotePCEObj: boolean;
316 FDeleted: boolean;
317 FOldFramePnlPatientExit: TNotifyEvent;
318 FOldDrawerPnlTemplatesButtonExit: TNotifyEvent;
319 FOldDrawerPnlEncounterButtonExit: TNotifyEvent;
320 FOldDrawerEdtSearchExit: TNotifyEvent;
321 FMousing: TDateTime;
322 FStarting: boolean;
323 LastAuthor: Int64; //kt 6-1-05
324 LastAuthorName: string; //kt 6-1-05
325 FHTMLEditMode : TEditModes; //kt 7/09 This is the mode of the note being edited (even if not actively displayed)
326 FViewMode : TViewModeSet; //kt 7/09 This is the status of the display
327 procedure frmFramePnlPatientExit(Sender: TObject);
328 procedure frmDrawerPnlTemplatesButtonExit(Sender: TObject);
329 procedure frmDrawerPnlEncounterButtonExit(Sender: TObject);
330 procedure frmDrawerEdtSearchExit(Sender: TObject);
331 procedure ClearEditControls;
332 procedure DoAutoSave(Suppress: integer = 1);
333 function GetTitleText(AnIndex: Integer): string;
334 procedure InsertAddendum;
335 procedure InsertNewNote(IsIDChild: boolean; AnIDParent: integer);
336 function LacksRequiredForCreate: Boolean;
337 procedure LoadForEdit;
338 function LockConsultRequest(AConsult: Integer): Boolean;
339 function LockConsultRequestAndNote(AnIEN: Int64): Boolean;
340 procedure RemovePCEFromChanges(IEN: Int64; AVisitStr: string = '');
341 procedure SaveEditedNote(var Saved: Boolean);
342 procedure SaveCurrentNote(var Saved: Boolean);
343 procedure SetEditingIndex(const Value: Integer);
344 procedure SetSubjectVisible(ShouldShow: Boolean);
345 procedure ShowPCEControls(ShouldShow: Boolean);
346 function StartNewEdit(NewNoteType: integer): Boolean;
347 procedure UnlockConsultRequest(ANote: Int64; AConsult: Integer = 0);
348 procedure ProcessNotifications;
349 procedure SetViewContext(AContext: TTIUContext);
350 property EditingIndex: Integer read FEditingIndex write SetEditingIndex;
351 function GetDrawers: TFrmDrawers;
352 function CanFinishReminder: boolean;
353 procedure DisplayPCE;
354 function VerifyNoteTitle: Boolean;
355 // added for treeview
356 procedure LoadNotes;
357 procedure UpdateTreeView(DocList: TStringList; Tree: TORTreeView);
358 procedure EnableDisableIDNotes;
359 procedure ShowPCEButtons(Editing: boolean);
360 procedure DoAttachIDChild(AChild, AParent: TORTreeNode);
361 function SetNoteTreeLabel(AContext: TTIUContext): string;
362 procedure UpdateNoteAuthor(DocInfo: string);
363 procedure SetHTMLEditMode(HTMLEditMode : boolean; Quiet : Boolean=false); //kt
364 procedure ToggleHTMLEditMode; //kt
365 procedure BroadcastImages(Note: TStrings); //kt
366 procedure ProperRepaint(Editing : Boolean); //kt
367 procedure SetEditorFocus; //kt
368 function EditorHasText : boolean; //kt
369 public
370 HtmlEditor : THtmlObj; //kt 8/09
371 HtmlViewer : THtmlObj; //kt 8/09
372 procedure SetDisplayToHTMLvsText(Mode :TViewModeSet; Lines : TStrings; ActivateOnly : boolean=False); //kt 8/09
373 function ActiveEditOf(AnIEN: Int64; ARequest: integer): Boolean;
374 function AllowContextChange(var WhyNot: string): Boolean; override;
375 procedure ClearPtData; override;
376 procedure DisplayPage; override;
377 procedure RequestPrint; override;
378 procedure RequestMultiplePrint(AForm: TfrmPrintList);
379 procedure SetFontSize(NewFontSize: Integer); override;
380 procedure SaveSignItem(const ItemID, ESCode: string);
381 procedure AssignRemForm;
382 property OrderID: string read FOrderID;
383 property ViewMode :TViewModeSet read FViewMode; //kt 8/09
384 procedure LstNotesToPrint;
385 constructor Create(AOwner: TComponent); override; //kt 8/09
386 destructor Destroy; override; //kt 8/09
387 published
388 property Drawers: TFrmDrawers read GetDrawers; // Keep Drawers published
389 end;
390
391var
392 frmNotes: TfrmNotes;
393 SearchTextStopFlag: Boolean; // Text Search CQ: HDS00002856
394
395implementation
396
397{$R *.DFM}
398
399uses fFrame, fVisit, fEncnt, rCore, uCore, fNoteBA, fNoteBD, fSignItem, fEncounterFrame,
400 rPCE, Clipbrd, fNoteCslt, fNotePrt, rVitals, fAddlSigners, fNoteDR, fConsults, uSpell,
401 fTIUView, fTemplateEditor, uReminders, fReminderDialog, uOrders, rConsults, fReminderTree,
402 fNoteProps, fNotesBP, fTemplateFieldEditor, dShared, rTemplates,
403 FIconLegend, fPCEEdit, fNoteIDParents, rSurgery, uSurgery, uTemplates,
404 uAccessibleTreeView, uAccessibleTreeNode, fTemplateDialog, DateUtils,
405 StrUtils {//KT added 1-1-05},
406 //fImages, {//kt added 9-20-05}
407 fOptionsNotes, //kt 8/09
408 fImagePickExisting, //kt 6/16/10
409 rHTMLTools, fImages, UploadImages; {//kt added 5-27-05 for IsHTMLDocument}
410
411const
412
413 NT_NEW_NOTE = -10; // Holder IEN for a new note
414 NT_ADDENDUM = -20; // Holder IEN for a new addendum
415
416 NT_ACT_NEW_NOTE = 2;
417 NT_ACT_ADDENDUM = 3;
418 NT_ACT_EDIT_NOTE = 4;
419 NT_ACT_ID_ENTRY = 5;
420
421 VIEW_ACTIVATE_ONLY = true; //kt 8/09
422
423//TX_NEED_VISIT = 'A visit is required before creating a new progress note.'; <-- original line. //kt 7/19/2007
424//TX_CREATE_ERR = 'Error Creating Note'; <-- original line. //kt 7/19/2007
425//TX_UPDATE_ERR = 'Error Updating Note'; <-- original line. //kt 7/19/2007
426//TX_NO_NOTE = 'No progress note is currently being edited'; <-- original line. //kt 7/19/2007
427//TX_SAVE_NOTE = 'Save Progress Note'; <-- original line. //kt 7/19/2007
428//TX_ADDEND_NO = 'Cannot make an addendum to a note that is being edited'; <-- original line. //kt 7/19/2007
429//TX_DEL_OK = CRLF + CRLF + 'Delete this progress note?'; <-- original line. //kt 7/19/2007
430//TX_DEL_ERR = 'Unable to Delete Note'; <-- original line. //kt 7/19/2007
431//TX_SIGN = 'Sign Note'; <-- original line. //kt 7/19/2007
432//TX_COSIGN = 'Cosign Note'; <-- original line. //kt 7/19/2007
433//TX_SIGN_ERR = 'Unable to Sign Note'; <-- original line. //kt 7/19/2007
434// TX_SCREQD = 'This progress note title requires the service connected questions to be '+
435// 'answered. The Encounter form will now be opened. Please answer all '+
436// 'service connected questions.';
437// TX_SCREQD_T = 'Response required for SC questions.';
438//TX_NONOTE = 'No progress note is currently selected.'; <-- original line. //kt 7/19/2007
439//TX_NONOTE_CAP = 'No Note Selected'; <-- original line. //kt 7/19/2007
440//TX_NOPRT_NEW = 'This progress note may not be printed until it is saved'; <-- original line. //kt 7/19/2007
441//TX_NOPRT_NEW_CAP = 'Save Progress Note'; <-- original line. //kt 7/19/2007
442//TX_NO_ALERT = 'There is insufficient information to process this alert.' + CRLF + <-- original line. //kt 7/19/2007
443// 'Either the alert has already been deleted, or it contained invalid data.' + CRLF + CRLF + <-- original line. //kt 7/19/2007
444// 'Click the NEXT button if you wish to continue processing more alerts.'; <-- original line. //kt 7/19/2007
445//TX_CAP_NO_ALERT = 'Unable to Process Alert'; <-- original line. //kt 7/19/2007
446//TX_ORDER_LOCKED = 'This record is locked by an action underway on the Consults tab'; <-- original line. //kt 7/19/2007
447//TC_ORDER_LOCKED = 'Unable to access record'; <-- original line. //kt 7/19/2007
448//TX_NO_ORD_CHG = 'The note is still associated with the previously selected request.' + CRLF + <-- original line. //kt 7/19/2007
449// 'Finish the pending action on the consults tab, then try again.'; <-- original line. //kt 7/19/2007
450//TC_NO_ORD_CHG = 'Locked Consult Request'; <-- original line. //kt 7/19/2007
451//TX_NEW_SAVE1 = 'You are currently editing:' + CRLF + CRLF; <-- original line. //kt 7/19/2007
452//TX_NEW_SAVE2 = CRLF + CRLF + 'Do you wish to save this note and begin a new one?'; <-- original line. //kt 7/19/2007
453//TX_NEW_SAVE3 = CRLF + CRLF + 'Do you wish to save this note and begin a new addendum?'; <-- original line. //kt 7/19/2007
454//TX_NEW_SAVE4 = CRLF + CRLF + 'Do you wish to save this note and edit the one selected?'; <-- original line. //kt 7/19/2007
455//TX_NEW_SAVE5 = CRLF + CRLF + 'Do you wish to save this note and begin a new Interdisciplinary entry?'; <-- original line. //kt 7/19/2007
456//TC_NEW_SAVE2 = 'Create New Note'; <-- original line. //kt 7/19/2007
457//TC_NEW_SAVE3 = 'Create New Addendum'; <-- original line. //kt 7/19/2007
458//TC_NEW_SAVE4 = 'Edit Different Note'; <-- original line. //kt 7/19/2007
459//TC_NEW_SAVE5 = 'Create New Interdisciplinary Entry'; <-- original line. //kt 7/19/2007
460//TX_EMPTY_NOTE = CRLF + CRLF + 'This note contains no text and will not be saved.' + CRLF + <-- original line. //kt 7/19/2007
461// 'Do you wish to delete this note?'; <-- original line. //kt 7/19/2007
462//TC_EMPTY_NOTE = 'Empty Note'; <-- original line. //kt 7/19/2007
463//TX_EMPTY_NOTE1 = 'This note contains no text and can not be signed.'; <-- original line. //kt 7/19/2007
464//TC_NO_LOCK = 'Unable to Lock Note'; <-- original line. //kt 7/19/2007
465//TX_ABSAVE = 'It appears the session terminated abnormally when this' + CRLF + <-- original line. //kt 7/19/2007
466// 'note was last edited. Some text may not have been saved.' + CRLF + CRLF + <-- original line. //kt 7/19/2007
467// 'Do you wish to continue and sign the note?'; <-- original line. //kt 7/19/2007
468//TC_ABSAVE = 'Possible Missing Text'; <-- original line. //kt 7/19/2007
469//TX_NO_BOIL = 'There is no boilerplate text associated with this title.'; <-- original line. //kt 7/19/2007
470//TC_NO_BOIL = 'Load Boilerplate Text'; <-- original line. //kt 7/19/2007
471//TX_BLR_CLEAR = 'Do you want to clear the previously loaded boilerplate text?'; <-- original line. //kt 7/19/2007
472//TC_BLR_CLEAR = 'Clear Previous Boilerplate Text'; <-- original line. //kt 7/19/2007
473//TX_DETACH_CNF = 'Confirm Detachment'; <-- original line. //kt 7/19/2007
474//TX_DETACH_FAILURE = 'Detach failed'; <-- original line. //kt 7/19/2007
475//TX_RETRACT_CAP = 'Retraction Notice'; <-- original line. //kt 7/19/2007
476//TX_RETRACT = 'This document will now be RETRACTED. As Such, it has been removed' +CRLF + <-- original line. //kt 7/19/2007
477// ' from public view, and from typical Releases of Information,' +CRLF + <-- original line. //kt 7/19/2007
478// ' but will remain indefinitely discoverable to HIMS.' +CRLF +CRLF; <-- original line. //kt 7/19/2007
479//TX_AUTH_SIGNED = 'Author has not signed, are you SURE you want to sign.' +CRLF; <-- original line. //kt 7/19/2007
480{
481type
482 //CQ8300
483 ClipboardData = record
484 Text: array[0..255] of char;
485 end;
486}
487
488
489var
490 TX_NEED_VISIT : string; //kt
491 TX_CREATE_ERR : string; //kt
492 TX_UPDATE_ERR : string; //kt
493 TX_NO_NOTE : string; //kt
494 TX_SAVE_NOTE : string; //kt
495 TX_ADDEND_NO : string; //kt
496 TX_DEL_OK : string; //kt
497 TX_DEL_ERR : string; //kt
498 TX_SIGN : string; //kt
499 TX_COSIGN : string; //kt
500 TX_SIGN_ERR : string; //kt
501 TX_NONOTE : string; //kt
502 TX_NONOTE_CAP : string; //kt
503 TX_NOPRT_NEW : string; //kt
504 TX_NOPRT_NEW_CAP : string; //kt
505 TX_NO_ALERT : string; //kt
506 TX_CAP_NO_ALERT : string; //kt
507 TX_ORDER_LOCKED : string; //kt
508 TC_ORDER_LOCKED : string; //kt
509 TX_NO_ORD_CHG : string; //kt
510 TC_NO_ORD_CHG : string; //kt
511 TX_NEW_SAVE1 : string; //kt
512 TX_NEW_SAVE2 : string; //kt
513 TX_NEW_SAVE3 : string; //kt
514 TX_NEW_SAVE4 : string; //kt
515 TX_NEW_SAVE5 : string; //kt
516 TC_NEW_SAVE2 : string; //kt
517 TC_NEW_SAVE3 : string; //kt
518 TC_NEW_SAVE4 : string; //kt
519 TC_NEW_SAVE5 : string; //kt
520 TX_EMPTY_NOTE : string; //kt
521 TC_EMPTY_NOTE : string; //kt
522 TX_EMPTY_NOTE1 : string; //kt
523 TC_NO_LOCK : string; //kt
524 TX_ABSAVE : string; //kt
525 TC_ABSAVE : string; //kt
526 TX_NO_BOIL : string; //kt
527 TC_NO_BOIL : string; //kt
528 TX_BLR_CLEAR : string; //kt
529 TC_BLR_CLEAR : string; //kt
530 TX_DETACH_CNF : string; //kt
531 TX_DETACH_FAILURE : string; //kt
532 TX_RETRACT_CAP : string; //kt
533 TX_RETRACT : string; //kt
534 TX_AUTH_SIGNED : string; //kt
535
536procedure SetupVars;
537//kt Added entire function to replace constant declarations 7/19/2007
538begin
539 TX_NEED_VISIT := DKLangConstW('fNotes_A_visit_is_required_before_creating_a_new_progress_notex');
540 TX_CREATE_ERR := DKLangConstW('fNotes_Error_Creating_Note');
541 TX_UPDATE_ERR := DKLangConstW('fNotes_Error_Updating_Note');
542 TX_NO_NOTE := DKLangConstW('fNotes_No_progress_note_is_currently_being_edited');
543 TX_SAVE_NOTE := DKLangConstW('fNotes_Save_Progress_Note');
544 TX_ADDEND_NO := DKLangConstW('fNotes_Cannot_make_an_addendum_to_a_note_that_is_being_edited');
545 TX_DEL_OK := CRLF + CRLF + DKLangConstW('fNotes_Delete_this_progress_notex');
546 TX_DEL_ERR := DKLangConstW('fNotes_Unable_to_Delete_Note');
547 TX_SIGN := DKLangConstW('fNotes_Sign_Note');
548 TX_COSIGN := DKLangConstW('fNotes_Cosign_Note');
549 TX_SIGN_ERR := DKLangConstW('fNotes_Unable_to_Sign_Note');
550 TX_NONOTE := DKLangConstW('fNotes_No_progress_note_is_currently_selectedx');
551 TX_NONOTE_CAP := DKLangConstW('fNotes_No_Note_Selected');
552 TX_NOPRT_NEW := DKLangConstW('fNotes_This_progress_note_may_not_be_printed_until_it_is_saved');
553 TX_NOPRT_NEW_CAP := DKLangConstW('fNotes_Save_Progress_Note');
554 TX_NO_ALERT := DKLangConstW('fNotes_There_is_insufficient_information_to_process_this_alertx') + CRLF +
555 DKLangConstW('fNotes_Either_the_alert_has_already_been_deletedx_or_it_contained_invalid_datax') + CRLF + CRLF +
556 DKLangConstW('fNotes_Click_the_NEXT_button_if_you_wish_to_continue_processing_more_alertsx');
557 TX_CAP_NO_ALERT := DKLangConstW('fNotes_Unable_to_Process_Alert');
558 TX_ORDER_LOCKED := DKLangConstW('fNotes_This_record_is_locked_by_an_action_underway_on_the_Consults_tab');
559 TC_ORDER_LOCKED := DKLangConstW('fNotes_Unable_to_access_record');
560 TX_NO_ORD_CHG := DKLangConstW('fNotes_The_note_is_still_associated_with_the_previously_selected_requestx') + CRLF +
561 DKLangConstW('fNotes_Finish_the_pending_action_on_the_consults_tabx_then_try_againx');
562 TC_NO_ORD_CHG := DKLangConstW('fNotes_Locked_Consult_Request');
563 TX_NEW_SAVE1 := DKLangConstW('fNotes_You_are_currently_editingx') + CRLF + CRLF;
564 TX_NEW_SAVE2 := CRLF + CRLF + DKLangConstW('fNotes_Do_you_wish_to_save_this_note_and_begin_a_new_onex');
565 TX_NEW_SAVE3 := CRLF + CRLF + DKLangConstW('fNotes_Do_you_wish_to_save_this_note_and_begin_a_new_addendumx');
566 TX_NEW_SAVE4 := CRLF + CRLF + DKLangConstW('fNotes_Do_you_wish_to_save_this_note_and_edit_the_one_selectedx');
567 TX_NEW_SAVE5 := CRLF + CRLF + DKLangConstW('fNotes_Do_you_wish_to_save_this_note_and_begin_a_new_Interdisciplinary_entryx');
568 TC_NEW_SAVE2 := DKLangConstW('fNotes_Create_New_Note');
569 TC_NEW_SAVE3 := DKLangConstW('fNotes_Create_New_Addendum');
570 TC_NEW_SAVE4 := DKLangConstW('fNotes_Edit_Different_Note');
571 TC_NEW_SAVE5 := DKLangConstW('fNotes_Create_New_Interdisciplinary_Entry');
572 TX_EMPTY_NOTE := CRLF + CRLF + DKLangConstW('fNotes_This_note_contains_no_text_and_will_not_be_savedx') + CRLF +
573 DKLangConstW('fNotes_Do_you_wish_to_delete_this_notex');
574 TC_EMPTY_NOTE := DKLangConstW('fNotes_Empty_Note');
575 TX_EMPTY_NOTE1 := DKLangConstW('fNotes_This_note_contains_no_text_and_can_not_be_signedx');
576 TC_NO_LOCK := DKLangConstW('fNotes_Unable_to_Lock_Note');
577 TX_ABSAVE := DKLangConstW('fNotes_It_appears_the_session_terminated_abnormally_when_this') + CRLF +
578 DKLangConstW('fNotes_note_was_last_editedx_Some_text_may_not_have_been_savedx') + CRLF + CRLF +
579 DKLangConstW('fNotes_Do_you_wish_to_continue_and_sign_the_notex');
580 TC_ABSAVE := DKLangConstW('fNotes_Possible_Missing_Text');
581 TX_NO_BOIL := DKLangConstW('fNotes_There_is_no_boilerplate_text_associated_with_this_titlex');
582 TC_NO_BOIL := DKLangConstW('fNotes_Load_Boilerplate_Text');
583 TX_BLR_CLEAR := DKLangConstW('fNotes_Do_you_want_to_clear_the_previously_loaded_boilerplate_textx');
584 TC_BLR_CLEAR := DKLangConstW('fNotes_Clear_Previous_Boilerplate_Text');
585 TX_DETACH_CNF := DKLangConstW('fNotes_Confirm_Detachment');
586 TX_DETACH_FAILURE := DKLangConstW('fNotes_Detach_failed');
587 TX_RETRACT_CAP := DKLangConstW('fNotes_Retraction_Notice');
588 TX_RETRACT := DKLangConstW('fNotes_This_document_will_now_be_RETRACTEDx__As_Suchx_it_has_been_removed') +CRLF +
589 DKLangConstW('fNotes_from_public_viewx_and_from_typical_Releases_of_Informationx') +CRLF +
590 DKLangConstW('fNotes_but_will_remain_indefinitely_discoverable_to_HIMSx') +CRLF +CRLF;
591 TX_AUTH_SIGNED := DKLangConstW('fNotes_Author_has_not_signedx_are_you_SURE_you_want_to_signx') +CRLF;
592end;
593
594var
595 uPCEShow, uPCEEdit: TPCEData;
596 ViewContext: Integer;
597 frmDrawers: TfrmDrawers;
598 uTIUContext: TTIUContext;
599 ColumnToSort: Integer;
600 ColumnSortForward: Boolean;
601 uChanging: Boolean;
602 uIDNotesActive: Boolean;
603
604constructor TfrmNotes.Create(AOwner: TComponent);
605//kt Added function 8/09
606begin
607 inherited Create(AOwner);
608 FViewNote := TStringList.Create;
609end;
610
611destructor TfrmNotes.Destroy;
612//kt Added function 8/09
613begin
614 FViewNote.Free;
615 FEditNote.Lines.Free; //kt
616 inherited Destroy;
617end;
618
619
620{ TPage common methods --------------------------------------------------------------------- }
621function TfrmNotes.AllowContextChange(var WhyNot: string): Boolean;
622begin
623 dlgFindText.CloseDialog;
624 Result := inherited AllowContextChange(WhyNot); // sets result = true
625 if Assigned(frmTemplateDialog) then
626 if Screen.ActiveForm = frmTemplateDialog then
627 //if (fsModal in frmTemplateDialog.FormState) then
628 case BOOLCHAR[frmFrame.CCOWContextChanging] of
629 '1': begin
630// WhyNot := 'A template in progress will be aborted. '; <-- original line. //kt 7/19/2007
631 WhyNot := DKLangConstW('fNotes_A_template_in_progress_will_be_abortedx'); //kt added 7/19/2007
632 Result := False;
633 end;
634 '0': begin
635// if WhyNot = 'COMMIT' then <-- original line. //kt 7/19/2007
636 if WhyNot = DKLangConstW('fNotes_COMMIT') then //kt added 7/19/2007
637 begin
638 FSilent := True;
639 frmTemplateDialog.Silent := True;
640 frmTemplateDialog.ModalResult := mrCancel;
641 end;
642 end;
643 end;
644 if Assigned(frmRemDlg) then
645 case BOOLCHAR[frmFrame.CCOWContextChanging] of
646 '1': begin
647// WhyNot := 'All current reminder processing information will be discarded. '; <-- original line. //kt 7/19/2007
648 WhyNot := DKLangConstW('fNotes_All_current_reminder_processing_information_will_be_discardedx'); //kt added 7/19/2007
649 Result := False;
650 end;
651 '0': begin
652 if WhyNot = 'COMMIT' then
653 begin
654 FSilent := True;
655 frmRemDlg.Silent := True;
656 frmRemDlg.btnCancelClick(Self);
657 end;
658 end;
659 end;
660 if EditingIndex <> -1 then
661 case BOOLCHAR[frmFrame.CCOWContextChanging] of
662 '1': begin
663 if ((vmHTML in FViewMode) and (HTMLEditor.Text <> '')) //kt 8/09
664 or ((not (vmHTML in FViewMode)) and (memNewNote.GetTextLen > 0 )) then begin //kt
665// WhyNot := WhyNot + 'A note in progress will be saved as unsigned. ' <-- original line. //kt 7/19/2007
666 WhyNot := WhyNot + DKLangConstW('fNotes_A_note_in_progress_will_be_saved_as_unsignedx') //kt added 7/19/2007
667 end else begin //kt
668// WhyNot := WhyNot + 'An empty note in progress will be deleted. '; <-- original line. //kt 7/19/2007
669 WhyNot := WhyNot + DKLangConstW('fNotes_An_empty_note_in_progress_will_be_deletedx'); //kt added 7/19/2007
670 end; //kt
671 Result := False;
672 end;
673 '0': begin
674// if WhyNot = 'COMMIT' then FSilent := True; <-- original line. //kt 7/19/2007
675 if WhyNot = DKLangConstW('fNotes_COMMIT') then FSilent := True; //kt added 7/19/2007
676 SaveCurrentNote(Result)
677 end;
678 end;
679 if Assigned(frmEncounterFrame) then
680 if Screen.ActiveForm = frmEncounterFrame then
681 //if (fsModal in frmEncounterFrame.FormState) then
682 case BOOLCHAR[frmFrame.CCOWContextChanging] of
683 '1': begin
684// WhyNot := WhyNot + 'Encounter information being edited will not be saved'; <-- original line. //kt 7/19/2007
685 WhyNot := WhyNot + DKLangConstW('fNotes_Encounter_information_being_edited_will_not_be_saved'); //kt added 7/19/2007
686 Result := False;
687 end;
688 '0': begin
689 if WhyNot = 'COMMIT' then
690 begin
691 FSilent := True;
692 frmEncounterFrame.Abort := False;
693 frmEncounterFrame.Cancel := True;
694 end;
695 end;
696 end;
697end;
698
699procedure TfrmNotes.LstNotesToPrint;
700var
701 AParentID: string;
702 SavedDocID: string;
703 Saved: boolean;
704begin
705 inherited;
706 if not uIDNotesActive then exit;
707 if lstNotes.ItemIEN = 0 then exit;
708 SavedDocID := lstNotes.ItemID;
709 if EditingIndex <> -1 then
710 begin
711 SaveCurrentNote(Saved);
712 if not Saved then Exit;
713 LoadNotes;
714 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
715 end;
716 if tvNotes.Selected = nil then exit;
717 AParentID := frmPrintList.SelectParentFromList(tvNotes,CT_NOTES);
718 if AParentID = '' then exit;
719 with tvNotes do Selected := FindPieceNode(AParentID, 1, U, Items.GetFirstNode);
720end;
721
722procedure TfrmNotes.ClearPtData;
723{ clear all controls that contain patient specific information }
724begin
725 inherited ClearPtData;
726 ClearEditControls;
727 uChanging := True;
728 tvNotes.Items.BeginUpdate;
729 KilldocTreeObjects(tvNotes);
730 tvNotes.Items.Clear;
731 tvNotes.Items.EndUpdate;
732 lvNotes.Items.Clear;
733 uChanging := False;
734 lstNotes.Clear;
735 memNote.Clear;
736 HTMLViewer.Clear; //kt
737 HTMLEditor.Clear; //kt
738 FWarmedUp := false; //kt
739 SetDisplayToHTMLvsText([vmText,vmView],nil,VIEW_ACTIVATE_ONLY); //kt
740 memPCEShow.Clear;
741 uPCEShow.Clear;
742 uPCEEdit.Clear;
743 frmDrawers.ResetTemplates;
744end;
745
746procedure TfrmNotes.DisplayPage;
747{ causes page to be visible and conditionally executes initialization code }
748begin
749 inherited DisplayPage;
750 frmFrame.ShowHideChartTabMenus(mnuViewChart);
751 frmFrame.mnuFilePrint.Tag := CT_NOTES;
752 frmFrame.mnuFilePrint.Enabled := True;
753 frmFrame.mnuFilePrintSetup.Enabled := True;
754 frmFrame.mnuFilePrintSelectedItems.Enabled := True;
755 if InitPage then
756 begin
757 EnableDisableIDNotes;
758 FDefaultContext := GetCurrentTIUContext;
759 FCurrentContext := FDefaultContext;
760 popNoteMemoSpell.Visible := SpellCheckAvailable;
761 popNoteMemoGrammar.Visible := popNoteMemoSpell.Visible;
762 Z11.Visible := popNoteMemoSpell.Visible;
763 timAutoSave.Interval := User.AutoSave * 1000; // convert seconds to milliseconds
764 SetEqualTabStops(memNewNote);
765 end;
766 // to indent the right margin need to set Paragraph.RightIndent for each paragraph?
767 if InitPatient and not (CallingContext = CC_NOTIFICATION) then
768 begin
769 SetViewContext(FDefaultContext);
770 end;
771 case CallingContext of
772 CC_INIT_PATIENT: if not InitPatient then
773 begin
774 SetViewContext(FDefaultContext);
775 end;
776 CC_NOTIFICATION: ProcessNotifications;
777 end;
778end;
779
780procedure TfrmNotes.RequestPrint;
781var
782 Saved: Boolean;
783begin
784 SetupVars; //kt added 7/19/2007 to replace constants with vars.
785 with lstNotes do
786 begin
787 if ItemIndex = EditingIndex then
788 //if ItemIEN < 0 then
789 begin
790 SaveCurrentNote(Saved);
791 if not Saved then Exit;
792 end;
793 if ItemIEN > 0 then PrintNote(ItemIEN, MakeNoteDisplayText(Items[ItemIndex])) else
794 begin
795 if ItemIEN = 0 then InfoBox(TX_NONOTE, TX_NONOTE_CAP, MB_OK);
796 if ItemIEN < 0 then InfoBox(TX_NOPRT_NEW, TX_NOPRT_NEW_CAP, MB_OK);
797 end;
798 end;
799end;
800
801{for printing multiple notes}
802procedure TfrmNotes.RequestMultiplePrint(AForm: TfrmPrintList);
803var
804 NoteIEN: int64;
805 i: integer;
806begin
807 SetupVars; //kt added 7/19/2007 to replace constants with vars.
808 with AForm.lbIDParents do
809 begin
810 for i := 0 to Items.Count - 1 do
811 begin
812 if Selected[i] then
813 begin
814 NoteIEN := StrToInt64def(Piece(TStringList(Items.Objects[i])[0],U,1),0);
815 if NoteIEN > 0 then PrintNote(NoteIEN, Items[i], TRUE) else
816 begin
817 if NoteIEN = 0 then InfoBox(TX_NONOTE, TX_NONOTE_CAP, MB_OK);
818 if NoteIEN < 0 then InfoBox(TX_NOPRT_NEW, TX_NOPRT_NEW_CAP, MB_OK);
819 end;
820 end; {if selected}
821 end; {for}
822 end; {with}
823end;
824
825procedure TfrmNotes.SetFontSize(NewFontSize: Integer);
826{ adjusts the font size of any controls that don't have ParentFont = True }
827begin
828 inherited SetFontSize(NewFontSize);
829 frmDrawers.Font.Size := NewFontSize;
830 SetEqualTabStops(memNewNote);
831end;
832
833procedure TfrmNotes.mnuChartTabClick(Sender: TObject);
834{ reroute to Chart Tab menu of the parent form: frmFrame }
835begin
836 inherited;
837 frmFrame.mnuChartTabClick(Sender);
838end;
839
840{ General procedures ----------------------------------------------------------------------- }
841
842procedure TfrmNotes.ClearEditControls;
843{ resets controls used for entering a new progress note }
844begin
845 // clear FEditNote (should FEditNote be an object with a clear method?)
846 with FEditNote do
847 begin
848 DocType := 0;
849 Title := 0;
850 TitleName := '';
851 DateTime := 0;
852 Author := 0;
853 AuthorName := '';
854 Cosigner := 0;
855 CosignerName := '';
856 Subject := '';
857 Location := 0;
858 LocationName := '';
859 PkgIEN := 0;
860 PkgPtr := '';
861 PkgRef := '';
862 NeedCPT := False;
863 Addend := 0;
864 {LastCosigner & LastCosignerName aren't cleared because they're used as default for next note.}
865 //kt 8/09 Lines := nil;
866 if Assigned (Lines) then Lines.Clear; //kt 8/09
867 PRF_IEN := 0;
868 ActionIEN := '';
869 end;
870 // clear the editing controls (also clear the new labels?)
871 txtSubject.Text := '';
872 if memNewNote <> nil then memNewNote.Clear; //CQ7012 Added test for nil
873 HTMLEditor.Clear; //kt 8/09
874 HTMLViewer.Clear; //kt 8/09
875 FHTMLEditMode := emNone; //kt 8/09
876 timAutoSave.Enabled := False;
877 // clear the PCE object for editing
878 uPCEEdit.Clear;
879 // set the tracking variables to initial state
880 EditingIndex := -1;
881 FChanged := False;
882end;
883
884procedure TfrmNotes.ShowPCEControls(ShouldShow: Boolean);
885begin
886 sptVert.Visible := ShouldShow;
887 memPCEShow.Visible := ShouldShow;
888 if(ShouldShow) then
889 sptVert.Top := memPCEShow.Top - sptVert.Height;
890 if (vmHTML in FViewMode) then begin //kt 8/09
891 HTMLViewer.Invalidate; //kt 8/09
892 end else begin //kt 8/09
893 memNote.Invalidate;
894 end; //kt 8/09
895end;
896
897procedure TfrmNotes.DisplayPCE;
898{ displays PCE information if appropriate & enables/disabled editing of PCE data }
899var
900 EnableList, ShowList: TDrawers;
901 VitalStr: TStringlist;
902 NoPCE: boolean;
903 ActionSts: TActionRec;
904 AnIEN: integer;
905begin
906 memPCEShow.Clear;
907 with lstNotes do if ItemIndex = EditingIndex then
908 begin
909 with uPCEEdit do
910 begin
911 AddStrData(memPCEShow.Lines);
912 NoPCE := (memPCEShow.Lines.Count = 0);
913 VitalStr := TStringList.create;
914 try
915 GetVitalsFromDate(VitalStr, uPCEEdit);
916 AddVitalData(VitalStr, memPCEShow.Lines);
917 finally
918 VitalStr.free;
919 end;
920 ShowPCEButtons(TRUE);
921 ShowPCEControls(cmdPCE.Enabled or (memPCEShow.Lines.Count > 0));
922 if(NoPCE and memPCEShow.Visible) then
923 memPCEShow.Lines.Insert(0, TX_NOPCE);
924 memPCEShow.SelStart := 0;
925
926 if(InteractiveRemindersActive) then
927 begin
928 if(GetReminderStatus = rsNone) then
929 EnableList := [odTemplates]
930 else
931 EnableList := [odTemplates, odReminders];
932 ShowList := [odTemplates, odReminders];
933 end
934 else
935 begin
936 EnableList := [odTemplates];
937 ShowList := [odTemplates];
938 end;
939 frmDrawers.DisplayDrawers(TRUE, EnableList, ShowList);
940 end;
941 end else
942 begin
943 ShowPCEButtons(FALSE);
944 frmDrawers.DisplayDrawers(TRUE, [odTemplates], [odTemplates]);
945 AnIEN := lstNotes.ItemIEN;
946 ActOnDocument(ActionSts, AnIEN, 'VIEW');
947 if ActionSts.Success then
948 begin
949// StatusText('Retrieving encounter information...'); <-- original line. //kt 7/19/2007
950 StatusText(DKLangConstW('fNotes_Retrieving_encounter_informationxxx')); //kt added 7/19/2007
951 with uPCEShow do
952 begin
953 NoteDateTime := MakeFMDateTime(Piece(lstNotes.Items[lstNotes.ItemIndex], U, 3));
954 PCEForNote(AnIEN, uPCEEdit);
955 AddStrData(memPCEShow.Lines);
956 NoPCE := (memPCEShow.Lines.Count = 0);
957 VitalStr := TStringList.create;
958 try
959 GetVitalsFromNote(VitalStr, uPCEShow, AnIEN);
960 AddVitalData(VitalStr, memPCEShow.Lines);
961 finally
962 VitalStr.free;
963 end;
964 ShowPCEControls(memPCEShow.Lines.Count > 0);
965 if(NoPCE and memPCEShow.Visible) then
966 memPCEShow.Lines.Insert(0, TX_NOPCE);
967 memPCEShow.SelStart := 0;
968 end;
969 StatusText('');
970 end
971 else
972 ShowPCEControls(FALSE);
973 end; {if ItemIndex}
974end;
975
976{ supporting calls for writing notes }
977
978function TfrmNotes.GetTitleText(AnIndex: Integer): string;
979{ returns non-tabbed text for the title of a note given the ItemIndex in lstNotes }
980begin
981 with lstNotes do
982 Result := FormatFMDateTime('mmm dd,yy', MakeFMDateTime(Piece(Items[AnIndex], U, 3))) +
983 ' ' + Piece(Items[AnIndex], U, 2) + ', ' + Piece(Items[AnIndex], U, 6) + ', ' +
984 Piece(Piece(Items[AnIndex], U, 5), ';', 2)
985end;
986
987function TfrmNotes.LacksRequiredForCreate: Boolean;
988{ determines if the fields required to create the note are present }
989var
990 CurTitle: Integer;
991begin
992 Result := False;
993 with FEditNote do
994 begin
995 if Title <= 0 then Result := True;
996 if Author <= 0 then Result := True;
997 if DateTime <= 0 then Result := True;
998 if IsConsultTitle(Title) and (PkgIEN = 0) then Result := True;
999 if IsSurgeryTitle(Title) and (PkgIEN = 0) then Result := True;
1000 if IsPRFTitle(Title) and (PRF_IEN = 0) and (not DocType = TYP_ADDENDUM) then Result := True;
1001 if (DocType = TYP_ADDENDUM) then
1002 begin
1003 if AskCosignerForDocument(Addend, Author) and (Cosigner <= 0) then Result := True;
1004 end else
1005 begin
1006 if Title > 0 then CurTitle := Title else CurTitle := DocType;
1007 if AskCosignerForTitle(CurTitle, Author, DateTime) and (Cosigner <= 0) then Result := True;
1008 end;
1009 end;
1010end;
1011
1012function TfrmNotes.VerifyNoteTitle: Boolean;
1013const
1014 VNT_UNKNOWN = 0;
1015 VNT_NO = 1;
1016 VNT_YES = 2;
1017var
1018 AParam: string;
1019begin
1020 if FVerifyNoteTitle = VNT_UNKNOWN then
1021 begin
1022 AParam := GetUserParam('ORWOR VERIFY NOTE TITLE');
1023 if AParam = '1' then FVerifyNoteTitle := VNT_YES else FVerifyNoteTitle := VNT_NO;
1024 end;
1025 Result := FVerifyNoteTitle = VNT_YES;
1026end;
1027
1028procedure TfrmNotes.SetSubjectVisible(ShouldShow: Boolean);
1029{ hide/show subject & resize panel accordingly - leave 6 pixel margin above memNewNote }
1030begin
1031 if ShouldShow then
1032 begin
1033 lblSubject.Visible := True;
1034 txtSubject.Visible := True;
1035 pnlFields.Height := txtSubject.Top + txtSubject.Height + 6;
1036 end else
1037 begin
1038 lblSubject.Visible := False;
1039 txtSubject.Visible := False;
1040 pnlFields.Height := lblVisit.Top + lblVisit.Height + 6;
1041 end;
1042end;
1043
1044{ consult request and note locking }
1045
1046function TfrmNotes.LockConsultRequest(AConsult: Integer): Boolean;
1047{ returns true if consult successfully locked }
1048begin
1049 SetupVars; //kt added 7/19/2007 to replace constants with vars.
1050 // *** I'm not sure about the FOrderID field - if the user is editing one note and
1051 // deletes another, FOrderID will be for editing note, then delete note, then null
1052 Result := True;
1053 FOrderID := GetConsultOrderIEN(AConsult);
1054 if (FOrderID <> '') and (FOrderID = frmConsults.OrderID) then
1055 begin
1056 InfoBox(TX_ORDER_LOCKED, TC_ORDER_LOCKED, MB_OK);
1057 Result := False;
1058 Exit;
1059 end;
1060 if (FOrderId <> '') then
1061 if not OrderCanBeLocked(FOrderID) then Result := False;
1062 if not Result then FOrderID := '';
1063end;
1064
1065function TfrmNotes.LockConsultRequestAndNote(AnIEN: Int64): Boolean;
1066{ returns true if note and associated request successfully locked }
1067var
1068 AConsult: Integer;
1069 LockMsg, x: string;
1070begin
1071 SetupVars; //kt added 7/19/2007 to replace constants with vars.
1072 Result := True;
1073 AConsult := 0;
1074 if frmConsults.ActiveEditOf(AnIEN) then
1075 begin
1076 InfoBox(TX_ORDER_LOCKED, TC_ORDER_LOCKED, MB_OK);
1077 Result := False;
1078 Exit;
1079 end;
1080 if Changes.Exist(CH_DOC, IntToStr(AnIEN)) then Exit; // already locked
1081 // try to lock the consult request first, if there is one
1082 if IsConsultTitle(TitleForNote(AnIEN)) then
1083 begin
1084 x := GetPackageRefForNote(lstNotes.ItemIEN);
1085 AConsult := StrToIntDef(Piece(x, ';', 1), 0);
1086 Result := LockConsultRequest(AConsult);
1087 end;
1088 // now try to lock the note
1089 if Result then
1090 begin
1091 LockDocument(AnIEN, LockMsg);
1092 if LockMsg <> '' then
1093 begin
1094 Result := False;
1095 // if can't lock the note, unlock the consult request that was just locked
1096 if AConsult > 0 then
1097 begin
1098 UnlockOrderIfAble(FOrderID);
1099 FOrderID := '';
1100 end;
1101 InfoBox(LockMsg, TC_NO_LOCK, MB_OK);
1102 end;
1103 end;
1104end;
1105
1106procedure TfrmNotes.UnlockConsultRequest(ANote: Int64; AConsult: Integer = 0);
1107(*var
1108 x: string;*)
1109begin
1110(* if (AConsult = 0) and IsConsultTitle(TitleForNote(ANote)) then
1111 begin
1112 x := GetPackageRefForNote(ANote);
1113 AConsult := StrToIntDef(Piece(x, ';', 1), 0);
1114 end;
1115 if AConsult = 0 then Exit;*)
1116 if AConsult = 0 then AConsult := GetConsultIENForNote(ANote);
1117 if AConsult <= 0 then exit;
1118 FOrderID := GetConsultOrderIEN(AConsult);
1119 UnlockOrderIfAble(FOrderID);
1120 FOrderID := '';
1121end;
1122
1123function TfrmNotes.ActiveEditOf(AnIEN: Int64; ARequest: integer): Boolean;
1124begin
1125 Result := False;
1126 if EditingIndex < 0 then Exit;
1127 if lstNotes.GetIEN(EditingIndex) = AnIEN then
1128 begin
1129 Result := True;
1130 Exit;
1131 end;
1132 with FEditNote do if (PkgIEN = ARequest) and (PkgPtr = PKG_CONSULTS) then Result := True;
1133end;
1134
1135{ create, edit & save notes }
1136
1137procedure TfrmNotes.InsertNewNote(IsIDChild: boolean; AnIDParent: integer);
1138{ creates the editing context for a new progress note & inserts stub into top of view list }
1139var
1140 EnableAutosave, HaveRequired: Boolean;
1141 CreatedNote: TCreatedDoc;
1142 TmpBoilerPlate: TStringList;
1143 tmpNode: TTreeNode;
1144 x, WhyNot, DocInfo: string;
1145 tempPos : integer; //kt 6-1-05
1146 Mode : TViewModeSet; //kt 8/09
1147 BoilerplateIsHTML : boolean;//kt 8/09
1148
1149begin
1150 SetupVars; //kt added 7/19/2007 to replace constants with vars.
1151 if frmFrame.Timedout then Exit;
1152
1153 FNewIDChild := IsIDChild;
1154 EnableAutosave := FALSE;
1155 TmpBoilerPlate := nil;
1156 try
1157 ClearEditControls;
1158 FEditNote.Lines.Free; //(done d/t full wipe-out on line below} //kt 8/09
1159 FillChar(FEditNote, SizeOf(FEditNote), 0); //v15.7
1160 FEditNote.Lines := TStringList.Create; //Freed in Destructor //kt 8/09
1161 with FEditNote do
1162 begin
1163 DocType := TYP_PROGRESS_NOTE;
1164 IsNewNote := True;
1165 Title := DfltNoteTitle;
1166 TitleName := DfltNoteTitleName;
1167 if IsIDChild and (not CanTitleBeIDChild(Title, WhyNot)) then
1168 begin
1169 Title := 0;
1170 TitleName := '';
1171 end;
1172 if IsSurgeryTitle(Title) then // Don't want surgery title sneaking in unchallenged
1173 begin
1174 Title := 0;
1175 TitleName := '';
1176 end;
1177 //DateTime := FMNow; //kt 6-1-05
1178 DateTime := Encounter.DateTime; //kt 6-1-05
1179 //kt begin changes -------------- 6-1-05
1180 if LastAuthor<>0 then begin
1181 Author := LastAuthor;
1182 AuthorName := LastAuthorName;
1183 end else begin
1184 Author := User.DUZ;
1185 AuthorName := User.Name;
1186 end;
1187 //kt 6-1-05 Author := User.DUZ;
1188 //kt 6-1-05 AuthorName := User.Name;
1189 //kt end changes -------------- 6-1-05
1190 Location := Encounter.Location;
1191 LocationName := Encounter.LocationName;
1192 VisitDate := Encounter.DateTime;
1193 if IsIDChild then
1194 IDParent := AnIDParent
1195 else
1196 IDParent := 0;
1197 // Cosigner & PkgRef, if needed, will be set by fNoteProps
1198 end;
1199 // check to see if interaction necessary to get required fields
1200 GetUnresolvedConsultsInfo;
1201 if LacksRequiredForCreate or VerifyNoteTitle or uUnresolvedConsults.UnresolvedConsultsExist
1202 then HaveRequired := ExecuteNoteProperties(FEditNote, CT_NOTES, IsIDChild, FNewIDChild, '', 0)
1203 else HaveRequired := True;
1204 //kt begin addition 6-1-05 -----------------
1205 LastAuthor := FEditNote.Author;
1206 LastAuthorName := FEditNote.AuthorName;
1207 tempPos := Pos(' - ',LastAuthorName);
1208 if tempPos>0 then begin //trim off title, e.g. "Jones,John - Physician
1209 LastAuthorName:=UpperCase(Trim(MidStr(LastAuthorName,1,tempPos)));
1210 end;
1211 //kt end addition 6-1-05 -----------------
1212 // lock the consult request if there is a consult
1213 with FEditNote do if (PkgIEN > 0) and (PkgPtr = PKG_CONSULTS) then HaveRequired := LockConsultRequest(PkgIEN);
1214 if HaveRequired then
1215 begin
1216 // set up uPCEEdit for entry of new note
1217 uPCEEdit.UseEncounter := True;
1218 uPCEEdit.NoteDateTime := FEditNote.DateTime;
1219 uPCEEdit.PCEForNote(USE_CURRENT_VISITSTR, uPCEShow);
1220 FEditNote.NeedCPT := uPCEEdit.CPTRequired;
1221 // create the note
1222 PutNewNote(CreatedNote, FEditNote);
1223 uPCEEdit.NoteIEN := CreatedNote.IEN;
1224 if CreatedNote.IEN > 0 then LockDocument(CreatedNote.IEN, CreatedNote.ErrorText);
1225 if CreatedNote.ErrorText = '' then
1226 begin
1227 //x := $$RESOLVE^TIUSRVLO formatted string
1228 //7348^Note Title^3000913^NERD, YOURA (N0165)^1329;Rich Vertigan;VERTIGAN,RICH^8E REHAB MED^complete^Adm: 11/05/98;2981105.095547^ ;^^0^^^2
1229 with FEditNote do
1230 begin
1231 x := IntToStr(CreatedNote.IEN) + U + TitleName + U + FloatToStr(FEditNote.DateTime) + U +
1232 Patient.Name + U + IntToStr(Author) + ';' + AuthorName + U + LocationName + U + 'new' + U +
1233 U + U + U + U + U + U + U;
1234 //Link Note to PRF Action
1235 if PRF_IEN <> 0 then
1236 if sCallV('TIU LINK TO FLAG', [CreatedNote.IEN,PRF_IEN,ActionIEN,Patient.DFN]) = '0' then
1237 ShowMessage('TIU LINK TO FLAG: FAILED');
1238 end;
1239
1240 lstNotes.Items.Insert(0, x);
1241 uChanging := True;
1242 tvNotes.Items.BeginUpdate;
1243 if IsIDChild then
1244 begin
1245 tmpNode := tvNotes.FindPieceNode(IntToStr(AnIDParent), 1, U, tvNotes.Items.GetFirstNode);
1246 tmpNode.ImageIndex := IMG_IDNOTE_OPEN;
1247 tmpNode.SelectedIndex := IMG_IDNOTE_OPEN;
1248 tmpNode := tvNotes.Items.AddChildObjectFirst(tmpNode, MakeNoteDisplayText(x), MakeNoteTreeObject(x));
1249 tmpNode.ImageIndex := IMG_ID_CHILD;
1250 tmpNode.SelectedIndex := IMG_ID_CHILD;
1251 end
1252 else
1253 begin
1254// tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, 'New Note in Progress', <-- original line. //kt 7/19/2007
1255 tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, DKLangConstW('fNotes_New_Note_in_Progress'), //kt added 7/19/2007
1256 MakeNoteTreeObject('NEW^New Note in Progress^^^^^^^^^^^%^0'));
1257 TORTreeNode(tmpNode).StringData := 'NEW^New Note in Progress^^^^^^^^^^^%^0';
1258 tmpNode.ImageIndex := IMG_TOP_LEVEL;
1259 tmpNode := tvNotes.Items.AddChildObjectFirst(tmpNode, MakeNoteDisplayText(x), MakeNoteTreeObject(x));
1260 tmpNode.ImageIndex := IMG_SINGLE;
1261 tmpNode.SelectedIndex := IMG_SINGLE;
1262 end;
1263 tmpNode.StateIndex := IMG_NO_IMAGES;
1264 TORTreeNode(tmpNode).StringData := x;
1265 tvNotes.Selected := tmpNode;
1266 tvNotes.Items.EndUpdate;
1267 uChanging := False;
1268 Changes.Add(CH_DOC, IntToStr(CreatedNote.IEN), GetTitleText(0), '', CH_SIGN_YES);
1269 lstNotes.ItemIndex := 0;
1270 EditingIndex := 0;
1271 SetSubjectVisible(AskSubjectForNotes);
1272 if not assigned(TmpBoilerPlate) then
1273 TmpBoilerPlate := TStringList.Create;
1274 LoadBoilerPlate(TmpBoilerPlate, FEditNote.Title);
1275 FChanged := False;
1276 cmdChangeClick(Self); // will set captions, sign state for Changes
1277 Mode := [vmEdit] + [vmHTML_MODE[fOptionsNotes.DefaultEditHTMLMode]]; //kt 8/09
1278 SetDisplayToHTMLvsText(Mode, nil, VIEW_ACTIVATE_ONLY); // kt 8/09
1279 lstNotesClick(Self); // will make pnlWrite visible
1280 if timAutoSave.Interval <> 0 then EnableAutosave := TRUE;
1281 //kt 6/3/09 original --> if txtSubject.Visible then txtSubject.SetFocus else memNewNote.SetFocus;
1282 if txtSubject.Visible then begin //kt 8/09
1283 txtSubject.SetFocus; //kt 8/09
1284 end else begin //kt 8/09
1285 SetEditorFocus; //kt memNewNote.SetFocus; //kt 8/09
1286 end; //kt 8/09
1287 end else
1288 begin
1289 // if note creation failed or failed to get note lock (both unlikely), unlock consult
1290 with FEditNote do if (PkgIEN > 0) and (PkgPtr = PKG_CONSULTS) then UnlockConsultRequest(0, PkgIEN);
1291 InfoBox(CreatedNote.ErrorText, TX_CREATE_ERR, MB_OK);
1292 HaveRequired := False;
1293 end; {if CreatedNote.IEN}
1294 end; {if HaveRequired}
1295 if not HaveRequired then
1296 begin
1297 ClearEditControls;
1298 ShowPCEButtons(False);
1299 end;
1300 finally
1301 if assigned(TmpBoilerPlate) then
1302 begin
1303 DocInfo := MakeXMLParamTIU(IntToStr(CreatedNote.IEN), FEditNote);
1304 ExecuteTemplateOrBoilerPlate(TmpBoilerPlate, FEditNote.Title, ltTitle, Self, 'Title: ' + FEditNote.TitleName, DocInfo);
1305 //kt original --> memNewNote.Lines.Assign(TmpBoilerPlate);
1306 BoilerplateIsHTML := rHTMLTools.IsHTML(TmpBoilerPlate.Text); //kt 8/09
1307 FEditNote.Lines.Assign(TmpBoilerPlate); //kt 8/09
1308 if not ((vmHTML in FViewMode)) and BoilerplateIsHTML then begin //kt 8/09
1309 FViewMode := FViewMode - [vmText] + [vmHTML]; //kt 8/09
1310 end; //kt 8/09
1311 SetDisplayToHTMLvsText(FViewMode,FEditNote.Lines); //kt 8/09
1312 if (vmHTML in FViewMode) then begin //kt 8/09
1313 HtmlEditor.MoveCaretToEnd; //kt 8/09
1314 Application.ProcessMessages; //kt 8/09
1315 end; //kt 8/09
1316 UpdateNoteAuthor(DocInfo);
1317 TmpBoilerPlate.Free;
1318 end;
1319 if EnableAutosave then // Don't enable autosave until after dialog fields have been resolved
1320 timAutoSave.Enabled := True;
1321 end;
1322 frmNotes.pnlWriteResize(Self);
1323end;
1324
1325
1326procedure TfrmNotes.SetEditorFocus;
1327//kt added function 8/09
1328begin
1329 try
1330 if (vmHTML in FViewMode) then begin //kt 8/09
1331 HtmlEditor.SetFocus; //kt 8/09
1332 end else begin //kt 8/09
1333 memNewNote.SetFocus;
1334 end; //kt 8/09
1335 except
1336 on E: Exception do begin
1337 // ignore error. Info in E
1338 end;
1339 end;
1340end;
1341
1342
1343procedure TfrmNotes.InsertAddendum;
1344{ sets up fields of pnlWrite to write an addendum for the selected note }
1345const
1346 AS_ADDENDUM = True;
1347 IS_ID_CHILD = False;
1348var
1349 HaveRequired: Boolean;
1350 CreatedNote: TCreatedDoc;
1351 tmpNode: TTreeNode;
1352 x: string;
1353begin
1354 SetupVars; //kt added 7/19/2007 to replace constants with vars.
1355 ClearEditControls;
1356 with FEditNote do
1357 begin
1358 DocType := TYP_ADDENDUM;
1359 IsNewNote := False;
1360 Title := TitleForNote(lstNotes.ItemIEN);
1361 TitleName := Piece(lstNotes.Items[lstNotes.ItemIndex], U, 2);
1362 if Copy(TitleName,1,1) = '+' then TitleName := Copy(TitleName, 3, 199);
1363 DateTime := FMNow;
1364 Author := User.DUZ;
1365 AuthorName := User.Name;
1366 x := GetPackageRefForNote(lstNotes.ItemIEN);
1367 if Piece(x, U, 1) <> '-1' then
1368 begin
1369 PkgRef := GetPackageRefForNote(lstNotes.ItemIEN);
1370 PkgIEN := StrToIntDef(Piece(PkgRef, ';', 1), 0);
1371 PkgPtr := Piece(PkgRef, ';', 2);
1372 end;
1373 Addend := lstNotes.ItemIEN;
1374 //Lines := memNewNote.Lines;
1375 // Cosigner, if needed, will be set by fNoteProps
1376 // Location info will be set after the encounter is loaded
1377 end;
1378 // check to see if interaction necessary to get required fields
1379 if LacksRequiredForCreate
1380 then HaveRequired := ExecuteNoteProperties(FEditNote, CT_NOTES, IS_ID_CHILD, False, '', 0)
1381 else HaveRequired := True;
1382 // lock the consult request if there is a consult
1383 if HaveRequired then
1384 with FEditNote do
1385 if (PkgIEN > 0) and (PkgPtr = PKG_CONSULTS) then HaveRequired := LockConsultRequest(PkgIEN);
1386 if HaveRequired then
1387 begin
1388 uPCEEdit.NoteDateTime := FEditNote.DateTime;
1389 uPCEEdit.PCEForNote(FEditNote.Addend, uPCEShow);
1390 FEditNote.Location := uPCEEdit.Location;
1391 FEditNote.LocationName := ExternalName(uPCEEdit.Location, 44);
1392 FEditNote.VisitDate := uPCEEdit.DateTime;
1393 PutAddendum(CreatedNote, FEditNote, FEditNote.Addend);
1394 uPCEEdit.NoteIEN := CreatedNote.IEN;
1395 if CreatedNote.IEN > 0 then LockDocument(CreatedNote.IEN, CreatedNote.ErrorText);
1396 if CreatedNote.ErrorText = '' then
1397 begin
1398 with FEditNote do
1399 begin
1400 x := IntToStr(CreatedNote.IEN) + U + 'Addendum to ' + TitleName + U + FloatToStr(DateTime) + U +
1401 Patient.Name + U + IntToStr(Author) + ';' + AuthorName + U + LocationName + U + 'new' + U +
1402 U + U + U + U + U + U + U;
1403 end;
1404
1405 lstNotes.Items.Insert(0, x);
1406 uChanging := True;
1407 tvNotes.Items.BeginUpdate;
1408// tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, 'New Addendum in Progress', <-- original line. //kt 7/19/2007
1409 tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, DKLangConstW('fNotes_New_Addendum_in_Progress'), //kt added 7/19/2007
1410 MakeNoteTreeObject('ADDENDUM^New Addendum in Progress^^^^^^^^^^^%^0'));
1411 TORTreeNode(tmpNode).StringData := 'ADDENDUM^New Addendum in Progress^^^^^^^^^^^%^0';
1412 tmpNode.ImageIndex := IMG_TOP_LEVEL;
1413 tmpNode := tvNotes.Items.AddChildObjectFirst(tmpNode, MakeNoteDisplayText(x), MakeNoteTreeObject(x));
1414 TORTreeNode(tmpNode).StringData := x;
1415
1416 tmpNode.ImageIndex := IMG_ADDENDUM;
1417 tmpNode.SelectedIndex := IMG_ADDENDUM;
1418 tvNotes.Selected := tmpNode;
1419 tvNotes.Items.EndUpdate;
1420 uChanging := False;
1421 Changes.Add(CH_DOC, IntToStr(CreatedNote.IEN), GetTitleText(0), '', CH_SIGN_YES);
1422 lstNotes.ItemIndex := 0;
1423 EditingIndex := 0;
1424 SetSubjectVisible(AskSubjectForNotes);
1425 cmdChangeClick(Self); // will set captions, sign state for Changes
1426 lstNotesClick(Self); // will make pnlWrite visible
1427 if timAutoSave.Interval <> 0 then timAutoSave.Enabled := True;
1428 SetEditorFocus; //kt memNewNote.SetFocus; //kt 8/09
1429 end else
1430 begin
1431 // if note creation failed or failed to get note lock (both unlikely), unlock consult
1432 with FEditNote do if (PkgIEN > 0) and (PkgPtr = PKG_CONSULTS) then UnlockConsultRequest(0, PkgIEN);
1433 InfoBox(CreatedNote.ErrorText, TX_CREATE_ERR, MB_OK);
1434 HaveRequired := False;
1435 end; {if CreatedNote.IEN}
1436 end; {if HaveRequired}
1437 if not HaveRequired then ClearEditControls;
1438end;
1439
1440procedure TfrmNotes.LoadForEdit;
1441{ retrieves an existing note and places the data in the fields of pnlWrite }
1442var
1443 tmpNode: TTreeNode;
1444 x: string;
1445 Mode : TViewModeSet; //kt
1446
1447begin
1448 ClearEditControls;
1449 if not LockConsultRequestAndNote(lstNotes.ItemIEN) then Exit;
1450 EditingIndex := lstNotes.ItemIndex;
1451 Changes.Add(CH_DOC, lstNotes.ItemID, GetTitleText(EditingIndex), '', CH_SIGN_YES);
1452 GetNoteForEdit(FEditNote, lstNotes.ItemIEN);
1453 Mode := [vmEdit] + [vmHTML_MODE[IsHTML(FEditNote.Lines) or (vmHTML in FViewMode)]]; //kt 8/09
1454 SetDisplayToHTMLvsText(Mode,FEditNote.Lines); //kt 8/09
1455 //kt memNewNote.Lines.Assign(FEditNote.Lines); //kt 8/09
1456 FChanged := False;
1457 if FEditNote.Title = TYP_ADDENDUM then
1458 begin
1459 FEditNote.DocType := TYP_ADDENDUM;
1460 FEditNote.TitleName := Piece(lstNotes.Items[lstNotes.ItemIndex], U, 2);
1461 if Copy(FEditNote.TitleName,1,1) = '+' then FEditNote.TitleName := Copy(FEditNote.TitleName, 3, 199);
1462// if CompareText(Copy(FEditNote.TitleName, 1, 8), 'Addendum') <> 0 <-- original line. //kt 7/19/2007
1463 if CompareText(Copy(FEditNote.TitleName, 1, 8), DKLangConstW('fNotes_Addendum')) <> 0 //kt added 7/19/2007
1464// then FEditNote.TitleName := FEditNote.TitleName + 'Addendum to '; <-- original line. //kt 7/19/2007
1465 then FEditNote.TitleName := FEditNote.TitleName + DKLangConstW('fNotes_Addendum_to'); //kt added 7/19/2007
1466 end;
1467
1468 uChanging := True;
1469 tvNotes.Items.BeginUpdate;
1470
1471 tmpNode := tvNotes.FindPieceNode('EDIT', 1, U, nil);
1472 if tmpNode = nil then
1473 begin
1474// tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, 'Note being edited', <-- original line. //kt 7/19/2007
1475 tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, DKLangConstW('fNotes_Note_being_edited'), //kt added 7/19/2007
1476 MakeNoteTreeObject('EDIT^Note being edited^^^^^^^^^^^%^0'));
1477 TORTreeNode(tmpNode).StringData := 'EDIT^Note being edited^^^^^^^^^^^%^0';
1478 end
1479 else
1480 tmpNode.DeleteChildren;
1481 x := lstNotes.Items[lstNotes.ItemIndex];
1482 tmpNode.ImageIndex := IMG_TOP_LEVEL;
1483 tmpNode := tvNotes.Items.AddChildObjectFirst(tmpNode, MakeNoteDisplayText(x), MakeNoteTreeObject(x));
1484 TORTreeNode(tmpNode).StringData := x;
1485//if CompareText(Copy(FEditNote.TitleName, 1, 8), 'Addendum') <> 0 then <-- original line. //kt 7/19/2007
1486 if CompareText(Copy(FEditNote.TitleName, 1, 8), DKLangConstW('fNotes_Addendum')) <> 0 then //kt added 7/19/2007
1487 tmpNode.ImageIndex := IMG_SINGLE
1488 else
1489 tmpNode.ImageIndex := IMG_ADDENDUM;
1490 tmpNode.SelectedIndex := tmpNode.ImageIndex;
1491 tvNotes.Selected := tmpNode;
1492 tvNotes.Items.EndUpdate;
1493 uChanging := False;
1494
1495 uPCEEdit.NoteDateTime := MakeFMDateTime(Piece(lstNotes.Items[lstNotes.ItemIndex], U, 3));
1496 uPCEEdit.PCEForNote(lstNotes.ItemIEN, uPCEShow);
1497 FEditNote.NeedCPT := uPCEEdit.CPTRequired;
1498 txtSubject.Text := FEditNote.Subject;
1499 SetSubjectVisible(AskSubjectForNotes);
1500 cmdChangeClick(Self); // will set captions, sign state for Changes
1501 lstNotesClick(Self); // will make pnlWrite visible
1502 if timAutoSave.Interval <> 0 then timAutoSave.Enabled := True;
1503 SetEditorFocus; //kt memNewNote.SetFocus; //kt 8/09
1504end;
1505
1506procedure TfrmNotes.SaveEditedNote(var Saved: Boolean);
1507{ validates fields and sends the updated note to the server }
1508var
1509 UpdatedNote: TCreatedDoc;
1510 x: string;
1511 EmptyNote : boolean; //kt
1512
1513begin
1514 SetupVars; //kt added 7/19/2007 to replace constants with vars.
1515 Saved := False;
1516 if not (vmHTML in FViewMode) then begin //kt 8/09
1517 EmptyNote := (memNewNote.GetTextLen = 0) //kt 8/09
1518 or (not ContainsVisibleChar(memNewNote.Text)); //kt 8/09
1519 end else begin //kt 8/09
1520 EmptyNote := (HtmlEditor.GetTextLen = 0) //kt 8/09
1521 or (not ContainsVisibleChar(HtmlEditor.Text)); //kt 8/09
1522 end; //kt 8/09
1523 //kt 8/09 if (memNewNote.GetTextLen = 0) or (not ContainsVisibleChar(memNewNote.Text)) then
1524 //kt 8/09 begin
1525 if EmptyNote then begin
1526 lstNotes.ItemIndex := EditingIndex;
1527 x := lstNotes.ItemID;
1528 uChanging := True;
1529 tvNotes.Selected := tvNotes.FindPieceNode(x, 1, U, tvNotes.Items.GetFirstNode);
1530 uChanging := False;
1531 tvNotesChange(Self, tvNotes.Selected);
1532 if FSilent or
1533 ((not FSilent) and
1534 (InfoBox(GetTitleText(EditingIndex) + TX_EMPTY_NOTE, TC_EMPTY_NOTE, MB_YESNO) = IDYES))
1535 then
1536 begin
1537 FConfirmed := True;
1538 mnuActDeleteClick(Self);
1539 Saved := True;
1540 FDeleted := True;
1541 end
1542 else
1543 FConfirmed := False;
1544 Exit;
1545 end;
1546 //ExpandTabsFilter(memNewNote.Lines, TAB_STOP_CHARS);
1547 if FEditNote.Lines = nil then FEditNote.Lines := TStringList.Create; //kt
1548 //kt 8/09 FEditNote.Lines := memNewNote.Lines;
1549 if (vmHTML in FViewMode) then begin //kt 8/09
1550 SplitToArray(WrapHTML(HtmlEditor.HTMLText), FEditNote.Lines); //kt 8/09
1551 rHTMLTools.InsertSubs(FEditNote.Lines); //kt 4/21/10
1552 end else begin //kt 8/09
1553 FEditNote.Lines.Assign(memNewNote.Lines); //kt 8/09
1554 end; //kt 8/09
1555 //FEditNote.Lines:= SetLinesTo74ForSave(memNewNote.Lines, Self);
1556 FEditNote.Subject := txtSubject.Text;
1557 FEditNote.NeedCPT := uPCEEdit.CPTRequired;
1558 timAutoSave.Enabled := False;
1559 try
1560 PutEditedNote(UpdatedNote, FEditNote, lstNotes.GetIEN(EditingIndex));
1561 finally
1562 timAutoSave.Enabled := True;
1563 end;
1564 // there's no unlocking here since the note is still in Changes after a save
1565 if UpdatedNote.IEN > 0 then
1566 begin
1567 if lstNotes.ItemIndex = EditingIndex then
1568 begin
1569 EditingIndex := -1;
1570 lstNotesClick(Self);
1571 end;
1572 EditingIndex := -1; // make sure EditingIndex reset even if not viewing edited note
1573 Saved := True;
1574 FNewIDChild := False;
1575 FChanged := False;
1576 HTMLEditor.KeyStruck := false; //kt
1577 end else
1578 begin
1579 if not FSilent then
1580 InfoBox(TX_SAVE_ERROR1 + UpdatedNote.ErrorText + TX_SAVE_ERROR2, TC_SAVE_ERROR, MB_OK or MB_ICONWARNING);
1581 end;
1582end;
1583
1584procedure TfrmNotes.SaveCurrentNote(var Saved: Boolean);
1585{ called whenever a note should be saved - uses IEN to call appropriate save logic }
1586begin
1587 if EditingIndex < 0 then Exit;
1588 SaveEditedNote(Saved);
1589end;
1590
1591{ Form events ------------------------------------------------------------------------------ }
1592
1593procedure TfrmNotes.FormCreate(Sender: TObject);
1594var
1595 CacheDir : AnsiString; //kt 9-05
1596begin
1597 inherited;
1598 //kt --- Begin Modification 9-2005, 8/09 -------------
1599 fOptionsNotes.Loaded; //ported from version .15 1-27-10
1600 CacheDir := ExtractFilePath(ParamStr(0))+ 'Cache'; //kt 9-05
1601 if not DirectoryExists(CacheDir) then CreateDir(CacheDir);
1602 //kt HTMLfilename := CacheDir + '\html_note.html'; //kt 5-05
1603 LastAuthor :=0; //kt 5-05
1604 LastAuthorName:=''; //kt 5-05
1605 DesiredHTMLFontSize := 2; //Used later to downsize during printing.
1606 SetRegHTMLFontSize(DesiredHTMLFontSize); //0=SMALLEST ... 4=LARGEST
1607 //kt Note: On creation, THtmlObj will remember Application.OnMessage. But if
1608 // another object (say a prior THtmlObj) has become active and already
1609 // changed the handler, then there will be a problem. So probably best
1610 // to create them all at one. //kt
1611 HtmlViewer := THtmlObj.Create(pnlHTMLViewer,Application);
1612 HtmlEditor := THtmlObj.Create(pnlHTMLEdit,Application);
1613 TWinControl(HtmlViewer).Parent:=pnlHTMLViewer;
1614 TWinControl(HtmlViewer).Align:=alClient;
1615 HtmlEditor.PrevControl := cmdPCE;
1616 HtmlEditor.NextControl := cmdChange;
1617 //Note: A 'loaded' function will initialize the THtmlObj's, but it can't be
1618 // done until after this constructor is done, and this TfrmNotes has been
1619 // assigned a parent. So done elsewhere.
1620 HtmlViewer.PopupMenu := popNoteMemo;
1621 TWinControl(HtmlEditor).Parent:=pnlHTMLEdit;
1622 TWinControl(HtmlEditor).Align:=alClient;
1623 HtmlEditor.PopupMenu := popNoteMemo;
1624 cbFontNames.Items.Assign(Screen.Fonts);
1625 FViewMode := [vmView,vmText];
1626 FHTMLEditMode := emNone;
1627 HTMLViewer.BackgroundColor := ReadOnlyColor;
1628 //kt --- End Modification 9-2005, 8/09 ------
1629 PageID := CT_NOTES;
1630 memNote.Color := ReadOnlyColor;
1631 memPCEShow.Color := ReadOnlyColor;
1632 lblNewTitle.Color := ReadOnlyColor;
1633 EditingIndex := -1;
1634 FEditNote.LastCosigner := 0;
1635 FEditNote.LastCosignerName := '';
1636 FLastNoteID := '';
1637 frmDrawers := TfrmDrawers.CreateDrawers(Self, pnlDrawers, [],[]);
1638 frmDrawers.Align := alBottom;
1639 frmDrawers.RichEditControl := memNewNote;
1640 frmDrawers.HTMLEditControl := HtmlEditor; //kt 8/09
1641 frmDrawers.HTMLModeSwitcher := SetHTMLEditMode; //kt 8/09
1642 frmDrawers.NewNoteButton := cmdNewNote;
1643 frmDrawers.Splitter := splDrawers;
1644 frmDrawers.DefTempPiece := 1;
1645 tvNotes.Images := dmodShared.imgNotes;
1646 tvNotes.StateImages := dmodShared.imgImages;
1647 lvNotes.StateImages := dmodShared.imgImages;
1648 lvNotes.SmallImages := dmodShared.imgNotes;
1649 FImageFlag := TBitmap.Create;
1650 FDocList := TStringList.Create;
1651 TAccessibleTreeView.WrapControl(tvNotes);
1652 RestoreRegHTMLFontSize; //kt, elh 8/09
1653end;
1654
1655procedure TfrmNotes.pnlRightResize(Sender: TObject);
1656{ memNote (TRichEdit) doesn't repaint appropriately unless it's parent panel is refreshed }
1657begin
1658 inherited;
1659 pnlRight.Refresh;
1660 if (vmHTML in FViewMode) then begin //kt 8/09
1661 HTMLViewer.Repaint; //kt 8/09
1662 end else begin //kt 8/09
1663 memNote.Repaint
1664 end; //kt 8/09
1665end;
1666
1667procedure TfrmNotes.pnlWriteResize(Sender: TObject);
1668const
1669 LEFT_MARGIN = 4;
1670begin
1671 inherited;
1672 //kt NOTE: I don't know how to do the equivalent for HTML. Actually, I don't think it applies.
1673 LimitEditWidth(memNewNote, MAX_PROGRESSNOTE_WIDTH - 1);
1674
1675 //CQ7012 Added test for nil
1676 if memNewNote <> nil then
1677 memNewNote.Constraints.MinWidth := TextWidthByFont(memNewNote.Font.Handle, StringOfChar('X', MAX_PROGRESSNOTE_WIDTH)) + (LEFT_MARGIN * 2) + ScrollBarWidth;
1678 //CQ7012 Added test for nil
1679 if (Self <> nil) and (pnlLeft <> nil) and (pnlWrite <> nil) and (sptHorz <> nil) then
1680 pnlLeft.Width := self.ClientWidth - pnlWrite.Width - sptHorz.Width;
1681end;
1682
1683{ Left panel (selector) events ------------------------------------------------------------- }
1684
1685procedure TfrmNotes.lstNotesClick(Sender: TObject);
1686{ loads the text for the selected note or displays the editing panel for the selected note }
1687var
1688 Note : TStrings; //kt 6/09. Will be pointer to FViewNote, or FEditNote.Lines
1689 Editing : boolean; //kt 8/09
1690 Mode : TViewModeSet; //kt 8/09
1691 IsHTML : boolean; //kt 8/09
1692
1693begin
1694 inherited;
1695 //kt 8/09 with lstNotes do if ItemIndex = -1 then Exit
1696 //kt 8/09 else if ItemIndex = EditingIndex then
1697
1698 with lstNotes do begin //kt 8/09
1699 if ItemIndex = -1 then Exit; //kt 8/09
1700 Editing := (ItemIndex = EditingIndex); //kt 8/09
1701 if Editing then begin //kt 8/09
1702 if FEditNote.Lines = nil then FEditNote.Lines := TStringList.Create; //kt 8/09
1703 Note := FEditNote.Lines; //kt 8/09
1704 {pnlWrite.Visible := True; //kt 8/09
1705 pnlRead.Visible := False; } //kt done in SetHTMLorTextEditor //kt 8/09
1706 mnuViewDetail.Enabled := False;
1707 if (FEditNote.IDParent <> 0) and (not FNewIDChild) then
1708 mnuActChange.Enabled := False
1709 else
1710 mnuActChange.Enabled := True;
1711 mnuActLoadBoiler.Enabled := True;
1712 UpdateReminderFinish;
1713 Mode := [vmEdit] + [vmHTML_MODE[(FHTMLEditMode=emHTML)]]; //kt 8/09
1714 SetDisplayToHTMLvsText(Mode,FEditNote.Lines,VIEW_ACTIVATE_ONLY); //kt 8/09
1715 FWarmedUp := true; //kt 8/09
1716 end else begin
1717 // StatusText('Retrieving selected progress note...'); <-- original line. //kt 7/19/2007
1718 StatusText(DKLangConstW('fNotes_Retrieving_selected_progress_notexxx')); //kt added 7/19/2007
1719 Screen.Cursor := crAppStart; //kt changed from crHourGlass; 1/1/05
1720 //kt 8/09 pnlRead.Visible := True;
1721 //kt 8/09 pnlWrite.Visible := False;
1722 UpdateReminderFinish;
1723 lblTitle.Caption := Piece(Piece(Items[ItemIndex], U, 8), ';', 1) + #9 + Piece(Items[ItemIndex], U, 2) + ', ' +
1724 Piece(Items[ItemIndex], U, 6) + ', ' + Piece(Piece(Items[ItemIndex], U, 5), ';', 2) +
1725 ' (' + FormatFMDateTime('mmm dd,yy@hh:nn', MakeFMDateTime(Piece(Items[ItemIndex], U, 3)))
1726 + ')';
1727 lvNotes.Caption := lblTitle.Caption;
1728 //kt 8/09 LoadDocumentText(memNote.Lines, ItemIEN);
1729 LoadDocumentText(FViewNote, ItemIEN); //kt 8/09
1730 Note := FViewNote; //kt 8/09
1731 memNote.SelStart := 0;
1732 mnuViewDetail.Enabled := True;
1733 mnuViewDetail.Checked := False;
1734 mnuActChange.Enabled := False;
1735 mnuActLoadBoiler.Enabled := False;
1736 Screen.Cursor := crDefault;
1737 StatusText('');
1738 IsHTML := rHTMLTools.IsHTML(FViewNote); //kt 8/09
1739 Mode := [vmView] + [vmHTML_MODE[IsHTML]]; //kt 8/09
1740 SetDisplayToHTMLvsText(Mode,FViewNote); //kt 8/09
1741 if not FWarmedUp and IsHTML then begin //kt 8/09
1742 FWarmedUp := true; //kt 8/09
1743 //First HTML page won't display without this... //kt 8/09
1744 SetDisplayToHTMLvsText(Mode,FViewNote); //kt 8/09
1745 end; //kt 8/09
1746 end;
1747 end; //kt 8/09
1748
1749 if(assigned(frmReminderTree)) then frmReminderTree.EnableActions;
1750 //DisplayPCE; //kt 5-31-05 (moved down below)
1751 pnlRight.Refresh;
1752 ProperRepaint(Editing); //kt 8/09
1753 //kt 8/09 memNewNote.Repaint;
1754 //kt 8/09 memNote.Repaint;
1755 NotifyOtherApps(NAE_REPORT, 'TIU^' + lstNotes.ItemID);
1756 frmImages.NewNoteSelected(Editing); //kt 9/05
1757 DisplayPCE; //kt 5-31-05 (move down from above)
1758 BroadcastImages(Note); //kt 8/09
1759
1760 //-----------------------------
1761 //kt RESTORE LATER... frmImages.NewNoteSelected(lstNotes.ItemIndex=EditingIndex); //kt added 9-20-05
1762end;
1763
1764procedure TfrmNotes.ProperRepaint(Editing : Boolean);
1765//kt Added function 8/09
1766begin
1767 if Editing then begin
1768 if (vmHTML in FViewMode) then begin
1769 HtmlEditor.Repaint;
1770 end else begin
1771 memNewNote.Repaint;
1772 end;
1773 end else begin
1774 if (vmHTML in FViewMode) then begin
1775 HtmlViewer.Repaint;
1776 end else begin
1777 memNote.Repaint;
1778 end;
1779 end;
1780 Application.ProcessMessages;
1781end;
1782
1783procedure TfrmNotes.BroadcastImages(Note: TStrings);
1784//kt added function 8/09
1785var
1786 ImageList : TStringList;
1787 i : integer;
1788begin
1789 ImageList := TStringList.Create;
1790 if rHTMLTools.CheckForImageLink(Note, ImageList) then begin
1791 for i:= 0 to ImageList.Count-1 do begin
1792 NotifyOtherApps(NAE_REPORT, 'IMAGE^' + ImageList.Strings[i]);
1793 end;
1794 end;
1795 ImageList.Free;
1796end;
1797
1798function TfrmNotes.EditorHasText : boolean;
1799//kt added function 8/09
1800begin
1801 if (vmHTML in FViewMode) then begin
1802 Result := (HTMLViewer.Text <> '');
1803 end else begin
1804 Result := (memNote.Lines.Count > 0);
1805 end;
1806end;
1807
1808procedure TfrmNotes.cmdNewNoteClick(Sender: TObject);
1809//{ maps 'New Note' button to the New Progress Note menu item } <-- original line. //kt 7/19/2007
1810{ maps DKLangConstW('fNotes_New_Note') button to the New Progress Note menu item } //kt added 7/19/2007
1811begin
1812 inherited;
1813 mnuActNewClick(Self);
1814end;
1815
1816procedure TfrmNotes.cmdPCEClick(Sender: TObject);
1817var
1818 Refresh: boolean;
1819 ActionSts: TActionRec;
1820 AnIEN: integer;
1821 PCEObj, tmpPCEEdit: TPCEData;
1822
1823 procedure UpdateEncounterInfo;
1824 begin
1825 if not FEditingNotePCEObj then
1826 begin
1827 PCEObj := nil;
1828 AnIEN := lstNotes.ItemIEN;
1829 //kt 8/09 if (AnIEN <> 0) and (memNote.Lines.Count > 0) then
1830 if (AnIEN <> 0) and EditorHasText then //kt 8/09
1831 begin
1832 ActOnDocument(ActionSts, AnIEN, 'VIEW');
1833 if ActionSts.Success then
1834 begin
1835 uPCEShow.CopyPCEData(uPCEEdit);
1836 PCEObj := uPCEEdit;
1837 end;
1838 end;
1839 Refresh := EditPCEData(PCEObj);
1840 end
1841 else
1842 begin
1843 UpdatePCE(uPCEEdit);
1844 Refresh := TRUE;
1845 end;
1846 if Refresh and (not frmFrame.Closing) then
1847 DisplayPCE;
1848 end;
1849
1850begin
1851 inherited;
1852 cmdPCE.Enabled := FALSE;
1853 if lstNotes.ItemIndex <> EditingIndex then
1854 // save uPCEEdit for note being edited, before updating current note's encounter, then restore (RV - TAM-0801-31056)
1855 begin
1856 tmpPCEEdit := TPCEData.Create;
1857 try
1858 uPCEEdit.CopyPCEData(tmpPCEEdit);
1859 UpdateEncounterInfo;
1860 tmpPCEEdit.CopyPCEData(uPCEEdit);
1861 finally
1862 tmpPCEEdit.Free;
1863 end;
1864 end
1865 else
1866 // no other note being edited, so just proceed as before.
1867 UpdateEncounterInfo;
1868 if cmdPCE <> nil then
1869 cmdPCE.Enabled := TRUE
1870end;
1871
1872{ Right panel (editor) events -------------------------------------------------------------- }
1873
1874procedure TfrmNotes.mnuActChangeClick(Sender: TObject);
1875begin
1876 inherited;
1877 if (FEditingIndex < 0) or (lstNotes.ItemIndex <> FEditingIndex) then Exit;
1878 cmdChangeClick(Sender);
1879end;
1880
1881procedure TfrmNotes.mnuActLoadBoilerClick(Sender: TObject);
1882var
1883 NoteEmpty: Boolean;
1884 BoilerText: TStringList;
1885 DocInfo: string;
1886
1887 procedure AssignBoilerText;
1888 begin
1889 ExecuteTemplateOrBoilerPlate(BoilerText, FEditNote.Title, ltTitle, Self, 'Title: ' + FEditNote.TitleName, DocInfo);
1890 SetDisplayToHTMLvsText([vmHTML,vmEdit],BoilerText); //kt 8/09
1891 //kt 8/09 memNewNote.Lines.Assign(BoilerText);
1892 UpdateNoteAuthor(DocInfo);
1893 FChanged := False;
1894 end;
1895
1896begin
1897 SetupVars; //kt added 7/19/2007 to replace constants with vars.
1898 inherited;
1899 if (FEditingIndex < 0) or (lstNotes.ItemIndex <> FEditingIndex) then Exit;
1900 BoilerText := TStringList.Create;
1901 try
1902 if (vmHTML in FViewMode) then begin //kt 8/09
1903 NoteEmpty := (HTMLEditor.Text = ''); //kt 8/09
1904 end else begin //kt 8/09
1905 NoteEmpty := memNewNote.Text = '';
1906 end; //kt 8/09
1907 LoadBoilerPlate(BoilerText, FEditNote.Title);
1908 if (BoilerText.Text <> '') or
1909 assigned(GetLinkedTemplate(IntToStr(FEditNote.Title), ltTitle)) then
1910 begin
1911 DocInfo := MakeXMLParamTIU(IntToStr(lstNotes.ItemIEN), FEditNote);
1912 if NoteEmpty then AssignBoilerText else
1913 begin
1914 case QueryBoilerPlate(BoilerText) of
1915 0: { do nothing } ; // ignore
1916 1: begin
1917 ExecuteTemplateOrBoilerPlate(BoilerText, FEditNote.Title, ltTitle, Self, 'Title: ' + FEditNote.TitleName, DocInfo);
1918 if (vmHTML in FViewMode) then begin //kt 8/09
1919 HTMLEditor.Text := HTMLEditor.Text + Text2HTML(BoilerText); //kt 8/09
1920 end else begin //kt 8/09
1921 memNewNote.Lines.AddStrings(BoilerText); // append
1922 end; //kt 8/09
1923 UpdateNoteAuthor(DocInfo);
1924 end;
1925 2: AssignBoilerText; // replace
1926 end;
1927 end;
1928 end else
1929 begin
1930 if Sender = mnuActLoadBoiler
1931 then InfoBox(TX_NO_BOIL, TC_NO_BOIL, MB_OK)
1932 else
1933 begin
1934 if not NoteEmpty then
1935// if not FChanged and (InfoBox(TX_BLR_CLEAR, TC_BLR_CLEAR, MB_YESNO) = ID_YES)
1936 if (InfoBox(TX_BLR_CLEAR, TC_BLR_CLEAR, MB_YESNO) = ID_YES) then begin
1937 if (vmHTML in FViewMode) then begin //kt 8/09
1938 HTMLEditor.Clear; //kt 8/09
1939 end else begin //kt 8/09
1940 memNewNote.Lines.Clear;
1941 end; //kt 8/09
1942 end;
1943 end;
1944 end; {if BoilerText.Text <> ''}
1945 finally
1946 BoilerText.Free;
1947 end;
1948end;
1949
1950procedure TfrmNotes.cmdChangeClick(Sender: TObject);
1951var
1952 LastTitle, LastConsult: Integer;
1953 OKPressed, IsIDChild: Boolean;
1954 x: string;
1955 DisAssoText : String;
1956begin
1957 SetupVars; //kt added 7/19/2007 to replace constants with vars.
1958 inherited;
1959 IsIDChild := uIDNotesActive and (FEditNote.IDParent > 0);
1960 LastTitle := FEditNote.Title;
1961 FEditNote.IsNewNote := False;
1962 DisAssoText := '';
1963 if (FEditNote.PkgPtr = PKG_CONSULTS) then
1964// DisAssoText := 'Consults'; <-- original line. //kt 7/19/2007
1965 DisAssoText := DKLangConstW('fNotes_Consults'); //kt added 7/19/2007
1966 if (FEditNote.PkgPtr = PKG_PRF) then
1967// DisAssoText := 'Patient Record Flags'; <-- original line. //kt 7/19/2007
1968 DisAssoText := DKLangConstW('fNotes_Patient_Record_Flags'); //kt added 7/19/2007
1969 if (DisAssoText <> '') and (Sender <> Self) then
1970// if InfoBox('If this title is changed, Any '+DisAssoText+' will be disassociated'+ <-- original line. //kt 7/19/2007
1971 if InfoBox(DKLangConstW('fNotes_If_this_title_is_changedx_Any')+' '+DisAssoText+DKLangConstW('fNotes_will_be_disassociated')+ //kt added 7/19/2007
1972// ' with this note', <-- original line. //kt 7/19/2007
1973 DKLangConstW('fNotes_with_this_note'), //kt added 7/19/2007
1974// 'Disassociate '+DisAssoText+'?',MB_OKCANCEL) = IDCANCEL then <-- original line. //kt 7/19/2007
1975 DKLangConstW('fNotes_Disassociate')+DisAssoText+'?',MB_OKCANCEL) = IDCANCEL then //kt added 7/19/2007
1976 exit;
1977 if FEditNote.PkgPtr = PKG_CONSULTS then LastConsult := FEditNote.PkgIEN else LastConsult := 0;;
1978 if Sender <> Self then OKPressed := ExecuteNoteProperties(FEditNote, CT_NOTES, IsIDChild, FNewIDChild, '', 0)
1979 else OKPressed := True;
1980 if not OKPressed then Exit;
1981 // update display fields & uPCEEdit
1982 lblNewTitle.Caption := ' ' + FEditNote.TitleName + ' ';
1983//if (FEditNote.Addend > 0) and (CompareText(Copy(lblNewTitle.Caption, 2, 8), 'Addendum') <> 0) <-- original line. //kt 7/19/2007
1984 if (FEditNote.Addend > 0) and (CompareText(Copy(lblNewTitle.Caption, 2, 8), DKLangConstW('fNotes_Addendum')) <> 0) //kt added 7/19/2007
1985// then lblNewTitle.Caption := ' Addendum to:' + lblNewTitle.Caption; <-- original line. //kt 7/19/2007
1986 then lblNewTitle.Caption := DKLangConstW('fNotes_Addendum_tox') + lblNewTitle.Caption; //kt added 7/19/2007
1987 with lblNewTitle do bvlNewTitle.SetBounds(Left - 1, Top - 1, Width + 2, Height + 2);
1988 lblRefDate.Caption := FormatFMDateTime('mmm dd,yyyy@hh:nn', FEditNote.DateTime);
1989 lblAuthor.Caption := FEditNote.AuthorName;
1990 if uPCEEdit.Inpatient then x := 'Adm: ' else x := 'Vst: ';
1991 x := x + FormatFMDateTime('mm/dd/yy', FEditNote.VisitDate) + ' ' + FEditNote.LocationName;
1992 lblVisit.Caption := x;
1993 if Length(FEditNote.CosignerName) > 0
1994// then lblCosigner.Caption := 'Expected Cosigner: ' + FEditNote.CosignerName <-- original line. //kt 7/19/2007
1995 then lblCosigner.Caption := DKLangConstW('fNotes_Expected_Cosignerx') + FEditNote.CosignerName //kt added 7/19/2007
1996 else lblCosigner.Caption := '';
1997 uPCEEdit.NoteTitle := FEditNote.Title;
1998 // modify signature requirements if author or cosigner changed
1999 if (User.DUZ <> FEditNote.Author) and (User.DUZ <> FEditNote.Cosigner)
2000 then Changes.ReplaceSignState(CH_DOC, lstNotes.ItemID, CH_SIGN_NA)
2001 else Changes.ReplaceSignState(CH_DOC, lstNotes.ItemID, CH_SIGN_YES);
2002 x := lstNotes.Items[EditingIndex];
2003 SetPiece(x, U, 2, lblNewTitle.Caption);
2004 SetPiece(x, U, 3, FloatToStr(FEditNote.DateTime));
2005 tvNotes.Selected.Text := MakeNoteDisplayText(x);
2006 TORTreeNode(tvNotes.Selected).StringData := x;
2007 lstNotes.Items[EditingIndex] := x;
2008 Changes.ReplaceText(CH_DOC, lstNotes.ItemID, GetTitleText(EditingIndex));
2009 with FEditNote do
2010 begin
2011 if (PkgPtr = PKG_CONSULTS) and (LastConsult <> PkgIEN) then
2012 begin
2013 // try to lock the new consult, reset to previous if unable
2014 if (PkgIEN > 0) and not LockConsultRequest(PkgIEN) then
2015 begin
2016 Infobox(TX_NO_ORD_CHG, TC_NO_ORD_CHG, MB_OK);
2017 PkgIEN := LastConsult;
2018 end else
2019 begin
2020 // unlock the previous consult
2021 if LastConsult > 0 then UnlockOrderIfAble(GetConsultOrderIEN(LastConsult));
2022 if PkgIEN = 0 then FOrderID := '';
2023 end;
2024 end;
2025 //Link Note to PRF Action
2026 if PRF_IEN <> 0 then
2027 if sCallV('TIU LINK TO FLAG', [lstNotes.ItemIEN,PRF_IEN,ActionIEN,Patient.DFN]) = '0' then
2028 ShowMessage('TIU LINK TO FLAG: FAILED');
2029 end;
2030
2031 if LastTitle <> FEditNote.Title then mnuActLoadBoilerClick(Self);
2032end;
2033
2034procedure TfrmNotes.memNewNoteChange(Sender: TObject);
2035begin
2036 inherited;
2037 //kt 8/09 NOTE: the equivalent functionality for HTML is HTMLEditor.Keystruck. Don't have to set here.
2038 FChanged := True;
2039end;
2040
2041procedure TfrmNotes.pnlFieldsResize(Sender: TObject);
2042{ center the reference date on the panel }
2043begin
2044 inherited;
2045 lblRefDate.Left := (pnlFields.Width - lblRefDate.Width) div 2;
2046 if lblRefDate.Left < (lblNewTitle.Left + lblNewTitle.Width + 6)
2047 then lblRefDate.Left := (lblNewTitle.Left + lblNewTitle.Width);
2048end;
2049
2050procedure TfrmNotes.DoAutoSave(Suppress: integer = 1);
2051var
2052 ErrMsg: string;
2053 Changed : boolean; //kt 8/09
2054begin
2055 Changed := false; //kt 8/09
2056 if (vmHTML in FViewMode) then begin //kt 8/09
2057 Changed := HTMLEditor.KeyStruck; //kt 8/09
2058 end else begin //kt 8/09
2059 Changed := FChanged; //kt 8/09
2060 end; //kt 8/09
2061 //kt 8/09 if (EditingIndex > -1) and FChanged then
2062 if (EditingIndex > -1) and Changed then //kt 8/09
2063 begin
2064// StatusText('Autosaving note...'); <-- original line. //kt 7/19/2007
2065 StatusText(DKLangConstW('fNotes_Autosaving_notexxx')); //kt added 7/19/2007
2066 //PutTextOnly(ErrMsg, memNewNote.Lines, lstNotes.GetIEN(EditingIndex));
2067 timAutoSave.Enabled := False;
2068 try
2069 if (vmHTML in FViewMode) then begin //kt
2070 rHTMLTools.SplitToArray (HTMLEditor.HTMLText, FEditNote.Lines); //kt
2071 SetText(ErrMsg, FEditNote.Lines, lstNotes.GetIEN(EditingIndex),Suppress);//kt
2072 end else begin //kt
2073 SetText(ErrMsg, memNewNote.Lines, lstNotes.GetIEN(EditingIndex), Suppress);
2074 end; //kt
2075 finally
2076 timAutoSave.Enabled := True;
2077 end;
2078 FChanged := False;
2079 HTMLEditor.KeyStruck := false; //kt
2080 StatusText('');
2081 end;
2082 if ErrMsg <> '' then
2083 InfoBox(TX_SAVE_ERROR1 + ErrMsg + TX_SAVE_ERROR2, TC_SAVE_ERROR, MB_OK or MB_ICONWARNING);
2084 //Assert(ErrMsg = '', 'AutoSave: ' + ErrMsg);
2085end;
2086
2087procedure TfrmNotes.timAutoSaveTimer(Sender: TObject);
2088begin
2089 inherited;
2090 DoAutoSave;
2091end;
2092
2093{ View menu events ------------------------------------------------------------------------- }
2094
2095procedure TfrmNotes.mnuViewClick(Sender: TObject);
2096{ changes the list of notes available for viewing }
2097var
2098 AuthCtxt: TAuthorContext;
2099 SearchCtxt: TSearchContext; // Text Search CQ: HDS00002856
2100 DateRange: TNoteDateRange;
2101 Saved: Boolean;
2102begin
2103 inherited;
2104 // save note at EditingIndex?
2105 if EditingIndex <> -1 then
2106 begin
2107 SaveCurrentNote(Saved);
2108 if not Saved then Exit;
2109 end;
2110 FLastNoteID := lstNotes.ItemID;
2111 mnuViewDetail.Checked := False;
2112//StatusText('Retrieving progress note list...'); <-- original line. //kt 7/19/2007
2113 StatusText(DKLangConstW('fNotes_Retrieving_progress_note_listxxx')); //kt added 7/19/2007
2114 if Sender is TMenuItem then ViewContext := TMenuItem(Sender).Tag
2115 else if FCurrentContext.Status <> '' then ViewContext := NC_CUSTOM
2116 else ViewContext := NC_RECENT;
2117 case ViewContext of
2118 NC_RECENT: begin
2119 FillChar(FCurrentContext, SizeOf(FCurrentContext), 0);
2120// lblNotes.Caption := 'Last ' + IntToStr(ReturnMaxNotes) + ' Notes'; <-- original line. //kt 7/19/2007
2121 lblNotes.Caption := DKLangConstW('fNotes_Last') + IntToStr(ReturnMaxNotes) + DKLangConstW('fNotes_Notes'); //kt added 7/19/2007
2122 FCurrentContext.Status := IntToStr(ViewContext);
2123 FCurrentContext.MaxDocs := ReturnMaxNotes;
2124 LoadNotes;
2125 end;
2126 NC_ALL: begin
2127 FillChar(FCurrentContext, SizeOf(FCurrentContext), 0);
2128// lblNotes.Caption := 'All Signed Notes'; <-- original line. //kt 7/19/2007
2129 lblNotes.Caption := DKLangConstW('fNotes_All_Signed_Notes'); //kt added 7/19/2007
2130 FCurrentContext.Status := IntToStr(ViewContext);
2131 LoadNotes;
2132 end;
2133 NC_UNSIGNED: begin
2134 FillChar(FCurrentContext, SizeOf(FCurrentContext), 0);
2135// lblNotes.Caption := 'Unsigned Notes'; <-- original line. //kt 7/19/2007
2136 lblNotes.Caption := DKLangConstW('fNotes_Unsigned_Notes'); //kt added 7/19/2007
2137 FCurrentContext.Status := IntToStr(ViewContext);
2138 LoadNotes;
2139 end;
2140 // Text Search CQ: HDS00002856 --------------------
2141 NC_SEARCHTEXT: begin;
2142 SearchTextStopFlag := False;
2143 SelectSearchText(Font.Size, FCurrentContext.SearchString, SearchCtxt );
2144 with SearchCtxt do if Changed then
2145 begin
2146 //FCurrentContext.Status := IntToStr(ViewContext);
2147 frmSearchStop.Show;
2148// lblNotes.Caption := 'Search: '+ SearchString; <-- original line. //kt 7/19/2007
2149 lblNotes.Caption := DKLangConstW('fNotes_Searchx')+ SearchString; //kt added 7/19/2007
2150 frmSearchStop.lblSearchStatus.Caption := lblNotes.Caption;
2151 FCurrentContext.SearchString := SearchString;
2152 LoadNotes;
2153 end;
2154 // Only do LoadNotes if something changed
2155 end;
2156 // Text Search CQ: HDS00002856 --------------------
2157 NC_UNCOSIGNED: begin
2158 FillChar(FCurrentContext, SizeOf(FCurrentContext), 0);
2159// lblNotes.Caption := 'Uncosigned Notes'; <-- original line. //kt 7/19/2007
2160 lblNotes.Caption := DKLangConstW('fNotes_Uncosigned_Notes'); //kt added 7/19/2007
2161 FCurrentContext.Status := IntToStr(ViewContext);
2162 LoadNotes;
2163 end;
2164 NC_BY_AUTHOR: begin
2165 SelectAuthor(Font.Size, FCurrentContext, AuthCtxt);
2166 with AuthCtxt do if Changed then
2167 begin
2168 FillChar(FCurrentContext, SizeOf(FCurrentContext), 0);
2169// lblNotes.Caption := AuthorName + ': Signed Notes'; <-- original line. //kt 7/19/2007
2170 lblNotes.Caption := AuthorName + DKLangConstW('fNotes_x_Signed_Notes'); //kt added 7/19/2007
2171 FCurrentContext.Status := IntToStr(NC_BY_AUTHOR);
2172 FCurrentContext.Author := Author;
2173 FCurrentContext.TreeAscending := Ascending;
2174 LoadNotes;
2175 end;
2176 end;
2177 NC_BY_DATE: begin
2178 SelectNoteDateRange(Font.Size, FCurrentContext, DateRange);
2179 with DateRange do if Changed then
2180 begin
2181 FillChar(FCurrentContext, SizeOf(FCurrentContext), 0);
2182 lblNotes.Caption := FormatFMDateTime('mmm dd,yy', FMBeginDate) + ' to ' +
2183 FormatFMDateTime('mmm dd,yy', FMEndDate) + ': Signed Notes';
2184 FCurrentContext.BeginDate := BeginDate;
2185 FCurrentContext.EndDate := EndDate;
2186 FCurrentContext.FMBeginDate := FMBeginDate;
2187 FCurrentContext.FMEndDate := FMEndDate;
2188 FCurrentContext.TreeAscending := Ascending;
2189 FCurrentContext.Status := IntToStr(NC_BY_DATE);
2190 LoadNotes;
2191 end;
2192 end;
2193 NC_CUSTOM: begin
2194 if Sender is TMenuItem then
2195 begin
2196 SelectTIUView(Font.Size, True, FCurrentContext, uTIUContext);
2197 //lblNotes.Caption := 'Custom List';
2198 end;
2199 with uTIUContext do if Changed then
2200 begin
2201 //if not (Sender is TMenuItem) then lblNotes.Caption := 'Default List';
2202 //if MaxDocs = 0 then MaxDocs := ReturnMaxNotes;
2203 FCurrentContext.BeginDate := BeginDate;
2204 FCurrentContext.EndDate := EndDate;
2205 FCurrentContext.FMBeginDate := FMBeginDate;
2206 FCurrentContext.FMEndDate := FMEndDate;
2207 FCurrentContext.Status := Status;
2208 FCurrentContext.Author := Author;
2209 FCurrentContext.MaxDocs := MaxDocs;
2210 FCurrentContext.ShowSubject := ShowSubject;
2211 // NEW PREFERENCES:
2212 FCurrentContext.SortBy := SortBy;
2213 FCurrentContext.ListAscending := ListAscending;
2214 FCurrentContext.GroupBy := GroupBy;
2215 FCurrentContext.TreeAscending := TreeAscending;
2216 FCurrentContext.SearchField := SearchField;
2217 FCurrentContext.Keyword := Keyword;
2218 FCurrentContext.Filtered := Filtered;
2219 LoadNotes;
2220 end;
2221 end;
2222 end; {case}
2223 lblNotes.Caption := SetNoteTreeLabel(FCurrentContext);
2224 // Text Search CQ: HDS00002856 --------------------
2225 If FCurrentContext.SearchString <> '' then
2226// lblNotes.Caption := lblNotes.Caption+', containing "'+FCurrentContext.SearchString+'"'; <-- original line. //kt 7/19/2007
2227 lblNotes.Caption := lblNotes.Caption+DKLangConstW('fNotes_x_containing_x')+FCurrentContext.SearchString+'"'; //kt added 7/19/2007
2228 If SearchTextStopFlag=True then begin;
2229// lblNotes.Caption := 'Search for "'+FCurrentContext.SearchString+'" was stopped!'; <-- original line. //kt 7/19/2007
2230 lblNotes.Caption := DKLangConstW('fNotes_Search_for_x')+FCurrentContext.SearchString+DKLangConstW('fNotes_x_was_stoppedx'); //kt added 7/19/2007
2231 end;
2232 frmSearchStop.Hide;
2233 // Text Search CQ: HDS00002856 --------------------
2234 lblNotes.hint := lblNotes.Caption;
2235 tvNotes.Caption := lblNotes.Caption;
2236 StatusText('');
2237end;
2238
2239{ Action menu events ----------------------------------------------------------------------- }
2240
2241function TfrmNotes.StartNewEdit(NewNoteType: integer): Boolean;
2242{ if currently editing a note, returns TRUE if the user wants to start a new one }
2243var
2244 Saved: Boolean;
2245 Msg, CapMsg: string;
2246begin
2247 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2248 FStarting := False;
2249 Result := True;
2250 cmdNewNote.Enabled := False;
2251 if EditingIndex > -1 then
2252 begin
2253 FStarting := True;
2254 case NewNoteType of
2255 NT_ACT_ADDENDUM: begin
2256 Msg := TX_NEW_SAVE1 + MakeNoteDisplayText(lstNotes.Items[EditingIndex]) + TX_NEW_SAVE3;
2257 CapMsg := TC_NEW_SAVE3;
2258 end;
2259 NT_ACT_EDIT_NOTE: begin
2260 Msg := TX_NEW_SAVE1 + MakeNoteDisplayText(lstNotes.Items[EditingIndex]) + TX_NEW_SAVE4;
2261 CapMsg := TC_NEW_SAVE4;
2262 end;
2263 NT_ACT_ID_ENTRY: begin
2264 Msg := TX_NEW_SAVE1 + MakeNoteDisplayText(lstNotes.Items[EditingIndex]) + TX_NEW_SAVE5;
2265 CapMsg := TC_NEW_SAVE5;
2266 end;
2267 else
2268 begin
2269 Msg := TX_NEW_SAVE1 + MakeNoteDisplayText(lstNotes.Items[EditingIndex]) + TX_NEW_SAVE2;
2270 CapMsg := TC_NEW_SAVE2;
2271 end;
2272 end;
2273 if InfoBox(Msg, CapMsg, MB_YESNO) = IDNO then
2274 begin
2275 Result := False;
2276 FStarting := False;
2277 end
2278 else
2279 begin
2280 SaveCurrentNote(Saved);
2281 if not Saved then Result := False else LoadNotes;
2282 FStarting := False;
2283 end;
2284 end;
2285 cmdNewNote.Enabled := (Result = False) and (FStarting = False);
2286end;
2287
2288procedure TfrmNotes.mnuActNewClick(Sender: TObject);
2289const
2290 IS_ID_CHILD = False;
2291{ switches to current new note or creates a new note if none is being edited already }
2292begin
2293 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2294 inherited;
2295 if not StartNewEdit(NT_ACT_NEW_NOTE) then Exit;
2296 //LoadNotes;
2297 // make sure a visit (time & location) is available before creating the note
2298 if Encounter.NeedVisit then
2299 begin
2300 UpdateVisit(Font.Size, DfltTIULocation);
2301 frmFrame.DisplayEncounterText;
2302 end;
2303 if Encounter.NeedVisit then
2304 begin
2305 InfoBox(TX_NEED_VISIT, TX_NO_VISIT, MB_OK or MB_ICONWARNING);
2306 ShowPCEButtons(False);
2307 Exit;
2308 end;
2309 InsertNewNote(IS_ID_CHILD, 0);
2310end;
2311
2312procedure TfrmNotes.mnuActAddIDEntryClick(Sender: TObject);
2313const
2314 IS_ID_CHILD = True;
2315var
2316 AnIDParent: integer;
2317{ switches to current new note or creates a new note if none is being edited already }
2318begin
2319 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2320 inherited;
2321 AnIDParent := lstNotes.ItemIEN;
2322 if not StartNewEdit(NT_ACT_ID_ENTRY) then Exit;
2323 //LoadNotes;
2324 with tvNotes do Selected := FindPieceNode(IntToStr(AnIDParent), U, Items.GetFirstNode);
2325 // make sure a visit (time & location) is available before creating the note
2326 if Encounter.NeedVisit then
2327 begin
2328 UpdateVisit(Font.Size, DfltTIULocation);
2329 frmFrame.DisplayEncounterText;
2330 end;
2331 if Encounter.NeedVisit then
2332 begin
2333 InfoBox(TX_NEED_VISIT, TX_NO_VISIT, MB_OK or MB_ICONWARNING);
2334 Exit;
2335 end;
2336 InsertNewNote(IS_ID_CHILD, AnIDParent);
2337end;
2338
2339procedure TfrmNotes.mnuActAddendClick(Sender: TObject);
2340{ make an addendum to an existing note }
2341var
2342 ActionSts: TActionRec;
2343 ANoteID: string;
2344begin
2345 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2346 inherited;
2347 if lstNotes.ItemIEN <= 0 then Exit;
2348 ANoteID := lstNotes.ItemID;
2349 if not StartNewEdit(NT_ACT_ADDENDUM) then Exit;
2350 //LoadNotes;
2351 with tvNotes do Selected := FindPieceNode(ANoteID, 1, U, Items.GetFirstNode);
2352 if lstNotes.ItemIndex = EditingIndex then
2353 begin
2354 InfoBox(TX_ADDEND_NO, TX_ADDEND_MK, MB_OK);
2355 Exit;
2356 end;
2357 ActOnDocument(ActionSts, lstNotes.ItemIEN, 'MAKE ADDENDUM');
2358 if not ActionSts.Success then
2359 begin
2360 InfoBox(ActionSts.Reason, TX_IN_AUTH, MB_OK);
2361 Exit;
2362 end;
2363 with lstNotes do if TitleForNote(lstNotes.ItemIEN) = TYP_ADDENDUM then
2364 begin
2365 InfoBox(TX_ADDEND_AD, TX_ADDEND_MK, MB_OK);
2366 Exit;
2367 end;
2368 InsertAddendum;
2369end;
2370
2371procedure TfrmNotes.mnuActDetachFromIDParentClick(Sender: TObject);
2372var
2373 DocID, WhyNot: string;
2374 Saved: boolean;
2375 SavedDocID: string;
2376begin
2377 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2378 if lstNotes.ItemIEN = 0 then exit;
2379 SavedDocID := lstNotes.ItemID;
2380 if EditingIndex <> -1 then
2381 begin
2382 SaveCurrentNote(Saved);
2383 if not Saved then Exit;
2384 LoadNotes;
2385 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
2386 end;
2387 if not CanBeAttached(PDocTreeObject(tvNotes.Selected.Data)^.DocID, WhyNot) then
2388 begin
2389 WhyNot := StringReplace(WhyNot, 'ATTACH', 'DETACH', [rfIgnoreCase]);
2390 WhyNot := StringReplace(WhyNot, 'to an ID', 'from an ID', [rfIgnoreCase]);
2391 InfoBox(WhyNot, TX_DETACH_FAILURE, MB_OK);
2392 Exit;
2393 end;
2394 if (InfoBox('DETACH: ' + tvNotes.Selected.Text + CRLF + CRLF +
2395 ' FROM: ' + tvNotes.Selected.Parent.Text + CRLF + CRLF +
2396// 'Are you sure?', TX_DETACH_CNF, MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES) <-- original line. //kt 7/19/2007
2397 DKLangConstW('fNotes_Are_you_surex'), TX_DETACH_CNF, MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES) //kt added 7/19/2007
2398 then Exit;
2399 DocID := PDocTreeObject(tvNotes.Selected.Data)^.DocID;
2400 SavedDocID := PDocTreeObject(tvNotes.Selected.Parent.Data)^.DocID;
2401 if DetachEntryFromParent(DocID, WhyNot) then
2402 begin
2403 LoadNotes;
2404 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
2405 if tvNotes.Selected <> nil then tvNotes.Selected.Expand(False);
2406 end
2407 else
2408 begin
2409 WhyNot := StringReplace(WhyNot, 'ATTACH', 'DETACH', [rfIgnoreCase]);
2410 WhyNot := StringReplace(WhyNot, 'to an ID', 'from an ID', [rfIgnoreCase]);
2411 InfoBox(WhyNot, TX_DETACH_FAILURE, MB_OK);
2412 end;
2413end;
2414
2415procedure TfrmNotes.mnuActSignListClick(Sender: TObject);
2416{ add the note to the Encounter object, see mnuActSignClick - copied}
2417const
2418 SIG_COSIGN = 'COSIGNATURE';
2419 SIG_SIGN = 'SIGNATURE';
2420var
2421 ActionType, SignTitle: string;
2422 ActionSts: TActionRec;
2423begin
2424 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2425 inherited;
2426 if lstNotes.ItemIEN = 0 then Exit;
2427 if lstNotes.ItemIndex = EditingIndex then Exit; // already in signature list
2428 if not NoteHasText(lstNotes.ItemIEN) then
2429 begin
2430 InfoBox(TX_EMPTY_NOTE1, TC_EMPTY_NOTE, MB_OK or MB_ICONERROR);
2431 Exit;
2432 end;
2433 if not LastSaveClean(lstNotes.ItemIEN) and
2434 (InfoBox(TX_ABSAVE, TC_ABSAVE, MB_YESNO or MB_DEFBUTTON2 or MB_ICONWARNING) <> IDYES) then Exit;
2435 if CosignDocument(lstNotes.ItemIEN) then
2436 begin
2437 SignTitle := TX_COSIGN;
2438 ActionType := SIG_COSIGN;
2439 end else
2440 begin
2441 SignTitle := TX_SIGN;
2442 ActionType := SIG_SIGN;
2443 end;
2444 ActOnDocument(ActionSts, lstNotes.ItemIEN, ActionType);
2445 if not ActionSts.Success then
2446 begin
2447 InfoBox(ActionSts.Reason, TX_IN_AUTH, MB_OK);
2448 Exit;
2449 end;
2450 LockConsultRequestAndNote(lstNotes.ItemIEN);
2451 with lstNotes do Changes.Add(CH_DOC, ItemID, GetTitleText(ItemIndex), '', CH_SIGN_YES);
2452end;
2453
2454procedure TfrmNotes.RemovePCEFromChanges(IEN: Int64; AVisitStr: string = '');
2455begin
2456 if IEN = NT_ADDENDUM then Exit; // no PCE information entered for an addendum
2457 // do we need to call DeletePCE(AVisitStr), as was done with NT_NEW_NOTE (ien=-10)???
2458 if AVisitStr = '' then AVisitStr := VisitStrForNote(IEN);
2459 Changes.Remove(CH_PCE, 'V' + AVisitStr);
2460 Changes.Remove(CH_PCE, 'P' + AVisitStr);
2461 Changes.Remove(CH_PCE, 'D' + AVisitStr);
2462 Changes.Remove(CH_PCE, 'I' + AVisitStr);
2463 Changes.Remove(CH_PCE, 'S' + AVisitStr);
2464 Changes.Remove(CH_PCE, 'A' + AVisitStr);
2465 Changes.Remove(CH_PCE, 'H' + AVisitStr);
2466 Changes.Remove(CH_PCE, 'E' + AVisitStr);
2467 Changes.Remove(CH_PCE, 'T' + AVisitStr);
2468end;
2469
2470procedure TfrmNotes.mnuActDeleteClick(Sender: TObject);
2471{ delete the selected progress note & remove from the Encounter object if necessary }
2472var
2473 DeleteSts, ActionSts: TActionRec;
2474 SaveConsult, SavedDocIEN: Integer;
2475 ReasonForDelete, AVisitStr, SavedDocID, x: string;
2476 Saved: boolean;
2477begin
2478 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2479 inherited;
2480 if lstNotes.ItemIEN = 0 then Exit;
2481 ActOnDocument(ActionSts, lstNotes.ItemIEN, 'DELETE RECORD');
2482 if ShowMsgOn(not ActionSts.Success, ActionSts.Reason, TX_IN_AUTH) then Exit;
2483 ReasonForDelete := SelectDeleteReason(lstNotes.ItemIEN);
2484 if ReasonForDelete = DR_CANCEL then Exit;
2485 // suppress prompt for deletion when called from SaveEditedNote (Sender = Self)
2486 if (Sender <> Self) and (InfoBox(MakeNoteDisplayText(lstNotes.Items[lstNotes.ItemIndex]) + TX_DEL_OK,
2487 TX_DEL_CNF, MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES) then Exit;
2488 // do the appropriate locking
2489 if not LockConsultRequestAndNote(lstNotes.ItemIEN) then Exit;
2490 // retraction notification message
2491 if JustifyDocumentDelete(lstNotes.ItemIEN) then
2492 InfoBox(TX_RETRACT, TX_RETRACT_CAP, MB_OK);
2493 SavedDocID := lstNotes.ItemID;
2494 SavedDocIEN := lstNotes.ItemIEN;
2495 if (EditingIndex > -1) and (not FConfirmed) and (lstNotes.ItemIndex <> EditingIndex) and (memNewNote.GetTextLen > 0) then
2496 begin
2497 SaveCurrentNote(Saved);
2498 if not Saved then Exit;
2499 end;
2500 EditingIndex := -1;
2501 FConfirmed := False;
2502 (* if Saved then
2503 begin
2504 EditingIndex := -1;
2505 mnuViewClick(Self);
2506 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
2507 end;*)
2508 // remove the note
2509 DeleteSts.Success := True;
2510 x := GetPackageRefForNote(SavedDocIEN);
2511 SaveConsult := StrToIntDef(Piece(x, ';', 1), 0);
2512 AVisitStr := VisitStrForNote(SavedDocIEN);
2513 RemovePCEFromChanges(SavedDocIEN, AVisitStr);
2514 if (SavedDocIEN > 0) and (lstNotes.ItemIEN = SavedDocIEN) then DeleteDocument(DeleteSts, SavedDocIEN, ReasonForDelete);
2515 if not Changes.Exist(CH_DOC, SavedDocID) then UnlockDocument(SavedDocIEN);
2516 Changes.Remove(CH_DOC, SavedDocID); // this will unlock the document if in Changes
2517 UnlockConsultRequest(0, SaveConsult); // note has been deleted, so 1st param = 0
2518 // reset the display now that the note is gone
2519 if DeleteSts.Success then
2520 begin
2521 DeletePCE(AVisitStr); // removes PCE data if this was the only note pointing to it
2522 ClearEditControls;
2523 //ClearPtData; WRONG - fixed in v15.10 - RV
2524 LoadNotes;
2525(* with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
2526 if tvNotes.Selected <> nil then tvNotesChange(Self, tvNotes.Selected) else
2527 begin*)
2528 FHTMLEditMode := emNone; //kt 8/09
2529 pnlWrite.Visible := False;
2530 pnlRead.Visible := True;
2531 UpdateReminderFinish;
2532 ShowPCEControls(False);
2533 frmDrawers.DisplayDrawers(TRUE, [odTemplates], [odTemplates]); //FALSE);
2534 ShowPCEButtons(FALSE);
2535 //end; {if ItemIndex}
2536 end {if DeleteSts}
2537 else InfoBox(DeleteSts.Reason, TX_DEL_ERR, MB_OK or MB_ICONWARNING);
2538end;
2539
2540procedure TfrmNotes.mnuActEditClick(Sender: TObject);
2541{ load the selected progress note for editing }
2542var
2543 ActionSts: TActionRec;
2544 ANoteID: string;
2545begin
2546 inherited;
2547 if lstNotes.ItemIndex = EditingIndex then Exit;
2548 ANoteID := lstNotes.ItemID;
2549 if not StartNewEdit(NT_ACT_EDIT_NOTE) then Exit;
2550 //LoadNotes;
2551 with tvNotes do Selected := FindPieceNode(ANoteID, 1, U, Items.GetFirstNode);
2552 ActOnDocument(ActionSts, lstNotes.ItemIEN, 'EDIT RECORD');
2553 if not ActionSts.Success then
2554 begin
2555 InfoBox(ActionSts.Reason, TX_IN_AUTH, MB_OK);
2556 Exit;
2557 end;
2558 LoadForEdit;
2559end;
2560
2561procedure TfrmNotes.mnuActSaveClick(Sender: TObject);
2562{ saves the note that is currently being edited }
2563var
2564 Saved: Boolean;
2565 SavedDocID: string;
2566begin
2567 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2568 inherited;
2569 if EditingIndex > -1 then
2570 begin
2571 SavedDocID := Piece(lstNotes.Items[EditingIndex], U, 1);
2572 FLastNoteID := SavedDocID;
2573 SaveCurrentNote(Saved);
2574 if Saved and (EditingIndex < 0) and (not FDeleted) then
2575 //if Saved then
2576 begin
2577 LoadNotes;
2578 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
2579 end;
2580 end
2581 else InfoBox(TX_NO_NOTE, TX_SAVE_NOTE, MB_OK or MB_ICONWARNING);
2582end;
2583
2584procedure TfrmNotes.mnuActSignClick(Sender: TObject);
2585{ sign the currently selected note, save first if necessary }
2586const
2587 SIG_COSIGN = 'COSIGNATURE';
2588 SIG_SIGN = 'SIGNATURE';
2589var
2590 Saved, NoteUnlocked: Boolean;
2591 ActionType, ESCode, SignTitle: string;
2592 ActionSts, SignSts: TActionRec;
2593 OK: boolean;
2594 SavedDocID, tmpItem: string;
2595 EditingID: string; //v22.12 - RV
2596 tmpNode: TTreeNode;
2597begin
2598 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2599 inherited;
2600(* if lstNotes.ItemIndex = EditingIndex then //v22.12 - RV
2601 begin //v22.12 - RV
2602 SaveCurrentNote(Saved); //v22.12 - RV
2603 if (not Saved) or FDeleted then Exit; //v22.12 - RV
2604 end //v22.12 - RV
2605 else if EditingIndex > -1 then //v22.12 - RV
2606 tmpItem := lstNotes.Items[EditingIndex]; //v22.12 - RV
2607 SavedDocID := lstNotes.ItemID;*) //v22.12 - RV
2608 SavedDocID := lstNotes.ItemID; //v22.12 - RV
2609 FLastNoteID := SavedDocID; //v22.12 - RV
2610 if lstNotes.ItemIndex = EditingIndex then //v22.12 - RV
2611 begin //v22.12 - RV
2612 SaveCurrentNote(Saved); //v22.12 - RV
2613 if (not Saved) or FDeleted then Exit; //v22.12 - RV
2614 end //v22.12 - RV
2615 else if EditingIndex > -1 then //v22.12 - RV
2616 begin //v22.12 - RV
2617 tmpItem := lstNotes.Items[EditingIndex]; //v22.12 - RV
2618 EditingID := Piece(tmpItem, U, 1); //v22.12 - RV
2619 end; //v22.12 - RV
2620 if not NoteHasText(lstNotes.ItemIEN) then
2621 begin
2622 InfoBox(TX_EMPTY_NOTE1, TC_EMPTY_NOTE, MB_OK or MB_ICONERROR);
2623 Exit;
2624 end;
2625 if not LastSaveClean(lstNotes.ItemIEN) and
2626 (InfoBox(TX_ABSAVE, TC_ABSAVE, MB_YESNO or MB_DEFBUTTON2 or MB_ICONWARNING) <> IDYES) then Exit;
2627 if CosignDocument(lstNotes.ItemIEN) then
2628 begin
2629 SignTitle := TX_COSIGN;
2630 ActionType := SIG_COSIGN;
2631 end else
2632 begin
2633 SignTitle := TX_SIGN;
2634 ActionType := SIG_SIGN;
2635 end;
2636 if not LockConsultRequestAndNote(lstNotes.ItemIEN) then Exit;
2637 // no exits after things are locked
2638 NoteUnlocked := False;
2639 ActOnDocument(ActionSts, lstNotes.ItemIEN, ActionType);
2640 if ActionSts.Success then
2641 begin
2642 OK := IsOK2Sign(uPCEShow, lstNotes.ItemIEN);
2643 if frmFrame.Closing then exit;
2644 if(uPCEShow.Updated) then
2645 begin
2646 uPCEShow.CopyPCEData(uPCEEdit);
2647 uPCEShow.Updated := FALSE;
2648 lstNotesClick(Self);
2649 end;
2650 if not AuthorSignedDocument(lstNotes.ItemIEN) then
2651 begin
2652 if (InfoBox(TX_AUTH_SIGNED +
2653 GetTitleText(lstNotes.ItemIndex),TX_SIGN ,MB_YESNO)= ID_NO) then exit;
2654 end;
2655 if(OK) then
2656 begin
2657 with lstNotes do SignatureForItem(Font.Size, MakeNoteDisplayText(Items[ItemIndex]), SignTitle, ESCode);
2658 if Length(ESCode) > 0 then
2659 begin
2660 SignDocument(SignSts, lstNotes.ItemIEN, ESCode);
2661 RemovePCEFromChanges(lstNotes.ItemIEN);
2662 NoteUnlocked := Changes.Exist(CH_DOC, lstNotes.ItemID);
2663 Changes.Remove(CH_DOC, lstNotes.ItemID); // this will unlock if in Changes
2664 if SignSts.Success then
2665 begin
2666 SendMessage(frmConsults.Handle, UM_NEWORDER, ORDER_SIGN, 0); {*REV*}
2667 lstNotesClick(Self);
2668 end
2669 else InfoBox(SignSts.Reason, TX_SIGN_ERR, MB_OK);
2670 end {if Length(ESCode)}
2671 else
2672 NoteUnlocked := Changes.Exist(CH_DOC, lstNotes.ItemID);
2673 end;
2674 end
2675 else InfoBox(ActionSts.Reason, TX_IN_AUTH, MB_OK);
2676 if not NoteUnlocked then UnlockDocument(lstNotes.ItemIEN);
2677 UnlockConsultRequest(lstNotes.ItemIEN);
2678 //SetViewContext(FCurrentContext); //v22.12 - RV
2679 LoadNotes; //v22.12 - RV
2680 //if EditingIndex > -1 then //v22.12 - RV
2681 if (EditingID <> '') then //v22.12 - RV
2682 begin
2683 lstNotes.Items.Insert(0, tmpItem);
2684// tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, 'Note being edited', <-- original line. //kt 7/19/2007
2685 tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, DKLangConstW('fNotes_Note_being_edited'), //kt added 7/19/2007
2686 MakeNoteTreeObject('EDIT^Note being edited^^^^^^^^^^^%^0'));
2687 TORTreeNode(tmpNode).StringData := 'EDIT^Note being edited^^^^^^^^^^^%^0';
2688 tmpNode.ImageIndex := IMG_TOP_LEVEL;
2689 tmpNode := tvNotes.Items.AddChildObjectFirst(tmpNode, MakeNoteDisplayText(tmpItem), MakeNoteTreeObject(tmpItem));
2690 TORTreeNode(tmpNode).StringData := tmpItem;
2691 SetTreeNodeImagesAndFormatting(TORTreeNode(tmpNode), FCurrentContext, CT_NOTES);
2692 EditingIndex := lstNotes.SelectByID(EditingID); //v22.12 - RV
2693 end;
2694 //with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode); //v22.12 - RV
2695 with tvNotes do //v22.12 - RV
2696 begin //v22.12 - RV
2697 Selected := FindPieceNode(FLastNoteID, U, Items.GetFirstNode); //v22.12 - RV
2698 if Selected <> nil then
2699 tvNotesChange(Self, Selected) //v22.12 - RV
2700 else
2701 tvNotes.Selected := tvNotes.Items[0]; //first Node in treeview
2702 end; //v22.12 - RV
2703end;
2704
2705procedure TfrmNotes.SaveSignItem(const ItemID, ESCode: string);
2706{ saves and optionally signs a progress note or addendum }
2707const
2708 SIG_COSIGN = 'COSIGNATURE';
2709 SIG_SIGN = 'SIGNATURE';
2710var
2711 AnIndex, IEN, i: Integer;
2712 Saved, ContinueSign: Boolean; {*RAB* 8/26/99}
2713 ActionSts, SignSts: TActionRec;
2714 APCEObject: TPCEData;
2715 OK: boolean;
2716 ActionType, SignTitle: string;
2717begin
2718 SetupVars; //kt added 7/19/2007 to replace constants with vars.
2719 AnIndex := -1;
2720 IEN := StrToIntDef(ItemID, 0);
2721 if IEN = 0 then Exit;
2722 if frmFrame.TimedOut and (EditingIndex <> -1) then FSilent := True;
2723 with lstNotes do for i := 0 to Items.Count - 1 do if lstNotes.GetIEN(i) = IEN then
2724 begin
2725 AnIndex := i;
2726 break;
2727 end;
2728 if (AnIndex > -1) and (AnIndex = EditingIndex) then
2729 begin
2730 SaveCurrentNote(Saved);
2731 if not Saved then Exit;
2732 if FDeleted then
2733 begin
2734 FDeleted := False;
2735 Exit;
2736 end;
2737 AnIndex := lstNotes.SelectByIEN(IEN);
2738 //IEN := lstNotes.GetIEN(AnIndex); // saving will change IEN
2739 end;
2740 if Length(ESCode) > 0 then
2741 begin
2742 if CosignDocument(IEN) then
2743 begin
2744 SignTitle := TX_COSIGN;
2745 ActionType := SIG_COSIGN;
2746 end else
2747 begin
2748 SignTitle := TX_SIGN;
2749 ActionType := SIG_SIGN;
2750 end;
2751 ActOnDocument(ActionSts, IEN, ActionType);
2752 if not ActionSts.Success then
2753 begin
2754 InfoBox(ActionSts.Reason, TX_IN_AUTH, MB_OK);
2755 ContinueSign := False;
2756 end
2757 else if not NoteHasText(IEN) then
2758 begin
2759 InfoBox(TX_EMPTY_NOTE1, TC_EMPTY_NOTE, MB_OK or MB_ICONERROR);
2760 ContinueSign := False;
2761 end
2762 else if not LastSaveClean(IEN) and
2763 (InfoBox(TX_ABSAVE, TC_ABSAVE, MB_YESNO or MB_DEFBUTTON2 or MB_ICONWARNING) <> IDYES)
2764 then ContinueSign := False
2765 else ContinueSign := True;
2766 if ContinueSign then
2767 begin
2768 if (AnIndex >= 0) and (AnIndex = lstNotes.ItemIndex) then
2769 APCEObject := uPCEShow
2770 else
2771 APCEObject := nil;
2772 OK := IsOK2Sign(APCEObject, IEN);
2773 if frmFrame.Closing then exit;
2774 if(assigned(APCEObject)) and (uPCEShow.Updated) then
2775 begin
2776 uPCEShow.CopyPCEData(uPCEEdit);
2777 uPCEShow.Updated := FALSE;
2778 lstNotesClick(Self);
2779 end
2780 else
2781 uPCEEdit.Clear;
2782 if(OK) then
2783 begin
2784 //if ((not FSilent) and IsSurgeryTitle(TitleForNote(IEN))) then DisplayOpTop(IEN);
2785 SignDocument(SignSts, IEN, ESCode);
2786 if not SignSts.Success then InfoBox(SignSts.Reason, TX_SIGN_ERR, MB_OK);
2787 end; {if OK}
2788 end; {if ContinueSign}
2789 end; {if Length(ESCode)}
2790
2791 UnlockConsultRequest(IEN);
2792 if (AnIndex = lstNotes.ItemIndex) and (not frmFrame.ContextChanging) then
2793 begin
2794 LoadNotes;
2795 with tvNotes do Selected := FindPieceNode(IntToStr(IEN), U, Items.GetFirstNode);
2796 end;
2797end;
2798
2799procedure TfrmNotes.popNoteMemoPopup(Sender: TObject);
2800const FORMAT_MODE : array[false..true] of string = ('fNotes_Formatted_Text','fNotes_Plain_Text'); //kt 8/09
2801begin
2802 inherited;
2803 if PopupComponent(Sender, popNoteMemo) is TCustomEdit
2804 then FEditCtrl := TCustomEdit(PopupComponent(Sender, popNoteMemo))
2805 else FEditCtrl := nil;
2806 if FEditCtrl <> nil then
2807 begin
2808 popNoteMemoCut.Enabled := FEditCtrl.SelLength > 0;
2809 popNoteMemoCopy.Enabled := popNoteMemoCut.Enabled;
2810 popNoteMemoPaste.Enabled := (not TORExposedCustomEdit(FEditCtrl).ReadOnly) and
2811 Clipboard.HasFormat(CF_TEXT);
2812 popNoteMemoTemplate.Enabled := frmDrawers.CanEditTemplates and popNoteMemoCut.Enabled;
2813 popNoteMemoFind.Enabled := FEditCtrl.GetTextLen > 0;
2814 end else
2815 begin
2816 popNoteMemoHTMLFormat.Enabled := False; //kt 8/09
2817 popNoteMemoCut.Enabled := False;
2818 popNoteMemoCopy.Enabled := False;
2819 popNoteMemoPaste.Enabled := False;
2820 popNoteMemoTemplate.Enabled := False;
2821 end;
2822 popNoteMemoHTMLFormat.Caption := DKLangConstW('fNotes_Change_Edit_Mode_To') + ' ' + //kt 8/09
2823 DKLangConstW(FORMAT_MODE[(vmHTML in FViewMode)]); //kt 8/09
2824 popNoteMemoHTMLFormat.Enabled := pnlWrite.Visible; //kt 8/09
2825 if pnlWrite.Visible then
2826 begin
2827 //kt 8/09 popNoteMemoSpell.Enabled := True;
2828 //kt 8/09 popNoteMemoGrammar.Enabled := True;
2829 //kt 8/09 popNoteMemoReformat.Enabled := True;
2830 popNoteMemoSpell.Enabled := not pnlHTMLWrite.Visible; //kt 8/09
2831 popNoteMemoGrammar.Enabled := not pnlHTMLWrite.Visible; //kt 8/09
2832 popNoteMemoReformat.Enabled := not pnlHTMLWrite.Visible; //kt 8/09
2833 popNoteMemoReplace.Enabled := (FEditCtrl.GetTextLen > 0);
2834 popNoteMemoPreview.Enabled := (frmDrawers.TheOpenDrawer = odTemplates) and Assigned(frmDrawers.tvTemplates.Selected);
2835 popNoteMemoInsTemplate.Enabled := (frmDrawers.TheOpenDrawer = odTemplates) and Assigned(frmDrawers.tvTemplates.Selected);
2836 end else
2837 begin
2838 popNoteMemoSpell.Enabled := False;
2839 popNoteMemoGrammar.Enabled := False;
2840 popNoteMemoReformat.Enabled := False;
2841 popNoteMemoReplace.Enabled := False;
2842 popNoteMemoPreview.Enabled := False;
2843 popNoteMemoInsTemplate.Enabled := False;
2844 end;
2845end;
2846
2847(*//kt 8/09 NOTICE:
2848 On the form, popNoteMenu was edited to add a new item as below
2849 popNoteMemoHTMLFormat : TMenuItem
2850 Captions: ~ Edit as Formatted Text
2851 OnClick -- popNoteMemoHTMLFormatClick
2852*)
2853
2854procedure TfrmNotes.popNoteMemoHTMLFormatClick(Sender: TObject);
2855//kt added function 8/09
2856begin
2857 inherited;
2858 ToggleHTMLEditMode;
2859end;
2860
2861procedure TfrmNotes.popNoteMemoCutClick(Sender: TObject);
2862begin
2863 inherited;
2864 FEditCtrl.CutToClipboard;
2865end;
2866
2867procedure TfrmNotes.popNoteMemoCopyClick(Sender: TObject);
2868begin
2869 inherited;
2870 FEditCtrl.CopyToClipboard;
2871end;
2872
2873procedure TfrmNotes.popNoteMemoPasteClick(Sender: TObject);
2874begin
2875 inherited;
2876 FEditCtrl.SelText := Clipboard.AsText; {*KCM*}
2877 frmNotes.pnlWriteResize(Self);
2878 //FEditCtrl.PasteFromClipboard; // use AsText to prevent formatting
2879end;
2880
2881procedure TfrmNotes.popNoteMemoReformatClick(Sender: TObject);
2882begin
2883 inherited;
2884 if Screen.ActiveControl <> memNewNote then Exit;
2885 ReformatMemoParagraph(memNewNote);
2886end;
2887
2888procedure TfrmNotes.popNoteMemoSaveContinueClick(Sender: TObject);
2889begin
2890 inherited;
2891 FChanged := True;
2892 DoAutoSave;
2893end;
2894
2895procedure TfrmNotes.popNoteMemoFindClick(Sender: TObject);
2896//var
2897 //hData: THandle; //CQ8300
2898 //pData: ^ClipboardData; //CQ8300
2899begin
2900 inherited;
2901 SendMessage(TRichEdit(popNoteMemo.PopupComponent).Handle, WM_VSCROLL, SB_TOP, 0);
2902 with dlgFindText do
2903 begin
2904 Position := Point(Application.MainForm.Left + pnlLeft.Width, Application.MainForm.Top);
2905 FindText := '';
2906 Options := [frDown, frHideUpDown];
2907{
2908 //CQ8300
2909 OpenClipboard(dlgFindText.Handle);
2910 hData := GetClipboardData(CF_TEXT);
2911 pData := GlobalLock(hData);
2912 FindText := pData^.Text;
2913 GlobalUnlock(hData);
2914 CloseClipboard;
2915 //end CQ8300
2916}
2917 Execute;
2918 end;
2919end;
2920
2921procedure TfrmNotes.dlgFindTextFind(Sender: TObject);
2922begin
2923 dmodShared.FindRichEditText(dlgFindText, TRichEdit(popNoteMemo.PopupComponent));
2924end;
2925
2926procedure TfrmNotes.popNoteMemoReplaceClick(Sender: TObject);
2927begin
2928 inherited;
2929 SendMessage(TRichEdit(popNoteMemo.PopupComponent).Handle, WM_VSCROLL, SB_TOP, 0);
2930 with dlgReplaceText do
2931 begin
2932 Position := Point(Application.MainForm.Left + pnlLeft.Width, Application.MainForm.Top);
2933 FindText := '';
2934 ReplaceText := '';
2935 Options := [frDown, frHideUpDown];
2936 Execute;
2937 end;
2938end;
2939
2940procedure TfrmNotes.dlgReplaceTextFind(Sender: TObject);
2941begin
2942 inherited;
2943 dmodShared.FindRichEditText(dlgFindText, TRichEdit(popNoteMemo.PopupComponent));
2944end;
2945
2946procedure TfrmNotes.dlgReplaceTextReplace(Sender: TObject);
2947begin
2948 inherited;
2949 dmodShared.ReplaceRichEditText(dlgReplaceText, TRichEdit(popNoteMemo.PopupComponent));
2950end;
2951
2952procedure TfrmNotes.popNoteMemoSpellClick(Sender: TObject);
2953begin
2954 inherited;
2955 DoAutoSave(0);
2956 timAutoSave.Enabled := False;
2957 try
2958 SpellCheckForControl(memNewNote);
2959 finally
2960 FChanged := True;
2961 DoAutoSave(0);
2962 timAutoSave.Enabled := True;
2963 end;
2964end;
2965
2966procedure TfrmNotes.popNoteMemoGrammarClick(Sender: TObject);
2967begin
2968 inherited;
2969 DoAutoSave(0);
2970 timAutoSave.Enabled := False;
2971 try
2972 GrammarCheckForControl(memNewNote);
2973 finally
2974 FChanged := True;
2975 DoAutoSave(0);
2976 timAutoSave.Enabled := True;
2977 end;
2978end;
2979
2980procedure TfrmNotes.mnuViewDetailClick(Sender: TObject);
2981begin
2982 inherited;
2983 if lstNotes.ItemIEN <= 0 then Exit;
2984 mnuViewDetail.Checked := not mnuViewDetail.Checked;
2985 if mnuViewDetail.Checked then
2986 begin
2987// StatusText('Retrieving progress note details...'); <-- original line. //kt 7/19/2007
2988 StatusText(DKLangConstW('fNotes_Retrieving_progress_note_detailsxxx')); //kt added 7/19/2007
2989 Screen.Cursor := crAppStart; //kt, was crHourGlass;
2990 //kt LoadDetailText(memNote.Lines, lstNotes.ItemIEN);
2991 LoadDetailText(FViewNote, lstNotes.ItemIEN); //kt 8/09
2992 SetDisplayToHTMLvsText(FViewMode,FViewNote); //kt 8/09
2993 Screen.Cursor := crDefault;
2994 StatusText('');
2995 memNote.SelStart := 0;
2996 if not (vmHTML in FViewMode) then //kt 8/09
2997 memNote.Repaint;
2998 end
2999 else
3000 lstNotesClick(Self);
3001 if (vmHTML in FViewMode) then begin //kt 8/09
3002 SendMessage(HTMLViewer.Handle, WM_VSCROLL, SB_TOP, 0); //kt 8/09
3003 end else begin //kt 8/09
3004 SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
3005 end; //kt 8/09
3006end;
3007
3008procedure TfrmNotes.FormClose(Sender: TObject; var Action: TCloseAction);
3009var
3010 Saved: Boolean;
3011 IEN: Int64;
3012 ErrMsg: string;
3013 DeleteSts: TActionRec;
3014begin
3015 inherited;
3016 if frmFrame.TimedOut and (EditingIndex <> -1) then
3017 begin
3018 FSilent := True;
3019 //kt 8/09 if memNewNote.GetTextLen > 0 then SaveCurrentNote(Saved)
3020 if EditorHasText then SaveCurrentNote(Saved) //kt 8/09
3021 else
3022 begin
3023 IEN := lstNotes.GetIEN(EditingIndex);
3024 if not LastSaveClean(IEN) then // means note hasn't been committed yet
3025 begin
3026 LockDocument(IEN, ErrMsg);
3027 if ErrMsg = '' then
3028 begin
3029 DeleteDocument(DeleteSts, IEN, '');
3030 UnlockDocument(IEN);
3031 end; {if ErrMsg}
3032 end; {if not LastSaveClean}
3033 end; {else}
3034 end; {if frmFrame}
3035end;
3036
3037procedure TfrmNotes.mnuActIdentifyAddlSignersClick(Sender: TObject);
3038var
3039 Exclusions: TStrings;
3040 Saved, x, y: boolean;
3041 SignerList: TSignerList;
3042 ActionSts: TActionRec;
3043 SigAction: integer;
3044 SavedDocID: string;
3045 ARefDate: TFMDateTime;
3046begin
3047 inherited;
3048 if lstNotes.ItemIEN = 0 then exit;
3049 SavedDocID := lstNotes.ItemID;
3050 if lstNotes.ItemIndex = EditingIndex then
3051 begin
3052 SaveCurrentNote(Saved);
3053 if not Saved then Exit;
3054 LoadNotes;
3055 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
3056 end;
3057 x := CanChangeCosigner(lstNotes.ItemIEN);
3058 ActOnDocument(ActionSts, lstNotes.ItemIEN, 'IDENTIFY SIGNERS');
3059 y := ActionSts.Success;
3060 if x and not y then
3061 begin
3062 if InfoBox(ActionSts.Reason + CRLF + CRLF +
3063// 'Would you like to change the cosigner?', <-- original line. //kt 7/19/2007
3064 DKLangConstW('fNotes_Would_you_like_to_change_the_cosignerx'), //kt added 7/19/2007
3065 TX_IN_AUTH, MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) = ID_YES then
3066 SigAction := SG_COSIGNER
3067 else
3068 Exit;
3069 end
3070 else if y and not x then SigAction := SG_ADDITIONAL
3071 else if x and y then SigAction := SG_BOTH
3072 else
3073 begin
3074 InfoBox(ActionSts.Reason, TX_IN_AUTH, MB_OK);
3075 Exit;
3076 end;
3077
3078 if not LockConsultRequestAndNote(lstNotes.ItemIEN) then Exit;
3079 Exclusions := GetCurrentSigners(lstNotes.ItemIEN);
3080 ARefDate := StrToFloat(Piece(lstNotes.Items[lstNotes.ItemIndex], U, 3));
3081 SelectAdditionalSigners(Font.Size, lstNotes.ItemIEN, SigAction, Exclusions, SignerList, CT_NOTES, ARefDate);
3082 with SignerList do
3083 begin
3084 case SigAction of
3085 SG_ADDITIONAL: if Changed and (Signers <> nil) and (Signers.Count > 0) then
3086 UpdateAdditionalSigners(lstNotes.ItemIEN, Signers);
3087 SG_COSIGNER: if Changed then ChangeCosigner(lstNotes.ItemIEN, Cosigner);
3088 SG_BOTH: if Changed then
3089 begin
3090 if (Signers <> nil) and (Signers.Count > 0) then
3091 UpdateAdditionalSigners(lstNotes.ItemIEN, Signers);
3092 ChangeCosigner(lstNotes.ItemIEN, Cosigner);
3093 end;
3094 end;
3095 lstNotesClick(Self);
3096 end;
3097 UnlockDocument(lstNotes.ItemIEN);
3098 UnlockConsultRequest(lstNotes.ItemIEN);
3099end;
3100
3101procedure TfrmNotes.popNoteMemoAddlSignClick(Sender: TObject);
3102begin
3103 inherited;
3104 mnuActIdentifyAddlSignersClick(Self);
3105end;
3106
3107procedure TfrmNotes.ProcessNotifications;
3108var
3109 x: string;
3110 Saved: boolean;
3111 tmpNode: TTreeNode;
3112 AnObject: PDocTreeObject;
3113begin
3114 SetupVars; //kt added 7/19/2007 to replace constants with vars.
3115 if EditingIndex <> -1 then
3116 begin
3117 SaveCurrentNote(Saved);
3118 if not Saved then Exit;
3119 end;
3120 lblNotes.Caption := Notifications.Text;
3121 tvNotes.Caption := Notifications.Text;
3122 EditingIndex := -1;
3123 lstNotes.Enabled := True ;
3124 pnlRead.BringToFront ;
3125 // show ALL unsigned/uncosigned for a patient, not just the alerted one
3126 // what about cosignature? How to get correct list? ORB FOLLOWUP TYPE = OR alerts only
3127 x := Notifications.AlertData;
3128 if StrToIntDef(Piece(x, U, 1), 0) = 0 then
3129 begin
3130 InfoBox(TX_NO_ALERT, TX_CAP_NO_ALERT, MB_OK);
3131 Exit;
3132 end;
3133 uChanging := True;
3134 tvNotes.Items.BeginUpdate;
3135 lstNotes.Clear;
3136 KillDocTreeObjects(tvNotes);
3137 tvNotes.Items.Clear;
3138 lstNotes.Items.Add(x);
3139 AnObject := MakeNoteTreeObject('ALERT^Alerted Note^^^^^^^^^^^%^0');
3140 tmpNode := tvNotes.Items.AddObjectFirst(tvNotes.Items.GetFirstNode, AnObject.NodeText, AnObject);
3141 TORTreeNode(tmpNode).StringData := 'ALERT^Alerted Note^^^^^^^^^^^%^0';
3142 tmpNode.ImageIndex := IMG_TOP_LEVEL;
3143 AnObject := MakeNoteTreeObject(x);
3144 tmpNode := tvNotes.Items.AddChildObjectFirst(tmpNode, AnObject.NodeText, AnObject);
3145 TORTreeNode(tmpNode).StringData := x;
3146 SetTreeNodeImagesAndFormatting(TORTreeNode(tmpNode), FCurrentContext, CT_NOTES);
3147 tvNotes.Selected := tmpNode;
3148 tvNotes.Items.EndUpdate;
3149 uChanging := False;
3150 tvNotesChange(Self, tvNotes.Selected);
3151 case Notifications.Followup of
3152 NF_NOTES_UNSIGNED_NOTE: ; //Automatically deleted by sig action!!!
3153 end;
3154 if Copy(Piece(Notifications.RecordID, U, 2), 1, 6) = 'TIUADD' then Notifications.Delete;
3155 if Copy(Piece(Notifications.RecordID, U, 2), 1, 5) = 'TIUID' then Notifications.Delete;
3156end;
3157
3158procedure TfrmNotes.SetViewContext(AContext: TTIUContext);
3159var
3160 Saved: boolean;
3161begin
3162 if EditingIndex <> -1 then
3163 begin
3164 SaveCurrentNote(Saved);
3165 if not Saved then Exit;
3166 end;
3167 FCurrentContext := AContext;
3168 EditingIndex := -1;
3169 tvNotes.Enabled := True ;
3170 pnlRead.BringToFront ;
3171 if FCurrentContext.Status <> '' then with uTIUContext do
3172 begin
3173 BeginDate := FCurrentContext.BeginDate;
3174 EndDate := FCurrentContext.EndDate;
3175 FMBeginDate := FCurrentContext.FMBeginDate;
3176 FMEndDate := FCurrentContext.FMEndDate;
3177 Status := FCurrentContext.Status;
3178 Author := FCurrentContext.Author;
3179 MaxDocs := FCurrentContext.MaxDocs;
3180 ShowSubject := FCurrentContext.ShowSubject;
3181 GroupBy := FCurrentContext.GroupBy;
3182 SortBy := FCurrentContext.SortBy;
3183 ListAscending := FCurrentContext.ListAscending;
3184 TreeAscending := FCurrentContext.TreeAscending;
3185 Keyword := FCurrentContext.Keyword;
3186 SearchField := FCurrentContext.SearchField;
3187 Filtered := FCurrentContext.Filtered;
3188 Changed := True;
3189 mnuViewClick(Self);
3190 end
3191 else
3192 begin
3193 ViewContext := NC_RECENT ;
3194 mnuViewClick(Self);
3195 end;
3196end;
3197
3198procedure TfrmNotes.mnuViewSaveAsDefaultClick(Sender: TObject);
3199//const
3200//TX_NO_MAX = 'You have not specified a maximum number of notes to be returned.' + CRLF + <-- original line. //kt 7/19/2007
3201// 'If you save this preference, the result will be that ALL notes for every' + CRLF + <-- original line. //kt 7/19/2007
3202// 'patient will be saved as your default view.' + CRLF + CRLF + <-- original line. //kt 7/19/2007
3203// 'For patients with large numbers of notes, this could result in some lengthy' + CRLF + <-- original line. //kt 7/19/2007
3204// 'delays in loading the list of notes.' + CRLF + CRLF + <-- original line. //kt 7/19/2007
3205// 'Are you sure you mean to do this?'; <-- original line. //kt 7/19/2007
3206//TX_REPLACE = 'Replace current defaults?'; <-- original line. //kt 7/19/2007
3207var
3208 TX_NO_MAX : string; //kt
3209 TX_REPLACE : string; //kt
3210
3211begin
3212 inherited;
3213 TX_NO_MAX := DKLangConstW('fNotes_You_have_not_specified_a_maximum_number_of_notes_to_be_returnedx') + CRLF + //kt added 7/19/2007
3214 DKLangConstW('fNotes_If_you_save_this_preferencex_the_result_will_be_that_ALL_notes_for_every') + CRLF + //kt added 7/19/2007
3215 DKLangConstW('fNotes_patient_will_be_saved_as_your_default_viewx') + CRLF + CRLF + //kt added 7/19/2007
3216 DKLangConstW('fNotes_For_patients_with_large_numbers_of_notesx_this_could_result_in_some_lengthy') + CRLF + //kt added 7/19/2007
3217 DKLangConstW('fNotes_delays_in_loading_the_list_of_notesx') + CRLF + CRLF + //kt added 7/19/2007
3218 DKLangConstW('fNotes_Are_you_sure_you_mean_to_do_thisx'); //kt added 7/19/2007
3219 TX_REPLACE := DKLangConstW('fNotes_Replace_current_defaultsx'); //kt added 7/19/2007
3220 if FCurrentContext.MaxDocs = 0 then
3221 if InfoBox(TX_NO_MAX,'Warning', MB_YESNO or MB_ICONWARNING) = IDNO then
3222 begin
3223 mnuViewClick(mnuViewCustom);
3224 Exit;
3225 end;
3226 if InfoBox(TX_REPLACE,'Confirmation', MB_YESNO or MB_ICONQUESTION) = IDYES then
3227 begin
3228 SaveCurrentTIUContext(FCurrentContext);
3229 FDefaultContext := FCurrentContext;
3230 //lblNotes.Caption := 'Default List';
3231 end;
3232end;
3233
3234procedure TfrmNotes.mnuViewReturntoDefaultClick(Sender: TObject);
3235begin
3236 inherited;
3237 SetViewContext(FDefaultContext);
3238end;
3239
3240procedure TfrmNotes.popNoteMemoTemplateClick(Sender: TObject);
3241begin
3242 inherited;
3243 EditTemplates(Self, TRUE, FEditCtrl.SelText);
3244end;
3245
3246procedure TfrmNotes.popNoteListPopup(Sender: TObject);
3247begin
3248 inherited;
3249 N4.Visible := (popNoteList.PopupComponent is TORTreeView);
3250 popNoteListExpandAll.Visible := N4.Visible;
3251 popNoteListExpandSelected.Visible := N4.Visible;
3252 popNoteListCollapseAll.Visible := N4.Visible;
3253 popNoteListCollapseSelected.Visible := N4.Visible;
3254end;
3255
3256procedure TfrmNotes.popNoteListExpandAllClick(Sender: TObject);
3257begin
3258 inherited;
3259 tvNotes.FullExpand;
3260end;
3261
3262procedure TfrmNotes.popNoteListCollapseAllClick(Sender: TObject);
3263begin
3264 inherited;
3265 tvNotes.Selected := nil;
3266 lvNotes.Items.Clear;
3267 memNote.Clear;
3268 HTMLViewer.Clear; //kt 8/09
3269 tvNotes.FullCollapse;
3270 tvNotes.Selected := tvNotes.TopItem;
3271end;
3272
3273procedure TfrmNotes.popNoteListExpandSelectedClick(Sender: TObject);
3274begin
3275 inherited;
3276 if tvNotes.Selected = nil then exit;
3277 with tvNotes.Selected do if HasChildren then Expand(True);
3278end;
3279
3280procedure TfrmNotes.popNoteListCollapseSelectedClick(Sender: TObject);
3281begin
3282 inherited;
3283 if tvNotes.Selected = nil then exit;
3284 with tvNotes.Selected do if HasChildren then Collapse(True);
3285end;
3286
3287procedure TfrmNotes.mnuEditTemplatesClick(Sender: TObject);
3288begin
3289 inherited;
3290 EditTemplates(Self);
3291end;
3292
3293procedure TfrmNotes.mnuNewTemplateClick(Sender: TObject);
3294begin
3295 inherited;
3296 EditTemplates(Self, TRUE);
3297end;
3298
3299procedure TfrmNotes.mnuEditSharedTemplatesClick(Sender: TObject);
3300begin
3301 inherited;
3302 EditTemplates(Self, FALSE, '', TRUE);
3303end;
3304
3305procedure TfrmNotes.mnuNewSharedTemplateClick(Sender: TObject);
3306begin
3307 inherited;
3308 EditTemplates(Self, TRUE, '', TRUE);
3309end;
3310
3311procedure TfrmNotes.mnuOptionsClick(Sender: TObject);
3312begin
3313 inherited;
3314 mnuEditTemplates.Enabled := frmDrawers.CanEditTemplates;
3315 mnuNewTemplate.Enabled := frmDrawers.CanEditTemplates;
3316 mnuEditSharedTemplates.Enabled := frmDrawers.CanEditShared;
3317 mnuNewSharedTemplate.Enabled := frmDrawers.CanEditShared;
3318 mnuEditDialgFields.Enabled := CanEditTemplateFields;
3319end;
3320
3321procedure TfrmNotes.SetEditingIndex(const Value: Integer);
3322begin
3323 FEditingIndex := Value;
3324 if(FEditingIndex < 0) then
3325 KillReminderDialog(Self);
3326 if(assigned(frmReminderTree)) then
3327 frmReminderTree.EnableActions;
3328end;
3329
3330function TfrmNotes.CanFinishReminder: boolean;
3331begin
3332 if(EditingIndex < 0) then
3333 Result := FALSE
3334 else
3335 Result := (lstNotes.ItemIndex = EditingIndex);
3336end;
3337
3338procedure TfrmNotes.FormDestroy(Sender: TObject);
3339begin
3340 //kt note: The Images tab will delete all files in .\Cache, which
3341 // might include HTMLfilename. No harm if already deleted.
3342 //kt 8/09 DeleteFile(HTMLfilename); //kt added 5-2-05
3343 TAccessibleTreeView.UnwrapControl(tvNotes);
3344 FDocList.Free;
3345 FImageFlag.Free;
3346 KillDocTreeObjects(tvNotes);
3347 HtmlEditor.Free; //kt 6/7/09
3348 HtmlViewer.Free; //kt 6/7/09
3349 inherited;
3350end;
3351
3352function TfrmNotes.GetDrawers: TFrmDrawers;
3353begin
3354 Result := frmDrawers;
3355end;
3356
3357procedure TfrmNotes.AssignRemForm;
3358begin
3359 //kt 8/09 ReminderDialog interaction has not yet been debugged with HTML formatted text.
3360 with RemForm do
3361 begin
3362 Form := Self;
3363 PCEObj := uPCEEdit;
3364 RightPanel := pnlRight;
3365 CanFinishProc := CanFinishReminder;
3366 DisplayPCEProc := DisplayPCE;
3367 Drawers := frmDrawers;
3368 NewNoteRE := memNewNote;
3369 NewNoteHTMLE := HTMLEditor; //kt
3370 NoteList := lstNotes;
3371 end;
3372end;
3373
3374procedure TfrmNotes.mnuEditDialgFieldsClick(Sender: TObject);
3375begin
3376 inherited;
3377 EditDialogFields;
3378end;
3379
3380//=================== Added for sort/search enhancements ======================
3381procedure TfrmNotes.LoadNotes;
3382const
3383 INVALID_ID = -1;
3384 INFO_ID = 1;
3385var
3386 tmpList: TStringList;
3387 ANode: TORTreeNode;
3388 x,xx,noteId: integer; // Text Search CQ: HDS00002856
3389 Dest: TStrings; // Text Search CQ: HDS00002856
3390 KeepFlag: Boolean; // Text Search CQ: HDS00002856
3391 NoteCount, NoteMatches: integer; // Text Search CQ: HDS00002856
3392begin
3393 tmpList := TStringList.Create;
3394 try
3395 FDocList.Clear;
3396 uChanging := True;
3397 RedrawSuspend(memNote.Handle);
3398 RedrawSuspend(HTMLViewer.Handle); //kt 8/09
3399 RedrawSuspend(lvNotes.Handle);
3400 tvNotes.Items.BeginUpdate;
3401 lstNotes.Items.Clear;
3402 KillDocTreeObjects(tvNotes);
3403 tvNotes.Items.Clear;
3404 tvNotes.Items.EndUpdate;
3405 lvNotes.Items.Clear;
3406 memNote.Clear;
3407 HTMLViewer.Clear; //kt 8/09
3408 memNote.Invalidate;
3409 lblTitle.Caption := '';
3410 lvNotes.Caption := '';
3411 with FCurrentContext do
3412 begin
3413 if Status <> IntToStr(NC_UNSIGNED) then
3414 begin
3415 ListNotesForTree(tmpList, NC_UNSIGNED, 0, 0, 0, 0, TreeAscending);
3416 if tmpList.Count > 0 then
3417 begin
3418 CreateListItemsforDocumentTree(FDocList, tmpList, NC_UNSIGNED, GroupBy, TreeAscending, CT_NOTES);
3419 UpdateTreeView(FDocList, tvNotes);
3420 end;
3421 tmpList.Clear;
3422 FDocList.Clear;
3423 end;
3424 if Status <> IntToStr(NC_UNCOSIGNED) then
3425 begin
3426 ListNotesForTree(tmpList, NC_UNCOSIGNED, 0, 0, 0, 0, TreeAscending);
3427 if tmpList.Count > 0 then
3428 begin
3429 CreateListItemsforDocumentTree(FDocList, tmpList, NC_UNCOSIGNED, GroupBy, TreeAscending, CT_NOTES);
3430 UpdateTreeView(FDocList, tvNotes);
3431 end;
3432 tmpList.Clear;
3433 FDocList.Clear;
3434 end;
3435 ListNotesForTree(tmpList, StrToIntDef(Status, 0), FMBeginDate, FMEndDate, Author, MaxDocs, TreeAscending);
3436 CreateListItemsforDocumentTree(FDocList, tmpList, StrToIntDef(Status, 0), GroupBy, TreeAscending, CT_NOTES);
3437
3438 // Text Search CQ: HDS00002856 ---------------------------------------
3439 if FCurrentContext.SearchString<>'' then // Text Search CQ: HDS00002856
3440 begin
3441 NoteMatches := 0;
3442 Dest:=TStringList.Create;
3443 NoteCount:=FDocList.Count-1;
3444 if FDocList.Count>0 then
3445 for x := FDocList.Count-1 downto 1 do begin; // Don't do 0, because it's informational
3446 KeepFlag:=False;
3447// lblNotes.Caption:='Scanning '+IntToStr(NoteCount-x+1)+' of '+IntToStr(NoteCount)+', '+IntToStr(NoteMatches); <-- original line. //kt 7/19/2007
3448 lblNotes.Caption:=DKLangConstW('fNotes_Scanning')+' '+IntToStr(NoteCount-x+1)+DKLangConstW('fNotes_of')+IntToStr(NoteCount)+', '+IntToStr(NoteMatches); //kt added 7/19/2007
3449 If NoteMatches=1 then lblNotes.Caption:=lblNotes.Caption+' match' else
3450 lblNotes.Caption:=lblNotes.Caption+' matches';
3451 frmSearchStop.lblSearchStatus.Caption := lblNotes.Caption;
3452 frmSearchStop.lblSearchStatus.Repaint;
3453 lblNotes.Repaint;
3454 // Free up some ticks so they can click the "Stop" button
3455 application.processmessages;
3456 application.processmessages;
3457 application.processmessages;
3458 If SearchTextStopFlag = False then begin
3459 noteId := StrToIntDef(Piece(FDocList.Strings[x],'^',1),-1);
3460 if (noteId = INVALID_ID) or (noteId = INFO_ID) then
3461 Continue;
3462 CallV('TIU GET RECORD TEXT', [Piece(FDocList.Strings[x],'^',1)]);
3463 Dest.Assign(RPCBrokerV.Results);
3464 If Dest.Count > 0 then
3465 for xx := 0 to Dest.Count-1 do
3466 begin
3467 //Dest.Strings[xx] := StringReplace(Dest.Strings[xx],'#13',' ',[rfReplaceAll, rfIgnoreCase]);
3468 if Pos(Uppercase(FCurrentContext.SearchString),Uppercase(Dest.Strings[xx]))>0 then
3469 keepflag:=true;
3470 end;
3471 If KeepFlag=False then begin;
3472 if FDocList.Count >= x then
3473 FDocList.Delete(x);
3474 if (tmpList.Count >= x) and (x > 0) then
3475 tmpList.Delete(x-1);
3476 end else
3477 Inc(NoteMatches);
3478 end;
3479 end;
3480 Dest.Free;
3481 end;
3482 // Text Search CQ: HDS00002856 ---------------------------------------
3483
3484 UpdateTreeView(FDocList, tvNotes);
3485 end;
3486 with tvNotes do
3487 begin
3488 uChanging := True;
3489 tvNotes.Items.BeginUpdate;
3490 RemoveParentsWithNoChildren(tvNotes, FCurrentContext); // moved here in v15.9 (RV)
3491 if FLastNoteID <> '' then
3492 Selected := FindPieceNode(FLastNoteID, 1, U, nil);
3493 if Selected = nil then
3494 begin
3495 if (FCurrentContext.GroupBy <> '') or (FCurrentContext.Filtered) then
3496 begin
3497 ANode := TORTreeNode(Items.GetFirstNode);
3498 while ANode <> nil do
3499 begin
3500 ANode.Expand(False);
3501 Selected := ANode;
3502 ANode := TORTreeNode(ANode.GetNextSibling);
3503 end;
3504 end
3505 else
3506 begin
3507 ANode := tvNotes.FindPieceNode(FCurrentContext.Status, 1, U, nil);
3508 if ANode <> nil then ANode.Expand(False);
3509 ANode := tvNotes.FindPieceNode(IntToStr(NC_UNSIGNED), 1, U, nil);
3510 if ANode = nil then
3511 ANode := tvNotes.FindPieceNode(IntToStr(NC_UNCOSIGNED), 1, U, nil);
3512 if ANode = nil then
3513 ANode := tvNotes.FindPieceNode(FCurrentContext.Status, 1, U, nil);
3514 if ANode <> nil then
3515 begin
3516 if ANode.getFirstChild <> nil then
3517 Selected := ANode.getFirstChild
3518 else
3519 Selected := ANode;
3520 end;
3521 end;
3522 end;
3523 memNote.Clear;
3524 HTMLViewer.Clear; //kt 8/09
3525 with lvNotes do
3526 begin
3527 Selected := nil;
3528 if FCurrentContext.SortBy <> '' then
3529 ColumnToSort := Pos(FCurrentContext.SortBy, 'RDSAL') - 1;
3530 if not FCurrentContext.ShowSubject then
3531 begin
3532 Columns[1].Width := 2 * (Width div 5);
3533 Columns[2].Width := 0;
3534 end
3535 else
3536 begin
3537 Columns[1].Width := Width div 5;
3538 Columns[2].Width := Columns[1].Width;
3539 end;
3540 end;
3541 //RemoveParentsWithNoChildren(tvNotes, FCurrentContext); // moved FROM here in v15.9 (RV)
3542 tvNotes.Items.EndUpdate;
3543 uChanging := False;
3544 SendMessage(tvNotes.Handle, WM_VSCROLL, SB_TOP, 0);
3545 if Selected <> nil then tvNotesChange(Self, Selected);
3546 end;
3547 finally
3548 //kt NOTE: Is this enough??
3549 if (vmHTML in FViewMode) then begin //kt 8/09
3550 RedrawActivate(HtmlViewer.Handle); //kt 8/09
3551 end else begin //kt 8/09
3552 RedrawActivate(memNote.Handle);
3553 end; //kt 8/09
3554 RedrawActivate(lvNotes.Handle);
3555 tmpList.Free;
3556 end;
3557end;
3558
3559procedure TfrmNotes.UpdateTreeView(DocList: TStringList; Tree: TORTreeView);
3560begin
3561 with Tree do
3562 begin
3563 uChanging := True;
3564 Items.BeginUpdate;
3565 lstNotes.Items.AddStrings(DocList);
3566 BuildDocumentTree(DocList, '0', Tree, nil, FCurrentContext, CT_NOTES);
3567 Items.EndUpdate;
3568 uChanging := False;
3569 end;
3570end;
3571
3572procedure TfrmNotes.tvNotesChange(Sender: TObject; Node: TTreeNode);
3573var
3574 x, MySearch, MyNodeID: string;
3575 i: integer;
3576 WhyNot: string;
3577 Mode : TViewModeSet; //kt 8/09
3578begin
3579 if uChanging then Exit;
3580 //This gives the change a chance to occur when keyboarding, so that WindowEyes
3581 //doesn't use the old value.
3582 Application.ProcessMessages;
3583 with tvNotes do
3584 begin
3585 memNote.Clear;
3586 HTMLViewer.Clear; //kt 8/09
3587 if Selected = nil then Exit;
3588 if uIDNotesActive then
3589 begin
3590 mnuActDetachFromIDParent.Enabled := (Selected.ImageIndex in [IMG_ID_CHILD, IMG_ID_CHILD_ADD]);
3591 popNoteListDetachFromIDParent.Enabled := mnuActDetachFromIDParent.Enabled;
3592 if (Selected.ImageIndex in [IMG_SINGLE, IMG_PARENT, IMG_ID_CHILD, IMG_ID_CHILD_ADD]) then
3593 mnuActAttachtoIDParent.Enabled := CanBeAttached(PDocTreeObject(Selected.Data)^.DocID, WhyNot)
3594 else
3595 mnuActAttachtoIDParent.Enabled := False;
3596 popNoteListAttachtoIDParent.Enabled := mnuActAttachtoIDParent.Enabled;
3597 if (Selected.ImageIndex in [IMG_SINGLE, IMG_PARENT,
3598 IMG_IDNOTE_OPEN, IMG_IDNOTE_SHUT,
3599 IMG_IDPAR_ADDENDA_OPEN, IMG_IDPAR_ADDENDA_SHUT]) then
3600 mnuActAddIDEntry.Enabled := CanReceiveAttachment(PDocTreeObject(Selected.Data)^.DocID, WhyNot)
3601 else
3602 mnuActAddIDEntry.Enabled := False;
3603 popNoteListAddIDEntry.Enabled := mnuActAddIDEntry.Enabled
3604 end;
3605 RedrawSuspend(lvNotes.Handle);
3606 RedrawSuspend(memNote.Handle);
3607 RedrawSuspend(HTMLViewer.Handle); //kt 8/09
3608 popNoteListExpandSelected.Enabled := Selected.HasChildren;
3609 popNoteListCollapseSelected.Enabled := Selected.HasChildren;
3610 x := TORTreeNode(Selected).StringData;
3611 if (Selected.ImageIndex in [IMG_TOP_LEVEL, IMG_GROUP_OPEN, IMG_GROUP_SHUT]) then
3612 begin
3613 lvNotes.Visible := True;
3614 lvNotes.Items.Clear;
3615 lvNotes.Height := (2 * lvNotes.Parent.Height) div 5;
3616 with lblTitle do
3617 begin
3618 Caption := Trim(Selected.Text);
3619 if (FCurrentContext.SearchField <> '') and (FCurrentContext.Filtered) then
3620 begin
3621 case FCurrentContext.SearchField[1] of
3622 'T': MySearch := 'TITLE';
3623 'S': MySearch := 'SUBJECT';
3624 'B': MySearch := 'TITLE or SUBJECT';
3625 end;
3626// Caption := Caption + ' where ' + MySearch + ' contains "' + UpperCase(FCurrentContext.Keyword) + '"'; <-- original line. //kt 7/19/2007
3627 Caption := Caption + DKLangConstW('fNotes_where') + MySearch + DKLangConstW('fNotes_contains_x') + UpperCase(FCurrentContext.Keyword) + '"'; //kt added 7/19/2007
3628 end;
3629 lvNotes.Caption := Caption;
3630 end;
3631
3632 if Selected.ImageIndex = IMG_TOP_LEVEL then
3633 MyNodeID := Piece(TORTreeNode(Selected).StringData, U, 1)
3634 else if Selected.Parent.ImageIndex = IMG_TOP_LEVEL then
3635 MyNodeID := Piece(TORTreeNode(Selected.Parent).StringData, U, 1)
3636 else if Selected.Parent.Parent.ImageIndex = IMG_TOP_LEVEL then
3637 MyNodeID := Piece(TORTreeNode(Selected.Parent.Parent).StringData, U, 1);
3638
3639 uChanging := True;
3640 TraverseTree(tvNotes, lvNotes, Selected.GetFirstChild, MyNodeID, FCurrentContext);
3641 with lvNotes do
3642 begin
3643 for i := 0 to Columns.Count - 1 do
3644 Columns[i].ImageIndex := IMG_NONE;
3645 ColumnSortForward := FCurrentContext.ListAscending;
3646 if ColumnToSort = 5 then ColumnToSort := 0;
3647 if ColumnSortForward then
3648 Columns[ColumnToSort].ImageIndex := IMG_ASCENDING
3649 else
3650 Columns[ColumnToSort].ImageIndex := IMG_DESCENDING;
3651 if ColumnToSort = 0 then ColumnToSort := 5;
3652 AlphaSort;
3653 Columns[5].Width := 0;
3654 Columns[6].Width := 0;
3655 end;
3656 uChanging := False;
3657 with lvNotes do
3658 if Items.Count > 0 then
3659 begin
3660 Selected := Items[0];
3661 lvNotesSelectItem(Self, Selected, True);
3662 end
3663 else
3664 begin
3665 Selected := nil;
3666 lstNotes.ItemIndex := -1;
3667 memPCEShow.Clear;
3668 ShowPCEControls(False);
3669 end;
3670 //kt 8/09
3671 //kt NOTE: At this point the list has changed. But what is the new note-to-view's format?
3672 // We can't just use FViewMode. Because that just states what mode was used on the last note.
3673 Mode := [vmView] + [vmHTML_MODE[vmHTML in FViewMode]]; //kt 8/09
3674 SetDisplayToHTMLvsText(Mode,nil,VIEW_ACTIVATE_ONLY); //kt 8/09
3675 //kt 8/09 pnlWrite.Visible := False;
3676 //kt 8/09 pnlRead.Visible := True;
3677 // uncommented next 4 lines in v17.5 (RV)
3678 //-----------------------------
3679 UpdateReminderFinish;
3680 ShowPCEControls(False);
3681 frmDrawers.DisplayDrawers(TRUE, [odTemplates], [odTemplates]); //FALSE);
3682 ShowPCEButtons(FALSE);
3683 //-----------------------------
3684 //memNote.Clear;
3685 end
3686 else if StrToIntDef(Piece(x, U, 1), 0) > 0 then
3687 begin
3688 memNote.Clear;
3689 HTMLViewer.Clear; //kt 8/09
3690 lvNotes.Visible := False;
3691 lstNotes.SelectByID(Piece(x, U, 1));
3692 lstNotesClick(Self);
3693 if (vmHTML in FViewMode) then begin //kt 8/09
3694 SendMessage(HTMLViewer.Handle, WM_VSCROLL, SB_TOP, 0); //kt 8/09
3695 end else begin //kt 8/09
3696 SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
3697 end; //kt 8/09
3698 end;
3699 SendMessage(tvNotes.Handle, WM_HSCROLL, SB_THUMBTRACK, 0);
3700 RedrawActivate(lvNotes.Handle);
3701 if (vmHTML in FViewMode) then begin //kt 8/09
3702 RedrawActivate(HtmlViewer.Handle); //kt 8/09
3703 end else begin //kt 8/09
3704 RedrawActivate(memNote.Handle);
3705 end; //kt 8/09
3706 end;
3707end;
3708
3709procedure TfrmNotes.tvNotesCollapsed(Sender: TObject; Node: TTreeNode);
3710begin
3711 with Node do
3712 begin
3713 if (ImageIndex in [IMG_GROUP_OPEN, IMG_IDNOTE_OPEN, IMG_IDPAR_ADDENDA_OPEN]) then
3714 ImageIndex := ImageIndex - 1;
3715 if (SelectedIndex in [IMG_GROUP_OPEN, IMG_IDNOTE_OPEN, IMG_IDPAR_ADDENDA_OPEN]) then
3716 SelectedIndex := SelectedIndex - 1;
3717 end;
3718end;
3719
3720procedure TfrmNotes.tvNotesExpanded(Sender: TObject; Node: TTreeNode);
3721
3722 function SortByTitle(Node1, Node2: TTreeNode; Data: Longint): Integer; stdcall;
3723 begin
3724 { Within an ID parent node, sorts in ascending order by title
3725 BUT - addenda to parent document are always at the top of the sort, in date order}
3726 if (Copy(PDocTreeObject(Node1.Data)^.DocTitle, 1, 8) = 'Addendum') and
3727 (Copy(PDocTreeObject(Node2.Data)^.DocTitle, 1, 8) = 'Addendum') then
3728 begin
3729 Result := AnsiStrIComp(PChar(PDocTreeObject(Node1.Data)^.DocFMDate),
3730 PChar(PDocTreeObject(Node2.Data)^.DocFMDate));
3731 end
3732 else if Copy(PDocTreeObject(Node1.Data)^.DocTitle, 1, 8) = 'Addendum' then Result := -1
3733 else if Copy(PDocTreeObject(Node2.Data)^.DocTitle, 1, 8) = 'Addendum' then Result := 1
3734 else
3735 begin
3736 if Data = 0 then
3737 Result := AnsiStrIComp(PChar(PDocTreeObject(Node1.Data)^.DocTitle),
3738 PChar(PDocTreeObject(Node2.Data)^.DocTitle))
3739 else
3740 Result := -AnsiStrIComp(PChar(PDocTreeObject(Node1.Data)^.DocTitle),
3741 PChar(PDocTreeObject(Node2.Data)^.DocTitle));
3742 end
3743 end;
3744
3745 function SortByDate(Node1, Node2: TTreeNode; Data: Longint): Integer; stdcall;
3746 begin
3747 { Within an ID parent node, sorts in ascending order by document date
3748 BUT - addenda to parent document are always at the top of the sort, in date order}
3749 if (Copy(PDocTreeObject(Node1.Data)^.DocTitle, 1, 8) = 'Addendum') and
3750 (Copy(PDocTreeObject(Node2.Data)^.DocTitle, 1, 8) = 'Addendum') then
3751 begin
3752 Result := AnsiStrIComp(PChar(PDocTreeObject(Node1.Data)^.DocFMDate),
3753 PChar(PDocTreeObject(Node2.Data)^.DocFMDate));
3754 end
3755 else if Copy(PDocTreeObject(Node1.Data)^.DocTitle, 1, 8) = 'Addendum' then Result := -1
3756 else if Copy(PDocTreeObject(Node2.Data)^.DocTitle, 1, 8) = 'Addendum' then Result := 1
3757 else
3758 begin
3759 if Data = 0 then
3760 Result := AnsiStrIComp(PChar(PDocTreeObject(Node1.Data)^.DocFMDate),
3761 PChar(PDocTreeObject(Node2.Data)^.DocFMDate))
3762 else
3763 Result := -AnsiStrIComp(PChar(PDocTreeObject(Node1.Data)^.DocFMDate),
3764 PChar(PDocTreeObject(Node2.Data)^.DocFMDate));
3765 end;
3766 end;
3767
3768begin
3769 with Node do
3770 begin
3771 if Assigned(Data) then
3772 if (Pos('<', PDocTreeObject(Data)^.DocHasChildren) > 0) then
3773 begin
3774 if (PDocTreeObject(Node.Data)^.OrderByTitle) then
3775 CustomSort(@SortByTitle, 0)
3776 else
3777 CustomSort(@SortByDate, 0);
3778 end;
3779 if (ImageIndex in [IMG_GROUP_SHUT, IMG_IDNOTE_SHUT, IMG_IDPAR_ADDENDA_SHUT]) then
3780 ImageIndex := ImageIndex + 1;
3781 if (SelectedIndex in [IMG_GROUP_SHUT, IMG_IDNOTE_SHUT, IMG_IDPAR_ADDENDA_SHUT]) then
3782 SelectedIndex := SelectedIndex + 1;
3783 end;
3784end;
3785
3786procedure TfrmNotes.tvNotesClick(Sender: TObject);
3787begin
3788(* if tvNotes.Selected = nil then exit;
3789 if (tvNotes.Selected.ImageIndex in [IMG_TOP_LEVEL, IMG_GROUP_OPEN, IMG_GROUP_SHUT]) then
3790 begin
3791 uChanging := True;
3792 lvNotes.Selected := nil;
3793 uChanging := False;
3794 memNote.Clear;
3795 end;*)
3796end;
3797
3798procedure TfrmNotes.tvNotesDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
3799var
3800 AnItem: TORTreeNode;
3801begin
3802 Accept := False;
3803 if not uIDNotesActive then exit;
3804 AnItem := TORTreeNode(tvNotes.GetNodeAt(X, Y));
3805 if (AnItem = nil) or (AnItem.ImageIndex in [IMG_GROUP_OPEN, IMG_GROUP_SHUT, IMG_TOP_LEVEL]) then Exit;
3806 with tvNotes.Selected do
3807 if (ImageIndex in [IMG_SINGLE, IMG_PARENT, IMG_ID_CHILD, IMG_ID_CHILD_ADD]) then
3808 Accept := (AnItem.ImageIndex in [IMG_SINGLE, IMG_PARENT,
3809 IMG_IDNOTE_OPEN, IMG_IDNOTE_SHUT,
3810 IMG_IDPAR_ADDENDA_OPEN, IMG_IDPAR_ADDENDA_SHUT])
3811 else if (ImageIndex in [IMG_IDNOTE_OPEN, IMG_IDNOTE_SHUT, IMG_IDPAR_ADDENDA_OPEN, IMG_IDPAR_ADDENDA_SHUT]) then
3812 Accept := (AnItem.ImageIndex in [IMG_GROUP_OPEN, IMG_GROUP_SHUT, IMG_TOP_LEVEL])
3813 else if (ImageIndex in [IMG_ADDENDUM, IMG_GROUP_OPEN, IMG_GROUP_SHUT, IMG_TOP_LEVEL]) then
3814 Accept := False;
3815end;
3816
3817procedure TfrmNotes.tvNotesDragDrop(Sender, Source: TObject; X, Y: Integer);
3818var
3819 HT: THitTests;
3820 Saved: boolean;
3821 ADestNode: TORTreeNode;
3822begin
3823 if not uIDNotesActive then
3824 begin
3825 CancelDrag;
3826 exit;
3827 end;
3828 if tvNotes.Selected = nil then exit;
3829 if EditingIndex <> -1 then
3830 begin
3831 SaveCurrentNote(Saved);
3832 if not Saved then Exit;
3833 end;
3834 HT := tvNotes.GetHitTestInfoAt(X, Y);
3835 ADestNode := TORTreeNode(tvNotes.GetNodeAt(X, Y));
3836 DoAttachIDChild(TORTreeNode(tvNotes.Selected), ADestNode);
3837end;
3838
3839procedure TfrmNotes.tvNotesStartDrag(Sender: TObject; var DragObject: TDragObject);
3840//const
3841//TX_CAP_NO_DRAG = 'Item cannot be moved'; <-- original line. //kt 7/19/2007
3842//TX_NO_EDIT_DRAG = 'Items can not be dragged while a note is being edited.'; <-- original line. //kt 7/19/2007
3843var
3844 WhyNot: string;
3845 //Saved: boolean;
3846 TX_CAP_NO_DRAG : string; //kt
3847 TX_NO_EDIT_DRAG : string; //kt
3848begin
3849 TX_CAP_NO_DRAG := DKLangConstW('fNotes_Item_cannot_be_moved'); //kt added 7/19/2007
3850 TX_NO_EDIT_DRAG := DKLangConstW('fNotes_Items_can_not_be_dragged_while_a_note_is_being_editedx'); //kt added 7/19/2007
3851 if EditingIndex <> -1 then
3852 begin
3853 InfoBox(TX_NO_EDIT_DRAG, TX_CAP_NO_DRAG, MB_ICONERROR or MB_OK);
3854 CancelDrag;
3855 Exit;
3856 end;
3857 if (tvNotes.Selected.ImageIndex in [IMG_ADDENDUM, IMG_GROUP_OPEN, IMG_GROUP_SHUT, IMG_TOP_LEVEL]) or
3858 (not uIDNotesActive) or
3859 (lstNotes.ItemIEN = 0) then
3860 begin
3861 CancelDrag;
3862 Exit;
3863 end;
3864(* if EditingIndex <> -1 then
3865 begin
3866 SaveCurrentNote(Saved);
3867 if not Saved then Exit;
3868 end;*)
3869 if not CanBeAttached(PDocTreeObject(tvNotes.Selected.Data)^.DocID, WhyNot) then
3870 begin
3871 InfoBox(WhyNot, TX_CAP_NO_DRAG, MB_OK);
3872 CancelDrag;
3873 end;
3874end;
3875
3876//===================== Listview events =================================
3877
3878procedure TfrmNotes.lvNotesColumnClick(Sender: TObject; Column: TListColumn);
3879var
3880 i, ClickedColumn: Integer;
3881begin
3882 if Column.Index = 0 then ClickedColumn := 5 else ClickedColumn := Column.Index;
3883 if ClickedColumn = ColumnToSort then
3884 ColumnSortForward := not ColumnSortForward
3885 else
3886 ColumnSortForward := True;
3887 for i := 0 to lvNotes.Columns.Count - 1 do
3888 lvNotes.Columns[i].ImageIndex := IMG_NONE;
3889 if ColumnSortForward then lvNotes.Columns[Column.Index].ImageIndex := IMG_ASCENDING
3890 else lvNotes.Columns[Column.Index].ImageIndex := IMG_DESCENDING;
3891 ColumnToSort := ClickedColumn;
3892 case ColumnToSort of
3893 5: FCurrentContext.SortBy := 'R';
3894 1: FCurrentContext.SortBy := 'D';
3895 2: FCurrentContext.SortBy := 'S';
3896 3: FCurrentContext.SortBy := 'A';
3897 4: FCurrentContext.SortBy := 'L';
3898 else
3899 FCurrentContext.SortBy := 'R';
3900 end;
3901 FCurrentContext.ListAscending := ColumnSortForward;
3902 (Sender as TCustomListView).AlphaSort;
3903 //with lvNotes do if Selected <> nil then Scroll(0, Selected.Top - TopItem.Top);
3904end;
3905
3906procedure TfrmNotes.lvNotesCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
3907var
3908 ix: Integer;
3909begin
3910 if ColumnToSort = 0 then
3911 Compare := CompareText(Item1.Caption,Item2.Caption)
3912 else begin
3913 ix := ColumnToSort - 1;
3914 Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
3915 end;
3916 if not ColumnSortForward then Compare := -Compare;
3917end;
3918
3919procedure TfrmNotes.lvNotesSelectItem(Sender: TObject; Item: TListItem;
3920 Selected: Boolean);
3921begin
3922 if uChanging or (not Selected) then Exit;
3923 with lvNotes do
3924 begin
3925// StatusText('Retrieving selected progress note...'); <-- original line. //kt 7/19/2007
3926 StatusText(DKLangConstW('fNotes_Retrieving_selected_progress_notexxx')); //kt added 7/19/2007
3927 lstNotes.SelectByID(Item.SubItems[5]);
3928 lstNotesClick(Self);
3929 if (vmHTML in FViewMode) then begin //kt 8/09
3930 SendMessage(HTMLViewer.Handle, WM_VSCROLL, SB_TOP, 0); //kt 8/09
3931 end else begin //kt 8/09
3932 SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
3933 end; //kt 8/09
3934 end;
3935end;
3936
3937procedure TfrmNotes.lvNotesResize(Sender: TObject);
3938begin
3939 inherited;
3940 with lvNotes do
3941 begin
3942 if not FCurrentContext.ShowSubject then
3943 begin
3944 Columns[1].Width := 2 * (Width div 5);
3945 Columns[2].Width := 0;
3946 end
3947 else
3948 begin
3949 Columns[1].Width := Width div 5;
3950 Columns[2].Width := Columns[1].Width;
3951 end;
3952 end;
3953end;
3954
3955procedure TfrmNotes.EnableDisableIDNotes;
3956begin
3957 uIDNotesActive := IDNotesInstalled;
3958 mnuActDetachFromIDParent.Visible := uIDNotesActive;
3959 popNoteListDetachFromIDParent.Visible := uIDNotesActive;
3960 mnuActAddIDEntry.Visible := uIDNotesActive;
3961 popNoteListAddIDEntry.Visible := uIDNotesActive;
3962 mnuActAttachtoIDParent.Visible := uIDNotesActive;
3963 popNoteListAttachtoIDParent.Visible := uIDNotesActive;
3964 if uIDNotesActive then
3965 tvNotes.DragMode := dmAutomatic
3966 else
3967 tvNotes.DragMode := dmManual;
3968end;
3969
3970procedure TfrmNotes.ShowPCEButtons(Editing: boolean);
3971begin
3972 if frmFrame.Timedout then Exit;
3973
3974 FEditingNotePCEObj := Editing;
3975 if Editing or AnytimeEncounters then
3976 begin
3977 cmdPCE.Visible := TRUE;
3978 if Editing then
3979 begin
3980 cmdPCE.Enabled := CanEditPCE(uPCEEdit);
3981 cmdNewNote.Visible := AnytimeEncounters;
3982 cmdNewNote.Enabled := FALSE;
3983 end
3984 else
3985 begin
3986 cmdPCE.Enabled := (GetAskPCE(0) <> apDisable);
3987 cmdNewNote.Visible := TRUE;
3988 cmdNewNote.Enabled := (FStarting = False); //TRUE;
3989 end;
3990 if cmdNewNote.Visible then
3991 cmdPCE.Top := cmdNewNote.Top-cmdPCE.Height;
3992 end
3993 else
3994 begin
3995 cmdPCE.Enabled := FALSE;
3996 cmdPCE.Visible := FALSE;
3997 cmdNewNote.Visible := TRUE;
3998 cmdNewNote.Enabled := (FStarting = False); //TRUE;
3999 end;
4000 if cmdPCE.Visible then
4001 lblSpace1.Top := cmdPCE.Top - lblSpace1.Height
4002 else
4003 lblSpace1.Top := cmdNewNote.Top - lblSpace1.Height;
4004 popNoteMemoEncounter.Enabled := cmdPCE.Enabled;
4005 popNoteMemoEncounter.Visible := cmdPCE.Visible;
4006end;
4007
4008procedure TfrmNotes.mnuIconLegendClick(Sender: TObject);
4009begin
4010 inherited;
4011 ShowIconLegend(ilNotes);
4012end;
4013
4014procedure TfrmNotes.mnuActAttachtoIDParentClick(Sender: TObject);
4015var
4016 AChildNode: TORTreeNode;
4017 AParentID: string;
4018 SavedDocID: string;
4019 Saved: boolean;
4020begin
4021 inherited;
4022 if not uIDNotesActive then exit;
4023 if lstNotes.ItemIEN = 0 then exit;
4024 SavedDocID := lstNotes.ItemID;
4025 if EditingIndex <> -1 then
4026 begin
4027 SaveCurrentNote(Saved);
4028 if not Saved then Exit;
4029 LoadNotes;
4030 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
4031 end;
4032 if tvNotes.Selected = nil then exit;
4033 AChildNode := TORTreeNode(tvNotes.Selected);
4034 AParentID := SelectParentNodeFromList(tvNotes);
4035 if AParentID = '' then exit;
4036 with tvNotes do Selected := FindPieceNode(AParentID, 1, U, Items.GetFirstNode);
4037 DoAttachIDChild(AChildNode, TORTreeNode(tvNotes.Selected));
4038end;
4039
4040procedure TfrmNotes.DoAttachIDChild(AChild, AParent: TORTreeNode);
4041//const
4042//TX_ATTACH_CNF = 'Confirm Attachment'; <-- original line. //kt 7/19/2007
4043//TX_ATTACH_FAILURE = 'Attachment failed'; <-- original line. //kt 7/19/2007
4044var
4045 ErrMsg, WhyNot: string;
4046 SavedDocID: string;
4047 TX_ATTACH_CNF : string; //kt
4048 TX_ATTACH_FAILURE : string; //kt
4049begin
4050 SetupVars; //kt added 7/19/2007 to replace constants with vars.
4051 TX_ATTACH_CNF := DKLangConstW('fNotes_Confirm_Attachment'); //kt added 7/19/2007
4052 TX_ATTACH_FAILURE := DKLangConstW('fNotes_Attachment_failed'); //kt added 7/19/2007
4053 if (AChild = nil) or (AParent = nil) then exit;
4054 ErrMsg := '';
4055 if not CanBeAttached(PDocTreeObject(AChild.Data)^.DocID, WhyNot) then
4056 ErrMsg := ErrMsg + WhyNot + CRLF + CRLF;
4057 if not CanReceiveAttachment(PDocTreeObject(AParent.Data)^.DocID, WhyNot) then
4058 ErrMsg := ErrMsg + WhyNot;
4059 if ErrMsg <> '' then
4060 begin
4061 InfoBox(ErrMsg, TX_ATTACH_FAILURE, MB_OK);
4062 Exit;
4063 end
4064 else
4065 begin
4066 WhyNot := '';
4067 if (InfoBox('ATTACH: ' + AChild.Text + CRLF + CRLF +
4068 ' TO: ' + AParent.Text + CRLF + CRLF +
4069// 'Are you sure?', TX_ATTACH_CNF, MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES) <-- original line. //kt 7/19/2007
4070 DKLangConstW('fNotes_Are_you_surex'), TX_ATTACH_CNF, MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES) //kt added 7/19/2007
4071 then Exit;
4072 SavedDocID := PDocTreeObject(AParent.Data)^.DocID;
4073 end;
4074 if AChild.ImageIndex in [IMG_ID_CHILD, IMG_ID_CHILD_ADD] then
4075 begin
4076 if DetachEntryFromParent(PDocTreeObject(AChild.Data)^.DocID, WhyNot) then
4077 begin
4078 if AttachEntryToParent(PDocTreeObject(AChild.Data)^.DocID, PDocTreeObject(AParent.Data)^.DocID, WhyNot) then
4079 begin
4080 LoadNotes;
4081 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
4082 if tvNotes.Selected <> nil then tvNotes.Selected.Expand(False);
4083 end
4084 else
4085 InfoBox(WhyNot, TX_ATTACH_FAILURE, MB_OK);
4086 end
4087 else
4088 begin
4089 WhyNot := StringReplace(WhyNot, 'ATTACH', 'DETACH', [rfIgnoreCase]);
4090 WhyNot := StringReplace(WhyNot, 'to an ID', 'from an ID', [rfIgnoreCase]);
4091 InfoBox(WhyNot, TX_DETACH_FAILURE, MB_OK);
4092 Exit;
4093 end;
4094 end
4095 else
4096 begin
4097 if AttachEntryToParent(PDocTreeObject(AChild.Data)^.DocID, PDocTreeObject(AParent.Data)^.DocID, WhyNot) then
4098 begin
4099 LoadNotes;
4100 with tvNotes do Selected := FindPieceNode(SavedDocID, U, Items.GetFirstNode);
4101 if tvNotes.Selected <> nil then tvNotes.Selected.Expand(False);
4102 end
4103 else
4104 InfoBox(WhyNot, TX_ATTACH_FAILURE, MB_OK);
4105 end;
4106end;
4107
4108function TfrmNotes.SetNoteTreeLabel(AContext: TTIUContext): string;
4109var
4110 x: string;
4111
4112 function SetDateRangeText(AContext: TTIUContext): string;
4113 var
4114 x1: string;
4115 begin
4116 with AContext do
4117 if BeginDate <> '' then
4118 begin
4119 x1 := ' from ' + UpperCase(BeginDate);
4120// if EndDate <> '' then x1 := x1 + ' to ' + UpperCase(EndDate) <-- original line. //kt 7/19/2007
4121 if EndDate <> '' then x1 := x1 + DKLangConstW('fNotes_to') + UpperCase(EndDate) //kt added 7/19/2007
4122 else x1 := x1 + ' to TODAY';
4123 end;
4124 Result := x1;
4125 end;
4126
4127begin
4128 with AContext do
4129 begin
4130// if MaxDocs > 0 then x := 'Last ' + IntToStr(MaxDocs) + ' ' else x := 'All '; <-- original line. //kt 7/19/2007
4131 if MaxDocs > 0 then x := DKLangConstW('fNotes_Last') + IntToStr(MaxDocs) + ' ' else x := DKLangConstW('fNotes_All'); //kt added 7/19/2007
4132 case StrToIntDef(Status, 0) of
4133// NC_ALL : x := x + 'Signed Notes'; <-- original line. //kt 7/19/2007
4134 NC_ALL : x := x + DKLangConstW('fNotes_Signed_Notes'); //kt added 7/19/2007
4135 NC_UNSIGNED : begin
4136// x := x + 'Unsigned Notes for '; <-- original line. //kt 7/19/2007
4137 x := x + DKLangConstW('fNotes_Unsigned_Notes_for'); //kt added 7/19/2007
4138 if Author > 0 then x := x + ExternalName(Author, 200)
4139 else x := x + User.Name;
4140 x := x + SetDateRangeText(AContext);
4141 end;
4142 NC_UNCOSIGNED : begin
4143// x := x + 'Uncosigned Notes for '; <-- original line. //kt 7/19/2007
4144 x := x + DKLangConstW('fNotes_Uncosigned_Notes_for'); //kt added 7/19/2007
4145 if Author > 0 then x := x + ExternalName(Author, 200)
4146 else x := x + User.Name;
4147 x := x + SetDateRangeText(AContext);
4148 end;
4149// NC_BY_AUTHOR : x := x + 'Signed Notes for ' + ExternalName(Author, 200) + SetDateRangeText(AContext); <-- original line. //kt 7/19/2007
4150 NC_BY_AUTHOR : x := x + DKLangConstW('fNotes_Signed_Notes_for') + ExternalName(Author, 200) + SetDateRangeText(AContext); //kt added 7/19/2007
4151// NC_BY_DATE : x := x + 'Signed Notes ' + SetDateRangeText(AContext); <-- original line. //kt 7/19/2007
4152 NC_BY_DATE : x := x + DKLangConstW('fNotes_Signed_Notes') + SetDateRangeText(AContext); //kt added 7/19/2007
4153 else
4154// x := 'Custom List'; <-- original line. //kt 7/19/2007
4155 x := DKLangConstW('fNotes_Custom_List'); //kt added 7/19/2007
4156 end;
4157 end;
4158 Result := x;
4159end;
4160
4161procedure TfrmNotes.memNewNoteKeyDown(Sender: TObject; var Key: Word;
4162 Shift: TShiftState);
4163begin
4164 inherited;
4165 FNavigatingTab := (Key = VK_TAB) and ([ssShift,ssCtrl] * Shift <> []);
4166 if FNavigatingTab then
4167 Key := 0;
4168end;
4169
4170procedure TfrmNotes.UpdateNoteAuthor(DocInfo: string);
4171//const
4172//TX_INVALID_AUTHOR1 = 'The author returned by the template ('; <-- original line. //kt 7/19/2007
4173//TX_INVALID_AUTHOR2 = ') is not valid.' + #13#10 + 'The note''s author will remain as '; <-- original line. //kt 7/19/2007
4174//TC_INVALID_AUTHOR = 'Invalid Author'; <-- original line. //kt 7/19/2007
4175//TX_COSIGNER_REQD = ' requires a cosigner for this note.'; <-- original line. //kt 7/19/2007
4176//TC_COSIGNER_REQD = 'Cosigner Required'; <-- original line. //kt 7/19/2007
4177var
4178 NewAuth, NewAuthName, AuthNameCheck, x: string;
4179 ADummySender: TObject;
4180 TX_INVALID_AUTHOR1 : string; //kt
4181 TX_INVALID_AUTHOR2 : string; //kt
4182 TC_INVALID_AUTHOR : string; //kt
4183 TX_COSIGNER_REQD : string; //kt
4184 TC_COSIGNER_REQD : string; //kt
4185begin
4186 TX_INVALID_AUTHOR1 := DKLangConstW('fNotes_The_author_returned_by_the_template_x'); //kt added 7/19/2007
4187 TX_INVALID_AUTHOR2 := DKLangConstW('fNotes_x_is_not_validx') + #13#10 + DKLangConstW('fNotes_The_notexxs_author_will_remain_as'); //kt added 7/19/2007
4188 TC_INVALID_AUTHOR := DKLangConstW('fNotes_Invalid_Author'); //kt added 7/19/2007
4189 TX_COSIGNER_REQD := DKLangConstW('fNotes_requires_a_cosigner_for_this_notex'); //kt added 7/19/2007
4190 TC_COSIGNER_REQD := DKLangConstW('fNotes_Cosigner_Required'); //kt added 7/19/2007
4191 SetupVars; //kt added 7/19/2007 to replace constants with vars.
4192 if DocInfo = '' then Exit;
4193 NewAuth := GetXMLParamReturnValueTIU(DocInfo, 'AUTHOR_IEN');
4194 if NewAuth = '' then Exit;
4195 AuthNameCheck := ExternalName(StrToInt64Def(NewAuth, 0), 200);
4196 if AuthNameCheck = '' then
4197 begin
4198 NewAuthName := GetXMLParamReturnValueTIU(DocInfo, 'AUTHOR_NAME');
4199 InfoBox(TX_INVALID_AUTHOR1 + UpperCase(NewAuthName) + TX_INVALID_AUTHOR2 + UpperCase(FEditNote.AuthorName),
4200 TC_INVALID_AUTHOR, MB_OK and MB_ICONERROR);
4201 Exit;
4202 end;
4203 with FEditNote do if StrToInt64Def(NewAuth, 0) <> Author then
4204 begin
4205 Author := StrToInt64Def(NewAuth, 0);
4206 AuthorName := AuthNameCheck;
4207 x := lstNotes.Items[EditingIndex];
4208 SetPiece(x, U, 5, NewAuth + ';' + AuthNameCheck);
4209 lstNotes.Items[EditingIndex] := x;
4210 if AskCosignerForTitle(Title, Author, DateTime) then
4211 begin
4212 InfoBox(UpperCase(AuthNameCheck) + TX_COSIGNER_REQD, TC_COSIGNER_REQD, MB_OK);
4213 //Cosigner := 0; CosignerName := ''; // not sure about this yet
4214 ADummySender := TObject.Create;
4215 try
4216 cmdChangeClick(ADummySender);
4217 finally
4218 FreeAndNil(ADummySender);
4219 end;
4220 end
4221 else cmdChangeClick(Self);
4222 end;
4223end;
4224
4225procedure TfrmNotes.sptHorzCanResize(Sender: TObject; var NewSize: Integer;
4226 var Accept: Boolean);
4227begin
4228 inherited;
4229 if pnlWrite.Visible then
4230 if NewSize > frmNotes.ClientWidth - memNewNote.Constraints.MinWidth - sptHorz.Width then
4231 NewSize := frmNotes.ClientWidth - memNewNote.Constraints.MinWidth - sptHorz.Width;
4232end;
4233
4234(*
4235//kt 5-2-05 added following function (initially copied from fReports.pas)
4236procedure TfrmNotes.WebBrowser1DocumentComplete(Sender: TObject;
4237 const pDisp: IDispatch; var URL: OleVariant);
4238var
4239 WebDoc: IHtmlDocument2;
4240 v: variant;
4241begin
4242 {
4243 inherited;
4244 if uHTMLDoc = '' then Exit;
4245 if not(uReportType = 'H') then Exit; //this can be removed if & when browser replaces memtext control
4246 if not Assigned(WebBrowser1.Document) then Exit;
4247 WebDoc := WebBrowser1.Document as IHtmlDocument2;
4248 v := VarArrayCreate([0, 0], varVariant);
4249 v[0] := uHTMLDoc;
4250 WebDoc.write(PSafeArray(TVarData(v).VArray));
4251 WebDoc.close;
4252 //uHTMLDoc := '';
4253 }
4254end;
4255*)
4256
4257procedure TfrmNotes.popNoteMemoInsTemplateClick(Sender: TObject);
4258begin
4259 frmDrawers.mnuInsertTemplateClick(Sender);
4260end;
4261
4262procedure TfrmNotes.popNoteMemoPreviewClick(Sender: TObject);
4263begin
4264 frmDrawers.mnuPreviewTemplateClick(Sender);
4265end;
4266
4267procedure TfrmNotes.tvNotesAddition(Sender: TObject; Node: TTreeNode);
4268begin
4269 inherited;
4270 TAccessibleTreeNode.WrapControl(Node as TORTreeNode);
4271end;
4272
4273procedure TfrmNotes.tvNotesDeletion(Sender: TObject; Node: TTreeNode);
4274begin
4275 TAccessibleTreeNode.UnwrapControl(Node as TORTreeNode);
4276 inherited;
4277end;
4278
4279{Tab Order tricks. Need to change
4280 tvNotes
4281
4282 frmDrawers.pnlTemplateButton
4283 frmDrawers.pnlEncounterButton
4284 cmdNewNote
4285 cmdPCE
4286
4287 lvNotes
4288 memNote
4289
4290to
4291 tvNotes
4292
4293 lvNotes
4294 memNote
4295
4296 frmDrawers.pnlTemplateButton
4297 frmDrawers.pnlEncounterButton
4298 cmdNewNote
4299 cmdPCE
4300}
4301
4302procedure TfrmNotes.tvNotesExit(Sender: TObject);
4303begin
4304 if IncSecond(FMousing,1) < Now then
4305 begin
4306 if (Screen.ActiveControl = frmDrawers.pnlTemplatesButton) or
4307 (Screen.ActiveControl = frmDrawers.pnlEncounterButton) or
4308 (Screen.ActiveControl = cmdNewNote) or
4309 (Screen.ActiveControl = cmdPCE) then
4310 FindNextControl( cmdPCE, True, True, False).SetFocus;
4311 end;
4312 FMousing := 0;
4313end;
4314
4315procedure TfrmNotes.pnlReadExit(Sender: TObject);
4316begin
4317 inherited;
4318 if IncSecond(FMousing,1) < Now then
4319 begin
4320 if (Screen.ActiveControl = frmFrame.pnlPatient) then
4321 FindNextControl( tvNotes, True, True, False).SetFocus
4322 else
4323 if (Screen.ActiveControl = frmDrawers.pnlTemplatesButton) or
4324 (Screen.ActiveControl = frmDrawers.pnlEncounterButton) or
4325 (Screen.ActiveControl = cmdNewNote) or
4326 (Screen.ActiveControl = cmdPCE) then
4327 FindNextControl( frmDrawers.pnlTemplatesButton, False, True, False).SetFocus;
4328 end;
4329 FMousing := 0;
4330end;
4331
4332procedure TfrmNotes.cmdNewNoteExit(Sender: TObject);
4333begin
4334 inherited;
4335 if IncSecond(FMousing,1) < Now then
4336 begin
4337 if (Screen.ActiveControl = lvNotes) or
4338 (Screen.ActiveControl = memNote) then
4339 frmFrame.pnlPatient.SetFocus
4340 else
4341 if (Screen.ActiveControl = tvNotes) then
4342 FindNextControl( frmFrame.pnlPatient, False, True, False).SetFocus;
4343 end;
4344 FMousing := 0;
4345end;
4346
4347procedure TfrmNotes.frmFramePnlPatientExit(Sender: TObject);
4348begin
4349 FOldFramePnlPatientExit(Sender);
4350 if IncSecond(FMousing,1) < Now then
4351 begin
4352 if (Screen.ActiveControl = lvNotes) or
4353 (Screen.ActiveControl = memNote) then
4354 FindNextControl( lvNotes, False, True, False).SetFocus;
4355 end;
4356 FMousing := 0;
4357end;
4358
4359procedure TfrmNotes.FormHide(Sender: TObject);
4360begin
4361 inherited;
4362 frmFrame.pnlPatient.OnExit := FOldFramePnlPatientExit;
4363 frmDrawers.pnlTemplatesButton.OnExit := FOldDrawerPnlTemplatesButtonExit;
4364 frmDrawers.pnlEncounterButton.OnExit := FOldDrawerPnlEncounterButtonExit;
4365 frmDrawers.edtSearch.OnExit := FOldDrawerEdtSearchExit;
4366end;
4367
4368procedure TfrmNotes.FormShow(Sender: TObject);
4369begin
4370 inherited;
4371 FOldFramePnlPatientExit := frmFrame.pnlPatient.OnExit;
4372 frmFrame.pnlPatient.OnExit := frmFramePnlPatientExit;
4373 FOldDrawerPnlTemplatesButtonExit := frmDrawers.pnlTemplatesButton.OnExit;
4374 frmDrawers.pnlTemplatesButton.OnExit := frmDrawerPnlTemplatesButtonExit;
4375 FOldDrawerPnlEncounterButtonExit := frmDrawers.pnlEncounterButton.OnExit;
4376 frmDrawers.pnlEncounterButton.OnExit := frmDrawerPnlEncounterButtonExit;
4377 FOldDrawerEdtSearchExit := frmDrawers.edtSearch.OnExit;
4378 frmDrawers.edtSearch.OnExit := frmDrawerEdtSearchExit;
4379end;
4380
4381procedure TfrmNotes.frmDrawerEdtSearchExit(Sender: TObject);
4382begin
4383 FOldDrawerEdtSearchExit(Sender);
4384 cmdNewNoteExit(Sender);
4385end;
4386
4387procedure TfrmNotes.frmDrawerPnlTemplatesButtonExit(Sender: TObject);
4388begin
4389 FOldDrawerPnlTemplatesButtonExit(Sender);
4390 if Boolean(Hi(GetKeyState(VK_TAB))) and (memNewNote.CanFocus) and
4391 Boolean(Hi(GetKeyState(VK_SHIFT))) then
4392 memNewNote.SetFocus
4393 else
4394 cmdNewNoteExit(Sender);
4395end;
4396
4397procedure TfrmNotes.frmDrawerPnlEncounterButtonExit(Sender: TObject);
4398begin
4399 FOldDrawerPnlEncounterButtonExit(Sender);
4400 cmdNewNoteExit(Sender);
4401end;
4402
4403procedure TfrmNotes.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
4404 Y: Integer);
4405begin
4406 inherited;
4407 FMousing := Now;
4408end;
4409
4410procedure TfrmNotes.SetHTMLEditMode(HTMLEditMode : boolean; Quiet : boolean);
4411//kt added function 7/09
4412var Mode : TViewModeSet; //kt
4413const HTML_MODE_S : Array[false..true] of string[16] = ('PLAIN','FORMATTED');
4414begin
4415 if FEditNote.Lines = nil then FEditNote.Lines := TStringList.Create; //kt
4416 if HTMLEditMode then begin
4417 if (FViewMode = [vmHTML,vmEdit]) then exit; //no change needed.
4418 FEditNote.Lines.Assign(memNewNote.Lines);
4419 end else begin
4420 if (FViewMode = [vmText,vmEdit]) then exit; //no change needed.
4421 if HtmlEditor.GetTextLen > 0 then begin
4422 if MessageDlg('Do you want to convert this note to PLAIN TEXT?'+#10#13+
4423 '(May cause loss of formatting information.)',mtWarning, mbOKCancel,0) <> mrOK then begin
4424 exit;
4425 end;
4426 end;
4427 FEditNote.Lines.Text := HTMLEditor.Text;
4428 end;
4429 Mode := [vmEdit] + [vmHTML_MODE[HTMLEditMode]]; //kt
4430 SetDisplayToHTMLvsText(Mode,FEditNote.Lines);
4431 if not Quiet then begin
4432 if MessageDlg('Start new notes in '+HTML_MODE_S[HTMLEditMode]+' TEXT by default?',mtConfirmation,[mbYES,mbNO],0) = mrYES then begin
4433 fOptionsNotes.SetDefaultEditHTMLMode(HTMLEditMode);
4434 end;
4435 end;
4436end;
4437
4438procedure TfrmNotes.ToggleHTMLEditMode;
4439//kt added function 6/09
4440var NewHTMLMode: boolean;
4441begin
4442 if not (vmEdit in FViewMode) then exit; //quit if not in edit mode
4443 NewHTMLMode := not (vmHTML in FViewMode);
4444 SetHTMLEditMode(NewHTMLMode);
4445end;
4446
4447
4448procedure TfrmNotes.SetDisplayToHTMLvsText(Mode : TViewModeSet;
4449 Lines : TStrings;
4450 ActivateOnly : boolean {default=False});
4451//kt added function 7/09
4452//If ActivateOnly=True, then the visibility is set, but the control is not filled with text.
4453
4454type
4455 TPanelVisibilityMode = (pvmReadMode, pvmWriteMode); //kt
4456
4457 procedure SetPanelVisibility(Mode: TPanelVisibilityMode; HTMLMode : boolean);
4458
4459 procedure SetpnlReadVisibility(Visible : boolean; HTMLMode : boolean);
4460 begin
4461 pnlRead.Visible := Visible;
4462 if Visible then begin
4463 memNote.Visible := not HTMLMode;
4464 memNote.TabStop := not HTMLMode;
4465 pnlHTMLViewer.Visible := HTMLMode;
4466 HTMLViewer.Visible := HTMLMode;
4467 if HTMLMode then begin
4468 HtmlViewer.BringToFront;
4469 end else begin
4470 MemNote.BringToFront;
4471 end;
4472 end else begin
4473 memNote.Visible := false;
4474 memNote.TabStop := false;
4475 pnlHTMLViewer.Visible := false;
4476 HTMLViewer.Visible := false;
4477 end;
4478 end; {SetDisplayToHTMLvsText.SetPanelVisibility.SetpnlReadVisibility}
4479
4480 procedure SetpnlWriteVisibility(Visible : boolean; HTMLMode : boolean);
4481 begin
4482 pnlWrite.Visible := Visible;
4483 if Visible then begin
4484 pnlHTMLWrite.Visible := HTMLMode;
4485 pnlHTMLEdit.Visible := HTMLMode;
4486 HTMLEditor.Visible := HTMLMode;
4487 pnlTextWrite.Visible := not HTMLMode;
4488 MemNewNote.Visible := not HTMLMode;
4489 if HTMLMode then begin
4490 HTMLEditor.BringToFront;
4491 end else begin
4492 MemNewNote.BringToFront;
4493 end;
4494 end else begin
4495 pnlHTMLWrite.Visible := false;
4496 pnlHTMLEdit.Visible := false;
4497 HTMLEditor.Visible := false;
4498 pnlTextWrite.Visible := false;
4499 memNewNote.Visible := false;
4500 end;
4501 end; {SetDisplayToHTMLvsText.SetPanelVisibility.SetpnlWriteVisibility}
4502
4503 begin {SetDisplayToHTMLvsText.SetPanelVisibility}
4504 SetpnlReadVisibility ((Mode=pvmReadMode), HTMLMode);
4505 SetpnlWriteVisibility((Mode=pvmWriteMode),HTMLMode);
4506 Application.ProcessMessages;
4507 end; {SetDisplayToHTMLvsText.SetPanelVisibility}
4508
4509 procedure SetHTMLorTextEditor(HTMLEditMode : boolean;
4510 Lines : TStrings;
4511 ActivateOnly : boolean {default=False});
4512 procedure ActivateHtmlEditor(Lines : TStrings);
4513 var HTMLText : string;
4514 begin
4515 HtmlEditor.Editable := true;
4516 if ActivateOnly=false then begin
4517 if Lines <> nil then begin
4518 if rHTMLTools.IsHTML(Lines) then begin
4519 HTMLText := Lines.Text;
4520 end else begin
4521 HTMLText := Text2HTML(Lines);
4522 if HTMLText='' then HTMLText := ' ';
4523 end;
4524 end else HTMLText := ' ';
4525 HtmlEditor.HTMLText := HTMLText;
4526 HTMLEditor.KeyStruck := false;
4527 end;
4528 end; {SetDisplayToHTMLvsText.SetHTMLorTextEditor.ActivateHtmlEditor}
4529
4530 procedure ActiveMemoEditor(Lines : TStrings);
4531 begin
4532 if ActivateOnly=false then begin
4533 memNewNote.Lines.Assign(Lines); //kt new
4534 end;
4535 //kt HtmlEditor.Active := false; //stop intercepting OnMessages
4536 HtmlEditor.Clear;
4537 end; {SetDisplayToHTMLvsText.SetHTMLorTextEditor.ActiveMemoEditor}
4538
4539 begin {SetDisplayToHTMLvsText.SetHTMLorTextEditor}
4540 FHTMLEditMode := emHTML_MODE[HTMLEditMode];
4541 FViewMode := [vmEdit] + [vmHTML_MODE[HTMLEditMode]];
4542 SetPanelVisibility(pvmWriteMode,HTMLEditMode);
4543 pnlRight.Repaint; //kt TEMP
4544 if HTMLEditMode then begin
4545 ActivateHtmlEditor(Lines);
4546 end else begin
4547 ActiveMemoEditor(Lines);
4548 end;
4549 pnlRight.Repaint; //kt TEMP
4550 end; {SetDisplayToHTMLvsText.SetHTMLorTextEditor}
4551
4552 procedure SetHTMLorTextViewer(HTMLViewMode : boolean;
4553 Lines : TStrings;
4554 ActivateOnly : boolean); //kt
4555 //Set forms such that either HTML Viewer is visible, or standard edit window.
4556 procedure ActivateHtmlViewer(Lines : TStrings);
4557 begin
4558 with frmNotes do begin
4559
4560 pnlHtmlViewer.Visible := true;
4561 //memNote.Visible := false;
4562 //memNote.TabStop := false;
4563 HtmlViewer.BringToFront;
4564 if ActivateOnly=False then begin
4565 FixHTML(Lines);
4566 HtmlViewer.HTMLText := Lines.Text;
4567 end;
4568 HtmlViewer.Editable := false;
4569 HtmlViewer.BackgroundColor := clCream;
4570 HtmlViewer.TabStop := true;
4571 RedrawActivate(HtmlViewer.Handle);
4572 end;
4573 end; {SetDisplayToHTMLvsText.SetHTMLorTextViewer.ActivateHtmlViewer}
4574
4575 procedure ActivateMemoViewer(Lines : TStrings);
4576 begin
4577 with frmNotes do begin
4578 pnlHtmlViewer.Visible := false;
4579 HtmlViewer.Clear;
4580 //HtmlEditor.Clear; //don't this here. Only clear in ClearEditControls...
4581 HtmlViewer.TabStop := false;
4582 if ActivateOnly=False then memNote.Lines.Assign(Lines); //new
4583 memNote.Visible := true;
4584 memNote.TabStop := true;
4585 memNote.BringToFront;
4586 RedrawActivate(memNote.Handle);
4587 end;
4588 end; {SetDisplayToHTMLvsText.SetHTMLorTextViewer.ActivateMemoViewer}
4589
4590 begin {SetHTMLorTextViewer}
4591 FViewMode := [vmView] + [vmHTML_MODE[HTMLViewMode]];
4592 SetPanelVisibility(pvmReadMode,HTMLviewMode);
4593 //pnlRight.Repaint; //kt TEMP
4594 if HTMLViewMode then begin
4595 ActivateHtmlViewer(Lines);
4596 end else begin
4597 ActivateMemoViewer(Lines);
4598 HtmlViewer.Clear;
4599 end;
4600 pnlRight.Repaint; //kt TEMP
4601 end; {SetDisplayToHTMLvsText.SetHTMLorTextViewer}
4602
4603begin {SetDisplayToHTMLvsText}
4604 if vmEdit in Mode then begin
4605 SetHTMLorTextEditor((vmHTML in Mode),Lines,ActivateOnly);
4606 end else begin
4607 SetHTMLorTextViewer((vmHTML in Mode),Lines,ActivateOnly);
4608 end;
4609end; {SetDisplayToHTMLvsText}
4610
4611procedure TfrmNotes.btnBoldClick(Sender: TObject);
4612//kt added function
4613begin
4614 inherited;
4615 HtmlEditor.ToggleBold;
4616end;
4617
4618procedure TfrmNotes.btnItalicClick(Sender: TObject);
4619//kt added function
4620begin
4621 inherited;
4622 HtmlEditor.ToggleItalic;
4623end;
4624
4625procedure TfrmNotes.btnLessIndentClick(Sender: TObject);
4626//kt added function
4627begin
4628 inherited;
4629 HtmlEditor.Outdent;
4630end;
4631
4632procedure TfrmNotes.btnMoreIndentClick(Sender: TObject);
4633//kt added function
4634begin
4635 inherited;
4636 HtmlEditor.Indent;
4637end;
4638
4639procedure TfrmNotes.btnRightAlignClick(Sender: TObject);
4640//kt added function
4641begin
4642 inherited;
4643 HtmlEditor.AlignRight;
4644end;
4645
4646procedure TfrmNotes.btnImageClick(Sender: TObject);
4647//kt added function
4648begin
4649 if frmImages.ImagesCount > 0 then begin
4650 popupAddImage.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
4651 //Will allow user to :
4652 // Cancel, or trigger mnuAddNewImageClick or mnuSelectExistingImageClick
4653 end else begin
4654 mnuAddNewImageClick(self);
4655 end;
4656end;
4657
4658procedure TfrmNotes.mnuAddNewImageClick(Sender: TObject);
4659//kt added function
4660var
4661 i, AddResult: integer;
4662 oneImage: string;
4663 ImageFName : string;
4664begin
4665 inherited;
4666 UploadForm.AllowNonImages := false; //only allow selection of IMAGES
4667 AddResult := UploadForm.ShowModal;
4668 UploadForm.AllowNonImages := true; // restore to allow any file
4669 if IsAbortResult(AddResult) then exit;
4670 for i := 0 to UploadForm.UploadedImages.Count-1 do begin
4671 ImageFName := CPRSDir+'\Cache\' + UploadForm.UploadedImages.Strings[i];
4672 oneImage := '<img src="'+ ImageFName + '" ' + ALT_IMG_TAG_CONVERT + ' >';
4673 HTMLEditor.InsertHTMLAtCaret(oneImage+#13#10);
4674 end;
4675end;
4676
4677procedure TfrmNotes.mnuSelectExistingImageClick(Sender: TObject);
4678//kt added function
4679var
4680 oneImage: string;
4681 ImageFName : string;
4682begin
4683 inherited;
4684 frmImagePickExisting := TfrmImagePickExisting.Create(Self);
4685 if frmImagePickExisting.ShowModal = mrOK then begin
4686 ImageFName := frmImagePickExisting.SelectedImageFName;
4687 if ImageFName <> '' then begin
4688 if frmImages.ThumbnailIndexForFName(ImageFName) = IMAGE_INDEX_IMAGE then begin
4689 oneImage := '<img src="'+ ImageFName + '" ' + ALT_IMG_TAG_CONVERT + ' >';
4690 end else begin
4691 oneImage := '<embed src="'+ ImageFName + '" ' + ALT_IMG_TAG_CONVERT + ' >';
4692 end;
4693 HTMLEditor.InsertHTMLAtCaret(oneImage+#13#10);
4694 end;
4695 end;
4696 FreeAndNil(frmImagePickExisting);
4697end;
4698
4699
4700procedure TfrmNotes.btnCenterAlignClick(Sender: TObject);
4701//kt added function
4702begin
4703 inherited;
4704 HtmlEditor.AlignCenter;
4705end;
4706
4707procedure TfrmNotes.btnLeftAlignClick(Sender: TObject);
4708//kt added function
4709begin
4710 inherited;
4711 HtmlEditor.AlignLeft;
4712end;
4713
4714procedure TfrmNotes.btnNumbersClick(Sender: TObject);
4715//kt added function
4716begin
4717 inherited;
4718 HtmlEditor.ToggleNumbering;
4719end;
4720
4721procedure TfrmNotes.btnBulletsClick(Sender: TObject);
4722//kt added function
4723begin
4724 inherited;
4725 HtmlEditor.ToggleBullet;
4726end;
4727
4728procedure TfrmNotes.btnUnderlineClick(Sender: TObject);
4729//kt added function
4730begin
4731 inherited;
4732 HtmlEditor.ToggleUnderline;
4733end;
4734
4735procedure TfrmNotes.btnTextColorClick(Sender: TObject);
4736//kt added function
4737begin
4738 inherited;
4739 HtmlEditor.TextForeColorDialog;
4740end;
4741
4742procedure TfrmNotes.btnBackColorClick(Sender: TObject);
4743//kt added function
4744begin
4745 inherited;
4746 HtmlEditor.TextBackColorDialog;
4747end;
4748
4749procedure TfrmNotes.btnFontsClick(Sender: TObject);
4750//kt added function
4751begin
4752 inherited;
4753 HtmlEditor.FontDialog;
4754end;
4755
4756procedure TfrmNotes.cbFontSizeChange(Sender: TObject);
4757//kt added function
4758const
4759 FontSizes : array [0..6] of byte = (8,10,12,14,18,24,36);
4760begin
4761 inherited;
4762 //HtmlEditor.FontSize := StrToInt(cbFontSize.Text);
4763 HtmlEditor.FontSize := FontSizes[cbFontSize.ItemIndex];
4764end;
4765
4766procedure TfrmNotes.cbFontNamesChange(Sender: TObject);
4767//kt added function
4768var i : integer;
4769 FontName : string;
4770const
4771 TEXT_BAR = '---------------';
4772begin
4773 inherited;
4774 if cbFontNames.Text[1]='<' then exit;
4775 FontName := cbFontNames.Text;
4776 HtmlEditor.FontName := FontName;
4777 i := cbFontNames.Items.IndexOf(TEXT_BAR);
4778 if i < 1 then cbFontNames.Items.Insert(0,TEXT_BAR);
4779 if i > 5 then cbFontNames.Items.Delete(5);
4780 if cbFontNames.Items.IndexOf(FontName)> i then begin
4781 cbFontNames.Items.Insert(0,FontName);
4782 end;
4783end;
4784
4785(*
4786//kt made this entire temp function
4787procedure TfrmNotes.WebBrowser1CommandStateChange(Sender: TObject;
4788 Command: Integer; Enable: WordBool);
4789
4790 var
4791 s,ts: String;
4792 Buff : array[0..255] of char;
4793 pBuff : pChar;
4794
4795begin
4796 inherited;
4797 pBuff := @Buff;
4798 case Command of
4799// CSC_UPDATECOMMANDS: ts := '<Some property>'; <-- original line. //kt 7/19/2007
4800// CSC_UPDATECOMMANDS: ts := DKLangConstW('fNotes_xSome_propertyx'); //kt added 7/19/2007
4801 -1: ts := DKLangConstW('fNotes_xSome_propertyx'); //kt changed 9/7/07
4802 CSC_NAVIGATEFORWARD: ts := ''; //'<Navigate Forward>';
4803 CSC_NAVIGATEBACK: ts := ''; //'<Nagivate Backwards>';
4804 else ts := '??';
4805 end; {case}
4806 if ts<>'' then begin
4807// s := 'Browser Status change: ' + ts + '; Enabled= ' + BoolToStr(Enable); <-- original line. //kt 7/19/2007
4808 s := DKLangConstW('fNotes_Browser_Status_changex')+' ' + ts + DKLangConstW('fNotes_x_Enabledx') + BoolToStr(Enable); //kt added 7/19/2007
4809 //Application.MessageBox(StrPCopy(pBuff,s),'Note');
4810 end;
4811end;
4812*)
4813
4814procedure TfrmNotes.memNewNoteKeyPress(Sender: TObject; var Key: Char);
4815begin
4816 inherited;
4817 if FNavigatingTab then
4818 Key := #0; //Disable shift-tab processinend;
4819end;
4820
4821procedure TfrmNotes.memNewNoteKeyUp(Sender: TObject; var Key: Word;
4822 Shift: TShiftState);
4823begin
4824 inherited;
4825 if FNavigatingTab then
4826 begin
4827 if ssShift in Shift then
4828 FindNextControl(Sender as TWinControl, False, True, False).SetFocus //previous control
4829 else if ssCtrl in Shift then
4830 if frmDrawers.pnlTemplatesButton.CanFocus then
4831 frmDrawers.pnlTemplatesButton.SetFocus
4832 else
4833 FindNextControl(Sender as TWinControl, True, True, False).SetFocus; //next control
4834 FNavigatingTab := False;
4835 end;
4836 if (key = VK_ESCAPE) then begin
4837 FindNextControl(Sender as TWinControl, False, True, False).SetFocus; //previous control
4838 key := 0;
4839 end;
4840end;
4841
4842procedure TfrmNotes.memPCEShowExit(Sender: TObject);
4843begin
4844 inherited;
4845 //Fix the Tab Order Make Drawers Buttons Accessible
4846 if Boolean(Hi(GetKeyState(VK_TAB))) then
4847 if Boolean(Hi(GetKeyState(VK_SHIFT))) then
4848 cmdPCE.SetFocus
4849 else
4850 frmFrame.pnlPatient.SetFocus;
4851end;
4852
4853procedure TfrmNotes.cmdChangeExit(Sender: TObject);
4854begin
4855 inherited;
4856 //Fix the Tab Order Make Drawers Buttons Accessible
4857 if Boolean(Hi(GetKeyState(VK_TAB))) and
4858 Boolean(Hi(GetKeyState(VK_SHIFT))) then
4859 tvNotes.SetFocus;
4860end;
4861
4862procedure TfrmNotes.cmdPCEExit(Sender: TObject);
4863begin
4864 inherited;
4865 //Fix the Tab Order Make Drawers Buttons Accessible
4866 if Boolean(Hi(GetKeyState(VK_TAB))) and
4867 Not Boolean(Hi(GetKeyState(VK_SHIFT))) then
4868 if memPCEShow.Visible then //CQ7120
4869 memPCEShow.SetFocus; //CQ7120
4870end;
4871
4872procedure TfrmNotes.ViewInfo(Sender: TObject);
4873begin
4874 inherited;
4875 frmFrame.ViewInfo(Sender);
4876end;
4877
4878procedure TfrmNotes.mnuViewInformationClick(Sender: TObject);
4879begin
4880 inherited;
4881 mnuViewDemo.Enabled := frmFrame.pnlPatient.Enabled;
4882 mnuViewVisits.Enabled := frmFrame.pnlVisit.Enabled;
4883 mnuViewPrimaryCare.Enabled := frmFrame.pnlPrimaryCare.Enabled;
4884 mnuViewMyHealtheVet.Enabled := not (Copy(frmFrame.laMHV.Hint, 1, 2) = 'No');
4885 mnuInsurance.Enabled := not (Copy(frmFrame.laVAA2.Hint, 1, 2) = 'No');
4886 mnuViewFlags.Enabled := frmFrame.lblFlag.Enabled;
4887 mnuViewRemoteData.Enabled := frmFrame.lblCirn.Enabled;
4888 mnuViewReminders.Enabled := frmFrame.pnlReminders.Enabled;
4889 mnuViewPostings.Enabled := frmFrame.pnlPostings.Enabled;
4890end;
4891
4892
4893
4894initialization
4895 uPCEEdit := TPCEData.Create;
4896 uPCEShow := TPCEData.Create;
4897
4898finalization
4899 if (uPCEEdit <> nil) then uPCEEdit.Free; //CQ7012 Added test for nil
4900 if (uPCEShow <> nil) then uPCEShow.Free; //CQ7012 Added test for nil
4901
4902end.
4903
Note: See TracBrowser for help on using the repository browser.