| [459] | 1 | unit fODReleaseEvent;
 | 
|---|
 | 2 | 
 | 
|---|
 | 3 | interface
 | 
|---|
 | 4 | 
 | 
|---|
 | 5 | uses
 | 
|---|
 | 6 |   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
|---|
 | 7 |   StdCtrls, ExtCtrls, ORFn, CheckLst, ORCtrls, fAutoSz;
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 | type
 | 
|---|
 | 10 |   TfrmOrdersReleaseEvent = class(TForm)
 | 
|---|
 | 11 |     pnlMiddle: TPanel;
 | 
|---|
 | 12 |     pnlBottom: TPanel;
 | 
|---|
 | 13 |     btnOK: TButton;
 | 
|---|
 | 14 |     btnCancel: TButton;
 | 
|---|
 | 15 |     cklstOrders: TCaptionCheckListBox;
 | 
|---|
 | 16 |     lblRelease: TLabel;
 | 
|---|
 | 17 |     procedure btnCancelClick(Sender: TObject);
 | 
|---|
 | 18 |     procedure FormCreate(Sender: TObject);
 | 
|---|
 | 19 |     procedure btnOKClick(Sender: TObject);
 | 
|---|
 | 20 |     procedure FormDestroy(Sender: TObject);
 | 
|---|
 | 21 |     procedure cklstOrdersMeasureItem(Control: TWinControl; Index: Integer;
 | 
|---|
 | 22 |       var AHeight: Integer);
 | 
|---|
 | 23 |     procedure cklstOrdersDrawItem(Control: TWinControl; Index: Integer;
 | 
|---|
 | 24 |       Rect: TRect; State: TOwnerDrawState);
 | 
|---|
 | 25 |     procedure cklstOrdersMouseMove(Sender: TObject; Shift: TShiftState; X,
 | 
|---|
 | 26 |       Y: Integer);
 | 
|---|
 | 27 |   private
 | 
|---|
 | 28 |     { Private declarations }
 | 
|---|
 | 29 |     OKPressed: boolean;
 | 
|---|
 | 30 |     FLastHintItem: integer;
 | 
|---|
 | 31 |     FOldHintPause: integer;
 | 
|---|
 | 32 |     FOldHintHidePause: integer;
 | 
|---|
 | 33 |     FComplete: boolean;
 | 
|---|
 | 34 |     FCurrTS: string;
 | 
|---|
 | 35 |   public
 | 
|---|
 | 36 |     { Public declarations }
 | 
|---|
 | 37 |     property CurrTS: string       read FCurrTS    write FCurrTS;
 | 
|---|
 | 38 |   end;
 | 
|---|
 | 39 | 
 | 
|---|
 | 40 | //procedure ExecuteReleaseEventOrders(AnOrderList: TList);
 | 
|---|
 | 41 | function ExecuteReleaseEventOrders(AnOrderList: TList): boolean;
 | 
|---|
 | 42 | 
 | 
|---|
 | 43 | implementation
 | 
|---|
 | 44 | {$R *.DFM}
 | 
|---|
 | 45 | 
 | 
|---|
 | 46 | uses rCore, rOrders, uConst, fOrdersPrint, uCore, uOrders, fOrders;
 | 
|---|
 | 47 | const
 | 
|---|
 | 48 |   TX_SAVERR1 = 'The error, ';
 | 
|---|
 | 49 |   TX_SAVERR2 = ', occurred while trying to release:' + CRLF + CRLF;
 | 
|---|
 | 50 |   TC_SAVERR  = 'Error Saving Order';
 | 
|---|
 | 51 | 
 | 
|---|
 | 52 | //procedure ExecuteReleaseEventOrders(AnOrderList: TList);
 | 
|---|
 | 53 | function ExecuteReleaseEventOrders(AnOrderList: TList): boolean;
 | 
|---|
 | 54 | const
 | 
|---|
 | 55 |   TXT_RELEASE = #13 + #13 + '  The following orders will be released to service:';
 | 
|---|
 | 56 | var
 | 
|---|
 | 57 |   i,j,idx: integer;
 | 
|---|
 | 58 |   AOrder: TOrder;
 | 
|---|
 | 59 |   OrdersLst: TStringlist;
 | 
|---|
 | 60 |   OrderText, LastCheckedPtEvt, SpeCap: string;
 | 
|---|
 | 61 |   frmOrdersReleaseEvent: TfrmOrdersReleaseEvent;
 | 
|---|
 | 62 | 
 | 
|---|
 | 63 |   function FindOrderText(const AnID: string): string;
 | 
|---|
 | 64 |   var
 | 
|---|
 | 65 |     i: Integer;
 | 
|---|
 | 66 |   begin
 | 
|---|
 | 67 |     Result := '';
 | 
|---|
 | 68 |     with AnOrderList do for i := 0 to Count - 1 do
 | 
|---|
 | 69 |       with TOrder(Items[i]) do if ID = AnID then
 | 
|---|
 | 70 |       begin
 | 
|---|
 | 71 |         Result := Text;
 | 
|---|
 | 72 |         Break;
 | 
|---|
 | 73 |       end;
 | 
|---|
 | 74 |   end;
 | 
|---|
 | 75 | 
 | 
|---|
 | 76 | begin
 | 
|---|
 | 77 |   frmOrdersReleaseEvent := TfrmOrdersReleaseEvent.Create(Application);
 | 
|---|
 | 78 |   try
 | 
|---|
 | 79 |     frmOrdersReleaseEvent.CurrTS := Piece(GetCurrentSpec(Patient.DFN),'^',1);
 | 
|---|
 | 80 |     if Length(frmOrdersReleaseEvent.CurrTS)>0 then
 | 
|---|
 | 81 |       SpeCap := #13 + '  The current treating specialty is ' + frmOrdersReleaseEvent.CurrTS
 | 
|---|
 | 82 |     else
 | 
|---|
 | 83 |       SpeCap := #13 + '  No treating specialty is available.';
 | 
|---|
 | 84 |     ResizeFormToFont(TForm(frmOrdersReleaseEvent));
 | 
|---|
 | 85 |     if Patient.Inpatient then
 | 
|---|
 | 86 |       frmOrdersReleaseEvent.lblRelease.Caption := '  ' + Patient.Name + ' is currently admitted to '
 | 
|---|
 | 87 |          + Encounter.LocationName + SpeCap + TXT_RELEASE
 | 
|---|
 | 88 |     else
 | 
|---|
 | 89 |     begin
 | 
|---|
 | 90 |       if Encounter.Location > 0 then
 | 
|---|
 | 91 |         frmOrdersReleaseEvent.lblRelease.Caption := '  ' + Patient.Name + ' is currently at '
 | 
|---|
 | 92 |           + Encounter.LocationName + SpeCap + TXT_RELEASE
 | 
|---|
 | 93 |       else
 | 
|---|
 | 94 |         frmOrdersReleaseEvent.lblRelease.Caption := '  ' + Patient.Name + ' is currently an outpatient.' + SpeCap + TXT_RELEASE;
 | 
|---|
 | 95 |     end;
 | 
|---|
 | 96 |     with frmOrdersReleaseEvent do
 | 
|---|
 | 97 |       cklstOrders.Caption := lblRelease.Caption;
 | 
|---|
 | 98 |     with  AnOrderList do for i := 0 to Count - 1 do
 | 
|---|
 | 99 |     begin
 | 
|---|
 | 100 |       AOrder := TOrder(Items[i]);
 | 
|---|
 | 101 |       idx := frmOrdersReleaseEvent.cklstOrders.Items.AddObject(AOrder.Text,AOrder);
 | 
|---|
 | 102 |       frmOrdersReleaseEvent.cklstOrders.Checked[idx] := True;
 | 
|---|
 | 103 |     end;
 | 
|---|
 | 104 |     frmOrdersReleaseEvent.ShowModal;
 | 
|---|
 | 105 |     if frmOrdersReleaseEvent.OKPressed then
 | 
|---|
 | 106 |     begin
 | 
|---|
 | 107 |       OrdersLst := TStringList.Create;
 | 
|---|
 | 108 |       for j := 0 to frmOrdersReleaseEvent.cklstOrders.Items.Count - 1 do
 | 
|---|
 | 109 |       begin
 | 
|---|
 | 110 |         if frmOrdersReleaseEvent.cklstOrders.Checked[j] then
 | 
|---|
 | 111 |           OrdersLst.Add(TOrder(frmOrdersReleaseEvent.cklstOrders.Items.Objects[j]).ID);
 | 
|---|
 | 112 |       end;
 | 
|---|
 | 113 |       StatusText('Releasing Orders to Service...');
 | 
|---|
 | 114 |       SendReleaseOrders(OrdersLst);
 | 
|---|
 | 115 |       LastCheckedPtEvt := '';
 | 
|---|
 | 116 |       with OrdersLst do if Count > 0 then for i := 0 to Count - 1 do
 | 
|---|
 | 117 |       begin
 | 
|---|
 | 118 |         if Pos('E', Piece(OrdersLst[i], U, 2)) > 0 then
 | 
|---|
 | 119 |         begin
 | 
|---|
 | 120 |           OrderText := FindOrderText(Piece(OrdersLst[i], U, 1));
 | 
|---|
 | 121 |           InfoBox(TX_SAVERR1 + Piece(OrdersLst[i], U, 4) + TX_SAVERR2 + OrderText,TC_SAVERR, MB_OK);
 | 
|---|
 | 122 |         end;
 | 
|---|
 | 123 |       end;
 | 
|---|
 | 124 |       PrintOrdersOnSignRelease(OrdersLst, NO_PROVIDER);
 | 
|---|
 | 125 | 
 | 
|---|
 | 126 |       with AnOrderList do for i := 0 to Count - 1 do with TOrder(Items[i]) do
 | 
|---|
 | 127 |       begin
 | 
|---|
 | 128 |         if EventPtr <> LastCheckedPtEvt then
 | 
|---|
 | 129 |         begin
 | 
|---|
 | 130 |           LastCheckedPtEvt := EventPtr;
 | 
|---|
 | 131 |           if CompleteEvt(EventPtr,EventName,False) then
 | 
|---|
 | 132 |             frmOrdersReleaseEvent.FComplete := True;
 | 
|---|
 | 133 |         end;
 | 
|---|
 | 134 |       end;
 | 
|---|
 | 135 |       StatusText('');
 | 
|---|
 | 136 |       ordersLst.Free;
 | 
|---|
 | 137 |       with AnOrderList do for i := 0 to Count - 1 do UnlockOrder(TOrder(Items[i]).ID);
 | 
|---|
 | 138 |       if frmOrdersReleaseEvent.FComplete then
 | 
|---|
 | 139 |       begin
 | 
|---|
 | 140 |         frmOrders.InitOrderSheetsForEvtDelay;
 | 
|---|
 | 141 |         frmOrders.ClickLstSheet;
 | 
|---|
 | 142 |       end;
 | 
|---|
 | 143 |       frmOrdersReleaseEvent.FComplete := False;
 | 
|---|
 | 144 |       Result := True;
 | 
|---|
 | 145 |     end else
 | 
|---|
 | 146 |       Result := False;
 | 
|---|
 | 147 |   Except
 | 
|---|
 | 148 |     on E: exception do
 | 
|---|
 | 149 |       Result := false;
 | 
|---|
 | 150 |   end;
 | 
|---|
 | 151 |   {finally
 | 
|---|
 | 152 |     with AnOrderList do for i := 0 to Count - 1 do UnlockOrder(TOrder(Items[i]).ID);
 | 
|---|
 | 153 |     if frmOrdersReleaseEvent.FComplete then
 | 
|---|
 | 154 |     begin
 | 
|---|
 | 155 |       frmOrders.InitOrderSheetsForEvtDelay;
 | 
|---|
 | 156 |       frmOrders.ClickLstSheet;
 | 
|---|
 | 157 |     end;
 | 
|---|
 | 158 |     frmOrdersReleaseEvent.FComplete := False;
 | 
|---|
 | 159 |   end;}
 | 
|---|
 | 160 | end;
 | 
|---|
 | 161 | 
 | 
|---|
 | 162 | procedure TfrmOrdersReleaseEvent.btnCancelClick(Sender: TObject);
 | 
|---|
 | 163 | begin
 | 
|---|
 | 164 |   Close;
 | 
|---|
 | 165 | end;
 | 
|---|
 | 166 | 
 | 
|---|
 | 167 | procedure TfrmOrdersReleaseEvent.FormCreate(Sender: TObject);
 | 
|---|
 | 168 | begin
 | 
|---|
 | 169 |   inherited;
 | 
|---|
 | 170 |   OKPressed := False;
 | 
|---|
 | 171 |   FLastHintItem := -1;
 | 
|---|
 | 172 |   FComplete  := False;
 | 
|---|
 | 173 |   FOldHintPause := Application.HintPause;
 | 
|---|
 | 174 |   FCurrTS := '';
 | 
|---|
 | 175 |   Application.HintPause := 250;
 | 
|---|
 | 176 |   FOldHintHidePause := Application.HintHidePause;
 | 
|---|
 | 177 |   Application.HintHidePause := 30000;
 | 
|---|
 | 178 | end;
 | 
|---|
 | 179 | 
 | 
|---|
 | 180 | procedure TfrmOrdersReleaseEvent.btnOKClick(Sender: TObject);
 | 
|---|
 | 181 | var
 | 
|---|
 | 182 |   i: integer;
 | 
|---|
 | 183 |   beSelected: boolean;
 | 
|---|
 | 184 | begin
 | 
|---|
 | 185 |   beSelected := False;
 | 
|---|
 | 186 |   for i := 0 to cklstOrders.Items.Count - 1 do
 | 
|---|
 | 187 |   begin
 | 
|---|
 | 188 |     if cklstOrders.Checked[i] then
 | 
|---|
 | 189 |     begin
 | 
|---|
 | 190 |       beSelected := True;
 | 
|---|
 | 191 |       Break;
 | 
|---|
 | 192 |     end;
 | 
|---|
 | 193 |   end;
 | 
|---|
 | 194 |   if not beSelected then
 | 
|---|
 | 195 |   begin
 | 
|---|
 | 196 |     ShowMessage('You have to select at least one order!');
 | 
|---|
 | 197 |     Exit;
 | 
|---|
 | 198 |   end;
 | 
|---|
 | 199 |   OKPressed := True;
 | 
|---|
 | 200 |   Close;
 | 
|---|
 | 201 | end;
 | 
|---|
 | 202 | 
 | 
|---|
 | 203 | procedure TfrmOrdersReleaseEvent.FormDestroy(Sender: TObject);
 | 
|---|
 | 204 | begin
 | 
|---|
 | 205 |   inherited;
 | 
|---|
 | 206 |   Application.HintPause := FOldHintPause;
 | 
|---|
 | 207 |   Application.HintHidePause := FOldHintHidePause;
 | 
|---|
 | 208 | end;
 | 
|---|
 | 209 | 
 | 
|---|
 | 210 | procedure TfrmOrdersReleaseEvent.cklstOrdersMeasureItem(
 | 
|---|
 | 211 |   Control: TWinControl; Index: Integer; var AHeight: Integer);
 | 
|---|
 | 212 | var
 | 
|---|
 | 213 |   x:string;
 | 
|---|
 | 214 |   ARect: TRect;
 | 
|---|
 | 215 | begin
 | 
|---|
 | 216 |   inherited;
 | 
|---|
 | 217 |   AHeight := MainFontHeight + 2;
 | 
|---|
 | 218 |   with cklstOrders do if Index < Items.Count then
 | 
|---|
 | 219 |   begin
 | 
|---|
 | 220 |     x := FilteredString(Items[Index]);
 | 
|---|
 | 221 |     ARect := ItemRect(Index);
 | 
|---|
 | 222 |     AHeight := WrappedTextHeightByFont( cklstOrders.Canvas, Font, x, ARect);
 | 
|---|
 | 223 |     if AHeight > 255 then AHeight := 255;
 | 
|---|
 | 224 |     if AHeight <  13 then AHeight := 13;
 | 
|---|
 | 225 |   end;
 | 
|---|
 | 226 | end;
 | 
|---|
 | 227 | 
 | 
|---|
 | 228 | procedure TfrmOrdersReleaseEvent.cklstOrdersDrawItem(Control: TWinControl;
 | 
|---|
 | 229 |   Index: Integer; Rect: TRect; State: TOwnerDrawState);
 | 
|---|
 | 230 | var
 | 
|---|
 | 231 |   x: string;
 | 
|---|
 | 232 |   ARect: TRect;
 | 
|---|
 | 233 | begin
 | 
|---|
 | 234 |   inherited;
 | 
|---|
 | 235 |   x := '';
 | 
|---|
 | 236 |   ARect := Rect;
 | 
|---|
 | 237 |   with cklstOrders do
 | 
|---|
 | 238 |   begin
 | 
|---|
 | 239 |     Canvas.FillRect(ARect);
 | 
|---|
 | 240 |     Canvas.Pen.Color := clSilver;
 | 
|---|
 | 241 |     Canvas.MoveTo(0, ARect.Bottom - 1);
 | 
|---|
 | 242 |     Canvas.LineTo(ARect.Right, ARect.Bottom - 1);
 | 
|---|
 | 243 |     if Index < Items.Count then
 | 
|---|
 | 244 |     begin
 | 
|---|
 | 245 |       X := FilteredString(Items[Index]);
 | 
|---|
 | 246 |       DrawText(Canvas.handle, PChar(x), Length(x), ARect, DT_LEFT or DT_NOPREFIX or DT_WORDBREAK);
 | 
|---|
 | 247 |     end;
 | 
|---|
 | 248 |   end;
 | 
|---|
 | 249 | end;
 | 
|---|
 | 250 | 
 | 
|---|
 | 251 | procedure TfrmOrdersReleaseEvent.cklstOrdersMouseMove(Sender: TObject;
 | 
|---|
 | 252 |   Shift: TShiftState; X, Y: Integer);
 | 
|---|
 | 253 | var
 | 
|---|
 | 254 |   Itm: integer;
 | 
|---|
 | 255 | begin
 | 
|---|
 | 256 |   inherited;
 | 
|---|
 | 257 |   Itm := cklstOrders.ItemAtPos(Point(X, Y), TRUE);
 | 
|---|
 | 258 |   if (Itm >= 0) then
 | 
|---|
 | 259 |   begin
 | 
|---|
 | 260 |     if (Itm <> FLastHintItem) then
 | 
|---|
 | 261 |     begin
 | 
|---|
 | 262 |       Application.CancelHint;
 | 
|---|
 | 263 |       cklstOrders.Hint := TrimRight(cklstOrders.Items[Itm]);
 | 
|---|
 | 264 |       FLastHintItem := Itm;
 | 
|---|
 | 265 |       Application.ActivateHint(Point(X, Y));
 | 
|---|
 | 266 |     end;
 | 
|---|
 | 267 |   end else
 | 
|---|
 | 268 |   begin
 | 
|---|
 | 269 |     cklstOrders.Hint := '';
 | 
|---|
 | 270 |     FLastHintItem := -1;
 | 
|---|
 | 271 |     Application.CancelHint;
 | 
|---|
 | 272 |   end;
 | 
|---|
 | 273 | end;
 | 
|---|
 | 274 | 
 | 
|---|
 | 275 | end.
 | 
|---|