VistA-cprs/CPRS-Chart/Options/fOptionsDays.pas

437 lines
12 KiB
Plaintext

unit fOptionsDays;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, fOptions, ComCtrls, OrFn, ORCtrls;
type
TfrmOptionsDays = class(TForm)
pnlBottom: TPanel;
btnOK: TButton;
btnCancel: TButton;
bvlTop: TBevel;
bvlMiddle: TBevel;
txtLabInpatient: TCaptionEdit;
spnLabInpatient: TUpDown;
txtLabOutpatient: TCaptionEdit;
spnLabOutpatient: TUpDown;
txtVisitStart: TCaptionEdit;
spnVisitStart: TUpDown;
txtVisitStop: TCaptionEdit;
spnVisitStop: TUpDown;
lblVisit: TStaticText;
lblVisitStop: TLabel;
lblVisitStart: TLabel;
lblLabOutpatient: TLabel;
lblLabInpatient: TLabel;
lblLab: TStaticText;
lblVisitValue: TMemo;
lblLabValue: TMemo;
btnLabDefaults: TButton;
btnVisitDefaults: TButton;
bvlBottom: TBevel;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure spnVisitStartClick(Sender: TObject; Button: TUDBtnType);
procedure spnVisitStopClick(Sender: TObject; Button: TUDBtnType);
procedure spnLabInpatientClick(Sender: TObject; Button: TUDBtnType);
procedure spnLabOutpatientClick(Sender: TObject; Button: TUDBtnType);
procedure txtLabInpatientKeyPress(Sender: TObject; var Key: Char);
procedure btnLabDefaultsClick(Sender: TObject);
procedure btnVisitDefaultsClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure txtLabInpatientChange(Sender: TObject);
procedure txtLabInpatientExit(Sender: TObject);
procedure txtLabOutpatientChange(Sender: TObject);
procedure txtLabOutpatientExit(Sender: TObject);
procedure txtVisitStartExit(Sender: TObject);
procedure txtVisitStartKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure txtVisitStopExit(Sender: TObject);
procedure txtVisitStopKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure txtVisitStartKeyPress(Sender: TObject; var Key: Char);
procedure txtVisitStopKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
FStartEntered: boolean;
FStopEntered: boolean;
procedure AdjustVisitLabel;
procedure AdjustLabLabel;
public
{ Public declarations }
end;
var
frmOptionsDays: TfrmOptionsDays;
procedure DialogOptionsDays(topvalue, leftvalue, fontsize: integer; var actiontype: Integer);
implementation
uses rOptions, uOptions;
{$R *.DFM}
procedure DialogOptionsDays(topvalue, leftvalue, fontsize: integer; var actiontype: Integer);
// create the form and make it modal, return an action
var
frmOptionsDays: TfrmOptionsDays;
begin
frmOptionsDays := TfrmOptionsDays.Create(Application);
actiontype := 0;
try
with frmOptionsDays do
begin
if (topvalue < 0) or (leftvalue < 0) then
Position := poScreenCenter
else
begin
Position := poDesigned;
Top := topvalue;
Left := leftvalue;
end;
ResizeAnchoredFormToFont(frmOptionsDays);
ShowModal;
actiontype := btnOK.Tag;
end;
finally
frmOptionsDays.Release;
end;
end;
procedure TfrmOptionsDays.FormCreate(Sender: TObject);
begin
FStartEntered := false;
FStopEntered := false;
end;
procedure TfrmOptionsDays.FormShow(Sender: TObject);
//get lab defaults, personal values, visit defaults, personal values
//tags for textboxes hold setting, tags on spinbuttons hold default,
//tag of 1 on buttons indicate system default being used
var
labin, labout, visitstart, visitstop: integer;
labindef, laboutdef, visitstartdef, visitstopdef: integer;
begin
rpcGetLabDays(labindef, laboutdef);
rpcGetLabUserDays(labin, labout);
rpcGetApptDays(visitstartdef, visitstopdef);
rpcGetApptUserDays(visitstart, visitstop);
txtLabInpatient.Text := inttostr(-labin);
txtLabInpatient.Tag := labin;
txtLabOutpatient.Text := inttostr(-labout);
txtLabOutpatient.Tag := labout;
txtVisitStart.Tag := visitstart - 1;
txtVisitStop.Tag := visitstop - 1;
spnLabInpatient.Tag := labindef;
spnLabOutpatient.Tag := laboutdef;
spnVisitStart.Tag := visitstartdef;
spnVisitStop.Tag := visitstopdef;
spnLabInpatientClick(self, btNext);
spnLabOutpatientClick(self, btNext);
spnVisitStartClick(self, btNext);
spnVisitStopClick(self, btNext);
txtLabInpatient.SetFocus;
end;
procedure TfrmOptionsDays.spnVisitStartClick(Sender: TObject;
Button: TUDBtnType);
var
tagnum: integer;
begin
with txtVisitStart do
begin
if FStartEntered then
begin
if Hint = '' then Hint := 'T';
tagnum := RelativeDate(Hint);
if tagnum = INVALID_DAYS then
begin
Text := Hint;
beep;
InfoBox('Start Date entry was invalid', 'Warning', MB_OK or MB_ICONWARNING);
ShowDisplay(txtVisitStart);
FStartEntered := false;
exit;
end
else
begin
DateLimits(DAYS_LIMIT, tagnum);
if tagnum <> INVALID_DAYS then
Tag := tagnum;
end;
end;
SetFocus;
if Button = btNext then tagnum := Tag + 1
else tagnum := Tag - 1;
Text := Hint;
DateLimits(DAYS_LIMIT, tagnum);
if tagnum <> INVALID_DAYS then
Tag := tagnum;
ShowDisplay(txtVisitStart);
end;
btnVisitDefaults.Tag := 0;
AdjustVisitLabel;
FStartEntered := false;
end;
procedure TfrmOptionsDays.spnVisitStopClick(Sender: TObject;
Button: TUDBtnType);
var
tagnum: integer;
begin
with txtVisitStop do
begin
if FStopEntered then
begin
if Hint = '' then Hint := 'T';
tagnum := RelativeDate(Hint);
if tagnum = INVALID_DAYS then
begin
Text := Hint;
beep;
InfoBox('Stop Date entry was invalid', 'Warning', MB_OK or MB_ICONWARNING);
ShowDisplay(txtVisitStop);
FStopEntered := false;
exit;
end
else
begin
DateLimits(DAYS_LIMIT, tagnum);
if tagnum = INVALID_DAYS then
begin
Text := Hint;
ShowDisplay(txtVisitStop);
FStopEntered := false;
exit;
end;
end;
end;
SetFocus;
if Button = btNext then tagnum := Tag + 1
else tagnum := Tag - 1;
Text := Hint;
DateLimits(DAYS_LIMIT, tagnum);
if tagnum <> INVALID_DAYS then
Tag := tagnum;
ShowDisplay(txtVisitStop);
end;
btnVisitDefaults.Tag := 0;
AdjustVisitLabel;
FStopEntered := false;
end;
procedure TfrmOptionsDays.spnLabInpatientClick(Sender: TObject;
Button: TUDBtnType);
begin
txtLabInpatient.SetFocus;
txtLabInpatient.Tag := strtointdef(txtLabInpatient.Text, 0);
btnLabDefaults.Tag := 0;
AdjustLabLabel;
end;
procedure TfrmOptionsDays.spnLabOutpatientClick(Sender: TObject;
Button: TUDBtnType);
begin
txtLabOutpatient.SetFocus;
txtLabOutpatient.Tag := strtointdef(txtLabOutpatient.Text, 0);
btnLabDefaults.Tag := 0;
AdjustLabLabel;
end;
procedure TfrmOptionsDays.txtLabInpatientKeyPress(Sender: TObject;
var Key: Char);
begin
if Key = #13 then
begin
Perform(WM_NextDlgCtl, 0, 0);
exit;
end;
if not (Key in ['0'..'9', #8]) then
begin
Key := #0;
beep;
end;
end;
procedure TfrmOptionsDays.btnLabDefaultsClick(Sender: TObject);
begin
txtLabInpatient.Text := inttostr(spnLabInpatient.Tag);
spnLabInpatientClick(self, btNext);
txtLabOutpatient.Text := inttostr(spnLabOutpatient.Tag);
spnLabOutpatientClick(self, btNext);
btnLabDefaults.Tag := 1;
end;
procedure TfrmOptionsDays.btnVisitDefaultsClick(Sender: TObject);
begin
txtVisitStart.Tag := spnVisitStart.Tag - 1;
spnVisitStartClick(self, btNext);
txtVisitStop.Tag := spnVisitStop.Tag - 1;
spnVisitStopClick(self, btNext);
btnVisitDefaults.Tag := 1;
end;
procedure TfrmOptionsDays.AdjustVisitLabel;
var
start, stop: string;
begin
start := txtVisitStart.Text;
stop := txtVisitStop.Text;
if start <> 'Today' then start := start + ' days';
if stop <> 'Today' then stop := stop + ' days';
lblVisitValue.Text := 'Appointments and visits will be displayed on the cover sheet '
+ 'from ' + start + ' to ' + stop + '.'
end;
procedure TfrmOptionsDays.AdjustLabLabel;
begin
lblLabValue.Text := 'Lab results will be displayed on the cover sheet '
+ 'back ' + txtLabInpatient.Text + ' days for inpatients and '
+ txtLabOutpatient.Text + ' days for outpatients.';
end;
procedure TfrmOptionsDays.btnOKClick(Sender: TObject);
begin
rpcSetDays(txtLabInpatient.Tag, txtLabOutpatient.Tag, txtVisitStart.Tag, txtVisitStop.Tag);
end;
procedure TfrmOptionsDays.txtLabInpatientChange(Sender: TObject);
var
maxvalue: integer;
begin
maxvalue := spnLabInpatient.Max;
with txtLabInpatient do
begin
if strtointdef(Text, maxvalue) > maxvalue then
begin
beep;
InfoBox('Number must be < ' + inttostr(maxvalue), 'Warning', MB_OK or MB_ICONWARNING);
if strtointdef(Text, 0) > maxvalue then
Text := inttostr(maxvalue);
end;
end;
spnLabInpatientClick(self, btNext);
end;
procedure TfrmOptionsDays.txtLabInpatientExit(Sender: TObject);
begin
with txtLabInpatient do
begin
if Text = '' then
begin
Text := '0';
spnLabInpatientClick(self, btNext);
end
else if (Copy(Text, 1, 1) = '0') and (length(Text) > 1) then
begin
Text := inttostr(strtointdef(Text, 0));
spnLabInpatientClick(self, btNext);
end;
end;
end;
procedure TfrmOptionsDays.txtLabOutpatientChange(Sender: TObject);
var
maxvalue: integer;
begin
maxvalue := spnLabOutpatient.Max;
with txtLabOutpatient do
begin
if strtointdef(Text, maxvalue) > maxvalue then
begin
beep;
InfoBox('Number must be < ' + inttostr(maxvalue), 'Warning', MB_OK or MB_ICONWARNING);
if strtointdef(Text, 0) > maxvalue then
Text := inttostr(maxvalue);
end;
end;
spnLabOutpatientClick(self, btNext);
end;
procedure TfrmOptionsDays.txtLabOutpatientExit(Sender: TObject);
begin
with txtLabOutpatient do
begin
if Text = '' then
begin
Text := '0';
spnLabOutpatientClick(self, btNext);
end
else if (Copy(Text, 1, 1) = '0') and (length(Text) > 1) then
begin
Text := inttostr(strtointdef(Text, 0));
spnLabOutpatientClick(self, btNext);
end;
end;
end;
procedure TfrmOptionsDays.txtVisitStartExit(Sender: TObject);
begin
with txtVisitStart do
if Text = '' then
begin
Text := 'T-1';
Hint := 'T-1';
spnVisitStartClick(self, btNext);
end;
TextExit(txtVisitStart, FStartEntered, DAYS_LIMIT);
AdjustVisitLabel;
end;
procedure TfrmOptionsDays.txtVisitStartKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
txtVisitStart.Hint := txtVisitStart.Text; // put text in hint since text not available to spin
FStartEntered := true;
end;
procedure TfrmOptionsDays.txtVisitStopExit(Sender: TObject);
begin
with txtVisitStop do
if Text = '' then
begin
Text := 'T-1';
Hint := 'T-1';
spnVisitStopClick(self, btNext);
end;
TextExit(txtVisitStop, FStopEntered, DAYS_LIMIT);
AdjustVisitLabel;
end;
procedure TfrmOptionsDays.txtVisitStopKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
txtVisitStop.Hint := txtVisitStop.Text; // put text in hint since text not available to spin
FStopEntered := true;
end;
procedure TfrmOptionsDays.txtVisitStartKeyPress(Sender: TObject;
var Key: Char);
begin
if key = #13 then
begin
FStartEntered := true;
Perform(WM_NextDlgCtl, 0, 0);
end;
end;
procedure TfrmOptionsDays.txtVisitStopKeyPress(Sender: TObject;
var Key: Char);
begin
if key = #13 then
begin
FStopEntered := true;
Perform(WM_NextDlgCtl, 0, 0);
end;
end;
end.