326 lines
8.7 KiB
Plaintext
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.
|