317 lines
10 KiB
Plaintext
317 lines
10 KiB
Plaintext
unit fODActive;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
ORFn, uCore, StdCtrls, CheckLst, ComCtrls,ExtCtrls,rOrders,fOrders,uOrders,
|
|
fFrame,ORCtrls,fAutoSz;
|
|
|
|
type
|
|
TfrmODActive = class(TfrmAutoSz)
|
|
lblCaption: TLabel;
|
|
pnlClient: TPanel;
|
|
btnOK: TButton;
|
|
btnCancel: TButton;
|
|
hdControl: THeaderControl;
|
|
lstActiveOrders: TCaptionListBox;
|
|
procedure btnOKClick(Sender: TObject);
|
|
procedure btnCancelClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure lstActiveOrdersMeasureItem(Control: TWinControl;
|
|
Index: Integer; var AaHeight: Integer);
|
|
procedure lstActiveOrdersDrawItem(Control: TWinControl;
|
|
Index: Integer; TheeRect: TRect; State: TOwnerDrawState);
|
|
procedure hdControlSectionResize(HeaderControl: THeaderControl;
|
|
Section: THeaderSection);
|
|
private
|
|
{ Private declarations }
|
|
FOrderView: TOrderView;
|
|
FEvent: TOrderDelayEvent;
|
|
FAutoAc: boolean;
|
|
ActiveOrderList: TList;
|
|
FDefaultEventOrder: string;
|
|
function MeasureColumnHeight(TheOrderText: string; Index: Integer; Column: integer):integer;
|
|
procedure LoadActiveOrders;
|
|
procedure RetrieveVisibleOrders(AnIndex: Integer);
|
|
procedure RedrawActiveList;
|
|
public
|
|
{ Public declarations }
|
|
property Event: TOrderDelayEvent read FEvent write FEvent;
|
|
property OrderView: TOrderView read FOrderView write FOrderView;
|
|
property AutoAc: boolean read FAutoAc;
|
|
end;
|
|
|
|
procedure CopyActiveOrdersToEvent(AnOrderView: TOrderView; AnEvent: TOrderDelayEvent);
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
const
|
|
FM_DATE_ONLY = 7;
|
|
|
|
procedure CopyActiveOrdersToEvent(AnOrderView: TOrderView; AnEvent: TOrderDelayEvent);
|
|
var
|
|
frmODActive: TfrmODActive;
|
|
begin
|
|
frmODActive := TfrmODActive.Create(Application);
|
|
ResizeFormToFont(TForm(frmODActive));
|
|
frmODActive.Event := AnEvent;
|
|
frmODActive.FOrderView := AnOrderView;
|
|
frmODActive.FOrderView.Filter := 2;
|
|
if Length(frmOrders.EventDefaultOrder)>0 then
|
|
frmODActive.FDefaultEventOrder := frmOrders.EventDefaultOrder;
|
|
frmODActive.lblCaption.Caption := frmODActive.lblCaption.Caption + ' Delayed ' + AnEvent.EventName + ':';
|
|
frmODActive.LoadActiveOrders;
|
|
if frmODActive.lstActiveOrders.Items.Count < 1 then
|
|
frmODActive.Close
|
|
else
|
|
frmODActive.ShowModal;
|
|
end;
|
|
|
|
procedure TfrmODActive.btnOKClick(Sender: TObject);
|
|
const
|
|
TX_NOSEL = 'No orders are highlighted. Select the orders' + CRLF +
|
|
'you wish to take action on.';
|
|
TC_NOSEL = 'No Orders Selected';
|
|
var
|
|
i : integer;
|
|
SelectedList: TStringList;
|
|
TheVerify : boolean;
|
|
DoesDestEvtOccur:boolean;
|
|
begin
|
|
DoesDestEvtOccur := False;
|
|
uAutoAC := True;
|
|
frmFrame.UpdatePtInfoOnRefresh;
|
|
SelectedList := TStringList.Create;
|
|
try
|
|
TheVerify := False;
|
|
with lstActiveOrders do for i := 0 to Items.Count - 1 do
|
|
if Selected[i] then SelectedList.Add(TOrder(Items.Objects[i]).ID);
|
|
if ShowMsgOn(SelectedList.Count = 0, TX_NOSEL, TC_NOSEL) then Exit;
|
|
if (Event.EventType = 'D') or ((not Patient.InPatient) and (Event.EventType = 'T')) then
|
|
TransferOrders(SelectedList, Event, DoesDestEvtOccur, TheVerify)
|
|
else if (not Patient.Inpatient) and (Event.EventType = 'A') then
|
|
TransferOrders(SelectedList, Event, DoesDestEvtOccur, TheVerify)
|
|
else
|
|
CopyOrders(SelectedList, Event, DoesDestEvtOccur, TheVerify);
|
|
if ( frmOrders <> nil ) and DoesDestEvtOccur then
|
|
frmOrders.PtEvtCompleted(Event.PtEventIFN,Event.EventName);
|
|
finally
|
|
SelectedList.Free;
|
|
uAutoAC := False;
|
|
end;
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmODActive.btnCancelClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmODActive.FormCreate(Sender: TObject);
|
|
begin
|
|
ActiveOrderList := TList.Create;
|
|
FOrderView := TOrderView.Create;
|
|
FDefaultEventOrder := '';
|
|
end;
|
|
|
|
procedure TfrmODActive.LoadActiveOrders;
|
|
var
|
|
AnOrder: TOrder;
|
|
i: integer;
|
|
AnOrderPtEvtId,AnOrderEvtId: string;
|
|
begin
|
|
LoadOrdersAbbr(ActiveOrderList,FOrderView,'');
|
|
with ActiveOrderList do for i := Count - 1 downto 0 do
|
|
begin
|
|
AnOrder := TOrder(Items[i]);
|
|
AnOrderPtEvtID := GetOrderPtEvtID(AnOrder.ID);
|
|
if StrToIntDef(AnOrderPtEvtID,0)>0 then
|
|
begin
|
|
AnOrderEvtId := Piece(EventInfo(AnOrderPtEvtID),'^',2);
|
|
if AnsiCompareText(AnOrderEvtID,IntToStr(FEvent.TheParent.ParentIFN))=0 then
|
|
begin
|
|
ActiveOrderList.Delete(i);
|
|
continue;
|
|
end;
|
|
end;
|
|
if (AnOrder.ID = FDefaultEventOrder) or (IsDCedOrder(AnOrder.ID)) then
|
|
begin
|
|
ActiveOrderList.Delete(i);
|
|
end;
|
|
end;
|
|
SortOrders(ActiveOrderList, FOrderView.ByService, FOrderView.InvChrono);
|
|
lstActiveOrders.Items.Clear;
|
|
with ActiveOrderList do for i := 0 to Count - 1 do
|
|
begin
|
|
AnOrder := TOrder(Items[i]);
|
|
lstActiveOrders.Items.AddObject(AnOrder.ID,AnOrder);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmODActive.FormDestroy(Sender: TObject);
|
|
begin
|
|
ClearOrders(ActiveOrderList);
|
|
ActiveOrderList.Free;
|
|
lstActiveOrders.Clear;
|
|
if FOrderView <> nil then FOrderView := nil ;
|
|
end;
|
|
|
|
procedure TfrmODActive.lstActiveOrdersMeasureItem(Control: TWinControl;
|
|
Index: Integer; var AaHeight: Integer);
|
|
var
|
|
x,y: string;
|
|
TextHeight, NewHeight, DateHeight: Integer;
|
|
TheOrder: TOrder;
|
|
begin
|
|
inherited;
|
|
NewHeight := AaHeight;
|
|
with lstActiveOrders do if Index < Items.Count then
|
|
begin
|
|
TheOrder := TOrder(ActiveOrderList.Items[index]);
|
|
if TheOrder <> nil then with TheOrder do
|
|
begin
|
|
if not TheOrder.Retrieved then RetrieveVisibleOrders(Index);
|
|
{measure the height of order text}
|
|
x := Text;
|
|
TextHeight := MeasureColumnHeight(x,Index,1);
|
|
|
|
{measure the height of Start/Stop date time}
|
|
x := FormatFMDateTimeStr('mm/dd/yy hh:nn', StartTime);
|
|
if IsFMDateTime(StartTime) and (Length(StartTime) = FM_DATE_ONLY) then x := Piece(x, #32, 1);
|
|
if Length(x) > 0 then x := 'Start: ' + x;
|
|
y := FormatFMDateTimeStr('mm/dd/yy hh:nn', StopTime);
|
|
if IsFMDateTime(StopTime) and (Length(StopTime) = FM_DATE_ONLY) then y := Piece(y, #32, 1);
|
|
if Length(y) > 0 then x := x + CRLF + 'Stop: ' + y;
|
|
DateHeight := MeasureColumnHeight(x,Index,2);
|
|
NewHeight := HigherOf(TextHeight, DateHeight);
|
|
end;
|
|
end;
|
|
AaHeight := NewHeight;
|
|
end;
|
|
|
|
procedure TfrmODActive.lstActiveOrdersDrawItem(Control: TWinControl;
|
|
Index: Integer; TheeRect: TRect; State: TOwnerDrawState);
|
|
var
|
|
x, y: string;
|
|
ARect: TRect;
|
|
AnOrder: TOrder;
|
|
i,RightSide: integer;
|
|
SaveColor: TColor;
|
|
begin
|
|
inherited;
|
|
with lstActiveOrders do
|
|
begin
|
|
ARect := TheeRect;
|
|
Canvas.FillRect(ARect);
|
|
Canvas.Pen.Color := clSilver;
|
|
Canvas.MoveTo(ARect.Left, ARect.Bottom - 1);
|
|
Canvas.LineTo(ARect.Right, ARect.Bottom - 1);
|
|
RightSide := -2;
|
|
for i := 0 to 2 do
|
|
begin
|
|
RightSide := RightSide + hdControl.Sections[i].Width;
|
|
Canvas.MoveTo(RightSide, ARect.Bottom - 1);
|
|
Canvas.LineTo(RightSide, ARect.Top);
|
|
end;
|
|
if Index < Items.Count then
|
|
begin
|
|
AnOrder := TOrder(Items.Objects[Index]);
|
|
if AnOrder <> nil then with AnOrder do for i := 0 to 3 do
|
|
begin
|
|
if i > 0 then ARect.Left := ARect.Right + 2 else ARect.Left := 2;
|
|
ARect.Right := ARect.Left + hdControl.Sections[i].Width - 6;
|
|
SaveColor := Canvas.Brush.Color;
|
|
if i = 0 then
|
|
begin
|
|
x := DGroupName;
|
|
if (Index > 0) and (x = TOrder(Items.Objects[Index - 1]).DGroupName) then x := '';
|
|
end;
|
|
if i = 1 then x := Text;
|
|
if i = 2 then
|
|
begin
|
|
x := FormatFMDateTimeStr('mm/dd/yy hh:nn', StartTime);
|
|
if IsFMDateTime(StartTime) and (Length(StartTime) = FM_DATE_ONLY) then x := Piece(x, #32, 1);
|
|
if Length(x) > 0 then x := 'Start: ' + x;
|
|
y := FormatFMDateTimeStr('mm/dd/yy hh:nn', StopTime);
|
|
if IsFMDateTime(StopTime) and (Length(StopTime) = FM_DATE_ONLY) then y := Piece(y, #32, 1);
|
|
if Length(y) > 0 then x := x + CRLF + 'Stop: ' + y;
|
|
end;
|
|
if i = 3 then x := NameOfStatus(Status);
|
|
if (i = 1) or (i = 2) then
|
|
DrawText(Canvas.Handle, PChar(x), Length(x), ARect, DT_LEFT or DT_NOPREFIX or DT_WORDBREAK)
|
|
else
|
|
DrawText(Canvas.Handle, PChar(x), Length(x), ARect, DT_LEFT or DT_NOPREFIX );
|
|
Canvas.Brush.Color := SaveColor;
|
|
ARect.Right := ARect.Right + 4;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmODActive.RetrieveVisibleOrders(AnIndex: Integer);
|
|
var
|
|
i: Integer;
|
|
tmplst: TList;
|
|
AnOrder: TOrder;
|
|
begin
|
|
tmplst := TList.Create;
|
|
for i := AnIndex to AnIndex + 100 do
|
|
begin
|
|
if i >= ActiveOrderList.Count then break;
|
|
AnOrder := TOrder(ActiveOrderList.Items[i]);
|
|
if not AnOrder.Retrieved then tmplst.Add(AnOrder);
|
|
end;
|
|
RetrieveOrderFields(tmplst, 2, -1);
|
|
tmplst.Free;
|
|
end;
|
|
|
|
procedure TfrmODActive.hdControlSectionResize(
|
|
HeaderControl: THeaderControl; Section: THeaderSection);
|
|
begin
|
|
inherited;
|
|
RedrawSuspend(Self.Handle);
|
|
RedrawActiveList;
|
|
RedrawActivate(Self.Handle);
|
|
lstActiveOrders.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmODActive.RedrawActiveList;
|
|
var
|
|
i, SaveTop: Integer;
|
|
AnOrder: TOrder;
|
|
begin
|
|
with lstActiveOrders do
|
|
begin
|
|
RedrawSuspend(Handle);
|
|
SaveTop := TopIndex;
|
|
Clear;
|
|
for i := 0 to ActiveOrderList.Count - 1 do
|
|
begin
|
|
AnOrder := TOrder(ActiveOrderList.Items[i]);
|
|
if (AnOrder.ID = FDefaultEventOrder) or (IsDCedOrder(AnOrder.ID)) then
|
|
Continue;
|
|
Items.AddObject(AnOrder.ID, AnOrder);
|
|
end;
|
|
TopIndex := SaveTop;
|
|
RedrawActivate(Handle);
|
|
end;
|
|
end;
|
|
|
|
function TfrmODActive.MeasureColumnHeight(TheOrderText: string; Index,
|
|
Column: integer): integer;
|
|
var
|
|
ARect: TRect;
|
|
begin
|
|
ARect.Left := 0;
|
|
ARect.Top := 0;
|
|
ARect.Bottom := 0;
|
|
ARect.Right := hdControl.Sections[Column].Width -6;
|
|
Result := WrappedTextHeightByFont(lstActiveOrders.Canvas,lstActiveOrders.Font,TheOrderText,ARect);
|
|
end;
|
|
|
|
end.
|