| 1 | //kt -- Modified with SourceScanner on 8/8/2007
 | 
|---|
| 2 | unit fODMedOut;
 | 
|---|
| 3 | 
 | 
|---|
| 4 | interface
 | 
|---|
| 5 | 
 | 
|---|
| 6 | uses
 | 
|---|
| 7 |   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
|---|
| 8 |   fODBase, ORCtrls, StdCtrls, ORFn, ExtCtrls, uConst, ComCtrls, uCore, Mask,
 | 
|---|
| 9 |   Menus, Buttons, DKLang;
 | 
|---|
| 10 | 
 | 
|---|
| 11 | type
 | 
|---|
| 12 |   TfrmODMedOut = class(TfrmODBase)
 | 
|---|
| 13 |     lblMedication: TLabel;
 | 
|---|
| 14 |     cboMedication: TORComboBox;
 | 
|---|
| 15 |     lblDosage: TLabel;
 | 
|---|
| 16 |     lblRoute: TLabel;
 | 
|---|
| 17 |     cboRoute: TORComboBox;
 | 
|---|
| 18 |     lblSchedule: TLabel;
 | 
|---|
| 19 |     cboSchedule: TORComboBox;
 | 
|---|
| 20 |     lblDispense: TLabel;
 | 
|---|
| 21 |     cboDispense: TORComboBox;
 | 
|---|
| 22 |     memComments: TMemo;
 | 
|---|
| 23 |     cboPriority: TORComboBox;
 | 
|---|
| 24 |     Bevel1: TBevel;
 | 
|---|
| 25 |     cboMedAlt: TORComboBox;
 | 
|---|
| 26 |     cboInstructions: TORComboBox;
 | 
|---|
| 27 |     lblQuantity: TLabel;
 | 
|---|
| 28 |     cboPickup: TORComboBox;
 | 
|---|
| 29 |     lblPickup: TLabel;
 | 
|---|
| 30 |     cboSC: TORComboBox;
 | 
|---|
| 31 |     lblSC: TLabel;
 | 
|---|
| 32 |     lblRefills: TLabel;
 | 
|---|
| 33 |     txtQuantity: TCaptionEdit;
 | 
|---|
| 34 |     lblComment: TLabel;
 | 
|---|
| 35 |     lblPriority: TLabel;
 | 
|---|
| 36 |     txtRefills: TCaptionEdit;
 | 
|---|
| 37 |     spnRefills: TUpDown;
 | 
|---|
| 38 |     cmdComplex: TButton;
 | 
|---|
| 39 |     btnUnits: TSpeedButton;
 | 
|---|
| 40 |     txtSIG: TCaptionEdit;
 | 
|---|
| 41 |     lblSIG: TLabel;
 | 
|---|
| 42 |     popUnits: TPopupMenu;
 | 
|---|
| 43 |     memComplex: TMemo;
 | 
|---|
| 44 |     procedure cboMedicationNeedData(Sender: TObject; const StartFrom: string;
 | 
|---|
| 45 |       Direction, InsertAt: Integer);
 | 
|---|
| 46 |     procedure cboMedicationSelect(Sender: TObject);
 | 
|---|
| 47 |     procedure FormCreate(Sender: TObject);
 | 
|---|
| 48 |     procedure ControlChange(Sender: TObject);
 | 
|---|
| 49 |     procedure cboDispenseExit(Sender: TObject);
 | 
|---|
| 50 |     procedure cboDispenseMouseClick(Sender: TObject);
 | 
|---|
| 51 |     procedure cboSCEnter(Sender: TObject);
 | 
|---|
| 52 |     procedure txtQuantityEnter(Sender: TObject);
 | 
|---|
| 53 |     procedure btnUnitsClick(Sender: TObject);
 | 
|---|
| 54 |     procedure cmdComplexClick(Sender: TObject);
 | 
|---|
| 55 |     procedure memCommentsEnter(Sender: TObject);
 | 
|---|
| 56 |   private
 | 
|---|
| 57 |     //kt Begin Mod (change Consts to Vars) 8/8/2007
 | 
|---|
| 58 |     TX_NO_MED      : string;  //kt
 | 
|---|
| 59 |     TX_NO_DOSE     : string;  //kt
 | 
|---|
| 60 |     TX_NO_AMPER    : string;  //kt
 | 
|---|
| 61 |     TX_NO_ROUTE    : string;  //kt
 | 
|---|
| 62 |     TX_NF_ROUTE    : string;  //kt
 | 
|---|
| 63 |     TX_NO_SCHED    : string;  //kt
 | 
|---|
| 64 |     TX_NO_PICK     : string;  //kt
 | 
|---|
| 65 |     TX_RNG_REFILL  : string;  //kt
 | 
|---|
| 66 |     TX_SCH_QUOTE   : string;  //kt
 | 
|---|
| 67 |     TX_SCH_MINUS   : string;  //kt
 | 
|---|
| 68 |     TX_SCH_SPACE   : string;  //kt
 | 
|---|
| 69 |     TX_SCH_LEN     : string;  //kt
 | 
|---|
| 70 |     TX_SCH_PRN     : string;  //kt
 | 
|---|
| 71 |     TX_SCH_ZERO    : string;  //kt
 | 
|---|
| 72 |     TX_SCH_LSP     : string;  //kt
 | 
|---|
| 73 |     TX_SCH_NS      : string;  //kt
 | 
|---|
| 74 |     TX_OUTPT_IV    : string;  //kt
 | 
|---|
| 75 |     TX_QTY_NV      : string;  //kt
 | 
|---|
| 76 |     TX_QTY_MAIL    : string;  //kt
 | 
|---|
| 77 |     //kt End Mod -------------------
 | 
|---|
| 78 |     { Private declarations }
 | 
|---|
| 79 |     FLastDrug: Integer;
 | 
|---|
| 80 |     FLastMedID: string;
 | 
|---|
| 81 |     FDispenseMsg: string;
 | 
|---|
| 82 |     FMedCombo: TORComboBox;
 | 
|---|
| 83 |     procedure CheckFormAlt;
 | 
|---|
| 84 |     procedure ResetOnMedChange;
 | 
|---|
| 85 |     procedure SetAskSC;
 | 
|---|
| 86 |     procedure SetAltCombo;
 | 
|---|
| 87 |     procedure SetInstructions;
 | 
|---|
| 88 |     procedure SetOnOISelect;
 | 
|---|
| 89 |     procedure SetMaxRefills;
 | 
|---|
| 90 |     procedure SetupNouns;
 | 
|---|
| 91 |     procedure SetComplex;
 | 
|---|
| 92 |     procedure SetSimple;
 | 
|---|
| 93 |     procedure UnitClick(Sender: TObject);
 | 
|---|
| 94 |     procedure SetupVars;  //kt
 | 
|---|
| 95 |   protected
 | 
|---|
| 96 |     procedure InitDialog; override;
 | 
|---|
| 97 |     procedure Validate(var AnErrMsg: string); override;
 | 
|---|
| 98 |   public
 | 
|---|
| 99 |     procedure SetupDialog(OrderAction: Integer; const ID: string); override;
 | 
|---|
| 100 |   end;
 | 
|---|
| 101 | 
 | 
|---|
| 102 | implementation
 | 
|---|
| 103 | 
 | 
|---|
| 104 | {$R *.DFM}
 | 
|---|
| 105 | 
 | 
|---|
| 106 | uses rOrders, rODBase, fODMedFA, fODMedComplex;
 | 
|---|
| 107 | 
 | 
|---|
| 108 | const
 | 
|---|
| 109 |   REFILLS_DFLT  = '0';
 | 
|---|
| 110 |   REFILLS_MAX   = 11;
 | 
|---|
| 111 | 
 | 
|---|
| 112 | //TX_NO_MED     = 'Medication must be entered.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 113 | //TX_NO_DOSE    = 'Instructions must be entered.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 114 | //TX_NO_AMPER   = 'Instructions may not contain the ampersand (&) character.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 115 | //TX_NO_ROUTE   = 'Route must be entered.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 116 | //TX_NF_ROUTE   = 'Route not found in the Medication Routes file.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 117 | //TX_NO_SCHED   = 'Schedule must be entered.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 118 | //TX_NO_PICK    = 'A method for picking up the medication must be entered.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 119 | //TX_RNG_REFILL = 'The number of refills must be in the range of 0 through ';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 120 | //TX_SCH_QUOTE  = 'Schedule must not have quotemarks in it.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 121 | //TX_SCH_MINUS  = 'Schedule must not have a dash at the beginning.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 122 | //TX_SCH_SPACE  = 'Schedule must have only one space in it.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 123 | //TX_SCH_LEN    = 'Schedule must be less than 70 characters.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 124 | //TX_SCH_PRN    = 'Schedule cannot include PRN - use Comments to enter PRN.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 125 | //TX_SCH_ZERO   = 'Schedule cannot be Q0';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 126 | //TX_SCH_LSP    = 'Schedule may not have leading spaces.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 127 | //TX_SCH_NS     = 'Unable to resolve non-standard schedule.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 128 | //TX_OUTPT_IV   = 'This patient has not been admitted.  Only IV orders may be entered.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 129 | //TX_QTY_NV     = 'Unable to validate quantity.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 130 | //TX_QTY_MAIL   = 'Quantity for mailed items must be a whole number.';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 131 | 
 | 
|---|
| 132 | 
 | 
|---|
| 133 | { TfrmODBase common methods }
 | 
|---|
| 134 | 
 | 
|---|
| 135 |  
 | 
|---|
| 136 |  
 | 
|---|
| 137 | procedure TfrmODMedOut.SetupVars;
 | 
|---|
| 138 | //kt Added entire function to replace constant declarations 8/8/2007
 | 
|---|
| 139 | begin
 | 
|---|
| 140 |   TX_NO_MED     := DKLangConstW('fODMedOut_Medication_must_be_enteredx'); 
 | 
|---|
| 141 |   TX_NO_DOSE    := DKLangConstW('fODMedOut_Instructions_must_be_enteredx'); 
 | 
|---|
| 142 |   TX_NO_AMPER   := DKLangConstW('fODMedOut_Instructions_may_not_contain_the_ampersand_xxx_characterx');
 | 
|---|
| 143 |   TX_NO_ROUTE   := DKLangConstW('fODMedOut_Route_must_be_enteredx');
 | 
|---|
| 144 |   TX_NF_ROUTE   := DKLangConstW('fODMedOut_Route_not_found_in_the_Medication_Routes_filex');
 | 
|---|
| 145 |   TX_NO_SCHED   := DKLangConstW('fODMedOut_Schedule_must_be_enteredx');
 | 
|---|
| 146 |   TX_NO_PICK    := DKLangConstW('fODMedOut_A_method_for_picking_up_the_medication_must_be_enteredx');
 | 
|---|
| 147 |   TX_RNG_REFILL := DKLangConstW('fODMedOut_The_number_of_refills_must_be_in_the_range_of_0_through');
 | 
|---|
| 148 |   TX_SCH_QUOTE  := DKLangConstW('fODMedOut_Schedule_must_not_have_quotemarks_in_itx');
 | 
|---|
| 149 |   TX_SCH_MINUS  := DKLangConstW('fODMedOut_Schedule_must_not_have_a_dash_at_the_beginningx');
 | 
|---|
| 150 |   TX_SCH_SPACE  := DKLangConstW('fODMedOut_Schedule_must_have_only_one_space_in_itx');
 | 
|---|
| 151 |   TX_SCH_LEN    := DKLangConstW('fODMedOut_Schedule_must_be_less_than_70_charactersx');
 | 
|---|
| 152 |   TX_SCH_PRN    := DKLangConstW('fODMedOut_Schedule_cannot_include_PRN_x_use_Comments_to_enter_PRNx');
 | 
|---|
| 153 |   TX_SCH_ZERO   := DKLangConstW('fODMedOut_Schedule_cannot_be_Q0');
 | 
|---|
| 154 |   TX_SCH_LSP    := DKLangConstW('fODMedOut_Schedule_may_not_have_leading_spacesx');
 | 
|---|
| 155 |   TX_SCH_NS     := DKLangConstW('fODMedOut_Unable_to_resolve_nonxstandard_schedulex');
 | 
|---|
| 156 |   TX_OUTPT_IV   := DKLangConstW('fODMedOut_This_patient_has_not_been_admittedx__Only_IV_orders_may_be_enteredx');
 | 
|---|
| 157 |   TX_QTY_NV     := DKLangConstW('fODMedOut_Unable_to_validate_quantityx');
 | 
|---|
| 158 |   TX_QTY_MAIL   := DKLangConstW('fODMedOut_Quantity_for_mailed_items_must_be_a_whole_numberx');
 | 
|---|
| 159 | end;
 | 
|---|
| 160 | 
 | 
|---|
| 161 | procedure TfrmODMedOut.FormCreate(Sender: TObject);
 | 
|---|
| 162 | //const
 | 
|---|
| 163 | //TC_RESTRICT = 'Ordering Restrictions';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 164 | var
 | 
|---|
| 165 |   Restriction: string;
 | 
|---|
| 166 |   TC_RESTRICT : string;
 | 
|---|
| 167 | begin
 | 
|---|
| 168 |   TC_RESTRICT := DKLangConstW('fODMedOut_Ordering_Restrictions'); //kt added 8/8/2007
 | 
|---|
| 169 |   inherited;
 | 
|---|
| 170 |   AllowQuickOrder := True;
 | 
|---|
| 171 |   CheckAuthForMeds(Restriction);
 | 
|---|
| 172 |   if Length(Restriction) > 0 then
 | 
|---|
| 173 |   begin
 | 
|---|
| 174 |     InfoBox(Restriction, TC_RESTRICT, MB_OK);
 | 
|---|
| 175 |     Close;
 | 
|---|
| 176 |     Exit;
 | 
|---|
| 177 |   end;
 | 
|---|
| 178 |   FillerID := 'PSO';                        // does 'on Display' order check **KCM**
 | 
|---|
| 179 | //StatusText('Loading Dialog Definition');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 180 |   StatusText(DKLangConstW('fODMedOut_Loading_Dialog_Definition')); //kt added 8/8/2007
 | 
|---|
| 181 |   Responses.Dialog := 'PSO OERR';           // loads formatting info
 | 
|---|
| 182 | //StatusText('Loading Default Values');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 183 |   StatusText(DKLangConstW('fODMedOut_Loading_Default_Values')); //kt added 8/8/2007
 | 
|---|
| 184 |   CtrlInits.LoadDefaults(ODForMedOut);      // ODForMedOut returns TStrings with defaults
 | 
|---|
| 185 |   InitDialog;
 | 
|---|
| 186 | //CtrlInits.SetControl(cboPickup, 'Pickup'); // do only once, so don't do in InitDialog  <-- original line.  //kt 8/8/2007
 | 
|---|
| 187 |   CtrlInits.SetControl(cboPickup, DKLangConstW('fODMedOut_Pickup'));   //kt 8/8/2007
 | 
|---|
| 188 |   PreserveControl(cboPickup);
 | 
|---|
| 189 | end;
 | 
|---|
| 190 | 
 | 
|---|
| 191 | procedure TfrmODMedOut.InitDialog;
 | 
|---|
| 192 | begin
 | 
|---|
| 193 |   inherited;
 | 
|---|
| 194 |   FLastDrug := 0;
 | 
|---|
| 195 |   FLastMedID := '';
 | 
|---|
| 196 |   FDispenseMsg := '';
 | 
|---|
| 197 |   FMedCombo := cboMedication;                    // this must be before SetControl(cboMedication)
 | 
|---|
| 198 |   with CtrlInits do
 | 
|---|
| 199 |   begin
 | 
|---|
| 200 | //  SetControl(cboMedication, 'ShortList');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 201 |     SetControl(cboMedication, DKLangConstW('fODMedOut_ShortList')); //kt added 8/8/2007
 | 
|---|
| 202 |     cboMedication.InsertSeparator;
 | 
|---|
| 203 |     //SetControl(cboMedAlt,     'ShortList'); can't do this since it calls InitLongList
 | 
|---|
| 204 | //  SetControl(cboSchedule,   'Schedules');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 205 |     SetControl(cboSchedule,   DKLangConstW('fODMedOut_Schedules')); //kt added 8/8/2007
 | 
|---|
| 206 | //  SetControl(cboPriority,   'Priorities');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 207 |     SetControl(cboPriority,   DKLangConstW('fODMedOut_Priorities')); //kt added 8/8/2007
 | 
|---|
| 208 |     //SetControl(cboPickup,     'Pickup');
 | 
|---|
| 209 | //  SetControl(cboSC,         'SCStatus');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 210 |     SetControl(cboSC,         DKLangConstW('fODMedOut_SCStatus')); //kt added 8/8/2007
 | 
|---|
| 211 |   end;
 | 
|---|
| 212 |   SetAskSC;
 | 
|---|
| 213 | //StatusText('Retrieving List of Medications');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 214 |   StatusText(DKLangConstW('fODMedOut_Retrieving_List_of_Medications')); //kt added 8/8/2007
 | 
|---|
| 215 |   cboMedAlt.Visible := False;
 | 
|---|
| 216 |   cboMedication.Visible := True;
 | 
|---|
| 217 |   cboMedication.InitLongList('');
 | 
|---|
| 218 |   ActiveControl := cboMedication; //SetFocusedControl(FMedCombo);
 | 
|---|
| 219 |   SetSimple;
 | 
|---|
| 220 |   StatusText('');
 | 
|---|
| 221 | end;
 | 
|---|
| 222 | 
 | 
|---|
| 223 | procedure TfrmODMedOut.SetupDialog(OrderAction: Integer; const ID: string);
 | 
|---|
| 224 | var
 | 
|---|
| 225 |   AnInstr: string;
 | 
|---|
| 226 | begin
 | 
|---|
| 227 |   inherited;
 | 
|---|
| 228 |   if OrderAction in [ORDER_COPY, ORDER_EDIT] then Responses.Remove('START', 1);
 | 
|---|
| 229 |   if OrderAction in [ORDER_COPY, ORDER_EDIT, ORDER_QUICK] then with Responses do
 | 
|---|
| 230 |   begin
 | 
|---|
| 231 |     Changing := True;
 | 
|---|
| 232 |     SetControl(cboMedication, 'ORDERABLE', 1);
 | 
|---|
| 233 |     ResetOnMedChange;
 | 
|---|
| 234 |     SetOnOISelect;
 | 
|---|
| 235 |     SetAltCombo;
 | 
|---|
| 236 |     //cboMedicationSelect(Self);
 | 
|---|
| 237 |     SetControl(cboDispense,   'DRUG',      1);
 | 
|---|
| 238 |     SetInstructions;
 | 
|---|
| 239 |     SetControl(txtQuantity,   'QTY',       1);
 | 
|---|
| 240 |     SetControl(txtRefills,    'REFILLS',   1);
 | 
|---|
| 241 |     spnRefills.Position := StrToIntDef(txtRefills.Text, 0);
 | 
|---|
| 242 |     SetControl(cboPickup,     'PICKUP',    1);
 | 
|---|
| 243 |     SetControl(memComments,   'COMMENT',   1);
 | 
|---|
| 244 |     SetControl(cboPriority,   'URGENCY',   1);
 | 
|---|
| 245 |     { prevent the SIG from being part of the comments on pre-CPRS prescriptions }
 | 
|---|
| 246 |     if (OrderAction in [ORDER_COPY, ORDER_EDIT]) and (cboInstructions.Text = '') then
 | 
|---|
| 247 |     begin
 | 
|---|
| 248 |       AnInstr := TextForOrder(ID); //'SIG:  ' + memComments.Text;
 | 
|---|
| 249 |       OrderMessage(AnInstr);
 | 
|---|
| 250 |       lblSIG.Visible := True;
 | 
|---|
| 251 |       txtSIG.Visible := True;
 | 
|---|
| 252 |       txtSIG.Text := memComments.Text;
 | 
|---|
| 253 |       memComments.Clear;
 | 
|---|
| 254 |     end;
 | 
|---|
| 255 |     { can't edit the orderable item for a med order that has been released }
 | 
|---|
| 256 |     if (OrderAction = ORDER_EDIT) and OrderIsReleased(EditOrder)
 | 
|---|
| 257 |       then FMedCombo.Enabled := False;
 | 
|---|
| 258 |     Changing := False;
 | 
|---|
| 259 |     ControlChange(Self);
 | 
|---|
| 260 |   end;
 | 
|---|
| 261 |   if OrderAction <> ORDER_EDIT then SetFocusedControl(FMedCombo);
 | 
|---|
| 262 | end;
 | 
|---|
| 263 | 
 | 
|---|
| 264 | procedure TfrmODMedOut.Validate(var AnErrMsg: string);
 | 
|---|
| 265 | var
 | 
|---|
| 266 |   Sched: Integer;
 | 
|---|
| 267 |   RouteID, RouteAbbr: string;
 | 
|---|
| 268 | 
 | 
|---|
| 269 |   procedure SetError(const x: string);
 | 
|---|
| 270 |   begin
 | 
|---|
| 271 |     if Length(AnErrMsg) > 0 then AnErrMsg := AnErrMsg + CRLF;
 | 
|---|
| 272 |     AnErrMsg := AnErrMsg + x;
 | 
|---|
| 273 |   end;
 | 
|---|
| 274 | 
 | 
|---|
| 275 | begin
 | 
|---|
| 276 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
| 277 |   inherited;
 | 
|---|
| 278 |   if Length(cboMedAlt.Text) = 0           then SetError(TX_NO_MED);
 | 
|---|
| 279 |   // if memComplex is Visible, then the dosage fields were validated in fMedComplex
 | 
|---|
| 280 |   if memComplex.Visible = False then
 | 
|---|
| 281 |   begin
 | 
|---|
| 282 |     if Length(cboInstructions.Text) = 0     then SetError(TX_NO_DOSE);
 | 
|---|
| 283 |     if Pos('&', cboInstructions.Text) > 0   then SetError(TX_NO_AMPER);
 | 
|---|
| 284 |     if (Length(cboRoute.Text) = 0) and (not MedIsSupply(cboMedAlt.ItemIEN))
 | 
|---|
| 285 |                                             then SetError(TX_NO_ROUTE);
 | 
|---|
| 286 |     if (Length(cboRoute.Text) > 0) and (cboRoute.ItemIndex < 0) then
 | 
|---|
| 287 |     begin
 | 
|---|
| 288 |       LookupRoute(cboRoute.Text, RouteID, RouteAbbr);
 | 
|---|
| 289 |       if RouteID = '0'
 | 
|---|
| 290 |         then SetError(TX_NF_ROUTE)
 | 
|---|
| 291 |         else Responses.Update('ROUTE', 1, RouteID, RouteAbbr);
 | 
|---|
| 292 |     end;
 | 
|---|
| 293 |     if Length(cboSchedule.Text) = 0         then SetError(TX_NO_SCHED);
 | 
|---|
| 294 |   end;
 | 
|---|
| 295 |   if cboPickup.ItemID = ''                then SetError(TX_NO_PICK);
 | 
|---|
| 296 |   if StrToIntDef(txtRefills.Text, 99) > spnRefills.Max
 | 
|---|
| 297 |     then SetError(TX_RNG_REFILL + IntToStr(spnRefills.Max));
 | 
|---|
| 298 |   with cboSchedule do if Length(Text) > 0 then
 | 
|---|
| 299 |   begin
 | 
|---|
| 300 |     Sched := ValidSchedule(Text);
 | 
|---|
| 301 |     if Sched = -1 then
 | 
|---|
| 302 |     begin
 | 
|---|
| 303 |       if Pos('"', Text) > 0                                 then SetError(TX_SCH_QUOTE);
 | 
|---|
| 304 |       if Copy(Text, 1, 1) = '-'                             then SetError(TX_SCH_MINUS);
 | 
|---|
| 305 |       if Pos(' ', Copy(Text, Pos(' ', Text) + 1, 999)) > 0  then SetError(TX_SCH_SPACE);
 | 
|---|
| 306 |       if Length(Text) > 70                                  then SetError(TX_SCH_LEN);
 | 
|---|
| 307 |       if (Pos('P RN', Text) > 0) or (Pos('PR N', Text) > 0) then SetError(TX_SCH_PRN);
 | 
|---|
| 308 |       if Pos('Q0', Text) > 0                                then SetError(TX_SCH_ZERO);
 | 
|---|
| 309 |       if TrimLeft(Text) <> Text                             then SetError(TX_SCH_LSP);
 | 
|---|
| 310 |     end;
 | 
|---|
| 311 |     if Sched = 0                          then SetError(TX_SCH_NS);
 | 
|---|
| 312 |   end;
 | 
|---|
| 313 |   with txtQuantity do if Length(Text) > 0 then
 | 
|---|
| 314 |   begin
 | 
|---|
| 315 |     if not ValidQuantity(Text)            then SetError(TX_QTY_NV);
 | 
|---|
| 316 |     //if (cboPickup.ItemID = 'M') and (IntToStr(StrToIntDef(Text,-1)) <> Text)
 | 
|---|
| 317 |     //                                      then SetError(TX_QTY_MAIL);
 | 
|---|
| 318 |   end;
 | 
|---|
| 319 | end;
 | 
|---|
| 320 | 
 | 
|---|
| 321 | { cboMedication methods }
 | 
|---|
| 322 | 
 | 
|---|
| 323 | procedure TfrmODMedOut.ResetOnMedChange;
 | 
|---|
| 324 | begin
 | 
|---|
| 325 |   ClearControl(cboDispense);
 | 
|---|
| 326 |   ClearControl(cboInstructions);
 | 
|---|
| 327 |   btnUnits.Caption := '';
 | 
|---|
| 328 |   ResetControl(cboRoute);
 | 
|---|
| 329 |   ResetControl(cboSchedule);
 | 
|---|
| 330 |   ClearControl(txtQuantity);
 | 
|---|
| 331 |   txtRefills.Text := REFILLS_DFLT;
 | 
|---|
| 332 |   spnRefills.Max  := REFILLS_MAX;
 | 
|---|
| 333 |   ClearControl(memComments);
 | 
|---|
| 334 |   ClearControl(memOrder);
 | 
|---|
| 335 | end;
 | 
|---|
| 336 | 
 | 
|---|
| 337 | procedure TfrmODMedOut.SetAltCombo;
 | 
|---|
| 338 | begin
 | 
|---|
| 339 |   with cboMedication do
 | 
|---|
| 340 |   begin
 | 
|---|
| 341 |     FMedCombo := cboMedAlt;
 | 
|---|
| 342 | //  if cboMedAlt.Items.Count = 0 then CtrlInits.SetListOnly(cboMedAlt, 'ShortList');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 343 |     if cboMedAlt.Items.Count = 0 then CtrlInits.SetListOnly(cboMedAlt, DKLangConstW('fODMedOut_ShortList')); //kt added 8/8/2007
 | 
|---|
| 344 |     cboMedAlt.SetExactByIEN(ItemIEN, TrimRight(Piece(Text, '<', 1)));
 | 
|---|
| 345 |     cboMedication.Visible := False;
 | 
|---|
| 346 |     cboMedAlt.Visible := True;
 | 
|---|
| 347 |   end;
 | 
|---|
| 348 | end;
 | 
|---|
| 349 | 
 | 
|---|
| 350 | procedure TfrmODMedOut.SetOnOISelect;
 | 
|---|
| 351 | begin
 | 
|---|
| 352 |   with CtrlInits do
 | 
|---|
| 353 |   begin
 | 
|---|
| 354 |     FLastMedID := FMedCombo.ItemID;
 | 
|---|
| 355 |     LoadOrderItem(OIForMedOut(FMedCombo.ItemIEN));
 | 
|---|
| 356 | //  SetControl(cboDispense,     'Dispense');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 357 |     SetControl(cboDispense,     DKLangConstW('fODMedOut_Dispense')); //kt added 8/8/2007
 | 
|---|
| 358 |     if cboDispense.Items.Count = 1 then cboDispense.ItemIndex := 0;
 | 
|---|
| 359 | //  lblDosage.Caption := DefaultText('Verb');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 360 |     lblDosage.Caption := DefaultText(DKLangConstW('fODMedOut_Verb')); //kt added 8/8/2007
 | 
|---|
| 361 | //  if lblDosage.Caption = '' then lblDosage.Caption := 'Amount';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 362 |     if lblDosage.Caption = '' then lblDosage.Caption := DKLangConstW('fODMedOut_Amount'); //kt added 8/8/2007
 | 
|---|
| 363 | //  SetControl(cboInstructions, 'Instruct');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 364 |     SetControl(cboInstructions, DKLangConstW('fODMedOut_Instruct')); //kt added 8/8/2007
 | 
|---|
| 365 |     SetupNouns;
 | 
|---|
| 366 | //  SetControl(cboRoute,        'Route');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 367 |     SetControl(cboRoute,        DKLangConstW('fODMedOut_Route')); //kt added 8/8/2007
 | 
|---|
| 368 |     if cboRoute.Items.Count = 1 then cboRoute.ItemIndex := 0;
 | 
|---|
| 369 | //  if DefaultText('DefSched') <> '' then cboSchedule.SelectByID(DefaultText('DefSched'));  <-- original line.  //kt 8/8/2007
 | 
|---|
| 370 |     if DefaultText(DKLangConstW('fODMedOut_DefSched')) <> '' then cboSchedule.SelectByID(DefaultText(DKLangConstW('fODMedOut_DefSched'))); //kt added 8/8/2007
 | 
|---|
| 371 | //  OrderMessage(TextOf('Message'));  <-- original line.  //kt 8/8/2007
 | 
|---|
| 372 |     OrderMessage(TextOf(DKLangConstW('fODMedOut_Message'))); //kt added 8/8/2007
 | 
|---|
| 373 |   end;
 | 
|---|
| 374 | end;
 | 
|---|
| 375 | 
 | 
|---|
| 376 | procedure TfrmODMedOut.cboMedicationNeedData(Sender: TObject; const StartFrom: string;
 | 
|---|
| 377 |   Direction, InsertAt: Integer);
 | 
|---|
| 378 | { retrieves a subset of inpatient medication orderable items }
 | 
|---|
| 379 | begin
 | 
|---|
| 380 |   inherited;
 | 
|---|
| 381 |   FMedCombo.ForDataUse(SubSetOfOrderItems(StartFrom, Direction, 'S.O RX'));
 | 
|---|
| 382 | end;
 | 
|---|
| 383 | 
 | 
|---|
| 384 | procedure TfrmODMedOut.cboMedicationSelect(Sender: TObject);
 | 
|---|
| 385 | { sets related controls whenever orderable item changes (MouseClick or Exit) }
 | 
|---|
| 386 | begin
 | 
|---|
| 387 |   inherited;
 | 
|---|
| 388 |   with FMedCombo do
 | 
|---|
| 389 |   begin
 | 
|---|
| 390 |     if ItemID <> FLastMedID then FLastMedID := ItemID else Exit;
 | 
|---|
| 391 |     Changing := True;
 | 
|---|
| 392 |     if Sender <> Self then Responses.Clear;       // Sender=Self when called from SetupDialog
 | 
|---|
| 393 |     ResetOnMedChange;
 | 
|---|
| 394 |     if CharAt(ItemID, 1) = 'Q' then
 | 
|---|
| 395 |     begin
 | 
|---|
| 396 |       Responses.QuickOrder := ExtractInteger(ItemID);
 | 
|---|
| 397 |       Responses.SetControl(FMedCombo, 'ORDERABLE', 1);
 | 
|---|
| 398 |     end;
 | 
|---|
| 399 |     if ItemIEN > 0 then SetOnOISelect;
 | 
|---|
| 400 |   end;
 | 
|---|
| 401 |   with Responses do if QuickOrder > 0 then
 | 
|---|
| 402 |   begin
 | 
|---|
| 403 |     SetControl(FMedCombo,     'ORDERABLE', 1);
 | 
|---|
| 404 |     SetControl(cboDispense,   'DRUG',      1);
 | 
|---|
| 405 |     SetInstructions;
 | 
|---|
| 406 |     SetControl(txtQuantity,   'QTY',       1);
 | 
|---|
| 407 |     SetControl(txtRefills,    'REFILLS',   1);
 | 
|---|
| 408 |     spnRefills.Position := StrToIntDef(txtRefills.Text, 0);
 | 
|---|
| 409 |     SetControl(cboPickup,     'PICKUP',    1);
 | 
|---|
| 410 |     SetControl(memComments,   'COMMENT',   1);
 | 
|---|
| 411 |     SetControl(cboPriority,   'URGENCY',   1);
 | 
|---|
| 412 |   end;
 | 
|---|
| 413 |   Changing := False;
 | 
|---|
| 414 |   ControlChange(Self);
 | 
|---|
| 415 |   if FMedCombo = cboMedication then SetAltCombo;
 | 
|---|
| 416 |   // if the Dispense drug was stuffed - still do the checks (form alt, refills)
 | 
|---|
| 417 |   if cboDispense.ItemIndex > -1 then cboDispenseMouseClick(Self);
 | 
|---|
| 418 | end;
 | 
|---|
| 419 | 
 | 
|---|
| 420 | { cboDispense methods }
 | 
|---|
| 421 | 
 | 
|---|
| 422 | procedure TfrmODMedOut.CheckFormAlt;
 | 
|---|
| 423 | var
 | 
|---|
| 424 |   DrugName, OIName: string;
 | 
|---|
| 425 |   Drug, OI: Integer;
 | 
|---|
| 426 | begin
 | 
|---|
| 427 |   with cboDispense do if (ItemIndex > -1) and (Piece(Items[ItemIndex], U, 4) = 'NF') then
 | 
|---|
| 428 |   begin
 | 
|---|
| 429 |     SelectFormularyAlt(ItemIEN, Drug, OI, DrugName, OIName, PST_OUTPATIENT);
 | 
|---|
| 430 |     if Drug > 0 then
 | 
|---|
| 431 |     begin
 | 
|---|
| 432 |       if FMedCombo.ItemIEN <> OI then
 | 
|---|
| 433 |       begin
 | 
|---|
| 434 |         FMedCombo.InitLongList(OIName);
 | 
|---|
| 435 |         FMedCombo.SelectByIEN(OI);
 | 
|---|
| 436 |         cboMedicationSelect(Self);
 | 
|---|
| 437 |       end;
 | 
|---|
| 438 |       cboDispense.SelectByIEN(Drug);
 | 
|---|
| 439 |     end; {if FormAlt}
 | 
|---|
| 440 |   end; {if ItemIndex}
 | 
|---|
| 441 |   SetAskSC;  // now check enabled for the service connected prompt
 | 
|---|
| 442 | end;
 | 
|---|
| 443 | 
 | 
|---|
| 444 | procedure TfrmODMedOut.SetMaxRefills;
 | 
|---|
| 445 | begin
 | 
|---|
| 446 |   with cboDispense do if (ItemIndex > -1) and (Length(Piece(Items[ItemIndex], U, 6)) > 0) then
 | 
|---|
| 447 |   begin
 | 
|---|
| 448 |     spnRefills.Max := StrToIntDef(Piece(Items[ItemIndex], U, 6), REFILLS_MAX);
 | 
|---|
| 449 |     if StrToIntDef(txtRefills.Text, 0) > spnRefills.Max then
 | 
|---|
| 450 |     begin
 | 
|---|
| 451 |       txtRefills.Text := IntToStr(spnRefills.Max);
 | 
|---|
| 452 |       spnRefills.Position := spnRefills.Max;
 | 
|---|
| 453 |     end;
 | 
|---|
| 454 |   end;
 | 
|---|
| 455 | end;
 | 
|---|
| 456 | 
 | 
|---|
| 457 | procedure TfrmODMedOut.cboDispenseExit(Sender: TObject);
 | 
|---|
| 458 | var
 | 
|---|
| 459 |   AMsg: string;
 | 
|---|
| 460 | begin
 | 
|---|
| 461 |   inherited;
 | 
|---|
| 462 |   SetMaxRefills;
 | 
|---|
| 463 |   with cboDispense do
 | 
|---|
| 464 |   begin
 | 
|---|
| 465 |     if ItemIEN <> FLastDrug then CheckFormAlt;
 | 
|---|
| 466 |     if ItemIEN > 0 then
 | 
|---|
| 467 |     begin
 | 
|---|
| 468 |       AMsg := DispenseMessage(ItemIEN) + CRLF;
 | 
|---|
| 469 |       if memMessage.Text <> AMsg then OrderMessage(AMsg);
 | 
|---|
| 470 |     end;
 | 
|---|
| 471 |     FLastDrug := ItemIEN;
 | 
|---|
| 472 |   end;
 | 
|---|
| 473 | end;
 | 
|---|
| 474 | 
 | 
|---|
| 475 | procedure TfrmODMedOut.cboDispenseMouseClick(Sender: TObject);
 | 
|---|
| 476 | begin
 | 
|---|
| 477 |   inherited;
 | 
|---|
| 478 |   SetMaxRefills;
 | 
|---|
| 479 |   with cboDispense do
 | 
|---|
| 480 |   begin
 | 
|---|
| 481 |     if ItemIEN <> FLastDrug then CheckFormAlt;
 | 
|---|
| 482 |     if ItemIEN > 0 then OrderMessage(DispenseMessage(ItemIEN));
 | 
|---|
| 483 |     FLastDrug := ItemIEN;
 | 
|---|
| 484 |   end;
 | 
|---|
| 485 | end;
 | 
|---|
| 486 | 
 | 
|---|
| 487 | { dosage instructions }
 | 
|---|
| 488 | 
 | 
|---|
| 489 | procedure TfrmODMedOut.SetupNouns;
 | 
|---|
| 490 | var
 | 
|---|
| 491 |   AvailWidth, MaxWidth: Integer;
 | 
|---|
| 492 | begin
 | 
|---|
| 493 | //CtrlInits.SetPopupMenu(popUnits, UnitClick, 'Nouns');  <-- original line.  //kt 8/8/2007
 | 
|---|
| 494 |   CtrlInits.SetPopupMenu(popUnits, UnitClick, DKLangConstW('fODMedOut_Nouns')); //kt added 8/8/2007
 | 
|---|
| 495 |   if popUnits.Items.Count > 0 then
 | 
|---|
| 496 |   begin
 | 
|---|
| 497 |     // Make sure cboInstructions is at least 40 pixels wide so it can show values
 | 
|---|
| 498 |     // like "1/2".  Allow for a 3 pixel space between the the Units button & Route.
 | 
|---|
| 499 |     AvailWidth := (cboRoute.Left - 3) - (cboInstructions.Left + 40);
 | 
|---|
| 500 |     MaxWidth := popUnits.Tag + 9; // allow 9 pixels for the down arrow & button border
 | 
|---|
| 501 |     if MaxWidth > AvailWidth then MaxWidth := AvailWidth;
 | 
|---|
| 502 |     btnUnits.Width := MaxWidth;
 | 
|---|
| 503 |     btnUnits.Left  := cboRoute.Left - MaxWidth - 3;
 | 
|---|
| 504 |     cboInstructions.Width := btnUnits.Left - cboInstructions.Left;
 | 
|---|
| 505 |     btnUnits.Caption := popUnits.Items[0].Caption;
 | 
|---|
| 506 |     btnUnits.Visible := True;
 | 
|---|
| 507 |   end else
 | 
|---|
| 508 |   begin
 | 
|---|
| 509 |     btnUnits.Visible := False;
 | 
|---|
| 510 |     // Allow for a 6 pixel margin between the Instructions box & Route
 | 
|---|
| 511 |     cboInstructions.Width := cboRoute.Left - cboInstructions.Left - 6;
 | 
|---|
| 512 |   end;
 | 
|---|
| 513 | end;
 | 
|---|
| 514 | 
 | 
|---|
| 515 | procedure TfrmODMedOut.btnUnitsClick(Sender: TObject);
 | 
|---|
| 516 | var
 | 
|---|
| 517 |   APoint: TPoint;
 | 
|---|
| 518 | begin
 | 
|---|
| 519 |   inherited;
 | 
|---|
| 520 |   APoint := btnUnits.ClientToScreen(Point(0, btnUnits.Height));
 | 
|---|
| 521 |   popUnits.Popup(APoint.X, APoint.Y);
 | 
|---|
| 522 | end;
 | 
|---|
| 523 | 
 | 
|---|
| 524 | procedure TfrmODMedOut.UnitClick(Sender: TObject);
 | 
|---|
| 525 | begin
 | 
|---|
| 526 |   btnUnits.Caption := TMenuItem(Sender).Caption;
 | 
|---|
| 527 | end;
 | 
|---|
| 528 | 
 | 
|---|
| 529 | procedure TfrmODMedOut.SetComplex;
 | 
|---|
| 530 | begin
 | 
|---|
| 531 |   lblDosage.Visible := False;;
 | 
|---|
| 532 |   lblRoute.Visible := False;;
 | 
|---|
| 533 |   lblSchedule.Visible := False;;
 | 
|---|
| 534 |   cboInstructions.Visible := False;
 | 
|---|
| 535 |   btnUnits.Visible := False;;
 | 
|---|
| 536 |   cboRoute.Visible := False;
 | 
|---|
| 537 |   cboSchedule.Visible := False;
 | 
|---|
| 538 |   memComplex.Visible := True;
 | 
|---|
| 539 | //cmdComplex.Caption := 'Change Dose...';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 540 |   cmdComplex.Caption := DKLangConstW('fODMedOut_Change_Dosexxx'); //kt added 8/8/2007
 | 
|---|
| 541 | end;
 | 
|---|
| 542 | 
 | 
|---|
| 543 | procedure TfrmODMedOut.SetSimple;
 | 
|---|
| 544 | begin
 | 
|---|
| 545 |   memComplex.Visible := False;
 | 
|---|
| 546 |   lblDosage.Visible := True;;
 | 
|---|
| 547 |   lblRoute.Visible := True;;
 | 
|---|
| 548 |   lblSchedule.Visible := True;;
 | 
|---|
| 549 |   cboInstructions.Visible := True;
 | 
|---|
| 550 |   btnUnits.Visible := (popUnits.Items.Count > 0) or (btnUnits.Caption <> '');
 | 
|---|
| 551 |   cboRoute.Visible := True;
 | 
|---|
| 552 |   cboSchedule.Visible := True;
 | 
|---|
| 553 | //cmdComplex.Caption := 'Complex Dose...';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 554 |   cmdComplex.Caption := DKLangConstW('fODMedOut_Complex_Dosexxx'); //kt added 8/8/2007
 | 
|---|
| 555 | end;
 | 
|---|
| 556 | 
 | 
|---|
| 557 | procedure TfrmODMedOut.SetInstructions;
 | 
|---|
| 558 | var
 | 
|---|
| 559 |   x: string;
 | 
|---|
| 560 |   AnInstance: Integer;
 | 
|---|
| 561 | begin
 | 
|---|
| 562 |   case Responses.InstanceCount('INSTR') of
 | 
|---|
| 563 |   0:   begin
 | 
|---|
| 564 |          cboInstructions.ItemIndex := -1;
 | 
|---|
| 565 |          // there may still be a route & schedule (for copied orders)
 | 
|---|
| 566 |          if Responses.EValueFor('MISC', 1) <> ''
 | 
|---|
| 567 |            then btnUnits.Caption := Responses.EValueFor('MISC', 1);
 | 
|---|
| 568 |          Responses.SetControl(cboRoute, 'ROUTE', 1);
 | 
|---|
| 569 |          with cboRoute do if ItemIndex > -1 then Text := DisplayText[ItemIndex];
 | 
|---|
| 570 |          Responses.SetControl(cboSchedule, 'SCHEDULE', 1);
 | 
|---|
| 571 |          SetSimple;
 | 
|---|
| 572 |        end;
 | 
|---|
| 573 |   1:   begin
 | 
|---|
| 574 |          AnInstance := Responses.NextInstance('INSTR', 0);
 | 
|---|
| 575 |          Responses.SetControl(cboInstructions, 'INSTR', AnInstance);
 | 
|---|
| 576 |          btnUnits.Caption := Responses.IValueFor('MISC', AnInstance);
 | 
|---|
| 577 |          Responses.SetControl(cboRoute, 'ROUTE', AnInstance);
 | 
|---|
| 578 |          with cboRoute do if ItemIndex > -1 then Text := DisplayText[ItemIndex];
 | 
|---|
| 579 |          Responses.SetControl(cboSchedule, 'SCHEDULE', AnInstance);
 | 
|---|
| 580 |          SetSimple;
 | 
|---|
| 581 |        end;
 | 
|---|
| 582 |   else begin
 | 
|---|
| 583 |          memComplex.Clear;
 | 
|---|
| 584 |          AnInstance := Responses.NextInstance('INSTR', 0);
 | 
|---|
| 585 |          while AnInstance > 0 do
 | 
|---|
| 586 |          begin
 | 
|---|
| 587 |            x := Responses.EValueFor('INSTR', AnInstance);
 | 
|---|
| 588 |            x := x + ' ' + Responses.EValueFor('MISC', AnInstance);
 | 
|---|
| 589 |            x := x + ' ' + Responses.EValueFor('ROUTE', AnInstance);
 | 
|---|
| 590 |            x := x + ' ' + Responses.EValueFor('SCHEDULE', AnInstance);
 | 
|---|
| 591 |            if Length(Responses.EValueFor('DAYS', AnInstance)) > 0
 | 
|---|
| 592 | //           then x := x + ' ' + Responses.EValueFor('DAYS', AnInstance) + ' day(s)';  <-- original line.  //kt 8/8/2007
 | 
|---|
| 593 |              then x := x + ' ' + Responses.EValueFor('DAYS', AnInstance) + DKLangConstW('fODMedOut_dayxsx'); //kt added 8/8/2007
 | 
|---|
| 594 |            memComplex.Lines.Add(x);
 | 
|---|
| 595 |            AnInstance := Responses.NextInstance('INSTR', AnInstance);
 | 
|---|
| 596 |          end;
 | 
|---|
| 597 |          SetComplex;
 | 
|---|
| 598 |        end;
 | 
|---|
| 599 |   end; {case}
 | 
|---|
| 600 |   memOrder.Text := Responses.OrderText;
 | 
|---|
| 601 | end; {if ExecuteComplexDose}
 | 
|---|
| 602 | 
 | 
|---|
| 603 | procedure TfrmODMedOut.cmdComplexClick(Sender: TObject);
 | 
|---|
| 604 | begin
 | 
|---|
| 605 |   SetupVars;  //kt added 8/8/2007 to replace constants with vars.
 | 
|---|
| 606 |   inherited;
 | 
|---|
| 607 |   if FMedCombo.ItemIEN = 0 then
 | 
|---|
| 608 |   begin
 | 
|---|
| 609 | //  InfoBox(TX_NO_MED, 'Error', MB_OK);  <-- original line.  //kt 8/8/2007
 | 
|---|
| 610 |     InfoBox(TX_NO_MED, DKLangConstW('fODMedOut_Error'), MB_OK); //kt added 8/8/2007
 | 
|---|
| 611 |     Exit;
 | 
|---|
| 612 |   end;
 | 
|---|
| 613 |   if ExecuteComplexDose(CtrlInits, Responses) then SetInstructions;
 | 
|---|
| 614 | end;
 | 
|---|
| 615 | 
 | 
|---|
| 616 | { quantity }
 | 
|---|
| 617 | 
 | 
|---|
| 618 | procedure TfrmODMedOut.txtQuantityEnter(Sender: TObject);
 | 
|---|
| 619 | begin
 | 
|---|
| 620 |   inherited;
 | 
|---|
| 621 |   with cboDispense do if ItemIEN > 0 then OrderMessage(QuantityMessage(ItemIEN));
 | 
|---|
| 622 | end;
 | 
|---|
| 623 | 
 | 
|---|
| 624 | { service connection }
 | 
|---|
| 625 | 
 | 
|---|
| 626 | procedure TfrmODMedOut.SetAskSC;
 | 
|---|
| 627 | const
 | 
|---|
| 628 |   SC_NO  = 0;
 | 
|---|
| 629 |   SC_YES = 1;
 | 
|---|
| 630 | begin
 | 
|---|
| 631 |   if Patient.ServiceConnected and RequiresCopay(FLastDrug) then
 | 
|---|
| 632 |   begin
 | 
|---|
| 633 |     lblSC.Font.Color := clWindowText;
 | 
|---|
| 634 |     cboSC.Enabled := True;
 | 
|---|
| 635 |     cboSC.Color := clWindow;
 | 
|---|
| 636 |     if Patient.SCPercent > 50 then cboSC.SelectByIEN(SC_YES) else cboSC.SelectByIEN(SC_NO);
 | 
|---|
| 637 |   end else
 | 
|---|
| 638 |   begin
 | 
|---|
| 639 |     lblSC.Font.Color := clGrayText;
 | 
|---|
| 640 |     cboSC.Enabled := False;
 | 
|---|
| 641 |     cboSC.Color := clBtnFace;
 | 
|---|
| 642 |     cboSC.ItemIndex := -1;
 | 
|---|
| 643 |   end;
 | 
|---|
| 644 | end;
 | 
|---|
| 645 | 
 | 
|---|
| 646 | procedure TfrmODMedOut.cboSCEnter(Sender: TObject);
 | 
|---|
| 647 | begin
 | 
|---|
| 648 |   inherited;
 | 
|---|
| 649 |   OrderMessage(RatedDisabilities);
 | 
|---|
| 650 | end;
 | 
|---|
| 651 | 
 | 
|---|
| 652 | { comments }
 | 
|---|
| 653 | 
 | 
|---|
| 654 | procedure TfrmODMedOut.memCommentsEnter(Sender: TObject);
 | 
|---|
| 655 | begin
 | 
|---|
| 656 |   inherited;
 | 
|---|
| 657 |   OrderMessage('');  // make sure Order Message disappears when in comments box
 | 
|---|
| 658 | end;
 | 
|---|
| 659 | 
 | 
|---|
| 660 | { all controls }
 | 
|---|
| 661 | 
 | 
|---|
| 662 | procedure TfrmODMedOut.ControlChange(Sender: TObject);
 | 
|---|
| 663 | begin
 | 
|---|
| 664 |   inherited;
 | 
|---|
| 665 |   if csLoading in ComponentState then Exit;  // to prevent error caused by txtRefills
 | 
|---|
| 666 |   if Changing then Exit;
 | 
|---|
| 667 |   if FMedCombo.ItemIEN = 0 then Exit;        // prevent txtRefills from updating early
 | 
|---|
| 668 |   with FMedCombo do if ItemIEN > 0
 | 
|---|
| 669 |     then Responses.Update('ORDERABLE', 1, ItemID, Piece(Items[ItemIndex], U, 3))
 | 
|---|
| 670 |     else Responses.Update('ORDERABLE', 1, '', '');
 | 
|---|
| 671 |   with cboDispense   do if ItemIEN > 0
 | 
|---|
| 672 |     then Responses.Update('DRUG', 1, ItemID, Piece(Items[ItemIndex], U, 2))
 | 
|---|
| 673 |     else Responses.Update('DRUG', 1, '', '');
 | 
|---|
| 674 |   if memComplex.Visible = False then
 | 
|---|
| 675 |   begin
 | 
|---|
| 676 |     with cboInstructions do Responses.Update('INSTR', 1, Text, Text);
 | 
|---|
| 677 |     with btnUnits        do if Visible then Responses.Update('MISC',  1, Caption, Caption);
 | 
|---|
| 678 |     with cboRoute        do if ItemIndex > -1
 | 
|---|
| 679 |       then Responses.Update('ROUTE', 1, ItemID, Piece(Items[ItemIndex], U, 3)) // abbreviation
 | 
|---|
| 680 |       else Responses.Update('ROUTE', 1, Text, Text);
 | 
|---|
| 681 |     with cboSchedule     do Responses.Update('SCHEDULE', 1, Text, Text);
 | 
|---|
| 682 |   end;
 | 
|---|
| 683 |   with txtQuantity     do Responses.Update('QTY', 1, Text, Text);
 | 
|---|
| 684 |   with txtRefills      do Responses.Update('REFILLS', 1, Text, Text);
 | 
|---|
| 685 |   with cboPickup       do Responses.Update('PICKUP', 1, ItemID, Text);
 | 
|---|
| 686 |   with cboPriority     do Responses.Update('URGENCY', 1, ItemID, Text);
 | 
|---|
| 687 |   with memComments     do Responses.Update('COMMENT', 1, TX_WPTYPE, Text);
 | 
|---|
| 688 |   with cboSC           do if Enabled then Responses.Update('SC', 1, ItemID, Text);
 | 
|---|
| 689 |   memOrder.Text := Responses.OrderText;
 | 
|---|
| 690 | end;
 | 
|---|
| 691 | 
 | 
|---|
| 692 | end.
 | 
|---|
| 693 | 
 | 
|---|