unit fPtAdd; //kt This entire module and form was added. Coded by Eddie Hagood 10/2007 interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Trpcb, mfunstr, ORNet, uCore, ExtCtrls, StrUtils, Buttons; type TPatientInfo = class(TObject) public LName: String; FName: String; MName: String; CombinedName: String; Suffix: String; DOB: String; Sex: String; SSNum: String; PtType: String; Veteran: String; procedure ClearArray; end; TfrmPtAdd = class(TForm) LNameLabel: TLabel; SexComboBox: TComboBox; SSNumEdit: TEdit; DOBEdit: TEdit; SuffixEdit: TEdit; MNameEdit: TEdit; FNameEdit: TEdit; LNameEdit: TEdit; FNameLabel: TLabel; MNameLabel: TLabel; SuffixLabel: TLabel; DOBLabel: TLabel; SSNumLabel: TLabel; SexLabel: TLabel; PrefixLabel: TLabel; PtTypeComboBox: TComboBox; VeteranCheckBox: TCheckBox; OkButton: TButton; CloseButton: TButton; Label1: TLabel; SSNHelpBtn: TSpeedButton; Label2: TLabel; procedure OnShow(Sender: TObject); procedure CancelButtonClick(Sender: TObject); procedure OkButtonClick(Sender: TObject); procedure LNameEditChange(Sender: TObject); procedure FNameEditChange(Sender: TObject); procedure DOBEditChange(Sender: TObject); procedure SSNumEditChange(Sender: TObject); procedure SexComboBoxChange(Sender: TObject); procedure MNameEditChange(Sender: TObject); procedure SuffixEditChange(Sender: TObject); procedure PtTypeComboBoxChange(Sender: TObject); procedure VeteranCheckBoxClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SSNumEditExit(Sender: TObject); procedure SSNumEditKeyPress(Sender: TObject; var Key: Char); procedure DOBEditKeyPress(Sender: TObject; var Key: Char); procedure LNameEditKeyPress(Sender: TObject; var Key: Char); procedure FNameEditKeyPress(Sender: TObject; var Key: Char); procedure MNameEditKeyPress(Sender: TObject; var Key: Char); procedure SuffixEditKeyPress(Sender: TObject; var Key: Char); procedure SexComboBoxKeyPress(Sender: TObject; var Key: Char); procedure PtTypeComboBoxKeyPress(Sender: TObject; var Key: Char); procedure FormDestroy(Sender: TObject); procedure DOBEditExit(Sender: TObject); procedure SSNHelpBtnClick(Sender: TObject); private { Private declarations } ThisPatientInfo: TPatientInfo; ProgModSSNum : boolean; procedure ResetColors(); procedure ResetFields(); procedure TestUserInput(); procedure DataToArray(); procedure CreatePSSN(); procedure PostInfo(ThisPatientInfo : TPatientInfo); function FrmtSSNum(SSNumStr : string) : string; function UnFrmtSSNum(SSNumStr : string) : string; function SSNumInvalid(SSNumStr: string) : boolean; public { Public declarations } DFN: Int64; end; var frmPtAdd: TfrmPtAdd; implementation uses fPtSel; {$R *.dfm} var boolErrorFound: boolean; boolDirtyForm: boolean; procedure TfrmPtAdd.OnShow(Sender: TObject); begin LNameEdit.SetFocus; PtTypeComboBox.Text := 'NON-VETERAN (OTHER)'; ResetColors; ResetFields; ThisPatientInfo.ClearArray; boolDirtyForm := False; DFN := -1; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.CancelButtonClick(Sender: TObject); begin if (boolDirtyForm = True) then begin if MessageDlg('** Patient Not Yet Added **'+#10+#13+ 'ADD this patient before exiting?', mtWarning, [mbYes, mbNo],0) = mrYes then begin OkButtonClick(self); end else begin modalresult:=1; end; end else begin modalresult:=1; end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.ResetColors(); begin LNameEdit.Color := clWindow; FNameEdit.Color := clWindow; DOBEdit.Color := clWindow; SSNumEdit.Color := clWindow; SexComboBox.Color := clWindow; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.ResetFields(); begin LNameEdit.text := ''; FNameEdit.text := ''; MNameEdit.text := ''; SuffixEdit.Text := ''; PtTypeComboBox.Text := 'NON-VETERAN (OTHER)'; DOBEdit.text := ''; SSNumEdit.text := ''; SexComboBox.text := ''; Label1.Visible := False; Label1.Caption := ''; VeteranCheckbox.Checked := False; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.OkButtonClick(Sender: TObject); begin TestUserInput; if boolErrorFound = False then begin DataToArray; PostInfo(ThisPatientInfo); boolDirtyForm := False; ThisPatientInfo.ClearArray; modalresult:=1; end else begin label1.Caption := 'Needs: ' + label1.caption; label1.Visible := True; end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.LNameEditChange(Sender: TObject); begin ResetColors; ThisPatientInfo.LName := LNameEdit.Text; boolDirtyForm := True; label1.Visible := False; if Pos('P',SSNumEdit.Text) > 0 then begin CreatePSSN(); end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.FNameEditChange(Sender: TObject); begin ResetColors; ThisPatientInfo.FName := FNameEdit.Text; boolDirtyForm := True; label1.Visible := False; if Pos('P',SSNumEdit.Text) > 0 then begin CreatePSSN(); end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.MNameEditChange(Sender: TObject); begin ThisPatientInfo.MName := MNameEdit.Text; boolDirtyForm := True; label1.Visible := False; if Pos('P',SSNumEdit.Text) > 0 then begin CreatePSSN(); end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.DOBEditChange(Sender: TObject); begin ResetColors; label1.Visible := False; ThisPatientInfo.DOB := DOBEdit.Text; if Pos('P',SSNumEdit.Text) > 0 then begin CreatePSSN(); end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.SSNumEditChange(Sender: TObject); begin if ProgModSSNum = false then begin ResetColors; ThisPatientInfo.SSNum := UnFrmtSSNum(SSNumEdit.Text); //ProgModSSNum := true; //SSNumEdit.Text := FrmtSSNum(ThisPatientInfo.SSNum); //ProgModSSNum := false; boolDirtyForm := True; label1.Visible := False; end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.SexComboBoxChange(Sender: TObject); begin ResetColors; ThisPatientInfo.Sex := SexComboBox.Text; boolDirtyForm := True; label1.Visible := False; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.TestUserInput(); begin boolErrorFound := False; label1.caption := ''; label1.Visible := False; ResetColors; if SSNumInvalid(ThisPatientInfo.SSNum) then begin if MessageDlg('Invalid SSN. Would you like to use a pseudo-SSN?', mtConfirmation, [mbYes, mbNo],0) = mrYes then begin SSNumEdit.Text := 'p'; end else begin label1.Caption := label1.Caption + 'SSN,'; boolErrorFound := True; SSNumEdit.Color := clYellow; end; end; if LNameEdit.Text = '' then begin label1.Caption := 'Last Name,'; boolErrorFound := True; LNameEdit.Color := clYellow; end; if FNameEdit.Text = '' then begin label1.Caption := label1.Caption + 'First Name,'; boolErrorFound := True; FNameEdit.Color := clYellow; end; if DOBEdit.Text = '' then begin label1.Caption := label1.Caption + 'DOB,'; boolErrorFound := True; DOBEdit.Color := clYellow; end; if SexComboBox.Text = '' then begin label1.Caption := label1.Caption + 'Gender'; boolErrorFound := True; SexComboBox.Color := clYellow; end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.DataToArray(); begin ThisPatientInfo.ClearArray; ThisPatientInfo.LName := LNameEdit.Text; ThisPatientInfo.FName := FNameEdit.Text; ThisPatientInfo.MName := MNameEdit.Text; ThisPatientInfo.Suffix := SuffixEdit.Text; ThisPatientInfo.DOB := DOBEdit.Text; ThisPatientInfo.Sex := SexComboBox.Text; if Uppercase(SSNumEdit.Text) = 'P' then begin CreatePSSN; end else begin ThisPatientInfo.SSNum := UnFrmtSSNum(SSNumEdit.Text); end; ThisPatientInfo.PtType := PtTypeComboBox.Text; if VeteranCheckBox.Checked = True then ThisPatientInfo.Veteran := 'True' else ThisPatientInfo.Veteran := 'False'; end; //------------------------------------------------------------------------ procedure TPatientInfo.ClearArray; begin LName := ''; FName := ''; MName := ''; Suffix := ''; DOB := ''; Sex := ''; SSNum := ''; PtType := ''; Veteran := ''; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.SuffixEditChange(Sender: TObject); begin ThisPatientInfo.Suffix := SuffixEdit.Text; boolDirtyForm := True; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.PtTypeComboBoxChange(Sender: TObject); begin ThisPatientInfo.PtType := PtTypeComboBox.Text; boolDirtyForm := True; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.VeteranCheckBoxClick(Sender: TObject); begin if VeteranCheckBox.Checked = True then ThisPatientInfo.Veteran := 'True' else ThisPatientInfo.Veteran := 'False'; boolDirtyForm := True; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.FormCreate(Sender: TObject); begin ThisPatientInfo := TPatientInfo.Create; DFN := -1; ProgModSSNum := false; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.SSNumEditExit(Sender: TObject); begin ProgModSSNum := true; SSNumEdit.Text := FrmtSSNum(ThisPatientInfo.SSNum); ProgModSSNum := false; if (SSNumInvalid(ThisPatientInfo.SSNum)) and (SSNumEdit.Text <>'') then begin label1.Caption := 'SSN not correct length'; label1.Visible := True; SSNumEdit.Color := clYellow; end; end; //------------------------------------------------------------------------ function TfrmPtAdd.SSNumInvalid(SSNumStr: string) : boolean; var targetLen : byte; begin if Pos('P',SSNumStr)>0 then targetLen := 10 else targetLen := 9; Result := (length(SSNumStr) <> targetLen); end; //------------------------------------------------------------------------ procedure TfrmPtAdd.SSNumEditKeyPress(Sender: TObject; var Key: Char); begin if Key = 'p' then Key := 'P'; if Key=#8 then begin if Pos('P',SSNumEdit.Text)>0 then begin SSNumEdit.Text := ''; Key := #0; end; end else if Key='P' then begin CreatePSSN; Key := #0; end else if not (Key in ['0'..'9','-']) then Key := #0; end; //------------------------------------------------------------------------ function TfrmPtAdd.FrmtSSNum(SSNumStr : string) : string; var partA,partB,partC : string; begin partA := MidStr(SSNumStr,1,3); partB := MidStr(SSNumStr,4,2); partC := MidStr(SSNumStr,6,5); Result := partA; if length(partA)=3 then begin Result := Result + '-' + partB; if partC<>'' then begin Result := Result + '-' + partC; end; end else begin Result := SSNumStr; end; end; //------------------------------------------------------------------------ function TfrmPtAdd.UnFrmtSSNum(SSNumStr : string) : string; begin Result := AnsiReplaceText(SSNumStr,'-',''); end; //------------------------------------------------------------------------ procedure TfrmPtAdd.DOBEditKeyPress(Sender: TObject; var Key: Char); begin if Key in ['-', '\'] then Key := '/'; if Key in ['0'..'9'] + ['/'] then Key := Key else if Key <> #8 then Key := #0; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.LNameEditKeyPress(Sender: TObject; var Key: Char); begin Key := Uppercase(Key)[1]; if Key in ['0'..'9',','] then Key := #0 end; //------------------------------------------------------------------------ procedure TfrmPtAdd.FNameEditKeyPress(Sender: TObject; var Key: Char); begin Key := Uppercase(Key)[1]; if Key in ['0'..'9'] then Key := #0 end; //------------------------------------------------------------------------ procedure TfrmPtAdd.MNameEditKeyPress(Sender: TObject; var Key: Char); begin Key := Uppercase(Key)[1]; if Key in ['0'..'9'] then Key := #0 end; //------------------------------------------------------------------------ procedure TfrmPtAdd.SuffixEditKeyPress(Sender: TObject; var Key: Char); begin if Key in ['0'..'9'] then Key := #0 end; //------------------------------------------------------------------------ procedure TfrmPtAdd.SexComboBoxKeyPress(Sender: TObject; var Key: Char); begin Key := Uppercase(Key)[1]; if Key = 'M' then begin SexComboBox.Text := 'MALE'; Key := #0; end else if Key = 'F' then begin SexComboBox.Text := 'FEMALE'; Key := #0; end else if Key = #8 then begin SexComboBox.Text := ''; Key := #0; end else Key := #0; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.PtTypeComboBoxKeyPress(Sender: TObject; var Key: Char); begin Key := #0; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.PostInfo(ThisPatientInfo : TPatientInfo); var tempResult: integer; procedure CheckPost(Title, Value : string); begin if Value <> '' then RPCBrokerV.Param[0].Mult['"'+Title+'"'] := Value; end; begin if MessageDlg('Add New Patient? (Can Not Be Undone)', mtConfirmation, [mbYes, mbNo],0) = mrNo then exit; RPCBrokerV.remoteprocedure := 'TMG ADD PATIENT'; RPCBrokerV.Param[0].PType := list; with ThisPatientInfo do begin CombinedName := LName + ',' + FName; If MName <> '' then CombinedName := CombinedName + ' ' + MName; If Suffix <> '' then CombinedName := CombinedName + ' ' + Suffix; CheckPost('COMBINED_NAME',CombinedName); CheckPost('DOB',DOB); CheckPost('SEX',Sex); CheckPost('SS_NUM',SSNum); //CheckPost('Veteran',Veteran); //CheckPost('PtType',PtType); //RPCBrokerV.Call; CallBroker; tempResult := strtoint(piece(RPCBrokerV.Results.Strings[0],'^',1)); DFN := tempResult; if tempResult > 0 then begin //MessageDlg('Patient successfully added',mtInformation,[mbOK],0); end else if tempResult = 0 then begin MessageDlg('Patient already exists.',mtError,[mbOK],0); DFN := strtoint(piece(RPCBrokerV.Results.Strings[0],'^',2)); end else begin MessageDlg(RPCBrokerV.Results.Strings[0],mtError,[mbOK],0); end; end; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.FormDestroy(Sender: TObject); begin ThisPatientInfo.Destroy; end; //------------------------------------------------------------------------ procedure TfrmPtAdd.CreatePSSN(); var i: integer; tempPseudo: string; Init : array [1..3] of char; code : char; Month,Day,Year: string; begin for i := 1 to 3 do Init[i]:=' '; if ThisPatientInfo.FName<>'' then Init[1] := UpperCase(ThisPatientInfo.FName)[1]; if ThisPatientInfo.MName<>'' then Init[2] := UpperCase(ThisPatientInfo.MName)[1]; if ThisPatientInfo.LName<>'' then Init[3] := UpperCase(ThisPatientInfo.LName)[1]; tempPseudo := ''; for i := 1 to 3 do begin if Init[i] in ['A','B','C'] then code := '1' else if Init[i] in ['D','E','F'] then code := '2' else if Init[i] in ['G','H','I'] then code := '3' else if Init[i] in ['J','K','L'] then code := '4' else if Init[i] in ['M','N','O'] then code := '5' else if Init[i] in ['P','Q','R'] then code := '6' else if Init[i] in ['S','T','U'] then code := '7' else if Init[i] in ['V','W','X'] then code := '8' else if Init[i] in ['Y','Z'] then code := '9' else if Init[i] in [' '] then code := '0' else code := '0'; tempPseudo := tempPseudo + code; end; Month := piece(ThisPatientInfo.DOB,'/',1); Day := piece(ThisPatientInfo.DOB,'/',2); Year := piece(ThisPatientInfo.DOB,'/',3); tempPseudo := tempPseudo + Month + Day + Year + 'P'; ThisPatientInfo.SSNum := tempPseudo; SSNumEdit.Text := ThisPatientInfo.SSNum; SSNumEditExit(nil); end; procedure TfrmPtAdd.DOBEditExit(Sender: TObject); var s,s2: string; i:integer; boolInvalid: boolean; begin boolInvalid := False; s2 := ''; For i:=1 to 3 do begin s := piece(DobEdit.Text,'/',i); if ((i = 3) and (length(s) = 4)) then s := rightstr(s,2); if length(s) = 1 then s := '0' + s; if s2 <> '' then s2 := s2 + '/'; s2 := s2 + s; if length(s) <> 2 then boolInvalid := True; end; if (boolInvalid = True) and (DOBEdit.Text<>'') then begin messagedlg('DOB format is invalid. Please enter it in mm/dd/yy format.',mtError,[mbOK],0); DOBEdit.text := ''; end else begin DOBEdit.text := s2; end; end; procedure TfrmPtAdd.SSNHelpBtnClick(Sender: TObject); begin if MessageDlg('If Soc. Sec. Number (SSN) is unknown, a "Pseudo" SSN may be used.'+#10+#13+ 'Create a Pseudo-SSN For this Patient?', mtConfirmation, [mbYes, mbNo],0) = mrYes then begin CreatePSSN; end else begin SSNumEdit.Text := ''; end; end; end.