[459] | 1 | unit fODActive;
|
---|
| 2 |
|
---|
| 3 | interface
|
---|
| 4 |
|
---|
| 5 | uses
|
---|
| 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
---|
| 7 | ORFn, uCore, StdCtrls, CheckLst, ComCtrls,ExtCtrls,rOrders,fOrders,uOrders,
|
---|
| 8 | fFrame,ORCtrls,fAutoSz;
|
---|
| 9 |
|
---|
| 10 | type
|
---|
| 11 | TfrmODActive = class(TfrmAutoSz)
|
---|
| 12 | lblCaption: TLabel;
|
---|
| 13 | pnlClient: TPanel;
|
---|
| 14 | btnOK: TButton;
|
---|
| 15 | btnCancel: TButton;
|
---|
| 16 | hdControl: THeaderControl;
|
---|
| 17 | lstActiveOrders: TCaptionListBox;
|
---|
| 18 | procedure btnOKClick(Sender: TObject);
|
---|
| 19 | procedure btnCancelClick(Sender: TObject);
|
---|
| 20 | procedure FormCreate(Sender: TObject);
|
---|
| 21 | procedure FormDestroy(Sender: TObject);
|
---|
| 22 | procedure lstActiveOrdersMeasureItem(Control: TWinControl;
|
---|
| 23 | Index: Integer; var AaHeight: Integer);
|
---|
| 24 | procedure lstActiveOrdersDrawItem(Control: TWinControl;
|
---|
| 25 | Index: Integer; TheeRect: TRect; State: TOwnerDrawState);
|
---|
| 26 | procedure hdControlSectionResize(HeaderControl: THeaderControl;
|
---|
| 27 | Section: THeaderSection);
|
---|
| 28 | private
|
---|
| 29 | { Private declarations }
|
---|
| 30 | FOrderView: TOrderView;
|
---|
| 31 | FEvent: TOrderDelayEvent;
|
---|
| 32 | FAutoAc: boolean;
|
---|
| 33 | ActiveOrderList: TList;
|
---|
| 34 | FDefaultEventOrder: string;
|
---|
| 35 | function MeasureColumnHeight(TheOrderText: string; Index: Integer; Column: integer):integer;
|
---|
| 36 | procedure LoadActiveOrders;
|
---|
| 37 | procedure RetrieveVisibleOrders(AnIndex: Integer);
|
---|
| 38 | procedure RedrawActiveList;
|
---|
| 39 | public
|
---|
| 40 | { Public declarations }
|
---|
| 41 | property Event: TOrderDelayEvent read FEvent write FEvent;
|
---|
| 42 | property OrderView: TOrderView read FOrderView write FOrderView;
|
---|
| 43 | property AutoAc: boolean read FAutoAc;
|
---|
| 44 | end;
|
---|
| 45 |
|
---|
| 46 | procedure CopyActiveOrdersToEvent(AnOrderView: TOrderView; AnEvent: TOrderDelayEvent);
|
---|
| 47 |
|
---|
| 48 | implementation
|
---|
| 49 |
|
---|
| 50 | {$R *.DFM}
|
---|
| 51 |
|
---|
| 52 | const
|
---|
| 53 | FM_DATE_ONLY = 7;
|
---|
| 54 |
|
---|
| 55 | procedure CopyActiveOrdersToEvent(AnOrderView: TOrderView; AnEvent: TOrderDelayEvent);
|
---|
| 56 | var
|
---|
| 57 | frmODActive: TfrmODActive;
|
---|
| 58 | begin
|
---|
| 59 | frmODActive := TfrmODActive.Create(Application);
|
---|
| 60 | ResizeFormToFont(TForm(frmODActive));
|
---|
| 61 | frmODActive.Event := AnEvent;
|
---|
| 62 | frmODActive.FOrderView := AnOrderView;
|
---|
| 63 | frmODActive.FOrderView.Filter := 2;
|
---|
| 64 | if Length(frmOrders.EventDefaultOrder)>0 then
|
---|
| 65 | frmODActive.FDefaultEventOrder := frmOrders.EventDefaultOrder;
|
---|
| 66 | frmODActive.lblCaption.Caption := frmODActive.lblCaption.Caption + ' Delayed ' + AnEvent.EventName + ':';
|
---|
| 67 | frmODActive.LoadActiveOrders;
|
---|
| 68 | if frmODActive.lstActiveOrders.Items.Count < 1 then
|
---|
| 69 | frmODActive.Close
|
---|
| 70 | else
|
---|
| 71 | frmODActive.ShowModal;
|
---|
| 72 | end;
|
---|
| 73 |
|
---|
| 74 | procedure TfrmODActive.btnOKClick(Sender: TObject);
|
---|
| 75 | const
|
---|
| 76 | TX_NOSEL = 'No orders are highlighted. Select the orders' + CRLF +
|
---|
| 77 | 'you wish to take action on.';
|
---|
| 78 | TC_NOSEL = 'No Orders Selected';
|
---|
| 79 | var
|
---|
| 80 | i : integer;
|
---|
| 81 | SelectedList: TStringList;
|
---|
| 82 | TheVerify : boolean;
|
---|
| 83 | DoesDestEvtOccur:boolean;
|
---|
| 84 | begin
|
---|
| 85 | DoesDestEvtOccur := False;
|
---|
| 86 | uAutoAC := True;
|
---|
| 87 | frmFrame.UpdatePtInfoOnRefresh;
|
---|
| 88 | SelectedList := TStringList.Create;
|
---|
| 89 | try
|
---|
| 90 | TheVerify := False;
|
---|
| 91 | with lstActiveOrders do for i := 0 to Items.Count - 1 do
|
---|
| 92 | if Selected[i] then SelectedList.Add(TOrder(Items.Objects[i]).ID);
|
---|
| 93 | if ShowMsgOn(SelectedList.Count = 0, TX_NOSEL, TC_NOSEL) then Exit;
|
---|
| 94 | if (Event.EventType = 'D') or ((not Patient.InPatient) and (Event.EventType = 'T')) then
|
---|
| 95 | TransferOrders(SelectedList, Event, DoesDestEvtOccur, TheVerify)
|
---|
| 96 | else if (not Patient.Inpatient) and (Event.EventType = 'A') then
|
---|
| 97 | TransferOrders(SelectedList, Event, DoesDestEvtOccur, TheVerify)
|
---|
| 98 | else
|
---|
| 99 | CopyOrders(SelectedList, Event, DoesDestEvtOccur, TheVerify);
|
---|
| 100 | if ( frmOrders <> nil ) and DoesDestEvtOccur then
|
---|
| 101 | frmOrders.PtEvtCompleted(Event.PtEventIFN,Event.EventName);
|
---|
| 102 | finally
|
---|
| 103 | SelectedList.Free;
|
---|
| 104 | uAutoAC := False;
|
---|
| 105 | end;
|
---|
| 106 | Close;
|
---|
| 107 | end;
|
---|
| 108 |
|
---|
| 109 | procedure TfrmODActive.btnCancelClick(Sender: TObject);
|
---|
| 110 | begin
|
---|
| 111 | Close;
|
---|
| 112 | end;
|
---|
| 113 |
|
---|
| 114 | procedure TfrmODActive.FormCreate(Sender: TObject);
|
---|
| 115 | begin
|
---|
| 116 | ActiveOrderList := TList.Create;
|
---|
| 117 | FOrderView := TOrderView.Create;
|
---|
| 118 | FDefaultEventOrder := '';
|
---|
| 119 | end;
|
---|
| 120 |
|
---|
| 121 | procedure TfrmODActive.LoadActiveOrders;
|
---|
| 122 | var
|
---|
| 123 | AnOrder: TOrder;
|
---|
| 124 | i: integer;
|
---|
| 125 | AnOrderPtEvtId,AnOrderEvtId: string;
|
---|
| 126 | begin
|
---|
| 127 | LoadOrdersAbbr(ActiveOrderList,FOrderView,'');
|
---|
| 128 | with ActiveOrderList do for i := Count - 1 downto 0 do
|
---|
| 129 | begin
|
---|
| 130 | AnOrder := TOrder(Items[i]);
|
---|
| 131 | AnOrderPtEvtID := GetOrderPtEvtID(AnOrder.ID);
|
---|
| 132 | if StrToIntDef(AnOrderPtEvtID,0)>0 then
|
---|
| 133 | begin
|
---|
| 134 | AnOrderEvtId := Piece(EventInfo(AnOrderPtEvtID),'^',2);
|
---|
| 135 | if AnsiCompareText(AnOrderEvtID,IntToStr(FEvent.TheParent.ParentIFN))=0 then
|
---|
| 136 | begin
|
---|
| 137 | ActiveOrderList.Delete(i);
|
---|
| 138 | continue;
|
---|
| 139 | end;
|
---|
| 140 | end;
|
---|
| 141 | if (AnOrder.ID = FDefaultEventOrder) or (IsDCedOrder(AnOrder.ID)) then
|
---|
| 142 | begin
|
---|
| 143 | ActiveOrderList.Delete(i);
|
---|
| 144 | end;
|
---|
| 145 | end;
|
---|
| 146 | SortOrders(ActiveOrderList, FOrderView.ByService, FOrderView.InvChrono);
|
---|
| 147 | lstActiveOrders.Items.Clear;
|
---|
| 148 | with ActiveOrderList do for i := 0 to Count - 1 do
|
---|
| 149 | begin
|
---|
| 150 | AnOrder := TOrder(Items[i]);
|
---|
| 151 | lstActiveOrders.Items.AddObject(AnOrder.ID,AnOrder);
|
---|
| 152 | end;
|
---|
| 153 | end;
|
---|
| 154 |
|
---|
| 155 | procedure TfrmODActive.FormDestroy(Sender: TObject);
|
---|
| 156 | begin
|
---|
| 157 | ClearOrders(ActiveOrderList);
|
---|
| 158 | ActiveOrderList.Free;
|
---|
| 159 | lstActiveOrders.Clear;
|
---|
| 160 | if FOrderView <> nil then FOrderView := nil ;
|
---|
| 161 | end;
|
---|
| 162 |
|
---|
| 163 | procedure TfrmODActive.lstActiveOrdersMeasureItem(Control: TWinControl;
|
---|
| 164 | Index: Integer; var AaHeight: Integer);
|
---|
| 165 | var
|
---|
| 166 | x,y: string;
|
---|
| 167 | TextHeight, NewHeight, DateHeight: Integer;
|
---|
| 168 | TheOrder: TOrder;
|
---|
| 169 | begin
|
---|
| 170 | inherited;
|
---|
| 171 | NewHeight := AaHeight;
|
---|
| 172 | with lstActiveOrders do if Index < Items.Count then
|
---|
| 173 | begin
|
---|
| 174 | TheOrder := TOrder(ActiveOrderList.Items[index]);
|
---|
| 175 | if TheOrder <> nil then with TheOrder do
|
---|
| 176 | begin
|
---|
| 177 | if not TheOrder.Retrieved then RetrieveVisibleOrders(Index);
|
---|
| 178 | {measure the height of order text}
|
---|
| 179 | x := Text;
|
---|
| 180 | TextHeight := MeasureColumnHeight(x,Index,1);
|
---|
| 181 |
|
---|
| 182 | {measure the height of Start/Stop date time}
|
---|
| 183 | x := FormatFMDateTimeStr('mm/dd/yy hh:nn', StartTime);
|
---|
| 184 | if IsFMDateTime(StartTime) and (Length(StartTime) = FM_DATE_ONLY) then x := Piece(x, #32, 1);
|
---|
| 185 | if Length(x) > 0 then x := 'Start: ' + x;
|
---|
| 186 | y := FormatFMDateTimeStr('mm/dd/yy hh:nn', StopTime);
|
---|
| 187 | if IsFMDateTime(StopTime) and (Length(StopTime) = FM_DATE_ONLY) then y := Piece(y, #32, 1);
|
---|
| 188 | if Length(y) > 0 then x := x + CRLF + 'Stop: ' + y;
|
---|
| 189 | DateHeight := MeasureColumnHeight(x,Index,2);
|
---|
| 190 | NewHeight := HigherOf(TextHeight, DateHeight);
|
---|
| 191 | end;
|
---|
| 192 | end;
|
---|
| 193 | AaHeight := NewHeight;
|
---|
| 194 | end;
|
---|
| 195 |
|
---|
| 196 | procedure TfrmODActive.lstActiveOrdersDrawItem(Control: TWinControl;
|
---|
| 197 | Index: Integer; TheeRect: TRect; State: TOwnerDrawState);
|
---|
| 198 | var
|
---|
| 199 | x, y: string;
|
---|
| 200 | ARect: TRect;
|
---|
| 201 | AnOrder: TOrder;
|
---|
| 202 | i,RightSide: integer;
|
---|
| 203 | SaveColor: TColor;
|
---|
| 204 | begin
|
---|
| 205 | inherited;
|
---|
| 206 | with lstActiveOrders do
|
---|
| 207 | begin
|
---|
| 208 | ARect := TheeRect;
|
---|
| 209 | Canvas.FillRect(ARect);
|
---|
| 210 | Canvas.Pen.Color := clSilver;
|
---|
| 211 | Canvas.MoveTo(ARect.Left, ARect.Bottom - 1);
|
---|
| 212 | Canvas.LineTo(ARect.Right, ARect.Bottom - 1);
|
---|
| 213 | RightSide := -2;
|
---|
| 214 | for i := 0 to 2 do
|
---|
| 215 | begin
|
---|
| 216 | RightSide := RightSide + hdControl.Sections[i].Width;
|
---|
| 217 | Canvas.MoveTo(RightSide, ARect.Bottom - 1);
|
---|
| 218 | Canvas.LineTo(RightSide, ARect.Top);
|
---|
| 219 | end;
|
---|
| 220 | if Index < Items.Count then
|
---|
| 221 | begin
|
---|
| 222 | AnOrder := TOrder(Items.Objects[Index]);
|
---|
| 223 | if AnOrder <> nil then with AnOrder do for i := 0 to 3 do
|
---|
| 224 | begin
|
---|
| 225 | if i > 0 then ARect.Left := ARect.Right + 2 else ARect.Left := 2;
|
---|
| 226 | ARect.Right := ARect.Left + hdControl.Sections[i].Width - 6;
|
---|
| 227 | SaveColor := Canvas.Brush.Color;
|
---|
| 228 | if i = 0 then
|
---|
| 229 | begin
|
---|
| 230 | x := DGroupName;
|
---|
| 231 | if (Index > 0) and (x = TOrder(Items.Objects[Index - 1]).DGroupName) then x := '';
|
---|
| 232 | end;
|
---|
| 233 | if i = 1 then x := Text;
|
---|
| 234 | if i = 2 then
|
---|
| 235 | begin
|
---|
| 236 | x := FormatFMDateTimeStr('mm/dd/yy hh:nn', StartTime);
|
---|
| 237 | if IsFMDateTime(StartTime) and (Length(StartTime) = FM_DATE_ONLY) then x := Piece(x, #32, 1);
|
---|
| 238 | if Length(x) > 0 then x := 'Start: ' + x;
|
---|
| 239 | y := FormatFMDateTimeStr('mm/dd/yy hh:nn', StopTime);
|
---|
| 240 | if IsFMDateTime(StopTime) and (Length(StopTime) = FM_DATE_ONLY) then y := Piece(y, #32, 1);
|
---|
| 241 | if Length(y) > 0 then x := x + CRLF + 'Stop: ' + y;
|
---|
| 242 | end;
|
---|
| 243 | if i = 3 then x := NameOfStatus(Status);
|
---|
| 244 | if (i = 1) or (i = 2) then
|
---|
| 245 | DrawText(Canvas.Handle, PChar(x), Length(x), ARect, DT_LEFT or DT_NOPREFIX or DT_WORDBREAK)
|
---|
| 246 | else
|
---|
| 247 | DrawText(Canvas.Handle, PChar(x), Length(x), ARect, DT_LEFT or DT_NOPREFIX );
|
---|
| 248 | Canvas.Brush.Color := SaveColor;
|
---|
| 249 | ARect.Right := ARect.Right + 4;
|
---|
| 250 | end;
|
---|
| 251 | end;
|
---|
| 252 | end;
|
---|
| 253 | end;
|
---|
| 254 |
|
---|
| 255 | procedure TfrmODActive.RetrieveVisibleOrders(AnIndex: Integer);
|
---|
| 256 | var
|
---|
| 257 | i: Integer;
|
---|
| 258 | tmplst: TList;
|
---|
| 259 | AnOrder: TOrder;
|
---|
| 260 | begin
|
---|
| 261 | tmplst := TList.Create;
|
---|
| 262 | for i := AnIndex to AnIndex + 100 do
|
---|
| 263 | begin
|
---|
| 264 | if i >= ActiveOrderList.Count then break;
|
---|
| 265 | AnOrder := TOrder(ActiveOrderList.Items[i]);
|
---|
| 266 | if not AnOrder.Retrieved then tmplst.Add(AnOrder);
|
---|
| 267 | end;
|
---|
| 268 | RetrieveOrderFields(tmplst, 2, -1);
|
---|
| 269 | tmplst.Free;
|
---|
| 270 | end;
|
---|
| 271 |
|
---|
| 272 | procedure TfrmODActive.hdControlSectionResize(
|
---|
| 273 | HeaderControl: THeaderControl; Section: THeaderSection);
|
---|
| 274 | begin
|
---|
| 275 | inherited;
|
---|
| 276 | RedrawSuspend(Self.Handle);
|
---|
| 277 | RedrawActiveList;
|
---|
| 278 | RedrawActivate(Self.Handle);
|
---|
| 279 | lstActiveOrders.Invalidate;
|
---|
| 280 | end;
|
---|
| 281 |
|
---|
| 282 | procedure TfrmODActive.RedrawActiveList;
|
---|
| 283 | var
|
---|
| 284 | i, SaveTop: Integer;
|
---|
| 285 | AnOrder: TOrder;
|
---|
| 286 | begin
|
---|
| 287 | with lstActiveOrders do
|
---|
| 288 | begin
|
---|
| 289 | RedrawSuspend(Handle);
|
---|
| 290 | SaveTop := TopIndex;
|
---|
| 291 | Clear;
|
---|
| 292 | for i := 0 to ActiveOrderList.Count - 1 do
|
---|
| 293 | begin
|
---|
| 294 | AnOrder := TOrder(ActiveOrderList.Items[i]);
|
---|
| 295 | if (AnOrder.ID = FDefaultEventOrder) or (IsDCedOrder(AnOrder.ID)) then
|
---|
| 296 | Continue;
|
---|
| 297 | Items.AddObject(AnOrder.ID, AnOrder);
|
---|
| 298 | end;
|
---|
| 299 | TopIndex := SaveTop;
|
---|
| 300 | RedrawActivate(Handle);
|
---|
| 301 | end;
|
---|
| 302 | end;
|
---|
| 303 |
|
---|
| 304 | function TfrmODActive.MeasureColumnHeight(TheOrderText: string; Index,
|
---|
| 305 | Column: integer): integer;
|
---|
| 306 | var
|
---|
| 307 | ARect: TRect;
|
---|
| 308 | begin
|
---|
| 309 | ARect.Left := 0;
|
---|
| 310 | ARect.Top := 0;
|
---|
| 311 | ARect.Bottom := 0;
|
---|
| 312 | ARect.Right := hdControl.Sections[Column].Width -6;
|
---|
| 313 | Result := WrappedTextHeightByFont(lstActiveOrders.Canvas,lstActiveOrders.Font,TheOrderText,ARect);
|
---|
| 314 | end;
|
---|
| 315 |
|
---|
| 316 | end.
|
---|