| [459] | 1 | unit fMedCopy;
 | 
|---|
 | 2 | 
 | 
|---|
 | 3 | interface
 | 
|---|
 | 4 | 
 | 
|---|
 | 5 | uses
 | 
|---|
 | 6 |   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
|---|
 | 7 |   StdCtrls, ORDtTm, ORCtrls, ORFn, rOrders, uCore, rCore, mEvntDelay, fAutoSz,
 | 
|---|
 | 8 |   ExtCtrls, UConst;
 | 
|---|
 | 9 | 
 | 
|---|
 | 10 | type
 | 
|---|
 | 11 |   TfrmMedCopy = class(TForm)
 | 
|---|
 | 12 |     Panel1: TPanel;
 | 
|---|
 | 13 |     lblPtInfo: TLabel;
 | 
|---|
 | 14 |     Panel2: TPanel;
 | 
|---|
 | 15 |     lblInstruction: TStaticText;
 | 
|---|
 | 16 |     Image1: TImage;
 | 
|---|
 | 17 |     Label1: TStaticText;
 | 
|---|
 | 18 |     Panel3: TPanel;
 | 
|---|
 | 19 |     GroupBox2: TGroupBox;
 | 
|---|
 | 20 |     radDelayed: TRadioButton;
 | 
|---|
 | 21 |     radRelease: TRadioButton;
 | 
|---|
 | 22 |     cmdOK: TButton;
 | 
|---|
 | 23 |     cmdCancel: TButton;
 | 
|---|
 | 24 |     Panel4: TPanel;
 | 
|---|
 | 25 |     fraEvntDelayList: TfraEvntDelayList;
 | 
|---|
 | 26 |     procedure cmdOKClick(Sender: TObject);
 | 
|---|
 | 27 |     procedure cmdCancelClick(Sender: TObject);                         
 | 
|---|
 | 28 |     procedure FormCreate(Sender: TObject);
 | 
|---|
 | 29 |     procedure radDelayedClick(Sender: TObject);
 | 
|---|
 | 30 |     procedure radReleaseClick(Sender: TObject);
 | 
|---|
 | 31 |     procedure fraEvntDelayListcboEvntListChange(Sender: TObject);
 | 
|---|
 | 32 |     procedure UMStillDelay(var message: TMessage); message UM_STILLDELAY;
 | 
|---|
 | 33 |     procedure fraEvntDelayListmlstEventsDblClick(Sender: TObject);
 | 
|---|
 | 34 |     procedure fraEvntDelayListmlstEventsChange(Sender: TObject);
 | 
|---|
 | 35 |     procedure FormKeyDown(Sender: TObject; var Key: Word;
 | 
|---|
 | 36 |       Shift: TShiftState);
 | 
|---|
 | 37 | 
 | 
|---|
 | 38 |   private
 | 
|---|
 | 39 |     FDelayEvent: TOrderDelayEvent;
 | 
|---|
 | 40 |     FOKPressed: Boolean;
 | 
|---|
 | 41 |   public
 | 
|---|
 | 42 |     { Public declarations }
 | 
|---|
 | 43 |   end;
 | 
|---|
 | 44 | 
 | 
|---|
 | 45 | function SetDelayEventForMed(const RadCap: string; var ADelayEvent: TOrderDelayEvent;
 | 
|---|
 | 46 |           var IsNewEvent: Boolean; LimitEvent: Char): Boolean;
 | 
|---|
 | 47 | var
 | 
|---|
 | 48 |    frmMedCopy: TfrmMedCopy;
 | 
|---|
 | 49 | 
 | 
|---|
 | 50 | implementation
 | 
|---|
 | 51 | {$R *.DFM}
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 | uses  fODBase, fOrdersTS, fOrders;
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 | const
 | 
|---|
 | 56 |   TX_SEL_DATE = 'An effective date (approximate) must be selected for discharge orders.';
 | 
|---|
 | 57 |   TC_SEL_DATE = 'Missing Effective Date';
 | 
|---|
 | 58 | 
 | 
|---|
 | 59 | function SetDelayEventForMed(const RadCap: string; var ADelayEvent: TOrderDelayEvent;
 | 
|---|
 | 60 |           var IsNewEvent: Boolean; LimitEvent: Char): Boolean;
 | 
|---|
 | 61 | const
 | 
|---|
 | 62 |   TX_RELEASE1  = 'Release ';
 | 
|---|
 | 63 |   TX_RELEASE2  = ' orders immediately';
 | 
|---|
 | 64 |   TX_DELAYED1  = 'Delay release of ';
 | 
|---|
 | 65 |   TX_DELAYED2  = ' orders until';
 | 
|---|
 | 66 | var
 | 
|---|
 | 67 |   EvtInfo,PtEvtID,AnEvtDlg: string;
 | 
|---|
 | 68 |   SpeCap, CurrTS: string;
 | 
|---|
 | 69 | 
 | 
|---|
 | 70 |   procedure Highlight(APtEvtID: string);
 | 
|---|
 | 71 |   var
 | 
|---|
 | 72 |     j: integer;
 | 
|---|
 | 73 |   begin
 | 
|---|
 | 74 |     frmOrders.InitOrderSheetsForEvtDelay;
 | 
|---|
 | 75 |     for j := 0 to frmOrders.lstSheets.Items.Count - 1 do
 | 
|---|
 | 76 |     begin
 | 
|---|
 | 77 |       if Piece(frmOrders.lstSheets.Items[j],'^',1)=APtEvtID then
 | 
|---|
 | 78 |       begin
 | 
|---|
 | 79 |         frmOrders.lstSheets.ItemIndex := j;
 | 
|---|
 | 80 |         break;
 | 
|---|
 | 81 |       end;
 | 
|---|
 | 82 |     end;
 | 
|---|
 | 83 |   end;
 | 
|---|
 | 84 | 
 | 
|---|
 | 85 |   function DisplayEvntDialog(AEvtDlg: String; AnEvent: TOrderDelayEvent): boolean;
 | 
|---|
 | 86 |   var
 | 
|---|
 | 87 |     DlgData: string;
 | 
|---|
 | 88 |   begin
 | 
|---|
 | 89 |     DlgData := GetDlgData(AEvtDlg);
 | 
|---|
 | 90 |     frmOrders.NeedShowModal := True;
 | 
|---|
 | 91 |     frmOrders.IsDefaultDlg := True;
 | 
|---|
 | 92 |     Result := frmOrders.PlaceOrderForDefaultDialog(DlgData, True, AnEvent);
 | 
|---|
 | 93 |     frmOrders.IsDefaultDlg := False;
 | 
|---|
 | 94 |     frmOrders.NeedShowModal := False;
 | 
|---|
 | 95 |   end;
 | 
|---|
 | 96 | 
 | 
|---|
 | 97 | begin
 | 
|---|
 | 98 |   if LimitEvent = 'C' then
 | 
|---|
 | 99 |   begin
 | 
|---|
 | 100 |     Result := True;
 | 
|---|
 | 101 |     ADelayEvent.EventType := 'C';
 | 
|---|
 | 102 |     ADelayEvent.Specialty := 0;
 | 
|---|
 | 103 |     ADelayEvent.Effective := 0;
 | 
|---|
 | 104 |     Exit;
 | 
|---|
 | 105 |   end;
 | 
|---|
 | 106 |   Result := False;
 | 
|---|
 | 107 |   frmMedCopy := TfrmMedCopy.Create(Application);
 | 
|---|
 | 108 |   try
 | 
|---|
 | 109 |     if (LimitEvent = 'A') and (not Patient.Inpatient) then
 | 
|---|
 | 110 |     begin
 | 
|---|
 | 111 |       frmMedCopy.radDelayed.Checked := True;
 | 
|---|
 | 112 |       frmMedCopy.radRelease.Enabled := False;
 | 
|---|
 | 113 |     end;
 | 
|---|
 | 114 |     ResizeAnchoredFormToFont(frmMedCopy);
 | 
|---|
 | 115 |     CurrTS := Piece(GetCurrentSpec(Patient.DFN),'^',1);
 | 
|---|
 | 116 |     if Length(CurrTS)>0 then
 | 
|---|
 | 117 |       SpeCap := #13 + '  The current treating specialty is ' + CurrTS
 | 
|---|
 | 118 |     else
 | 
|---|
 | 119 |       SpeCap := #13 + '  No treating specialty is available.';
 | 
|---|
 | 120 |     if Patient.Inpatient then
 | 
|---|
 | 121 |       frmMedCopy.lblPtInfo.Caption := '   ' + Patient.Name + ' is currently admitted to ' + Encounter.LocationName + SpeCap
 | 
|---|
 | 122 |     else
 | 
|---|
 | 123 |     begin
 | 
|---|
 | 124 |       if (Encounter.Location > 0) then
 | 
|---|
 | 125 |         frmMedCopy.lblPtInfo.Caption := Patient.Name + ' is currently at ' + Encounter.LocationName + SpeCap
 | 
|---|
 | 126 |       else
 | 
|---|
 | 127 |         frmMedCopy.lblPtInfo.Caption := Patient.Name + ' currently is an outpatient.' + SpeCap;
 | 
|---|
 | 128 |     end;
 | 
|---|
 | 129 |     frmMedCopy.fraEvntDelayList.EvntLimit := LimitEvent;
 | 
|---|
 | 130 |     if Pos('transfer',RadCap)>0 then
 | 
|---|
 | 131 |       frmMedCopy.Caption := 'Transfer Medication Orders';
 | 
|---|
 | 132 |     frmMedCopy.radRelease.Caption := TX_RELEASE1 + RadCap + TX_RELEASE2;
 | 
|---|
 | 133 |     frmMedCopy.radDelayed.Caption := TX_DELAYED1 + RadCap + TX_DELAYED2;
 | 
|---|
 | 134 |     if LimitEvent='D' then
 | 
|---|
 | 135 |     begin
 | 
|---|
 | 136 |       frmMedCopy.Panel2.Visible := False;
 | 
|---|
 | 137 |       frmMedCopy.Height := frmMedCopy.Panel1.Height + frmMedCopy.GroupBox2.Height;
 | 
|---|
 | 138 |     end;
 | 
|---|
 | 139 |     frmMedCopy.ShowModal;
 | 
|---|
 | 140 |     if (frmMedCopy.FOKPressed) and (frmMedCopy.radRelease.Checked) then
 | 
|---|
 | 141 |     begin
 | 
|---|
 | 142 |       if (frmMedCopy.radRelease.Checked) and (LimitEvent = 'D') then
 | 
|---|
 | 143 |         XfInToOutNow := True
 | 
|---|
 | 144 |       else XfInToOutNow := False;
 | 
|---|
 | 145 |       ADelayEvent := frmMedCopy.FDelayEvent;
 | 
|---|
 | 146 |       Result := True;
 | 
|---|
 | 147 |     end
 | 
|---|
 | 148 |     else if (frmMedCopy.FOKPressed) and (frmMedCopy.radDelayed.Checked) then
 | 
|---|
 | 149 |     begin
 | 
|---|
 | 150 |       EvtInfo := frmMedCopy.fraEvntDelayList.mlstEvents.Items[frmMedCopy.fraEvntDelayList.mlstEvents.ItemIndex];
 | 
|---|
 | 151 |       ADelayEvent.EventType := CharAt(Piece(EvtInfo,'^',3),1);
 | 
|---|
 | 152 |       ADelayEvent.EventIFN  := StrToInt64Def(Piece(EvtInfo,'^',1),0);
 | 
|---|
 | 153 |       if StrToInt64Def(Piece(EvtInfo,'^',13),0) > 0 then
 | 
|---|
 | 154 |       begin
 | 
|---|
 | 155 |         ADelayEvent.TheParent.Assign(Piece(EvtInfo,'^',13));
 | 
|---|
 | 156 |         ADelayEvent.EventType := ADelayEvent.TheParent.ParentType;
 | 
|---|
 | 157 |       end;
 | 
|---|
 | 158 |       ADelayEvent.EventName := frmMedCopy.fraEvntDelayList.mlstEvents.DisplayText[frmMedCopy.fraEvntDelayList.mlstEvents.ItemIndex];
 | 
|---|
 | 159 |       ADelayEvent.Specialty := 0;
 | 
|---|
 | 160 |       if frmMedCopy.fraEvntDelayList.orDateBox.Visible then
 | 
|---|
 | 161 |         ADelayEvent.Effective := frmMedCopy.fraEvntDelayList.orDateBox.FMDateTime
 | 
|---|
 | 162 |       else
 | 
|---|
 | 163 |         ADelayEvent.Effective := 0;
 | 
|---|
 | 164 |       IsNewEvent := False;
 | 
|---|
 | 165 |       if TypeOfExistedEvent(Patient.DFN,ADelayEvent.EventIFN) = 0 then
 | 
|---|
 | 166 |       begin
 | 
|---|
 | 167 |          IsNewEvent := True;
 | 
|---|
 | 168 |          if ADelayEvent.TheParent.ParentIFN > 0 then
 | 
|---|
 | 169 |          begin
 | 
|---|
 | 170 |            if StrToIntDef(ADelayEvent.TheParent.ParentDlg,0)>0 then
 | 
|---|
 | 171 |              AnEvtDlg := ADelayEvent.TheParent.ParentDlg;
 | 
|---|
 | 172 |          end
 | 
|---|
 | 173 |          else
 | 
|---|
 | 174 |            AnEvtDlg := Piece(EvtInfo,'^',5);
 | 
|---|
 | 175 |       end;
 | 
|---|
 | 176 |       if (StrToIntDef(AnEvtDlg,0)>0) and (IsNewEvent) then
 | 
|---|
 | 177 |          if not DisplayEvntDialog(AnEvtDlg, ADelayEvent) then
 | 
|---|
 | 178 |          begin
 | 
|---|
 | 179 |            frmOrders.lstSheets.ItemIndex := 0;
 | 
|---|
 | 180 |            frmOrders.lstSheetsClick(nil);
 | 
|---|
 | 181 |            Result := False;
 | 
|---|
 | 182 |            Exit;
 | 
|---|
 | 183 |          end;
 | 
|---|
 | 184 |       if not isExistedEvent(Patient.DFN, IntToStr(ADelayEvent.EventIFN), PtEvtID) then
 | 
|---|
 | 185 |       begin
 | 
|---|
 | 186 |         IsNewEvent := True;
 | 
|---|
 | 187 |         if (ADelayEvent.TheParent.ParentIFN > 0) and (TypeOfExistedEvent(Patient.DFN,ADelayEvent.EventIFN) = 0 ) then
 | 
|---|
 | 188 |           SaveEvtForOrder(Patient.DFN,ADelayEvent.TheParent.ParentIFN,'');
 | 
|---|
 | 189 |         SaveEvtForOrder(Patient.DFN,ADelayEvent.EventIFN,'');
 | 
|---|
 | 190 |         if isExistedEvent(Patient.DFN, IntToStr(ADelayEvent.EventIFN),PtEvtID) then
 | 
|---|
 | 191 |         begin
 | 
|---|
 | 192 |           Highlight(PtEvtID);
 | 
|---|
 | 193 |           ADelayEvent.IsNewEvent := False;
 | 
|---|
 | 194 |           ADelayEvent.PtEventIFN := StrToIntDef(PtEvtID,0);
 | 
|---|
 | 195 |         end;
 | 
|---|
 | 196 |       end else
 | 
|---|
 | 197 |       begin
 | 
|---|
 | 198 |         Highlight(PtEvtID);
 | 
|---|
 | 199 |         ADelayEvent.PtEventIFN := StrToIntDef(PtEvtID,0);
 | 
|---|
 | 200 |         ADelayEvent.IsNewEvent := False;
 | 
|---|
 | 201 |       end;
 | 
|---|
 | 202 | 
 | 
|---|
 | 203 |       if frmOrders.lstSheets.ItemIndex > -1 then
 | 
|---|
 | 204 |       begin
 | 
|---|
 | 205 |         frmOrders.AskForCancel := False;
 | 
|---|
 | 206 |         frmOrders.lstSheetsClick(nil);
 | 
|---|
 | 207 |         frmOrders.AskForCancel := True;
 | 
|---|
 | 208 |       end;
 | 
|---|
 | 209 |       Result := True;
 | 
|---|
 | 210 |     end;
 | 
|---|
 | 211 |   finally
 | 
|---|
 | 212 |     frmMedCopy.fraEvntDelayList.ResetProperty;
 | 
|---|
 | 213 |     frmMedCopy.Release;
 | 
|---|
 | 214 |   end;
 | 
|---|
 | 215 | end;
 | 
|---|
 | 216 | 
 | 
|---|
 | 217 | procedure TfrmMedCopy.FormCreate(Sender: TObject);
 | 
|---|
 | 218 | begin
 | 
|---|
 | 219 |   inherited;
 | 
|---|
 | 220 |   FOKPressed            := False;
 | 
|---|
 | 221 |   FDelayEvent.EventType := #0;
 | 
|---|
 | 222 |   FDelayEvent.EventIFN  := 0;
 | 
|---|
 | 223 |   radRelease.Checked := True;
 | 
|---|
 | 224 |   if not Patient.Inpatient then
 | 
|---|
 | 225 |     panel2.Visible := False;
 | 
|---|
 | 226 |   if not radDelayed.Checked then
 | 
|---|
 | 227 |   begin
 | 
|---|
 | 228 |     if not panel2.Visible then
 | 
|---|
 | 229 |       Height := Height - fraEvntDelayList.Height - panel2.Height
 | 
|---|
 | 230 |     else
 | 
|---|
 | 231 |       Height := Height - fraEvntDelayList.Height;
 | 
|---|
 | 232 |   end;
 | 
|---|
 | 233 | end;
 | 
|---|
 | 234 | 
 | 
|---|
 | 235 | procedure TfrmMedCopy.cmdOKClick(Sender: TObject);
 | 
|---|
 | 236 | var
 | 
|---|
 | 237 |   today : TFMDateTime;
 | 
|---|
 | 238 | begin
 | 
|---|
 | 239 |   inherited;
 | 
|---|
 | 240 |   today := FMToday;
 | 
|---|
 | 241 |   if (radDelayed.Checked) and (fraEvntDelayList.mlstEvents.ItemIndex < 0) then
 | 
|---|
 | 242 |   begin
 | 
|---|
 | 243 |     InfoBox('A release event must be selected.', 'No Selection Made', MB_OK);
 | 
|---|
 | 244 |     Exit;
 | 
|---|
 | 245 |   end;
 | 
|---|
 | 246 |   if (radRelease.Checked) and (Pos('copied',radRelease.Caption)>0)  then
 | 
|---|
 | 247 |   begin
 | 
|---|
 | 248 |     ImmdCopyAct := True;
 | 
|---|
 | 249 |     FDelayEvent.EventType := 'C';
 | 
|---|
 | 250 |     FDelayEvent.Specialty := 0;
 | 
|---|
 | 251 |     FDelayEvent.Effective := 0;
 | 
|---|
 | 252 |   end
 | 
|---|
 | 253 |   else if (radRelease.Checked) and (Pos('transfer',radRelease.Caption)>0) then
 | 
|---|
 | 254 |   begin
 | 
|---|
 | 255 |     FDelayEvent.EventType := 'D';
 | 
|---|
 | 256 |     FDelayEvent.Specialty := 0;
 | 
|---|
 | 257 |     FDelayEvent.Effective := today;
 | 
|---|
 | 258 |   end;
 | 
|---|
 | 259 |   FOKPressed := True;
 | 
|---|
 | 260 |   Close;
 | 
|---|
 | 261 | end;
 | 
|---|
 | 262 | 
 | 
|---|
 | 263 | procedure TfrmMedCopy.cmdCancelClick(Sender: TObject);
 | 
|---|
 | 264 | begin
 | 
|---|
 | 265 |   inherited;
 | 
|---|
 | 266 |   Close;
 | 
|---|
 | 267 | end;
 | 
|---|
 | 268 | 
 | 
|---|
 | 269 | procedure TfrmMedCopy.radDelayedClick(Sender: TObject);
 | 
|---|
 | 270 | const
 | 
|---|
 | 271 |   WarningMSG = 'If you''re writing medication orders to transfer these from Inpatient' +
 | 
|---|
 | 272 |     ' to Outpatient, please use the ''release immediately'' choice.  These will be' +
 | 
|---|
 | 273 |     ' readied in advance by Pharmacy for the patient''s expected discharge date.';
 | 
|---|
 | 274 | begin
 | 
|---|
 | 275 |   inherited;
 | 
|---|
 | 276 |   frmMedCopy.fraEvntDelayList.UserDefaultEvent := StrToIntDef(GetDefaultEvt(IntToStr(User.DUZ)),0);
 | 
|---|
 | 277 |   fraEvntDelayList.DisplayEvntDelayList;
 | 
|---|
 | 278 |   if fraEvntDelayList.mlstEvents.Items.Count < 1 then
 | 
|---|
 | 279 |   begin
 | 
|---|
 | 280 |     ShowMessage(WarningMSG);
 | 
|---|
 | 281 |     radRelease.Checked := True;
 | 
|---|
 | 282 |   end else
 | 
|---|
 | 283 |   begin
 | 
|---|
 | 284 |     Height := Height + fraEvntDelayList.Height;
 | 
|---|
 | 285 |     fraEvntDelayList.Visible := True;
 | 
|---|
 | 286 |   end;
 | 
|---|
 | 287 | end;
 | 
|---|
 | 288 | 
 | 
|---|
 | 289 | procedure TfrmMedCopy.radReleaseClick(Sender: TObject);
 | 
|---|
 | 290 | begin
 | 
|---|
 | 291 |   inherited;
 | 
|---|
 | 292 |   fraEvntDelayList.Visible := False;
 | 
|---|
 | 293 |   Height := Height - fraEvntDelayList.Height;
 | 
|---|
 | 294 | end;
 | 
|---|
 | 295 | 
 | 
|---|
 | 296 | procedure TfrmMedCopy.fraEvntDelayListcboEvntListChange(Sender: TObject);
 | 
|---|
 | 297 | begin
 | 
|---|
 | 298 |   inherited;
 | 
|---|
 | 299 |   fraEvntDelayList.mlstEventsChange(Sender);
 | 
|---|
 | 300 |   if fraEvntDelayList.MatchedCancel then Close
 | 
|---|
 | 301 | end;
 | 
|---|
 | 302 | 
 | 
|---|
 | 303 | procedure TfrmMedCopy.UMStillDelay(var message: TMessage);
 | 
|---|
 | 304 | begin
 | 
|---|
 | 305 |   CmdOKClick(Application);
 | 
|---|
 | 306 | end;
 | 
|---|
 | 307 | 
 | 
|---|
 | 308 | procedure TfrmMedCopy.fraEvntDelayListmlstEventsDblClick(Sender: TObject);
 | 
|---|
 | 309 | begin
 | 
|---|
 | 310 |   if fraEvntDelayList.mlstEvents.ItemID > 0 then
 | 
|---|
 | 311 |     cmdOKClick(Self);
 | 
|---|
 | 312 | end;
 | 
|---|
 | 313 | 
 | 
|---|
 | 314 | procedure TfrmMedCopy.fraEvntDelayListmlstEventsChange(Sender: TObject);
 | 
|---|
 | 315 | begin
 | 
|---|
 | 316 |   fraEvntDelayList.mlstEventsChange(Sender);
 | 
|---|
 | 317 |   if fraEvntDelayList.MatchedCancel then
 | 
|---|
 | 318 |   begin
 | 
|---|
 | 319 |     FOKPressed := False;
 | 
|---|
 | 320 |     Close;
 | 
|---|
 | 321 |     Exit;
 | 
|---|
 | 322 |   end;
 | 
|---|
 | 323 | end;
 | 
|---|
 | 324 | 
 | 
|---|
 | 325 | procedure TfrmMedCopy.FormKeyDown(Sender: TObject; var Key: Word;
 | 
|---|
 | 326 |   Shift: TShiftState);
 | 
|---|
 | 327 | begin
 | 
|---|
 | 328 |   if Key = VK_RETURN then
 | 
|---|
 | 329 |     cmdOKClick(Self);
 | 
|---|
 | 330 | end;
 | 
|---|
 | 331 | 
 | 
|---|
 | 332 | end.
 | 
|---|