VistA-cprs/CPRS-Chart/Encounter/fPCEProvider.pas

189 lines
4.8 KiB
Plaintext

unit fPCEProvider;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ORCtrls, ExtCtrls, uPCE, ORFn, fBase508Form,
VA508AccessibilityManager;
type
TfrmPCEProvider = class(TfrmBase508Form)
cboPrimary: TORComboBox;
lblMsg: TMemo;
btnYes: TButton;
btnNo: TButton;
btnSelect: TButton;
Spacer1: TLabel;
procedure cboPrimaryNeedData(Sender: TObject; const StartFrom: String;
Direction, InsertAt: Integer);
procedure cboPrimaryChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnSelectClick(Sender: TObject);
private
FPCEData: TPCEData;
FUseDefault: boolean;
FIEN: array[boolean] of Int64;
FName: array[boolean] of string;
public
procedure AskUser(ForceSelect: boolean);
end;
function NoPrimaryPCEProvider(AProviders: TPCEProviderList; PCEData: TPCEData): boolean;
implementation
uses rCore, uCore, rTIU, rPCE;
{$R *.DFM}
const
AreYouStr = 'Are You, ';
PEPStr2 = ' the Primary Provider for this Encounter';
PEPStr = PEPStr2 + '?';
IsStr = 'Is ';
SelectStr = 'Please Select' + PEPStr2 + '.';
function NoPrimaryPCEProvider(AProviders: TPCEProviderList; PCEData: TPCEData): boolean;
var
frmPCEProvider: TfrmPCEProvider;
idx: integer;
b: boolean;
X: string;
mr: TModalResult;
begin
if(AProviders.PrimaryIdx < 0) then
SetDefaultProvider(AProviders, PCEData);
if(AProviders.PrimaryIdx < 0) then
begin
frmPCEProvider := TfrmPCEProvider.Create(Application);
try
with frmPCEProvider do
begin
FPCEData := PCEData;
for b := FALSE to TRUE do
begin
FIEN[b] := AProviders.PendingIEN(b);
FName[b] := AProviders.PendingNAME(b);
end;
if(FIEN[TRUE] = 0) and (FIEN[FALSE] = 0) then
begin
AskUser(TRUE);
mr := ModalResult;
end
else
begin
FUseDefault := TRUE;
AskUser(FALSE);
mr := ModalResult;
if((mr in [mrAbort, mrNo]) and (FIEN[TRUE] <> FIEN[FALSE])) then
begin
FUseDefault := FALSE;
AskUser(FALSE);
mr := ModalResult;
end;
end;
if (mr = mrYes) then
begin
AProviders.AddProvider(IntToStr(FIEN[FUseDefault]), FName[FUseDefault], TRUE);
end
else
if (mr = mrOK) then
begin
idx := cboPrimary.ItemIndex;
if(idx >= 0) then
begin
X := frmPCEProvider.cboPrimary.Items[idx];
AProviders.AddProvider(Piece(X, U, 1), Piece(X, U, 2), TRUE);
end;
end;
end;
finally
frmPCEProvider.Free;
end;
Result := (AProviders.PrimaryIdx < 0);
end
else
Result := FALSE;
end;
{ TfrmPCEProvider }
procedure TfrmPCEProvider.cboPrimaryNeedData(Sender: TObject;
const StartFrom: String; Direction, InsertAt: Integer);
begin
if(FPCEData.VisitCategory = 'E') then
cboPrimary.ForDataUse(SubSetOfPersons(StartFrom, Direction))
else
cboPrimary.ForDataUse(SubSetOfUsersWithClass(StartFrom, Direction,
FloatToStr(FPCEData.PersonClassDate)));
end;
procedure TfrmPCEProvider.cboPrimaryChange(Sender: TObject);
var
txt: string;
begin
if(cboPrimary.ItemIEN <> 0) and (FPCEData.VisitCategory <> 'E') then
begin
txt := InvalidPCEProviderTxt(cboPrimary.ItemIEN, FPCEData.PersonClassDate);
if(txt <> '') then
begin
InfoBox(cboPrimary.DisplayText[cboPrimary.ItemIndex] + txt, TX_BAD_PROV, MB_OK);
cboPrimary.ItemIndex := -1;
end;
end;
end;
procedure TfrmPCEProvider.FormCreate(Sender: TObject);
begin
ResizeAnchoredFormToFont(self);
ClientHeight := cboPrimary.Top;
end;
procedure TfrmPCEProvider.btnSelectClick(Sender: TObject);
begin
ClientHeight := cboPrimary.Top + cboPrimary.Height + 5;
cboPrimary.Visible := TRUE;
btnSelect.Visible := FALSE;
btnYes.Caption := '&OK';
btnYes.ModalResult := mrOK;
btnNo.Caption := '&Cancel';
btnNo.ModalResult := mrCancel;
lblMsg.Text := SelectStr;
cboPrimary.Caption := lblMsg.Text;
cboPrimary.InitLongList(User.Name);
end;
procedure TfrmPCEProvider.AskUser(ForceSelect: boolean);
var
msg: string;
begin
if(ForceSelect) then
begin
btnSelectClick(Self);
end
else
begin
if(FIEN[FUseDefault] = 0) then
begin
ModalResult := mrAbort;
exit;
end
else
begin
if(FIEN[FUseDefault] = User.DUZ) then
msg := AreYouStr + FName[FUseDefault] + ',' + PEPStr
else
msg := IsStr + FName[FUseDefault] + PEPStr;
end;
lblMsg.text := msg;
cboPrimary.Caption := lblMsg.text;
end;
ShowModal;
end;
end.