| [453] | 1 | //kt -- Modified with SourceScanner on 8/8/2007
 | 
|---|
 | 2 | unit uOrders;
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | interface
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | uses
 | 
|---|
 | 7 |   Windows, Messages, SysUtils, Classes, Controls, Forms, uConst, rOrders, ORFn,
 | 
|---|
 | 8 |   Dialogs, ORCtrls, stdCtrls, strUtils, fODBase;
 | 
|---|
 | 9 | 
 | 
|---|
 | 10 | type
 | 
|---|
 | 11 |   EOrderDlgFail = class(Exception);
 | 
|---|
 | 12 | 
 | 
|---|
 | 13 | { Ordering Environment }
 | 
|---|
 | 14 | function AuthorizedUser: Boolean;
 | 
|---|
 | 15 | function AuthorizedToVerify: Boolean;
 | 
|---|
 | 16 | function EncounterPresent: Boolean;
 | 
|---|
 | 17 | function EncounterPresentEDO: Boolean;
 | 
|---|
 | 18 | function LockedForOrdering: Boolean;
 | 
|---|
 | 19 | function IsValidActionOnComplexOrder(AnOrderID, AnAction: string;
 | 
|---|
 | 20 |     AListBox: TListBox; var CheckedList: TStringList; var ErrMsg: string; var ParentOrderID: string): boolean;  //PSI-COMPLEX
 | 
|---|
 | 21 | procedure UnlockIfAble;
 | 
|---|
 | 22 | function OrderCanBeLocked(OrderID: string): Boolean;
 | 
|---|
 | 23 | procedure UnlockOrderIfAble(OrderID: string);
 | 
|---|
 | 24 | procedure AddSelectedToChanges(AList: TList);
 | 
|---|
 | 25 | procedure ResetDialogProperties(const AnID: string; AnEvent: TOrderDelayEvent; var ResolvedDialog: TOrderDialogResolved);
 | 
|---|
 | 26 | function IsInvalidActionWarning(const AnOrderText,AnOrderID: String): boolean;
 | 
|---|
 | 27 | procedure InitialOrderVariables;
 | 
|---|
 | 28 | 
 | 
|---|
 | 29 | { Write Orders }
 | 
|---|
 | 30 | function ActivateAction(const AnID: string; AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 31 | function ActivateOrderDialog(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 32 |   AnOwner: TComponent; ARefNum: Integer; ANeedVerify: boolean = True): Boolean;
 | 
|---|
 | 33 | function RetrieveOrderText(AnOrderID: string): string;
 | 
|---|
 | 34 | function ActivateOrderHTML(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 35 |   AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 36 | function ActivateOrderMenu(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 37 |   AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 38 | function ActivateOrderSet(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 39 |   AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 40 | function ActivateOrderList(AList: TStringList; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 41 |   AnOwner: TComponent; ARefNum: Integer; const KeyVarStr, ACaption: string): Boolean;
 | 
|---|
 | 42 | function ActiveOrdering: Boolean;
 | 
|---|
 | 43 | function CloseOrdering: Boolean;
 | 
|---|
 | 44 | function ReadyForNewOrder(AnEvent: TOrderDelayEvent): Boolean;
 | 
|---|
 | 45 | function ReadyForNewOrder1(AnEvent: TOrderDelayEvent): Boolean;
 | 
|---|
 | 46 | function ChangeOrdersEvt(AnOrderID: string; AnEvent: TOrderDelayEvent): boolean;
 | 
|---|
 | 47 | function CopyOrders(AList: TStringList; AnEvent: TOrderDelayEvent; var DoesEventOccur: boolean; ANeedVerify: boolean = True): boolean;
 | 
|---|
 | 48 | function TransferOrders(AList: TStringList; AnEvent: TOrderDelayEvent; var DoesEventOccur: boolean; ANeedVerify: boolean = True): boolean;
 | 
|---|
 | 49 | procedure SetConfirmEventDelay;
 | 
|---|
 | 50 | procedure ChangeOrders(AList: TStringList; AnEvent: TOrderDelayEvent);
 | 
|---|
 | 51 | procedure DestroyingOrderAction;
 | 
|---|
 | 52 | procedure DestroyingOrderDialog;
 | 
|---|
 | 53 | procedure DestroyingOrderHTML;
 | 
|---|
 | 54 | procedure DestroyingOrderMenu;
 | 
|---|
 | 55 | procedure DestroyingOrderSet;
 | 
|---|
 | 56 | function OrderIsLocked(const AnOrderID, AnAction: string): Boolean;
 | 
|---|
 | 57 | procedure PopLastMenu;
 | 
|---|
 | 58 | procedure QuickOrderSave;
 | 
|---|
 | 59 | procedure QuickOrderListEdit;
 | 
|---|
 | 60 | function RefNumFor(AnOwner: TComponent): Integer;
 | 
|---|
 | 61 | procedure PrintOrdersOnSignRelease(OrderList: TStringList; Nature: Char; PrintLoc : Integer =0);
 | 
|---|
 | 62 | procedure SetFontSize( FontSize: integer);
 | 
|---|
 | 63 | procedure NextMove(var NMRec: TNextMoveRec; LastIndex: Integer; NewIndex: Integer);
 | 
|---|
 | 64 | 
 | 
|---|
 | 65 | { Inpatient medication for Outpatient}
 | 
|---|
 | 66 | function IsIMODialog(DlgID: integer): boolean;
 | 
|---|
 | 67 | function AllowActionOnIMO(AnEvtTyp: char): boolean;
 | 
|---|
 | 68 | function IMOActionValidation(AnId: string; var IsIMOOD: boolean; var x: string; AnEventType: char): boolean;
 | 
|---|
 | 69 | 
 | 
|---|
 | 70 | 
 | 
|---|
 | 71 | var
 | 
|---|
 | 72 | uAutoAc: Boolean;
 | 
|---|
 | 73 | InptDisp : Integer;
 | 
|---|
 | 74 | OutptDisp: Integer;
 | 
|---|
 | 75 | MedsDisp : Integer;
 | 
|---|
 | 76 | ClinDisp : Integer; //IMO
 | 
|---|
 | 77 | NurDisp  : Integer;
 | 
|---|
 | 78 | IVDisp   : Integer;
 | 
|---|
 | 79 | CsltDisp : Integer;
 | 
|---|
 | 80 | ProcDisp : Integer;
 | 
|---|
 | 81 | ImgDisp  : Integer;
 | 
|---|
 | 82 | NonVADisp: Integer;
 | 
|---|
 | 83 | MedsInDlgIen  : Integer;
 | 
|---|
 | 84 | MedsOutDlgIen : Integer;
 | 
|---|
 | 85 | MedsNVADlgIen : Integer;
 | 
|---|
 | 86 | MedsInDlgFormId  : Integer;
 | 
|---|
 | 87 | MedsOutDlgFormId : Integer;
 | 
|---|
 | 88 | MedsNVADlgFormID : Integer;
 | 
|---|
 | 89 | MedsIVDlgIen: Integer;
 | 
|---|
 | 90 | MedsIVDlgFormID: Integer;
 | 
|---|
 | 91 | NSSchedule: boolean;
 | 
|---|
 | 92 | OriginalMedsOutHeight: Integer;
 | 
|---|
 | 93 | OriginalMedsInHeight: Integer;
 | 
|---|
 | 94 | OriginalNonVAMedsHeight: Integer;
 | 
|---|
 | 95 | 
 | 
|---|
 | 96 | implementation
 | 
|---|
 | 97 | 
 | 
|---|
 | 98 | uses fODDiet, fODMisc, fODGen, fODMedIn, fODMedOut, fODText, fODConsult, fODProc, fODRad,
 | 
|---|
 | 99 |      fODLab, fodBBank, fODMeds, fODMedIV, fODVitals, fODAuto, (*fODAllgy,*) fOMNavA, rCore, uCore, fFrame,
 | 
|---|
 | 100 |      fEncnt, fEffectDate, fOMVerify, fOrderSaveQuick, fOMSet, rMisc, uODBase, rODMeds,
 | 
|---|
 | 101 |      fLkUpLocation, fOrdersPrint, fOMAction, fARTAllgy, fOMHTML, fOrders, rODBase,
 | 
|---|
 | 102 |      fODChild, fMeds, rMeds, rPCE, frptBox, fODMedNVA, fODChangeUnreleasedRenew, rODAllergy,
 | 
|---|
 | 103 |      UBAGlobals, fClinicWardMeds, uTemplateFields
 | 
|---|
 | 104 |      , DKLang  //kt
 | 
|---|
 | 105 |      ;
 | 
|---|
 | 106 | 
 | 
|---|
 | 107 | var
 | 
|---|
 | 108 |   uPatientLocked: Boolean;
 | 
|---|
 | 109 |   uKeepLock: Boolean;
 | 
|---|
 | 110 |   uOrderAction: TfrmOMAction;
 | 
|---|
 | 111 |   uOrderDialog: TfrmODBase;
 | 
|---|
 | 112 |   uOrderHTML: TfrmOMHTML;
 | 
|---|
 | 113 |   uOrderMenu: TfrmOMNavA;
 | 
|---|
 | 114 |   uOrderSet: TfrmOMSet;
 | 
|---|
 | 115 |   uLastConfirm: string;
 | 
|---|
 | 116 |   uOrderSetTime: TFMDateTime;
 | 
|---|
 | 117 |   uNewMedDialog: Integer;
 | 
|---|
 | 118 | 
 | 
|---|
 | 119 | const
 | 
|---|
 | 120 | //TX_PROV_LOC   = 'A provider and location must be selected before entering orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 121 | //TC_PROV_LOC   = 'Incomplete Information';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 122 | //TX_PROV_KEY   = 'The provider selected for this encounter must' + CRLF +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 123 | //                'hold the PROVIDER key to enter orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 124 | //TC_PROV_KEY   = 'PROVIDER Key Required';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 125 | //TX_NOKEY      = 'You do not have the keys required to take this action.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 126 | //TC_NOKEY      = 'Insufficient Authority';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 127 | //TX_BADKEYS    = 'You have mutually exclusive order entry keys (ORES, ORELSE, or OREMAS).' +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 128 | //                 CRLF + 'This must be resolved before you can take actions on orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 129 | //TC_BADKEYS    = 'Multiple Keys';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 130 | //TC_NO_LOCK    = 'Unable to Lock';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 131 | //TC_DISABLED   = 'Item Disabled';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 132 | //TX_DELAY      = 'Now writing orders for ';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 133 | //TX_DELAY1     = CRLF + CRLF + '(To write orders for current release rather than delayed release,' + CRLF +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 134 | //                               'close the next window and select Active Orders from the View Orders pane.)';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 135 | //TC_DELAY      = 'Ordering Information';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 136 | //TX_STOP_SET   = 'Do you want to stop entering the current set of orders?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 137 | //TC_STOP_SET   = 'Interupt order set';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 138 | //TC_DLG_REJECT = 'Unable to Order';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 139 | //TX_NOFORM     = 'This selection does not have an associated windows form.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 140 | //TC_NOFORM     = 'Missing Form ID';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 141 | //TX_DLG_ERR    = 'Error in activating order dialog.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 142 | //TC_DLG_ERR    = 'Dialog Error';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 143 | //TX_NO_SAVE_QO = 'An ordering dialog must be active to use this action.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 144 | //TC_NO_SAVE_QO = 'Save as Quick Order';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 145 | //TX_NO_EDIT_QO = 'An ordering dialog must be active to use this action.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 146 | //TC_NO_EDIT_QO = 'Edit Common List';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 147 | //TX_NO_QUICK   = 'This ordering dialog does not support quick orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 148 | //TC_NO_QUICK   = 'Save/Edit Quick Orders';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 149 | //TX_CANT_SAVE_QO = 'This order contains TIU objects, which may result in patient-specific' + CRLF +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 150 | //                  'information being included in the order.  For this reason, it may not' + CRLF +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 151 | //                  'be saved as a personal quick order for later reuse.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 152 | //TX_NO_COPY    = CRLF + CRLF + '- cannot be copied.' + CRLF + CRLF + 'Reason: ';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 153 | //TC_NO_COPY    = 'Unable to Copy Order';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 154 | //TX_NO_CHANGE  = CRLF + CRLF + '- cannot be changed.' + CRLF + CRLF + 'Reason: ';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 155 | //TC_NO_CHANGE  = 'Unable to Change Order';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 156 | //TC_NO_XFER    = 'Unable to Transfer Order';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 157 | //TC_NOLOCK     = 'Unable to Lock Order';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 158 | //TX_ONHOLD     = 'The following order has been put on-hold, do you still want to continue?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 159 | //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
 | 
|---|
 | 160 |   STEP_FORWARD  = 1;
 | 
|---|
 | 161 |   STEP_BACK     = -1;
 | 
|---|
 | 162 | //TX_NOINPT     = ': You cannot place inpatient medication orders from a clinic location for selected patient.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 163 | //TX_IMO_WARNING1 = 'You are ';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 164 | //TX_IMO_WARNING2 = ' Clinic Orders. The New orders will be saved as Clinic Orders and MAY NOT be available in BCMA';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 165 | 
 | 
|---|
 | 166 | var
 | 
|---|
 | 167 |   TX_PROV_LOC   : string; //kt
 | 
|---|
 | 168 |   TC_PROV_LOC   : string; //kt
 | 
|---|
 | 169 |   TX_PROV_KEY   : string; //kt
 | 
|---|
 | 170 |   TC_PROV_KEY   : string; //kt
 | 
|---|
 | 171 |   TX_NOKEY      : string; //kt
 | 
|---|
 | 172 |   TC_NOKEY      : string; //kt
 | 
|---|
 | 173 |   TX_BADKEYS    : string; //kt
 | 
|---|
 | 174 |   TC_BADKEYS    : string; //kt
 | 
|---|
 | 175 |   TC_NO_LOCK    : string; //kt
 | 
|---|
 | 176 |   TC_DISABLED   : string; //kt
 | 
|---|
 | 177 |   TX_DELAY      : string; //kt
 | 
|---|
 | 178 |   TX_DELAY1     : string; //kt
 | 
|---|
 | 179 |   TC_DELAY      : string; //kt
 | 
|---|
 | 180 |   TX_STOP_SET   : string; //kt
 | 
|---|
 | 181 |   TC_STOP_SET   : string; //kt
 | 
|---|
 | 182 |   TC_DLG_REJECT : string; //kt
 | 
|---|
 | 183 |   TX_NOFORM     : string; //kt
 | 
|---|
 | 184 |   TC_NOFORM     : string; //kt
 | 
|---|
 | 185 |   TX_DLG_ERR    : string; //kt
 | 
|---|
 | 186 |   TC_DLG_ERR    : string; //kt
 | 
|---|
 | 187 |   TX_NO_SAVE_QO : string; //kt
 | 
|---|
 | 188 |   TC_NO_SAVE_QO : string; //kt
 | 
|---|
 | 189 |   TX_NO_EDIT_QO : string; //kt
 | 
|---|
 | 190 |   TC_NO_EDIT_QO : string; //kt
 | 
|---|
 | 191 |   TX_NO_QUICK   : string; //kt
 | 
|---|
 | 192 |   TC_NO_QUICK   : string; //kt
 | 
|---|
 | 193 |   TX_CANT_SAVE_QO : string; //kt
 | 
|---|
 | 194 |   TX_NO_COPY    : string; //kt
 | 
|---|
 | 195 |   TC_NO_COPY    : string; //kt
 | 
|---|
 | 196 |   TX_NO_CHANGE  : string; //kt
 | 
|---|
 | 197 |   TC_NO_CHANGE  : string; //kt
 | 
|---|
 | 198 |   TC_NO_XFER    : string; //kt
 | 
|---|
 | 199 |   TC_NOLOCK     : string; //kt
 | 
|---|
 | 200 |   TX_ONHOLD     : string; //kt
 | 
|---|
 | 201 |   TX_COMPLEX    : string; //kt
 | 
|---|
 | 202 |   TX_NOINPT     : string; //kt
 | 
|---|
 | 203 |   TX_IMO_WARNING1 : string; //kt
 | 
|---|
 | 204 |   TX_IMO_WARNING2 : string; //kt
 | 
|---|
 | 205 | 
 | 
|---|
 | 206 | 
 | 
|---|
 | 207 | procedure SetupVars;
 | 
|---|
 | 208 | //kt Added entire function to replace constant declarations 8/8/2007
 | 
|---|
 | 209 | begin
 | 
|---|
 | 210 |   TX_PROV_LOC   := DKLangConstW('uOrders_A_provider_and_location_must_be_selected_before_entering_ordersx');
 | 
|---|
 | 211 |   TC_PROV_LOC   := DKLangConstW('uOrders_Incomplete_Information');
 | 
|---|
 | 212 |   TX_PROV_KEY   := DKLangConstW('uOrders_The_provider_selected_for_this_encounter_must') + CRLF +
 | 
|---|
 | 213 |                   DKLangConstW('uOrders_hold_the_PROVIDER_key_to_enter_ordersx');
 | 
|---|
 | 214 |   TC_PROV_KEY   := DKLangConstW('uOrders_PROVIDER_Key_Required');
 | 
|---|
 | 215 |   TX_NOKEY      := DKLangConstW('uOrders_You_do_not_have_the_keys_required_to_take_this_actionx');
 | 
|---|
 | 216 |   TC_NOKEY      := DKLangConstW('uOrders_Insufficient_Authority');
 | 
|---|
 | 217 |   TX_BADKEYS    := DKLangConstW('uOrders_You_have_mutually_exclusive_order_entry_keys_xORESx_ORELSEx_or_OREMASxx') +
 | 
|---|
 | 218 |                    CRLF + DKLangConstW('uOrders_This_must_be_resolved_before_you_can_take_actions_on_ordersx');
 | 
|---|
 | 219 |   TC_BADKEYS    := DKLangConstW('uOrders_Multiple_Keys');
 | 
|---|
 | 220 |   TC_NO_LOCK    := DKLangConstW('uOrders_Unable_to_Lock');
 | 
|---|
 | 221 |   TC_DISABLED   := DKLangConstW('uOrders_Item_Disabled');
 | 
|---|
 | 222 |   TX_DELAY      := DKLangConstW('uOrders_Now_writing_orders_for');
 | 
|---|
 | 223 |   TX_DELAY1     := CRLF + CRLF + DKLangConstW('uOrders_xTo_write_orders_for_current_release_rather_than_delayed_releasex') + CRLF +
 | 
|---|
 | 224 |                                  DKLangConstW('uOrders_close_the_next_window_and_select_Active_Orders_from_the_View_Orders_panexx');
 | 
|---|
 | 225 |   TC_DELAY      := DKLangConstW('uOrders_Ordering_Information');
 | 
|---|
 | 226 |   TX_STOP_SET   := DKLangConstW('uOrders_Do_you_want_to_stop_entering_the_current_set_of_ordersx');
 | 
|---|
 | 227 |   TC_STOP_SET   := DKLangConstW('uOrders_Interupt_order_set');
 | 
|---|
 | 228 |   TC_DLG_REJECT := DKLangConstW('uOrders_Unable_to_Order');
 | 
|---|
 | 229 |   TX_NOFORM     := DKLangConstW('uOrders_This_selection_does_not_have_an_associated_windows_formx');
 | 
|---|
 | 230 |   TC_NOFORM     := DKLangConstW('uOrders_Missing_Form_ID');
 | 
|---|
 | 231 |   TX_DLG_ERR    := DKLangConstW('uOrders_Error_in_activating_order_dialogx');
 | 
|---|
 | 232 |   TC_DLG_ERR    := DKLangConstW('uOrders_Dialog_Error');
 | 
|---|
 | 233 |   TX_NO_SAVE_QO := DKLangConstW('uOrders_An_ordering_dialog_must_be_active_to_use_this_actionx');
 | 
|---|
 | 234 |   TC_NO_SAVE_QO := DKLangConstW('uOrders_Save_as_Quick_Order');
 | 
|---|
 | 235 |   TX_NO_EDIT_QO := DKLangConstW('uOrders_An_ordering_dialog_must_be_active_to_use_this_actionx');
 | 
|---|
 | 236 |   TC_NO_EDIT_QO := DKLangConstW('uOrders_Edit_Common_List');
 | 
|---|
 | 237 |   TX_NO_QUICK   := DKLangConstW('uOrders_This_ordering_dialog_does_not_support_quick_ordersx');
 | 
|---|
 | 238 |   TC_NO_QUICK   := DKLangConstW('uOrders_SavexEdit_Quick_Orders');
 | 
|---|
 | 239 |   TX_CANT_SAVE_QO := DKLangConstW('uOrders_This_order_contains_TIU_objectsx_which_may_result_in_patientxspecific') + CRLF +
 | 
|---|
 | 240 |                     DKLangConstW('uOrders_information_being_included_in_the_orderx__For_this_reasonx_it_may_not') + CRLF +
 | 
|---|
 | 241 |                     DKLangConstW('uOrders_be_saved_as_a_personal_quick_order_for_later_reusex');
 | 
|---|
 | 242 |   TX_NO_COPY    := CRLF + CRLF + DKLangConstW('uOrders_x_cannot_be_copiedx') + CRLF + CRLF + DKLangConstW('uOrders_Reasonx');
 | 
|---|
 | 243 |   TC_NO_COPY    := DKLangConstW('uOrders_Unable_to_Copy_Order');
 | 
|---|
 | 244 |   TX_NO_CHANGE  := CRLF + CRLF + DKLangConstW('uOrders_x_cannot_be_changedx') + CRLF + CRLF + DKLangConstW('uOrders_Reasonx');
 | 
|---|
 | 245 |   TC_NO_CHANGE  := DKLangConstW('uOrders_Unable_to_Change_Order');
 | 
|---|
 | 246 |   TC_NO_XFER    := DKLangConstW('uOrders_Unable_to_Transfer_Order');
 | 
|---|
 | 247 |   TC_NOLOCK     := DKLangConstW('uOrders_Unable_to_Lock_Order');
 | 
|---|
 | 248 |   TX_ONHOLD     := DKLangConstW('uOrders_The_following_order_has_been_put_onxholdx_do_you_still_want_to_continuex');
 | 
|---|
 | 249 |   TX_COMPLEX    := DKLangConstW('uOrders_You_can_not_take_this_action_on_a_complex_medicationx') + #13 + DKLangConstW('uOrders_You_must_enter_a_new_orderx');
 | 
|---|
 | 250 |   TX_NOINPT     := DKLangConstW('uOrders_x_You_cannot_place_inpatient_medication_orders_from_a_clinic_location_for_selected_patientx');
 | 
|---|
 | 251 |   TX_IMO_WARNING1 := DKLangConstW('uOrders_You_are');
 | 
|---|
 | 252 |   TX_IMO_WARNING2 := DKLangConstW('uOrders_Clinic_Ordersx_The_New_orders_will_be_saved_as_Clinic_Orders_and_MAY_NOT_be_available_in_BCMA');
 | 
|---|
 | 253 | end;
 | 
|---|
 | 254 | 
 | 
|---|
 | 255 | function CreateOrderDialog(Sender: TComponent; FormID: integer; AnEvent: TOrderDelayEvent; ODEvtID: integer = 0): TfrmODBase;
 | 
|---|
 | 256 | { creates an order dialog based on the FormID and returns a pointer to it }
 | 
|---|
 | 257 | type
 | 
|---|
 | 258 |   TDialogClass = class of TfrmODBase;
 | 
|---|
 | 259 | var
 | 
|---|
 | 260 |   DialogClass: TDialogClass;
 | 
|---|
 | 261 | begin
 | 
|---|
 | 262 |   Result := nil;
 | 
|---|
 | 263 |   // allows the FormCreate to check event under which dialog is created
 | 
|---|
 | 264 |   if AnEvent.EventType in ['A','D','T','M','O'] then
 | 
|---|
 | 265 |   begin
 | 
|---|
 | 266 |    SetOrderEventTypeOnCreate(AnEvent.EventType);
 | 
|---|
 | 267 |    SetOrderEventIDOnCreate(AnEvent.EventIFN);
 | 
|---|
 | 268 |   end else
 | 
|---|
 | 269 |   begin
 | 
|---|
 | 270 |    SetOrderEventTypeOnCreate(#0);
 | 
|---|
 | 271 |    SetOrderEventIDOnCreate(0);
 | 
|---|
 | 272 |   end;
 | 
|---|
 | 273 |   SetOrderFormIDOnCreate(FormID);  
 | 
|---|
 | 274 |   // check to see if we should use the new med dialogs
 | 
|---|
 | 275 |   if uNewMedDialog = 0 then
 | 
|---|
 | 276 |   begin
 | 
|---|
 | 277 |     if UseNewMedDialogs then uNewMedDialog := 1 else uNewMedDialog := -1;
 | 
|---|
 | 278 |   end;
 | 
|---|
 | 279 |   if (uNewMedDialog > 0) and ((FormID = OD_MEDOUTPT) or (FormID = OD_MEDINPT)) then
 | 
|---|
 | 280 |       FormID := OD_MEDS;
 | 
|---|
 | 281 |   // create the form for a given ordering dialog
 | 
|---|
 | 282 |   case FormID of
 | 
|---|
 | 283 |   OD_MEDIV:     DialogClass := TfrmODMedIV;
 | 
|---|
 | 284 |   OD_MEDINPT:   DialogClass := TfrmODMedIn;
 | 
|---|
 | 285 |   OD_MEDS:      DialogClass := TfrmODMeds;
 | 
|---|
 | 286 |   OD_MEDOUTPT:  DialogClass := TfrmODMedOut;
 | 
|---|
 | 287 |   OD_MEDNONVA:  DialogClass := TfrmODMedNVA;
 | 
|---|
 | 288 |   OD_MISC:      DialogClass := TfrmODMisc;
 | 
|---|
 | 289 |   OD_GENERIC:
 | 
|---|
 | 290 |      begin
 | 
|---|
 | 291 |       if ODEvtID>0 then
 | 
|---|
 | 292 |        SetOrderEventIDOnCreate(ODEvtID);
 | 
|---|
 | 293 |       DialogClass := TfrmODGen;
 | 
|---|
 | 294 |      end;
 | 
|---|
 | 295 |   OD_IMAGING:   DialogClass := TfrmODRad;
 | 
|---|
 | 296 |   OD_DIET:      DialogClass := TfrmODDiet;
 | 
|---|
 | 297 |   OD_LAB:       DialogClass := TfrmODLab;
 | 
|---|
 | 298 |   OD_BB:        DialogClass := TfrmODBBank;
 | 
|---|
 | 299 |   OD_CONSULT:   DialogClass := TfrmODCslt;
 | 
|---|
 | 300 |   OD_PROCEDURE: DialogClass := TfrmODProc;
 | 
|---|
 | 301 |   OD_TEXTONLY:  DialogClass := TfrmODText;
 | 
|---|
 | 302 |   OD_VITALS:    DialogClass := TfrmODVitals;
 | 
|---|
 | 303 |   //OD_ALLERGY:   DialogClass := TfrmODAllergy;
 | 
|---|
 | 304 |   OD_AUTOACK:   DialogClass := TfrmODAuto;
 | 
|---|
 | 305 |   else Exit;
 | 
|---|
 | 306 |   end;
 | 
|---|
 | 307 |   if Sender = nil then Sender := Application;
 | 
|---|
 | 308 |   Result := DialogClass.Create(Sender);
 | 
|---|
 | 309 |   if Result <> nil then Result.CallOnExit := DestroyingOrderDialog;
 | 
|---|
 | 310 |   SetOrderEventTypeOnCreate(#0);
 | 
|---|
 | 311 |   SetOrderEventIDOnCreate(0);
 | 
|---|
 | 312 |   SetOrderFormIDOnCreate(0);
 | 
|---|
 | 313 | end;
 | 
|---|
 | 314 | 
 | 
|---|
 | 315 | function AuthorizedUser: Boolean;
 | 
|---|
 | 316 | begin
 | 
|---|
 | 317 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 318 |   Result := True;
 | 
|---|
 | 319 |   if User.NoOrdering then Result := False;
 | 
|---|
 | 320 |   if User.OrderRole = OR_BADKEYS then
 | 
|---|
 | 321 |   begin
 | 
|---|
 | 322 |     InfoBox(TX_BADKEYS, TC_BADKEYS, MB_OK);
 | 
|---|
 | 323 |     Result := False;
 | 
|---|
 | 324 |   end;
 | 
|---|
 | 325 | end;
 | 
|---|
 | 326 | 
 | 
|---|
 | 327 | function AuthorizedToVerify: Boolean;
 | 
|---|
 | 328 | begin
 | 
|---|
 | 329 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 330 |   Result := True;
 | 
|---|
 | 331 |   if not User.EnableVerify then Result := False;
 | 
|---|
 | 332 |   if User.OrderRole = OR_BADKEYS then
 | 
|---|
 | 333 |   begin
 | 
|---|
 | 334 |     InfoBox(TX_BADKEYS, TC_BADKEYS, MB_OK);
 | 
|---|
 | 335 |     Result := False;
 | 
|---|
 | 336 |   end;
 | 
|---|
 | 337 | end;
 | 
|---|
 | 338 | 
 | 
|---|
 | 339 | function EncounterPresent: Boolean;
 | 
|---|
 | 340 | { make sure a location and provider are selected, returns false if not }
 | 
|---|
 | 341 | begin
 | 
|---|
 | 342 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 343 |   Result := True;
 | 
|---|
 | 344 |   if (Encounter.Provider > 0) and not PersonHasKey(Encounter.Provider, 'PROVIDER')
 | 
|---|
 | 345 |     then InfoBox(TX_PROV_KEY, TC_PROV_KEY, MB_OK);
 | 
|---|
 | 346 |   if (Encounter.Provider = 0) or (Encounter.Location = 0) or
 | 
|---|
 | 347 |     ((Encounter.Provider > 0) and (not PersonHasKey(Encounter.Provider, 'PROVIDER'))) then
 | 
|---|
 | 348 |   begin
 | 
|---|
 | 349 |     // don't prompt provider if current user has ORES and is the provider
 | 
|---|
 | 350 |     if (User.OrderRole = OR_PHYSICIAN) and (Encounter.Provider = User.DUZ) and (User.IsProvider)
 | 
|---|
 | 351 |       then UpdateEncounter(NPF_SUPPRESS)
 | 
|---|
 | 352 |       else UpdateEncounter(NPF_PROVIDER);
 | 
|---|
 | 353 |     frmFrame.DisplayEncounterText;
 | 
|---|
 | 354 |   end;
 | 
|---|
 | 355 |   if (Encounter.Provider = 0) or (Encounter.Location = 0) then
 | 
|---|
 | 356 |   begin
 | 
|---|
 | 357 |     if not frmFrame.CCOWDrivedChange then   //jdccow
 | 
|---|
 | 358 |       InfoBox(TX_PROV_LOC, TC_PROV_LOC, MB_OK or MB_ICONWARNING);  {!!!}
 | 
|---|
 | 359 |     Result := False;
 | 
|---|
 | 360 |   end;
 | 
|---|
 | 361 |   if (Encounter.Provider > 0) and not PersonHasKey(Encounter.Provider, 'PROVIDER') then
 | 
|---|
 | 362 |   begin
 | 
|---|
 | 363 |     if not frmFrame.CCOWDrivedChange then   //jdccow
 | 
|---|
 | 364 |       InfoBox(TX_PROV_KEY, TC_PROV_KEY, MB_OK);
 | 
|---|
 | 365 |     Result := False;
 | 
|---|
 | 366 |   end;
 | 
|---|
 | 367 | end;
 | 
|---|
 | 368 | 
 | 
|---|
 | 369 | function EncounterPresentEDO: Boolean;
 | 
|---|
 | 370 | begin
 | 
|---|
 | 371 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 372 |   Result := True;
 | 
|---|
 | 373 |   if (Encounter.Provider > 0) and not PersonHasKey(Encounter.Provider, 'PROVIDER')
 | 
|---|
 | 374 |     then InfoBox(TX_PROV_KEY, TC_PROV_KEY, MB_OK);
 | 
|---|
 | 375 |   if (Encounter.Provider = 0) or
 | 
|---|
 | 376 |     ((Encounter.Provider > 0) and (not PersonHasKey(Encounter.Provider, 'PROVIDER'))) then
 | 
|---|
 | 377 |   begin
 | 
|---|
 | 378 |     UpdateEncounter(NPF_PROVIDER);
 | 
|---|
 | 379 |     frmFrame.DisplayEncounterText;
 | 
|---|
 | 380 |   end;
 | 
|---|
 | 381 |   if (Encounter.Provider = 0) then
 | 
|---|
 | 382 |   begin
 | 
|---|
 | 383 |     InfoBox(TX_PROV_LOC, TC_PROV_LOC, MB_OK or MB_ICONWARNING);  {!!!}
 | 
|---|
 | 384 |     Result := False;
 | 
|---|
 | 385 |   end;
 | 
|---|
 | 386 |   if (Encounter.Provider > 0) and not PersonHasKey(Encounter.Provider, 'PROVIDER') then
 | 
|---|
 | 387 |   begin
 | 
|---|
 | 388 |     InfoBox(TX_PROV_KEY, TC_PROV_KEY, MB_OK);
 | 
|---|
 | 389 |     Result := False;
 | 
|---|
 | 390 |   end;
 | 
|---|
 | 391 | end;
 | 
|---|
 | 392 | 
 | 
|---|
 | 393 | function LockedForOrdering: Boolean;
 | 
|---|
 | 394 | var
 | 
|---|
 | 395 |   ErrMsg: string;
 | 
|---|
 | 396 | begin
 | 
|---|
 | 397 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 398 |   if uPatientLocked then Result := True else
 | 
|---|
 | 399 |   begin
 | 
|---|
 | 400 |     LockPatient(ErrMsg);
 | 
|---|
 | 401 |     if ErrMsg = '' then
 | 
|---|
 | 402 |     begin
 | 
|---|
 | 403 |       Result := True;
 | 
|---|
 | 404 |       uPatientLocked := True;
 | 
|---|
 | 405 |       frmFrame.stsArea.Panels.Items[4].Text := 'LOCK';
 | 
|---|
 | 406 |     end else
 | 
|---|
 | 407 |     begin
 | 
|---|
 | 408 |       Result := False;
 | 
|---|
 | 409 |       InfoBox(ErrMsg, TC_NO_LOCK, MB_OK);
 | 
|---|
 | 410 |     end;
 | 
|---|
 | 411 |   end;
 | 
|---|
 | 412 | end;
 | 
|---|
 | 413 | 
 | 
|---|
 | 414 | procedure UnlockIfAble;
 | 
|---|
 | 415 | begin
 | 
|---|
 | 416 |   if (Changes.Orders.Count = 0) and not uKeepLock then
 | 
|---|
 | 417 |   begin
 | 
|---|
 | 418 |     UnlockPatient;
 | 
|---|
 | 419 |     uPatientLocked := False;
 | 
|---|
 | 420 |     frmFrame.stsArea.Panels.Items[4].Text := '';
 | 
|---|
 | 421 |   end;
 | 
|---|
 | 422 | end;
 | 
|---|
 | 423 | 
 | 
|---|
 | 424 | function OrderCanBeLocked(OrderID: string): Boolean;
 | 
|---|
 | 425 | var
 | 
|---|
 | 426 |   ErrMsg: string;
 | 
|---|
 | 427 | begin
 | 
|---|
 | 428 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 429 |   LockOrder(OrderID, ErrMsg);
 | 
|---|
 | 430 |   if ErrMsg = '' then
 | 
|---|
 | 431 |   begin
 | 
|---|
 | 432 |     Result := True;
 | 
|---|
 | 433 |     frmFrame.stsArea.Panels.Items[4].Text := 'LOCK';
 | 
|---|
 | 434 |   end else
 | 
|---|
 | 435 |   begin
 | 
|---|
 | 436 |     Result := False;
 | 
|---|
 | 437 |     InfoBox(ErrMsg, TC_NO_LOCK, MB_OK);
 | 
|---|
 | 438 |   end;
 | 
|---|
 | 439 | end;
 | 
|---|
 | 440 | 
 | 
|---|
 | 441 | procedure UnlockOrderIfAble(OrderID: string);
 | 
|---|
 | 442 | begin
 | 
|---|
 | 443 |   UnlockOrder(OrderID);
 | 
|---|
 | 444 |   frmFrame.stsArea.Panels.Items[4].Text := '';
 | 
|---|
 | 445 | end;
 | 
|---|
 | 446 | 
 | 
|---|
 | 447 | procedure AddSelectedToChanges(AList: TList);
 | 
|---|
 | 448 | { update Changes with orders that were created by taking actions }
 | 
|---|
 | 449 | var
 | 
|---|
 | 450 |   i, CanSign: Integer;
 | 
|---|
 | 451 |   AnOrder: TOrder;
 | 
|---|
 | 452 | begin
 | 
|---|
 | 453 |   if (Encounter.Provider = User.DUZ) and User.CanSignOrders
 | 
|---|
 | 454 |     then CanSign := CH_SIGN_YES
 | 
|---|
 | 455 |     else CanSign := CH_SIGN_NA;
 | 
|---|
 | 456 |   with AList do for i := 0 to Count - 1 do
 | 
|---|
 | 457 |   begin
 | 
|---|
 | 458 |     AnOrder := TOrder(Items[i]);
 | 
|---|
 | 459 |     with AnOrder do Changes.Add(CH_ORD, ID, Text, '', CanSign);
 | 
|---|
 | 460 |     if (Length(AnOrder.ActionOn) > 0)
 | 
|---|
 | 461 |       and not Changes.ExistForOrder(Piece(AnOrder.ActionOn, ';', 1))
 | 
|---|
 | 462 |       then UnlockOrder(AnOrder.ActionOn);
 | 
|---|
 | 463 |   end;
 | 
|---|
 | 464 | end;
 | 
|---|
 | 465 | 
 | 
|---|
 | 466 | procedure ResetDialogProperties(const AnID: string; AnEvent: TOrderDelayEvent; var ResolvedDialog: TOrderDialogResolved);
 | 
|---|
 | 467 | begin
 | 
|---|
 | 468 |   if StrToIntDef(AnID,0)>0 then
 | 
|---|
 | 469 |     Exit;
 | 
|---|
 | 470 |   if XfInToOutNow then
 | 
|---|
 | 471 |   begin
 | 
|---|
 | 472 |     ResolvedDialog.DisplayGroup := OutptDisp;
 | 
|---|
 | 473 |     ResolvedDialog.DialogIEN    := MedsOutDlgIen;
 | 
|---|
 | 474 |     ResolvedDialog.FormID       := MedsOutDlgFormID;
 | 
|---|
 | 475 |     ResolvedDialog.QuickLevel   := 0;
 | 
|---|
 | 476 |     Exit;
 | 
|---|
 | 477 |   end;
 | 
|---|
 | 478 |   //if ResolvedDialog.DisplayGroup in [MedsDisp, OutptDisp, InptDisp, NonVADisp, ClinDisp] then
 | 
|---|
 | 479 |   if (ResolvedDialog.DisplayGroup = InptDisp) or
 | 
|---|
 | 480 |     (ResolvedDialog.DisplayGroup = OutptDisp) or
 | 
|---|
 | 481 |     (ResolvedDialog.DisplayGroup = MedsDisp) or
 | 
|---|
 | 482 |     (ResolvedDialog.DisplayGroup =  NonVADisp) or
 | 
|---|
 | 483 |     (ResolvedDialog.DisplayGroup =  ClinDisp) then
 | 
|---|
 | 484 |   begin
 | 
|---|
 | 485 |     if (AnEvent.EventType <> 'D') and (AnEvent.EventIFN > 0) then
 | 
|---|
 | 486 |     begin
 | 
|---|
 | 487 |       if (AnEvent.EventType = 'T') and IsPassEvt(AnEvent.PtEventIFN,'T') then
 | 
|---|
 | 488 |       begin
 | 
|---|
 | 489 |         ResolvedDialog.DisplayGroup := OutptDisp;
 | 
|---|
 | 490 |         ResolvedDialog.DialogIEN    := MedsOutDlgIen;
 | 
|---|
 | 491 |         ResolvedDialog.FormID       := MedsOutDlgFormID;
 | 
|---|
 | 492 |         ResolvedDialog.QuickLevel   := 0;
 | 
|---|
 | 493 |       end
 | 
|---|
 | 494 |       else
 | 
|---|
 | 495 |       begin
 | 
|---|
 | 496 |         //AGP changes to handle IMO INV Dialog opening the unit dose dialog.
 | 
|---|
 | 497 |         if (ResolvedDialog.DisplayGroup = ClinDisp) and (Resolveddialog.DialogIEN = MedsIVDlgIEN) and (ResolvedDialog.FormID = MedsIVDlgFormId) then
 | 
|---|
 | 498 |           begin
 | 
|---|
 | 499 |             ResolvedDialog.DisplayGroup := IVDisp;
 | 
|---|
 | 500 |             ResolvedDialog.DialogIEN    := MedsIVDlgIen;
 | 
|---|
 | 501 |             ResolvedDialog.FormID       := MedsIVDlgFormId;
 | 
|---|
 | 502 |           end
 | 
|---|
 | 503 |         else
 | 
|---|
 | 504 |           begin
 | 
|---|
 | 505 |             ResolvedDialog.DisplayGroup := InptDisp;
 | 
|---|
 | 506 |             ResolvedDialog.DialogIEN    := MedsInDlgIen;
 | 
|---|
 | 507 |             ResolvedDialog.FormID       := MedsInDlgFormId;
 | 
|---|
 | 508 |           end;
 | 
|---|
 | 509 |         if Length(ResolvedDialog.ShowText)>0 then
 | 
|---|
 | 510 |           ResolvedDialog.QuickLevel   := 2;
 | 
|---|
 | 511 |       end;
 | 
|---|
 | 512 |     end
 | 
|---|
 | 513 |     else if (AnEvent.EventType = 'D') and (AnEvent.EventIFN > 0) then
 | 
|---|
 | 514 |     begin
 | 
|---|
 | 515 |       ResolvedDialog.DisplayGroup := OutptDisp;
 | 
|---|
 | 516 |       ResolvedDialog.DialogIEN    := MedsOutDlgIen;
 | 
|---|
 | 517 |       ResolvedDialog.FormID       := MedsOutDlgFormID;
 | 
|---|
 | 518 |       ResolvedDialog.QuickLevel   := 0;
 | 
|---|
 | 519 |     end;
 | 
|---|
 | 520 | 
 | 
|---|
 | 521 |     if XferOutToInOnMeds then
 | 
|---|
 | 522 |     begin
 | 
|---|
 | 523 |       ResolvedDialog.DisplayGroup := InptDisp;
 | 
|---|
 | 524 |       ResolvedDialog.DialogIEN    := MedsInDlgIen;
 | 
|---|
 | 525 |       ResolvedDialog.FormID       := MedsInDlgFormId;
 | 
|---|
 | 526 |       ResolvedDialog.QuickLevel := 0;
 | 
|---|
 | 527 |     end;
 | 
|---|
 | 528 |   end;
 | 
|---|
 | 529 |   if ResolvedDialog.DisplayGroup = IVDisp then
 | 
|---|
 | 530 |   begin
 | 
|---|
 | 531 |     if Length(ResolvedDialog.ShowText)>0 then
 | 
|---|
 | 532 |       ResolvedDialog.QuickLevel   := 2;
 | 
|---|
 | 533 |   end;
 | 
|---|
 | 534 |   if (CharAt(AnID,1) = 'C') and (ResolvedDialog.DisplayGroup in [CsltDisp, ProcDisp]) then
 | 
|---|
 | 535 |     ResolvedDialog.QuickLevel   := 0;  // CSV - force dialog, to validate ICD code being copied into new order {RV}
 | 
|---|
 | 536 | end;
 | 
|---|
 | 537 | 
 | 
|---|
 | 538 | function IsInvalidActionWarning(const AnOrderText,AnOrderID: String): boolean;
 | 
|---|
 | 539 | var
 | 
|---|
 | 540 |   AnErrLst, tmpList: TStringList;
 | 
|---|
 | 541 | begin
 | 
|---|
 | 542 |   Result := False;
 | 
|---|
 | 543 |   AnErrlst := TStringList.Create;
 | 
|---|
 | 544 |   IsLatestAction(AnOrderID,AnErrLst);
 | 
|---|
 | 545 |   if AnErrLst.Count > 0 then
 | 
|---|
 | 546 |   begin
 | 
|---|
 | 547 |     tmpList := TStringList.Create;
 | 
|---|
 | 548 |     PiecesToList(AnsiReplaceStr(AnOrderText,'#D#A','^'),'^',tmpList);
 | 
|---|
 | 549 |     tmpList.Add(' ');
 | 
|---|
 | 550 | //  tmpList.Add('Cannot be released to service(s) because of the following happened action(s):');  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 551 |     tmpList.Add(DKLangConstW('uOrders_Cannot_be_released_to_servicexsx_because_of_the_following_happened_actionxsxx')); //kt added 8/8/2007
 | 
|---|
 | 552 |     tmpList.Add(' ');
 | 
|---|
 | 553 |     tmpList.AddStrings(TStrings(AnErrLst));
 | 
|---|
 | 554 | //  ReportBox(tmpList,'Cannot be released to service(s)',False);  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 555 |     ReportBox(tmpList,DKLangConstW('uOrders_Cannot_be_released_to_servicexsx'),False); //kt added 8/8/2007
 | 
|---|
 | 556 |     tmpList.Free;
 | 
|---|
 | 557 |     AnErrLst.Free;
 | 
|---|
 | 558 |     Result := True;
 | 
|---|
 | 559 |   end;
 | 
|---|
 | 560 | end;
 | 
|---|
 | 561 | 
 | 
|---|
 | 562 | procedure InitialOrderVariables;
 | 
|---|
 | 563 | begin
 | 
|---|
 | 564 |   InptDisp := DisplayGroupByName('UD RX');
 | 
|---|
 | 565 |   OutptDisp := DisplayGroupByName('O RX');
 | 
|---|
 | 566 |   MedsDisp := DisplayGroupByName('RX');
 | 
|---|
 | 567 |   IVDisp   := DisplayGroupByName('IV RX');
 | 
|---|
 | 568 |   ClinDisp := DisplayGroupByName('C RX');
 | 
|---|
 | 569 |   NurDisp  := DisplayGroupByName('NURS');
 | 
|---|
 | 570 |   CsltDisp := DisplayGroupByName('CSLT');
 | 
|---|
 | 571 |   ProcDisp := DisplayGroupByName('PROC');
 | 
|---|
 | 572 |   ImgDisp  := DisplayGroupByName('XRAY');
 | 
|---|
 | 573 |   NonVADisp := DisplayGroupByName('NV RX');
 | 
|---|
 | 574 |   MedsInDlgIen  := DlgIENForName('PSJ OR PAT OE');
 | 
|---|
 | 575 |   MedsOutDlgIen := DlgIENForName('PSO OERR');
 | 
|---|
 | 576 |   MedsNVADlgIen := DlgIENForName('PSH OERR');
 | 
|---|
 | 577 |   MedsIVDlgIen := DlgIENForName('PSJI OR PAT FLUID OE');
 | 
|---|
 | 578 |   MedsInDlgFormId  := FormIDForDialog(MedsInDlgIen);
 | 
|---|
 | 579 |   MedsOutDlgFormId := FormIDForDialog(MedsOutDlgIen);
 | 
|---|
 | 580 |   MedsNVADlgFormID := FormIDForDialog(MedsNVADlgIen);
 | 
|---|
 | 581 |   MedsIVDlgFormID := FormIDForDialog(MedsIVDlgIen);
 | 
|---|
 | 582 | end;
 | 
|---|
 | 583 | 
 | 
|---|
 | 584 | function IsValidActionOnComplexOrder(AnOrderID, AnAction: string;
 | 
|---|
 | 585 |     AListBox: TListBox; var CheckedList: TStringList; var ErrMsg: string; var ParentOrderID: string): boolean;  //PSI-COMPLEX
 | 
|---|
 | 586 | 
 | 
|---|
 | 587 | //const
 | 
|---|
 | 588 | //COMPLEX_SIGN  = 'You have requested to sign a medication order which was entered as part of a complex order.' +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 589 | //  'The following are the orders associated with the same complex order.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 590 | //COMPLEX_SIGN1 = ' Do you want to sign all of these orders?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 591 | 
 | 
|---|
 | 592 | //COMPLEX_DC  = 'You have requested to discontinue a medication order which was entered as part of a complex order.' +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 593 | //  ' The following are all of the associated orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 594 | //COMPLEX_DC1 =' Do you want to dicscontinue all of them?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 595 | 
 | 
|---|
 | 596 | //COMPLEX_HD  = 'You have requested to hold a medication order which was entered as part of a complex order.' +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 597 | //  ' The following are all of the associated orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 598 | //COMPLEX_HD1 = ' Do you want to hold all of them?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 599 | 
 | 
|---|
 | 600 | //COMPLEX_UNHD  = 'You have requested to release the hold of a medication order which was entered as part of a complex order.' +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 601 | //  ' The following are all of the associated orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 602 | //COMPLEX_UNHD1 = ' Do you want to release all of them?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 603 | 
 | 
|---|
 | 604 | //COMPLEX_RENEW = 'You can not take the renew action on a complex medication which has the following associated orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 605 | //COMPLEX_RENEW1 = ' You must enter a new order.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 606 | 
 | 
|---|
 | 607 | //COMPLEX_VERIFY ='You have requested to verify a medication order which was entered as part of a complex order.' +  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 608 | //  ' The following are all of the associated orders.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 609 | //COMPLEX_VERIFY1 =' Do you want to verify all of them?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 610 | 
 | 
|---|
 | 611 | //COMPLEX_OTHER = 'You can not take this action on a complex medication which has the following associated orders.'  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 612 | //  + ' You must enter a new order.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 613 | 
 | 
|---|
 | 614 | //COMPLEX_CANRENEW1 = 'The selected order for renew: ';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 615 | //COMPLEX_CANRENEW2 = ' is a part of a complex order.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 616 | //COMPLEX_CANRENEW3 = 'The following whole complex order will be renewed.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 617 | 
 | 
|---|
 | 618 | var
 | 
|---|
 | 619 |   CurrentActID, POrderTxt, AChildOrderTxt, CplxOrderMsg: string;
 | 
|---|
 | 620 |   ChildList,ChildIdxList,ChildTxtList, CategoryList: TStringList;
 | 
|---|
 | 621 |   ShowCancelButton: boolean;
 | 
|---|
 | 622 |   COMPLEX_SIGN  : string; //kt
 | 
|---|
 | 623 |   COMPLEX_SIGN1 : string; //kt
 | 
|---|
 | 624 |   COMPLEX_DC  : string; //kt
 | 
|---|
 | 625 |   COMPLEX_DC1 : string; //kt
 | 
|---|
 | 626 |   COMPLEX_HD  : string; //kt
 | 
|---|
 | 627 |   COMPLEX_HD1 : string; //kt
 | 
|---|
 | 628 |   COMPLEX_UNHD  : string; //kt
 | 
|---|
 | 629 |   COMPLEX_UNHD1 : string; //kt
 | 
|---|
 | 630 |   COMPLEX_RENEW : string; //kt
 | 
|---|
 | 631 |   COMPLEX_RENEW1 : string; //kt
 | 
|---|
 | 632 |   COMPLEX_VERIFY : string; //kt
 | 
|---|
 | 633 |   COMPLEX_VERIFY1 : string; //kt
 | 
|---|
 | 634 |   COMPLEX_OTHER : string; //kt
 | 
|---|
 | 635 |   COMPLEX_CANRENEW1 : string; //kt
 | 
|---|
 | 636 |   COMPLEX_CANRENEW2 : string; //kt
 | 
|---|
 | 637 |   COMPLEX_CANRENEW3 : string; //kt
 | 
|---|
 | 638 | 
 | 
|---|
 | 639 |   procedure RetrieveOrderTextPSI(AOrderList: TStringList; var AODTextList, AnIdxList: TStringList;
 | 
|---|
 | 640 |     TheAction: string; AParentID: string = '');
 | 
|---|
 | 641 |   var
 | 
|---|
 | 642 |     ix,jx: integer;
 | 
|---|
 | 643 |     tempid: string;
 | 
|---|
 | 644 |   begin
 | 
|---|
 | 645 |     for ix := 0 to AOrderList.count - 1  do
 | 
|---|
 | 646 |     begin
 | 
|---|
 | 647 | //    if AListBox.Name = 'lstOrders' then  with AListBox do  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 648 |       if AListBox.Name = DKLangConstW('uOrders_lstOrders') then  with AListBox do //kt added 8/8/2007
 | 
|---|
 | 649 |       begin
 | 
|---|
 | 650 |         for jx := 0 to Items.Count - 1 do
 | 
|---|
 | 651 |           if TOrder(Items.Objects[jx]).ID = AOrderList[ix] then
 | 
|---|
 | 652 |           begin
 | 
|---|
 | 653 |             TOrder(Items.Objects[jx]).ParentID := AParentID;
 | 
|---|
 | 654 |             if CategoryList.IndexOf(TheAction)>-1 then
 | 
|---|
 | 655 |               Selected[jx] := True;
 | 
|---|
 | 656 |             AODTextList.Add(TOrder(Items.Objects[jx]).ID + '^' + TOrder(Items.Objects[jx]).Text);
 | 
|---|
 | 657 |             if AnIdxList.IndexOf(IntToStr(jx)) > -1 then
 | 
|---|
 | 658 |               continue;
 | 
|---|
 | 659 |             AnIdxList.Add(IntToStr(jx));
 | 
|---|
 | 660 |           end;
 | 
|---|
 | 661 |       end
 | 
|---|
 | 662 |       else if (AListBox.Name = 'lstMedsOut' ) or (AListBox.Name = 'lstMedsIn')
 | 
|---|
 | 663 |               or (AListBox.Name = 'lstMedsNonVA') then with AListBox do
 | 
|---|
 | 664 |       begin
 | 
|---|
 | 665 |          for jx := 0 to Items.Count - 1 do
 | 
|---|
 | 666 |          begin
 | 
|---|
 | 667 |           tempid := TMedListRec(AListBox.Items.Objects[jx]).OrderID;
 | 
|---|
 | 668 |           if tempid = AOrderList[ix] then
 | 
|---|
 | 669 |           begin
 | 
|---|
 | 670 |             if CategoryList.IndexOf(TheAction)>-1 then
 | 
|---|
 | 671 |               Selected[jx] := True;
 | 
|---|
 | 672 |             AODTextList.Add(tempid + '^' + Items[jx]);
 | 
|---|
 | 673 |             AnIdxList.Add(IntToStr(jx));
 | 
|---|
 | 674 |           end;
 | 
|---|
 | 675 |          end;
 | 
|---|
 | 676 |       end;
 | 
|---|
 | 677 |     end;
 | 
|---|
 | 678 |   end;
 | 
|---|
 | 679 | 
 | 
|---|
 | 680 |   procedure DeselectChild(AnIdxList: TStringList);
 | 
|---|
 | 681 |   var
 | 
|---|
 | 682 |     dix: integer;
 | 
|---|
 | 683 |   begin
 | 
|---|
 | 684 |     for dix := 0 to AnIdxList.Count - 1 do
 | 
|---|
 | 685 |     begin
 | 
|---|
 | 686 |       try
 | 
|---|
 | 687 |        if StrToInt(AnIdxList[dix]) < AListBox.Items.Count then
 | 
|---|
 | 688 |         AListBox.Selected[StrToInt(AnIdxList[dix])] := False;
 | 
|---|
 | 689 |       except
 | 
|---|
 | 690 |         // do nothing
 | 
|---|
 | 691 |       end;
 | 
|---|
 | 692 |     end;
 | 
|---|
 | 693 |   end;
 | 
|---|
 | 694 | 
 | 
|---|
 | 695 |   function MakeMessage(ErrMsg1,ErrMsg2,ErrMsg3: string): string;
 | 
|---|
 | 696 |   begin
 | 
|---|
 | 697 |     if Length(ErrMsg1)>0 then
 | 
|---|
 | 698 |       Result := ErrMsg1 + ErrMsg2
 | 
|---|
 | 699 |     else
 | 
|---|
 | 700 |       Result := ErrMsg2 + ErrMsg3;
 | 
|---|
 | 701 |   end;
 | 
|---|
 | 702 | 
 | 
|---|
 | 703 | begin
 | 
|---|
 | 704 |   COMPLEX_SIGN  := DKLangConstW('uOrders_You_have_requested_to_sign_a_medication_order_which_was_entered_as_part_of_a_complex_orderx') + //kt added 8/8/2007
 | 
|---|
 | 705 |     DKLangConstW('uOrders_The_following_are_the_orders_associated_with_the_same_complex_orderx'); //kt added 8/8/2007
 | 
|---|
 | 706 |   COMPLEX_SIGN1 := DKLangConstW('uOrders_Do_you_want_to_sign_all_of_these_ordersx'); //kt added 8/8/2007
 | 
|---|
 | 707 |   COMPLEX_DC  := DKLangConstW('uOrders_You_have_requested_to_discontinue_a_medication_order_which_was_entered_as_part_of_a_complex_orderx') + //kt added 8/8/2007
 | 
|---|
 | 708 |     DKLangConstW('uOrders_The_following_are_all_of_the_associated_ordersx'); //kt added 8/8/2007
 | 
|---|
 | 709 |   COMPLEX_DC1 :=DKLangConstW('uOrders_Do_you_want_to_dicscontinue_all_of_themx'); //kt added 8/8/2007
 | 
|---|
 | 710 |   COMPLEX_HD  := DKLangConstW('uOrders_You_have_requested_to_hold_a_medication_order_which_was_entered_as_part_of_a_complex_orderx') + //kt added 8/8/2007
 | 
|---|
 | 711 |     DKLangConstW('uOrders_The_following_are_all_of_the_associated_ordersx'); //kt added 8/8/2007
 | 
|---|
 | 712 |   COMPLEX_HD1 := DKLangConstW('uOrders_Do_you_want_to_hold_all_of_themx'); //kt added 8/8/2007
 | 
|---|
 | 713 |   COMPLEX_UNHD  := DKLangConstW('uOrders_You_have_requested_to_release_the_hold_of_a_medication_order_which_was_entered_as_part_of_a_complex_orderx') + //kt added 8/8/2007
 | 
|---|
 | 714 |     DKLangConstW('uOrders_The_following_are_all_of_the_associated_ordersx'); //kt added 8/8/2007
 | 
|---|
 | 715 |   COMPLEX_UNHD1 := DKLangConstW('uOrders_Do_you_want_to_release_all_of_themx'); //kt added 8/8/2007
 | 
|---|
 | 716 |   COMPLEX_RENEW := DKLangConstW('uOrders_You_can_not_take_the_renew_action_on_a_complex_medication_which_has_the_following_associated_ordersx'); //kt added 8/8/2007
 | 
|---|
 | 717 |   COMPLEX_RENEW1 := DKLangConstW('uOrders_You_must_enter_a_new_orderx'); //kt added 8/8/2007
 | 
|---|
 | 718 |   COMPLEX_VERIFY :=DKLangConstW('uOrders_You_have_requested_to_verify_a_medication_order_which_was_entered_as_part_of_a_complex_orderx') + //kt added 8/8/2007
 | 
|---|
 | 719 |     DKLangConstW('uOrders_The_following_are_all_of_the_associated_ordersx'); //kt added 8/8/2007
 | 
|---|
 | 720 |   COMPLEX_VERIFY1 :=DKLangConstW('uOrders_Do_you_want_to_verify_all_of_themx'); //kt added 8/8/2007
 | 
|---|
 | 721 |   COMPLEX_OTHER := DKLangConstW('uOrders_You_can_not_take_this_action_on_a_complex_medication_which_has_the_following_associated_ordersx') //kt added 8/8/2007
 | 
|---|
 | 722 |     + DKLangConstW('uOrders_You_must_enter_a_new_orderx'); //kt added 8/8/2007
 | 
|---|
 | 723 |   COMPLEX_CANRENEW1 := DKLangConstW('uOrders_The_selected_order_for_renewx'); //kt added 8/8/2007
 | 
|---|
 | 724 |   COMPLEX_CANRENEW2 := DKLangConstW('uOrders_is_a_part_of_a_complex_orderx'); //kt added 8/8/2007
 | 
|---|
 | 725 |   COMPLEX_CANRENEW3 := DKLangConstW('uOrders_The_following_whole_complex_order_will_be_renewedx'); //kt added 8/8/2007
 | 
|---|
 | 726 | 
 | 
|---|
 | 727 |   Result := True;
 | 
|---|
 | 728 |   if AnAction = OA_COPY then Exit;
 | 
|---|
 | 729 |   CurrentActID := Piece(AnOrderID,';',2);
 | 
|---|
 | 730 |   CplxOrderMsg := '';
 | 
|---|
 | 731 |   CategoryList := TStringList.Create;
 | 
|---|
 | 732 |   CategoryList.Add('DC');
 | 
|---|
 | 733 |   CategoryList.Add('HD');
 | 
|---|
 | 734 |   CategoryList.Add('RL');
 | 
|---|
 | 735 |   CategoryList.Add('VR');
 | 
|---|
 | 736 |   CategoryList.Add('ES');
 | 
|---|
 | 737 |   ShowCancelButton := False;
 | 
|---|
 | 738 | 
 | 
|---|
 | 739 |   if Length(ErrMsg)>0 then ErrMsg := ErrMsg + #13#13;
 | 
|---|
 | 740 |   ValidateComplexOrderAct(AnOrderID,CplxOrderMsg);
 | 
|---|
 | 741 |   if Pos('COMPLEX-PSI',CplxOrderMsg)>0 then
 | 
|---|
 | 742 |   begin
 | 
|---|
 | 743 |     ParentOrderID := Piece(CplxOrderMsg,'^',2);
 | 
|---|
 | 744 |     if CheckedList.IndexOf(ParentOrderID) >= 0 then
 | 
|---|
 | 745 |     begin
 | 
|---|
 | 746 |       ErrMsg := '';
 | 
|---|
 | 747 |       Exit;
 | 
|---|
 | 748 |     end;
 | 
|---|
 | 749 |     if CheckedList.Count = 0 then
 | 
|---|
 | 750 |       CheckedList.Add(ParentOrderID)
 | 
|---|
 | 751 |     else
 | 
|---|
 | 752 |     begin
 | 
|---|
 | 753 |       if CheckedList.IndexOf(ParentOrderID) < 0 then
 | 
|---|
 | 754 |         CheckedList.Add(ParentOrderID);
 | 
|---|
 | 755 |     end;
 | 
|---|
 | 756 |     ChildList := TStringList.Create;
 | 
|---|
 | 757 |     GetChildrenOfComplexOrder(ParentOrderID,CurrentActID,ChildList);
 | 
|---|
 | 758 |     ChildtxtList := TStringList.Create;
 | 
|---|
 | 759 |     ChildIdxList := TStringList.Create;
 | 
|---|
 | 760 |     RetrieveOrderTextPSI(ChildList,ChildtxtList,ChildIdxList,AnAction,ParentOrderID);
 | 
|---|
 | 761 |     if ChildtxtList.Count > 0 then
 | 
|---|
 | 762 |     begin
 | 
|---|
 | 763 |       if (AnAction = 'RN') or (AnAction = 'EV') then
 | 
|---|
 | 764 |       begin
 | 
|---|
 | 765 |         if not IsValidSchedule(ParentOrderID) then
 | 
|---|
 | 766 |         begin
 | 
|---|
 | 767 |           POrderTxt := RetrieveOrderText(ParentOrderID);
 | 
|---|
 | 768 |           if CharAt(POrderTxt,1)='+' then
 | 
|---|
 | 769 |             POrderTxt := Copy(POrderTxt,2,Length(POrderTxt));
 | 
|---|
 | 770 | //        if Pos('First Dose NOW',POrderTxt)>1 then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 771 |           if Pos(DKLangConstW('uOrders_First_Dose_NOW'),POrderTxt)>1 then //kt added 8/8/2007
 | 
|---|
 | 772 | //          Delete(POrderTxt, Pos('First Dose NOW',POrderTxt), Length('First Dose Now'));  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 773 |             Delete(POrderTxt, Pos(DKLangConstW('uOrders_First_Dose_NOW'),POrderTxt), Length(DKLangConstW('uOrders_First_Dose_Now'))); //kt added 8/8/2007
 | 
|---|
 | 774 | //        InfoBox('Invalid schedule!' + #13#13 + 'The selected order is a part of a complex order:' + #13  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 775 |           InfoBox(DKLangConstW('uOrders_Invalid_schedulex') + #13#13 + DKLangConstW('uOrders_The_selected_order_is_a_part_of_a_complex_orderx') + #13 //kt added 8/8/2007
 | 
|---|
 | 776 | //          + POrderTxt + #13#13 + ' It contains an invalid schedule.',  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 777 |             + POrderTxt + #13#13 + DKLangConstW('uOrders_It_contains_an_invalid_schedulex'), //kt added 8/8/2007
 | 
|---|
 | 778 | //          'Warning', MB_OK or MB_ICONWARNING);  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 779 |             DKLangConstW('uOrders_Warning'), MB_OK or MB_ICONWARNING); //kt added 8/8/2007
 | 
|---|
 | 780 |           DeselectChild(ChildIdxList);
 | 
|---|
 | 781 |           Result := False;
 | 
|---|
 | 782 |           ErrMsg := '';
 | 
|---|
 | 783 |           ChildtxtList.Free;
 | 
|---|
 | 784 |           ChildList.Clear;
 | 
|---|
 | 785 |           ChildList.Free;
 | 
|---|
 | 786 |           CategoryList.Clear;
 | 
|---|
 | 787 |           Exit;
 | 
|---|
 | 788 |         end;
 | 
|---|
 | 789 |       end;
 | 
|---|
 | 790 |       if AnAction = OA_DC then
 | 
|---|
 | 791 |       begin
 | 
|---|
 | 792 |         if not ActionOnComplexOrder(ChildtxtList,MakeMessage(ErrMsg,COMPLEX_DC,COMPLEX_DC1),True) then
 | 
|---|
 | 793 |         begin
 | 
|---|
 | 794 |           DeselectChild(ChildIdxList);
 | 
|---|
 | 795 |           Result := False;
 | 
|---|
 | 796 |         end;
 | 
|---|
 | 797 |       end
 | 
|---|
 | 798 |       else if AnAction = OA_SIGN then
 | 
|---|
 | 799 |       begin
 | 
|---|
 | 800 |         if not ActionOnComplexOrder(ChildtxtList,MakeMessage(ErrMsg,COMPLEX_SIGN,COMPLEX_SIGN1),True) then
 | 
|---|
 | 801 |         begin
 | 
|---|
 | 802 |           DeselectChild(ChildIdxList);
 | 
|---|
 | 803 |           Result := False;
 | 
|---|
 | 804 |         end;
 | 
|---|
 | 805 |       end
 | 
|---|
 | 806 |       else if AnAction = OA_HOLD then
 | 
|---|
 | 807 |       begin
 | 
|---|
 | 808 |         if Length(ErrMsg) < 1 then ShowCancelButton := True;
 | 
|---|
 | 809 |         if not ActionOnComplexOrder(ChildtxtList,MakeMessage(ErrMsg,COMPLEX_HD,COMPLEX_HD1),ShowCancelButton) then
 | 
|---|
 | 810 |         begin
 | 
|---|
 | 811 |           DeselectChild(ChildIdxList);
 | 
|---|
 | 812 |           Result := False;
 | 
|---|
 | 813 |         end;
 | 
|---|
 | 814 |       end
 | 
|---|
 | 815 |       else if AnAction = OA_UNHOLD then
 | 
|---|
 | 816 |       begin
 | 
|---|
 | 817 |         if Length(ErrMsg) < 1 then ShowCancelButton := True;
 | 
|---|
 | 818 |         if not ActionOnComplexOrder(ChildtxtList,MakeMessage(ErrMsg,COMPLEX_UNHD,COMPLEX_UNHD1),ShowCancelButton) then
 | 
|---|
 | 819 |         begin
 | 
|---|
 | 820 |           DeselectChild(ChildIdxList);
 | 
|---|
 | 821 |           Result := False;
 | 
|---|
 | 822 |         end;
 | 
|---|
 | 823 |       end
 | 
|---|
 | 824 |       else if AnAction = OA_VERIFY then
 | 
|---|
 | 825 |       begin
 | 
|---|
 | 826 |         if Length(ErrMsg) < 1 then ShowCancelButton := True;
 | 
|---|
 | 827 |         if not ActionOnComplexOrder(ChildtxtList,MakeMessage(ErrMsg,COMPLEX_VERIFY,COMPLEX_VERIFY1),ShowCancelButton) then
 | 
|---|
 | 828 |         begin
 | 
|---|
 | 829 |           DeselectChild(ChildIdxList);
 | 
|---|
 | 830 |           Result := False;
 | 
|---|
 | 831 |         end;
 | 
|---|
 | 832 |       end
 | 
|---|
 | 833 |       else if AnAction = OA_RENEW then
 | 
|---|
 | 834 |       begin
 | 
|---|
 | 835 |         if not IsRenewableComplexOrder(ParentOrderID) then
 | 
|---|
 | 836 |         begin
 | 
|---|
 | 837 |           if not ActionOnComplexOrder(ChildtxtList,MakeMessage(ErrMsg,COMPLEX_RENEW,COMPLEX_RENEW1),False) then
 | 
|---|
 | 838 |           begin
 | 
|---|
 | 839 |             DeselectChild(ChildIdxList);
 | 
|---|
 | 840 |             Result := False;
 | 
|---|
 | 841 |           end;
 | 
|---|
 | 842 |         end
 | 
|---|
 | 843 |         else
 | 
|---|
 | 844 |         begin
 | 
|---|
 | 845 |           POrderTxt := RetrieveOrderText(ParentOrderID);
 | 
|---|
 | 846 |           if CharAt(POrderTxt,1)='+' then
 | 
|---|
 | 847 |             POrderTxt := Copy(POrderTxt,2,Length(POrderTxt));
 | 
|---|
 | 848 | //        if Pos('First Dose NOW',POrderTxt)>1 then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 849 |           if Pos(DKLangConstW('uOrders_First_Dose_NOW'),POrderTxt)>1 then //kt added 8/8/2007
 | 
|---|
 | 850 | //          Delete(POrderTxt, Pos('First Dose NOW',POrderTxt), Length('First Dose Now'));  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 851 |             Delete(POrderTxt, Pos(DKLangConstW('uOrders_First_Dose_NOW'),POrderTxt), Length(DKLangConstW('uOrders_First_Dose_Now'))); //kt added 8/8/2007
 | 
|---|
 | 852 |           AChildOrderTxt := RetrieveOrderText(AnOrderID);
 | 
|---|
 | 853 |           if InfoBox(COMPLEX_CANRENEW1 + #13 + AChildOrderTxt
 | 
|---|
 | 854 |             + COMPLEX_CANRENEW2 + #13#13
 | 
|---|
 | 855 |             + COMPLEX_CANRENEW3 + #13 +  POrderTxt,
 | 
|---|
 | 856 | //          'Warning', MB_OKCANCEL or MB_ICONWARNING) = IDOK then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 857 |             DKLangConstW('uOrders_Warning'), MB_OKCANCEL or MB_ICONWARNING) = IDOK then //kt added 8/8/2007
 | 
|---|
 | 858 |           begin
 | 
|---|
 | 859 |             if AListBox.Name = 'lstOrders' then
 | 
|---|
 | 860 |               frmOrders.ParentComplexOrderID := ParentOrderID;
 | 
|---|
 | 861 |             if (AListBox.Name = 'lstMedsOut' ) or (AListBox.Name = 'lstMedsIn') then
 | 
|---|
 | 862 |               frmMeds.ParentComplexOrderID := ParentOrderID;
 | 
|---|
 | 863 |           end;
 | 
|---|
 | 864 |           DeselectChild(ChildIdxList);
 | 
|---|
 | 865 |         end;
 | 
|---|
 | 866 |       end;
 | 
|---|
 | 867 |     end;
 | 
|---|
 | 868 |     ErrMsg := '';
 | 
|---|
 | 869 |     ChildtxtList.Free;
 | 
|---|
 | 870 |     ChildList.Clear;
 | 
|---|
 | 871 |     ChildList.Free;
 | 
|---|
 | 872 |   end;
 | 
|---|
 | 873 |   CategoryList.Clear;
 | 
|---|
 | 874 | end;
 | 
|---|
 | 875 | 
 | 
|---|
 | 876 | { Write New Orders }
 | 
|---|
 | 877 | 
 | 
|---|
 | 878 | function ActivateAction(const AnID: string; AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 879 | // AnID: DlgIEN {;FormID;DGroup}
 | 
|---|
 | 880 | type
 | 
|---|
 | 881 |   TDialogClass = class of TfrmOMAction;
 | 
|---|
 | 882 | var
 | 
|---|
 | 883 |   DialogClass: TDialogClass;
 | 
|---|
 | 884 |   AFormID: Integer;
 | 
|---|
 | 885 | begin
 | 
|---|
 | 886 |   Result := False;
 | 
|---|
 | 887 |   AFormID := FormIDForDialog(StrToIntDef(Piece(AnID, ';', 1), 0));
 | 
|---|
 | 888 |   if AFormID > 0 then
 | 
|---|
 | 889 |   begin
 | 
|---|
 | 890 |     case AFormID of
 | 
|---|
 | 891 |       OM_ALLERGY:     if ARTPatchInstalled then
 | 
|---|
 | 892 |                         DialogClass := TfrmARTAllergy
 | 
|---|
 | 893 |                       else
 | 
|---|
 | 894 |                         begin
 | 
|---|
 | 895 |                           Result := False;
 | 
|---|
 | 896 |                           Exit;
 | 
|---|
 | 897 |                         end;
 | 
|---|
 | 898 |       OM_HTML:        DialogClass := TfrmOMHTML;
 | 
|---|
 | 899 |       999999:         DialogClass := TfrmOMAction;  // for testing!!!
 | 
|---|
 | 900 |     else
 | 
|---|
 | 901 |       Exit;
 | 
|---|
 | 902 |     end;
 | 
|---|
 | 903 |     if AnOwner = nil then AnOwner := Application;
 | 
|---|
 | 904 |     uOrderAction := DialogClass.Create(AnOwner);
 | 
|---|
 | 905 |     if (uOrderAction <> nil) (*and (not uOrderAction.AbortAction) *)then
 | 
|---|
 | 906 |     begin
 | 
|---|
 | 907 |       uOrderAction.CallOnExit := DestroyingOrderAction;
 | 
|---|
 | 908 |       uOrderAction.RefNum := ARefNum;
 | 
|---|
 | 909 |       uOrderAction.OrderDialog := StrToIntDef(Piece(AnID, ';', 1), 0);
 | 
|---|
 | 910 |       Result := True;
 | 
|---|
 | 911 |       if (not uOrderAction.AbortAction) then uOrderAction.ShowModal;
 | 
|---|
 | 912 |     end;
 | 
|---|
 | 913 |   end else
 | 
|---|
 | 914 |   begin
 | 
|---|
 | 915 |     //ShowMessage('Order Dialogs of type "Action" are available in List Manager only.');
 | 
|---|
 | 916 |     Result := False;
 | 
|---|
 | 917 |   end;
 | 
|---|
 | 918 | end;
 | 
|---|
 | 919 | 
 | 
|---|
 | 920 | function ActivateOrderDialog(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 921 |   AnOwner: TComponent; ARefNum: Integer; ANeedVerify: boolean = True): Boolean;
 | 
|---|
 | 922 | //const
 | 
|---|
 | 923 | //TX_NO_DEA     = 'Provider must have a DEA# or VA# to change this order';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 924 | //TC_NO_DEA     = 'DEA# Required';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 925 | //TC_IMO_ERROR  = 'Inpatient medication order on outpatient authorization required';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 926 | var
 | 
|---|
 | 927 |   TX_NO_DEA     : string; //KT
 | 
|---|
 | 928 |   TC_NO_DEA     : string; //KT
 | 
|---|
 | 929 |   TC_IMO_ERROR  : string; //KT
 | 
|---|
 | 930 | 
 | 
|---|
 | 931 |   ResolvedDialog: TOrderDialogResolved;
 | 
|---|
 | 932 |   x, EditedOrder, chkCopay, OrderID, PkgInfo,OrderPtEvtID,OrderEvtID,NssErr: string;
 | 
|---|
 | 933 |   ODItem: integer;
 | 
|---|
 | 934 |   IsInpatient, IsAnIMOOrder: boolean;
 | 
|---|
 | 935 |   IsPsoSupply,IsDischargeOrPass,IsPharmacyOrder,IsConsultOrder,ForIMO: boolean;
 | 
|---|
 | 936 |   tmpResp: TResponse;
 | 
|---|
 | 937 | begin
 | 
|---|
 | 938 |   TX_NO_DEA     := DKLangConstW('uOrders_Provider_must_have_a_DEAx_or_VAx_to_change_this_order'); //kt added 8/8/2007
 | 
|---|
 | 939 |   TC_NO_DEA     := DKLangConstW('uOrders_DEAx_Required'); //kt added 8/8/2007
 | 
|---|
 | 940 |   TC_IMO_ERROR  := DKLangConstW('uOrders_Inpatient_medication_order_on_outpatient_authorization_required'); //kt added 8/8/2007
 | 
|---|
 | 941 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 942 |   IsPsoSupply := False;
 | 
|---|
 | 943 |   Result := False;
 | 
|---|
 | 944 |   IsDischargeOrPass := False;
 | 
|---|
 | 945 |   IsAnIMOOrder  := False;
 | 
|---|
 | 946 |   ForIMO := False;
 | 
|---|
 | 947 |   // double check environment before continuing with order
 | 
|---|
 | 948 |   if uOrderDialog <> nil then uOrderDialog.Close; // then x := uOrderDialog.Name else x := '';
 | 
|---|
 | 949 |   //if ShowMsgOn(uOrderDialog <> nil, TX_DLG_ERR + CRLF + x, TC_DLG_ERR) then Exit;
 | 
|---|
 | 950 |   if CharAt(AnID, 1) = 'X' then
 | 
|---|
 | 951 |   begin
 | 
|---|
 | 952 |     ValidateOrderAction(Copy(AnID, 2, Length(AnID)), OA_CHANGE,   x);
 | 
|---|
 | 953 |     if ( Length(x)<1 ) and not (AnEvent.EventIFN > 0) then
 | 
|---|
 | 954 |       ValidateComplexOrderAct(Copy(AnID, 2, Length(AnID)),x);
 | 
|---|
 | 955 |     if (Pos('COMPLEX-PSI',x)>0) then
 | 
|---|
 | 956 |       x := TX_COMPLEX;
 | 
|---|
 | 957 |     if Length(x) > 0 then
 | 
|---|
 | 958 |       x := RetrieveOrderText(Copy(AnID, 2, Length(AnID))) + #13#10 + x;
 | 
|---|
 | 959 |     if ShowMsgOn(Length(x) > 0, x, TC_NO_CHANGE) then Exit;
 | 
|---|
 | 960 |   end;
 | 
|---|
 | 961 |   if CharAt(AnID, 1) = 'C' then
 | 
|---|
 | 962 |   begin
 | 
|---|
 | 963 |     ValidateOrderAction(Copy(AnID, 2, Length(AnID)), OA_COPY,     x);
 | 
|---|
 | 964 |     if Length(x) > 0 then
 | 
|---|
 | 965 |       x := RetrieveOrderText(Copy(AnID, 2, Length(AnID))) + #13#10 + x;
 | 
|---|
 | 966 |     if ShowMsgOn(Length(x) > 0, x, TC_NO_COPY)   then Exit;
 | 
|---|
 | 967 |  end;
 | 
|---|
 | 968 |   if CharAt(AnID, 1) = 'T' then
 | 
|---|
 | 969 |   begin
 | 
|---|
 | 970 |     ValidateOrderAction(Copy(AnID, 2, Length(AnID)), OA_TRANSFER, x);
 | 
|---|
 | 971 |     if Length(x) > 0 then
 | 
|---|
 | 972 |       x := RetrieveOrderText(Copy(AnID, 2, Length(AnID))) + #13#10 + x;
 | 
|---|
 | 973 |     if ShowMsgOn(Length(x) > 0, x, TC_NO_XFER) then Exit;
 | 
|---|
 | 974 |   end;
 | 
|---|
 | 975 |   if not IMOActionValidation(AnID, IsAnIMOOrder, x, AnEvent.EventType) then
 | 
|---|
 | 976 |   begin
 | 
|---|
 | 977 |     ShowMsgOn(Length(x) > 0, x, TC_IMO_ERROR);
 | 
|---|
 | 978 |     Exit;
 | 
|---|
 | 979 |   end;
 | 
|---|
 | 980 |   if ( (StrToIntDef(AnId,0)>0) and (AnEvent.EventIFN <= 0) ) then
 | 
|---|
 | 981 |     ForIMO := IsIMODialog(StrToInt(AnId))
 | 
|---|
 | 982 |   else if ( (IsAnIMOOrder) and (AnEvent.EventIFN <= 0) ) then
 | 
|---|
 | 983 |     ForIMO := True;
 | 
|---|
 | 984 | 
 | 
|---|
 | 985 |   OrderPtEvtID := GetOrderPtEvtID(Copy(AnID, 2, Length(AnID)));
 | 
|---|
 | 986 |   OrderEvtID := Piece(EventInfo(OrderPtEvtID),'^',2);
 | 
|---|
 | 987 |   // evaluate order dialog, build response list & see what form should be presented
 | 
|---|
 | 988 |   FillChar(ResolvedDialog, SizeOf(ResolvedDialog), #0);
 | 
|---|
 | 989 |   ResolvedDialog.InputID := AnID;
 | 
|---|
 | 990 |   BuildResponses(ResolvedDialog, GetKeyVars, AnEvent, ForIMO);
 | 
|---|
 | 991 |   if (ForIMO and ( (ResolvedDialog.DialogIEN = MedsInDlgIen)
 | 
|---|
 | 992 |     or (ResolvedDialog.DialogIEN = MedsIVDlgIen)) ) then
 | 
|---|
 | 993 |     ResolvedDialog.DisplayGroup := ClinDisp;
 | 
|---|
 | 994 |   ResetDialogProperties(AnID, AnEvent, ResolvedDialog);
 | 
|---|
 | 995 |  {* AGP CHANGE 26.20 Remove restriction to allowed for ordering of inpatient medication for an inpatient from an outpatient location
 | 
|---|
 | 996 |    //jd imo change
 | 
|---|
 | 997 |    if (ResolvedDialog.DisplayGroup = InptDisp) and (Patient.Inpatient) and (AnEvent.EventIFN < 1) then
 | 
|---|
 | 998 |    begin
 | 
|---|
 | 999 |      if IsClinicLoc(Encounter.Location) then
 | 
|---|
 | 1000 |      begin
 | 
|---|
 | 1001 |        MessageDlg(TX_NOINPT, mtWarning, [mbOK], 0);
 | 
|---|
 | 1002 |        Exit;
 | 
|---|
 | 1003 |      end;
 | 
|---|
 | 1004 |    end;
 | 
|---|
 | 1005 |    //jd imo change end  *}
 | 
|---|
 | 1006 |    if (ResolvedDialog.DisplayGroup = InptDisp) or
 | 
|---|
 | 1007 |       (ResolvedDialog.DisplayGroup = OutptDisp) or
 | 
|---|
 | 1008 |       (ResolvedDialog.DisplayGroup = MedsDisp) or
 | 
|---|
 | 1009 |       (ResolvedDialog.DisplayGroup = IVDisp) or
 | 
|---|
 | 1010 |       (ResolvedDialog.DisplayGroup =  NonVADisp) or
 | 
|---|
 | 1011 |       (ResolvedDialog.DisplayGroup =  ClinDisp) then  IsPharmacyOrder := True
 | 
|---|
 | 1012 |    else
 | 
|---|
 | 1013 |       IsPharmacyOrder := False;
 | 
|---|
 | 1014 |    (*  IsPharmacyOrder := ResolvedDialog.DisplayGroup in [InptDisp, OutptDisp,
 | 
|---|
 | 1015 |         MedsDisp,IVDisp, NonVADisp, ClinDisp];*)   //v25.27 range check error - RV
 | 
|---|
 | 1016 |   IsConsultOrder := ResolvedDialog.DisplayGroup in [CsltDisp,ProcDisp];
 | 
|---|
 | 1017 |   if (uAutoAC) and (not (ResolvedDialog.QuickLevel in [QL_REJECT,QL_CANCEL]))
 | 
|---|
 | 1018 |     and (not IsPharmacyOrder) and (not IsConsultOrder) then
 | 
|---|
 | 1019 |     ResolvedDialog.QuickLevel := QL_AUTO;
 | 
|---|
 | 1020 |   if (ResolvedDialog.DialogType = 'Q')
 | 
|---|
 | 1021 |     and (ResolvedDialog.DisplayGroup = InptDisp) then
 | 
|---|
 | 1022 |   begin
 | 
|---|
 | 1023 |      NssErr := IsValidQOSch(ResolvedDialog.InputID);
 | 
|---|
 | 1024 |      if (Length(NssErr) > 1) then
 | 
|---|
 | 1025 |      begin
 | 
|---|
 | 1026 |        if (NssErr <> 'OTHER') then
 | 
|---|
 | 1027 | //       ShowMessage('The order contains invalid non-standard schedule.');  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1028 |          ShowMessage(DKLangConstW('uOrders_The_order_contains_invalid_nonxstandard_schedulex')); //kt added 8/8/2007
 | 
|---|
 | 1029 |        NSSchedule := True;
 | 
|---|
 | 1030 |        ResolvedDialog.QuickLevel := 0;
 | 
|---|
 | 1031 |      end;
 | 
|---|
 | 1032 |   end;
 | 
|---|
 | 1033 |   if ResolvedDialog.DisplayGroup = InptDisp then       //nss
 | 
|---|
 | 1034 |   begin
 | 
|---|
 | 1035 |     if (CharAt(AnID, 1) = 'C') or (CharAt(AnID, 1) = 'T') or (CharAt(AnID, 1) = 'X') then
 | 
|---|
 | 1036 |     begin
 | 
|---|
 | 1037 |       if not IsValidSchedule(Copy(AnID, 2, Length(AnID))) then
 | 
|---|
 | 1038 |       begin
 | 
|---|
 | 1039 | //      ShowMessage('The order contains invalid non-standard schedule.');  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1040 |         ShowMessage(DKLangConstW('uOrders_The_order_contains_invalid_nonxstandard_schedulex')); //kt added 8/8/2007
 | 
|---|
 | 1041 |         NSSchedule := True;
 | 
|---|
 | 1042 |       end;
 | 
|---|
 | 1043 |     end;
 | 
|---|
 | 1044 |     if NSSchedule then ResolvedDialog.QuickLevel := 0;
 | 
|---|
 | 1045 |   end;
 | 
|---|
 | 1046 |   with ResolvedDialog do if (QuickLevel = QL_VERIFY) and (HasTemplateField(ShowText)) then QuickLevel := QL_DIALOG;
 | 
|---|
 | 1047 |   with ResolvedDialog do
 | 
|---|
 | 1048 |   begin
 | 
|---|
 | 1049 |     if QuickLevel = QL_REJECT then InfoBox(ShowText, TC_DLG_REJECT, MB_OK);
 | 
|---|
 | 1050 |     if (QuickLevel = QL_VERIFY) and (IsPharmacyOrder or ANeedVerify) then  ShowVerifyText(QuickLevel, ShowText, DisplayGroup=InptDisp);
 | 
|---|
 | 1051 |     if QuickLevel = QL_AUTO   then FormID := OD_AUTOACK;
 | 
|---|
 | 1052 |     if (QuickLevel = QL_REJECT) or (QuickLevel = QL_CANCEL) then Exit;
 | 
|---|
 | 1053 |     PushKeyVars(ResolvedDialog.QOKeyVars);
 | 
|---|
 | 1054 |   end;
 | 
|---|
 | 1055 |   if ShowMsgOn(not (ResolvedDialog.FormID > 0), TX_NOFORM, TC_NOFORM) then Exit;
 | 
|---|
 | 1056 |   with ResolvedDialog do if DialogType = 'X' then
 | 
|---|
 | 1057 |   begin
 | 
|---|
 | 1058 |     EditedOrder := Copy(Piece(ResponseID, '-', 1), 2, Length(ResponseID));
 | 
|---|
 | 1059 |   end
 | 
|---|
 | 1060 |   else EditedOrder := '';
 | 
|---|
 | 1061 |   if XfInToOutNow then
 | 
|---|
 | 1062 |   begin
 | 
|---|
 | 1063 |      //if Transfer an order to outpatient and release immediately
 | 
|---|
 | 1064 |      // then changing the Eventtype to 'C' instead of 'D'
 | 
|---|
 | 1065 |      IsDischargeOrPass := True;
 | 
|---|
 | 1066 |      AnEvent.EventType := 'C';
 | 
|---|
 | 1067 |      AnEvent.Effective := 0;
 | 
|---|
 | 1068 |   end;
 | 
|---|
 | 1069 |   uOrderDialog := CreateOrderDialog(AnOwner, ResolvedDialog.FormID, AnEvent, StrToIntDef(OrderEvtID,0));
 | 
|---|
 | 1070 |   uOrderDialog.IsSupply := IsPsoSupply;
 | 
|---|
 | 1071 | 
 | 
|---|
 | 1072 |   {For copy, change, transfer actions on an None-IMO order, the new order should not be treated as IMO order
 | 
|---|
 | 1073 |    although the IMO criteria could be met. }
 | 
|---|
 | 1074 |   //if (uOrderDialog.IsIMO) and (CharAt(AnID, 1) in ['X','C','T']) then
 | 
|---|
 | 1075 |   if not uOrderDialog.IsIMO then
 | 
|---|
 | 1076 |     uOrderDialog.IsIMO := ForIMO;
 | 
|---|
 | 1077 | 
 | 
|---|
 | 1078 |   if (ResolvedDialog.DialogType = 'Q') and (ResolvedDialog.DisplayGroup in [MedsDisp, OutptDisp, InptDisp]) then
 | 
|---|
 | 1079 |      begin
 | 
|---|
 | 1080 |        if DoesOIPIInSigForQO(StrToInt(ResolvedDialog.InputID))=1 then
 | 
|---|
 | 1081 |          uOrderDialog.IncludeOIPI := True
 | 
|---|
 | 1082 |        else
 | 
|---|
 | 1083 |          uOrderDialog.IncludeOIPI := False;
 | 
|---|
 | 1084 |      end;
 | 
|---|
 | 1085 | 
 | 
|---|
 | 1086 |   if (uOrderDialog <> nil) and not uOrderDialog.Closing then with uOrderDialog do
 | 
|---|
 | 1087 |         begin
 | 
|---|
 | 1088 |           SetKeyVariables(GetKeyVars);
 | 
|---|
 | 1089 | 
 | 
|---|
 | 1090 |           if IsDischargeOrPass then
 | 
|---|
 | 1091 |             EvtForPassDischarge  := 'D'
 | 
|---|
 | 1092 |           else
 | 
|---|
 | 1093 |             EvtForPassDischarge  := #0;
 | 
|---|
 | 1094 | 
 | 
|---|
 | 1095 |           Responses.SetEventDelay(AnEvent);
 | 
|---|
 | 1096 |           Responses.LogTime := uOrderSetTime;
 | 
|---|
 | 1097 |           DisplayGroup := ResolvedDialog.DisplayGroup;  // used to pass ORTO
 | 
|---|
 | 1098 |           DialogIEN    := ResolvedDialog.DialogIEN;     // used to pass ORIT
 | 
|---|
 | 1099 |           RefNum := ARefNum;
 | 
|---|
 | 1100 | 
 | 
|---|
 | 1101 |           case ResolvedDialog.DialogType of
 | 
|---|
 | 1102 |           'C': SetupDialog(ORDER_COPY,  ResolvedDialog.ResponseID);
 | 
|---|
 | 1103 |           'D': SetupDialog(ORDER_NEW,   '');
 | 
|---|
 | 1104 |           'X':
 | 
|---|
 | 1105 |                 begin
 | 
|---|
 | 1106 |                    SetupDialog(ORDER_EDIT,  ResolvedDialog.ResponseID);
 | 
|---|
 | 1107 |                    OrderID := Copy(ResolvedDialog.ResponseID,2,Length(ResolvedDialog.ResponseID));
 | 
|---|
 | 1108 |                    IsInpatient := OrderForInpatient;
 | 
|---|
 | 1109 |                    ODItem := StrToIntDef(Responses.IValueFor('ORDERABLE', 1), 0);
 | 
|---|
 | 1110 |                    PkgInfo := '';
 | 
|---|
 | 1111 |                    if Length(OrderID)>0 then
 | 
|---|
 | 1112 |                      PkgInfo := GetPackageByOrderID(OrderID);
 | 
|---|
 | 1113 |                    if Pos('PS',PkgInfo)=1 then
 | 
|---|
 | 1114 |                    begin
 | 
|---|
 | 1115 |                      if DEACheckFailed(ODItem, IsInPatient) and (uOrderDialog.FillerID <> 'PSH') then
 | 
|---|
 | 1116 |                      begin
 | 
|---|
 | 1117 |                        InfoBox(TX_NO_DEA + #13 + Responses.OrderText, TC_NO_DEA, MB_OK);
 | 
|---|
 | 1118 |                        if (ResolvedDialog.DialogType = 'X') and not Changes.ExistForOrder(EditedOrder)
 | 
|---|
 | 1119 |                        then UnlockOrder(EditedOrder);
 | 
|---|
 | 1120 |                        uOrderDialog.Close;
 | 
|---|
 | 1121 |                        Exit;
 | 
|---|
 | 1122 |                      end;
 | 
|---|
 | 1123 |                    end;
 | 
|---|
 | 1124 |                 end;
 | 
|---|
 | 1125 |           'Q':
 | 
|---|
 | 1126 |                 begin
 | 
|---|
 | 1127 |                   if IsPSOSupplyDlg(ResolvedDialog.DialogIEN,1) then
 | 
|---|
 | 1128 |                     uOrderDialog.IsSupply := True;
 | 
|---|
 | 1129 |                   SetupDialog(ORDER_QUICK, ResolvedDialog.ResponseID);
 | 
|---|
 | 1130 |                 end;
 | 
|---|
 | 1131 |           end;
 | 
|---|
 | 1132 | 
 | 
|---|
 | 1133 |           if Assigned(uOrderDialog) then
 | 
|---|
 | 1134 |             with uOrderDialog do if AbortOrder then
 | 
|---|
 | 1135 |               begin
 | 
|---|
 | 1136 |                 Close;
 | 
|---|
 | 1137 |                 Exit;
 | 
|---|
 | 1138 |               end;
 | 
|---|
 | 1139 | 
 | 
|---|
 | 1140 |           if CharAt(AnID, 1) = 'T' then
 | 
|---|
 | 1141 |              begin
 | 
|---|
 | 1142 |                if ARefNum = -2 then
 | 
|---|
 | 1143 |                  Responses.TransferOrder := '';
 | 
|---|
 | 1144 |                if ARefNum = -1 then
 | 
|---|
 | 1145 |                  Responses.TransferOrder := AnID;
 | 
|---|
 | 1146 |              end;
 | 
|---|
 | 1147 | 
 | 
|---|
 | 1148 |           if CharAt(AnID,1) = 'C' then            ////////////////////////////////////////////////////////////////////////
 | 
|---|
 | 1149 |              begin
 | 
|---|
 | 1150 |                chkCopay := Copy(AnID,2,length(AnID)); //STRIP prepended C, T, or X from first position in order ID.
 | 
|---|
 | 1151 |                SetDefaultCoPay(chkCopay);
 | 
|---|
 | 1152 |              end;                                    ////////////////////////////////////////////////////////////////////////'
 | 
|---|
 | 1153 | 
 | 
|---|
 | 1154 |           if IsConsultOrder and (CharAt(AnID,1) = 'C') then
 | 
|---|
 | 1155 |              begin
 | 
|---|
 | 1156 |                tmpResp := uOrderDialog.Responses.FindResponseByName('CODE', 1);
 | 
|---|
 | 1157 |                if (tmpResp <> nil) then
 | 
|---|
 | 1158 |                  begin
 | 
|---|
 | 1159 |                  if IsActiveICDCode(tmpResp.EValue) then
 | 
|---|
 | 1160 |                     ResolvedDialog.QuickLevel := QL_AUTO
 | 
|---|
 | 1161 |                  else
 | 
|---|
 | 1162 |                     ResolvedDialog.QuickLevel := QL_DIALOG;
 | 
|---|
 | 1163 |                  end
 | 
|---|
 | 1164 |                else
 | 
|---|
 | 1165 |                  ResolvedDialog.QuickLevel := QL_AUTO
 | 
|---|
 | 1166 |              end;
 | 
|---|
 | 1167 | 
 | 
|---|
 | 1168 |           if ResolvedDialog.QuickLevel <> QL_AUTO then
 | 
|---|
 | 1169 |              begin
 | 
|---|
 | 1170 |                if CharAt(AnID, 1) in ['C','T','X'] then
 | 
|---|
 | 1171 |                   begin
 | 
|---|
 | 1172 |                   Position := poScreenCenter;
 | 
|---|
 | 1173 |                   FormStyle := fsNormal;
 | 
|---|
 | 1174 |                   ShowModal;
 | 
|---|
 | 1175 |                   Result := uOrderDialog.AcceptOK;
 | 
|---|
 | 1176 |                   end
 | 
|---|
 | 1177 |                else
 | 
|---|
 | 1178 |                   begin
 | 
|---|
 | 1179 |                     SetBounds(frmFrame.Left + 112, frmFrame.Top + frmFrame.Height - Height, Width, Height);
 | 
|---|
 | 1180 |                     SetFormPosition(uOrderDialog);
 | 
|---|
 | 1181 |                     FormStyle := fsStayOnTop;
 | 
|---|
 | 1182 |                     if frmOrders.NeedShowModal then
 | 
|---|
 | 1183 |                        begin
 | 
|---|
 | 1184 |                        ShowModal;
 | 
|---|
 | 1185 |                        Result := uOrderDialog.AcceptOK;
 | 
|---|
 | 1186 |                        uOrderDialog.Destroy;
 | 
|---|
 | 1187 |                        end
 | 
|---|
 | 1188 |                     else
 | 
|---|
 | 1189 |                        begin
 | 
|---|
 | 1190 |                        Show;
 | 
|---|
 | 1191 |                        Result := True;
 | 
|---|
 | 1192 |                        end;
 | 
|---|
 | 1193 |                  end;
 | 
|---|
 | 1194 |              end
 | 
|---|
 | 1195 |           else
 | 
|---|
 | 1196 |              begin
 | 
|---|
 | 1197 |              cmdAcceptClick(Application);  // auto-accept order
 | 
|---|
 | 1198 |              Result := uOrderDialog.AcceptOK;
 | 
|---|
 | 1199 | 
 | 
|---|
 | 1200 |              //BAPHII 1.3.2
 | 
|---|
 | 1201 |              //showmessage('DEBUG: About to copy BA CI''s to copied order from Order: '+AnID+'#13'+' in uOrders.ActivateOrderDialog()');
 | 
|---|
 | 1202 | 
 | 
|---|
 | 1203 |              //End BAPHII 1.3.2
 | 
|---|
 | 1204 | 
 | 
|---|
 | 1205 |              if Assigned(uOrderDialog) then
 | 
|---|
 | 1206 |                uOrderDialog.Destroy;
 | 
|---|
 | 1207 |              end;
 | 
|---|
 | 1208 | 
 | 
|---|
 | 1209 |         end
 | 
|---|
 | 1210 |   else
 | 
|---|
 | 1211 |      begin
 | 
|---|
 | 1212 |        uOrderDialog.Release;
 | 
|---|
 | 1213 |        Result := False;
 | 
|---|
 | 1214 |      //Application.ProcessMessages;       // to allow dialog to finish closing
 | 
|---|
 | 1215 |      //Exit;                              // so result is not returned true
 | 
|---|
 | 1216 |      end;
 | 
|---|
 | 1217 | 
 | 
|---|
 | 1218 |   if NSSchedule then
 | 
|---|
 | 1219 |     NSSchedule := False;
 | 
|---|
 | 1220 | 
 | 
|---|
 | 1221 |   if (ResolvedDialog.DialogType = 'X') and not Changes.ExistForOrder(EditedOrder)
 | 
|---|
 | 1222 |     then UnlockOrder(EditedOrder);
 | 
|---|
 | 1223 | 
 | 
|---|
 | 1224 | end;
 | 
|---|
 | 1225 | 
 | 
|---|
 | 1226 | function RetrieveOrderText(AnOrderID: string): string;
 | 
|---|
 | 1227 | var
 | 
|---|
 | 1228 |   OrdList: TList;
 | 
|---|
 | 1229 |   theOrder: TOrder;
 | 
|---|
 | 1230 |  // i: integer;
 | 
|---|
 | 1231 | begin
 | 
|---|
 | 1232 |  // if Assigned(OrdList) then
 | 
|---|
 | 1233 |  // begin
 | 
|---|
 | 1234 |  //    for i := 0 to pred(OrdList.Count) do
 | 
|---|
 | 1235 |  //       TObject(OrdList[i]).Free;
 | 
|---|
 | 1236 |   //   UBAGlobals.tempDxList := nil;
 | 
|---|
 | 1237 |  // end;
 | 
|---|
 | 1238 |   OrdList := TList.Create;
 | 
|---|
 | 1239 |   theOrder := TOrder.Create;
 | 
|---|
 | 1240 |   theOrder.ID := AnOrderID;
 | 
|---|
 | 1241 |   OrdList.Add(theOrder);
 | 
|---|
 | 1242 |   RetrieveOrderFields(OrdList, 0, 0);
 | 
|---|
 | 1243 |   Result := TOrder(OrdList.Items[0]).Text;
 | 
|---|
 | 1244 |   if Assigned(OrdList) then OrdList.Free; //CQ:7554
 | 
|---|
 | 1245 | end;
 | 
|---|
 | 1246 | 
 | 
|---|
 | 1247 | function ActivateOrderHTML(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 1248 |   AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 1249 | var
 | 
|---|
 | 1250 |   DialogIEN: Integer;
 | 
|---|
 | 1251 |   x: string;
 | 
|---|
 | 1252 |   ASetList: TStringList;
 | 
|---|
 | 1253 | begin
 | 
|---|
 | 1254 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1255 |   Result := False;
 | 
|---|
 | 1256 |   DialogIEN := StrToIntDef(AnID, 0);
 | 
|---|
 | 1257 |   x := OrderDisabledMessage(DialogIEN);
 | 
|---|
 | 1258 |   if ShowMsgOn(Length(x) > 0, x, TC_DISABLED) then Exit;
 | 
|---|
 | 1259 |   if uOrderHTML = nil then
 | 
|---|
 | 1260 |   begin
 | 
|---|
 | 1261 |     uOrderHTML := TfrmOMHTML.Create(AnOwner);
 | 
|---|
 | 1262 |     with uOrderHTML do
 | 
|---|
 | 1263 |     begin
 | 
|---|
 | 1264 |       SetBounds(frmFrame.Left + 112, frmFrame.Top + frmFrame.Height - Height, Width, Height);
 | 
|---|
 | 1265 |       SetFormPosition(uOrderHTML);
 | 
|---|
 | 1266 |       FormStyle := fsStayOnTop;
 | 
|---|
 | 1267 |       SetEventDelay(AnEvent);
 | 
|---|
 | 1268 |     end;
 | 
|---|
 | 1269 |   end;
 | 
|---|
 | 1270 |   uOrderHTML.Dialog  := DialogIEN;
 | 
|---|
 | 1271 |   uOrderHTML.RefNum  := ARefNum;
 | 
|---|
 | 1272 |   uOrderHTML.OwnedBy := AnOwner;
 | 
|---|
 | 1273 |   uOrderHTML.ShowModal;
 | 
|---|
 | 1274 |   ASetList := TStringList.Create;
 | 
|---|
 | 1275 |   ASetList.Assign(uOrderHTML.SetList);
 | 
|---|
 | 1276 |   uOrderHTML.Release;
 | 
|---|
 | 1277 |   if ASetList.Count = 0 then Exit;
 | 
|---|
 | 1278 |   Result := ActivateOrderList(ASetList, AnEvent, AnOwner, ARefNum, '', '');
 | 
|---|
 | 1279 | end;
 | 
|---|
 | 1280 | 
 | 
|---|
 | 1281 | function ActivateOrderMenu(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 1282 |   AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 1283 | var
 | 
|---|
 | 1284 |   MenuIEN: Integer;
 | 
|---|
 | 1285 |   x: string;
 | 
|---|
 | 1286 | begin
 | 
|---|
 | 1287 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1288 |   Result := False;
 | 
|---|
 | 1289 |   MenuIEN := StrToIntDef(AnID, 0);
 | 
|---|
 | 1290 |   x := OrderDisabledMessage(MenuIEN);
 | 
|---|
 | 1291 |   if ShowMsgOn(Length(x) > 0, x, TC_DISABLED) then Exit;
 | 
|---|
 | 1292 |   if uOrderMenu = nil then
 | 
|---|
 | 1293 |   begin
 | 
|---|
 | 1294 |     uOrderMenu := TfrmOMNavA.Create(AnOwner);
 | 
|---|
 | 1295 |     with uOrderMenu do
 | 
|---|
 | 1296 |     begin
 | 
|---|
 | 1297 |       SetBounds(frmFrame.Left + 112, frmFrame.Top + frmFrame.Height - Height, Width, Height);
 | 
|---|
 | 1298 |       SetFormPosition(uOrderMenu);
 | 
|---|
 | 1299 |       FormStyle := fsStayOnTop;
 | 
|---|
 | 1300 |       SetEventDelay(AnEvent);
 | 
|---|
 | 1301 |     end;
 | 
|---|
 | 1302 |   end;
 | 
|---|
 | 1303 |   uOrderMenu.SetNewMenu(MenuIEN, AnOwner, ARefNum);
 | 
|---|
 | 1304 |   if not uOrderMenu.Showing then uOrderMenu.Show else uOrderMenu.BringToFront;
 | 
|---|
 | 1305 |   Result := True;
 | 
|---|
 | 1306 | end;
 | 
|---|
 | 1307 | 
 | 
|---|
 | 1308 | function ActivateOrderSet(const AnID: string; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 1309 |   AnOwner: TComponent; ARefNum: Integer): Boolean;
 | 
|---|
 | 1310 | var
 | 
|---|
 | 1311 |   x, ACaption, KeyVarStr: string;
 | 
|---|
 | 1312 |   SetList: TStringList;
 | 
|---|
 | 1313 |   EvtDefaultDlg, PtEvtID: string;
 | 
|---|
 | 1314 | 
 | 
|---|
 | 1315 |   function TakeoutDuplicateDlg(var AdlgList: TStringList; ANeedle: string): boolean;
 | 
|---|
 | 1316 |   var
 | 
|---|
 | 1317 |     i: integer;
 | 
|---|
 | 1318 |   begin
 | 
|---|
 | 1319 |     Result := False;
 | 
|---|
 | 1320 |     for i := 0 to AdlgList.Count - 1 do
 | 
|---|
 | 1321 |     begin
 | 
|---|
 | 1322 |       if Piece(AdlgList[i],'^',1)=ANeedle then
 | 
|---|
 | 1323 |       begin
 | 
|---|
 | 1324 |         ADlgList.Delete(i);
 | 
|---|
 | 1325 |         Result := True;
 | 
|---|
 | 1326 |         Break;
 | 
|---|
 | 1327 |       end;
 | 
|---|
 | 1328 |     end;
 | 
|---|
 | 1329 |   end;
 | 
|---|
 | 1330 | 
 | 
|---|
 | 1331 | begin
 | 
|---|
 | 1332 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1333 |   Result := False;
 | 
|---|
 | 1334 |   x := OrderDisabledMessage(StrToIntDef(AnID, 0));
 | 
|---|
 | 1335 |   if ShowMsgOn(Length(x) > 0, x, TC_DISABLED) then Exit;
 | 
|---|
 | 1336 |   SetList := TStringList.Create;
 | 
|---|
 | 1337 |   try
 | 
|---|
 | 1338 |     if uOrderSetTime = 0 then uOrderSetTime := FMNow;
 | 
|---|
 | 1339 |     LoadOrderSet(SetList, StrToIntDef(AnID, 0), KeyVarStr, ACaption);
 | 
|---|
 | 1340 |     if (AnEvent.EventIFN>0) and isExistedEvent(Patient.DFN, IntToStr(AnEvent.EventIFN), PtEvtID) then
 | 
|---|
 | 1341 |     begin
 | 
|---|
 | 1342 |       EvtDefaultDlg := GetEventDefaultDlg(AnEvent.EventIFN);
 | 
|---|
 | 1343 |       while TakeoutDuplicateDlg(SetList,EvtDefaultDlg) do
 | 
|---|
 | 1344 |         TakeoutDuplicateDlg(SetList,EvtDefaultDlg);
 | 
|---|
 | 1345 |     end;
 | 
|---|
 | 1346 |     Result := ActivateOrderList(SetList, AnEvent, AnOwner, ARefNum, KeyVarStr, ACaption);
 | 
|---|
 | 1347 |   finally
 | 
|---|
 | 1348 |     SetList.Free;
 | 
|---|
 | 1349 |   end;
 | 
|---|
 | 1350 | end;
 | 
|---|
 | 1351 | 
 | 
|---|
 | 1352 | function ActivateOrderList(AList: TStringList; AnEvent: TOrderDelayEvent;
 | 
|---|
 | 1353 |   AnOwner: TComponent; ARefNum: Integer; const KeyVarStr, ACaption: string): Boolean;
 | 
|---|
 | 1354 | var
 | 
|---|
 | 1355 |   InitialCall: Boolean;
 | 
|---|
 | 1356 | begin
 | 
|---|
 | 1357 |   InitialCall := False;
 | 
|---|
 | 1358 |   if uOrderSet = nil then
 | 
|---|
 | 1359 |   begin
 | 
|---|
 | 1360 |     uOrderSet := TfrmOMSet.Create(AnOwner);
 | 
|---|
 | 1361 |     uOrderSet.SetEventDelay(AnEvent);
 | 
|---|
 | 1362 |     uOrderSet.RefNum := ARefNum;
 | 
|---|
 | 1363 |     InitialCall := True;
 | 
|---|
 | 1364 |   end;
 | 
|---|
 | 1365 |   if InitialCall then with uOrderSet do
 | 
|---|
 | 1366 |   begin
 | 
|---|
 | 1367 |     if Length(ACaption) > 0 then Caption := ACaption;
 | 
|---|
 | 1368 |     SetBounds(frmFrame.Left, frmFrame.Top + frmFrame.Height - Height, Width, Height);
 | 
|---|
 | 1369 |     SetFormPosition(uOrderSet);
 | 
|---|
 | 1370 |     Show;
 | 
|---|
 | 1371 |   end;
 | 
|---|
 | 1372 |   uOrderSet.InsertList(AList, AnOwner, ARefNum, KeyVarStr, AnEvent.EventType);
 | 
|---|
 | 1373 |   Application.ProcessMessages;
 | 
|---|
 | 1374 |   Result := uOrderSet <> nil;
 | 
|---|
 | 1375 | end;
 | 
|---|
 | 1376 | 
 | 
|---|
 | 1377 | function ActiveOrdering: Boolean;
 | 
|---|
 | 1378 | begin
 | 
|---|
 | 1379 |   if (uOrderDialog = nil) and (uOrderMenu = nil) and (uOrderSet = nil) and
 | 
|---|
 | 1380 |      (uOrderAction = nil) and (uOrderHTML = nil)
 | 
|---|
 | 1381 |     then Result := False
 | 
|---|
 | 1382 |     else Result := True;
 | 
|---|
 | 1383 | end;
 | 
|---|
 | 1384 | 
 | 
|---|
 | 1385 | function CloseOrdering: Boolean;
 | 
|---|
 | 1386 | begin
 | 
|---|
 | 1387 |   Result := False;
 | 
|---|
 | 1388 |   { if an order set is being processed, see if want to interupt }
 | 
|---|
 | 1389 |   if uOrderSet <> nil then
 | 
|---|
 | 1390 |   begin
 | 
|---|
 | 1391 |     uOrderSet.Close;
 | 
|---|
 | 1392 |     Application.ProcessMessages;
 | 
|---|
 | 1393 |     if uOrderSet <> nil then Exit;
 | 
|---|
 | 1394 |   end;
 | 
|---|
 | 1395 |   { if another ordering dialog is showing, make sure it is closed first }
 | 
|---|
 | 1396 |   if uOrderDialog <> nil then
 | 
|---|
 | 1397 |   begin
 | 
|---|
 | 1398 |     uOrderDialog.Close;
 | 
|---|
 | 1399 |     Application.ProcessMessages;  // allow close to finish
 | 
|---|
 | 1400 |     if uOrderDialog <> nil then Exit;
 | 
|---|
 | 1401 |   end;
 | 
|---|
 | 1402 |   if uOrderHTML <> nil then
 | 
|---|
 | 1403 |   begin
 | 
|---|
 | 1404 |     uOrderHTML.Close;
 | 
|---|
 | 1405 |     Application.ProcessMessages;  // allow browser to close
 | 
|---|
 | 1406 |     Assert(uOrderHTML = nil);
 | 
|---|
 | 1407 |   end;
 | 
|---|
 | 1408 |   { close any open ordering menu }
 | 
|---|
 | 1409 |   if uOrderMenu <> nil then
 | 
|---|
 | 1410 |   begin
 | 
|---|
 | 1411 |     uOrderMenu.Close;
 | 
|---|
 | 1412 |     Application.ProcessMessages;  // allow menu to close
 | 
|---|
 | 1413 |     Assert(uOrderMenu = nil);
 | 
|---|
 | 1414 |   end;
 | 
|---|
 | 1415 |   if uOrderAction <> nil then
 | 
|---|
 | 1416 |   begin
 | 
|---|
 | 1417 |     uOrderAction.Close;
 | 
|---|
 | 1418 |     Application.ProcessMessages;
 | 
|---|
 | 1419 |     if uOrderAction <> nil then Exit;
 | 
|---|
 | 1420 |   end;
 | 
|---|
 | 1421 |   Result := True;
 | 
|---|
 | 1422 | end;
 | 
|---|
 | 1423 | 
 | 
|---|
 | 1424 | function ReadyForNewOrder(AnEvent: TOrderDelayEvent): Boolean;
 | 
|---|
 | 1425 | var
 | 
|---|
 | 1426 |   x,tmpPtEvt: string;
 | 
|---|
 | 1427 | begin
 | 
|---|
 | 1428 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1429 |   Result := False;
 | 
|---|
 | 1430 |   { make sure a location and provider are selected before ordering }
 | 
|---|
 | 1431 |   if not AuthorizedUser then Exit;
 | 
|---|
 | 1432 |   if (not Patient.Inpatient) and (AnEvent.EventIFN > 0 ) then x := ''
 | 
|---|
 | 1433 |   else
 | 
|---|
 | 1434 |   begin
 | 
|---|
 | 1435 |     if not EncounterPresent then Exit;
 | 
|---|
 | 1436 |   end;
 | 
|---|
 | 1437 |   { then try to lock the patient (provider & encounter checked first to not leave lock) }
 | 
|---|
 | 1438 |   if not LockedForOrdering then Exit;
 | 
|---|
 | 1439 |   { make sure any current ordering process has completed, but don't drop patient lock }
 | 
|---|
 | 1440 |   uKeepLock := True;
 | 
|---|
 | 1441 |   if not CloseOrdering then Exit;
 | 
|---|
 | 1442 |   uKeepLock := False;
 | 
|---|
 | 1443 |   { get the delay event for this order (if applicable) }
 | 
|---|
 | 1444 |   if AnEvent.EventType in ['A','D','T','M','O'] then
 | 
|---|
 | 1445 |   begin
 | 
|---|
 | 1446 |     if (AnEvent.EventName = '') and (AnEvent.EventType <> 'D') then
 | 
|---|
 | 1447 |       Exit;
 | 
|---|
 | 1448 |     x := AnEvent.EventType + IntToStr(AnEvent.Specialty);
 | 
|---|
 | 1449 |     if (uLastConfirm <> x ) and (not XfInToOutNow) then
 | 
|---|
 | 1450 |     begin
 | 
|---|
 | 1451 |       uLastConfirm := x;
 | 
|---|
 | 1452 |       case AnEvent.EventType of
 | 
|---|
 | 1453 |       'A','M','O','T': x := AnEvent.EventName;
 | 
|---|
 | 1454 | //    'D': x := 'Discharge';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1455 |       'D': x := DKLangConstW('uOrders_Discharge'); //kt added 8/8/2007
 | 
|---|
 | 1456 |       end;
 | 
|---|
 | 1457 |       if isExistedEvent(Patient.DFN,IntToStr(AnEvent.EventIFN),tmpPtEvt) then
 | 
|---|
 | 1458 |         if PtEvtEmpty(tmpPtEvt)then
 | 
|---|
 | 1459 |           InfoBox(TX_DELAY + x + TX_DELAY1, TC_DELAY, MB_OK or MB_ICONWARNING);
 | 
|---|
 | 1460 |     end;
 | 
|---|
 | 1461 |   end
 | 
|---|
 | 1462 |   else uLastConfirm := '';
 | 
|---|
 | 1463 |   Result := True;
 | 
|---|
 | 1464 | end;
 | 
|---|
 | 1465 | 
 | 
|---|
 | 1466 | function ReadyForNewOrder1(AnEvent: TOrderDelayEvent): Boolean;
 | 
|---|
 | 1467 | var
 | 
|---|
 | 1468 |   x: string;
 | 
|---|
 | 1469 | begin
 | 
|---|
 | 1470 |   Result := False;
 | 
|---|
 | 1471 |   { make sure a location and provider are selected before ordering }
 | 
|---|
 | 1472 |   if not AuthorizedUser then Exit;
 | 
|---|
 | 1473 |   if (not Patient.Inpatient) and (AnEvent.EventIFN > 0 ) then x := ''
 | 
|---|
 | 1474 |   else
 | 
|---|
 | 1475 |   begin
 | 
|---|
 | 1476 |     if not EncounterPresent then Exit;
 | 
|---|
 | 1477 |   end;
 | 
|---|
 | 1478 |   { then try to lock the patient (provider & encounter checked first to not leave lock) }
 | 
|---|
 | 1479 |   if not LockedForOrdering then Exit;
 | 
|---|
 | 1480 |   { make sure any current ordering process has completed, but don't drop patient lock }
 | 
|---|
 | 1481 |   uKeepLock := True;
 | 
|---|
 | 1482 |   if not CloseOrdering then Exit;
 | 
|---|
 | 1483 |   uKeepLock := False;
 | 
|---|
 | 1484 |   { get the delay event for this order (if applicable) }
 | 
|---|
 | 1485 |   if AnEvent.EventType in ['A','D','T','M','O'] then
 | 
|---|
 | 1486 |   begin
 | 
|---|
 | 1487 |     x := AnEvent.EventType + IntToStr(AnEvent.Specialty);
 | 
|---|
 | 1488 |     if (uLastConfirm <> x ) and (not XfInToOutNow) then
 | 
|---|
 | 1489 |     begin
 | 
|---|
 | 1490 |       uLastConfirm := x;
 | 
|---|
 | 1491 |       case AnEvent.EventType of
 | 
|---|
 | 1492 |       'A','M','T','O': x := AnEvent.EventName;
 | 
|---|
 | 1493 |       'D': x := AnEvent.EventName;  //'D': x := 'Discharge';
 | 
|---|
 | 1494 |       end;
 | 
|---|
 | 1495 |     end;
 | 
|---|
 | 1496 |   end
 | 
|---|
 | 1497 |   else uLastConfirm := '';
 | 
|---|
 | 1498 |   Result := True;
 | 
|---|
 | 1499 | end;
 | 
|---|
 | 1500 | 
 | 
|---|
 | 1501 | procedure SetConfirmEventDelay;
 | 
|---|
 | 1502 | begin
 | 
|---|
 | 1503 |   uLastConfirm := '';
 | 
|---|
 | 1504 | end;
 | 
|---|
 | 1505 | 
 | 
|---|
 | 1506 | procedure ChangeOrders(AList: TStringList; AnEvent: TOrderDelayEvent);
 | 
|---|
 | 1507 | var
 | 
|---|
 | 1508 |   i,txtOrder: Integer;
 | 
|---|
 | 1509 |   FieldsForEditRenewOrder: TOrderRenewFields;
 | 
|---|
 | 1510 |   param1, param2 : string;
 | 
|---|
 | 1511 |   OrSts: integer;
 | 
|---|
 | 1512 |   AnOrder: TOrder;
 | 
|---|
 | 1513 | begin
 | 
|---|
 | 1514 |   if uOrderDialog <> nil then
 | 
|---|
 | 1515 |   begin
 | 
|---|
 | 1516 |     uOrderDialog.Close;
 | 
|---|
 | 1517 |     Application.ProcessMessages;  // allow close to finish
 | 
|---|
 | 1518 |   end;
 | 
|---|
 | 1519 | 
 | 
|---|
 | 1520 |   if not ActiveOrdering then      // allow change while entering new
 | 
|---|
 | 1521 |     if not ReadyForNewOrder(AnEvent) then Exit;
 | 
|---|
 | 1522 |   for i := 0 to AList.Count - 1 do
 | 
|---|
 | 1523 |   begin
 | 
|---|
 | 1524 |     //if it's for unreleased renewed orders, then go to fODChangeUnreleasedRenew and continue
 | 
|---|
 | 1525 |     txtOrder := 0;
 | 
|---|
 | 1526 |     FieldsForEditRenewOrder := TOrderRenewFields.Create;
 | 
|---|
 | 1527 |     LoadRenewFields(FieldsForEditRenewOrder, AList[i]);
 | 
|---|
 | 1528 |     if FieldsForEditRenewOrder.BaseType = OD_TEXTONLY then
 | 
|---|
 | 1529 |       txtOrder := 1;
 | 
|---|
 | 1530 |     if CanEditSuchRenewedOrder(AList[i], txtOrder) then
 | 
|---|
 | 1531 |     begin
 | 
|---|
 | 1532 |       param1 := '0';
 | 
|---|
 | 1533 |       if txtOrder = 0 then
 | 
|---|
 | 1534 |       begin
 | 
|---|
 | 1535 |         param1 := IntToStr(FieldsForEditRenewOrder.Refills);
 | 
|---|
 | 1536 |         param2 := FieldsForEditRenewOrder.Pickup;
 | 
|---|
 | 1537 |       end else if txtOrder = 1 then
 | 
|---|
 | 1538 |       begin
 | 
|---|
 | 1539 |         param1 := FieldsForEditRenewOrder.StartTime;
 | 
|---|
 | 1540 |         param2 := FieldsForEditRenewOrder.StopTime;
 | 
|---|
 | 1541 |       end;
 | 
|---|
 | 1542 |       UBAGlobals.SourceOrderID := AList[i]; //hds6265 added
 | 
|---|
 | 1543 |       ExecuteChangeRenewedOrder(AList[i], param1, param2, txtOrder);
 | 
|---|
 | 1544 |       AnOrder := TOrder.Create;
 | 
|---|
 | 1545 |       SaveChangesOnRenewOrder(AnOrder, AList[i], param1, param2, txtOrder);
 | 
|---|
 | 1546 |       AnOrder.ActionOn := AnOrder.ID + '=RN';
 | 
|---|
 | 1547 |       SendMessage(Application.MainForm.Handle, UM_NEWORDER, ORDER_ACT, Integer(AnOrder));
 | 
|---|
 | 1548 |       Application.ProcessMessages;
 | 
|---|
 | 1549 |       Continue;
 | 
|---|
 | 1550 |     end else FieldsForEditRenewOrder.Free;
 | 
|---|
 | 1551 | 
 | 
|---|
 | 1552 |     OrSts := GetOrderStatus(AList[i]);
 | 
|---|
 | 1553 | //  if ( AnsiCompareText(NameOfStatus(OrSts),'active') = 0 ) and (AnEvent.PtEventIFN > 0) then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1554 |     if ( AnsiCompareText(NameOfStatus(OrSts),DKLangConstW('uOrders_active')) = 0 ) and (AnEvent.PtEventIFN > 0) then //kt added 8/8/2007
 | 
|---|
 | 1555 |       EventDefaultOD := 1;
 | 
|---|
 | 1556 |     ActivateOrderDialog('X' + AList[i], AnEvent, Application, -1);  // X + ORIFN for change
 | 
|---|
 | 1557 |     if EventDefaultOD = 1 then
 | 
|---|
 | 1558 |       EventDefaultOD := 0;
 | 
|---|
 | 1559 |     Application.ProcessMessages;  // give uOrderDialog a chance to go back to nil
 | 
|---|
 | 1560 |     if BILLING_AWARE then //hds6265
 | 
|---|
 | 1561 |     begin              //hds6265
 | 
|---|
 | 1562 |       UBAGlobals.SourceOrderID := AList[i]; //hds6265
 | 
|---|
 | 1563 |       UBAGlobals.CopyTreatmentFactorsDxsToCopiedOrder(UBAGlobals.SourceOrderID,UBAGLobals.TargetOrderID); //hds6265
 | 
|---|
 | 1564 |     end;
 | 
|---|
 | 1565 |   end;
 | 
|---|
 | 1566 |   UnlockIfAble;
 | 
|---|
 | 1567 | end;
 | 
|---|
 | 1568 | 
 | 
|---|
 | 1569 | function ChangeOrdersEvt(AnOrderID: string; AnEvent: TOrderDelayEvent): boolean;
 | 
|---|
 | 1570 | begin
 | 
|---|
 | 1571 |   Result := False;
 | 
|---|
 | 1572 |   if uOrderDialog <> nil then
 | 
|---|
 | 1573 |   begin
 | 
|---|
 | 1574 |     uOrderDialog.Close;
 | 
|---|
 | 1575 |     Application.ProcessMessages;
 | 
|---|
 | 1576 |   end;
 | 
|---|
 | 1577 |   if not ActiveOrdering then
 | 
|---|
 | 1578 |     if not ReadyForNewOrder(AnEvent) then Exit;
 | 
|---|
 | 1579 |   Result := ActivateOrderDialog('X' + AnOrderID, AnEvent, Application, -1);
 | 
|---|
 | 1580 |   Application.ProcessMessages;
 | 
|---|
 | 1581 |   UnlockIfAble;
 | 
|---|
 | 1582 | end;
 | 
|---|
 | 1583 | 
 | 
|---|
 | 1584 | function CopyOrders(AList: TStringList; AnEvent: TOrderDelayEvent; var DoesEventOccur: boolean; ANeedVerify: boolean = True): boolean;
 | 
|---|
 | 1585 | var
 | 
|---|
 | 1586 |   i: Integer;
 | 
|---|
 | 1587 |   xx: string;
 | 
|---|
 | 1588 |   IsIMOOD,ForIVAlso: boolean;
 | 
|---|
 | 1589 | begin
 | 
|---|
 | 1590 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1591 |   Result := False;
 | 
|---|
 | 1592 |   if not ReadyForNewOrder(AnEvent) then Exit;              // no copy while entering new
 | 
|---|
 | 1593 |   for i := 0 to AList.Count - 1 do
 | 
|---|
 | 1594 |      begin
 | 
|---|
 | 1595 |        if (not DoesEventOccur) and (AnEvent.PtEventIFN>0) and IsCompletedPtEvt(AnEvent.PtEventIFN) then
 | 
|---|
 | 1596 |           begin
 | 
|---|
 | 1597 |             DoesEventOccur := True;
 | 
|---|
 | 1598 |             AnEvent.EventType := #0;
 | 
|---|
 | 1599 |             AnEvent.TheParent := TParentEvent.Create;
 | 
|---|
 | 1600 |             AnEvent.EventIFN  := 0;
 | 
|---|
 | 1601 |             AnEvent.EventName := '';
 | 
|---|
 | 1602 |             AnEvent.PtEventIFN := 0;
 | 
|---|
 | 1603 |           end;
 | 
|---|
 | 1604 | 
 | 
|---|
 | 1605 |        if CheckOrderGroup(AList[i])=1 then IsUDGroup := True
 | 
|---|
 | 1606 |        else IsUDGroup := False;
 | 
|---|
 | 1607 | 
 | 
|---|
 | 1608 |        if (AnEvent.EventIFN>0) and isOnholdMedOrder(AList[i]) then
 | 
|---|
 | 1609 |           begin
 | 
|---|
 | 1610 |             xx := RetrieveOrderText(AList[i]);
 | 
|---|
 | 1611 | //          if InfoBox(TX_ONHOLD+#13#13+xx, 'Warning', MB_YESNO or MB_ICONWARNING) = IDNO then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1612 |             if InfoBox(TX_ONHOLD+#13#13+xx, DKLangConstW('uOrders_Warning'), MB_YESNO or MB_ICONWARNING) = IDNO then //kt added 8/8/2007
 | 
|---|
 | 1613 |               Continue;
 | 
|---|
 | 1614 |           end;
 | 
|---|
 | 1615 | 
 | 
|---|
 | 1616 |        DEASig := GetDrugSchedule(AList[i]);
 | 
|---|
 | 1617 |        ForIVAlso := ForIVandUD(AList[i]);
 | 
|---|
 | 1618 |        IsIMOOD := IsIMOOrder(AList[i]);
 | 
|---|
 | 1619 |        if (IsUDGroup) and (ImmdCopyAct) and (not Patient.Inpatient) and (AnEvent.EventType = 'C') and (not IsIMOOD) and (not ForIVAlso) then
 | 
|---|
 | 1620 |             XfInToOutNow := True;
 | 
|---|
 | 1621 | 
 | 
|---|
 | 1622 |        OrderSource := 'C';
 | 
|---|
 | 1623 | 
 | 
|---|
 | 1624 |        if ActivateOrderDialog('C' + AList[i], AnEvent, Application, -1, ANeedVerify) then
 | 
|---|
 | 1625 |          Result := True;
 | 
|---|
 | 1626 | 
 | 
|---|
 | 1627 |        Application.ProcessMessages;  // give uOrderDialog a chance to go back to nil
 | 
|---|
 | 1628 |        OrderSource := '';
 | 
|---|
 | 1629 | 
 | 
|---|
 | 1630 |        if (not DoesEventOccur) and (AnEvent.PtEventIFN>0) and IsCompletedPtEvt(AnEvent.PtEventIFN) then
 | 
|---|
 | 1631 |          DoesEventOccur := True;
 | 
|---|
 | 1632 | 
 | 
|---|
 | 1633 |        if IsUDGroup then IsUDGroup := False;
 | 
|---|
 | 1634 |        if XfInToOutNOw then XfInToOutNow := False;
 | 
|---|
 | 1635 | 
 | 
|---|
 | 1636 |        if BILLING_AWARE then
 | 
|---|
 | 1637 |        begin
 | 
|---|
 | 1638 |           UBAGlobals.SourceOrderID := AList[i]; //BAPHII 1.3.2
 | 
|---|
 | 1639 |           UBAGlobals.CopyTreatmentFactorsDxsToCopiedOrder(UBAGlobals.SourceOrderID,UBAGLobals.TargetOrderID);
 | 
|---|
 | 1640 |        end;
 | 
|---|
 | 1641 |      end; //for
 | 
|---|
 | 1642 | 
 | 
|---|
 | 1643 |   UnlockIfAble;
 | 
|---|
 | 1644 | end;
 | 
|---|
 | 1645 | 
 | 
|---|
 | 1646 | function TransferOrders(AList: TStringList; AnEvent: TOrderDelayEvent; var DoesEventOccur: boolean; ANeedVerify: boolean = True): boolean;
 | 
|---|
 | 1647 | var
 | 
|---|
 | 1648 |   i, CountOfTfOrders: Integer;
 | 
|---|
 | 1649 |   xx: string;
 | 
|---|
 | 1650 |   //DoesEventOccur: boolean;
 | 
|---|
 | 1651 |   //OccuredEvtID: integer;
 | 
|---|
 | 1652 |   //OccuredEvtName: string;
 | 
|---|
 | 1653 | begin
 | 
|---|
 | 1654 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1655 |   //DoesEventOccur := False;
 | 
|---|
 | 1656 |   //OccuredEvtID := 0;
 | 
|---|
 | 1657 |   Result := False;
 | 
|---|
 | 1658 |   if not ReadyForNewOrder(AnEvent) then Exit;              // no xfer while entering new
 | 
|---|
 | 1659 |   CountOfTfOrders := AList.Count;
 | 
|---|
 | 1660 |   for i := 0 to CountOfTfOrders - 1 do
 | 
|---|
 | 1661 |   begin
 | 
|---|
 | 1662 |     if (not DoesEventOccur) and (AnEvent.PtEventIFN>0) and IsCompletedPtEvt(AnEvent.PtEventIFN) then
 | 
|---|
 | 1663 |     begin
 | 
|---|
 | 1664 |       DoesEventOccur := True;
 | 
|---|
 | 1665 |       //OccuredEvtID := AnEvent.PtEventIFN;
 | 
|---|
 | 1666 |       //OccuredEvtName := AnEvent.EventName;
 | 
|---|
 | 1667 |       AnEvent.EventType := #0;
 | 
|---|
 | 1668 |       AnEvent.TheParent := TParentEvent.Create;
 | 
|---|
 | 1669 |       AnEvent.EventIFN  := 0;
 | 
|---|
 | 1670 |       AnEvent.EventName := '';
 | 
|---|
 | 1671 |       AnEvent.PtEventIFN := 0;
 | 
|---|
 | 1672 |     end;
 | 
|---|
 | 1673 |     if i = CountOfTfOrders - 1 then
 | 
|---|
 | 1674 |     begin
 | 
|---|
 | 1675 |       if (AnEvent.EventIFN>0) and isOnholdMedOrder(AList[i]) then
 | 
|---|
 | 1676 |       begin
 | 
|---|
 | 1677 |         xx := RetrieveOrderText(AList[i]);
 | 
|---|
 | 1678 | //      if InfoBox(TX_ONHOLD+#13#13+xx, 'Warning', MB_YESNO or MB_ICONWARNING) = IDNO then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1679 |         if InfoBox(TX_ONHOLD+#13#13+xx, DKLangConstW('uOrders_Warning'), MB_YESNO or MB_ICONWARNING) = IDNO then //kt added 8/8/2007
 | 
|---|
 | 1680 |           Continue;
 | 
|---|
 | 1681 |       end;
 | 
|---|
 | 1682 |       OrderSource := 'X';
 | 
|---|
 | 1683 |       if ActivateOrderDialog('T' + AList[i], AnEvent, Application, -2, ANeedVerify) then
 | 
|---|
 | 1684 |         Result := True;
 | 
|---|
 | 1685 |     end  else
 | 
|---|
 | 1686 |     begin
 | 
|---|
 | 1687 |       if (AnEvent.EventIFN>0) and isOnholdMedOrder(AList[i]) then
 | 
|---|
 | 1688 |       begin
 | 
|---|
 | 1689 |         xx := RetrieveOrderText(AList[i]);
 | 
|---|
 | 1690 | //      if InfoBox(TX_ONHOLD+#13#13+xx, 'Warning', MB_YESNO or MB_ICONWARNING) = IDNO then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1691 |         if InfoBox(TX_ONHOLD+#13#13+xx, DKLangConstW('uOrders_Warning'), MB_YESNO or MB_ICONWARNING) = IDNO then //kt added 8/8/2007
 | 
|---|
 | 1692 |           Continue;
 | 
|---|
 | 1693 |       end;
 | 
|---|
 | 1694 |       OrderSource := 'X';
 | 
|---|
 | 1695 |       if ActivateOrderDialog('T' + AList[i], AnEvent, Application, -1, ANeedVerify) then
 | 
|---|
 | 1696 |         Result := True;
 | 
|---|
 | 1697 |     end;
 | 
|---|
 | 1698 |     Application.ProcessMessages;  // give uOrderDialog a chance to go back to nil
 | 
|---|
 | 1699 |     OrderSource := '';
 | 
|---|
 | 1700 |     if (not DoesEventOccur) and (AnEvent.PtEventIFN>0) and IsCompletedPtEvt(AnEvent.PtEventIFN) then
 | 
|---|
 | 1701 |       DoesEventOccur := True;
 | 
|---|
 | 1702 | 
 | 
|---|
 | 1703 |    UBAGlobals.SourceOrderID := AList[i];
 | 
|---|
 | 1704 |    UBAGlobals.CopyTreatmentFactorsDxsToCopiedOrder(UBAGlobals.SourceOrderID, UBAGLobals.TargetOrderID);
 | 
|---|
 | 1705 | 
 | 
|---|
 | 1706 |   end;
 | 
|---|
 | 1707 |   UnlockIfAble;
 | 
|---|
 | 1708 | 
 | 
|---|
 | 1709 | end;
 | 
|---|
 | 1710 | 
 | 
|---|
 | 1711 | procedure DestroyingOrderAction;
 | 
|---|
 | 1712 | begin
 | 
|---|
 | 1713 |   uOrderAction := nil;
 | 
|---|
 | 1714 |   if not ActiveOrdering then
 | 
|---|
 | 1715 |   begin
 | 
|---|
 | 1716 |     ClearOrderRecall;
 | 
|---|
 | 1717 |     UnlockIfAble;
 | 
|---|
 | 1718 |   end;
 | 
|---|
 | 1719 | end;
 | 
|---|
 | 1720 | 
 | 
|---|
 | 1721 | procedure DestroyingOrderDialog;
 | 
|---|
 | 1722 | begin
 | 
|---|
 | 1723 |   uOrderDialog := nil;
 | 
|---|
 | 1724 |   if not ActiveOrdering then
 | 
|---|
 | 1725 |   begin
 | 
|---|
 | 1726 |     ClearOrderRecall;
 | 
|---|
 | 1727 |     UnlockIfAble;
 | 
|---|
 | 1728 |   end;
 | 
|---|
 | 1729 | end;
 | 
|---|
 | 1730 | 
 | 
|---|
 | 1731 | procedure DestroyingOrderHTML;
 | 
|---|
 | 1732 | begin
 | 
|---|
 | 1733 |   uOrderHTML := nil;
 | 
|---|
 | 1734 |   if not ActiveOrdering then
 | 
|---|
 | 1735 |   begin
 | 
|---|
 | 1736 |     ClearOrderRecall;
 | 
|---|
 | 1737 |     UnlockIfAble;
 | 
|---|
 | 1738 |   end;
 | 
|---|
 | 1739 | end;
 | 
|---|
 | 1740 | 
 | 
|---|
 | 1741 | procedure DestroyingOrderMenu;
 | 
|---|
 | 1742 | begin
 | 
|---|
 | 1743 |   uOrderMenu := nil;
 | 
|---|
 | 1744 |   if not ActiveOrdering then
 | 
|---|
 | 1745 |   begin
 | 
|---|
 | 1746 |     ClearOrderRecall;
 | 
|---|
 | 1747 |     UnlockIfAble;
 | 
|---|
 | 1748 |   end;
 | 
|---|
 | 1749 | end;
 | 
|---|
 | 1750 | 
 | 
|---|
 | 1751 | procedure DestroyingOrderSet;
 | 
|---|
 | 1752 | begin
 | 
|---|
 | 1753 |   uOrderSet := nil;
 | 
|---|
 | 1754 |   uOrderSetTime := 0;
 | 
|---|
 | 1755 |   if not ActiveOrdering then
 | 
|---|
 | 1756 |   begin
 | 
|---|
 | 1757 |     ClearOrderRecall;
 | 
|---|
 | 1758 |     UnlockIfAble;
 | 
|---|
 | 1759 |   end;
 | 
|---|
 | 1760 | end;
 | 
|---|
 | 1761 | 
 | 
|---|
 | 1762 | function OrderIsLocked(const AnOrderID, AnAction: string): Boolean;
 | 
|---|
 | 1763 | var
 | 
|---|
 | 1764 |   ErrorMsg: string;
 | 
|---|
 | 1765 | begin
 | 
|---|
 | 1766 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1767 |   Result := True;
 | 
|---|
 | 1768 |   if (AnAction = OA_COPY) then
 | 
|---|
 | 1769 |     Exit;
 | 
|---|
 | 1770 |   if ((AnAction = OA_HOLD) or (AnAction = OA_UNHOLD) or (AnAction = OA_RENEW)  or
 | 
|---|
 | 1771 |       (AnAction = OA_DC) or (AnAction = OA_CHANGE)) and Changes.ExistForOrder(AnOrderID)
 | 
|---|
 | 1772 |       then Exit;
 | 
|---|
 | 1773 |   LockOrder(AnOrderID, ErrorMsg);
 | 
|---|
 | 1774 |   if Length(ErrorMsg) > 0 then
 | 
|---|
 | 1775 |   begin
 | 
|---|
 | 1776 |     Result := False;
 | 
|---|
 | 1777 |     InfoBox(ErrorMsg + CRLF + CRLF + TextForOrder(AnOrderID), TC_NOLOCK, MB_OK);
 | 
|---|
 | 1778 |   end;
 | 
|---|
 | 1779 | end;
 | 
|---|
 | 1780 | 
 | 
|---|
 | 1781 | procedure PopLastMenu;
 | 
|---|
 | 1782 | { always called from fOMSet }
 | 
|---|
 | 1783 | begin
 | 
|---|
 | 1784 |   if uOrderMenu <> nil then uOrderMenu.cmdDoneClick(uOrderSet);
 | 
|---|
 | 1785 | end;
 | 
|---|
 | 1786 | 
 | 
|---|
 | 1787 | procedure QuickOrderSave;
 | 
|---|
 | 1788 | begin
 | 
|---|
 | 1789 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1790 |   // would be better to prompt for dialog
 | 
|---|
 | 1791 |   if uOrderDialog = nil then
 | 
|---|
 | 1792 |   begin
 | 
|---|
 | 1793 |     InfoBox(TX_NO_SAVE_QO, TC_NO_SAVE_QO, MB_OK);
 | 
|---|
 | 1794 |     Exit;
 | 
|---|
 | 1795 |   end;
 | 
|---|
 | 1796 |   with uOrderDialog do
 | 
|---|
 | 1797 |   begin
 | 
|---|
 | 1798 |     if not AllowQuickOrder then
 | 
|---|
 | 1799 |     begin
 | 
|---|
 | 1800 |       InfoBox(TX_NO_QUICK, TC_NO_QUICK, MB_OK);
 | 
|---|
 | 1801 |       Exit;
 | 
|---|
 | 1802 |     end;
 | 
|---|
 | 1803 |     if Responses.OrderContainsObjects then
 | 
|---|
 | 1804 |     begin
 | 
|---|
 | 1805 |       InfoBox(TX_CANT_SAVE_QO, TC_NO_QUICK, MB_ICONERROR or MB_OK);
 | 
|---|
 | 1806 |       Exit;
 | 
|---|
 | 1807 |     end;
 | 
|---|
 | 1808 |     SaveAsQuickOrder(Responses);
 | 
|---|
 | 1809 |   end;
 | 
|---|
 | 1810 | end;
 | 
|---|
 | 1811 | 
 | 
|---|
 | 1812 | procedure QuickOrderListEdit;
 | 
|---|
 | 1813 | begin
 | 
|---|
 | 1814 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1815 |   // would be better to prompt for dialog
 | 
|---|
 | 1816 |   if uOrderDialog = nil then
 | 
|---|
 | 1817 |   begin
 | 
|---|
 | 1818 |     InfoBox(TX_NO_EDIT_QO, TC_NO_EDIT_QO, MB_OK);
 | 
|---|
 | 1819 |     Exit;
 | 
|---|
 | 1820 |   end;
 | 
|---|
 | 1821 |   with uOrderDialog do
 | 
|---|
 | 1822 |   begin
 | 
|---|
 | 1823 |     if not AllowQuickOrder then
 | 
|---|
 | 1824 |     begin
 | 
|---|
 | 1825 |       InfoBox(TX_NO_QUICK, TC_NO_QUICK, MB_OK);
 | 
|---|
 | 1826 |       Exit;
 | 
|---|
 | 1827 |     end;
 | 
|---|
 | 1828 |     EditCommonList(DisplayGroup);
 | 
|---|
 | 1829 |   end;
 | 
|---|
 | 1830 | end;
 | 
|---|
 | 1831 | 
 | 
|---|
 | 1832 | function RefNumFor(AnOwner: TComponent): Integer;
 | 
|---|
 | 1833 | begin
 | 
|---|
 | 1834 |   if (uOrderDialog <> nil) and (uOrderDialog.Owner = AnOwner)
 | 
|---|
 | 1835 |     then Result := uOrderDialog.RefNum
 | 
|---|
 | 1836 |   else if (uOrderMenu <> nil) and (uOrderMenu.Owner = AnOwner)
 | 
|---|
 | 1837 |     then Result := uOrderMenu.RefNum
 | 
|---|
 | 1838 |   else if (uOrderHTML <> nil) and (uOrderHTML.Owner = AnOwner)
 | 
|---|
 | 1839 |     then Result := uOrderHTML.RefNum
 | 
|---|
 | 1840 |   else if (uOrderSet <> nil) and (uOrderSet.Owner = AnOwner)
 | 
|---|
 | 1841 |     then Result := uOrderSet.RefNum
 | 
|---|
 | 1842 |   else Result := -1;
 | 
|---|
 | 1843 | end;
 | 
|---|
 | 1844 | 
 | 
|---|
 | 1845 | 
 | 
|---|
 | 1846 | procedure PrintOrdersOnSignRelease(OrderList: TStringList; Nature: Char; PrintLoc : Integer =0);
 | 
|---|
 | 1847 | //const
 | 
|---|
 | 1848 | //TX_NEW_LOC1   = 'The patient''s location has changed to ';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1849 | //TX_NEW_LOC2   = '.' + CRLF + 'Should the orders be printed using the new location?';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1850 | //TC_NEW_LOC    = 'New Patient Location';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1851 | //TX_SIGN_LOC   = 'No location was selected.  Orders could not be printed!';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1852 | //TC_REQ_LOC    = 'Orders Not Printed';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1853 | //TX_LOC_PRINT  = 'The selected location will be used to determine where orders are printed.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1854 | var
 | 
|---|
 | 1855 |   ALocation: Integer;
 | 
|---|
 | 1856 |   AName, ASvc, DeviceInfo: string;
 | 
|---|
 | 1857 |   PrintIt: Boolean;
 | 
|---|
 | 1858 |   TX_NEW_LOC1   : string; //kt
 | 
|---|
 | 1859 |   TX_NEW_LOC2   : string; //kt
 | 
|---|
 | 1860 |   TC_NEW_LOC    : string; //kt
 | 
|---|
 | 1861 |   TX_SIGN_LOC   : string; //kt
 | 
|---|
 | 1862 |   TC_REQ_LOC    : string; //kt
 | 
|---|
 | 1863 |   TX_LOC_PRINT  : string; //kt
 | 
|---|
 | 1864 | begin
 | 
|---|
 | 1865 |   TX_NEW_LOC1   := DKLangConstW('uOrders_The_patientxxs_location_has_changed_to'); //kt added 8/8/2007
 | 
|---|
 | 1866 |   TX_NEW_LOC2   := '.' + CRLF + DKLangConstW('uOrders_Should_the_orders_be_printed_using_the_new_locationx'); //kt added 8/8/2007
 | 
|---|
 | 1867 |   TC_NEW_LOC    := DKLangConstW('uOrders_New_Patient_Location'); //kt added 8/8/2007
 | 
|---|
 | 1868 |   TX_SIGN_LOC   := DKLangConstW('uOrders_No_location_was_selectedx__Orders_could_not_be_printedx'); //kt added 8/8/2007
 | 
|---|
 | 1869 |   TC_REQ_LOC    := DKLangConstW('uOrders_Orders_Not_Printed'); //kt added 8/8/2007
 | 
|---|
 | 1870 |   TX_LOC_PRINT  := DKLangConstW('uOrders_The_selected_location_will_be_used_to_determine_where_orders_are_printedx'); //kt added 8/8/2007
 | 
|---|
 | 1871 |   if PrintLoc = 0 then
 | 
|---|
 | 1872 |     begin
 | 
|---|
 | 1873 |       CurrentLocationForPatient(Patient.DFN, ALocation, AName, ASvc);
 | 
|---|
 | 1874 |       if (ALocation > 0) and (ALocation <> Encounter.Location) then
 | 
|---|
 | 1875 |         begin
 | 
|---|
 | 1876 |           if InfoBox(TX_NEW_LOC1 + AName + TX_NEW_LOC2, TC_NEW_LOC, MB_YESNO) = IDYES
 | 
|---|
 | 1877 |           then Encounter.Location := ALocation;
 | 
|---|
 | 1878 |         end;
 | 
|---|
 | 1879 |     end
 | 
|---|
 | 1880 |   else
 | 
|---|
 | 1881 |     Encounter.Location := PrintLoc;
 | 
|---|
 | 1882 |   if Encounter.Location = 0
 | 
|---|
 | 1883 |     then Encounter.Location := CommonLocationForOrders(OrderList);
 | 
|---|
 | 1884 |   if Encounter.Location = 0 then                      // location required for DEVINFO
 | 
|---|
 | 1885 |   begin
 | 
|---|
 | 1886 |     LookupLocation(ALocation, AName, LOC_ALL, TX_LOC_PRINT);
 | 
|---|
 | 1887 |     if ALocation > 0 then Encounter.Location := ALocation;
 | 
|---|
 | 1888 |   end;
 | 
|---|
 | 1889 |   frmFrame.DisplayEncounterText;
 | 
|---|
 | 1890 |   if Encounter.Location <> 0 then
 | 
|---|
 | 1891 |   begin
 | 
|---|
 | 1892 |     SetupOrdersPrint(OrderList, DeviceInfo, Nature, False, PrintIt);
 | 
|---|
 | 1893 |     if PrintIt then
 | 
|---|
 | 1894 |       PrintOrdersOnReview(OrderList, DeviceInfo)
 | 
|---|
 | 1895 |     else
 | 
|---|
 | 1896 |       PrintServiceCopies(OrderList);
 | 
|---|
 | 1897 |   end
 | 
|---|
 | 1898 |   else InfoBox(TX_SIGN_LOC, TC_REQ_LOC, MB_OK or MB_ICONWARNING);
 | 
|---|
 | 1899 | end;
 | 
|---|
 | 1900 | 
 | 
|---|
 | 1901 | procedure SetFontSize( FontSize: integer);
 | 
|---|
 | 1902 | begin
 | 
|---|
 | 1903 |   if uOrderDialog <> nil then
 | 
|---|
 | 1904 |     uOrderDialog.SetFontSize( FontSize);
 | 
|---|
 | 1905 |   if uOrderMenu <> nil then
 | 
|---|
 | 1906 |     uOrderMenu.ResizeFont;
 | 
|---|
 | 1907 | end;
 | 
|---|
 | 1908 | 
 | 
|---|
 | 1909 | procedure NextMove(var NMRec: TNextMoveRec; LastIndex: Integer; NewIndex: Integer);
 | 
|---|
 | 1910 | begin
 | 
|---|
 | 1911 |    if LastIndex = 0 then
 | 
|---|
 | 1912 |       LastIndex  := NewIndex;
 | 
|---|
 | 1913 |    if (LastIndex - NewIndex) <= 0 then
 | 
|---|
 | 1914 |        NMRec.NextStep := STEP_FORWARD
 | 
|---|
 | 1915 |    else
 | 
|---|
 | 1916 |        NMRec.NextStep := STEP_BACK;
 | 
|---|
 | 1917 |    NMRec.LastIndex := NewIndex;
 | 
|---|
 | 1918 | end;
 | 
|---|
 | 1919 | 
 | 
|---|
 | 1920 | function IsIMODialog(DlgID: integer): boolean; //IMO
 | 
|---|
 | 1921 | var
 | 
|---|
 | 1922 |   IsInptDlg, IsIMOLocation: boolean;
 | 
|---|
 | 1923 |   Td: TFMDateTime;
 | 
|---|
 | 1924 | begin
 | 
|---|
 | 1925 |   result := False;
 | 
|---|
 | 1926 |   IsInptDlg := False;
 | 
|---|
 | 1927 |   Td := FMToday;
 | 
|---|
 | 1928 |   if ( (DlgID = MedsInDlgIen) or (DlgID = MedsIVDlgIen) or (IsInptQO(dlgId)) or (IsIVQO(dlgId))) then IsInptDlg := TRUE;
 | 
|---|
 | 1929 |   IsIMOLocation := IsValidIMOLoc(Encounter.Location,Patient.DFN);
 | 
|---|
 | 1930 |   if (IsInptDlg or IsInptQO(DlgID)) and (not Patient.Inpatient) and IsIMOLocation and (Encounter.DateTime > Td) then
 | 
|---|
 | 1931 |     result := True;
 | 
|---|
 | 1932 | end;
 | 
|---|
 | 1933 | 
 | 
|---|
 | 1934 | function AllowActionOnIMO(AnEvtTyp: char): boolean;
 | 
|---|
 | 1935 | var
 | 
|---|
 | 1936 |   Td: TFMDateTime;
 | 
|---|
 | 1937 | begin
 | 
|---|
 | 1938 |   Result := False;
 | 
|---|
 | 1939 |   if (Patient.Inpatient) then
 | 
|---|
 | 1940 |   begin
 | 
|---|
 | 1941 |     Td := FMToday;
 | 
|---|
 | 1942 |     if IsValidIMOLoc(Encounter.Location,Patient.DFN) and (Encounter.DateTime > Td) then
 | 
|---|
 | 1943 |       Result := True;
 | 
|---|
 | 1944 |   end
 | 
|---|
 | 1945 |   else
 | 
|---|
 | 1946 |   begin
 | 
|---|
 | 1947 |     Td := FMToday;
 | 
|---|
 | 1948 |     if IsValidIMOLoc(Encounter.Location,Patient.DFN) and (Encounter.DateTime > Td) then
 | 
|---|
 | 1949 |       Result := True
 | 
|---|
 | 1950 |     else if AnEvtTyp in ['A','T'] then
 | 
|---|
 | 1951 |       Result := True;
 | 
|---|
 | 1952 |   end;
 | 
|---|
 | 1953 | end;
 | 
|---|
 | 1954 | 
 | 
|---|
 | 1955 | function IMOActionValidation(AnId: string; var IsIMOOD: boolean; var x: string; AnEventType: char): boolean;
 | 
|---|
 | 1956 | var
 | 
|---|
 | 1957 |   actName: string;
 | 
|---|
 | 1958 | begin
 | 
|---|
 | 1959 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
 | 1960 |   // jd imo change
 | 
|---|
 | 1961 |   Result := True;
 | 
|---|
 | 1962 |   if CharAt(AnID, 1) in ['X','C'] then  // transfer IMO order doesn't need check
 | 
|---|
 | 1963 |   begin
 | 
|---|
 | 1964 |     IsIMOOD := IsIMOOrder(Copy(AnID, 2, Length(AnID)));
 | 
|---|
 | 1965 |     If IsIMOOD then
 | 
|---|
 | 1966 |     begin
 | 
|---|
 | 1967 |       if (not AllowActionOnIMO(AnEventType)) then
 | 
|---|
 | 1968 |       begin
 | 
|---|
 | 1969 | //      if CharAt(AnID,1) = 'X' then actName := 'change';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1970 |         if CharAt(AnID,1) = 'X' then actName := DKLangConstW('uOrders_change'); //kt added 8/8/2007
 | 
|---|
 | 1971 | //      if CharAt(AnID,1) = 'C' then actName := 'copy';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1972 |         if CharAt(AnID,1) = 'C' then actName := DKLangConstW('uOrders_copy'); //kt added 8/8/2007
 | 
|---|
 | 1973 | //      x := 'You cannot ' + actName + ' the clinical medication order.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1974 |         x := DKLangConstW('uOrders_You_cannot')+' ' + actName + DKLangConstW('uOrders_the_clinical_medication_orderx'); //kt added 8/8/2007
 | 
|---|
 | 1975 |         x := RetrieveOrderText(Copy(AnID, 2, Length(AnID))) + #13#13#10 + x;
 | 
|---|
 | 1976 |         UnlockOrder(Copy(AnID, 2, Length(AnID)));
 | 
|---|
 | 1977 |         result := False;
 | 
|---|
 | 1978 |       end
 | 
|---|
 | 1979 |       else
 | 
|---|
 | 1980 |       begin
 | 
|---|
 | 1981 |         if patient.Inpatient then
 | 
|---|
 | 1982 |         begin
 | 
|---|
 | 1983 | //        if CharAt(AnID,1) = 'X' then actName := 'changing';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1984 |           if CharAt(AnID,1) = 'X' then actName := DKLangConstW('uOrders_changing'); //kt added 8/8/2007
 | 
|---|
 | 1985 | //        if CharAt(AnID,1) = 'C' then actName := 'copying';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 1986 |           if CharAt(AnID,1) = 'C' then actName := DKLangConstW('uOrders_copying'); //kt added 8/8/2007
 | 
|---|
 | 1987 |           if MessageDlg(TX_IMO_WARNING1 + actName +  TX_IMO_WARNING2 + #13#13#10 + x, mtWarning,[mbOK,mbCancel],0) = mrCancel then
 | 
|---|
 | 1988 |           begin
 | 
|---|
 | 1989 |             UnlockOrder(Copy(AnID, 2, Length(AnID)));
 | 
|---|
 | 1990 |             result := False;
 | 
|---|
 | 1991 |           end;
 | 
|---|
 | 1992 |         end;
 | 
|---|
 | 1993 |       end;
 | 
|---|
 | 1994 |     end;
 | 
|---|
 | 1995 |   end;
 | 
|---|
 | 1996 |   if Piece(AnId,'^',1)='RENEW' then
 | 
|---|
 | 1997 |   begin
 | 
|---|
 | 1998 |     IsIMOOD := IsIMOOrder(Piece(AnID,'^',2));
 | 
|---|
 | 1999 |     If IsIMOOD then
 | 
|---|
 | 2000 |     begin
 | 
|---|
 | 2001 |       if (not AllowActionOnIMO(AnEventType)) then
 | 
|---|
 | 2002 |       begin
 | 
|---|
 | 2003 | //      x := 'You cannot renew the clinical medication order.';  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 2004 |         x := DKLangConstW('uOrders_You_cannot_renew_the_clinical_medication_orderx'); //kt added 8/8/2007
 | 
|---|
 | 2005 |         x := RetrieveOrderText(Piece(AnID,'^',2)) + #13#13#10 + x;
 | 
|---|
 | 2006 |         UnlockOrder(Piece(AnID,'^',2));
 | 
|---|
 | 2007 |         result := False;
 | 
|---|
 | 2008 |       end
 | 
|---|
 | 2009 |       else
 | 
|---|
 | 2010 |       begin
 | 
|---|
 | 2011 |         if Patient.Inpatient then
 | 
|---|
 | 2012 |         begin
 | 
|---|
 | 2013 | //        if MessageDlg(TX_IMO_WARNING1 + 'renewing' + TX_IMO_WARNING2, mtWarning,[mbOK,mbCancel],0) = mrCancel then  <-- original line.  //kt 8/8/2007
 | 
|---|
 | 2014 |           if MessageDlg(TX_IMO_WARNING1 + DKLangConstW('uOrders_renewing') + TX_IMO_WARNING2, mtWarning,[mbOK,mbCancel],0) = mrCancel then //kt added 8/8/2007
 | 
|---|
 | 2015 |           begin
 | 
|---|
 | 2016 |             UnlockOrder(Copy(AnID, 2, Length(AnID)));
 | 
|---|
 | 2017 |             result := False;
 | 
|---|
 | 2018 |           end;
 | 
|---|
 | 2019 |         end;
 | 
|---|
 | 2020 |       end;
 | 
|---|
 | 2021 |     end;
 | 
|---|
 | 2022 |   end;
 | 
|---|
 | 2023 | end;
 | 
|---|
 | 2024 | 
 | 
|---|
 | 2025 | initialization
 | 
|---|
 | 2026 |   uPatientLocked := False;
 | 
|---|
 | 2027 |   uKeepLock      := False;
 | 
|---|
 | 2028 |   uLastConfirm   := '';
 | 
|---|
 | 2029 |   uOrderSetTime  := 0;
 | 
|---|
 | 2030 |   uNewMedDialog  := 0;
 | 
|---|
 | 2031 |   uOrderAction   := nil;
 | 
|---|
 | 2032 |   uOrderDialog   := nil;
 | 
|---|
 | 2033 |   uOrderHTML     := nil;
 | 
|---|
 | 2034 |   uOrderMenu     := nil;
 | 
|---|
 | 2035 |   uOrderSet      := nil;
 | 
|---|
 | 2036 |   NSSchedule     := False;
 | 
|---|
 | 2037 |   OriginalMedsOutHeight   := 0;
 | 
|---|
 | 2038 |   OriginalMedsInHeight    := 0;
 | 
|---|
 | 2039 |   OriginalNonVAMedsHeight := 0;
 | 
|---|
 | 2040 | 
 | 
|---|
 | 2041 | end.
 | 
|---|