//kt -- Modified with SourceScanner on 8/8/2007 unit fOrders; {$OPTIMIZATION OFF} // REMOVE AFTER UNIT IS DEBUGGED interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, fHSplit, StdCtrls, ExtCtrls, Menus, ORCtrls, ComCtrls, ORFn, rOrders, fODBase, uConst, uCore, uOrders,UBACore, UBAGlobals, DKLang; type TfrmOrders = class(TfrmHSplit) mnuOrders: TMainMenu; mnuAct: TMenuItem; mnuActChange: TMenuItem; mnuActDC: TMenuItem; mnuActHold: TMenuItem; mnuActUnhold: TMenuItem; mnuActRenew: TMenuItem; Z4: TMenuItem; mnuActFlag: TMenuItem; mnuActUnflag: TMenuItem; Z5: TMenuItem; mnuActVerify: TMenuItem; mnuActRelease: TMenuItem; mnuActSign: TMenuItem; mnuView: TMenuItem; mnuViewChart: TMenuItem; mnuChartReports: TMenuItem; mnuChartLabs: TMenuItem; mnuChartDCSumm: TMenuItem; mnuChartCslts: TMenuItem; mnuChartNotes: TMenuItem; mnuChartOrders: TMenuItem; mnuChartMeds: TMenuItem; mnuChartProbs: TMenuItem; mnuChartCover: TMenuItem; mnuViewActive: TMenuItem; mnuViewExpiring: TMenuItem; Z2: TMenuItem; mnuViewCustom: TMenuItem; Z3: TMenuItem; mnuViewDetail: TMenuItem; Z1: TMenuItem; OROffsetLabel1: TOROffsetLabel; hdrOrders: THeaderControl; lstOrders: TCaptionListBox; lblOrders: TOROffsetLabel; lstSheets: TORListBox; lstWrite: TORListBox; mnuViewUnsigned: TMenuItem; popOrder: TPopupMenu; popOrderChange: TMenuItem; popOrderDC: TMenuItem; popOrderRenew: TMenuItem; popOrderDetail: TMenuItem; N1: TMenuItem; mnuActCopy: TMenuItem; mnuActAlert: TMenuItem; mnuViewResult: TMenuItem; mnuActOnChart: TMenuItem; mnuActComplete: TMenuItem; sepOrderVerify: TMenuItem; popOrderVerify: TMenuItem; popOrderResult: TMenuItem; imgHide: TImage; mnuOpt: TMenuItem; mnuOptSaveQuick: TMenuItem; mnuOptEditCommon: TMenuItem; popOrderSign: TMenuItem; popOrderCopy: TMenuItem; mnuActChartRev: TMenuItem; popOrderChartRev: TMenuItem; Z6: TMenuItem; mnuViewDfltSave: TMenuItem; mnuViewDfltShow: TMenuItem; mnuViewCurrent: TMenuItem; mnuChartSurgery: TMenuItem; mnuViewResultsHistory: TMenuItem; popResultsHistory: TMenuItem; btnDelayedOrder: TORAlignButton; mnuActChgEvnt: TMenuItem; mnuChgEvnt: TMenuItem; mnuActRel: TMenuItem; popOrderRel: TMenuItem; EventRealeasedOrder1: TMenuItem; lblWrite: TLabel; sptVert: TSplitter; mnuViewExpired: TMenuItem; mnuViewInformation: TMenuItem; mnuViewDemo: TMenuItem; mnuViewVisits: TMenuItem; mnuViewPrimaryCare: TMenuItem; mnuViewMyHealtheVet: TMenuItem; mnuInsurance: TMenuItem; mnuViewFlags: TMenuItem; mnuViewReminders: TMenuItem; mnuViewRemoteData: TMenuItem; mnuViewPostings: TMenuItem; mnuOptimizeFields: TMenuItem; procedure mnuChartTabClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure lstOrdersDrawItem(Control: TWinControl; Index: Integer; TheRect: TRect; State: TOwnerDrawState); procedure lstOrdersMeasureItem(Control: TWinControl; Index: Integer; var AHeight: Integer); procedure mnuViewActiveClick(Sender: TObject); procedure hdrOrdersSectionResize(HeaderControl: THeaderControl; Section: THeaderSection); procedure mnuViewCustomClick(Sender: TObject); procedure mnuViewExpiringClick(Sender: TObject); procedure mnuViewExpiredClick(Sender: TObject); procedure mnuViewUnsignedClick(Sender: TObject); procedure mnuViewDetailClick(Sender: TObject); procedure lstOrdersDblClick(Sender: TObject); procedure lstWriteClick(Sender: TObject); procedure mnuActHoldClick(Sender: TObject); procedure mnuActUnholdClick(Sender: TObject); procedure mnuActDCClick(Sender: TObject); procedure mnuActAlertClick(Sender: TObject); procedure mnuActFlagClick(Sender: TObject); procedure mnuActUnflagClick(Sender: TObject); procedure mnuActSignClick(Sender: TObject); procedure mnuActReleaseClick(Sender: TObject); procedure mnuActOnChartClick(Sender: TObject); procedure mnuActCompleteClick(Sender: TObject); procedure mnuActVerifyClick(Sender: TObject); procedure mnuViewResultClick(Sender: TObject); procedure mnuActCommentClick(Sender: TObject); procedure mnuOptSaveQuickClick(Sender: TObject); procedure mnuOptEditCommonClick(Sender: TObject); procedure mnuActCopyClick(Sender: TObject); procedure mnuActChangeClick(Sender: TObject); procedure mnuActRenewClick(Sender: TObject); procedure pnlRightResize(Sender: TObject); procedure lstSheetsClick(Sender: TObject); procedure mnuActChartRevClick(Sender: TObject); procedure mnuViewDfltShowClick(Sender: TObject); procedure mnuViewDfltSaveClick(Sender: TObject); procedure mnuViewCurrentClick(Sender: TObject); procedure mnuViewResultsHistoryClick(Sender: TObject); procedure btnDelayedOrderClick(Sender: TObject); procedure mnuActChgEvntClick(Sender: TObject); procedure mnuActRelClick(Sender: TObject); procedure EventRealeasedOrder1Click(Sender: TObject); procedure lblWriteMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure popOrderPopup(Sender: TObject); procedure mnuViewClick(Sender: TObject); procedure mnuActClick(Sender: TObject); procedure mnuOptClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure hdrOrdersMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure hdrOrdersMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ViewInfo(Sender: TObject); procedure mnuViewInformationClick(Sender: TObject); procedure mnuOptimizeFieldsClick(Sender: TObject); procedure hdrOrdersSectionClick(HeaderControl: THeaderControl; Section: THeaderSection); procedure sptHorzMoved(Sender: TObject); private { Private declarations } FDfltSort: Integer; FCurrentView: TOrderView; FCompress: boolean; FFromDCRelease: boolean; FSendDelayOrders: boolean; FNewEvent: boolean; FAskForCancel: boolean; FNeedShowModal: boolean; FOrderViewForActiveOrders: TOrderView; FEventForCopyActiveOrders: TOrderDelayEvent; FEventDefaultOrder : string; FIsDefaultDlg: boolean; FHighlightFromMedsTab: integer; FCalledFromWDO: boolean; //called from Write Delay Orders button FEvtOrderList: TStringlist; FEvtColWidth: integer; FRightAfterWriteOrderBox : boolean; FDontCheck: boolean; FParentComplexOrderID: string; function CanChangeOrderView: Boolean; function GetEvtIFN(AnIndex: integer): string; function DisplayDefaultDlgList(ADest: TORListBox; ADlgList: TStringList): boolean; procedure AddToListBox(AnOrderList: TList); procedure ExpandEventSection; procedure CompressEventSection; procedure ClearOrderSheets; procedure InitOrderSheets; procedure DfltViewForEvtDelay; procedure MakeSelectedList(AList: TList); function NoneSelected(const ErrMsg: string): Boolean; procedure ProcessNotifications; procedure PositionTopOrder(DGroup: Integer); procedure RedrawOrderList; procedure RefreshOrderList(FromServer: Boolean; APtEvtID: string = ''); procedure RetrieveVisibleOrders(AnIndex: Integer); procedure RemoveSelectedFromChanges(AList: TList); procedure SetOrderView(AFilter, ADGroup: Integer; const AViewName: string; NotifSort: Boolean); //procedure SetEvtIFN(var AnEvtIFN: integer); procedure UseDefaultSort; procedure SynchListToOrders; // procedure ActivateDeactiveRenew; procedure ValidateSelected(const AnAction, WarningMsg, WarningTitle: string); procedure ViewAlertedOrders(OrderIEN: string; Status: integer; DispGrp: string; BySvc, InvDate: boolean; Title: string); procedure UMDestroy(var Message: TMessage); message UM_DESTROY; function GetStartStopText(StartTime: string; StopTime: string): string; function GetOrderText(AnOrder: TOrder; Index: integer; Column: integer): string; function MeasureColumnHeight(AnOrder: TOrder; Index: Integer; Column: integer):integer; function GetPlainText(AnOrder: TOrder; index: integer):string; function PatientStatusChanged: boolean; procedure UMEventOccur(var Message: TMessage); message UM_EVENTOCCUR; function CheckOrderStatus: boolean; public procedure setSectionWidths; //CQ6170 function getTotalSectionsWidth : integer; //CQ6170 function AllowContextChange(var WhyNot: string): Boolean; override; function PlaceOrderForDefaultDialog(ADlgInfo: string; IsDefaultDialog: boolean; AEvent: TOrderDelayEvent): boolean; function PtEvtCompleted(APtEvtID: integer; APtEvtName: string; FromMeds: boolean = False): boolean; procedure RefreshToFirstItem; procedure ChangesUpdate(APtEvtID: string); procedure GroupChangesUpdate(GrpName: string); procedure ClearPtData; override; procedure DisplayPage; override; procedure InitOrderSheetsForEvtDelay; procedure ResetOrderPage(AnEvent: TOrderDelayEvent; ADlgLst: TStringList; IsRealeaseNow: boolean); procedure NotifyOrder(OrderAction: Integer; AnOrder: TOrder); override; procedure SaveSignOrders; procedure ClickLstSheet; procedure RequestPrint; override; procedure InitOrderSheets2(AnItem: string = ''); procedure SetFontSize( FontSize: integer); override; property IsDefaultDlg: boolean read FIsDefaultDlg write FIsDefaultDlg; property SendDelayOrders: Boolean read FSendDelayOrders write FSendDelayOrders; property NewEvent: Boolean read FNewEvent write FNewEvent; property NeedShowModal: Boolean read FNeedShowModal write FNeedShowModal; property AskForCancel: Boolean read FAskForCancel write FAskForCancel; property EventDefaultOrder: string read FEventDefaultOrder write FEventDefaultOrder; property TheCurrentView: TOrderView read FCurrentView; property HighlightFromMedsTab: integer read FHighlightFromMedsTab write FHighlightFromMedsTab; property CalledFromWDO: boolean read FCalledFromWDO; property EvtOrderList: TStringlist read FEvtOrderList write FEvtOrderList; property FromDCRelease: boolean read FFromDCRelease write FFromDCRelease; property EvtColWidth: integer read FEvtColWidth write FEvtColWidth; property DontCheck: boolean read FDontCheck write FDontCheck; property ParentComplexOrderID: string read FParentComplexOrderID write FParentComplexOrderID; end; type arOrigSecWidths = array[0..9] of integer; //CQ6170 var frmOrders: TfrmOrders; origWidths: arOrigSecWidths; //CQ6170 implementation uses fFrame, fEncnt, fOrderVw, fRptBox, fLkUpLocation, fOrdersDC, fOrdersCV, fOrdersHold, fOrdersUnhold, fOrdersAlert, fOrderFlag, fOrderUnflag, fOrdersSign, fOrdersRelease, fOrdersOnChart, fOrdersEvntRelease, fOrdersComplete, fOrdersVerify, fOrderComment, fOrderSaveQuick, fOrdersRenew,fODReleaseEvent, fOMNavA, rCore, fOCSession, fOrdersPrint, fOrdersTS, fEffectDate, fODActive, fODChild, fOrdersCopy, fOMVerify, fODAuto, rODBase, uODBase, rMeds,fODValidateAction, fMeds, uInit, fBALocalDiagnoses, fODConsult, fClinicWardMeds, fActivateDeactivate; {$R *.DFM} const FROM_SELF = False; FROM_SERVER = True; OVS_CATINV = 0; OVS_CATFWD = 1; OVS_INVERSE = 2; OVS_FORWARD = 3; STS_ACTIVE = 2; STS_DISCONTINUED = 3; STS_COMPLETE = 4; STS_EXPIRING = 5; STS_RECENT = 6; STS_UNVERIFIED = 8; STS_UNVER_NURSE = 9; STS_UNSIGNED = 11; STS_FLAGGED = 12; STS_HELD = 18; STS_NEW = 19; STS_CURRENT = 23; STS_EXPIRED = 27; FM_DATE_ONLY = 7; CT_ORDERS = 4; // chart tab - doctor's orders //TX_NO_HOLD = CRLF + CRLF + '- cannot be placed on hold.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_HOLD = 'Unable to Hold'; <-- original line. //kt 8/8/2007 //TX_NO_UNHOLD = CRLF + CRLF + '- cannot be released from hold.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_UNHOLD = 'Unable to Release from Hold'; <-- original line. //kt 8/8/2007 //TX_NO_DC = CRLF + CRLF + '- cannot be discontinued.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_DC = 'Unable to Discontinue'; <-- original line. //kt 8/8/2007 //TX_NO_CV = CRLF + 'The release event cannot be changed.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_CV = 'Unable to Change Release Event'; <-- original line. //kt 8/8/2007 //TX_NO_ALERT = CRLF + CRLF + '- cannot be set to send an alert.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_ALERT = 'Unable to Set Alert'; <-- original line. //kt 8/8/2007 //TX_NO_FLAG = CRLF + CRLF + '- cannot be flagged.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_FLAG = 'Unable to Flag Order'; <-- original line. //kt 8/8/2007 //TX_NO_UNFLAG = CRLF + CRLF + '- cannot be unflagged.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_UNFLAG = 'Unable to Unflag Order'; <-- original line. //kt 8/8/2007 //TX_NO_SIGN = CRLF + CRLF + '- cannot be signed.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_SIGN = 'Unable to Sign Order'; <-- original line. //kt 8/8/2007 //TX_NO_REL = CRLF + 'Cannot be released to the service(s).' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_REL = 'Unable to be Released to Service'; <-- original line. //kt 8/8/2007 //TX_NO_CHART = CRLF + CRLF + '- cannot be marked "Signed on Chart".' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_CHART = 'Unable to Release Orders'; <-- original line. //kt 8/8/2007 //TX_NO_CPLT = CRLF + CRLF + '- cannot be completed.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_CPLT = 'Unable to Complete'; <-- original line. //kt 8/8/2007 //TX_NO_VERIFY = CRLF + CRLF + '- cannot be verified.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_VERIFY = 'Unable to Verify'; <-- original line. //kt 8/8/2007 //TX_NO_CMNT = CRLF + CRLF + '- cannot have comments edited.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_CMNT = 'Unable to Edit Comments'; <-- original line. //kt 8/8/2007 //TX_NO_RENEW = CRLF + CRLF + '- cannot be changed.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_RENEW = 'Unable to Renew Order'; <-- original line. //kt 8/8/2007 //TX_LOC_PRINT = 'The selected location will be used to determine where orders are printed.'; <-- original line. //kt 8/8/2007 //TX_PRINT_LOC = 'A location must be selected to print orders.'; <-- original line. //kt 8/8/2007 //TX_REL_LOC = 'A location must be selected to release orders.'; <-- original line. //kt 8/8/2007 //TX_CHART_LOC = 'A location must be selected to mark orders "signed on chart".'; <-- original line. //kt 8/8/2007 //TX_SIGN_LOC = 'A location must be selected to sign orders.'; <-- original line. //kt 8/8/2007 //TC_REQ_LOC = 'Location Required'; <-- original line. //kt 8/8/2007 //TX_NOSEL = 'No orders are highlighted. Highlight the orders' + CRLF + <-- original line. //kt 8/8/2007 // 'you wish to take action on.'; <-- original line. //kt 8/8/2007 //TX_NOSEL_SIGN = 'No orders are highlighted. Highlight orders you want to sign or' + CRLF + <-- original line. //kt 8/8/2007 // 'use Review/Sign Changes (File menu) to sign all orders written' + CRLF + <-- original line. //kt 8/8/2007 // 'in this session.'; <-- original line. //kt 8/8/2007 //TC_NOSEL = 'No Orders Selected'; <-- original line. //kt 8/8/2007 //TX_NOCHG_VIEW = 'The view of orders may not be changed while an ordering dialog is' + CRLF + <-- original line. //kt 8/8/2007 // 'active for an event-delayed order.'; <-- original line. //kt 8/8/2007 //TC_NOCHG_VIEW = 'Order View Restriction'; <-- original line. //kt 8/8/2007 //TX_DELAY1 = 'Now writing orders for '; <-- original line. //kt 8/8/2007 //TC_DELAY = 'Ordering Information'; <-- original line. //kt 8/8/2007 //TX_BAD_TYPE = 'This item is a type that is not supported in the graphical interface.'; <-- original line. //kt 8/8/2007 //TC_BAD_TYPE = 'Unsupported Ordering Item'; <-- original line. //kt 8/8/2007 //TC_VWSAVE = 'Save Default Order View'; <-- original line. //kt 8/8/2007 //TX_VWSAVE1 = 'The current order view is: ' + CRLF + CRLF; <-- original line. //kt 8/8/2007 //TX_VWSAVE2 = CRLF + CRLF + 'Do you wish to save this as your default view?'; <-- original line. //kt 8/8/2007 //TX_NO_COPY = CRLF + CRLF + '- cannot be copied.' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_COPY = 'Unable to Copy Order'; <-- original line. //kt 8/8/2007 //TX_NO_CHANGE = CRLF + CRLF + '- cannot be changed' + CRLF + CRLF + 'Reason: '; <-- original line. //kt 8/8/2007 //TC_NO_CHANGE = 'Unable to Change Order'; <-- original line. //kt 8/8/2007 //TX_COMPLEX = 'You can not take this action on a complex medication.' + #13 + 'You must enter a new order.'; <-- original line. //kt 8/8/2007 //TX_CMPTEVT = ' occurred since you started writing delayed orders. ' <-- original line. //kt 8/8/2007 // + 'The orders that were entered and signed have now been released. ' <-- original line. //kt 8/8/2007 // + 'Any unsigned orders will be released immediately upon signature. ' <-- original line. //kt 8/8/2007 // + #13#13 // + 'To write new delayed orders for this event you need to click the write delayed orders button again and select the appropriate event. ' <-- original line. //kt 8/8/2007 // + 'Orders delayed to this same event will remain delayed until the event occurs again.' <-- original line. //kt 8/8/2007 // + #13#13 // + 'The Orders tab will now be refreshed and switched to the Active Orders view. ' <-- original line. //kt 8/8/2007 // + 'If you wish to continue to write active orders for this patient, ' <-- original line. //kt 8/8/2007 // + 'close this message window and continue as usual.'; <-- original line. //kt 8/8/2007 //TX_CMPTEVT_MEDSTAB = ' occurred since you started writing delayed orders. ' <-- original line. //kt 8/8/2007 // + 'The orders that were entered and signed have now been released. ' <-- original line. //kt 8/8/2007 // + 'Any unsigned orders will be released immediately upon signature. ' <-- original line. //kt 8/8/2007 // + #13#13 // + 'To write new delayed orders for this event you need to click the write delayed orders button on the orders tab and select the appropriate event. ' <-- original line. //kt 8/8/2007 // + 'Orders delayed to this same event will remain delayed until the event occurs again.'; <-- original line. //kt 8/8/2007 var TX_NO_HOLD : string; //kt TC_NO_HOLD : string; //kt TX_NO_UNHOLD : string; //kt TC_NO_UNHOLD : string; //kt TX_NO_DC : string; //kt TC_NO_DC : string; //kt TX_NO_CV : string; //kt TC_NO_CV : string; //kt TX_NO_ALERT : string; //kt TC_NO_ALERT : string; //kt TX_NO_FLAG : string; //kt TC_NO_FLAG : string; //kt TX_NO_UNFLAG : string; //kt TC_NO_UNFLAG : string; //kt TX_NO_SIGN : string; //kt TC_NO_SIGN : string; //kt TX_NO_REL : string; //kt TC_NO_REL : string; //kt TX_NO_CHART : string; //kt TC_NO_CHART : string; //kt TX_NO_CPLT : string; //kt TC_NO_CPLT : string; //kt TX_NO_VERIFY : string; //kt TC_NO_VERIFY : string; //kt TX_NO_CMNT : string; //kt TC_NO_CMNT : string; //kt TX_NO_RENEW : string; //kt TC_NO_RENEW : string; //kt TX_LOC_PRINT : string; //kt TX_PRINT_LOC : string; //kt TX_REL_LOC : string; //kt TX_CHART_LOC : string; //kt TX_SIGN_LOC : string; //kt TC_REQ_LOC : string; //kt TX_NOSEL : string; //kt TX_NOSEL_SIGN : string; //kt TC_NOSEL : string; //kt TX_NOCHG_VIEW : string; //kt TC_NOCHG_VIEW : string; //kt TX_DELAY1 : string; //kt TC_DELAY : string; //kt TX_BAD_TYPE : string; //kt TC_BAD_TYPE : string; //kt TC_VWSAVE : string; //kt TX_VWSAVE1 : string; //kt TX_VWSAVE2 : string; //kt TX_NO_COPY : string; //kt TC_NO_COPY : string; //kt TX_NO_CHANGE : string; //kt TC_NO_CHANGE : string; //kt TX_COMPLEX : string; //kt TX_CMPTEVT : string; //kt TX_CMPTEVT_MEDSTAB : string; //kt procedure SetupVars; //kt Added entire function to replace constant declarations 8/8/2007 begin TX_NO_HOLD := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_placed_on_holdx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_HOLD := DKLangConstW('fOrders_Unable_to_Hold'); TX_NO_UNHOLD := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_released_from_holdx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_UNHOLD := DKLangConstW('fOrders_Unable_to_Release_from_Hold'); TX_NO_DC := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_discontinuedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_DC := DKLangConstW('fOrders_Unable_to_Discontinue'); TX_NO_CV := CRLF + DKLangConstW('fOrders_The_release_event_cannot_be_changedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_CV := DKLangConstW('fOrders_Unable_to_Change_Release_Event'); TX_NO_ALERT := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_set_to_send_an_alertx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_ALERT := DKLangConstW('fOrders_Unable_to_Set_Alert'); TX_NO_FLAG := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_flaggedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_FLAG := DKLangConstW('fOrders_Unable_to_Flag_Order'); TX_NO_UNFLAG := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_unflaggedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_UNFLAG := DKLangConstW('fOrders_Unable_to_Unflag_Order'); TX_NO_SIGN := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_signedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_SIGN := DKLangConstW('fOrders_Unable_to_Sign_Order'); TX_NO_REL := CRLF + DKLangConstW('fOrders_Cannot_be_released_to_the_servicexsxx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_REL := DKLangConstW('fOrders_Unable_to_be_Released_to_Service'); TX_NO_CHART := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_marked_xSigned_on_Chartxx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_CHART := DKLangConstW('fOrders_Unable_to_Release_Orders'); TX_NO_CPLT := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_completedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_CPLT := DKLangConstW('fOrders_Unable_to_Complete'); TX_NO_VERIFY := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_verifiedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_VERIFY := DKLangConstW('fOrders_Unable_to_Verify'); TX_NO_CMNT := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_have_comments_editedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_CMNT := DKLangConstW('fOrders_Unable_to_Edit_Comments'); TX_NO_RENEW := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_changedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_RENEW := DKLangConstW('fOrders_Unable_to_Renew_Order'); TX_LOC_PRINT := DKLangConstW('fOrders_The_selected_location_will_be_used_to_determine_where_orders_are_printedx'); TX_PRINT_LOC := DKLangConstW('fOrders_A_location_must_be_selected_to_print_ordersx'); TX_REL_LOC := DKLangConstW('fOrders_A_location_must_be_selected_to_release_ordersx'); TX_CHART_LOC := DKLangConstW('fOrders_A_location_must_be_selected_to_mark_orders_xsigned_on_chartxx'); TX_SIGN_LOC := DKLangConstW('fOrders_A_location_must_be_selected_to_sign_ordersx'); TC_REQ_LOC := DKLangConstW('fOrders_Location_Required'); TX_NOSEL := DKLangConstW('fOrders_No_orders_are_highlightedx__Highlight_the_orders') + CRLF + DKLangConstW('fOrders_you_wish_to_take_action_onx'); TX_NOSEL_SIGN := DKLangConstW('fOrders_No_orders_are_highlightedx_Highlight_orders_you_want_to_sign_or') + CRLF + DKLangConstW('fOrders_use_ReviewxSign_Changes_xFile_menux_to_sign_all_orders_written') + CRLF + DKLangConstW('fOrders_in_this_sessionx'); TC_NOSEL := DKLangConstW('fOrders_No_Orders_Selected'); TX_NOCHG_VIEW := DKLangConstW('fOrders_The_view_of_orders_may_not_be_changed_while_an_ordering_dialog_is') + CRLF + DKLangConstW('fOrders_active_for_an_eventxdelayed_orderx'); TC_NOCHG_VIEW := DKLangConstW('fOrders_Order_View_Restriction'); TX_DELAY1 := DKLangConstW('fOrders_Now_writing_orders_for'); TC_DELAY := DKLangConstW('fOrders_Ordering_Information'); TX_BAD_TYPE := DKLangConstW('fOrders_This_item_is_a_type_that_is_not_supported_in_the_graphical_interfacex'); TC_BAD_TYPE := DKLangConstW('fOrders_Unsupported_Ordering_Item'); TC_VWSAVE := DKLangConstW('fOrders_Save_Default_Order_View'); TX_VWSAVE1 := DKLangConstW('fOrders_The_current_order_view_isx') + CRLF + CRLF; TX_VWSAVE2 := CRLF + CRLF + DKLangConstW('fOrders_Do_you_wish_to_save_this_as_your_default_viewx'); TX_NO_COPY := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_copiedx') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_COPY := DKLangConstW('fOrders_Unable_to_Copy_Order'); TX_NO_CHANGE := CRLF + CRLF + DKLangConstW('fOrders_x_cannot_be_changed') + CRLF + CRLF + DKLangConstW('fOrders_Reasonx'); TC_NO_CHANGE := DKLangConstW('fOrders_Unable_to_Change_Order'); TX_COMPLEX := DKLangConstW('fOrders_You_can_not_take_this_action_on_a_complex_medicationx') + #13 + DKLangConstW('fOrders_You_must_enter_a_new_orderx'); TX_CMPTEVT := DKLangConstW('fOrders_occurred_since_you_started_writing_delayed_ordersx') + DKLangConstW('fOrders_The_orders_that_were_entered_and_signed_have_now_been_releasedx') + DKLangConstW('fOrders_Any_unsigned_orders_will_be_released_immediately_upon_signaturex') + #13#13 + DKLangConstW('fOrders_To_write_new_delayed_orders_for_this_event_you_need_to_click_the_write_delayed_orders_button_again_and_select_the_appropriate_eventx') + DKLangConstW('fOrders_Orders_delayed_to_this_same_event_will_remain_delayed_until_the_event_occurs_againx') + #13#13 + DKLangConstW('fOrders_The_Orders_tab_will_now_be_refreshed_and_switched_to_the_Active_Orders_viewx') + DKLangConstW('fOrders_If_you_wish_to_continue_to_write_active_orders_for_this_patientx') + DKLangConstW('fOrders_close_this_message_window_and_continue_as_usualx'); TX_CMPTEVT_MEDSTAB := DKLangConstW('fOrders_occurred_since_you_started_writing_delayed_ordersx') + DKLangConstW('fOrders_The_orders_that_were_entered_and_signed_have_now_been_releasedx') + DKLangConstW('fOrders_Any_unsigned_orders_will_be_released_immediately_upon_signaturex') + #13#13 + DKLangConstW('fOrders_To_write_new_delayed_orders_for_this_event_you_need_to_click_the_write_delayed_orders_button_on_the_orders_tab_and_select_the_appropriate_eventx') + DKLangConstW('fOrders_Orders_delayed_to_this_same_event_will_remain_delayed_until_the_event_occurs_againx'); end; var uOrderList: TList; uEvtDCList, uEvtRLList: TList; { TPage common methods --------------------------------------------------------------------- } function TfrmOrders.AllowContextChange(var WhyNot: string): Boolean; begin Result := inherited AllowContextChange(WhyNot); // sets result = true case BOOLCHAR[frmFrame.CCOWContextChanging] of '1': if ActiveOrdering then begin // WhyNot := 'Orders in progress will be discarded.'; <-- original line. //kt 8/8/2007 WhyNot := DKLangConstW('fOrders_Orders_in_progress_will_be_discardedx'); //kt added 8/8/2007 Result := False; end; '0': Result := CloseOrdering; // call in uOrders, should move to fFrame end; end; procedure TfrmOrders.ClearPtData; begin inherited ClearPtData; lstOrders.Clear; ClearOrderSheets; ClearOrders(uOrderList); if uEvtDCList <> nil then uEvtDCList.Clear; if uEvtRLList <> nil then uEvtRLList.Clear; ClearFillerAppList; end; procedure TfrmOrders.DisplayPage; var i: Integer; begin inherited DisplayPage; frmFrame.ShowHideChartTabMenus(mnuViewChart); frmFrame.mnuFilePrint.Tag := CT_ORDERS; frmFrame.mnuFilePrint.Enabled := True; frmFrame.mnuFilePrintSetup.Enabled := True; if InitPage then begin // set visibility according to order role mnuActComplete.Visible := (User.OrderRole = OR_NURSE) or (User.OrderRole = OR_CLERK) or (User.OrderRole = OR_PHYSICIAN); mnuActVerify.Visible := (User.OrderRole = OR_NURSE) or (User.OrderRole = OR_CLERK); popOrderVerify.Visible := (User.OrderRole = OR_NURSE) or (User.OrderRole = OR_CLERK); sepOrderVerify.Visible := (User.OrderRole = OR_NURSE) or (User.OrderRole = OR_CLERK); mnuActChartRev.Visible := (User.OrderRole = OR_NURSE) or (User.OrderRole = OR_CLERK); popOrderChartRev.Visible := (User.OrderRole = OR_NURSE) or (User.OrderRole = OR_CLERK); mnuActRelease.Visible := User.OrderRole = OR_NURSE; mnuActOnChart.Visible := (User.OrderRole = OR_NURSE) or (User.OrderRole = OR_CLERK); mnuActSign.Visible := User.OrderRole = OR_PHYSICIAN; popOrderSign.Visible := User.OrderRole = OR_PHYSICIAN; mnuActRel.Visible := False; popOrderRel.Visible := False; // now set enabled/disabled according to parameters // popup items that apply to ordering have tag>0 with mnuAct do for i := 0 to Pred(Count) do Items[i].Enabled := not User.NoOrdering; with popOrder.Items do for i := 0 to Pred(Count) do if Items[i].Tag > 0 then Items[i].Enabled := not User.NoOrdering; // set nurse verification actions (may be enabled when ordering disabled) mnuActVerify.Enabled := User.EnableVerify; mnuActChartRev.Enabled := User.EnableVerify; popOrderVerify.Enabled := User.EnableVerify; popOrderChartRev.Enabled := User.EnableVerify; if User.DisableHold then begin mnuActHold.Visible := False; mnuActUnhold.Visible := False; end; end; AskForCancel := true; if InitPatient then // for both CC_INIT_PATIENT and CC_NOTIFICATION begin if not User.NoOrdering then LoadWriteOrders(lstWrite.Items) else lstWrite.Clear; InitOrderSheets; end; case CallingContext of CC_INIT_PATIENT: mnuViewDfltShowClick(Self); // when new patient but not doing notifications CC_NOTIFICATION: ProcessNotifications; // when new patient and doing notifications end; end; procedure TfrmOrders.mnuChartTabClick(Sender: TObject); begin inherited; frmFrame.mnuChartTabClick(Sender); end; procedure TfrmOrders.NotifyOrder(OrderAction: Integer; AnOrder: TOrder); var OrderForList: TOrder; IndexOfOrder, ReturnedType, CanSign, i: Integer; j: integer; AChildList: TStringlist; CplxOrderID: string; procedure RemoveFromOrderList(ChildOrderID: string); var ij: integer; begin for ij := uOrderList.Count - 1 downto 0 do begin if TOrder(uOrderList[ij]).ID = ChildOrderID then uOrderList.Remove(TOrder(uOrderList[ij])); end; end; begin // if FCurrentView = nil then {**REV**} // begin {**REV**} // FCurrentView := TOrderView.Create; {**REV**} // with FCurrentView do {**REV**} // begin {**REV**} // InvChrono := True; {**REV**} // ByService := True; {**REV**} // end; {**REV**} // end; {**REV**} if FCurrentView = nil then Exit; case OrderAction of ORDER_NEW: if AnOrder.ID <> '' then begin OrderForList := TOrder.Create; OrderForList.Assign(AnOrder); uOrderList.Add(OrderForList); FCompress := True; RefreshOrderList(FROM_SELF); //PositionTopOrder(AnOrder.DGroup); PositionTopOrder(0); // puts new orders on top lstOrders.Invalidate; end; ORDER_DC: begin IndexOfOrder := -1; with lstOrders do for i := 0 to Items.Count - 1 do if TOrder(Items.Objects[i]).ID = AnOrder.ID then IndexOfOrder := i; if IndexOfOrder > -1 then OrderForList := TOrder(lstOrders.Items.Objects[IndexOfOrder]) else OrderForList := AnOrder; if (Encounter.Provider = User.DUZ) and User.CanSignOrders then CanSign := CH_SIGN_YES else CanSign := CH_SIGN_NA; DCOrder(OrderForList, GetReqReason, ReturnedType); Changes.Add(CH_ORD, OrderForList.ID, OrderForList.Text, '', CanSign); FCompress := True; SynchListToOrders; end; ORDER_EDIT: with lstOrders do begin IndexOfOrder := -1; for i := 0 to Items.Count - 1 do if TOrder(Items.Objects[i]).ID = AnOrder.EditOf then IndexOfOrder := i; if IndexOfOrder > -1 then begin TOrder(Items.Objects[IndexOfOrder]).Assign(AnOrder); end; {if IndexOfOrder} //RedrawOrderList; {redraw here appears to clear selected} end; {with lstOrders} ORDER_ACT: begin if IsComplexOrder(AnOrder.ID) then begin RefreshOrderList(FROM_SERVER); exit; end; with lstOrders do begin IndexOfOrder := -1; for i := 0 to Items.Count - 1 do if TOrder(Items.Objects[i]).ID = Piece(AnOrder.ActionOn, '=', 1) then IndexOfOrder := i; if (IndexOfOrder > -1) and (AnOrder <> Items.Objects[IndexOfOrder]) then begin TOrder(Items.Objects[IndexOfOrder]).Assign(AnOrder); end; {if IndexOfOrder} FCompress := True; RedrawOrderList; end; {with lstOrders} end; //PSI-COMPLEX ORDER_CPLXRN: begin AChildList := TStringList.Create; CplxOrderID := Piece(AnOrder.ActionOn,'=',1); GetChildrenOfComplexOrder(CplxOrderID, Piece(CplxOrderID,';',2), AChildList); with lstOrders do begin for i := Items.Count-1 downto 0 do begin for j := 0 to AChildList.Count - 1 do begin if TOrder(Items.Objects[i]).ID = AChildList[j] then begin RemoveFromOrderList(AChildList[j]); Items.Objects[i].Free; Items.Delete(i); Break; end; end; end; Items.InsertObject(0,AnOrder.Text,AnOrder); Items[0] := GetPlainText(AnOrder,0); uOrderList.Insert(0,AnOrder); end; FCompress := True; RedrawOrderList; AChildList.Clear; AChildList.Free; end; ORDER_SIGN: begin FCompress := True; SaveSignOrders; // sent when orders signed, AnOrder=nil end; end; {case} end; { Form events ------------------------------------------------------------------------------ } procedure TfrmOrders.FormCreate(Sender: TObject); begin inherited; PageID := CT_ORDERS; lstOrders.Color := ReadOnlyColor; uOrderList := TList.Create; uEvtDCList := TList.Create; uEvtRLList := TList.Create; FDfltSort := OVS_CATINV; FCompress := False; FFromDCRelease := False; FSendDelayOrders := False; FNewEvent := False; FNeedShowModal := False; FAskForCancel := True; FRightAfterWriteOrderBox := False; FEventForCopyActiveOrders.EventType := #0; FEventForCopyActiveOrders.EventIFN := 0; FHighlightFromMedsTab := 0; FCalledFromWDO := False; FEvtOrderList := TStringList.Create; FEvtColWidth := 0; FDontCheck := False; FParentComplexOrderID := ''; end; procedure TfrmOrders.FormDestroy(Sender: TObject); begin inherited; ClearOrders(uOrderList); uEvtDCList.Clear; uEvtRLList.Clear; ClearOrderSheets; FEvtOrderList.Free; uEvtDCList.Free; uEvtRLList.Free; uOrderList.Free; if FOrderViewForActiveOrders <> nil then FOrderViewForActiveOrders := nil; FEventForCopyActiveOrders.EventType := #0; FEventForCopyActiveOrders.EventIFN := 0; FEventForCopyActiveOrders.EventName := ''; end; procedure TfrmOrders.UMDestroy(var Message: TMessage); { sent by ordering dialog when it is closing } begin lstWrite.ItemIndex := -1; //UnlockIfAble; // - already in uOrders end; { View menu events ------------------------------------------------------------------------- } procedure TfrmOrders.PositionTopOrder(DGroup: Integer); const SORT_FWD = 0; SORT_REV = 1; SORT_GRP_FWD = 2; SORT_GRP_REV = 3; var i, Seq: Integer; AnOrder: TOrder; begin with lstOrders do begin case (Ord(FCurrentView.ByService) * 2) + Ord(FCurrentView.InvChrono) of SORT_FWD: TopIndex := Items.Count - 1; SORT_REV: TopIndex := 0; SORT_GRP_FWD: begin Seq := SeqOfDGroup(DGroup); for i := Items.Count - 1 downto 0 do begin AnOrder := TOrder(Items.Objects[i]); if AnOrder.DGroupSeq <= Seq then break; end; TopIndex := i; end; SORT_GRP_REV: begin Seq := SeqOfDGroup(DGroup); for i := 0 to Items.Count - 1 do begin AnOrder := TOrder(Items.Objects[i]); if AnOrder.DGroupSeq >= Seq then break; end; TopIndex := i; end; end; {case} end; {with} end; procedure TfrmOrders.RedrawOrderList; { redraws the Orders list, compensates for changes in item height by re-adding everything } var i, SaveTop: Integer; AnOrder: TOrder; begin with lstOrders do begin RedrawSuspend(Handle); SaveTop := TopIndex; Clear; for i := 0 to uOrderList.Count - 1 do begin AnOrder := TOrder(uOrderList.Items[i]); if (AnOrder.OrderTime <= 0) then Continue; Items.AddObject(AnOrder.ID, AnOrder); Items[i] := GetPlainText(AnOrder,i); end; TopIndex := SaveTop; RedrawActivate(Handle); end; end; procedure TfrmOrders.RefreshOrderList(FromServer: Boolean; APtEvtID: string); var i: Integer; begin with FCurrentView do begin if EventDelay.EventIFN > 0 then FCompress := False; RedrawSuspend(lstOrders.Handle); lstOrders.Clear; if FromServer then begin // StatusText('Retrieving orders list...'); <-- original line. //kt 8/8/2007 StatusText(DKLangConstW('fOrders_Retrieving_orders_listxxx')); //kt added 8/8/2007 if not FFromDCRelease then LoadOrdersAbbr(uOrderList, FCurrentView, APtEvtID) else begin ClearOrders(uOrderList); uEvtDCList.Clear; uEvtRLList.Clear; LoadOrdersAbbr(uEvtDCList,uEvtRLList,FCurrentView,APtEvtID); end; end; if ((Length(APtEvtID)>0) or (FCurrentView.Filter in [15,16,17,24]) or (FCurrentView.EventDelay.PtEventIFN>0)) and ((not FCompress) or (lstSheets.ItemIndex<0)) and (not FFromDCRelease) then ExpandEventSection else CompressEventSection; if not FFromDCRelease then begin if FRightAfterWriteOrderBox and (EventDelay.EventIFN>0) then begin SortOrders(uOrderList,False,True); FRightAfterWriteOrderBox := False; end else SortOrders(uOrderList, ByService, InvChrono); AddToListBox(uOrderList); end; if FFromDCRelease then begin if uEvtRLList.Count > 0 then begin SortOrders(uEvtRLList,True,True); for i := 0 to uEvtRLList.Count - 1 do uOrderList.Add(TOrder(uEvtRLList[i])); end; if uEvtDCList.Count > 0 then begin SortOrders(uEvtDCList,True,True); for i := 0 to uEvtDCList.Count - 1 do uOrderList.Add(TOrder(uEvtDCList[i])); end; AddToListBox(uOrderList); end; RedrawActivate(lstOrders.Handle); lblOrders.Caption := ViewName; lstOrders.Caption := ViewName; imgHide.Visible := not ((Filter in [1, 2]) and (DGroup = DGroupAll)); StatusText(''); end; end; procedure TfrmOrders.UseDefaultSort; begin with FCurrentView do case FDfltSort of OVS_CATINV: begin InvChrono := True; ByService := True; end; OVS_CATFWD: begin InvChrono := False; ByService := True; end; OVS_INVERSE: begin InvChrono := True; ByService := False; end; OVS_FORWARD: begin InvChrono := False; ByService := False; end; end; end; function TfrmOrders.CanChangeOrderView: Boolean; { Disallows changing view while doing delayed release orders. } begin SetupVars; //kt added 8/8/2007 to replace constants with vars. Result := True; if (lstSheets.ItemIndex > 0) and ActiveOrdering then begin InfoBox(TX_NOCHG_VIEW, TC_NOCHG_VIEW, MB_OK); Result := False; end; end; procedure TfrmOrders.SetOrderView(AFilter, ADGroup: Integer; const AViewName: string; NotifSort: Boolean); //{ sets up a 'canned' order view, assumes the date range is never restricted } <-- original line. //kt 8/8/2007 { sets up a DKLangConstW('fOrders_canned') order view, assumes the date range is never restricted } //kt added 8/8/2007 var tmpDate: TDateTime; begin if not CanChangeOrderView then Exit; lstSheets.ItemIndex := 0; FCurrentView := TOrderView(lstSheets.Items.Objects[0]); if FCurrentView = nil then FCurrentView := TOrderView.Create; with FCurrentView do begin TimeFrom := 0; TimeThru := 0; if NotifSort then begin ByService := False; InvChrono := True; if AFilter = STS_RECENT then begin tmpDate := Trunc(FMDateTimeToDateTime(StrToFMDateTime(Piece(Piece(Notifications.RecordID, U, 2), ';', 3)))); TimeFrom := DateTimeToFMDateTime(tmpDate - 5); TimeThru := FMNow; end; if AFilter = STS_UNVERIFIED then begin if Patient.AdmitTime > 0 then tmpDate := Trunc(FMDateTimeToDateTime(Patient.AdmitTime)) else tmpdate := Trunc(FMDateTimeToDateTime(FMNow)) - 30; TimeFrom := DateTimeToFMDateTime(tmpDate); TimeThru := FMNow; end; end else UseDefaultSort; if AFilter = STS_EXPIRED then begin TimeFrom := ExpiredOrdersStartDT; TimeThru := FMNow; end; Filter := AFilter; DGroup := ADGroup; CtxtTime := 0; TextView := 0; ViewName := AViewName; lstSheets.Items[0] := 'C;0^' + ViewName; EventDelay.EventType := 'C'; EventDelay.Specialty := 0; EventDelay.Effective := 0; end; RefreshOrderList(FROM_SERVER); end; procedure TfrmOrders.mnuViewActiveClick(Sender: TObject); begin inherited; //SetOrderView(STS_ACTIVE, DGroupAll, 'Active Orders (includes Pending & Recent Activity) - ALL SERVICES', False); <-- original line. //kt 8/8/2007 SetOrderView(STS_ACTIVE, DGroupAll, DKLangConstW('fOrders_Active_Orders_xincludes_Pending_x_Recent_Activityx_x_ALL_SERVICES'), False); //kt added 8/8/2007 end; procedure TfrmOrders.mnuViewCurrentClick(Sender: TObject); begin inherited; //SetOrderView(STS_CURRENT, DGroupAll, 'Current Orders (Active & Pending Status Only) - ALL SERVICES', False); <-- original line. //kt 8/8/2007 SetOrderView(STS_CURRENT, DGroupAll, DKLangConstW('fOrders_Current_Orders_xActive_x_Pending_Status_Onlyx_x_ALL_SERVICES'), False); //kt added 8/8/2007 end; procedure TfrmOrders.mnuViewExpiringClick(Sender: TObject); begin inherited; //SetOrderView(STS_EXPIRING, DGroupAll, 'Expiring Orders - ALL SERVICES', False); <-- original line. //kt 8/8/2007 SetOrderView(STS_EXPIRING, DGroupAll, DKLangConstW('fOrders_Expiring_Orders_x_ALL_SERVICES'), False); //kt added 8/8/2007 end; procedure TfrmOrders.mnuViewExpiredClick(Sender: TObject); begin inherited; //SetOrderView(STS_EXPIRED, DGroupAll, 'Recently Expired Orders - ALL SERVICES', False); <-- original line. //kt 8/8/2007 SetOrderView(STS_EXPIRED, DGroupAll, DKLangConstW('fOrders_Recently_Expired_Orders_x_ALL_SERVICES'), False); //kt added 8/8/2007 end; procedure TfrmOrders.mnuViewUnsignedClick(Sender: TObject); begin inherited; //SetOrderView(STS_UNSIGNED, DGroupAll, 'Unsigned Orders - ALL SERVICES', False); <-- original line. //kt 8/8/2007 SetOrderView(STS_UNSIGNED, DGroupAll, DKLangConstW('fOrders_Unsigned_Orders_x_ALL_SERVICES'), False); //kt added 8/8/2007 end; procedure TfrmOrders.mnuViewCustomClick(Sender: TObject); var AnOrderView: TOrderView; begin inherited; if not CanChangeOrderView then Exit; AnOrderView := TOrderView.Create; AnOrderView.Filter := STS_ACTIVE; AnOrderView.DGroup := DGroupAll; //AnOrderView.ViewName := 'All Services, Active'; <-- original line. //kt 8/8/2007 AnOrderView.ViewName := DKLangConstW('fOrders_All_Servicesx_Active'); //kt added 8/8/2007 AnOrderView.InvChrono := True; AnOrderView.ByService := True; AnOrderView.CtxtTime := 0; AnOrderView.TextView := 0; AnOrderView.EventDelay.EventType := 'C'; AnOrderView.EventDelay.Specialty := 0; AnOrderView.EventDelay.Effective := 0; AnOrderView.EventDelay.EventIFN := 0; //AnOrderView.EventDelay.EventName := 'All Services, Active'; <-- original line. //kt 8/8/2007 AnOrderView.EventDelay.EventName := DKLangConstW('fOrders_All_Servicesx_Active'); //kt added 8/8/2007 SelectOrderView(AnOrderView); with AnOrderView do if Changed then begin FCurrentView := AnOrderView; if FCurrentView.Filter in [15,16,17,24] then begin FCompress := False; mnuActRel.Visible := True; popOrderRel.Visible := True; end else begin mnuActRel.Visible := False; popOrderRel.Visible := False; end; lstSheets.ItemIndex := -1; // lblWrite.Caption := 'Write Orders'; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write_Orders'); //kt added 8/8/2007 lstWrite.Clear; lstWrite.Caption := lblWrite.Caption; LoadWriteOrders(lstWrite.Items); RefreshOrderList(FROM_SERVER); if ByService then begin if InvChrono then FDfltSort := OVS_CATINV else FDfltSort := OVS_CATFWD; end else begin if InvChrono then FDfltSort := OVS_INVERSE else FDfltSort := OVS_FORWARD; end; end; end; procedure TfrmOrders.mnuViewDfltShowClick(Sender: TObject); begin inherited; if not CanChangeOrderView then Exit; if HighlightFromMedsTab > 0 then lstSheets.ItemIndex := lstSheets.SelectByIEN(HighlightFromMedsTab); if lstSheets.ItemIndex < 0 then lstSheets.ItemIndex := 0; FCurrentView := TOrderView(lstSheets.Items.Objects[lstSheets.ItemIndex]); LoadOrderViewDefault(TOrderView(lstSheets.Items.Objects[0])); lstSheets.Items[0] := 'C;0^' + TOrderView(lstSheets.Items.Objects[0]).ViewName; if lstSheets.ItemIndex > 0 then lstSheetsClick(Application) else RefreshOrderList(FROM_SERVER); if HighlightFromMedsTab > 0 then HighlightFromMedsTab := 0; end; procedure TfrmOrders.mnuViewDfltSaveClick(Sender: TObject); var x: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; with FCurrentView do begin x := Piece(Viewname, '(', 1) + CRLF; // if TimeFrom > 0 then x := x + 'From: ' + MakeRelativeDateTime(TimeFrom); <-- original line. //kt 8/8/2007 if TimeFrom > 0 then x := x + DKLangConstW('fOrders_Fromx') + MakeRelativeDateTime(TimeFrom); //kt added 8/8/2007 // if TimeThru > 0 then x := x + ' Thru: ' + MakeRelativeDateTime(TimeThru); <-- original line. //kt 8/8/2007 if TimeThru > 0 then x := x + DKLangConstW('fOrders_Thrux') + MakeRelativeDateTime(TimeThru); //kt added 8/8/2007 if InvChrono // then x := x + CRLF + 'Sort order dates in reverse chronological order' <-- original line. //kt 8/8/2007 then x := x + CRLF + DKLangConstW('fOrders_Sort_order_dates_in_reverse_chronological_order') //kt added 8/8/2007 // else x := x + CRLF + 'Sort order dates in chronological order'; <-- original line. //kt 8/8/2007 else x := x + CRLF + DKLangConstW('fOrders_Sort_order_dates_in_chronological_order'); //kt added 8/8/2007 if ByService // then x := x + CRLF + 'Group orders by service' <-- original line. //kt 8/8/2007 then x := x + CRLF + DKLangConstW('fOrders_Group_orders_by_service') //kt added 8/8/2007 // else x := x + CRLF + 'Don''t group orders by service'; <-- original line. //kt 8/8/2007 else x := x + CRLF + DKLangConstW('fOrders_Donxxt_group_orders_by_service'); //kt added 8/8/2007 end; if InfoBox(TX_VWSAVE1 + x + TX_VWSAVE2, TC_VWSAVE, MB_YESNO) = IDYES then SaveOrderViewDefault(FCurrentView); end; procedure TfrmOrders.mnuViewDetailClick(Sender: TObject); var i,j,idx: Integer; tmpList: TStringList; BigOrderID: string; AnOrderID: string; begin inherited; SetupVars; //kt added 8/8/2007 to replace constants with vars. if NoneSelected(TX_NOSEL) then Exit; tmpList := TStringList.Create; idx := 0; try with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin // StatusText('Retrieving order details...'); <-- original line. //kt 8/8/2007 StatusText(DKLangConstW('fOrders_Retrieving_order_detailsxxx')); //kt added 8/8/2007 BigOrderID := TOrder(Items.Objects[i]).ID; AnOrderID := Piece(BigOrderID, ';', 1); if StrToIntDef(AnOrderID,0) = 0 then // ShowMessage('Detail view is not available for selected order.') <-- original line. //kt 8/8/2007 ShowMessage(DKLangConstW('fOrders_Detail_view_is_not_available_for_selected_orderx')) //kt added 8/8/2007 else begin tmpList.Assign(DetailOrder(BigOrderID)); // if ((TOrder(Items.Objects[i]).DGroupName = 'Inpt. Meds') or <-- original line. //kt 8/8/2007 if ((TOrder(Items.Objects[i]).DGroupName = DKLangConstW('fOrders_Inptx_Meds')) or //kt added 8/8/2007 // (TOrder(Items.Objects[i]).DGroupName = 'Out. Meds') or <-- original line. //kt 8/8/2007 (TOrder(Items.Objects[i]).DGroupName = DKLangConstW('fOrders_Outx_Meds')) or //kt added 8/8/2007 // (TOrder(Items.Objects[i]).DGroupName = 'Clin. Orders') or <-- original line. //kt 8/8/2007 (TOrder(Items.Objects[i]).DGroupName = DKLangConstW('fOrders_Clinx_Orders')) or //kt added 8/8/2007 // (TOrder(Items.Objects[i]).DGroupName = 'Infusion')) then <-- original line. //kt 8/8/2007 (TOrder(Items.Objects[i]).DGroupName = DKLangConstW('fOrders_Infusion'))) then //kt added 8/8/2007 begin tmpList.Add(''); tmpList.Add(StringOfChar('=', 74)); tmpList.Add(''); tmpList.AddStrings(MedAdminHistory(AnOrderID)); end; if CheckOrderGroup(AnOrderID)=1 then // if it's UD group begin for j := 0 to tmpList.Count - 1 do begin if Pos('PICK UP',UpperCase(tmpList[j]))>0 then begin idx := j; Break; end; end; if idx > 0 then tmpList.Delete(idx); end; // ReportBox(tmpList, 'Order Details - ' + BigOrderID, True); <-- original line. //kt 8/8/2007 ReportBox(tmpList, DKLangConstW('fOrders_Order_Details_x') + BigOrderID, True); //kt added 8/8/2007 end; StatusText(''); if (frmFrame.TimedOut) or (frmFrame.CCOWDrivedChange) then Exit; //code added to correct access violation on timeout Selected[i] := False; end; finally tmpList.Free; end; end; procedure TfrmOrders.mnuViewResultClick(Sender: TObject); var i: Integer; BigOrderID: string; begin inherited; SetupVars; //kt added 8/8/2007 to replace constants with vars. if NoneSelected(TX_NOSEL) then Exit; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin // StatusText('Retrieving order results...'); <-- original line. //kt 8/8/2007 StatusText(DKLangConstW('fOrders_Retrieving_order_resultsxxx')); //kt added 8/8/2007 BigOrderID := TOrder(Items.Objects[i]).ID; if Length(Piece(BigOrderID,';',1)) > 0 then // ReportBox(ResultOrder(BigOrderID), 'Order Results - ' + BigOrderID, True); <-- original line. //kt 8/8/2007 ReportBox(ResultOrder(BigOrderID), DKLangConstW('fOrders_Order_Results_x') + BigOrderID, True); //kt added 8/8/2007 Selected[i] := False; StatusText(''); end; end; procedure TfrmOrders.mnuViewResultsHistoryClick(Sender: TObject); var i: Integer; BigOrderID: string; begin inherited; SetupVars; //kt added 8/8/2007 to replace constants with vars. if NoneSelected(TX_NOSEL) then Exit; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin // StatusText('Retrieving order results...'); <-- original line. //kt 8/8/2007 StatusText(DKLangConstW('fOrders_Retrieving_order_resultsxxx')); //kt added 8/8/2007 BigOrderID := TOrder(Items.Objects[i]).ID; if Length(Piece(BigOrderID,';',1)) > 0 then // ReportBox(ResultOrderHistory(BigOrderID), 'Order Results History- ' + BigOrderID, True); <-- original line. //kt 8/8/2007 ReportBox(ResultOrderHistory(BigOrderID), DKLangConstW('fOrders_Order_Results_Historyx') + BigOrderID, True); //kt added 8/8/2007 Selected[i] := False; StatusText(''); end; end; { lstSheets events ------------------------------------------------------------------------- } procedure TfrmOrders.ClearOrderSheets; { delete all order sheets & associated TOrderView objects, set current view to nil } var i: Integer; begin with lstSheets do for i := 0 to Items.Count - 1 do TOrderView(Items.Objects[i]).Free; lstSheets.Clear; FCurrentView := nil; end; procedure TfrmOrders.InitOrderSheets; { sets up list of order sheets based on what orders are on the server in delayed status for pt } var i: Integer; AnEventInfo: String; AnOrderView: TOrderView; begin ClearOrderSheets; LoadOrderSheetsED(lstSheets.Items); // the 1st item in lstSheets should always be the 'Current' view if CharAt(lstSheets.Items[0], 1) <> 'C' then Exit; AnOrderView := TOrderView.Create; AnOrderView.Filter := STS_ACTIVE; AnOrderView.DGroup := DGroupAll; //AnOrderView.ViewName := 'All Services, Active'; <-- original line. //kt 8/8/2007 AnOrderView.ViewName := DKLangConstW('fOrders_All_Servicesx_Active'); //kt added 8/8/2007 AnOrderView.InvChrono := True; AnOrderView.ByService := True; AnOrderView.CtxtTime := 0; AnOrderView.TextView := 0; AnOrderView.EventDelay.EventType := 'C'; AnOrderView.EventDelay.Specialty := 0; AnOrderView.EventDelay.Effective := 0; AnOrderView.EventDelay.EventIFN := 0; //AnOrderView.EventDelay.EventName := 'All Services, Active'; <-- original line. //kt 8/8/2007 AnOrderView.EventDelay.EventName := DKLangConstW('fOrders_All_Servicesx_Active'); //kt added 8/8/2007 lstSheets.Items.Objects[0] := AnOrderView; FCurrentView := AnOrderView; FOrderViewForActiveOrders := AnOrderView; // now setup the event-delayed views in lstSheets, each with its own TOrderView object with lstSheets do for i := 1 to Items.Count - 1 do begin AnOrderView := TOrderView.Create; AnOrderView.DGroup := DGroupAll; AnEventInfo := EventInfo(Piece(Items[i],'^',1)); AnOrderView.EventDelay.EventType := CharAt(AnEventInfo, 1); AnOrderView.EventDelay.EventIFN := StrToInt(Piece(AnEventInfo,'^',2)); AnOrderView.EventDelay.EventName := Piece(AnEventInfo,'^',3); AnOrderView.EventDelay.Specialty := 0; AnOrderView.EventDelay.Effective := 0; case AnOrderView.EventDelay.EventType of 'A': AnOrderView.Filter := 15; 'D': AnOrderView.Filter := 16; 'T': AnOrderView.Filter := 17; end; // AnOrderView.ViewName := DisplayText[i] + ' Orders'; <-- original line. //kt 8/8/2007 AnOrderView.ViewName := DisplayText[i] + DKLangConstW('fOrders_Orders'); //kt added 8/8/2007 AnOrderView.InvChrono := FCurrentView.InvChrono; AnOrderView.ByService := FCurrentView.ByService; AnOrderView.CtxtTime := 0; AnOrderView.TextView := 0; Items.Objects[i] := AnOrderView; end; {for} //lblWrite.Caption := 'Write Orders'; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write_Orders'); //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; end; procedure TfrmOrders.lstSheetsClick(Sender: TObject); //const //TX_EVTDEL = 'There are no orders tied to this event, would you like to cancel it?'; <-- original line. //kt 8/8/2007 var AnOrderView: TOrderView; APtEvtId: string; TX_EVTDEL : string; //kt begin inherited; TX_EVTDEL := DKLangConstW('fOrders_There_are_no_orders_tied_to_this_eventx_would_you_like_to_cancel_itx'); //kt added 8/8/2007 if not CloseOrdering then Exit; FCompress := True; if lstSheets.ItemIndex < 0 then Exit; with lstSheets do begin AnOrderView := TOrderView(Items.Objects[ItemIndex]); AnOrderView.EventDelay.PtEventIFN := StrToIntDef(Piece(Items[lstSheets.ItemIndex],'^',1),0); if AnOrderView.EventDelay.PtEventIFN > 0 then FCompress := False; end; if (FCurrentView <> nil) and (AnOrderView.EventDelay.EventIFN <> FCurrentView.EventDelay.EventIFN) and (FCurrentView.EventDelay.EventIFN > 0 ) then begin APtEvtID := IntToStr(FCurrentView.EventDelay.PtEventIFN); if frmMeds.ActionOnMedsTab then Exit; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; if (not FDontCheck) and DeleteEmptyEvt(APtEvtID, FCurrentView.EventDelay.EventName) then begin ChangesUpdate(APtEvtID); FCompress := True; InitOrderSheetsForEvtDelay; lstSheets.ItemIndex := 0; lstSheetsClick(self); Exit; end; end; if (FCurrentView = nil) or (AnOrderView <> FCurrentView) or ((AnOrderView=FcurrentView) and (FCurrentView.EventDelay.EventIFN>0)) then begin FCurrentView := AnOrderView; if FCurrentView.EventDelay.EventIFN > 0 then begin FCompress := False; lstWrite.Items.Clear; // lblWrite.Caption := 'Write ' + FCurrentView.ViewName; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write') + FCurrentView.ViewName; //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; lstWrite.Items.Clear; LoadWriteOrdersED(lstWrite.Items, IntToStr(AnOrderView.EventDelay.EventIFN)); if lstWrite.Items.Count < 1 then LoadWriteOrders(lstWrite.Items); RefreshOrderList(FROM_SERVER,Piece(lstSheets.Items[lstSheets.ItemIndex],'^',1)); mnuActRel.Visible := True; popOrderRel.Visible := True; if (lstOrders.Items.Count = 0) and (not NewEvent) then begin if frmMeds.ActionOnMedsTab then Exit; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; if PtEvtEmpty(Piece(lstSheets.Items[lstSheets.ItemIndex],'^',1)) then begin // if (FAskForCancel) and ( InfoBox(TX_EVTDEL, 'Confirmation', MB_YESNO or MB_ICONQUESTION) = IDYES ) then <-- original line. //kt 8/8/2007 if (FAskForCancel) and ( InfoBox(TX_EVTDEL, DKLangConstW('fOrders_Confirmation'), MB_YESNO or MB_ICONQUESTION) = IDYES ) then //kt added 8/8/2007 begin DeletePtEvent(Piece(lstSheets.Items[lstSheets.ItemIndex],'^',1)); FCompress := True; lstSheets.Items.Objects[lstSheets.ItemIndex].Free; lstSheets.Items.Delete(lstSheets.ItemIndex); FCurrentView := TOrderView.Create; lstSheets.ItemIndex := 0; lstSheetsClick(self); Exit; end; end; end; if NewEvent then NewEvent := False; end else begin NewEvent := False; mnuActRel.Visible := False; popOrderRel.Visible := False; // lblWrite.Caption := 'Write Orders'; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write_Orders'); //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; LoadWriteOrders(lstWrite.Items); RefreshOrderList(FROM_SERVER); end; end else begin mnuActRel.Visible := False; popOrderRel.Visible := False; // lblWrite.Caption := 'Write Orders'; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write_Orders'); //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; LoadWriteOrders(lstWrite.Items); RefreshOrderList(FROM_SERVER); end; FCompress := True; end; { lstOrders events ------------------------------------------------------------------------- } procedure TfrmOrders.RetrieveVisibleOrders(AnIndex: Integer); var i: Integer; tmplst: TList; AnOrder: TOrder; begin tmplst := TList.Create; for i := AnIndex to AnIndex + 100 do begin if i >= uOrderList.Count then break; AnOrder := TOrder(uOrderList.Items[i]); if not AnOrder.Retrieved then tmplst.Add(AnOrder); end; RetrieveOrderFields(tmplst, FCurrentView.TextView, FCurrentView.CtxtTime); tmplst.Free; end; function TfrmOrders.GetPlainText(AnOrder: TOrder; index: integer):string; var i: integer; FirstColumnDisplayed: Integer; x: string; begin result := ''; //if hdrOrders.Sections[0].Text = 'Event' then <-- original line. //kt 8/8/2007 if hdrOrders.Sections[0].Text = DKLangConstW('fOrders_Event') then //kt added 8/8/2007 FirstColumnDisplayed := 0 else FirstColumnDisplayed := 1; for i:= FirstColumnDisplayed to 8 do begin x := GetOrderText(AnOrder, index, i); if x <> '' then result := result + hdrOrders.Sections[i].Text + ': ' + x + CRLF; end; end; function TfrmOrders.MeasureColumnHeight(AnOrder: TOrder; Index: Integer; Column: integer):integer; var ARect: TRect; x: string; begin x := GetOrderText(AnOrder, Index, Column); ARect.Left := 0; ARect.Top := 0; ARect.Bottom := 0; ARect.Right := hdrOrders.Sections[Column].Width -6; Result := WrappedTextHeightByFont(lstOrders.Canvas,lstOrders.Font,x,ARect); end; procedure TfrmOrders.lstOrdersMeasureItem(Control: TWinControl; Index: Integer; var AHeight: Integer); var AnOrder: TOrder; NewHeight: Integer; begin NewHeight := AHeight; with lstOrders do if Index < Items.Count then begin AnOrder := TOrder(uOrderList.Items[Index]); if AnOrder <> nil then with AnOrder do begin if not AnOrder.Retrieved then RetrieveVisibleOrders(Index); Canvas.Font.Style := []; if Changes.Exist(CH_ORD, ID) then Canvas.Font.Style := [fsBold]; end; {measure height of event delayed name} // if hdrOrders.Sections[0].Text = 'Event' then <-- original line. //kt 8/8/2007 if hdrOrders.Sections[0].Text = DKLangConstW('fOrders_Event') then //kt added 8/8/2007 NewHeight := HigherOf(AHeight, MeasureColumnHeight(AnOrder, Index, 0)); {measure height of order text} NewHeight := HigherOf(NewHeight, MeasureColumnHeight(AnOrder, Index, 2)); {measure height of start/stop times} NewHeight := HigherOf(NewHeight, MeasureColumnHeight(AnOrder, Index, 3)); if NewHeight > 255 then NewHeight := 255; if NewHeight < 13 then NewHeight := 13; end; AHeight := NewHeight; end; function TfrmOrders.GetStartStopText(StartTime: string; StopTime: string): string; var y: string; begin result := FormatFMDateTimeStr('mm/dd/yy hh:nn', StartTime); if IsFMDateTime(StartTime) and (Length(StartTime) = FM_DATE_ONLY) then result := Piece(result, ' ', 1); //if Length(result) > 0 then result := 'Start: ' + result; <-- original line. //kt 8/8/2007 if Length(result) > 0 then result := DKLangConstW('fOrders_Startx') + result; //kt added 8/8/2007 y := FormatFMDateTimeStr('mm/dd/yy hh:nn', StopTime); if IsFMDateTime(StopTime) and (Length(StopTime) = FM_DATE_ONLY) then y := Piece(y, ' ', 1); //if Length(y) > 0 then result := result + CRLF + 'Stop: ' + y; <-- original line. //kt 8/8/2007 if Length(y) > 0 then result := result + CRLF + DKLangConstW('fOrders_Stopx') + y; //kt added 8/8/2007 end; function TfrmOrders.GetOrderText(AnOrder: TOrder; Index: integer; Column: integer): string; begin if AnOrder <> nil then with AnOrder do begin case Column of 0: begin result := EventName; if (Index > 0) and (result = TOrder(lstOrders.Items.Objects[Index - 1]).EventName) then result := ''; end; 1: begin result := DGroupName; if (Index > 0) and (result = TOrder(lstOrders.Items.Objects[Index - 1]).DGroupName) then result := ''; end; 2: begin result := Text; if Flagged then // result := result + ' *Flagged*'; <-- original line. //kt 8/8/2007 result := result + DKLangConstW('fOrders_xFlaggedx'); //kt added 8/8/2007 end; 3: result := GetStartStopText( StartTime, StopTime); 4: begin result := MixedCase(ProviderName); result := Piece(result, ',', 1) + ',' + Copy(Piece(result, ',', 2), 1, 1); end; 5: result := VerNurse; 6: result := VerClerk; 7: result := ChartRev; 8: result := NameOfStatus(Status); 9: result := MixedCase(Anorder.OrderLocName); //begin AGP change 26.52 display all location for orders. //result := MixedCase(Anorder.OrderLocName); //if (Index > 0) and (result = TOrder(lstOrders.Items.Objects[Index - 1]).OrderLocName) then result := ''; //end; end; end; end; procedure TfrmOrders.lstOrdersDrawItem(Control: TWinControl; Index: Integer; TheRect: TRect; State: TOwnerDrawState); var i, RightSide: Integer; FirstColumnDisplayed: Integer; x: string; ARect: TRect; AnOrder: TOrder; SaveColor: TColor; begin inherited; with lstOrders do begin ARect := TheRect; if odSelected in State then begin Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText end; Canvas.FillRect(ARect); Canvas.Pen.Color := clSilver; Canvas.MoveTo(ARect.Left, ARect.Bottom - 1); Canvas.LineTo(ARect.Right, ARect.Bottom - 1); RightSide := -2; for i := 0 to 9 do begin RightSide := RightSide + hdrOrders.Sections[i].Width; Canvas.MoveTo(RightSide, ARect.Bottom - 1); Canvas.LineTo(RightSide, ARect.Top); end; if Index < Items.Count then begin AnOrder := TOrder(Items.Objects[Index]); // if hdrOrders.Sections[0].Text = 'Event' then <-- original line. //kt 8/8/2007 if hdrOrders.Sections[0].Text = DKLangConstW('fOrders_Event') then //kt added 8/8/2007 FirstColumnDisplayed := 0 else FirstColumnDisplayed := 1; if AnOrder <> nil then with AnOrder do for i := FirstColumnDisplayed to 9 do begin if i > FirstColumnDisplayed then ARect.Left := ARect.Right + 2 else ARect.Left := 2; ARect.Right := ARect.Left + hdrOrders.Sections[i].Width - 6; x := GetOrderText(AnOrder, Index, i); SaveColor := Canvas.Brush.Color; if i = FirstColumnDisplayed then begin if Flagged and (ColorToRGB(clWindowText) = ColorToRGB(clBlack)) then begin Canvas.Brush.Color := clRed; Canvas.FillRect(ARect); end; end; if i = 2 then begin Canvas.Font.Style := []; if Changes.Exist(CH_ORD, AnOrder.ID) then Canvas.Font.Style := [fsBold]; if not (odSelected in State) and (AnOrder.Signature = OSS_UNSIGNED) then begin if ColorToRGB(clWindowText) = ColorToRGB(clBlack) then Canvas.Font.Color := clBlue; end; end; if (i = 2) or (i = 3) or (i = 0) then DrawText(Canvas.Handle, PChar(x), Length(x), ARect, DT_LEFT or DT_NOPREFIX or DT_WORDBREAK) else DrawText(Canvas.Handle, PChar(x), Length(x), ARect, DT_LEFT or DT_NOPREFIX ); Canvas.Brush.Color := SaveColor; ARect.Right := ARect.Right + 4; end; end; end; end; procedure TfrmOrders.hdrOrdersSectionResize(HeaderControl: THeaderControl; Section: THeaderSection); begin inherited; FEvtColWidth := hdrOrders.Sections[0].Width; RedrawSuspend(Self.Handle); RedrawOrderList; RedrawActivate(Self.Handle); lstOrders.Invalidate; pnlRight.Refresh; pnlLeft.Refresh; end; procedure TfrmOrders.lstOrdersDblClick(Sender: TObject); begin inherited; mnuViewDetailClick(Self); end; { Writing Orders } procedure TfrmOrders.lstWriteClick(Sender: TObject); { ItemID = DlgIEN;FormID;DGroup;DlgType } var Activated: Boolean; NextIndex: Integer; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. if PatientStatusChanged then exit; if BILLING_AWARE then //CQ5114 fODConsult.displayDXCode := ''; //CQ5114 inherited; //frmFrame.UpdatePtInfoOnRefresh; if not ActiveOrdering then SetConfirmEventDelay; NextIndex := lstWrite.ItemIndex; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; if not ReadyForNewOrder(FCurrentView.EventDelay) then begin lstWrite.ItemIndex := RefNumFor(Self); Exit; end; // don't write delayed orders for non-VA meds: if (FCurrentView.EventDelay.EventIFN>0) and (Piece(lstWrite.ItemID,';',2) = '145') then begin // InfoBox('Delayed orders cannot be written for Non-VA Medications.', 'Meds, Non-VA', MB_OK); <-- original line. //kt 8/8/2007 InfoBox(DKLangConstW('fOrders_Delayed_orders_cannot_be_written_for_NonxVA_Medicationsx'), DKLangConstW('fOrders_Medsx_NonxVA'), MB_OK); //kt added 8/8/2007 Exit; end; if (FCurrentView <> nil) and (FCurrentView.EventDelay.EventIFN>0) then FRightAfterWriteOrderBox := True; lstWrite.ItemIndex := NextIndex; // (ReadyForNewOrder may reset ItemIndex to -1) if FCurrentView <> nil then with FCurrentView.EventDelay do if (EventType = 'D') and (Effective = 0) then if not ObtainEffectiveDate(Effective) then begin lstWrite.ItemIndex := -1; Exit; end; if frmFrame.CCOWDrivedChange then Exit; PositionTopOrder(StrToIntDef(Piece(lstWrite.ItemID, ';', 3), 0)); // position Display Group case CharAt(Piece(lstWrite.ItemID, ';', 4), 1) of 'A': Activated := ActivateAction( Piece(lstWrite.ItemID, ';', 1), Self, lstWrite.ItemIndex); 'D', 'Q': Activated := ActivateOrderDialog(Piece(lstWrite.ItemID, ';', 1), FCurrentView.EventDelay, Self, lstWrite.ItemIndex); 'H': Activated := ActivateOrderHTML( Piece(lstWrite.ItemID, ';', 1), FCurrentView.EventDelay, Self, lstWrite.ItemIndex); 'M': Activated := ActivateOrderMenu( Piece(lstWrite.ItemID, ';', 1), FCurrentView.EventDelay, Self, lstWrite.ItemIndex); 'O': Activated := ActivateOrderSet( Piece(lstWrite.ItemID, ';', 1), FCurrentView.EventDelay, Self, lstWrite.ItemIndex); else Activated := not (InfoBox(TX_BAD_TYPE, TC_BAD_TYPE, MB_OK) = IDOK); end; {case} if not Activated then begin lstWrite.ItemIndex := -1; FRightAfterWriteOrderBox := False; end; if (lstSheets.ItemIndex > -1) and (Pos('EVT',Piece(lstSheets.Items[lstSheets.ItemIndex],'^',1))>0) then begin InitOrderSheetsForEvtDelay; lstSheets.ItemIndex := 0; lstSheetsClick(Self); end; if (FCurrentView <> nil) and (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; end; procedure TfrmOrders.SaveSignOrders; var SaveOrderID: string; i: Integer; begin // unlock if able?? if not PatientViewed then Exit; if not frmFrame.ContextChanging then with lstOrders do begin if (TopIndex < Items.Count) and (TopIndex > -1) then SaveOrderID := TOrder(Items.Objects[TopIndex]).ID else SaveOrderID := ''; if lstSheets.ItemIndex > 0 then RefreshOrderList(FROM_SERVER,Piece(lstSheets.Items[lstSheets.ItemIndex],'^',1)) else RefreshOrderList(FROM_SERVER); if Length(SaveOrderID) > 0 then for i := 0 to Items.Count - 1 do if TOrder(Items.Objects[i]).ID = SaveOrderID then TopIndex := i; end; end; { Action menu events ----------------------------------------------------------------------- } procedure TfrmOrders.ValidateSelected(const AnAction, WarningMsg, WarningTitle: string); { loop to validate action on each selected order, deselect if not valid } var i: Integer; AnOrder: TOrder; ErrMsg, AParentID: string; GoodList,BadList, CheckedList: TStringList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. GoodList := TStringList.Create; BadList := TStringList.Create; CheckedList := TStringList.Create; try with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin AnOrder := TOrder(Items.Objects[i]); // if (AnAction = 'RN') and (AnOrder.Status=6) and (AnOrder.DGroupName = 'Inpt. Meds') and (Patient.inpatient) and (IsClinicLoc(Encounter.Location)) then <-- original line. //kt 8/8/2007 if (AnAction = 'RN') and (AnOrder.Status=6) and (AnOrder.DGroupName = DKLangConstW('fOrders_Inptx_Meds')) and (Patient.inpatient) and (IsClinicLoc(Encounter.Location)) then //kt added 8/8/2007 begin Selected[i] := False; // MessageDlg('You cannot renew inpatient medication order on a clinic location for selected inpatient.', mtWarning, [mbOK], 0); <-- original line. //kt 8/8/2007 MessageDlg(DKLangConstW('fOrders_You_cannot_renew_inpatient_medication_order_on_a_clinic_location_for_selected_inpatientx'), mtWarning, [mbOK], 0); //kt added 8/8/2007 end; if ((AnAction = 'RN') or (AnAction = 'EV')) and (AnOrder.EnteredInError = 0) then //AGP Changes PSI-04053 begin if not IsValidSchedule(AnOrder.ID) then begin if (AnAction = 'RN') then // ShowMessage('The order contains invalid schedule and can not be renewed.') <-- original line. //kt 8/8/2007 ShowMessage(DKLangConstW('fOrders_The_order_contains_invalid_schedule_and_can_not_be_renewedx')) //kt added 8/8/2007 else if (AnAction = 'EV') then // ShowMessage('The order contains invalid schedule and can not be changed to event delayed order.'); <-- original line. //kt 8/8/2007 ShowMessage(DKLangConstW('fOrders_The_order_contains_invalid_schedule_and_can_not_be_changed_to_event_delayed_orderx')); //kt added 8/8/2007 Selected[i] := False; Continue; end; end; //AGP CHANGE ORDER ENTERED IN ERROR TO ALLOW SIGNATURE AND VERIFY ACTIONS 26.23 if ((AnOrder.EnteredInError = 1) and ((AnOrder.Status = 1) or (AnOrder.Status = 13))) and ((AnAction <> 'ES') and (AnAction <> 'VR')) then begin // InfoBox(AnOrder.Text + WarningMsg + 'This order has been mark as Entered in error.', WarningTitle, MB_OK); <-- original line. //kt 8/8/2007 InfoBox(AnOrder.Text + WarningMsg + DKLangConstW('fOrders_This_order_has_been_mark_as_Entered_in_errorx'), WarningTitle, MB_OK); //kt added 8/8/2007 Selected[i] := False; Continue; end; if ((AnAction <> OA_RELEASE) and (AnOrder.EnteredInError = 0)) or (((AnOrder.EnteredInError = 1) and ((AnOrder.Status = 1) or (AnOrder.Status = 13))) and (AnAction = 'ES')) then ValidateOrderAction(AnOrder.ID, AnAction, ErrMsg) //AGP END Changes else ErrMsg := ''; if (Length(ErrMsg)>0) and (Pos('COMPLEX-PSI',ErrMsg)<1) then begin InfoBox(AnOrder.Text + WarningMsg + ErrMsg, WarningTitle, MB_OK); Selected[i] := False; Continue; end; if (Length(ErrMsg)>0) and IsFirstDoseNowOrder(AnOrder.ID) and (AnAction <> 'RL') then begin InfoBox(AnOrder.Text + WarningMsg + ErrMsg, WarningTitle, MB_OK); Selected[i] := False; Continue; end; if (Length(ErrMsg)>0) and ( (AnAction = OA_CHGEVT) or (AnAction = OA_EDREL) ) then begin InfoBox(AnOrder.Text + WarningMsg + ErrMsg, WarningTitle, MB_OK); Selected[i] := False; Continue; end; AParentID := ''; IsValidActionOnComplexOrder(AnOrder.ID, AnAction,TListBox(lstOrders),CheckedList,ErrMsg, AParentID); TOrder(Items.Objects[i]).ParentID := AParentID; if (Length(ErrMsg)=0) and (AnAction=OA_EDREL) then begin if (AnOrder.Signature = 2) and (not VerbTelPolicyOrder(AnOrder.ID)) then begin // ErrMsg := 'Need to be signed first.'; <-- original line. //kt 8/8/2007 ErrMsg := DKLangConstW('fOrders_Need_to_be_signed_firstx'); //kt added 8/8/2007 Selected[i] := False; end; end; if (AnAction = OA_CHGEVT) or (AnAction = OA_EDREL) then begin if Length(ErrMsg)>0 then begin Selected[i] := False; Badlist.Add(AnOrder.Text + '^' + ErrMsg); end else GoodList.Add(AnOrder.Text); end; if (Length(ErrMsg) > 0) and (AnAction <> OA_CHGEVT) and (AnAction <> OA_EDREL) then begin if Pos('COMPLEX-PSI',ErrMsg)>0 then ErrMsg := TX_COMPLEX; InfoBox(AnOrder.Text + WarningMsg + ErrMsg, WarningTitle, MB_OK); Selected[i] := False; end; if Selected[i] and (not OrderIsLocked(AnOrder.ID, AnAction)) then Selected[i] := False; end; //with if ((AnAction = OA_CHGEVT) or (AnAction = OA_EDREL)) then begin if (BadList.Count = 1) and (GoodList.Count < 1 ) then InfoBox(Piece(BadList[0],'^',1) + WarningMsg + Piece(BadList[0],'^',2), WarningTitle, MB_OK); if ((BadList.Count >= 1) and (GoodList.Count >= 1)) or ( BadList.Count > 1 )then DisplayOrdersForAction(BadList,GoodList,AnAction); end; finally GoodList.Free; BadList.Free; CheckedList.Free; end; end; procedure TfrmOrders.MakeSelectedList(AList: TList); { make a list of selected orders } var i: Integer; begin with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then AList.Add(Items.Objects[i]); end; function TfrmOrders.NoneSelected(const ErrMsg: string): Boolean; var i: Integer; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. // use if selcount Result := True; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin Result := False; Break; end; if Result then InfoBox(ErrMsg, TC_NOSEL, MB_OK); end; procedure TfrmOrders.RemoveSelectedFromChanges(AList: TList); { remove from Changes orders that were signed or released } var i: Integer; begin with AList do for i := 0 to Count - 1 do with TOrder(Items[i]) do Changes.Remove(CH_ORD, ID); end; procedure TfrmOrders.SynchListToOrders; { make sure lstOrders now reflects the current state of orders } var i: Integer; begin with lstOrders do for i := 0 to Items.Count - 1 do begin Items[i] := GetPlainText(TOrder(Items.Objects[i]),i); if Selected[i] then Selected[i] := False; end; lstOrders.Invalidate; end; procedure TfrmOrders.mnuActDCClick(Sender: TObject); { discontinue/cancel/delete the selected orders (as appropriate for each order } var DelEvt: boolean; SelectedList: TList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if not (FCurrentView.EventDelay.EventIFN>0) then if not EncounterPresent then Exit; // make sure have provider & location if not LockedForOrdering then Exit; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; SelectedList := TList.Create; try //if CheckOrderStatus = True then Exit; ValidateSelected(OA_DC, TX_NO_DC, TC_NO_DC); // validate DC action on each order //ActivateDeactiveRenew; AGP 26.53 TURN OFF UNTIL FINAL DECISION CAN BE MADE MakeSelectedList(SelectedList); // build list of orders that remain // updating the Changes object happens in ExecuteDCOrders, based on individual order if ExecuteDCOrders(SelectedList,DelEvt) then SynchListToOrders; UpdateUnsignedOrderAlerts(Patient.DFN); with Notifications do if Active and (FollowUp = NF_ORDER_REQUIRES_ELEC_SIGNATURE) then UnsignedOrderAlertFollowup(Piece(RecordID, U, 2)); UpdateExpiringMedAlerts(Patient.DFN); UpdateUnverifiedMedAlerts(Patient.DFN); UpdateUnverifiedOrderAlerts(Patient.DFN); finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuActRelClick(Sender: TObject); var SelectedList: TList; ALocation: Integer; AName: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL_SIGN) then Exit; if not AuthorizedUser then Exit; if not CanManualRelease then begin // ShowMessage('You are not authorized to manual release delayed orders.'); <-- original line. //kt 8/8/2007 ShowMessage(DKLangConstW('fOrders_You_are_not_authorized_to_manual_release_delayed_ordersx')); //kt added 8/8/2007 Exit; end; if Encounter.Location = 0 then // location required for ORCSEND begin LookupLocation(ALocation, AName, LOC_ALL, TX_LOC_PRINT); if ALocation > 0 then Encounter.Location := ALocation; frmFrame.DisplayEncounterText; end; if Encounter.Location = 0 then begin InfoBox(TX_SIGN_LOC, TC_REQ_LOC, MB_OK or MB_ICONWARNING); Exit; end; if not LockedForOrdering then Exit; SelectedList := TList.Create; try ValidateSelected(OA_EDREL, TX_NO_REL, TC_NO_REL); // validate realease action on each order MakeSelectedList(SelectedList); if SelectedList.Count=0 then Exit; //ExecuteReleaseOrderChecks(SelectedList); if not ExecuteReleaseEventOrders(SelectedList) then Exit; UpdateExpiringMedAlerts(Patient.DFN); UpdateUnverifiedMedAlerts(Patient.DFN); UpdateUnverifiedOrderAlerts(Patient.DFN); FCompress := True; SendMessage(Application.MainForm.Handle, UM_NEWORDER, ORDER_SIGN, 0); finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuActChgEvntClick(Sender: TObject); var SelectedList :TList; DoesDestEvtOccur: boolean; DestPtEvtID: integer; DestPtEvtName: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if not EncounterPresentEDO then Exit; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if not LockedForOrdering then Exit; //if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then // Exit; DoesDestEvtOccur := False; DestPtEvtID := 0; DestPtEvtName := ''; SelectedList := TList.Create; try if CheckOrderStatus = True then Exit; ValidateSelected(OA_CHGEVT, TX_NO_CV, TC_NO_CV); // validate Change Event action on each order MakeSelectedList(SelectedList); // build list of orders that remain if ExecuteChangeEvt(SelectedList,DoesDestEvtOccur,DestPtEvtId,DestPtEvtName) then SynchListToOrders else Exit; UpdateUnsignedOrderAlerts(Patient.DFN); with Notifications do if Active and (FollowUp = NF_ORDER_REQUIRES_ELEC_SIGNATURE) then UnsignedOrderAlertFollowup(Piece(RecordID, U, 2)); UpdateExpiringMedAlerts(Patient.DFN); UpdateUnverifiedMedAlerts(Patient.DFN); UpdateUnverifiedOrderAlerts(Patient.DFN); finally SelectedList.Free; UnlockIfAble; if DoesDestEvtOccur then PtEvtCompleted(DestPtEvtID,DestPtEvtName); end; end; procedure TfrmOrders.mnuActHoldClick(Sender: TObject); { place the selected orders on hold, creates new orders } var SelectedList: TList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if not EncounterPresent then Exit; // make sure have provider & location if not LockedForOrdering then Exit; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; SelectedList := TList.Create; try if CheckOrderStatus = True then Exit; ValidateSelected(OA_HOLD, TX_NO_HOLD, TC_NO_HOLD); // validate hold action on each order MakeSelectedList(SelectedList); // build list of orders that remain if ExecuteHoldOrders(SelectedList) then // confirm & perform hold begin AddSelectedToChanges(SelectedList); // send held orders to changes SynchListToOrders; // ensure ID's in lstOrders are correct end; finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuActUnholdClick(Sender: TObject); { release orders from hold, no signature required - no new orders created } var SelectedList: TList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if not EncounterPresent then Exit; if not LockedForOrdering then Exit; SelectedList := TList.Create; try if CheckOrderStatus = True then Exit; ValidateSelected(OA_UNHOLD, TX_NO_UNHOLD, TC_NO_UNHOLD); // validate release hold action MakeSelectedList(SelectedList); // build list of selected orders if ExecuteUnholdOrders(SelectedList) then begin AddSelectedToChanges(SelectedList); SynchListToOrders; end; finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuActRenewClick(Sender: TObject); { renew the selected orders (as appropriate for each order } var SelectedList: TList; ParntOrder: TOrder; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if not EncounterPresent then Exit; // make sure have provider & location if not LockedForOrdering then Exit; SelectedList := TList.Create; try if CheckOrderStatus = True then Exit; ValidateSelected(OA_RENEW, TX_NO_RENEW, TC_NO_RENEW); // validate renew action for each MakeSelectedList(SelectedList); // build list of orders that remain if Length(FParentComplexOrderID)>0 then begin ParntOrder := GetOrderByIFN(FParentComplexOrderID); if CharAt(ParntOrder.Text,1)='+' then ParntOrder.Text := Copy(ParntOrder.Text,2,Length(ParntOrder.Text)); // if Pos('First Dose NOW',ParntOrder.Text)>1 then <-- original line. //kt 8/8/2007 if Pos(DKLangConstW('fOrders_First_Dose_NOW'),ParntOrder.Text)>1 then //kt added 8/8/2007 // Delete(ParntOrder.text, Pos('First Dose NOW',ParntOrder.Text), Length('First Dose NOW')); <-- original line. //kt 8/8/2007 Delete(ParntOrder.text, Pos(DKLangConstW('fOrders_First_Dose_NOW'),ParntOrder.Text), Length(DKLangConstW('fOrders_First_Dose_NOW'))); //kt added 8/8/2007 SelectedList.Add(ParntOrder); FParentComplexOrderID := ''; end; if ExecuteRenewOrders(SelectedList) then begin AddSelectedToChanges(SelectedList); // should this happen in ExecuteRenewOrders? SynchListToOrders; end; UpdateExpiringMedAlerts(Patient.DFN); finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuActAlertClick(Sender: TObject); { set selected orders to send alerts when results are available, - no new orders created } var SelectedList: TList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; SelectedList := TList.Create; try ValidateSelected(OA_ALERT, TX_NO_ALERT, TC_NO_ALERT); // validate release hold action MakeSelectedList(SelectedList); // build list of selected orders ExecuteAlertOrders(SelectedList); finally SelectedList.Free; end; end; procedure TfrmOrders.mnuActFlagClick(Sender: TObject); var i: Integer; AnOrder: TOrder; ErrMsg: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin AnOrder := TOrder(Items.Objects[i]); ValidateOrderAction(AnOrder.ID, OA_FLAG, ErrMsg); if Length(ErrMsg) > 0 then InfoBox(AnOrder.Text + TX_NO_FLAG + ErrMsg, TC_NO_FLAG, MB_OK) else ExecuteFlagOrder(AnOrder); Selected[i] := False; end; lstOrders.Invalidate; end; procedure TfrmOrders.mnuActUnflagClick(Sender: TObject); var i: Integer; AnOrder: TOrder; ErrMsg: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin AnOrder := TOrder(Items.Objects[i]); ValidateOrderAction(AnOrder.ID, OA_UNFLAG, ErrMsg); if Length(ErrMsg) > 0 then InfoBox(AnOrder.Text + TX_NO_UNFLAG + ErrMsg, TC_NO_UNFLAG, MB_OK) else ExecuteUnflagOrder(AnOrder); Selected[i] := False; end; lstOrders.Invalidate; if Notifications.Active then AutoUnflagAlertedOrders(Patient.DFN, Piece(Notifications.RecordID, U, 2)); end; procedure TfrmOrders.mnuActCompleteClick(Sender: TObject); { complete generic orders, no signature required - no new orders created } var SelectedList: TList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; SelectedList := TList.Create; try ValidateSelected(OA_COMPLETE, TX_NO_CPLT, TC_NO_CPLT); // validate completing of order MakeSelectedList(SelectedList); // build list of selected orders if ExecuteCompleteOrders(SelectedList) then SynchListToOrders; finally SelectedList.Free; end; end; procedure TfrmOrders.mnuActVerifyClick(Sender: TObject); { verify orders, signature required but no new orders created } var SelectedList: TList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedToVerify then Exit; SelectedList := TList.Create; try ValidateSelected(OA_VERIFY, TX_NO_VERIFY, TC_NO_VERIFY); // make sure order can be verified MakeSelectedList(SelectedList); // build list of selected orders if ExecuteVerifyOrders(SelectedList, False) then SynchListToOrders; finally SelectedList.Free; end; end; procedure TfrmOrders.mnuActChartRevClick(Sender: TObject); var SelectedList: TList; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedToVerify then Exit; SelectedList := TList.Create; try ValidateSelected(OA_CHART, TX_NO_VERIFY, TC_NO_VERIFY); // make sure order can be verified MakeSelectedList(SelectedList); // build list of selected orders if ExecuteVerifyOrders(SelectedList, True) then SynchListToOrders; finally SelectedList.Free; end; end; procedure TfrmOrders.mnuActCommentClick(Sender: TObject); { loop thru selected orders, allowing ward comments to be edited for each } var i: Integer; AnOrder: TOrder; ErrMsg: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin AnOrder := TOrder(Items.Objects[i]); ValidateOrderAction(AnOrder.ID, OA_COMMENT, ErrMsg); if Length(ErrMsg) > 0 then InfoBox(AnOrder.Text + TX_NO_CMNT + ErrMsg, TC_NO_CMNT, MB_OK) else ExecuteWardComments(AnOrder); Selected[i] := False; end; end; procedure TfrmOrders.mnuActChangeClick(Sender: TObject); { loop thru selected orders, present ordering dialog for each with defaults to selected order } var i: Integer; ChangeIFNList: TStringList; ASourceOrderID : string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if not EncounterPresentEDO then exit; ChangeIFNList := TStringList.Create; try if NoneSelected(TX_NOSEL) then Exit; if CheckOrderStatus = True then Exit; ValidateSelected(OA_CHANGE, TX_NO_CHANGE, TC_NO_CHANGE); if (FCurrentView.EventDelay.PtEventIFN>0) and PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName) then Exit; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin ChangeIFNList.Add(TOrder(Items.Objects[i]).ID); ASourceOrderID := TOrder(lstOrders.Items.Objects[i]).ID; end; if ChangeIFNList.Count > 0 then ChangeOrders(ChangeIFNList, FCurrentView.EventDelay); // do we need to deselect the orders? finally ChangeIFNList.Free; end; RedrawOrderList; end; procedure TfrmOrders.mnuActCopyClick(Sender: TObject); { loop thru selected orders, present ordering dialog for each with defaults to selected order } var ThePtEvtID: string; i: Integer; IsNewEvent, needVerify, NewOrderCreated: boolean; CopyIFNList: TStringList; DestPtEvtID: integer; DestPtEvtName: string; DoesDestEvtOccur: boolean; TempEvent: TOrderDelayEvent; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if not EncounterPresentEDO then Exit; DestPtEvtID := 0; DestPtEvtName := ''; DoesDestEvtOccur := False; needVerify := True; CopyIFNList := TStringList.Create; try if NoneSelected(TX_NOSEL) then Exit; NewOrderCreated := False; if CheckOrderStatus = True then Exit; ValidateSelected(OA_COPY, TX_NO_COPY, TC_NO_COPY); if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then CopyIFNList.Add(TOrder(Items.Objects[i]).ID); IsNewEvent := False; //if not ShowMsgOn(CopyIFNList.Count = 0, TX_NOSEL, TC_NOSEL) then if CopyIFNList.Count > 0 then if SetViewForCopy(IsNewEvent,DoesDestEvtOccur,DestPtEvtId,DestPtEvtName) then begin if DoesDestEvtOccur then begin TempEvent.TheParent := TParentEvent.Create; TempEvent.EventIFN := 0; TempEvent.PtEventIFN := 0; TempEvent.EventType := #0; CopyOrders(CopyIFNList, TempEvent, DoesDestEvtOccur, needVerify); if ImmdCopyAct then ImmdCopyAct := False; PtEvtCompleted(DestPtEvtID,DestPtEvtName); Exit; end; FCurrentView.EventDelay.EventName := DestPtEvtName; if (FCurrentView.EventDelay.EventIFN > 0) and (FCurrentView.EventDelay.EventType <> 'D') then begin needVerify := False; uAutoAC := True; end; TempEvent.EventName := DestPtEvtName; //FCurrentView.EventDelay.EventName; TempEvent.PtEventIFN := DestPtEvtId; //FCurrentView.EventDelay.PtEventIFN; if (FCurrentView.EventDelay.EventType = 'D') or ((not Patient.InPatient) and (FCurrentView.EventDelay.EventType = 'T')) then begin if TransferOrders(CopyIFNList, FCurrentView.EventDelay, DoesDestEvtOccur, needVerify) then NewOrderCreated := True; end else if (not Patient.Inpatient) and (FCurrentView.EventDelay.EventType = 'A') then begin if TransferOrders(CopyIFNList, FCurrentView.EventDelay, DoesDestEvtOccur, needVerify) then NewOrderCreated := True; end else begin if CopyOrders(CopyIFNList, FCurrentView.EventDelay, DoesDestEvtOccur, needVerify) then NewOrderCreated := True; end; if (not NewOrderCreated) and Assigned(FCurrentView) and (FCurrentView.EventDelay.EventIFN>0) then if isExistedEvent(Patient.DFN,IntToStr(FCurrentView.EventDelay.EventIFN),ThePtEvtID) then begin if PtEvtEmpty(ThePtEvtID) then begin DeletePtEvent(ThePtEvtID); ChangesUpdate(ThePtEvtID); InitOrderSheetsForEvtDelay; lstSheets.ItemIndex := 0; lstSheetsClick(self); end; end; if ImmdCopyAct then ImmdCopyAct := False; if DoesDestEvtOccur then PtEvtCompleted(DestPtEvtId, DestPtEvtName); end; finally uAutoAC := False; CopyIFNList.Free; end; end; procedure TfrmOrders.mnuActReleaseClick(Sender: TObject); { release orders to services without a signature, do appropriate prints } var SelectedList: TList; ALocation: Integer; AName: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if Encounter.Location = 0 then // location required for ORCSEND begin LookupLocation(ALocation, AName, LOC_ALL, TX_LOC_PRINT); if ALocation > 0 then Encounter.Location := ALocation; frmFrame.DisplayEncounterText; end; if Encounter.Location = 0 then begin InfoBox(TX_REL_LOC, TC_REQ_LOC, MB_OK or MB_ICONWARNING); Exit; end; if not LockedForOrdering then Exit; SelectedList := TList.Create; try ValidateSelected(OA_RELEASE, TX_NO_REL, TC_NO_REL); // validate release action on each order MakeSelectedList(SelectedList); // build list of orders that remain ExecuteReleaseOrderChecks(SelectedList); // call order checking if not uInit.TimedOut then if ExecuteReleaseOrders(SelectedList) then // confirm, then perform release RemoveSelectedFromChanges(SelectedList); // remove released orders from Changes //SaveSignOrders; UpdateUnsignedOrderAlerts(Patient.DFN); with Notifications do if Active and (FollowUp = NF_ORDER_REQUIRES_ELEC_SIGNATURE) then UnsignedOrderAlertFollowup(Piece(RecordID, U, 2)); UpdateExpiringMedAlerts(Patient.DFN); UpdateUnverifiedMedAlerts(Patient.DFN); UpdateUnverifiedOrderAlerts(Patient.DFN); if not uInit.TimedOut then SendMessage(Application.MainForm.Handle, UM_NEWORDER, ORDER_SIGN, 0); finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuActOnChartClick(Sender: TObject); { mark orders orders as signed on chart, release to services, do appropriate prints } var SelectedList: TList; ALocation: Integer; AName: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL) then Exit; if not AuthorizedUser then Exit; if Encounter.Location = 0 then // location required for ORCSEND begin LookupLocation(ALocation, AName, LOC_ALL, TX_LOC_PRINT); if ALocation > 0 then Encounter.Location := ALocation; frmFrame.DisplayEncounterText; end; if Encounter.Location = 0 then begin InfoBox(TX_CHART_LOC, TC_REQ_LOC, MB_OK or MB_ICONWARNING); Exit; end; if not LockedForOrdering then Exit; SelectedList := TList.Create; try ValidateSelected(OA_ONCHART, TX_NO_CHART, TC_NO_CHART); // validate sign on chart for each MakeSelectedList(SelectedList); // build list of orders that remain ExecuteReleaseOrderChecks(SelectedList); // call order checking if not uInit.TimedOut then if ExecuteOnChartOrders(SelectedList) then // confirm, then perform release RemoveSelectedFromChanges(SelectedList); // remove released orders from Changes UpdateUnsignedOrderAlerts(Patient.DFN); with Notifications do if Active and (FollowUp = NF_ORDER_REQUIRES_ELEC_SIGNATURE) then UnsignedOrderAlertFollowup(Piece(RecordID, U, 2)); UpdateExpiringMedAlerts(Patient.DFN); UpdateUnverifiedMedAlerts(Patient.DFN); UpdateUnverifiedOrderAlerts(Patient.DFN); if not uInit.TimedOut then SendMessage(Application.MainForm.Handle, UM_NEWORDER, ORDER_SIGN, 0); finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuActSignClick(Sender: TObject); { obtain signature for orders, release them to services, do appropriate prints } var SelectedList: TList; ALocation: Integer; AName: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; if NoneSelected(TX_NOSEL_SIGN) then Exit; if not AuthorizedUser then Exit; if (User.OrderRole <> 2) and (User.OrderRole <> 3) then begin // ShowMessage('Sorry, You don''t have the permission to release selected orders manually'); <-- original line. //kt 8/8/2007 ShowMessage(DKLangConstW('fOrders_Sorryx_You_donxxt_have_the_permission_to_release_selected_orders_manually')); //kt added 8/8/2007 Exit; end; if not (FCurrentView.EventDelay.EventIFN>0) then begin if Encounter.Location = 0 then // location required for ORCSEND begin LookupLocation(ALocation, AName, LOC_ALL, TX_LOC_PRINT); if ALocation > 0 then Encounter.Location := ALocation; frmFrame.DisplayEncounterText; end; if Encounter.Location = 0 then begin InfoBox(TX_SIGN_LOC, TC_REQ_LOC, MB_OK or MB_ICONWARNING); Exit; end; end; if not LockedForOrdering then Exit; if (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; SelectedList := TList.Create; try ValidateSelected(OA_SIGN, TX_NO_SIGN, TC_NO_SIGN); // validate sign action on each order MakeSelectedList(SelectedList); {billing Aware} if BILLING_AWARE then begin UBACore.rpcBuildSCIEList(SelectedList); // build list of orders and Billable Status UBACore.CompleteUnsignedBillingInfo(rpcGetUnsignedOrdersBillingData(OrderListSCEI) ); end; {billing Aware} ExecuteReleaseOrderChecks(SelectedList); // call order checking if not uInit.TimedOut then if ExecuteSignOrders(SelectedList) // confirm, sign & release then RemoveSelectedFromChanges(SelectedList); // remove signed orders from Changes UpdateUnsignedOrderAlerts(Patient.DFN); with Notifications do if Active and (FollowUp = NF_ORDER_REQUIRES_ELEC_SIGNATURE) then UnsignedOrderAlertFollowup(Piece(RecordID, U, 2)); if Active then begin UpdateExpiringMedAlerts(Patient.DFN); UpdateUnverifiedMedAlerts(Patient.DFN); UpdateUnverifiedOrderAlerts(Patient.DFN); end; if not uInit.TimedOut then begin SendMessage(Application.MainForm.Handle, UM_NEWORDER, ORDER_SIGN, 0); if lstSheets.ItemIndex < 0 then lstSheets.ItemIndex := 0; end; finally SelectedList.Free; UnlockIfAble; end; end; procedure TfrmOrders.mnuOptSaveQuickClick(Sender: TObject); begin inherited; QuickOrderSave; end; procedure TfrmOrders.mnuOptEditCommonClick(Sender: TObject); begin inherited; QuickOrderListEdit; end; procedure TfrmOrders.ProcessNotifications; var OrderIEN, ErrMsg: string; BigOrderID: string; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. //if not User.NoOrdering then LoadWriteOrders(lstWrite.Items) else lstWrite.Clear; {**KCM**} OrderIEN := IntToStr(ExtractInteger(Notifications.AlertData)); case Notifications.FollowUp of NF_FLAGGED_ORDERS : begin // ViewAlertedOrders('', STS_FLAGGED, '', False, True, 'All Services, Flagged'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_FLAGGED, '', False, True, DKLangConstW('fOrders_All_Servicesx_Flagged')); //kt added 8/8/2007 AutoUnflagAlertedOrders(Patient.DFN, Piece(Notifications.RecordID, U, 2)); end; NF_ORDER_REQUIRES_ELEC_SIGNATURE : begin // ViewAlertedOrders('', STS_UNSIGNED, '', False, True, 'All Services, Unsigned'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_UNSIGNED, '', False, True, DKLangConstW('fOrders_All_Servicesx_Unsigned')); //kt added 8/8/2007 UnsignedOrderAlertFollowup(Piece(Notifications.RecordID, U, 2)); end; NF_IMAGING_REQUEST_CANCEL_HELD : if Pos('HELD', UpperCase(Notifications.Text)) > 0 then begin // ViewAlertedOrders(OrderIEN, STS_HELD, 'IMAGING', False, True, 'Imaging, On Hold'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_HELD, 'IMAGING', False, True, DKLangConstW('fOrders_Imagingx_On_Hold')); //kt added 8/8/2007 Notifications.Delete; end else begin // ViewAlertedOrders(OrderIEN, STS_DISCONTINUED, 'IMAGING', False, True, 'Imaging, Cancelled'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_DISCONTINUED, 'IMAGING', False, True, DKLangConstW('fOrders_Imagingx_Cancelled')); //kt added 8/8/2007 Notifications.Delete; end; NF_SITE_FLAGGED_RESULTS : begin // ViewAlertedOrders(OrderIEN, STS_COMPLETE, '', False, True, 'All Services, Site-Flagged'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_COMPLETE, '', False, True, DKLangConstW('fOrders_All_Servicesx_SitexFlagged')); //kt added 8/8/2007 with lstOrders do if Selected[ItemIndex] then begin BigOrderID := TOrder(Items.Objects[ItemIndex]).ID; if Length(Piece(BigOrderID,';',1)) > 0 then begin // ReportBox(ResultOrder(BigOrderID), 'Order Results - ' + BigOrderID, True); <-- original line. //kt 8/8/2007 ReportBox(ResultOrder(BigOrderID), DKLangConstW('fOrders_Order_Results_x') + BigOrderID, True); //kt added 8/8/2007 Notifications.Delete; end; end; end; NF_ORDERER_FLAGGED_RESULTS : begin // ViewAlertedOrders(OrderIEN, STS_COMPLETE, '', False, True, 'All Services, Orderer-Flagged'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_COMPLETE, '', False, True, DKLangConstW('fOrders_All_Servicesx_OrdererxFlagged')); //kt added 8/8/2007 with lstOrders do if Selected[ItemIndex] then begin BigOrderID := TOrder(Items.Objects[ItemIndex]).ID; if Length(Piece(BigOrderID,';',1)) > 0 then begin // ReportBox(ResultOrder(BigOrderID), 'Order Results - ' + BigOrderID, True); <-- original line. //kt 8/8/2007 ReportBox(ResultOrder(BigOrderID), DKLangConstW('fOrders_Order_Results_x') + BigOrderID, True); //kt added 8/8/2007 Notifications.Delete; end; end; end; NF_ORDER_REQUIRES_COSIGNATURE : // ViewAlertedOrders('', STS_UNSIGNED, '', False, True, 'All Services, Unsigned'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_UNSIGNED, '', False, True, DKLangConstW('fOrders_All_Servicesx_Unsigned')); //kt added 8/8/2007 NF_LAB_ORDER_CANCELED : begin // ViewAlertedOrders(OrderIEN, STS_DISCONTINUED, 'LABORATORY', False, True, 'Lab, Cancelled'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_DISCONTINUED, 'LABORATORY', False, True, DKLangConstW('fOrders_Labx_Cancelled')); //kt added 8/8/2007 Notifications.Delete; end; NF_DNR_EXPIRING : // ViewAlertedOrders('', STS_EXPIRING, '', False, True, 'All Services, Expiring'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_EXPIRING, '', False, True, DKLangConstW('fOrders_All_Servicesx_Expiring')); //kt added 8/8/2007 NF_MEDICATIONS_EXPIRING_INPT : begin // ViewAlertedOrders('', STS_EXPIRING, 'PHARMACY', False, True, 'Medications, Expiring'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_EXPIRING, 'PHARMACY', False, True, DKLangConstW('fOrders_Medicationsx_Expiring')); //kt added 8/8/2007 end; NF_MEDICATIONS_EXPIRING_OUTPT : begin // ViewAlertedOrders('', STS_EXPIRING, 'PHARMACY', False, True, 'Medications, Expiring'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_EXPIRING, 'PHARMACY', False, True, DKLangConstW('fOrders_Medicationsx_Expiring')); //kt added 8/8/2007 end; NF_UNVERIFIED_MEDICATION_ORDER : begin // ViewAlertedOrders(OrderIEN, STS_UNVERIFIED, 'PHARMACY', False, True, 'Medications, Unverified'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_UNVERIFIED, 'PHARMACY', False, True, DKLangConstW('fOrders_Medicationsx_Unverified')); //kt added 8/8/2007 if StrToIntDef(OrderIEN, 0) > 0 then {**REV**} begin // Delete alert if user can't verify ValidateOrderAction(OrderIEN, OA_VERIFY, ErrMsg); if Pos('COMPLEX-PSI',ErrMsg)>0 then ErrMsg := TX_COMPLEX; if Length(ErrMsg) > 0 then Notifications.Delete; end; UpdateUnverifiedMedAlerts(Patient.DFN); end; NF_NEW_ORDER : begin // ViewAlertedOrders(OrderIEN, STS_RECENT, '', False, True, 'All Services, Recent Activity'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_RECENT, '', False, True, DKLangConstW('fOrders_All_Servicesx_Recent_Activity')); //kt added 8/8/2007 Notifications.Delete; end; NF_UNVERIFIED_ORDER : begin // ViewAlertedOrders(OrderIEN, STS_UNVERIFIED, '', False, True, 'All Services, Unverified'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_UNVERIFIED, '', False, True, DKLangConstW('fOrders_All_Servicesx_Unverified')); //kt added 8/8/2007 if StrToIntDef(OrderIEN, 0) > 0 then {**REV**} begin // Delete alert if user can't verify ValidateOrderAction(OrderIEN, OA_SIGN, ErrMsg); if Pos('COMPLEX-PSI',ErrMsg)>0 then ErrMsg := TX_COMPLEX; if Length(ErrMsg) > 0 then Notifications.Delete; end; UpdateUnverifiedOrderAlerts(Patient.DFN); end; NF_FLAGGED_OI_RESULTS : begin // ViewAlertedOrders(OrderIEN, STS_COMPLETE, '', False, True, 'All Services, Orderable Item Flagged'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_COMPLETE, '', False, True, DKLangConstW('fOrders_All_Servicesx_Orderable_Item_Flagged')); //kt added 8/8/2007 with lstOrders do if Selected[ItemIndex] then begin BigOrderID := TOrder(Items.Objects[ItemIndex]).ID; if Length(Piece(BigOrderID,';',1)) > 0 then begin // ReportBox(ResultOrder(BigOrderID), 'Order Results - ' + BigOrderID, True); <-- original line. //kt 8/8/2007 ReportBox(ResultOrder(BigOrderID), DKLangConstW('fOrders_Order_Results_x') + BigOrderID, True); //kt added 8/8/2007 Notifications.Delete; end; end; end; NF_DC_ORDER : begin // ViewAlertedOrders(OrderIEN, STS_RECENT, '', False, True, 'All Services, Recent Activity'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_RECENT, '', False, True, DKLangConstW('fOrders_All_Servicesx_Recent_Activity')); //kt added 8/8/2007 Notifications.Delete; end; NF_FLAGGED_OI_EXP_INPT : begin // ViewAlertedOrders('', STS_EXPIRING, '', False, True, 'All Services, Expiring'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_EXPIRING, '', False, True, DKLangConstW('fOrders_All_Servicesx_Expiring')); //kt added 8/8/2007 UpdateExpiringFlaggedOIAlerts(Patient.DFN, NF_FLAGGED_OI_EXP_INPT); end; NF_FLAGGED_OI_EXP_OUTPT : begin // ViewAlertedOrders('', STS_EXPIRING, '', False, True, 'All Services, Expiring'); <-- original line. //kt 8/8/2007 ViewAlertedOrders('', STS_EXPIRING, '', False, True, DKLangConstW('fOrders_All_Servicesx_Expiring')); //kt added 8/8/2007 UpdateExpiringFlaggedOIAlerts(Patient.DFN, NF_FLAGGED_OI_EXP_OUTPT); end; NF_CONSULT_REQUEST_CANCEL_HOLD : begin OrderIEN := GetConsultOrderNumber(Notifications.AlertData); // ViewAlertedOrders(OrderIEN, STS_DISCONTINUED, 'CONSULTS', False, True, 'Consults, Cancelled'); <-- original line. //kt 8/8/2007 ViewAlertedOrders(OrderIEN, STS_DISCONTINUED, DKLangConstW('fOrders_CONSULTS'), False, True, DKLangConstW('fOrders_Consultsx_Cancelled')); //kt added 8/8/2007 with lstOrders do Selected[ItemIndex] := True; end; else mnuViewUnsignedClick(Self); end; end; procedure TfrmOrders.ViewAlertedOrders(OrderIEN: string; Status: integer; DispGrp: string; BySvc, InvDate: boolean; Title: string); {**KCM**} var i, ADGroup: integer; DGroups: TStrings; begin DGroups := TStringList.Create; try ADGroup := DGroupAll; if Length(DispGrp) > 0 then begin ListDGroupAll(DGroups); for i := 0 to DGroups.Count-1 do if Piece(DGroups.Strings[i], U, 2) = DispGrp then ADGroup := StrToIntDef(Piece(DGroups.Strings[i], U, 1),0); end; finally DGroups.Free; end; SetOrderView(Status, ADGroup, Title, True); with lstOrders do begin if Length(OrderIEN) > 0 then begin for i := 0 to Items.Count-1 do if Piece(TOrder(Items.Objects[i]).ID, ';', 1) = OrderIEN then begin ItemIndex := i; Selected[i] := True; break; end; end else for i := 0 to Items.Count-1 do if Piece(TOrder(Items.Objects[i]).ID, ';', 1) <> '0' then Selected[i] := True; if SelCount = 0 then Notifications.Delete; end; end; procedure TfrmOrders.pnlRightResize(Sender: TObject); begin inherited; imgHide.Left := pnlRight.Width - 19; end; procedure TfrmOrders.RequestPrint; { obtain print devices for selected orders, do appropriate prints } //const //TX_NEW_LOC1 = 'The patient''s location has changed to '; <-- original line. //kt 8/8/2007 //TX_NEW_LOC2 = '.' + CRLF + 'Should the orders be printed using the new location?'; <-- original line. //kt 8/8/2007 //TC_NEW_LOC = 'New Patient Location'; <-- original line. //kt 8/8/2007 var SelectedList: TStringList; ALocation, i: Integer; AName, ASvc, DeviceInfo: string; Nature: char; PrintIt: Boolean; TX_NEW_LOC1 : string; //kt TX_NEW_LOC2 : string; //kt TC_NEW_LOC : string; //kt begin SetupVars; //kt added 8/8/2007 to replace constants with vars. TX_NEW_LOC1 := DKLangConstW('fOrders_The_patientxxs_location_has_changed_to'); //kt added 8/8/2007 TX_NEW_LOC2 := '.' + CRLF + DKLangConstW('fOrders_Should_the_orders_be_printed_using_the_new_locationx'); //kt added 8/8/2007 TC_NEW_LOC := DKLangConstW('fOrders_New_Patient_Location'); //kt added 8/8/2007 inherited; if NoneSelected(TX_NOSEL) then Exit; //if not AuthorizedUser then Exit; removed in v17.1 (RV) SUX-0901-41044 SelectedList := TStringList.Create; Nature := #0; try with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then SelectedList.Add(Piece(TOrder(Items.Objects[i]).ID, U, 1)); CurrentLocationForPatient(Patient.DFN, ALocation, AName, ASvc); if (ALocation > 0) and (ALocation <> Encounter.Location) then begin //gary Encounter.Location := frmClinicWardMeds.ClinicOrWardLocation(Alocation); // if InfoBox(TX_NEW_LOC1 + AName + TX_NEW_LOC2, TC_NEW_LOC, MB_YESNO) = IDYES // then Encounter.Location := ALocation; end; if Encounter.Location = 0 then Encounter.Location := CommonLocationForOrders(SelectedList); if Encounter.Location = 0 then // location required for DEVINFO begin LookupLocation(ALocation, AName, LOC_ALL, TX_LOC_PRINT); if ALocation > 0 then Encounter.Location := ALocation; end; frmFrame.DisplayEncounterText; if Encounter.Location <> 0 then begin SetupOrdersPrint(SelectedList, DeviceInfo, Nature, False, PrintIt); if PrintIt then ExecutePrintOrders(SelectedList, DeviceInfo); SynchListToOrders; end else InfoBox(TX_PRINT_LOC, TC_REQ_LOC, MB_OK or MB_ICONWARNING); finally SelectedList.Free; end; end; procedure TfrmOrders.btnDelayedOrderClick(Sender: TObject); //const //TX_DELAYCAP = ' Delay release of new order(s) until'; <-- original line. //kt 8/8/2007 var AnEvent: TOrderDelayEvent; ADlgLst: TStringList; IsRealeaseNow: boolean; TX_DELAYCAP : string; //kt begin inherited; TX_DELAYCAP := DKLangConstW('fOrders_Delay_release_of_new_orderxsx_until'); //kt added 8/8/2007 if not EncounterPresentEDO then Exit; AnEvent.EventType := #0; AnEvent.TheParent := TParentEvent.Create; AnEvent.EventIFN := 0; AnEvent.PtEventIFN := 0; AnEvent.EventName := ''; if not CloseOrdering then Exit; FCalledFromWDO := True; //frmFrame.UpdatePtInfoOnRefresh; IsRealeaseNow := False; FCompress := True; //treat as lstSheet click ADlgLst := TStringList.Create; //SetEvtIFN(AnEvent.EventIFN); if ShowDelayedEventsTreatingSepecialty(TX_DELAYCAP,AnEvent,ADlgLst,IsRealeaseNow) then begin FEventForCopyActiveOrders := AnEvent; FAskForCancel := False; ResetOrderPage(AnEvent,ADlgLst, IsRealeaseNow); end; FCompress := False; FCalledFromWDO := False; if (FCurrentView <> nil) and (FCurrentView.EventDelay.PtEventIFN>0) and (PtEvtCompleted(FCurrentView.EventDelay.PtEventIFN, FCurrentView.EventDelay.EventName)) then Exit; end; procedure TfrmOrders.CompressEventSection; begin hdrOrders.Sections[0].MaxWidth := 0; hdrOrders.Sections[0].MinWidth := 0; hdrOrders.Sections[0].Width := 0; hdrOrders.Sections[0].Text := ''; end; procedure TfrmOrders.ExpandEventSection; begin hdrOrders.Sections[0].MaxWidth := 10000; hdrOrders.Sections[0].MinWidth := 50; if FEvtColWidth > 0 then hdrOrders.Sections[0].Width := EvtColWidth else hdrOrders.Sections[0].Width := 65; //hdrOrders.Sections[0].Text := 'Event'; <-- original line. //kt 8/8/2007 hdrOrders.Sections[0].Text := DKLangConstW('fOrders_Event'); //kt added 8/8/2007 end; {procedure TfrmOrders.SetEvtIFN(var AnEvtIFN: integer); var APtEvntID,AnEvtInfo: string; begin if lstSheets.ItemIndex < 0 then APtEvntID := Piece(lstSheets.Items[0],'^',1) else APtEvntID := Piece(lstSheets.Items[lstSheets.ItemIndex],'^',1); if CharAt(APtEvntID,1) <> 'C' then begin if Pos('EVT',APtEvntID)>0 then AnEvtIFN := StrToIntDef(Piece(APtEvntID,';',1),0) else begin AnEvtInfo := EventInfo(APtEvntID); AnEvtIFN := StrToIntDef(Piece(AnEvtInfo,'^',2),0); end; end else AnEvtIFN := 0; end;} procedure TfrmOrders.InitOrderSheetsForEvtDelay; begin InitOrderSheets; DfltViewForEvtDelay; end; procedure TfrmOrders.DfltViewForEvtDelay; begin inherited; if not CanChangeOrderView then Exit; lstSheets.ItemIndex := 0; FCurrentView := TOrderView(lstSheets.Items.Objects[0]); LoadOrderViewDefault(FCurrentView); lstSheets.Items[0] := 'C;0^' + FCurrentView.ViewName; end; procedure TfrmOrders.EventRealeasedOrder1Click(Sender: TObject); var AnOrderView: TOrderView; begin inherited; if not CanChangeOrderView then Exit; AnOrderView := TOrderView.Create; AnOrderView.Filter := STS_ACTIVE; AnOrderView.DGroup := DGroupAll; //AnOrderView.ViewName := 'All Services, Active'; <-- original line. //kt 8/8/2007 AnOrderView.ViewName := DKLangConstW('fOrders_All_Servicesx_Active'); //kt added 8/8/2007 AnOrderView.InvChrono := True; AnOrderView.ByService := True; AnOrderView.CtxtTime := 0; AnOrderView.TextView := 0; AnOrderView.EventDelay.EventType := 'C'; AnOrderView.EventDelay.Specialty := 0; AnOrderView.EventDelay.Effective := 0; AnOrderView.EventDelay.EventIFN := 0; //AnOrderView.EventDelay.EventName := 'All Services, Active'; <-- original line. //kt 8/8/2007 AnOrderView.EventDelay.EventName := DKLangConstW('fOrders_All_Servicesx_Active'); //kt added 8/8/2007 SelectEvtReleasedOrders(AnOrderView); with AnOrderView do if Changed then begin mnuActRel.Visible := False; popOrderRel.Visible := False; FCompress := True; lstSheets.ItemIndex := -1; // lblWrite.Caption := 'Write Orders'; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write_Orders'); //kt added 8/8/2007 lstWrite.Clear; LoadWriteOrders(lstWrite.Items); if AnOrderView.EventDelay.PtEventIFN > 0 then RefreshOrderList(FROM_SERVER,IntToStr(AnOrderView.EventDelay.PtEventIFN)); lblOrders.Caption := AnOrderView.ViewName; if ByService then begin if InvChrono then FDfltSort := OVS_CATINV else FDfltSort := OVS_CATFWD; end else begin if InvChrono then FDfltSort := OVS_INVERSE else FDfltSort := OVS_FORWARD; end; end; if FFromDCRelease then FFromDCRelease := False; end; procedure TfrmOrders.ResetOrderPage(AnEvent: TOrderDelayEvent; ADlgLst: TStringList; IsRealeaseNow: boolean); var i,AnIndex,EFilter: integer; APtEvtID: string; // ptr to #100.2 theEvtID: string; // ptr to #100.5 tmptPtEvtID: string; AnOrderView: TOrderView; AnDlgStr: string; begin EFilter := 0; theEvtID := ''; AnDlgStr := ''; IsDefaultDlg := False; AnOrderView := TOrderView.Create; if FCurrentView = nil then begin FCurrentView := TOrderView.Create; with FCurrentView do begin InvChrono := True; ByService := True; end; end; if IsRealeaseNow then lstSheets.ItemIndex := 0; if AnEvent.EventIFN > 0 then with lstSheets do begin AnIndex := -1; for i := 0 to Items.Count - 1 do begin theEvtID := GetEvtIFN(i); if theEvtID = IntToStr(AnEvent.EventIFN) then begin AnIndex := i; theEvtID := ''; Break; end; theEvtID := ''; end; if AnIndex > -1 then begin NewEvent := False; ItemIndex := AnIndex; lstSheetsClick(Self); end else begin NewEvent := True; if TypeOfExistedEvent(Patient.DFN,AnEvent.EventIFN) = 2 then begin SaveEvtForOrder(Patient.DFN, AnEvent.EventIFN, ''); AnEvent.IsNewEvent := False; if (ADlgLst.Count > 0) and (Piece(ADlgLst[0],'^',2) <> 'SET') then ADlgLst.Delete(0); end; if (TypeOfExistedEvent(Patient.DFN,AnEvent.EventIFN) = 0) and (AnEvent.TheParent.ParentIFN > 0) then begin if ((ADlgLst.Count > 0) and (Piece(ADlgLst[0],'^',2) = 'SET')) or (ADlgLst.Count = 0 )then begin SaveEvtForOrder(Patient.DFN, AnEvent.TheParent.ParentIFN, ''); SaveEvtForOrder(Patient.DFN, AnEvent.EventIFN, ''); AnEvent.IsNewEvent := False; end; end; if (TypeOfExistedEvent(Patient.DFN,AnEvent.EventIFN) = 0) and (AnEvent.TheParent.ParentIFN = 0) then begin if ((ADlgLst.Count > 0) and (Piece(ADlgLst[0],'^',2) = 'SET')) or (ADlgLst.Count = 0 )then begin SaveEvtForOrder(Patient.DFN, AnEvent.EventIFN, ''); AnEvent.IsNewEvent := False; end; end; if isExistedEvent(Patient.DFN,IntToStr(AnEvent.EventIFN), APtEvtID) then begin case AnEvent.EventType of 'A': EFilter := 15; 'D': EFilter := 16; 'T': EFilter := 17; end; AnOrderView.DGroup := DGroupAll; AnOrderView.Filter := EFilter; AnOrderView.EventDelay := AnEvent; AnOrderView.CtxtTime := -1; AnOrderView.TextView := 0; // AnOrderView.ViewName := 'Delayed ' + AnEvent.EventName + ' Orders'; <-- original line. //kt 8/8/2007 AnOrderView.ViewName := DKLangConstW('fOrders_Delayed') + AnEvent.EventName + DKLangConstW('fOrders_Orders'); //kt added 8/8/2007 AnOrderView.InvChrono := FCurrentView.InvChrono; AnOrderView.ByService := FCurrentView.ByService; if ItemIndex >= 0 then Items.InsertObject(ItemIndex+1, APtEvtID + U + AnOrderView.ViewName, AnOrderView) else Items.InsertObject(lstSheets.Items.Count, APtEvtID + U + AnOrderView.ViewName, AnOrderView); ItemIndex := lstSheets.Items.IndexOfObject(AnOrderView); FCurrentView := AnOrderView; // lblWrite.Caption := 'Write ' + FCurrentView.ViewName; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write') + FCurrentView.ViewName; //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; ClickLstSheet; NewEvent := True; if ADlgLst.Count > 0 then DisplayDefaultDlgList(lstWrite,ADlgLst) else begin if DispOrdersForEvent(IntToStr(FEventForCopyActiveOrders.EventIFN)) then begin if IsExistedEvent(Patient.DFN,IntToStr(FEventForCopyActiveOrders.EventIFN),tmptPtEvtID) then begin FEventForCopyActiveOrders.PtEventIFN := StrToIntDef(tmptPtEvtID,0); FEventForCopyActiveOrders.IsNewEvent := False end; CopyActiveOrdersToEvent(FOrderViewForActiveOrders, FEventForCopyActiveOrders); end; FEventForCopyActiveOrders.EventIFN := 0; end; end else begin case AnEvent.EventType of 'A': EFilter := 15; 'D': EFilter := 16; 'T': EFilter := 17; end; if ItemIndex < 0 then ItemIndex := 0; IsDefaultDlg := True; AnOrderView.DGroup := DGroupAll; AnOrderView.Filter := EFilter; AnOrderView.EventDelay := AnEvent; AnOrderView.CtxtTime := -1; AnOrderView.TextView := 0; // AnOrderView.ViewName := 'Delayed ' + AnEvent.EventName + ' Orders'; <-- original line. //kt 8/8/2007 AnOrderView.ViewName := DKLangConstW('fOrders_Delayed') + AnEvent.EventName + DKLangConstW('fOrders_Orders'); //kt added 8/8/2007 if FCurrentView <> nil then begin AnOrderView.InvChrono := FCurrentView.InvChrono; AnOrderView.ByService := FCurrentView.ByService; end; Items.InsertObject(ItemIndex+1, IntToStr(AnEvent.EventIFN)+ ';EVT' + U + AnOrderView.ViewName, AnOrderView); lstSheets.ItemIndex := lstSheets.Items.IndexOfObject(AnOrderView); FCurrentView := AnOrderView; // lblWrite.Caption := 'Write ' + FCurrentView.ViewName; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write') + FCurrentView.ViewName; //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; ClickLstSheet; NewEvent := True; if (NewEvent) and (ADlgLst.Count>0) then DisplayDefaultDlgList(lstWrite,ADlgLst); end; end; end else begin // lblWrite.Caption := 'Write Orders'; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write_Orders'); //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; RefreshOrderList(FROM_SERVER); end; end; function TfrmOrders.GetEvtIFN(AnIndex: integer): string; begin if AnIndex >= lstSheets.Items.Count then begin Result := ''; exit; end; with lstSheets do begin if Piece(Piece(Items[AnIndex],';',2),'^',1)='EVT' then Result := Piece(Items[AnIndex],';',1) else Result := GetEventIFN(Piece(Items[AnIndex], U, 1)); end; end; function TfrmOrders.PlaceOrderForDefaultDialog(ADlgInfo: string; IsDefaultDialog: boolean; AEvent: TOrderDelayEvent): boolean; { ADlgInfo = DlgIEN;FormID;DGroup;DlgType } var Activated: Boolean; NextIndex,ix: Integer; APtEvtIdA: string; TheEvent: TOrderDelayEvent; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. inherited; Result := False; if FCurrentView = nil then begin FCurrentView := TOrderView.Create; with FCurrentView do begin InvChrono := True; ByService := True; end; end; if AEvent.EventType = #0 then TheEvent := FCurrentView.EventDelay else TheEvent := AEvent; if not ActiveOrdering then SetConfirmEventDelay; NextIndex := lstWrite.ItemIndex; if not ReadyForNewOrder1(TheEvent) then begin lstWrite.ItemIndex := RefNumFor(Self); Exit; end; if AEvent.EventType <> #0 then lstWrite.ItemIndex := -1 else lstWrite.ItemIndex := NextIndex; // (ReadyForNewOrder may reset ItemIndex to -1) with TheEvent do if (EventType = 'D') and (Effective = 0) then if not ObtainEffectiveDate(Effective) then begin lstWrite.ItemIndex := -1; Exit; end; PositionTopOrder(StrToIntDef(Piece(ADlgInfo, ';', 3), 0)); case CharAt(Piece(ADlgInfo, ';', 4), 1) of 'A': Activated := ActivateAction( Piece(ADlgInfo, ';', 1), Self, lstWrite.ItemIndex); 'D', 'Q': Activated := ActivateOrderDialog(Piece(ADlgInfo, ';', 1), TheEvent, Self, lstWrite.ItemIndex); 'H': Activated := ActivateOrderHTML( Piece(ADlgInfo, ';', 1), TheEvent, Self, lstWrite.ItemIndex); 'M': Activated := ActivateOrderMenu( Piece(ADlgInfo, ';', 1), TheEvent, Self, lstWrite.ItemIndex); 'O': Activated := ActivateOrderSet( Piece(ADlgInfo, ';', 1), TheEvent, Self, lstWrite.ItemIndex); else Activated := not (InfoBox(TX_BAD_TYPE, TC_BAD_TYPE, MB_OK) = IDOK); end; if (not Activated) and (IsDefaultDialog) then begin lstWrite.ItemIndex := -1; ix := lstSheets.ItemIndex; if lstSheets.ItemIndex < 0 then Exit; APtEvtIdA := Piece(lstSheets.Items[ix],'^',1); if CharAt(APtEvtIdA,1) <> 'C' then begin if Pos('EVT',APtEvtIdA)>0 then begin lstSheets.Items.Objects[ix].Free; lstSheets.Items.Delete(ix); lstSheets.ItemIndex := 0; lstSheetsClick(Self); // lblWrite.Caption := 'Write Orders'; <-- original line. //kt 8/8/2007 lblWrite.Caption := DKLangConstW('fOrders_Write_Orders'); //kt added 8/8/2007 lstWrite.Caption := lblWrite.Caption; lblOrders.Caption := Piece(lstSheets.Items[0],U,2); lstOrders.Caption := Piece(lstSheets.Items[0],U,2); lstWrite.Clear; LoadWriteOrders(lstWrite.Items); end; end; end; Result := Activated; end; function TfrmOrders.DisplayDefaultDlgList(ADest: TORListBox; ADlgList: TStringList): boolean; var i,j: integer; AnDlgStr: string; AFillEvent: TOrderDelayEvent; APtEvtID,tmpPtEvtID: string; begin AFillEvent.EventType := #0; AFillEvent.EventIFN := 0; AFillEvent.PtEventIFN := 0; AFillEvent.TheParent := TParentEvent.Create; Result := False; for i := 0 to ADlgList.Count - 1 do begin if i = 0 then begin if AnsiCompareText('Set', Piece(ADlgList[i],'^',2)) = 0 then IsDefaultDlg := False; end; if i > 0 then IsDefaultDlg := False; ADest.ItemIndex := -1; for j := 0 to ADest.Items.Count - 1 do begin if Piece(ADest.Items[j],';',1)=Piece(ADlgList[i],'^',1) then begin ADest.ItemIndex := j; break; end; end; if ADest.ItemIndex < 0 then AnDlgStr := GetDlgData(Piece(ADlgList[i],'^',1)) else AnDlgStr := ADest.Items[ADest.ItemIndex]; if IsDefaultDlg then NeedShowModal := True else FNeedShowModal := False; if not IsDefaultDlg then begin if FEventForCopyActiveOrders.EventIFN > 0 then begin if IsExistedEvent(Patient.DFN,IntToStr(FEventForCopyActiveOrders.EventIFN),tmpPtEvtID) then begin FEventForCopyActiveOrders.PtEventIFN := StrToIntDef(tmpPtEvtID,0); FEventForCopyActiveOrders.IsNewEvent := False end; if DispOrdersForEvent(IntToStr(FEventForCopyActiveOrders.EventIFN)) then CopyActiveOrdersToEvent(FOrderViewForActiveOrders, FEventForCopyActiveOrders); end; FEventForCopyActiveOrders.EventIFN := 0; end; if PlaceOrderForDefaultDialog(AnDlgStr,IsDefaultDlg, AFillEvent) then begin if isExistedEvent(Patient.DFN,IntToStr(FEventForCopyActiveOrders.EventIFN), APtEvtID) then begin FCurrentView.EventDelay.PtEventIFN := StrToIntDef(APtEvtID,0); FCurrentView.EventDelay.IsNewEvent := False; end; if FEventForCopyActiveOrders.EventIFN > 0 then begin if IsExistedEvent(Patient.DFN,IntToStr(FEventForCopyActiveOrders.EventIFN),tmpPtEvtID) then begin FEventForCopyActiveOrders.PtEventIFN := StrToIntDef(tmpPtEvtID,0); FEventForCopyActiveOrders.IsNewEvent := False end; if DispOrdersForEvent(IntToStr(FEventForCopyActiveOrders.EventIFN)) then CopyActiveOrdersToEvent(FOrderViewForActiveOrders, FEventForCopyActiveOrders); end; {if isExistedEvent(Patient.DFN,IntToStr(FEventForCopyActiveOrders.EventIFN), APtEvtID) then begin FCurrentView.EventDelay.PtEventIFN := StrToIntDef(APtEvtID,0); FCurrentView.EventDelay.IsNewEvent := False; end;} EventDefaultOrder := ''; FEventForCopyActiveOrders.EventIFN := 0; Result := IsDefaultDlg end else break; end; end; procedure TfrmOrders.ClickLstSheet; begin FAskForCancel := False; lstSheetsClick(Self); FAskForCancel := True; end; procedure TfrmOrders.lblWriteMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin inherited; lblWrite.Hint := lblWrite.Caption; end; procedure TfrmOrders.InitOrderSheets2(AnItem: string); var i: Integer; begin InitOrderSheets; LoadOrderViewDefault(TOrderView(lstSheets.Items.Objects[0])); lstSheets.Items[0] := 'C;0^' + TOrderView(lstSheets.Items.Objects[0]).ViewName; if Length(AnItem)>0 then begin with lstSheets do for i := 0 to Items.Count - 1 do begin if AnsiCompareText(TOrderView(Items.Objects[i]).ViewName, AnItem)=0 then begin ItemIndex := i; FCurrentView := TOrderView(lstSheets.Items.Objects[i]); break; end; end; end; if lstSheets.ItemIndex < -1 then lstSheets.ItemIndex := 0; lstSheetsClick(Self); end; procedure TfrmOrders.SetFontSize( FontSize: integer); begin inherited SetFontSize( FontSize ); RedrawOrderList; mnuOptimizeFieldsClick(self); lstSheets.Repaint; lstWrite.Repaint; btnDelayedOrder.Repaint; end; procedure TfrmOrders.popOrderPopup(Sender: TObject); begin inherited; if PatientStatusChanged then exit; //frmFrame.UpdatePtInfoOnRefresh; end; procedure TfrmOrders.mnuViewClick(Sender: TObject); begin inherited; if PatientStatusChanged then exit; //frmFrame.UpdatePtInfoOnRefresh; end; procedure TfrmOrders.mnuActClick(Sender: TObject); begin inherited; if PatientStatusChanged then exit; //frmFrame.UpdatePtInfoOnRefresh; end; procedure TfrmOrders.mnuOptClick(Sender: TObject); begin inherited; if PatientStatusChanged then exit; //frmFrame.UpdatePtInfoOnRefresh; end; procedure TfrmOrders.AddToListBox(AnOrderList: TList); var idx: integer; AnOrder: TOrder; i: integer; begin with AnOrderList do for idx := 0 to Count - 1 do begin AnOrder := TOrder(Items[idx]); if (AnOrder.OrderTime <= 0) then Continue; i := lstOrders.Items.AddObject(AnOrder.ID, AnOrder); lstOrders.Items[i] := GetPlainText(AnOrder,i); end; end; procedure TfrmOrders.ChangesUpdate(APtEvtID: string); var jdx: integer; APrtEvtId, tempEvtId,EvtOrderID: string; begin APrtEvtId := TheParentPtEvt(APtEvtID); if Length(APrtEvtId)>0 then tempEvtId := APrtEvtId else tempEvtId := APtEvtID; for jdx := EvtOrderList.Count - 1 downto 0 do if AnsiCompareStr(Piece(EvtOrderList[jdx],'^',1),tempEvtID) = 0 then begin EvtOrderID := Piece(EvtOrderList[jdx],'^',2); Changes.Remove(CH_ORD,EvtOrderID); EvtOrderList.Delete(jdx); end; end; function TfrmOrders.PtEvtCompleted(APtEvtID: integer; APtEvtName: string; FromMeds: boolean): boolean; begin SetupVars; //kt added 8/8/2007 to replace constants with vars. Result := False; if IsCompletedPtEvt(APtEvtID) then begin if FromMeds then // InfoBox('The event "Delayed ' + APtEvtName + '" ' + TX_CMPTEVT_MEDSTAB, 'Warning', MB_OK or MB_ICONWARNING) <-- original line. //kt 8/8/2007 InfoBox(DKLangConstW('fOrders_The_event_xDelayed') + APtEvtName + '" ' + TX_CMPTEVT_MEDSTAB, DKLangConstW('fOrders_Warning'), MB_OK or MB_ICONWARNING) //kt added 8/8/2007 else // InfoBox('The event "Delayed ' + APtEvtName + '" ' + TX_CMPTEVT, 'Warning', MB_OK or MB_ICONWARNING); <-- original line. //kt 8/8/2007 InfoBox(DKLangConstW('fOrders_The_event_xDelayed') + APtEvtName + '" ' + TX_CMPTEVT, DKLangConstW('fOrders_Warning'), MB_OK or MB_ICONWARNING); //kt added 8/8/2007 // GroupChangesUpdate('Delayed ' + APtEvtName); <-- original line. //kt 8/8/2007 GroupChangesUpdate(DKLangConstW('fOrders_Delayed') + APtEvtName); //kt added 8/8/2007 InitOrderSheetsForEvtDelay; lstSheets.ItemIndex := 0; lstSheetsClick(self); RefreshOrderList(True); Result := True; end; end; procedure TfrmOrders.RefreshToFirstItem; begin InitOrderSheetsForEvtDelay; lstSheets.ItemIndex := 0; RefreshOrderList(True); end; procedure TfrmOrders.GroupChangesUpdate(GrpName: string); var ji: integer; theChangeItem: TChangeItem; begin Changes.ChangeOrderGrp(GrpName,''); for ji := 0 to Changes.Orders.Count - 1 do begin theChangeItem := TChangeItem(Changes.Orders.Items[ji]); if AnsiCompareText(theChangeItem.GroupName,GrpName)=0 then Changes.ReplaceODGrpName(theChangeItem.ID,''); end; end; procedure TfrmOrders.UMEventOccur(var Message: TMessage); begin SetupVars; //kt added 8/8/2007 to replace constants with vars. //InfoBox('The event "Delayed ' + FCurrentView.EventDelay.EventName + '" ' + TX_CMPTEVT, 'Warning', MB_OK or MB_ICONWARNING); <-- original line. //kt 8/8/2007 InfoBox(DKLangConstW('fOrders_The_event_xDelayed') + FCurrentView.EventDelay.EventName + '" ' + TX_CMPTEVT, DKLangConstW('fOrders_Warning'), MB_OK or MB_ICONWARNING); //kt added 8/8/2007 //GroupChangesUpdate('Delayed '+ frmOrders.TheCurrentView.EventDelay.EventName); <-- original line. //kt 8/8/2007 GroupChangesUpdate(DKLangConstW('fOrders_Delayed')+ frmOrders.TheCurrentView.EventDelay.EventName); //kt added 8/8/2007 InitOrderSheetsForEvtDelay; lstSheets.ItemIndex := 0; lstSheetsClick(self); RefreshOrderList(True); end; procedure TfrmOrders.setSectionWidths; var i: integer; begin //CQ6170 for i := 0 to 9 do origWidths[i] := hdrOrders.Sections[i].Width; //end CQ6170 end; function TfrmOrders.getTotalSectionsWidth : integer; var i: integer; begin //CQ6170 Result := 0; for i := 0 to hdrOrders.Sections.Count - 1 do Result := Result + hdrOrders.Sections[i].Width; //end CQ6170 end; procedure TfrmOrders.FormShow(Sender: TObject); begin inherited; //force horizontal scrollbar //lstOrders.ScrollWidth := lstOrders.ClientWidth+1000; //CQ6170 end; procedure TfrmOrders.hdrOrdersMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i: integer; totalSectionsWidth, originalwidth: integer; begin inherited; //CQ6170 totalSectionsWidth := getTotalSectionsWidth; if totalSectionsWidth > lstOrders.Width - 5 then begin originalwidth := 0; for i := 0 to hdrOrders.Sections.Count - 1 do originalwidth := originalwidth + origWidths[i]; if originalwidth < totalSectionsWidth then begin for i := 0 to hdrOrders.Sections.Count - 1 do hdrOrders.Sections[i].Width := origWidths[i]; lstOrders.Invalidate; end; end; //end CQ6170 end; procedure TfrmOrders.hdrOrdersMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; setSectionWidths; //CQ6170 end; function TfrmOrders.PatientStatusChanged: boolean; //const //msgTxt1 = 'Patient status was changed from '; <-- original line. //kt 8/8/2007 //msgTxt2 = 'CPRS needs to refresh patient information to display patient latest record.'; <-- original line. //kt 8/8/2007 //GE CQ9537 - Change message text //msgTxt3 = 'Patient has been admitted. '; <-- original line. //kt 8/8/2007 //msgTxt4 = CRLF + 'You will be prompted to sign your orders. Any new orders subsequently' + <-- original line. //kt 8/8/2007 // CRLF +'entered and signed will be directed to the inpatient staff.'; <-- original line. //kt 8/8/2007 var PtSelect: TPtSelect; IsInpatientNow: boolean; ptSts: string; msgTxt1 : string; //kt msgTxt2 : string; //kt msgTxt3 : string; //kt msgTxt4 : string; //kt begin msgTxt1 := DKLangConstW('fOrders_Patient_status_was_changed_from'); //kt added 8/8/2007 msgTxt2 := DKLangConstW('fOrders_CPRS_needs_to_refresh_patient_information_to_display_patient_latest_recordx'); //kt added 8/8/2007 msgTxt3 := DKLangConstW('fOrders_Patient_has_been_admittedx'); //kt added 8/8/2007 msgTxt4 := CRLF + DKLangConstW('fOrders_You_will_be_prompted_to_sign_your_ordersx__Any_new_orders_subsequently') + //kt added 8/8/2007 CRLF +DKLangConstW('fOrders_entered_and_signed_will_be_directed_to_the_inpatient_staffx'); //kt added 8/8/2007 result := False; SelectPatient(Patient.DFN, PtSelect); IsInpatientNow := Length(PtSelect.Location) > 0; if Patient.Inpatient <> IsInpatientNow then begin if (not Patient.Inpatient) then //GE CQ9537 - Change message text MessageDlg(msgTxt3 + msgTxt4, mtWarning, [mbOK], 0) else begin // if Patient.Inpatient then ptSts := 'Inpatient to Outpatient.'; <-- original line. //kt 8/8/2007 if Patient.Inpatient then ptSts := DKLangConstW('fOrders_Inpatient_to_Outpatientx'); //kt added 8/8/2007 MessageDlg(msgTxt1 + ptSts + #13#10#13 + msgTxt2, mtWarning, [mbOK], 0); end; frmFrame.mnuFileRefreshClick(Application); Result := True; end; end; function TfrmOrders.CheckOrderStatus: boolean; var i: integer; AnOrder: TOrder; begin Result := False; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin AnOrder := TOrder(Items.Objects[i]); if AnORder.Status <> GetOrderStatus(AnOrder.ID) then begin // MessageDlg('The Order status has changed.' + #13#10#13 + 'CPRS needs to refresh patient information to display the correct order status', mtWarning, [mbOK], 0); <-- original line. //kt 8/8/2007 MessageDlg(DKLangConstW('fOrders_The_Order_status_has_changedx') + #13#10#13 + DKLangConstW('fOrders_CPRS_needs_to_refresh_patient_information_to_display_the_correct_order_status'), mtWarning, [mbOK], 0); //kt added 8/8/2007 frmFrame.mnuFileRefreshClick(Application); Result := True; EXIT; end; end; end; (*procedure TfrmOrders.ActivateDeactiveRenew; var i: Integer; AnOrder: TOrder; tmpArr: TStringList; begin tmpArr := TStringList.Create; with lstOrders do for i := 0 to Items.Count - 1 do if Selected[i] then begin AnOrder := TOrder(Items.Objects[i]); if AnOrder.Status = 5 then tmpArr.Add(AnOrder.ID); end; if tmpArr <> nil then frmActivateDeactive.fActivateDeactive(tmpArr); end; *) procedure TfrmOrders.ViewInfo(Sender: TObject); begin inherited; frmFrame.ViewInfo(Sender); end; procedure TfrmOrders.mnuViewInformationClick(Sender: TObject); begin inherited; mnuViewDemo.Enabled := frmFrame.pnlPatient.Enabled; mnuViewVisits.Enabled := frmFrame.pnlVisit.Enabled; mnuViewPrimaryCare.Enabled := frmFrame.pnlPrimaryCare.Enabled; mnuViewMyHealtheVet.Enabled := not (Copy(frmFrame.laMHV.Hint, 1, 2) = 'No'); mnuInsurance.Enabled := not (Copy(frmFrame.laVAA2.Hint, 1, 2) = 'No'); mnuViewFlags.Enabled := frmFrame.lblFlag.Enabled; mnuViewRemoteData.Enabled := frmFrame.lblCirn.Enabled; mnuViewReminders.Enabled := frmFrame.pnlReminders.Enabled; mnuViewPostings.Enabled := frmFrame.pnlPostings.Enabled; end; procedure TfrmOrders.mnuOptimizeFieldsClick(Sender: TObject); var totalSectionsWidth, unitvalue: integer; begin totalSectionsWidth := pnlRight.Width - 3; if totalSectionsWidth < 16 then exit; unitvalue := round(totalSectionsWidth / 16); with hdrOrders do begin Sections[1].Width := unitvalue; Sections[2].Width := pnlRight.Width - (unitvalue * 10) - 5; Sections[3].Width := unitvalue * 2; Sections[4].Width := unitvalue * 2; Sections[5].Width := unitvalue; Sections[6].Width := unitvalue; Sections[7].Width := unitvalue; Sections[8].Width := unitvalue; Sections[9].Width := unitvalue; end; hdrOrdersSectionResize(hdrOrders, hdrOrders.Sections[0]); hdrOrders.Repaint; end; procedure TfrmOrders.hdrOrdersSectionClick(HeaderControl: THeaderControl; Section: THeaderSection); begin inherited; //if Section = hdrOrders.Sections[1] then mnuOptimizeFieldsClick(self); end; procedure TfrmOrders.sptHorzMoved(Sender: TObject); begin inherited; mnuOptimizeFieldsClick(self); end; end.