VistA-cprs/CPRS-Chart/Orders/fOrderVw.pas

326 lines
8.7 KiB
Plaintext

unit fOrderVw;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
fAutoSz, StdCtrls, ComCtrls, ExtCtrls, ORCtrls, ORFn, rOrders, ORDtTm;
type
TfrmOrderView = class(TfrmAutoSz)
pnlView: TPanel;
lblView: TLabel;
Panel1: TPanel;
Panel2: TPanel;
lblFilter: TLabel;
trFilters: TCaptionTreeView;
Panel3: TPanel;
treService: TCaptionTreeView;
lblService: TLabel;
Panel4: TPanel;
chkDateRange: TCheckBox;
GroupBox1: TGroupBox;
lblFrom: TLabel;
lblThru: TLabel;
calFrom: TORDateBox;
calThru: TORDateBox;
chkInvChrono: TCheckBox;
chkByService: TCheckBox;
cmdOK: TButton;
cmdCancel: TButton;
Splitter1: TSplitter;
procedure FormCreate(Sender: TObject);
procedure treServiceClick(Sender: TObject);
procedure cmdCancelClick(Sender: TObject);
procedure cmdOKClick(Sender: TObject);
procedure chkDateRangeClick(Sender: TObject);
procedure calChange(Sender: TObject);
procedure trFiltersClick(Sender: TObject);
procedure Splitter1Moved(Sender: TObject);
private
FChanged: Boolean;
FDGroup: Integer;
FDGroupName: string;
FFilter: Integer;
FFilterName: string;
FInvChrono: Boolean;
FByService: Boolean;
FTimeFrom: TFMDateTime;
FTimeThru: TFMDateTime;
procedure LoadDGroups(const Parent: string; Node: TTreeNode);
procedure LoadFilters(const Parent: string; Node: TTreeNode);
procedure SynchViewData;
procedure UpdateViewName;
public
{ Public declarations }
end;
procedure SelectOrderView(var OrderView: TOrderView);
implementation
{$R *.DFM}
const
TX_DATES = 'To list orders for a specific date range, both From & Thru dates are required.';
TC_DATES = 'Error in Date Range';
var
uDGroupList: TStringList;
uFilterList: TStringList;
procedure SelectOrderView(var OrderView: TOrderView);
var
frmOrderView: TfrmOrderView;
begin
frmOrderView := TfrmOrderView.Create(Application);
try
ResizeFormToFont(TForm(frmOrderView));
with frmOrderView do
begin
FDGroup := OrderView.DGroup;
FFilter := OrderView.Filter;
FInvChrono := OrderView.InvChrono;
FByService := OrderView.ByService;
FTimeFrom := OrderView.TimeFrom;
FTimeThru := OrderView.TimeThru;
SynchViewData;
ShowModal;
if FChanged then
begin
OrderView.Changed := FChanged;
OrderView.DGroup := FDGroup;
OrderView.Filter := FFilter;
OrderView.InvChrono := FInvChrono;
OrderView.ByService := FByService;
OrderView.TimeFrom := FTimeFrom;
OrderView.TimeThru := FTimeThru;
OrderView.CtxtTime := 0; // set by RefreshOrderList
OrderView.TextView := 0; // set by RefreshOrderList
OrderView.ViewName := lblView.Caption;
OrderView.EventDelay.EventType := 'C';
OrderView.EventDelay.Specialty := 0; // treating specialty only for event delayed
OrderView.EventDelay.Effective := 0; // effective date only for discharge orders
end
else OrderView.Changed := False;
end; {with}
finally
frmOrderView.Release;
end;
end;
procedure TfrmOrderView.FormCreate(Sender: TObject);
begin
inherited;
FChanged := False;
uDGroupList := TStringList.Create;
uFilterList := TStringList.Create;
try
ListDGroupAll(uDGroupList);
LoadDGroups('0', nil);
ListOrderFiltersAll(uFilterList);
LoadFilters('0', nil);
finally
uDGroupList.Free;
uDGroupList := nil;
uFilterList.Free;
uFilterList := nil;
end;
end;
procedure TfrmOrderView.UpdateViewName;
const
FMT_TIME = 'mm/dd/yy';
var
DateText, FilterText: string;
begin
if chkDateRange.Checked
then DateText := ' (' + FormatFMDateTime(FMT_TIME, calFrom.FMDateTime) +
' thru ' + FormatFMDateTIme(FMT_TIME, calThru.FMDateTime) + ')'
else DateText := '';
if FFilter in [6, 8, 9, 10, 19, 20]
then FilterText := FFilterName
else FilterText := FFilterName + ' Orders';
lblView.Caption := FilterText + ' - ' + FDGroupName + DateText;
end;
procedure TfrmOrderView.SynchViewData;
var
i: Integer;
begin
with treService.Items do for i := 0 to Count - 1 do if Integer(Item[i].Data) = FDGroup then
begin
Item[i].Expanded := True;
Item[i].Selected := True;
FDGroupName := Item[i].Text;
Break;
end;
with trFilters.Items do for i := 0 to Count - 1 do if Integer(Item[i].Data) = FFilter then
begin
Item[i].Expanded := True;
Item[i].Selected := True;
FDGroupName := Item[i].Text;
Break;
end;
if (FTimeFrom > 0) or (FTimeThru > 0) then
begin
calFrom.FMDateTime := FTimeFrom;
calThru.FMDateTime := FTimeThru;
chkDateRange.Checked := True;
chkDateRangeClick(Self);
end;
UpdateViewName;
chkByService.Checked := FByService;
chkInvChrono.Checked := FInvChrono;
end;
procedure TfrmOrderView.LoadDGroups(const Parent: string; Node: TTreeNode);
var
MyID, MyParent, Name: string;
i, IEN: Integer;
ChildNode: TTreeNode;
HasChildren: Boolean;
begin
with uDGroupList do for i := 0 to Count - 1 do
begin
MyParent := Piece(Strings[i], U, 3);
if MyParent = Parent then
begin
MyID := Piece(Strings[i], U, 1);
IEN := StrToIntDef(MyID, 0);
Name := Piece(Strings[i], U, 2);
HasChildren := Piece(Strings[i], U, 4) = '+';
ChildNode := treService.Items.AddChildObject(Node, Name, Pointer(IEN));
if HasChildren then LoadDGroups(MyID, ChildNode);
end;
end;
end;
procedure TfrmOrderView.LoadFilters(const Parent: string; Node: TTreeNode);
var
MyID, MyParent, Name: string;
i, IEN: Integer;
ChildNode: TTreeNode;
HasChildren: Boolean;
begin
with uFilterList do for i := 0 to Count - 1 do
begin
MyParent := Piece(Strings[i], U, 3);
if MyParent = Parent then
begin
MyID := Piece(Strings[i], U, 1);
IEN := StrToIntDef(MyID, 0);
Name := Piece(Strings[i], U, 2);
HasChildren := Piece(Strings[i], U, 4) = '+';
ChildNode := trFilters.Items.AddChildObject(Node, Name, Pointer(IEN));
if HasChildren then LoadFilters(MyID, ChildNode);
end;
end;
end;
procedure TfrmOrderView.treServiceClick(Sender: TObject);
var
Node: TTreeNode;
begin
inherited;
Node := treService.Selected;
if Node <> nil then
begin
FDGroup := Integer(Node.Data);
FDGroupName := Node.Text;
UpdateViewName;
end;
end;
procedure TfrmOrderView.chkDateRangeClick(Sender: TObject);
begin
inherited;
lblThru.Enabled := chkDateRange.Checked;
calThru.Enabled := chkDateRange.Checked;
lblFrom.Enabled := chkDateRange.Checked;
calFrom.Enabled := chkDateRange.Checked;
if chkDateRange.Checked then
begin
calFrom.Color := clWindow;
calThru.Color := clWindow;
if calThru.FMDateTime = 0 then calThru.Text := 'NOW';
end else
begin
calFrom.FMDateTime := 0;
calThru.FMDateTime := 0;
calFrom.Color := clBtnFace;
calThru.Color := clBtnFace;
end;
UpdateViewName;
end;
procedure TfrmOrderView.calChange(Sender: TObject);
begin
inherited;
UpdateViewName;
end;
procedure TfrmOrderView.cmdOKClick(Sender: TObject);
begin
inherited;
if chkDateRange.Checked and ((not calFrom.IsValid) or (not calThru.IsValid)) then
begin
InfoBox(TX_DATES, TC_DATES, MB_OK);
Exit;
end;
if chkDateRange.Checked then
begin
FTimeFrom := calFrom.FMDateTime;
FTimeThru := calThru.FMDateTime;
end else
begin
FTimeFrom := 0;
FTimeThru := 0;
end;
FChanged := True;
FInvChrono := chkInvChrono.Checked;
FByService := chkByService.Checked;
Close;
end;
procedure TfrmOrderView.cmdCancelClick(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmOrderView.trFiltersClick(Sender: TObject);
var
Node: TTreeNode;
begin
inherited;
Node := trFilters.Selected;
if Node <> nil then
begin
FFilter := Integer(Node.Data);
FFilterName := Node.Text;
if FFilter = 2 then // disallow date range for active orders view
begin
chkDateRange.Checked := False;
chkDateRangeClick(Self);
end;
if FFilter in [8, 9, 10, 20] then chkDateRange.Checked := True else
begin
if (calFrom.Text = '') and (calThru.Text = '') then chkDateRange.Checked := False;
end;
UpdateViewName;
end;
end;
procedure TfrmOrderView.Splitter1Moved(Sender: TObject);
begin
inherited;
Splitter1.Align := alNone;
Splitter1.Align := alLeft;
end;
end.