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

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

Corrected HTML line feed

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