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.
|
---|