📄 main.pas
字号:
if (Status='family member') or (Status='other') then
begin
Label3.Caption:='';
Label4.Caption:='';
end;
if (Status='retiree') or (Status='TDRL') then
begin
Label3.Caption:=Rate+'/'+Rank+'/'+Service;
Label4.Caption:='';
end;
Label5.Caption:='POC: '+POC;
Label6.Caption:='Allergies: '+Allergies;
end;
ShowModal;
end;
end;
procedure TMainForm.DeletePatientClick(Sender: TObject);
begin
if PatientListView.Items.Count<=0 then Exit;
if PatientListView.ItemFocused=nil then Exit;
if not Assigned(PatientListView.ItemFocused.Data) then Exit;
if not PPatientRecord(PatientListView.ItemFocused.Data)^.Inactive then
begin
MessageDlg('Unable to delete - Patients must be marked inactive prior to deletion', mtError, [mbOk], 0);
Exit;
end;
if PPatientRecord(PatientListView.ItemFocused.Data)^.Author<>
MainForm.SQLConnection.Params.Values['User_Name'] then
begin
MessageDlg('Unable to delete - You are not the provider for this patient', mtError, [mbOk], 0);
Exit;
end;
if MessageDlg('Are you sure you want to delete all records for '+
PPatientRecord(PatientListView.ItemFocused.Data)^.Firstname+' '+
PPatientRecord(PatientListView.ItemFocused.Data)^.Lastname+'?',
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then Exit;
//This will first dispose record from item then delete item from list
//Efficient - No db refresh necessary since item is removed from list
with SQLQuery do
begin
SQL.Clear;
SQL.Add('delete from patients where patientid='+inttostr(PPatientRecord(PatientListView.ItemFocused.Data)^.PatientID) );
ExecSQL;
//delete records from dependent DB's...
SQL.Clear;
SQL.Add('delete from notes where patientid='+inttostr(PPatientRecord(PatientListView.ItemFocused.Data)^.PatientID) );
ExecSQL;
SQL.Clear;
SQL.Add('delete from scales where patientid='+inttostr(PPatientRecord(PatientListView.ItemFocused.Data)^.PatientID) );
ExecSQL;
SQL.Clear;
SQL.Add('delete from diagnoses where patientid='+inttostr(PPatientRecord(PatientListView.ItemFocused.Data)^.PatientID) );
ExecSQL;
SQL.Clear;
SQL.Add('delete from medications where patientid='+inttostr(PPatientRecord(PatientListView.ItemFocused.Data)^.PatientID) );
ExecSQL;
end;
//now delete last trace of patient from patient list
//no need to worry if pointer has been Assign()'d as this has been checked above
Dispose(PPatientRecord(PatientListView.ItemFocused.Data));
PatientListView.ItemFocused.Delete;
PatientListViewClick(Sender);
end;
procedure TMainForm.RefreshPatientsDBClick(Sender: TObject);
var PatientRecordPtr: PPatientRecord;
SelectedPatientIDHolder, i: integer;
StatusString, TimeString: string;
Save_Cursor: TCursor;
begin
Save_Cursor:=Screen.Cursor;
Screen.Cursor:=crSQLWait; //alternative could use crHourGlass
//Populates ListBox with patient names and SSN
//Each listbox item is associated with PatientID integer that serves as unique master key for DB
//Dependent DB's such as patient notes use PatientID as unique patient identifier
//Remember which item is currently selected if any
SelectedPatientIDHolder:=-1;
if PatientListView.ItemFocused<>nil then
begin
if Assigned(PatientListView.ItemFocused.Data) then
SelectedPatientIDHolder:=PPatientRecord(PatientListView.ItemFocused.Data)^.PatientID;
end;
PatientListView.Items.BeginUpdate;
//Delete everything from list
CleanUpPatientListView;
DateSeparator := '/';
ShortDateFormat := 'yyyy/mm/dd';
LongTimeFormat:='hh:nn:ss';
with SQLQuery do
begin
SQL.Clear;
SQL.Add('select * from patients ');
if ShowOnlyMyPatientsCheckBox.Checked then
SQL.Add('where author='''+SQLConnection.Params.Values['User_Name']+''' ');
if ShowOnlyActivePatientsCheckBox.Checked then
begin
if AnsiContainsText(SQL.Text, 'where') then
SQL.Add('and inactive=0 ')
else
SQL.Add('where inactive=0 ');
end;
if not AllStatus.Checked then
begin
if ActiveDutyStatus.Checked then StatusString:='status=''active duty service member''';
if FamilyMemberStatus.Checked then StatusString:='status=''family member''';
if RetireesStatus.Checked then StatusString:='status=''retiree''';
if TDRLStatus.Checked then StatusString:='status=''tdrl''';
if OtherStatus.Checked then StatusString:='status=''other''';
if AnsiContainsText(SQL.Text, 'where') then
SQL.Add('and '+StatusString+' ')
else
SQL.Add('where '+StatusString+' ');
end;
//Chances are if you haven't seen a patient in a year he or she isn't coming back
//Checking only the last year or two significantly speeds up the queries because it cuts
//the number of patients in half.
if not TimeAll.Checked then
begin
if Time180Days.Checked then TimeString:='lastseendatetime>='''+DatetoStr(Now-180)+'''';
if Time1Year.Checked then TimeString:='lastseendatetime>='''+DatetoStr(Now-365)+'''';
if Time2Years.Checked then TimeString:='lastseendatetime>='''+DatetoStr(Now-730)+'''';
if AnsiContainsText(SQL.Text, 'where') then
SQL.Add('and '+TimeString+' ')
else
SQL.Add('where '+TimeString+' ');
end;
//Not a good idea to search by records by age than a certain date since this would involve
//Linking to LastSeenDate field in Notes DB
if byName.Checked then SQL.Add('order by lastname'); //asc is default
if byLastSeenDate.Checked then SQL.Add('order by lastseendatetime desc');
if byProvider.Checked then SQL.Add('order by author, lastname');
Open;
First;
while (not EOF) do
begin
new(PatientRecordPtr);
with PatientRecordPtr^ do
begin
PatientID:=FieldByName('patientid').AsInteger;
Lastname:=FieldByName('lastname').AsString;
Firstname:=FieldByName('firstname').AsString;
Status:=FieldByName('status').AsString;
SSN:=FieldByName('ssn').AsString;
Birthday:=StrtoDateTime(FieldByName('birthday').AsString);
IsMale:=Boolean(FieldByName('sex').AsInteger);
Rate:=FieldByName('rate').AsString;
Rank:=FieldByName('rank').AsString;
Service:=FieldByName('service').AsString;
PayDate:=StrtoDateTime(FieldByName('paydate').AsString);
Command:=FieldByName('command').AsString;
POC:=FieldByName('poc').AsString;
Allergies:=FieldByName('allergies').AsString;
Inactive:=Boolean(FieldByName('inactive').AsInteger);
Author:=FieldByName('author').AsString;
LastSeenDateTime:=StrtoDateTime(FieldByName('lastseendatetime').AsString);
with PatientListView.Items.Add do
begin
Caption:=Lastname+', '+Firstname+' '+SSN;
SubItems.Add(FormatDateTime('dd mmm yy', LastSeenDateTime) );
SubItems.Add(Author);
Data:=TObject(PatientRecordPtr);
end;
end;
Next;
end;
Close;
end;
PatientListView.Items.EndUpdate;
Screen.Cursor := Save_Cursor;
StatusBar.Panels[0].Text:=inttostr(PatientListView.Items.Count)+' total patient(s)';
//If there are no patietns or there was no previously selected patient just
//redraw the screen and exit. Unlike the Patient Explorer Form, there are no
//editing controls that need to be reset.
if (SelectedPatientIDHolder=-1) or (PatientListView.Items.Count<=0) then
begin
PatientListViewClick(Sender);
Exit;
end;
//At this point, there are patient and we have remembered the PatientID that
//was previously selected. We will search through the patients, find and select it.
for i:=0 to PatientListView.Items.Count-1 do
begin
if PPatientRecord(PatientListView.Items[i].Data)^.PatientID = SelectedPatientIDHolder then
begin
PatientListView.Selected := PatientListView.Items[i];
PatientListView.ItemFocused := PatientListView.Items[i];
Break;
end;
end;
//If the note was found or in the rare case it was not, the redraw routines
//will clean up.
PatientListViewClick(Sender);
end;
procedure TMainForm.TemplateManagerClick(Sender: TObject);
begin
with TemplateManagerForm do
begin
Import:=False;
ShowModal;
end;
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
RefreshPatientsDBClick(Sender);
end;
procedure TMainForm.EncounterReportGeneratorClick(Sender: TObject);
begin
EncounterReportGeneratorForm.ShowModal;
end;
procedure TMainForm.FormCreate(Sender: TObject);
var fIni: TRegIniFile;
SortBy, DutyStatusSelect, TimeSelect: string;
begin
Caption:=VersionInfo;
fIni:=TRegIniFile.Create('');
with fIni do
begin
RootKey:=HKEY_CURRENT_USER;
//Set so new users get a full list of patients the first time they use the software
ShowOnlyMyPatientsCheckBox.Checked:=ReadBool('Software\PatientRunner', 'ShowOnlyMyPatients', False);
ShowOnlyActivePatientsCheckBox.Checked:=ReadBool('Software\PatientRunner', 'ShowOnlyActivePatients', True);
SortBy:=ReadString('Software\PatientRunner', 'Sortby', 'Name');
if SortBy='Name' then byName.Checked:=True;
if SortBy='LastSeenDate' then byLastSeenDate.Checked:=True;
if SortBy='Provider' then byProvider.Checked:=True;
//sort criteria
//byName.Checked:=ReadBool('Software\PatientRunner', 'SortbyName', True);
//byLastSeenDate.Checked:=ReadBool('Software\PatientRunner', 'SortbyLastSeenDate', False);
//byProvider.Checked:=ReadBool('Software\PatientRunner', 'SortbyProvider', False);
DutyStatusSelect:=ReadString('Software\PatientRunner', 'DutyStatusSelect', 'All');
if DutyStatusSelect='Active' then ActiveDutyStatus.Checked:=True;
if DutyStatusSelect='FamilyMember' then FamilyMemberStatus.Checked:=True;
if DutyStatusSelect='Retiree' then RetireesStatus.Checked:=True;
if DutyStatusSelect='TDRL' then TDRLStatus.Checked:=True;
if DutyStatusSelect='Other' then OtherStatus.Checked:=True;
if DutyStatusSelect='All' then AllStatus.Checked:=True;
//duty status
//ActiveDutyStatus.Checked:=ReadBool('Software\PatientRunner', '', False);
//FamilyMemberStatus.Checked:=ReadBool('Software\PatientRunner', '', False);
//RetireesStatus.Checked:=ReadBool('Software\PatientRunner', '', False);
//TDRLStatus.Checked:=ReadBool('Software\PatientRunner', '', False);
//OtherStatus.Checked:=ReadBool('Software\PatientRunner', '', False);
//AllStatus.Checked:=ReadBool('Software\PatientRunner', '', True); //default
TimeSelect:=ReadString('Software\PatientRunner', 'TimeSelect', '1');
if TimeSelect='Half' then Time180Days.Checked:=True;
if TimeSelect='1' then Time1Year.Checked:=True;
if TimeSelect='2' then Time2Years.Checked:=True;
if TimeSelect='All' then TimeAll.Checked:=True;
//time
//Time180Days.Checked:=ReadBool('Software\PatientRunner', '', False);
//Time1Year.Checked:=ReadBool('Software\PatientRunner', '', True); //default 1 year
//Time2Years.Checked:=ReadBool('Software\PatientRunner', '', False);
//TimeAll.Checked:=ReadBool('Software\PatientRunner', '', False);
Free;
end;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
var fIni: TRegIniFile;
begin
fIni:=TRegIniFile.Create('');
with fIni do
begin
RootKey:=HKEY_CURRENT_USER;
WriteBool('Software\PatientRunner', 'ShowOnlyMyPatients', ShowOnlyMyPatientsCheckBox.Checked);
WriteBool('Software\PatientRunner', 'ShowOnlyActivePatients', ShowOnlyActivePatientsCheckBox.Checked);
if byName.Checked then WriteString('Software\PatientRunner', 'Sortby', 'Name');
if byLastSeenDate.Checked then WriteString('Software\PatientRunner', 'Sortby', 'LastSeenDate');
if byProvider.Checked then WriteString('Software\PatientRunner', 'Sortby', 'Provider');
if ActiveDutyStatus.Checked then WriteString('Software\PatientRunner', 'DutyStatusSelect', 'Active');
if FamilyMemberStatus.Checked then WriteString('Software\PatientRunner', 'DutyStatusSelect', 'FamilyMember');
if RetireesStatus.Checked then WriteString('Software\PatientRunner', 'DutyStatusSelect', 'Retiree');
if TDRLStatus.Checked then WriteString('Software\PatientRunner', 'DutyStatusSelect', 'TDRL');
if OtherStatus.Checked then WriteString('Software\PatientRunner', 'DutyStatusSelect', 'Other');
if AllStatus.Checked then WriteString('Software\PatientRunner', 'DutyStatusSelect', 'All');
if Time180Days.Checked then WriteString('Software\PatientRunner', 'TimeSelect', 'Half');
if Time1Year.Checked then WriteString('Software\PatientRunner', 'TimeSelect', '1');
if Time2Years.Checked then WriteString('Software\PatientRunner', 'TimeSelect', '2');
if TimeAll.Checked then WriteString('Software\PatientRunner', 'TimeSelect', 'All');
Free;
end;
PatientListView.Items.BeginUpdate;
CleanupPatientListView;
PatientListView.Items.EndUpdate;
end;
procedure TMainForm.PatientListViewColumnClick(Sender: TObject;
Column: TListColumn);
begin
if Column.Index=0 then byName.Checked:=True;
if Column.Index=1 then byLastSeenDate.Checked:=True;
if Column.Index=2 then byProvider.Checked:=True;
RefreshPatientsDBClick(Sender) //name;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -