unit fOptionsPatientSelection; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ORCtrls, OrFn, ComCtrls, fBase508Form, VA508AccessibilityManager; type TfrmOptionsPatientSelection = class(TfrmBase508Form) pnlBottom: TPanel; btnOK: TButton; btnCancel: TButton; cboProvider: TORComboBox; cboTreating: TORComboBox; cboTeam: TORComboBox; cboWard: TORComboBox; cboMonday: TORComboBox; cboTuesday: TORComboBox; cboWednesday: TORComboBox; cboThursday: TORComboBox; cboFriday: TORComboBox; cboSaturday: TORComboBox; cboSunday: TORComboBox; txtVisitStart: TCaptionEdit; txtVisitStop: TCaptionEdit; spnVisitStart: TUpDown; spnVisitStop: TUpDown; lblClinicDays: TLabel; lblMonday: TLabel; lblTuesday: TLabel; lblWednesday: TLabel; lblThursday: TLabel; lblFriday: TLabel; lblSaturday: TLabel; lblSunday: TLabel; lblVisitStart: TLabel; lblVisitStop: TLabel; lblVisitDateRange: TMemo; lblInfo: TMemo; lbWard: TLabel; lblTeam: TLabel; lblTreating: TLabel; lblProvider: TLabel; radListSource: TRadioGroup; grpSortOrder: TGroupBox; radAlphabetical: TRadioButton; radRoomBed: TRadioButton; radAppointmentDate: TRadioButton; radTerminalDigit: TRadioButton; radSource: TRadioButton; bvlBottom: TBevel; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure spnVisitStartClick(Sender: TObject; Button: TUDBtnType); procedure spnVisitStopClick(Sender: TObject; Button: TUDBtnType); procedure btnOKClick(Sender: TObject); procedure txtVisitStartExit(Sender: TObject); procedure txtVisitStopExit(Sender: TObject); procedure txtVisitStartKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure txtVisitStopKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure cboProviderExit(Sender: TObject); procedure radListSourceClick(Sender: TObject); procedure cboMondayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure cboTuesdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure cboWednesdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure cboThursdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure cboFridayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure cboSaturdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure cboSundayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure cboProviderNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); procedure txtVisitStartKeyPress(Sender: TObject; var Key: Char); procedure txtVisitStopKeyPress(Sender: TObject; var Key: Char); procedure cboProviderKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } FStartEntered: boolean; FStopEntered: boolean; FProviderSpecial: boolean; // used to avoid duplicate action on cboProviderKeyUp public { Public declarations } procedure NextControl(Key: Char); end; var frmOptionsPatientSelection: TfrmOptionsPatientSelection; procedure DialogOptionsPatientSelection(topvalue, leftvalue, fontsize: integer; var actiontype: Integer); implementation uses rOptions, uOptions, rCore; {$R *.DFM} procedure DialogOptionsPatientSelection(topvalue, leftvalue, fontsize: integer; var actiontype: Integer); // create the form and make it modal, return an action var frmOptionsPatientSelection: TfrmOptionsPatientSelection; begin frmOptionsPatientSelection := TfrmOptionsPatientSelection.Create(Application); actiontype := 0; try with frmOptionsPatientSelection do begin FProviderSpecial := false; if (topvalue < 0) or (leftvalue < 0) then Position := poScreenCenter else begin Position := poDesigned; Top := topvalue; Left := leftvalue; end; ResizeAnchoredFormToFont(frmOptionsPatientSelection); ShowModal; actiontype := btnOK.Tag; end; finally frmOptionsPatientSelection.Release; end; end; procedure TfrmOptionsPatientSelection.FormCreate(Sender: TObject); begin FStartEntered := false; FStopEntered := false; cboMonday.InitLongList(''); cboTuesday.InitLongList(''); cboWednesday.InitLongList(''); cboThursday.InitLongList(''); cboFriday.InitLongList(''); cboSaturday.InitLongList(''); cboSunday.InitLongList(''); cboProvider.InitLongList(''); ListSpecialtyAll(cboTreating.Items); ListTeamAll(cboTeam.Items); ListWardAll(cboWard.Items); end; procedure TfrmOptionsPatientSelection.FormShow(Sender: TObject); var visitstart, visitstop: integer; mon, tues, wed, thurs, fri, sat, sun: integer; visitstartdef, visitstopdef: integer; defprovider, deftreating, deflist, defward: integer; begin rpcGetClinicUserDays(visitstart, visitstop); visitstartdef := visitstart; visitstopdef := visitstop; txtVisitStart.Tag := visitstart - 1; txtVisitStop.Tag := visitstop - 1; spnVisitStart.Tag := visitstartdef; spnVisitStop.Tag := visitstopdef; spnVisitStartClick(self, btNext); spnVisitStopClick(self, btNext); rpcGetClinicDefaults(mon, tues, wed, thurs, fri, sat, sun); cboMonday.SelectByIEN(mon); if cboMonday.Text = '' then cboMonday.SetExactByIEN(mon, ExternalName(mon, 44)); cboTuesday.SelectByIEN(tues); if cboTuesday.Text = '' then cboTuesday.SetExactByIEN(tues, ExternalName(tues, 44)); cboWednesday.SelectByIEN(wed); if cboWednesday.Text = '' then cboWednesday.SetExactByIEN(wed, ExternalName(wed, 44)); cboThursday.SelectByIEN(thurs); if cboThursday.Text = '' then cboThursday.SetExactByIEN(thurs, ExternalName(thurs, 44)); cboFriday.SelectByIEN(fri); if cboFriday.Text = '' then cboFriday.SetExactByIEN(fri, ExternalName(fri, 44)); cboSaturday.SelectByIEN(sat); if cboSaturday.Text = '' then cboSaturday.SetExactByIEN(sat, ExternalName(sat, 44)); cboSunday.SelectByIEN(sun); if cboSunday.Text = '' then cboSunday.SetExactByIEN(sun, ExternalName(sun, 44)); with radListSource do case DfltPtListSrc of 'P': ItemIndex := 0; 'S': ItemIndex := 1; 'T': ItemIndex := 2; 'W': ItemIndex := 3; 'C': ItemIndex := 4; 'M': ItemIndex := 5; end; radListSourceClick(self); case rpcGetListOrder of 'A': radAlphabetical.Checked := true; 'R': begin if radRoomBed.Enabled then radRoomBed.Checked := true else radAlphabetical.Checked := True; end; 'P': begin if radAppointmentDate.Enabled then radAppointmentDate.Checked := true else radAlphabetical.Checked := True; end; 'T': radTerminalDigit.Checked := true; 'S': radSource.Checked := true; else radAlphabetical.Checked := true; end; rpcGetListSourceDefaults(defprovider, deftreating, deflist, defward); cboProvider.SelectByIEN(defprovider); cboTreating.SelectByIEN(deftreating); cboTeam.SelectByIEN(deflist); cboWard.SelectByIEN(defward); radListSource.SetFocus; end; procedure TfrmOptionsPatientSelection.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(SELECTION_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(SELECTION_LIMIT, tagnum); if tagnum <> INVALID_DAYS then Tag := tagnum; ShowDisplay(txtVisitStart); end; FStartEntered := false; end; procedure TfrmOptionsPatientSelection.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(SELECTION_LIMIT, tagnum); Tag := tagnum; end; end; SetFocus; if Button = btNext then tagnum := Tag + 1 else tagnum := Tag - 1; Text := Hint; DateLimits(SELECTION_LIMIT, tagnum); Tag := tagnum; ShowDisplay(txtVisitStop); end; FStopEntered := false; end; procedure TfrmOptionsPatientSelection.btnOKClick(Sender: TObject); var StartDays, StopDays, mon, tues, wed, thurs, fri, sat, sun: integer; PLSource, PLSort: Char; prov, spec, team, ward: integer; begin StartDays := txtVisitStart.Tag; StopDays := txtVisitStop.Tag; mon := cboMonday.ItemIEN; tues := cboTuesday.ItemIEN; wed := cboWednesday.ItemIEN; thurs := cboThursday.ItemIEN; fri := cboFriday.ItemIEN; sat := cboSaturday.ItemIEN; sun := cboSunday.ItemIEN; rpcSetClinicDefaults(StartDays, StopDays, mon, tues, wed, thurs, fri, sat, sun); case radListSource.ItemIndex of 0: PLSource := 'P'; 1: PLSource := 'S'; 2: PLSource := 'T'; 3: PLSource := 'W'; 4: PLSource := 'C'; 5: PLSource := 'M'; else PLSource := 'P'; end; if radAlphabetical.Checked then PLSort := 'A' else if radRoomBed.Checked then PLSort := 'R' else if radAppointmentDate.Checked then PLSort := 'P' else if radSource.Checked then PLSort := 'S' else PLSort := 'T'; prov := cboProvider.ItemIEN; spec := cboTreating.ItemIEN; team := cboTeam.ItemIEN; ward := cboWard.ItemIEN; rpcSetPtListDefaults(PLSource, PLSort, prov, spec, team, ward); ResetDfltSort; end; procedure TfrmOptionsPatientSelection.txtVisitStartExit(Sender: TObject); begin with txtVisitStart do if Text = '' then begin Text := 'T-1'; Hint := 'T-1'; spnVisitStartClick(self, btNext); end; TextExit(txtVisitStart, FStartEntered, SELECTION_LIMIT); end; procedure TfrmOptionsPatientSelection.txtVisitStopExit(Sender: TObject); begin with txtVisitStop do if Text = '' then begin Text := 'T-1'; Hint := 'T-1'; spnVisitStopClick(self, btNext); end; TextExit(txtVisitStop, FStopEntered, SELECTION_LIMIT); end; procedure TfrmOptionsPatientSelection.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 TfrmOptionsPatientSelection.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 TfrmOptionsPatientSelection.cboProviderExit(Sender: TObject); begin with (Sender as TORComboBox) do if ItemIndex < 0 then Text := ''; end; procedure TfrmOptionsPatientSelection.radListSourceClick(Sender: TObject); begin if radListSource.ItemIndex = 4 then begin if radRoomBed.Checked then radAlphabetical.Checked := true; radRoomBed.Enabled := false; radAppointmentDate.Enabled := true; end else begin if radAppointmentDate.Checked then radAlphabetical.Checked := true; radAppointmentDate.Enabled := false; radRoomBed.Enabled := true; end; if radListSource.ItemIndex = 5 then begin radSource.Enabled := true; radAppointmentDate.Enabled := true; radRoomBed.Enabled := false; end else radSource.Enabled := false; end; procedure TfrmOptionsPatientSelection.cboMondayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboMonday.ForDataUse(SubSetOfClinics(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.cboTuesdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboTuesday.ForDataUse(SubSetOfClinics(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.cboWednesdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboWednesday.ForDataUse(SubSetOfClinics(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.cboThursdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboThursday.ForDataUse(SubSetOfClinics(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.cboFridayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboFriday.ForDataUse(SubSetOfClinics(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.cboSaturdayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboSaturday.ForDataUse(SubSetOfClinics(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.cboSundayNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboSunday.ForDataUse(SubSetOfClinics(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.cboProviderNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); begin cboProvider.ForDataUse(SubSetOfProviders(StartFrom, Direction)); end; procedure TfrmOptionsPatientSelection.NextControl(Key: Char); begin if Key = #13 then Perform(WM_NextDlgCtl, 0, 0); end; procedure TfrmOptionsPatientSelection.txtVisitStartKeyPress( Sender: TObject; var Key: Char); begin if Key = #13 then begin FStartEntered := true; Perform(WM_NextDlgCtl, 0, 0); end; end; procedure TfrmOptionsPatientSelection.txtVisitStopKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin FStopEntered := true; FProviderSpecial := true; // used to avoid duplicate action on cboProviderKeyUp Perform(WM_NextDlgCtl, 0, 0); end; end; procedure TfrmOptionsPatientSelection.cboProviderKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if not FProviderSpecial then NextControl(Char(Key)); FProviderSpecial := false; end; end.