VistA-cprs/CPRS-Chart/fLabs.pas

5113 lines
193 KiB
Plaintext

unit fLabs;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
fHSplit, StdCtrls, ExtCtrls, ORCtrls, ComCtrls, Grids, Buttons, fLabTest,
fLabTests, fLabTestGroups, ORFn, TeeProcs, TeEngine, Chart, Series, Menus,
uConst, ORDtTmRng, OleCtrls, SHDocVw, Variants, StrUtils, fBase508Form,
VA508AccessibilityManager;
type
TGrdLab508Manager = class(TVA508ComponentManager)
private
function GetTextToSpeak(sg: TCaptionStringGrid): String;
function ToBlankIfEmpty(aString : String) : String;
public
constructor Create; override;
function GetValue(Component: TWinControl): string; override;
function GetItem(Component: TWinControl): TObject; override;
end;
TfrmLabs = class(TfrmHSplit)
popChart: TPopupMenu;
popValues: TMenuItem;
pop3D: TMenuItem;
popZoom: TMenuItem;
N1: TMenuItem;
popCopy: TMenuItem;
popZoomBack: TMenuItem;
popDetails: TMenuItem;
N2: TMenuItem;
calLabRange: TORDateRangeDlg;
dlgWinPrint: TPrintDialog;
N3: TMenuItem;
popPrint: TMenuItem;
Timer1: TTimer;
pnlRightBottom: TPanel;
Memo1: TMemo;
memLab: TRichEdit;
pnlRightTop: TPanel;
bvlHeader: TBevel;
pnlHeader: TORAutoPanel;
lblDateFloat: TLabel;
pnlWorksheet: TORAutoPanel;
chkValues: TCheckBox;
chk3D: TCheckBox;
ragHorV: TRadioGroup;
chkAbnormals: TCheckBox;
ragCorG: TRadioGroup;
chkZoom: TCheckBox;
pnlGraph: TORAutoPanel;
lblGraphInfo: TLabel;
chkGraph3D: TCheckBox;
chkGraphValues: TCheckBox;
chkGraphZoom: TCheckBox;
pnlButtons: TORAutoPanel;
lblMostRecent: TLabel;
lblDate: TVA508StaticText;
cmdNext: TButton;
cmdPrev: TButton;
cmdRecent: TButton;
cmdOld: TButton;
grdLab: TCaptionStringGrid;
pnlChart: TPanel;
lblGraph: TLabel;
lstTestGraph: TORListBox;
chtChart: TChart;
serHigh: TLineSeries;
serLow: TLineSeries;
serTest: TLineSeries;
pnlRightTopHeader: TPanel;
PopupMenu2: TPopupMenu;
Print1: TMenuItem;
Copy1: TMenuItem;
SelectAll1: TMenuItem;
PopupMenu3: TPopupMenu;
Print2: TMenuItem;
Copy2: TMenuItem;
SelectAll2: TMenuItem;
GoToTop1: TMenuItem;
GoToBottom1: TMenuItem;
FreezeText1: TMenuItem;
UnFreezeText1: TMenuItem;
sptHorzRight: TSplitter;
pnlFooter: TORAutoPanel;
lblSpecimen: TLabel;
lblSingleTest: TLabel;
lblFooter: TOROffsetLabel;
lstTests: TORListBox;
lvReports: TCaptionListView;
pnlLefTop: TPanel;
lblReports: TOROffsetLabel;
tvReports: TORTreeView;
pnlLeftBottom: TPanel;
lstQualifier: TORListBox;
lblQualifier: TOROffsetLabel;
lblHeaders: TOROffsetLabel;
lstHeaders: TORListBox;
lblDates: TOROffsetLabel;
lstDates: TORListBox;
Splitter1: TSplitter;
pnlOtherTests: TORAutoPanel;
bvlOtherTests: TBevel;
cmdOtherTests: TButton;
TabControl1: TTabControl;
pnlRightTopHeaderTop: TPanel;
lblHeading: TOROffsetLabel;
chkMaxFreq: TCheckBox;
lblTitle: TOROffsetLabel;
Label1: TLabel;
lblSample: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure DisplayHeading(aRanges: string);
//procedure lstReportsClick(Sender: TObject);
procedure lstHeadersClick(Sender: TObject);
procedure lstDatesClick(Sender: TObject);
procedure cmdOtherTestsClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure cmdNextClick(Sender: TObject);
procedure cmdPrevClick(Sender: TObject);
procedure cmdRecentClick(Sender: TObject);
procedure cmdOldClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure pnlRightResize(Sender: TObject);
procedure chkValuesClick(Sender: TObject);
procedure chk3DClick(Sender: TObject);
procedure ragHorVClick(Sender: TObject);
procedure ragCorGClick(Sender: TObject);
procedure lstTestGraphClick(Sender: TObject);
procedure chkGraphValuesClick(Sender: TObject);
procedure chkGraph3DClick(Sender: TObject);
procedure chkGraphZoomClick(Sender: TObject);
procedure GotoTop1Click(Sender: TObject);
procedure GotoBottom1Click(Sender: TObject);
procedure FreezeText1Click(Sender: TObject);
procedure UnfreezeText1Click(Sender: TObject);
procedure chkZoomClick(Sender: TObject);
procedure chtChartUndoZoom(Sender: TObject);
procedure popCopyClick(Sender: TObject);
procedure popChartPopup(Sender: TObject);
procedure popValuesClick(Sender: TObject);
procedure pop3DClick(Sender: TObject);
procedure popZoomClick(Sender: TObject);
procedure popZoomBackClick(Sender: TObject);
procedure chtChartMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure chtChartClickSeries(Sender: TCustomChart;
Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure chtChartClickLegend(Sender: TCustomChart;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure popDetailsClick(Sender: TObject);
procedure popPrintClick(Sender: TObject);
procedure BeginEndDates(var ADate1, ADate2: TFMDateTime; var ADaysBack: integer);
procedure Timer1Timer(Sender: TObject);
procedure TabControl1Change(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure UpdateRemoteStatus(aSiteID, aStatus: string);
procedure lblDateEnter(Sender: TObject);
procedure LoadTreeView;
procedure LoadListView(aReportData: TStringList);
procedure tvReportsClick(Sender: TObject);
procedure lstQualifierClick(Sender: TObject);
procedure tvReportsKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure tvReportsCollapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
procedure tvReportsExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure lvReportsKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure SelectAll1Click(Sender: TObject);
procedure Print1Click(Sender: TObject);
procedure Copy1Click(Sender: TObject);
procedure Copy2Click(Sender: TObject);
procedure Print2Click(Sender: TObject);
procedure lvReportsCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure lvReportsColumnClick(Sender: TObject; Column: TListColumn);
procedure lvReportsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure sptHorzRightCanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
procedure Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
procedure SelectAll2Click(Sender: TObject);
procedure chkMaxFreqClick(Sender: TObject);
procedure PopupMenu3Popup(Sender: TObject);
procedure grdLabTopLeftChanged(Sender: TObject);
private
{ Private declarations }
SortIdx1, SortIdx2, SortIdx3: Integer;
grdLab508Manager : TGrdLab508Manager;
procedure AlignList;
procedure HGrid(griddata: TStrings);
procedure VGrid(griddata: TStrings);
procedure FillGrid(agrid: TStringGrid; aitems: TStrings);
procedure GridComments(aitems: TStrings);
procedure FillComments(amemo: TRichEdit; aitems:TStrings);
procedure GetInterimGrid(adatetime: TFMDateTime; direction: integer);
procedure WorksheetChart(test: string; aitems: TStrings);
procedure GetStartStop(var start, stop: string; aitems: TStrings);
procedure GraphChart(test: string; aitems: TStrings);
procedure GraphList(griddata: TStrings);
procedure ProcessNotifications;
procedure PrintLabGraph;
procedure GoRemoteOld(Dest: TStringList; AItem, AReportID: Int64; AQualifier, ARpc, AHSType, ADaysBack, ASection: string; ADate1, ADate2: TFMDateTime);
procedure GoRemote(Dest: TStringList; AItem: string; AQualifier, ARpc: string; AHSTag: string; AHDR: string; aFHIE: string);
procedure ShowTabControl;
procedure HideTabControl;
procedure ChkBrowser;
procedure CommonComponentVisible(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12: Boolean);
public
procedure ClearPtData; override;
function AllowContextChange(var WhyNot: string): Boolean; override;
procedure DisplayPage; override;
procedure SetFontSize(NewFontSize: Integer); override;
function FMToDateTime(FMDateTime: string): TDateTime;
procedure RequestPrint; override;
//procedure ExtlstReportsClick(Sender: TObject; Ext: boolean);
end;
var
frmLabs: TfrmLabs;
uFormat: integer;
uPrevReportNode: TTreeNode;
uDate1, uDate2: Tdatetime;
tmpGrid: TStringList;
uLabLocalReportData: TStringList; //Storage for Local report data
uLabRemoteReportData: TStringList; //Storage for Remote lab query
uUpdateStat: boolean; //flag turned on when remote status is being updated
uScreenSplitLoc: Integer; //location of user changed split - sptHorzRight Bar
uTreeStrings: TStrings;
uReportInstruction: String; //User Instructions
uColChange: string; //determines when column widths have changed
uQualifier: string;
uReportType: string;
uSortOrder: string;
uMaxOcc: string;
UpdatingLvReports: Boolean; //Currently updating lvReports
uColumns: TStringList;
uNewColumn: TListColumn;
uLocalReportData: TStringList; //Storage for Local report data
uRemoteReportData: TStringList; //Storage for status of Remote data
uQualifierType: Integer;
uHState: string;
uFirstSort: Integer;
uSecondSort: Integer;
uThirdSort: Integer;
ulvSelectOn: boolean; //flag turned on when multiple items in lvReports control have been selected
implementation
uses uCore, rLabs, rCore, rCover, rOrders, fLabPrint, fFrame, fRptBox, Printers, fReportsPrint,
clipbrd, rReports, rGraphs, activex, mshtml, VA508AccessibilityRouter, uReports,
VAUtils;
const
QT_OTHER = 0;
QT_MOSTRECENT = 1;
QT_DATERANGE = 2;
QT_IMAGING = 3;
QT_NUTR = 4;
QT_PROCEDURES = 19;
QT_SURGERY = 28;
QT_HSCOMPONENT = 5;
QT_HSWPCOMPONENT = 6;
CT_LABS = 9; // ID for Labs tab used by frmFrame
TX_NOREPORT = 'No report is currently selected.';
TX_NOREPORT_CAP = 'No Report Selected';
ZOOM_PERCENT = 99; // padding for inflating margins
HTML_PRE = '<html><head><style>' + CRLF +
'PRE {font-size:8pt;font-family: "Courier New", "monospace"}' + CRLF +
'</style></head><body><pre>';
HTML_POST = CRLF + '</pre></body></html>';
{$R *.DFM}
var
uFrozen: Boolean;
uGraphingActivated: Boolean;
uRemoteCount: Integer;
uHTMLDoc: string;
uReportRPC: string;
uHTMLPatient: ANSIstring;
uEmptyImageList: TImageList;
uRptID: String;
uDirect: String;
ColumnToSort: Integer;
ColumnSortForward: Boolean;
procedure TfrmLabs.RequestPrint;
var
aID : integer;
begin
aID := 0;
if CharAt(uRPTID,2) =':' then
aID := strToInt(piece(uRPTID,':',1));
if (aID = 0) and (CharAt(uRPTID,3) =':') then
aID := StrToInt(piece(uRptID,':',1));
if uReportType = 'M' then
begin
InfoBox(TX_NOREPORT, TX_NOREPORT_CAP, MB_OK);
Exit;
end;
if (uReportType = 'V') and (length(piece(uHState,';',2)) > 0) then
begin
if lvReports.Items.Count < 1 then
begin
InfoBox('There are no items to be printed.', 'No Items to Print', MB_OK);
Exit;
end;
if lvReports.SelCount < 1 then
begin
InfoBox('Please select one or more items from the list to be printed.', 'No Items Selected', MB_OK);
Exit;
end;
end;
{if (uReportType = 'G') and GraphFormActive then
with GraphForm do
begin
if (lvwItemsTop.SelCount < 1) and (lvwItemsBottom.SelCount < 1) then
begin
InfoBox('There are no items graphed.', 'No Items to Print', MB_OK);
Exit;
end
else
begin
mnuPopGraphPrintClick(mnuPopGraphPrint);
Exit;
end;
end; }
if uQualifierType = QT_DATERANGE then
begin // = 2
if lstQualifier.ItemIndex < 0 then
begin
InfoBox('Please select from one of the Date Range items before printing', 'Incomplete Information', MB_OK);
end
else
PrintReports(uRptID, piece(uRemoteType,'^',4));
end
else
if uQualifierType = 0 then
begin
if aID = 0 then InfoBox(TX_NOREPORT, TX_NOREPORT_CAP, MB_OK);
case aID of
1: begin
InfoBox('Unable to print ''Most Recent'' report.', 'No Print Available', MB_OK);
end;
2: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
3: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
4: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
5: begin
InfoBox('Unable to print ''Worksheet'' report.', 'No Print Available', MB_OK);
end;
6: begin
if chtChart.Visible then PrintLabGraph;
end;
8: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
9: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
10: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
20: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
21: begin
PrintLabs(IntToStr(aID), piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
end;
end
else
PrintLabs(uRptID, piece(uRemoteType,'^',4), lstDates.ItemIEN);
end;
procedure TfrmLabs.FormCreate(Sender: TObject);
var
aList: TStrings;
begin
inherited;
LabRowObjects := TLabRowObject.Create;
PageID := CT_LABS;
uFrozen := False;
aList := TStringList.Create;
FastAssign(rpcGetGraphSettings, aList);
uGraphingActivated := aList.Count > 0;
aList.Free;
uRemoteCount := 0;
tmpGrid := TStringList.Create;
uLabLocalReportData := TStringList.Create;
uLabRemoteReportData := TStringList.Create;
uColumns := TStringList.Create;
uTreeStrings := TStringList.Create;
uEmptyImageList := TImageList.Create(Self);
uEmptyImageList.Width := 0;
uLocalReportData := TStringList.Create;
uRemoteReportData := TStringList.Create;
uPrevReportNode := tvReports.Items.GetFirstNode;
tvReports.Selected := uPrevReportNode;
if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 4;
lblSingleTest.Caption := '';
lblSpecimen.Caption := '';
SerTest.GetHorizAxis.ExactDateTime := true;
SerTest.GetHorizAxis.Increment := DateTimeStep[dtOneMinute];
grdLab508Manager := TGrdLab508Manager.Create;
amgrMain.ComponentManager[grdLab] := grdLab508Manager;
memo1.Visible := false;
end;
procedure TfrmLabs.UpdateRemoteStatus(aSiteID, aStatus: string);
var
j: integer;
s: string;
c: boolean;
begin
if uUpdateStat = true then exit; //uUpdateStat also looked at in fFrame
uUpdateStat := true;
for j := 0 to frmFrame.lstCIRNLocations.Items.Count - 1 do
begin
s := frmFrame.lstCIRNLocations.Items[j];
c := frmFrame.lstCIRNLocations.checked[j];
if piece(s, '^', 1) = aSiteID then
begin
frmFrame.lstCIRNLocations.Items[j] := pieces(s, '^', 1, 3) + '^' + aStatus;
frmFrame.lstCIRNLocations.checked[j] := c;
end;
end;
uUpdateStat := false;
end;
function TfrmLabs.AllowContextChange(var WhyNot: string): Boolean;
var
i: integer;
begin
Result := inherited AllowContextChange(WhyNot); // sets result = true
if Timer1.Enabled = true then
case BOOLCHAR[frmFrame.CCOWContextChanging] of
'1': begin
WhyNot := 'A remote data query in progress will be aborted.';
Result := False;
end;
'0': if WhyNot = 'COMMIT' then
begin
with RemoteSites.SiteList do for i := 0 to Count - 1 do
if TRemoteSite(Items[i]).Selected then
if Length(TRemoteSite(Items[i]).LabRemoteHandle) > 0 then
begin
TRemoteSite(Items[i]).ReportClear;
TRemoteSite(Items[i]).LabQueryStatus := '-1^Aborted';
TabControl1.OnChange(nil);
end;
Timer1.Enabled := false;
Result := True;
end;
end;
end;
procedure TfrmLabs.ClearPtData;
begin
inherited ClearPtData;
Timer1.Enabled := False;
memLab.Lines.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
TabControl1.Tabs.Clear;
HideTabControl;
tmpGrid.Clear;
lvReports.SmallImages := uEmptyImageList;
uLocalReportData.Clear;
uRemoteReportData.Clear;
with grdLab do
begin
RowCount := 1;
ColCount := 1;
Cells[0, 0] := '';
end;
end;
procedure TfrmLabs.DisplayPage;
var
i: integer;
{OrigSelection: integer;
OrigDateIEN: Int64;
OrigDateItemID: Variant;
OrigReportCat: TTreeNode; }
begin
inherited DisplayPage;
frmFrame.mnuFilePrint.Tag := CT_LABS;
frmFrame.mnuFilePrint.Enabled := True;
frmFrame.mnuFilePrintSetup.Enabled := True;
memLab.SelStart := 0;
uHTMLPatient := '<DIV align left>'
+ '<TABLE width="75%" border="0" cellspacing="0" cellpadding="1">'
+ '<TR valign="bottom" align="left">'
+ '<TD nowrap><B>Patient: ' + Patient.Name + '</B></TD>'
+ '<TD nowrap><B>' + Patient.SSN + '</B></TD>'
+ '<TD nowrap><B>Age: ' + IntToStr(Patient.Age) + '</B></TD>'
+ '</TR></TABLE></DIV><HR>';
//the preferred method would be to use headers and footers
//so this is just an interim solution.
if InitPage then
begin
Splitter1.Visible := false;
pnlLeftBottom.Visible := false;
uColChange := '';
uMaxOcc := '';
LoadTreeView;
end;
if InitPatient and not (CallingContext = CC_NOTIFICATION) then
begin
uColChange := '';
if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 4;
tvReports.Selected := tvReports.Items.GetFirstNode;
tvReportsClick(self);
end;
if InitPatient and not (CallingContext = CC_NOTIFICATION) then
begin
uColChange := '';
lstQualifier.Clear;
//tvProcedures.Items.Clear;
//lblProcTypeMsg.Visible := FALSE;
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
lvReports.Columns.Clear;
lblTitle.Caption := '';
lvReports.Caption := '';
Splitter1.Visible := false;
pnlLeftBottom.Visible := false;
memLab.Parent := pnlRightBottom;
memLab.Align := alClient;
memLab.Clear;
uReportInstruction := '';
uLocalReportData.Clear;
for i := 0 to RemoteSites.SiteList.Count - 1 do
TRemoteSite(RemoteSites.SiteList.Items[i]).ReportClear;
//pnlRightTop.Height := lblTitle.Height + TabControl1.Height;
StatusText('');
with tvReports do
if Items.Count > 0 then
begin
tvReports.Selected := tvReports.Items.GetFirstNode;
tvReportsClick(self);
end;
end;
case CallingContext of
CC_INIT_PATIENT: if not InitPatient then
begin
if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 4;
tvReports.Selected := tvReports.Items.GetFirstNode;
tvReportsClick(self);
lvReports.SmallImages := uEmptyImageList;
lstQualifier.Clear;
//tvProcedures.Items.Clear;
//lblProcTypeMsg.Visible := FALSE;
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
Splitter1.Visible := false;
pnlLeftBottom.Visible := false;
with tvReports do
if Items.Count > 0 then
begin
tvReports.Selected := tvReports.Items.GetFirstNode;
tvReportsClick(self);
end;
end;
CC_NOTIFICATION: ProcessNotifications;
//This corrects the reload of the labs when switching back to the tab.
{This code was causing the processing of Lab notifications to display
the wrong set of labs for a given notification the 1st notification
after selecting/switching patients. Upon checking the problem that
this code was trying to solve, we found that the problem no longer
exists, which may be a result of subsequent changes for similar
issues found during development/testing of V28 (CQ 18267, 18268)
CC_CLICK: if not InitPatient then
begin
//Clear our local variables
OrigReportCat := nil;
OrigDateIEN := -1;
OrigSelection := -1;
OrigDateItemID := '';
//What was last selected before they switched tabs.
if tvReports.Selected <> nil then OrigReportCat := tvReports.Selected;
if lstDates.ItemIEN > 0 then OrigDateIEN := lstDates.ItemIEN;
if lvReports.Selected <> nil then OrigSelection := lvReports.Selected.Index;
if lstQualifier.ItemID <> '' then OrigDateItemID := lstQualifier.ItemID;
//Load the tree and select the last selected
if OrigReportCat <> nil then begin
tvReports.Select(OrigReportCat);
tvReportsClick(self);
end;
//Did they click on a date (lstDates box)
if OrigDateIEN > -1 then begin
lstDates.SelectByIEN(OrigDateIEN);
lstDatesClick(self);
end;
//Did they click on a date (lstQualifier)
if OrigDateItemID <> '' then begin
lstQualifier.SelectByID(OrigDateItemID);
lstQualifierClick(self);
end;
//Did they click on a lab
if OrigSelection > -1 then begin
lvReports.Selected := lvReports.Items[OrigSelection];
lvReportsSelectItem(self, lvReports.Selected, true);
end;
end; }
end;
end;
procedure TfrmLabs.SetFontSize(NewFontSize: Integer);
begin
inherited SetFontSize(NewFontSize);
FormResize(self);
end;
procedure TfrmLabs.LoadListView(aReportData: TStringList);
var
j,k,aErr: integer;
aTmpAray: TStringList;
aColCtr, aCurCol, aCurRow, aColID: integer;
x,y,z,c,aSite: string;
ListItem: TListItem;
begin
aSite := '';
aErr := 0;
ListItem := nil;
case uQualifierType of
QT_HSCOMPONENT:
begin // = 5
if (length(piece(uHState,';',2)) > 0) then
begin
with lvReports do
begin
ViewStyle := vsReport;
for j := 0 to aReportData.Count - 1 do
begin
if piece(aReportData[j],'^',1) = '-1' then //error condition, most likely remote call
continue;
ListItem := Items.Add;
aSite := piece(aReportData[j],'^',1);
ListItem.Caption := piece(aSite,';',1);
for k := 2 to uColumns.Count do
begin
ListItem.SubItems.Add(piece(aReportData[j],'^',k));
end;
end;
if aReportData.Count = 0 then
begin
uReportInstruction := '<No Data Available>';
memLab.Lines.Clear;
memLab.Lines.Add(uReportInstruction);
end
else
memLab.Lines.Clear;
end;
end;
end;
QT_HSWPCOMPONENT:
begin // = 6
if (length(piece(uHState,';',2)) > 0) then //and (chkText.Checked = false) then
begin
aTmpAray := TStringList.Create;
aCurRow := 0;
aCurCol := 0;
aColCtr := 9;
aTmpAray.Clear;
with lvReports do
begin
for j := 0 to aReportData.Count - 1 do
begin
x := aReportData[j];
aColID := StrToIntDef(piece(x,'^',1),-1);
if aColID < 0 then //this is an error condition most likely an incompatible remote call
continue;
if aColID > (uColumns.Count - 1) then
begin
aErr := 1;
continue; //extract is out of sync with columns defined in 101.24
end;
if aColID < aColCtr then
begin
if aTmpAray.Count > 0 then
begin
if aColCtr = 1 then
begin
ListItem := Items.Add;
aSite := piece(aTmpAray[j],'^',1);
ListItem.Caption := piece(aSite,';',1);
ListItem.SubItems.Add(IntToStr(aCurRow) + ':' + IntToStr(aCurCol));
end
else
begin
c := aTmpAray[0];
if piece(uColumns.Strings[aCurCol],'^',4) = '1' then
c := c + '...';
z := piece(c,'^',1);
y := copy(c, (pos('^', c)), 9999);
if pos('^',y) > 0 then
begin
while pos('^',y) > 0 do
begin
y := copy(y, (pos('^', y)+1), 9999);
z := z + '^' + y;
end;
ListItem.SubItems.Add(z);
end
else
begin
ListItem.SubItems.Add(y);
end;
end;
LabRowObjects.Add(aSite, IntToStr(aCurRow) + ':' + IntToStr(aCurCol), uColumns.Strings[aCurCol], aTmpAray);
aTmpAray.Clear;
end;
aColCtr := 0;
aCurCol := aColID;
aCurRow := aCurRow + 1;
end
else
if aColID = aCurCol then
begin
z := '';
y := piece(x,'^',2);
if length(y) > 0 then z := y;
y := copy(x, (pos('^', x)+1), 9999);
if pos('^',y) > 0 then
begin
while pos('^',y) > 0 do
begin
y := copy(y, (pos('^', y)+1), 9999);
z := z + '^' + y;
end;
aTmpAray.Add(z);
end
else
begin
aTmpAray.Add(y);
end;
continue;
end;
if aTmpAray.Count > 0 then
begin
if aColCtr = 1 then
begin
ListItem := Items.Add;
aSite := piece(aTmpAray[0],'^',1);
ListItem.Caption := piece(aSite,';',1);
ListItem.SubItems.Add(IntToStr(aCurRow) + ':' + IntToStr(aCurCol));
end
else
begin
c := aTmpAray[0];
if piece(uColumns.Strings[aCurCol],'^',4) = '1' then
c := c + '...';
ListItem.SubItems.Add(c);
end;
LabRowObjects.Add(aSite, IntToStr(aCurRow) + ':' + IntToStr(aCurCol), uColumns.Strings[aCurCol], aTmpAray);
aTmpAray.Clear;
end;
aCurCol := aColID;
Inc(aColCtr);
y := '';
for k := 2 to 10 do
if length(piece(x,'^',k)) > 0 then
begin
if length(y) > 0 then y := y + '^' + piece(x,'^',k)
else y := y + piece(x,'^',k);
end;
aTmpAray.Add(y);
if aColCtr > 0 then
while aColCtr < aCurCol do
begin
ListItem.SubItems.Add('');
Inc(aColCtr);
end;
end;
if aTmpAray.Count > 0 then
begin
if aColCtr = 1 then
begin
ListItem := Items.Add;
aSite := piece(aTmpAray[0],'^',1);
ListItem.Caption := piece(aSite,';',1);
ListItem.SubItems.Add(IntToStr(aCurRow) + ':' + IntToStr(aCurCol));
end
else
begin
c := aTmpAray[0];
if piece(uColumns.Strings[aCurCol],'^',4) = '1' then
c := c + '...';
ListItem.SubItems.Add(c);
end;
LabRowObjects.Add(aSite, IntToStr(aCurRow) + ':' + IntToStr(aCurCol), uColumns.Strings[aCurCol], aTmpAray);
aTmpAray.Clear;
end;
end;
aTmpAray.Free;
end;
end;
end;
if aErr = 1 then
if User.HasKey('XUPROGMODE') then
ShowMsg('Programmer message: One or more Column ID''s in file 101.24 do not match ID''s coded in extract routine');
end;
procedure TfrmLabs.DisplayHeading(aRanges: string);
var
x,x1,x2,y,z,DaysBack: string;
d1,d2: TFMDateTime;
begin
with lblTitle do
begin
x := '';
if tvReports.Selected = nil then
tvReports.Selected := tvReports.Items.GetFirstNode;
if tvReports.Selected.Parent <> nil then
x := tvReports.Selected.Parent.Text + ' ' + tvReports.Selected.Text
else
x := tvReports.Selected.Text;
x1 := '';
x2 := '';
if (uReportType <> 'M') and (not(uRptID = '1:MOST RECENT')) then
begin
if CharAt(aRanges, 1) = 'd' then
begin
if length(piece(aRanges,';',2)) > 0 then
begin
x2 := ' Max/site:' + piece(aRanges,';',2);
aRanges := piece(aRanges,';',1);
end;
DaysBack := Copy(aRanges, 2, Length(aRanges));
if DaysBack = '' then DaysBack := '7';
if DaysBack = '0' then
aRanges := 'T' + ';T'
else
if Copy(aRanges, 2, 1) = 'T' then
aRanges := DaysBack + ';T'
else
aRanges := 'T-' + DaysBack + ';T';
end;
if length(piece(aRanges,';',1)) > 0 then
begin
d1 := ValidDateTimeStr(piece(aRanges,';',1),'');
d2 := ValidDateTimeStr(piece(aRanges,';',2),'');
y := FormatFMDateTime('mmm dd,yyyy',d1);
if Copy(y,8,2) = '18' then y := 'EARLIEST RESULT';
z := FormatFMDateTime('mmm dd,yyyy',d2);
x1 := ' [From: ' + y + ' to ' + z + ']';
end;
if length(piece(aRanges,';',3)) > 0 then
x2 := ' Max/site:' + piece(aRanges,';',3);
case uQualifierType of
QT_DATERANGE:
x := x + x1;
QT_HSCOMPONENT:
x := x + x1 + x2;
QT_HSWPCOMPONENT:
x := x + x1 + x2;
QT_IMAGING:
x := x + x1 + x2;
0:
x := x + x1;
end;
end;
if piece(uRemoteType, '^', 9) = '1' then x := x + ' <<ONLY REMOTE DATA INCLUDED IN REPORT>>';
Caption := x;
end;
lvReports.Caption := x;
end;
procedure TfrmLabs.AlignList;
begin
lblReports.Top := 0;
lstDates.Height := pnlLeft.Height div 3 - (lblDates.Height div 2);
lstDates.Top := pnlLeft.Height - lstDates.Height;
lblDates.Top := lstDates.Top - lblDates.Height;
lstQualifier.Height := pnlLeft.Height div 3 - (lblQualifier.Height div 2);
lstQualifier.Top := pnlLeft.Height - lstQualifier.Height;
lblQualifier.Top := lstQualifier.Top - lblQualifier.Height;
pnlOtherTests.Top := lblDates.Top - pnlOtherTests.Height;
lstHeaders.Height := pnlLeft.Height div 3 - (lblHeaders.Height * 3);
lstHeaders.Top := lblDates.Top - lstHeaders.Height;
lblHeaders.Top := lstHeaders.Top - lblHeaders.Height;
lstDates.Repaint;
lstHeaders.Repaint;
lstQualifier.Repaint;
end;
procedure TfrmLabs.LoadTreeView;
var
i: integer;
currentNode, parentNode, grandParentNode, gtGrandParentNode: TTreeNode;
x: string;
addchild, addgrandchild, addgtgrandchild: boolean;
begin
tvReports.Items.Clear;
memLab.Clear;
uHTMLDoc := '';
//WebBrowser1.Navigate('about:blank'); **Browser Remove**
//tvProcedures.Items.Clear;
//lblProcTypeMsg.Visible := FALSE;
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
uTreeStrings.Clear;
//lblTitle.Caption := '';
lvReports.Caption := '';
ListLabReports(uTreeStrings);
addchild := false;
addgrandchild := false;
addgtgrandchild := false;
parentNode := nil;
grandParentNode := nil;
gtGrandParentNode := nil;
currentNode := nil;
for i := 0 to uTreeStrings.Count - 1 do
begin
x := uTreeStrings[i];
if UpperCase(Piece(x,'^',1))='[PARENT END]' then
begin
if addgtgrandchild = true then
begin
currentNode := gtgrandParentNode;
addgtgrandchild := false;
end
else
if addgrandchild = true then
begin
currentNode := grandParentNode;
addgrandchild := false;
end
else
begin
currentNode := parentNode;
addchild := false;
end;
continue;
end;
if UpperCase(Piece(x,'^',1))='[PARENT START]' then
begin
if addgtgrandchild = true then
currentNode := tvReports.Items.AddChildObject(gtGrandParentNode,Piece(x,'^',3),MakeReportTreeObject(Pieces(x,'^',2,21)))
else
if addgrandchild = true then
begin
currentNode := tvReports.Items.AddChildObject(grandParentNode,Piece(x,'^',3),MakeReportTreeObject(Pieces(x,'^',2,21)));
addgtgrandchild := true;
gtgrandParentNode := currentNode;
end
else
if addchild = true then
begin
currentNode := tvReports.Items.AddChildObject(parentNode,Piece(x,'^',3),MakeReportTreeObject(Pieces(x,'^',2,21)));
addgrandchild := true;
grandParentNode := currentNode;
end
else
begin
currentNode := tvReports.Items.AddObject(currentNode,Piece(x,'^',3),MakeReportTreeObject(Pieces(x,'^',2,21)));
parentNode := currentNode;
addchild := true;
end;
end
else
if addchild = false then
begin
currentNode := tvReports.Items.AddObject(currentNode,Piece(x,'^',2),MakeReportTreeObject(x));
parentNode := currentNode;
end
else
begin
if addgtgrandchild = true then
currentNode := tvReports.Items.AddChildObject(gtGrandParentNode,Piece(x,'^',2),MakeReportTreeObject(x))
else
if addgrandchild = true then
currentNode := tvReports.Items.AddChildObject(grandParentNode,Piece(x,'^',2),MakeReportTreeObject(x))
else
currentNode := tvReports.Items.AddChildObject(parentNode,Piece(x,'^',2),MakeReportTreeObject(x));
end;
end;
if tvReports.Items.Count > 0 then begin
tvReports.Selected := tvReports.Items.GetFirstNode;
tvReportsClick(self);
end;
end;
{procedure TfrmLabs.lstReportsClick(Sender: TObject);
begin
ExtlstReportsClick(Sender, false);
end; }
{procedure TfrmLabs.ExtlstReportsClick(Sender: TObject; Ext: boolean);
var
i,iCat: integer;
Rpt: string;
begin
inherited;
uRemoteCount := 0;
Timer1.Enabled := False;
Rpt := lstReports.Items[lstReports.ItemIndex];
uReportType := Piece(Rpt,'^',4);
uReportRPC := UpperCase(Piece(Rpt,'^',6));
if length(Piece(Rpt,'^',5)) > 0 then
iCat := StrToInt(Piece(Rpt,'^',5))
else
iCat := 0;
if uReportType = '' then uReportType := 'R';
StatusText('');
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
lstHeaders.Clear;
TabControl1.Visible := false;
if Piece(Rpt,'^',3) = '1' then
if TabControl1.Tabs.Count > 1 then
TabControl1.Visible := true;
for i := 0 to RemoteSites.SiteList.Count - 1 do
TRemoteSite(RemoteSites.SiteList.Items[i]).LabClear;
if uFrozen = True then memo1.visible := False;
case lstReports.ItemIEN of
1: begin // Most Recent
CommonComponentVisible(false,false,false,false,false,true,true,false,true,false,false,false);
pnlButtons.Visible := true;
pnlWorksheet.Visible := false;
pnlGraph.Visible := false;
memLab.Align := alBottom;
memLab.Height := pnlLeft.Height div 5;
grdLab.Align := alClient;
memLab.Clear;
//if uReportType = 'H' then **Browser Remove**
//begin
//WebBrowser1.Navigate('about:blank');
//WebBrowser1.Align := alBottom;
//WebBrowser1.Height := pnlLeft.Height div 5;
//WebBrowser1.Visible := true;
//WebBrowser1.BringToFront;
//memLab.Visible := false;
//end
//else
//begin
//WebBrowser1.Visible := false;
//WebBrowser1.SendToBack;
//memLab.Visible := true;
//memLab.BringToFront;
//end;
FormResize(self);
cmdRecentClick(self);
uPrevReportIndex := lstReports.ItemIndex;
end;
4: begin // Interim for Selected Tests
if uPrevReportIndex <> lstReports.ItemIndex then
begin
lstTests.Clear;
lblSpecimen.Caption := '';
end;
if not Ext then SelectTests(Font.Size);
if lstTests.Items.Count > 0 then
begin
CommonComponentVisible(false,false,true,true,true,false,false,false,true,false,false,false);
memLab.Clear;
chkBrowser;
FormResize(self);
RedrawActivate(memLab.Handle);
lstDatesClick(self);
//lstQualifierClick(self);
if not Ext then cmdOtherTests.SetFocus;
cmdOtherTests.Default := true;
end
else lstReports.ItemIndex := uPrevReportIndex;
end;
5: begin // Worksheet
if uPrevReportIndex <> lstReports.ItemIndex then
begin
lstTests.Clear;
lblSpecimen.Caption := '';
end;
if not Ext then SelectTestGroups(Font.Size);
if lstTests.Items.Count > 0 then
begin
CommonComponentVisible(false,false,true,true,true,true,true,false,false,false,false,false);
chtChart.Visible := true;
memLab.Visible := false;
pnlButtons.Visible := false;
pnlWorksheet.Visible := true;
pnlGraph.Visible := false;
lstTestGraph.Width := 97;
ragCorG.ItemIndex := 0;
FormResize(self);
lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value, "**" = Comments on Specimen';
//chkZoom.Checked := false;
//chkZoomClick(self);
//lstDatesClick(self);
lstQualifierClick(self);
if not Ext then cmdOtherTests.SetFocus;
cmdOtherTests.Default := true;
end
else lstReports.ItemIndex := uPrevReportIndex;
end;
6: begin // Graph
// do if graphing is activiated
if uGraphingActivated then
begin
memLab.Clear;
chkBrowser;
FormResize(self);
memLab.Align := alClient;
CommonComponentVisible(false,false,false,false,false,false,false,false,false,false,false,false);
RedrawActivate(memLab.Handle);
StatusText('');
memLab.Lines.Insert(0, ' ');
memLab.Lines.Insert(1, 'Graphing activated');
memLab.SelStart := 0;
frmFrame.mnuToolsGraphingClick(self); // make it just lab tests ??
//lstReports.ItemIndex := uPrevReportIndex;
end
else // otherwise, do lab graph
begin
if uPrevReportIndex <> lstReports.ItemIndex then
begin
lblSingleTest.Caption := '';
lblSpecimen.Caption := '';
end;
if not Ext then SelectTest(Font.Size);
if (length(lblSingleTest.Caption) > 2) and (length(lblSpecimen.Caption) > 2) then
begin
CommonComponentVisible(false,false,true,true,true,true,false,false,true,false,false,false);
pnlChart.Visible := true;
chtChart.Visible := true;
pnlButtons.Visible := false;
pnlWorksheet.Visible := false;
pnlGraph.Visible := true;
memLab.Height := pnlRight.Height div 5;
memLab.Clear;
//if uReportType = 'H' then **Browser Remove**
//begin
//WebBrowser1.Visible := true;
//WebBrowser1.Navigate('about:blank');
//WebBrowser1.Height := pnlRight.Height div 5;
//WebBrowser1.BringToFront;
//memLab.Visible := false;
//end
//else
//begin
//WebBrowser1.Visible := false;
//WebBrowser1.SendToBack;
//memLab.Visible := true;
//memLab.BringToFront;
//end;
lstTestGraph.Items.Clear;
lstTestGraph.Width := 0;
FormResize(self);
RedrawActivate(memLab.Handle);
lblFooter.Caption := '';
chkGraphZoom.Checked := false;
chkGraphZoomClick(self);
chkGraph3DClick(self);
chkGraphValuesClick(self);
//lstDatesClick(self);
lstQualifierClick(self);
if not Ext then cmdOtherTests.SetFocus;
cmdOtherTests.Default := true;
end
else
lstReports.ItemIndex := uPrevReportIndex;
end;
end
else // case
begin
//added to deal with other reports from file 101.24
memLab.Clear;
chkBrowser;
FormResize(self);
memLab.Align := alClient;
case iCat of
//Categories of reports:
//0:Fixed
//1:Fixed w/Dates
//2:Fixed w/Headers
//3:Fixed w/Dates & Headers
//4:Specialized
//5:Graphic
0: begin
CommonComponentVisible(false,false,false,false,false,false,false,false,false,false,false,false);
StatusText('Retrieving data...');
GoRemoteOld(uLabRemoteReportData,lstReports.ItemIEN,1,'',uReportRPC,'0','9999','1',0,0);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, Piece(Rpt,'^',1), '0', '9999', '1', 0, 0, uReportRPC);
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
RedrawActivate(memLab.Handle);
StatusText('');
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
if uReportType = 'R' then
uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST
else
uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text;
//if WebBrowser1.Visible = true then WebBrowser1.Navigate('about:blank'); **Browser Remove**
end;
1: begin
CommonComponentVisible(false,false,false,true,true,false,false,false,false,false,false,false);
memLab.Repaint;
//lstDatesClick(self);
lstQualifierClick(self);
end;
2: begin
CommonComponentVisible(true,true,false,false,false,false,false,false,false,false,false,false);
lstHeaders.Clear;
StatusText('Retrieving data...');
GoRemoteOld(uLabRemoteReportData,lstReports.ItemIEN,1,'',uReportRPC,'0','9999','1',0,0);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, Piece(Rpt,'^',1), '0', '9999', '1', 0, 0, uReportRPC);
if uLabLocalReportData.Count > 0 then
begin
TabControl1.OnChange(nil);
if lstHeaders.Items.Count > 0 then lstHeaders.ItemIndex := 0;
end;
RedrawActivate(memLab.Handle);
StatusText('');
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
if uReportType = 'R' then
uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST
else
uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text;
//if WebBrowser1.Visible = true then WebBrowser1.Navigate('about:blank'); **Browser Remove**
end;
3: begin
CommonComponentVisible(true,true,false,true,true,false,false,false,true,false,false,false);
//lstDatesClick(self);
lstQualifierClick(self);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
end;
end;
end;
end;
uPrevReportIndex := lstReports.ItemIndex;
DisplayHeading('');
end; }
procedure TfrmLabs.lstHeadersClick(Sender: TObject);
var
Current, Desired: integer;
begin
inherited;
if uFrozen = True then memo1.visible := False;
Current := SendMessage(memLab.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
Desired := lstHeaders.ItemIEN;
SendMessage(memLab.Handle, EM_LINESCROLL, 0, Desired - Current - 1);
end;
procedure TfrmLabs.lstQualifierClick(Sender: TObject);
var
MoreID: String; //Restores MaxOcc value
aRemote, aHDR, aFHIE, aMax: string;
i: integer;
tmpList: TStringList;
daysback: integer;
date1, date2: TFMDateTime;
today: TDateTime;
begin
inherited;
if uFrozen = True then
begin
memo1.visible := False;
memo1.TabStop := False;
end;
if (lstDates.ItemID = 'S') then
begin
with calLabRange do
begin
if Execute then
if Length(TextOfStart) > 0 then
if Length(TextOfStop) > 0 then
begin
lstDates.ItemIndex := lstDates.Items.Add(RelativeStart + ';' +
RelativeStop + U + TextOfStart + ' to ' + TextOfStop);
DisplayHeading('');
end
else
lstDates.ItemIndex := -1
else
lstDates.ItemIndex := -1
else
lstDates.ItemIndex := -1;
end;
end;
today := FMToDateTime(floattostr(FMToday));
if lstDates.ItemIEN > 0 then
begin
daysback := lstDates.ItemIEN;
date1 := FMToday;
If daysback = 1 then
date2 := DateTimeToFMDateTime(today)
Else
date2 := DateTimeToFMDateTime(today - daysback);
end
else
BeginEndDates(date1,date2,daysback);
date1 := date1 + 0.2359;
MoreID := ';' + Piece(uQualifier,';',3);
if chkMaxFreq.checked = true then
begin
MoreID := '';
SetPiece(uQualifier,';',3,'');
end;
aMax := piece(uQualifier,';',3);
if (CharAt(lstQualifier.ItemID,1) = 'd')
and (length(aMax)>0)
and (StrToInt(aMax)<101) then
MoreID := ';101';
aRemote := piece(uRemoteType,'^',1);
aHDR := piece(uRemoteType,'^',7);
aFHIE := piece(uRemoteType,'^',8);
SetPiece(uRemoteType,'^',5,lstQualifier.ItemID);
//tvProcedures.Items.Clear;
//lblProcTypeMsg.Visible := FALSE;
uHTMLDoc := '';
{if uReportType = 'H' then **Browser Remove**
begin
WebBrowser1.Visible := true;
WebBrowser1.TabStop := true;
WebBrowser1.Navigate('about:blank');
WebBrowser1.BringToFront;
memLab.Visible := false;
memLab.TabStop := false;
end
else
begin
WebBrowser1.Visible := false;
WebBrowser1.TabStop := false; }
memLab.Visible := true;
memLab.TabStop := true;
memLab.BringToFront;
RedrawActivate(memLab.Handle);
//end; }
uLocalReportData.Clear;
uRemoteReportData.Clear;
for i := 0 to RemoteSites.SiteList.Count - 1 do
TRemoteSite(RemoteSites.SiteList.Items[i]).ReportClear;
uRemoteCount := 0;
if aHDR = '1' then
DisplayHeading(lstQualifier.ItemID)
else
DisplayHeading(lstQualifier.ItemID + MoreID);
if lstQualifier.ItemID = 'ds' then
begin
with calLabRange do
if Not (Execute) then
begin
lstQualifier.ItemIndex := -1;
Exit;
end
else if (Length(TextOfStart) > 0) and (Length(TextOfStop) > 0) then
begin
if (Length(piece(uRemoteType,'^',6)) > 0) and (StrToInt(piece(uRemoteType,'^',6)) > 0) then
if abs(FMDateTimeToDateTime(FMDateStart) - FMDateTimeToDateTime(FMDateStop)) > StrToInt(piece(uRemoteType,'^',6)) then
begin
InfoBox('The Date Range selected is greater than the' + CRLF + 'Maximum Days Allowed of ' + piece(uRemoteType,'^',6)
+ ' for this report.', 'No Report Generated',MB_OK);
lstQualifier.ItemIndex := -1;
exit;
end;
lstQualifier.ItemIndex := lstQualifier.Items.Add(RelativeStart +
';' + RelativeStop + U + TextOfStart + ' to ' + TextOfStop);
DisplayHeading(lstQualifier.ItemID + MoreID);
SetPiece(uRemoteType,'^',5,lstQualifier.ItemID);
end
else
begin
lstQualifier.ItemIndex := -1;
InfoBox('Invalid Date Range entered. Please try again','Invalid Date/time entry',MB_OK);
if (Execute) and (Length(TextOfStart) > 0) and (Length(TextOfStop) > 0) then
begin
lstQualifier.ItemIndex := lstQualifier.Items.Add(RelativeStart +
';' + RelativeStop + U + TextOfStart + ' to ' + TextOfStop);
DisplayHeading(lstQualifier.ItemID + MoreID);
SetPiece(uRemoteType,'^',5,lstQualifier.ItemID);
end
else
begin
lstQualifier.ItemIndex := -1;
InfoBox('No Report Generated!','Invalid Date/time entry',MB_OK);
exit;
end;
end;
end;
if (CharAt(lstQualifier.ItemID,1) = 'd') and (Length(piece(uRemoteType,'^',6)) > 0) and (StrToInt(piece(uRemoteType,'^',6)) > 0) then
if ExtractInteger(lstQualifier.ItemID) > (StrToInt(piece(uRemoteType,'^',6))) then
begin
InfoBox('The Date Range selected is greater than the' + CRLF + 'Maximum Days Allowed of ' + piece(uRemoteType,'^',6)
+ ' for this report.', 'No Report Generated',MB_OK);
lstQualifier.ItemIndex := -1;
exit;
end;
Screen.Cursor := crHourGlass;
uReportInstruction := #13#10 + 'Retrieving data...';
memLab.Lines.Add(uReportInstruction);
{if WebBrowser1.Visible = true then **Browser Remove**
begin
uHTMLDoc := HTML_PRE + uReportInstruction + HTML_POST;
WebBrowser1.Navigate('about:blank');
end; }
case uQualifierType of
QT_HSCOMPONENT:
begin // = 5
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
memLab.Lines.Clear;
LabRowObjects.Clear;
if ((aRemote = '1') or (aRemote = '2')) then
GoRemote(uRemoteReportData, 'L:' + uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState, aHDR, aFHIE);
if not(piece(uRemoteType, '^', 9) = '1') then
if (length(piece(uHState,';',2)) > 0) then
begin
if not(aRemote = '2') then
LoadReportText(uLocalReportData, 'L:' + uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState);
LoadListView(uLocalReportData);
end
else
begin
if ((aRemote = '1') or (aRemote = '2')) then
ShowTabControl;
LoadReportText(uLocalReportData, 'L:' + uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState);
if uLocalReportData.Count < 1 then
begin
uReportInstruction := '<No Report Available>';
memLab.Lines.Add(uReportInstruction);
end
else
begin
QuickCopy(uLocalReportData,memLab);
TabControl1.OnChange(nil);
end;
end;
end;
QT_HSWPCOMPONENT:
begin // = 6
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
LabRowObjects.Clear;
memLab.Lines.Clear;
if ((aRemote = '1') or (aRemote = '2')) then
begin
Screen.Cursor := crDefault;
GoRemote(uRemoteReportData, 'L:' + uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState, aHDR, aFHIE);
end;
if not(piece(uRemoteType, '^', 9) = '1') then
if (length(piece(uHState,';',2)) > 0) then
begin
if not(aRemote = '2') then
LoadReportText(uLocalReportData, 'L:' + uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState);
LoadListView(uLocalReportData);
end
else
begin
{if ((aRemote = '1') or (aRemote = '2')) then
ShowTabControl;}
if not (aRemote = '2') then
begin
LoadReportText(uLocalReportData, 'L:' + uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState);
if uLocalReportData.Count < 1 then
begin
uReportInstruction := '<No Report Available>';
memLab.Lines.Add(uReportInstruction);
end
else
QuickCopy(uLocalReportData,memLab);
end;
end;
end
else
begin
Screen.Cursor := crDefault;
//GoRemote(uRemoteReportData, uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState, aHDR, aFHIE);
//**************************************************************************
case StrToInt(Piece(uRptID,':',1)) of
21: begin // Cumulative
lstHeaders.Clear;
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving data for cumulative report...');
GoRemoteOld(uLabRemoteReportData,0,2,'',uReportRPC,'',IntToStr(daysback),'',date1,date2);
TabControl1.OnChange(nil);
Cumulative(uLabLocalReportData, Patient.DFN, daysback, date1, date2, uReportRPC);
if uLabLocalReportData.Count > 0 then
begin
TabControl1.OnChange(nil);
if lstHeaders.Items.Count > 0 then lstHeaders.ItemIndex := 0;
end;
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
end;
3: begin // Interim
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving data for interim report...');
GoRemoteOld(uLabRemoteReportData,0,3,'',uReportRPC,'','','',date1,date2);
TabControl1.OnChange(nil);
Interim(uLabLocalReportData, Patient.DFN, date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No results for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end;
4: begin // Interim for Selected Tests
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
try
StatusText('Retrieving data for selected tests...');
FastAssign(InterimSelect(Patient.DFN, date1, date2, lstTests.Items), uLabLocalReportData);
if uLabLocalReportData.Count > 0 then
QuickCopy(uLabLocalReportData,memLab)
else
memLab.Lines.Add('<No results for selected tests in this date range.>');
memLab.SelStart := 0;
finally
//tmpList.Free;
end;
end;
5: begin // Worksheet
chtChart.BottomAxis.Automatic := true;
chkZoom.Checked := false;
//chkZoomClick(self);
chkAbnormals.Checked := false;
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
grdLab.Align := alClient;
StatusText('Retrieving data for worksheet...');
FastAssign(Worksheet(Patient.DFN, date1, date2,
Piece(lblSpecimen.Caption, '^', 1), lstTests.Items), tmpGrid);
if ragHorV.ItemIndex = 0 then
HGrid(tmpGrid)
else
VGrid(tmpGrid);
GraphList(tmpGrid);
GridComments(tmpGrid);
ragCorGClick(self);
end;
6: begin // Graph
if not uGraphingActivated then
begin
chtChart.BottomAxis.Automatic := true;
chkGraphZoom.Checked := false;
chkGraphZoomClick(self);
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
tmpList := TStringList.Create;
try
StatusText('Retrieving data for graph...');
FastAssign(GetChart(Patient.DFN, date1, date2,
Piece(lblSpecimen.Caption, '^', 1),
Piece(lblSingleTest.Caption, '^', 1)), tmpList);
if tmpList.Count > 1 then
begin
chtChart.Visible := true;
GraphChart(lblSingleTest.Caption, tmpList);
chtChart.ZoomPercent(ZOOM_PERCENT);
for i := strtoint(Piece(tmpList[0], '^', 1)) + 1 to tmpList.Count - 1
do memLab.Lines.Add(tmpList[i]);
if memLab.Lines.Count < 2 then
memLab.Lines.Add('<No comments on specimens.>');
memLab.SelStart := 0;
lblGraph.Visible := false;
end
else
begin
lblGraph.Left := chtChart.Left + ((chtChart.Width - lblGraph.Width) div 2);
lblGraph.Top := 2;
lblGraph.Visible := true;
if Piece(lblSpecimen.Caption, '^', 1) = '0' then
pnlChart.Caption := '<No results can be graphed for ' +
Piece(lblSingleTest.Caption, '^', 2) + ' in this date range.> '
+ 'Results may be available, but cannot be graphed. Please try an alternate view.'
else
pnlChart.Caption := '<No results can be graphed for ' +
Piece(lblSingleTest.Caption, '^', 2)
+ ' (' + Piece(lblSpecimen.Caption, '^', 2) +
') in this date range.> '
+ 'Results may be available, but cannot be graphed. Please try an alternate view.';
chtChart.Visible := false;
end;
finally
tmpList.Free;
end;
end;
end;
9: begin // Micro
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving microbiology data...');
GoRemoteOld(uLabRemoteReportData,0,4,'',uReportRPC,'','','',date1,date2);
TabControl1.OnChange(nil);
Micro(uLabLocalReportData, Patient.DFN, date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No microbiology results for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end;
10: begin // Lab Status
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving lab status data...');
GoRemoteOld(uLabRemoteReportData,9,1,'',uReportRPC,'',IntToStr(daysback),'',date1,date2);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, 'L:' + '9', '', IntToStr(daysback),'',
date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No laboratory orders for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end;
else begin //Anything Else
lstHeaders.Clear;
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving lab data...');
GoRemoteOld(uLabRemoteReportData, 1, 1, '', uReportRPC, '', IntToStr(daysback), '', date1, date2);
//GoRemoteOld(uLabRemoteReportData, StrToInt(Piece(uRptID,'^',1)), 1, '', uReportRPC, '', IntToStr(daysback), '', date1, date2);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, 'L:' + Piece(uRptID,'^',1), '',
IntToStr(daysback), '', date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No data for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end;
end;
//**************************************************************************
{LoadReportText(uLocalReportData, uRptID, lstQualifier.ItemID + MoreID, uReportRPC, uHState);
if TabControl1.TabIndex < 1 then
QuickCopy(uLocalReportData,memLab); }
end;
end;
Screen.Cursor := crDefault;
StatusText('');
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
{if WebBrowser1.Visible = true then **Browser Remove**
begin
if uReportType = 'R' then
uHTMLDoc := HTML_PRE + uLocalReportData.Text + HTML_POST
else
uHTMLDoc := uHTMLPatient + uLocalReportData.Text;
WebBrowser1.Navigate('about:blank');
end;
}
end;
procedure TfrmLabs.lblDateEnter(Sender: TObject);
begin
inherited;
amgrMain.AccessText[lblDate] := 'Date Collected '+lblDate.Caption;
end;
procedure TfrmLabs.lstDatesClick(Sender: TObject);
var
tmpList: TStringList;
daysback: integer;
date1, date2: TFMDateTime;
today: TDateTime;
i: integer;
x,x1,x2,aID: string;
begin
inherited;
uRemoteCount := 0;
if uFrozen = True then memo1.visible := False;
Screen.Cursor := crHourGlass;
DisplayHeading('');
uHTMLDoc := '';
//Rpt := lstReports.Items[lstReports.ItemIndex];
//uReportRPC := UpperCase(Piece(Rpt,'^',6));
chkBrowser;
if (lstDates.ItemID = 'S') then
begin
with calLabRange do
begin
if Execute then
if Length(TextOfStart) > 0 then
if Length(TextOfStop) > 0 then
begin
lstDates.ItemIndex := lstDates.Items.Add(RelativeStart + ';' +
RelativeStop + U + TextOfStart + ' to ' + TextOfStop);
DisplayHeading('');
end
else
lstDates.ItemIndex := -1
else
lstDates.ItemIndex := -1
else
lstDates.ItemIndex := -1;
end;
end;
today := FMToDateTime(floattostr(FMToday));
if lstDates.ItemIEN > 0 then
begin
daysback := lstDates.ItemIEN;
date1 := FMToday;
If daysback = 1 then
date2 := DateTimeToFMDateTime(today)
Else
date2 := DateTimeToFMDateTime(today - daysback);
end
else
BeginEndDates(date1,date2,daysback);
date1 := date1 + 0.2359;
uHTMLDoc := '';
//WebBrowser1.Navigate('about:blank'); **Browser Remove**
aID := piece(uRptID,':',1);
if aID = '21' then
begin // Cumulative
lstHeaders.Clear;
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving data for cumulative report...');
GoRemoteOld(uLabRemoteReportData,21,2,'',uReportRPC,'',IntToStr(daysback),'',date1,date2);
TabControl1.OnChange(nil);
Cumulative(uLabLocalReportData, Patient.DFN, daysback, date1, date2, uReportRPC);
if uLabLocalReportData.Count > 0 then
begin
TabControl1.OnChange(nil);
if lstHeaders.Items.Count > 0 then lstHeaders.ItemIndex := 0;
end;
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
end
else if aID = '3' then
begin // Interim
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving data for interim report...');
GoRemoteOld(uLabRemoteReportData,3,3,'',uReportRPC,'','','',date1,date2);
TabControl1.OnChange(nil);
Interim(uLabLocalReportData, Patient.DFN, date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No results for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end
else if aID = '4' then
begin // Interim for Selected Tests
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
try
StatusText('Retrieving data for selected tests...');
FastAssign(InterimSelect(Patient.DFN, date1, date2, lstTests.Items), uLabLocalReportData);
if uLabLocalReportData.Count > 0 then
QuickCopy(uLabLocalReportData,memLab)
else
memLab.Lines.Add('<No results for selected tests in this date range.>');
memLab.SelStart := 0;
finally
//tmpList.Free;
end;
end
else if aID = '5' then
begin // Worksheet
chtChart.BottomAxis.Automatic := true;
chkZoom.Checked := false;
//chkZoomClick(self);
chkAbnormals.Checked := false;
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
grdLab.Align := alClient;
StatusText('Retrieving data for worksheet...');
FastAssign(Worksheet(Patient.DFN, date1, date2,
Piece(lblSpecimen.Caption, '^', 1), lstTests.Items), tmpGrid);
if ragHorV.ItemIndex = 0 then
HGrid(tmpGrid)
else
VGrid(tmpGrid);
GraphList(tmpGrid);
GridComments(tmpGrid);
ragCorGClick(self);
end
else if aID = '6' then
begin // Graph
if not uGraphingActivated then
begin
chtChart.BottomAxis.Automatic := true;
chkGraphZoom.Checked := false;
chkGraphZoomClick(self);
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
tmpList := TStringList.Create;
try
StatusText('Retrieving data for graph...');
FastAssign(GetChart(Patient.DFN, date1, date2,
Piece(lblSpecimen.Caption, '^', 1),
Piece(lblSingleTest.Caption, '^', 1)), tmpList);
if tmpList.Count > 1 then
begin
chtChart.Visible := true;
GraphChart(lblSingleTest.Caption, tmpList);
chtChart.ZoomPercent(ZOOM_PERCENT);
for i := strtoint(Piece(tmpList[0], '^', 1)) + 1 to tmpList.Count - 1
do memLab.Lines.Add(tmpList[i]);
if memLab.Lines.Count < 2 then
memLab.Lines.Add('<No comments on specimens.>');
memLab.SelStart := 0;
lblGraph.Visible := false;
end
else
begin
lblGraph.Left := chtChart.Left + ((chtChart.Width - lblGraph.Width) div 2);
lblGraph.Top := 2;
lblGraph.Visible := true;
if Piece(lblSpecimen.Caption, '^', 1) = '0' then
pnlChart.Caption := '<No results can be graphed for ' +
Piece(lblSingleTest.Caption, '^', 2) + ' in this date range.> '
+ 'Results may be available, but cannot be graphed. Please try an alternate view.'
else
pnlChart.Caption := '<No results can be graphed for ' +
Piece(lblSingleTest.Caption, '^', 2)
+ ' (' + Piece(lblSpecimen.Caption, '^', 2) +
') in this date range.> '
+ 'Results may be available, but cannot be graphed. Please try an alternate view.';
chtChart.Visible := false;
end;
finally
tmpList.Free;
end;
end;
end
else if aID = '9' then
begin // Micro
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving microbiology data...');
GoRemoteOld(uLabRemoteReportData,4,4,'',uReportRPC,'','','',date1,date2);
TabControl1.OnChange(nil);
Micro(uLabLocalReportData, Patient.DFN, date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No microbiology results for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end
else if aID = '10' then
begin // Lab Status
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving lab status data...');
GoRemoteOld(uLabRemoteReportData,10,1,'',uReportRPC,'',IntToStr(daysback),'',date1,date2);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, 'L:10', '', IntToStr(daysback),'',
date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No laboratory orders for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end
else begin //Anything Else
lstHeaders.Clear;
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
StatusText('Retrieving lab data...');
//GoRemoteOld(uLabRemoteReportData, StrToInt(Piece(uRptID,'^',1)), 1, '', uReportRPC, '', IntToStr(daysback), '', date1, date2);
GoRemoteOld(uLabRemoteReportData, 1, 1, '', uReportRPC, '', IntToStr(daysback), '', date1, date2);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, 'L:' + Piece(uRptID,'^',1), '',
IntToStr(daysback), '', date1, date2, uReportRPC);
if uLabLocalReportData.Count < 1 then
uLabLocalReportData.Add('<No data for this date range.>');
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
end;
if uReportType = 'R' then
uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST
else
uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text;
Screen.Cursor := crDefault;
x := lstDates.DisplayText[lstDates.ItemIndex];
x1 := piece(x,' ',1);
x2 := piece(x,' ',2);
if not(uRptID = '1:MOST RECENT') and (Uppercase(Copy(x1,1,1)) = 'T') and (Uppercase(Copy(x2,1,1)) = 'T') then
DisplayHeading(piece(x,' ',1) + ';' + piece(x,' ',2))
else
DisplayHeading('d' + lstDates.ItemID);
StatusText('');
end;
procedure TfrmLabs.cmdOtherTestsClick(Sender: TObject);
begin
inherited;
tvReportsClick(self);
end;
procedure TfrmLabs.GraphList(griddata: TStrings);
var
i, j: integer;
ok: boolean;
testname, testnum, testnum1, line: string;
begin
lstTestGraph.Clear;
for i := 0 to lstTests.Items.Count - 1 do
begin
testnum := Piece(lstTests.Items[i], '^', 1);
testname := Piece(lstTests.Items[i], '^', 2);
ok := false;
for j := strtoint(Piece(griddata[0], '^', 4)) + 1 to strtointdef(Piece(griddata[0], '^', 5), 0) do
begin
testnum1 := Piece(griddata[j - 1], '^', 1);
if testnum1 = testnum then
begin
ok := true;
line := testnum + '^' + testname + ' (' + MixedCase(Piece(griddata[j - 1], '^', 2)) + ')^';
line := line + Pieces(griddata[j - 1], '^', 3, 6);
lstTestGraph.Items.Add(line);
end;
end;
if not ok then lstTestGraph.Items.Add(lstTests.Items[i]);
end;
end;
procedure TfrmLabs.grdLabTopLeftChanged(Sender: TObject);
var
i: integer;
begin
inherited;
if piece(uRptID,':',1) ='1' then
begin
for i := 2 to grdLab.RowCount do
grdLab.Cells[0,i] := '';
if not(grdLab.TopRow = 1) then
grdLab.Cells[0,grdLab.TopRow] := lblDate.Caption;
end;
end;
procedure TfrmLabs.HGrid(griddata: TStrings);
var
testcnt, datecnt, datacnt, linecnt, offset, x, y, i: integer;
DisplayDateTime: string;
begin
offset := 0;
testcnt := strtoint(Piece(griddata[offset], '^', 1));
datecnt := strtoint(Piece(griddata[offset], '^', 2));
datacnt := strtoint(Piece(griddata[offset], '^', 3));
linecnt := testcnt + datecnt + datacnt;
if chkAbnormals.Checked and (linecnt > 0) then
begin
offset := linecnt + 1;
testcnt := strtoint(Piece(griddata[offset], '^', 1));
datecnt := strtoint(Piece(griddata[offset], '^', 2));
datacnt := strtoint(Piece(griddata[offset], '^', 3));
linecnt := testcnt + datecnt + datacnt;
end;
with grdLab do
begin
if testcnt = 0 then ColCount := 3 else ColCount := testcnt + 2;
if datecnt = 0 then RowCount := 2 else RowCount := datecnt + 1;
DefaultColWidth := ResizeWidth( BaseFont, MainFont, 60);
ColWidths[0] := ResizeWidth( BaseFont, MainFont, 80);
FixedCols := 2;
FixedRows := 1;
for y := 0 to RowCount - 1 do
for x := 0 to ColCount - 1 do
Cells[x, y] := '';
Cells[0, 0] := 'Date/Time';
Cells[1, 0] := 'Specimen';
for i := 1 to testcnt do
begin
Cells[i + 1, 0] := Piece(griddata[i + offset], '^', 3);
end;
if datecnt = 0 then
begin
Cells[0, 1] := 'no results';
for x := 1 to ColCount - 1 do
Cells[x, 1] := '';
end;
for i := testcnt + 1 to testcnt + datecnt do
begin
//------------------------------------------------------------------------------------------
//v27.2 - RV - PSI-05-118 / Remedy HD0000000123277 - don't show "00:00" if no time present
if LabPatchInstalled then // Requires lab patch in const "PSI_05_118"
begin
DisplayDateTime := Piece(griddata[i + offset], '^', 2);
if length(DisplayDateTime) > 7 then
Cells[0, i - testcnt] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(DisplayDateTime))
else if length(DisplayDateTime) > 0 then
Cells[0, i - testcnt] := FormatFMDateTime('mm/dd/yy',MakeFMDateTime(DisplayDateTime))
else
Cells[0, i - testcnt] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(Piece(griddata[i + offset], '^', 2)));
end
else // If no lab patch in const "PSI_05_118", continue as is
begin
Cells[0, i - testcnt] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(Piece(griddata[i + offset], '^', 2)));
end;
//------------------------------------------------------------------------------------------
Cells[1, i - testcnt] := MixedCase(Piece(griddata[i + offset], '^', 4)) + ' ' + Piece(griddata[i + offset], '^', 5);
end;
for i := testcnt + datecnt + 1 to linecnt do
begin
y := strtoint(Piece(griddata[i + offset], '^', 1));
x := strtoint(Piece(griddata[i + offset], '^', 2)) + 1;
Cells[x, y] := Piece(griddata[i + offset], '^', 3) + ' ' + Piece(griddata[i + offset], '^', 4);
end;
end;
end;
procedure TfrmLabs.VGrid(griddata: TStrings);
var
testcnt, datecnt, datacnt, linecnt, offset, x, y, i: integer;
DisplayDateTime: string;
begin
offset := 0;
testcnt := strtoint(Piece(griddata[offset], '^', 1));
datecnt := strtoint(Piece(griddata[offset], '^', 2));
datacnt := strtoint(Piece(griddata[offset], '^', 3));
linecnt := testcnt + datecnt + datacnt;
if chkAbnormals.Checked and (linecnt > 0) then
begin
offset := linecnt + 1;
testcnt := strtoint(Piece(griddata[offset], '^', 1));
datecnt := strtoint(Piece(griddata[offset], '^', 2));
datacnt := strtoint(Piece(griddata[offset], '^', 3));
linecnt := testcnt + datecnt + datacnt;
end;
with grdLab do
begin
if datecnt = 0 then ColCount := 2 else ColCount := datecnt + 1;
if testcnt = 0 then RowCount := 3 else RowCount := testcnt + 2;
DefaultColWidth := ResizeWidth( BaseFont, MainFont, 80);
ColWidths[0] := ResizeWidth( BaseFont, MainFont, 60);
FixedCols := 1;
FixedRows := 2;
for y := 0 to RowCount - 1 do
for x := 0 to ColCount - 1 do
Cells[x, y] := '';
Cells[0, 0] := 'Date/Time';
Cells[0, 1] := 'Specimen';
for i := 1 to testcnt do
begin
Cells[0, i + 1] := Piece(griddata[i + offset], '^', 3);
end;
if datecnt = 0 then
begin
Cells[1, 0] := 'no results';
for x := 1 to RowCount - 1 do
Cells[x, 1] := '';
end;
for i := testcnt + 1 to testcnt + datecnt do
begin
//------------------------------------------------------------------------------------------
if LabPatchInstalled then // Requires lab patch in const "PSI_05_118"
begin
DisplayDateTime := Piece(griddata[i + offset], '^', 2);
if length(DisplayDateTime) > 7 then
Cells[i - testcnt, 0] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(DisplayDateTime))
else if length(DisplayDateTime) > 0 then
Cells[i - testcnt, 0] := FormatFMDateTime('mm/dd/yy',MakeFMDateTime(DisplayDateTime))
else
Cells[i - testcnt, 0] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(Piece(griddata[i + offset], '^', 2)));
end
else // If no lab patch in const "PSI_05_118", continue as is
begin
Cells[i - testcnt, 0] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(Piece(griddata[i + offset], '^', 2)));
end;
//------------------------------------------------------------------------------------------
Cells[i - testcnt, 1] := MixedCase(Piece(griddata[i + offset], '^', 4)) + ' ' + Piece(griddata[i + offset], '^', 5);
end;
for i := testcnt + datecnt + 1 to linecnt do
begin
x := strtoint(Piece(griddata[i + offset], '^', 1));
y := strtoint(Piece(griddata[i + offset], '^', 2)) + 1;
Cells[x, y] := Piece(griddata[i + offset], '^', 3) + ' ' + Piece(griddata[i + offset], '^', 4);
end;
end;
end;
procedure TfrmLabs.GridComments(aitems: TStrings);
var
i, start: integer;
begin
start := strtointdef(Piece(aitems[0], '^', 5), 1);
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
for i := start to aitems.Count - 1 do
memLab.Lines.Add(aitems[i]);
if (memLab.Lines.Count = 0) and (aitems.Count > 1) then
memLab.Lines.Add('<No comments on specimens.>');
memLab.SelStart := 0;
end;
procedure TfrmLabs.FormDestroy(Sender: TObject);
var
i: integer;
aColChange: string;
begin
inherited;
if length(uColChange) > 0 then
begin
aColChange := '';
for i := 0 to lvReports.Columns.Count - 1 do
aColChange := aColChange + IntToStr(lvReports.Column[i].width) + ',';
if (Length(aColChange) > 0) and (aColChange <> piece(uColchange,'^',2)) then
SaveColumnSizes(piece(uColChange,'^',1) + '^' + aColChange);
uColChange := '';
end;
RemoteQueryAbortAll;
tmpGrid.free;
uLabLocalReportData.Free;
uLabRemoteReportData.Free;
uTreeStrings.Free;
uEmptyImageList.Free;
uColumns.Free;
uLocalReportData.Free;
uRemoteReportData.Free;
LabRowObjects.Free;
end;
procedure TfrmLabs.FillGrid(agrid: TStringGrid; aitems: TStrings);
var
testcnt, x, y, i: integer;
begin
testcnt := strtoint(Piece(aitems[0], '^', 1));
with agrid do
begin
if testcnt = 0 then RowCount := 3 else RowCount := testcnt + 1;
ColCount := 6;
DefaultColWidth := agrid.Width div ColCount - 2;
ColWidths[0] := 120; //agrid.Width div 6;
ColWidths[1] := agrid.Width div 4; //5
ColWidths[5] := agrid.Width div 7; //5
ColWidths[3] := agrid.Width div 14;//12
ColWidths[4] := agrid.Width div 12;//9
ColWidths[2] := agrid.Width div 5; //agrid.Width - ColWidths[0] - ColWidths[1] - ColWidths[3] - ColWidths[4] - 8;
FixedCols := 0;
FixedRows := 1;
for y := 0 to RowCount - 1 do
for x := 0 to ColCount - 1 do
Cells[x, y] := '';
Cells[0, 0] := 'Collection Date/Time';
Cells[1, 0] := 'Test';
Cells[2, 0] := 'Result / Status';
Cells[3, 0] := 'Flag';
Cells[4, 0] := 'Units';
Cells[5, 0] := 'Ref Range';
for i := 1 to testcnt do
begin
if i = 1 then Cells[0, i] := lblDate.Caption
else Cells[0, i] := '';
Cells[1, i] := Piece(aitems[i], '^', 2);
Cells[2, i] := Piece(aitems[i], '^', 3);
Cells[3, i] := Piece(aitems[i], '^', 4);
Cells[4, i] := Piece(aitems[i], '^', 5);
Cells[5, i] := Piece(aitems[i], '^', 6);
end;
end;
end;
procedure TfrmLabs.FillComments(amemo: TRichEdit; aitems:TStrings);
var
testcnt, i: integer;
specimen, accession, provider: string;
begin
amemo.Lines.Clear;
specimen := Piece(aitems[0], '^', 5);
accession := Piece(aitems[0], '^', 6);
provider := Piece(aitems[0], '^', 7);
amemo.Lines.Add('Specimen: ' + specimen + '; Accession: ' + accession + '; Provider: ' + provider);
testcnt := strtoint(Piece(aitems[0], '^', 1));
for i := testcnt + 1 to aitems.Count - 1 do
amemo.Lines.Add(aitems[i]);
amemo.SelStart := 0;
end;
procedure TfrmLabs.GetInterimGrid(adatetime: TFMDateTime; direction: integer);
var
tmpList: TStringList;
nexton, prevon: boolean;
newest, oldest, DisplayDate, aCollection, aSpecimen, aX: string;
i,ix: integer;
begin
tmpList := TStringList.Create;
GetNewestOldest(Patient.DFN, newest, oldest); //****** PATCH
prevon := true;
aCollection := '';
aSpecimen := '';
aX := '';
lblSample.Caption := '';
lblSample.Color := clBtnFace;
try
FastAssign(InterimGrid(Patient.DFN, adatetime, direction, uFormat), tmpList);
if tmpList.Count > 0 then
begin
lblDateFloat.Caption := Piece(tmpList[0], '^', 3);
uFormat := strtointdef(Piece(tmpList[0], '^', 9), 1);
//------------------------------------------------------------------------------------------
//v27.1 - RV - PSI-05-118 / Remedy HD0000000123277 - don't show "00:00" if no time present
if LabPatchInstalled then // Requires lab patch in const "PSI_05_118"
begin
DisplayDate := Piece(tmpList[0], '^', 3);
if length(DisplayDate) > 7 then
lblDate.Caption := FormatFMDateTime('MMM DD, YYYY hh:nn', strtofloat(DisplayDate))
else if length(DisplayDate) > 0 then
lblDate.Caption := FormatFMDateTime('MMM DD, YYYY', strtofloat(DisplayDate))
else
if length(lblDateFloat.Caption) > 0 then
lblDate.Caption := FormatFMDateTime('MMM DD, YYYY hh:nn', strtofloat(lblDateFloat.Caption));
end
else // If no lab patch in const "PSI_05_118", continue as is
begin
if length(lblDateFloat.Caption) > 0 then
lblDate.Caption := FormatFMDateTime('MMM DD, YYYY hh:nn', strtofloat(lblDateFloat.Caption));
end;
//------------------------------------------------------------------------------------------
if length(lblDateFloat.Caption) < 1
then
begin
lblDateFloat.Caption := FloatToStr(adatetime);
nexton := false;
end
else
begin
nexton := lblDateFloat.Caption <> newest;
prevon := lblDateFloat.Caption <> oldest;
end;
if (not nexton) and (uFormat = 3) then
nexton := true;
if (not prevon) and (uFormat = 2) then
prevon := true;
if Piece(tmpList[0], '^', 2) = 'CH' then
begin
lblSample.Caption := 'Specimen: ' + Piece(tmpList[0], '^', 5);
lblSample.Color := clWindow;
end;
if Piece(tmpList[0], '^', 2) = 'MI' then
begin
for i := 0 to tmpList.Count - 1 do
begin
if i > 5 then break;
if ansiContainsStr(tmpList[i],'Collection sample:') then
begin
ix := 0;
if length(piece(tmpList[i], ':',2)) > 0 then
begin
ix := Length(piece(tmpList[i], ':',2));
if ix > 15 then ix := ix - 15;
end;
aCollection := ' Sample: ' + LeftStr(piece(tmpList[i], ':',2),ix);
end;
end;
for i := 0 to tmpList.Count - 1 do
begin
if i > 5 then break;
if ansiContainsStr(tmpList[i],'Site/Specimen:') then
begin
aSpecimen := 'Specimen: ' + piece(tmpList[i], ':', 2);
end;
end;
aX := aSpecimen + aCollection;
if Length(aX) > 0 then
begin
lblSample.Caption := aX;
lblSample.Color := clWindow;
end;
end;
end
else
begin
lblDateFloat.Caption := '';
lblDate.Caption := '';
nexton := false;
prevon := false;
end;
cmdNext.Enabled := nexton;
cmdRecent.Enabled := nexton;
cmdPrev.Enabled := prevon;
cmdOld.Enabled := prevon;
if cmdOld.Enabled and cmdRecent.Enabled then
lblMostRecent.Visible := false
else
begin
lblMostRecent.Visible := true;
if (not cmdOld.Enabled) and (not cmdRecent.Enabled) then
lblMostRecent.Caption := 'No Lab Data'
else if cmdOld.Enabled then
lblMostRecent.Caption := 'Most Recent Lab Data'
else
lblMostRecent.Caption := 'Oldest Lab Data';
end;
if tmpList.Count > 0 then
begin
if Piece(tmpList[0], '^', 2) = 'CH' then
begin
FillGrid(grdLab, tmpList);
FillComments(memLab, tmpList);
pnlRightTop.Height := pnlRight.Height - (pnlRight.Height div 5);
sptHorzRight.Top := pnlRightTop.Height;
uScreenSplitLoc := sptHorzRight.Top;
pnlRightBottom.Height := pnlLeft.Height div 5;
memLab.Height := pnlLeft.Height div 5;
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
grdLab.Align := alClient;
grdLab.Visible := true;
memLab.Visible := true;
pnlFooter.Height := lblHeading.Height + 5;
pnlFooter.Top := pnlLeft.Height - pnlFooter.Height;
lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value';
lblFooter.Align := alTop;
pnlFooter.Visible := true;
if (grdLab.VisibleRowCount + 1) < grdLab.RowCount then
grdLab.ColWidths[4] := grdLab.ColWidths[4] - 18;
memLab.Align := alClient;
memLab.Repaint;
end;
if Piece(tmpList[0], '^', 2) = 'MI' then
begin
tmpList.Delete(0);
QuickCopy(tmpList, memLab);
memLab.SelStart := 0;
grdLab.Visible := false;
pnlFooter.Visible := false;
sptHorzRight.Visible := true;
TabControl1.Visible := false;
pnlRightTop.Height := pnlHeader.Height;
memLab.Height := pnlRight.Height - (lblHeading.Height + lblTitle.Height + pnlHeader.Height);
pnlRightTop.Visible := true;
memLab.Align := alClient;
memLab.Repaint;
end;
end
else
begin
grdLab.Visible := false;
pnlFooter.Visible := false;
memLab.Align := alClient;
end;
finally
tmpList.Free;
end;
end;
procedure TfrmLabs.cmdNextClick(Sender: TObject);
var
HadFocus: boolean;
begin
inherited;
HadFocus := Screen.ActiveControl = cmdNext;
StatusText('Retrieving next lab data...');
if Length(lblDateFloat.Caption) > 0 then GetInterimGrid(strtofloat(lblDateFloat.Caption), -1);
StatusText('');
if HadFocus then begin
if cmdNext.Enabled then cmdNext.SetFocus
else if cmdPrev.Enabled then cmdPrev.SetFocus
else tvReports.SetFocus;
end;
end;
procedure TfrmLabs.cmdPrevClick(Sender: TObject);
var
HadFocus: boolean;
begin
inherited;
HadFocus := Screen.ActiveControl = cmdPrev;
StatusText('Retrieving previous lab data...');
if Length(lblDateFloat.Caption) > 0 then GetInterimGrid(strtofloat(lblDateFloat.Caption), 1);
StatusText('');
if HadFocus then begin
if cmdPrev.Enabled then cmdPrev.SetFocus
else if cmdNext.Enabled then cmdNext.SetFocus
else tvReports.Setfocus;
end;
end;
procedure TfrmLabs.WorksheetChart(test: string; aitems: TStrings);
function OkFloatValue(value: string): boolean;
var
i, j: integer;
first, second: string;
begin
Result := false;
i := strtointdef(value, -99999);
if i <> -99999 then Result := true
else if pos('.', Copy(Value, Pos('.', Value) + 1, Length(Value))) > 0 then Result := false
else
begin
first := Piece(value, '.', 1);
second := Piece(value, '.', 2);
if length(second) > 0 then
begin
i := strtointdef(first, -99999);
j := strtointdef(second, -99999);
if (i <> -99999) and (j <> -99999) then Result := true;
end
else
begin
i :=strtointdef(first, -99999);
if i <> -99999 then Result := true;
end;
end;
end;
var
datevalue, oldstart, oldend: TDateTime;
labvalue: double;
i, numtest, numcol, numvalues, valuecount: integer;
high, low, start, stop, numspec, value, testcheck, units, specimen, testnum, testorder: string;
begin
if chkZoom.Checked and chtChart.Visible then
begin
oldstart := chtChart.BottomAxis.Minimum;
oldend := chtChart.BottomAxis.Maximum;
chtChart.UndoZoom;
chtChart.BottomAxis.Automatic := false;
chtChart.BottomAxis.Minimum := oldstart;
chtChart.BottomAxis.Maximum := oldend;
end
else
begin
chtChart.BottomAxis.Automatic := true;
end;
chtChart.Visible := true;
valuecount := 0;
testnum := Piece(test, '^', 1);
specimen := Piece(test, '^', 3);
units := Piece(test, '^', 4);
low := Piece(test, '^', 5);
high := Piece(test, '^', 6);
numtest := strtoint(Piece(aitems[0], '^', 1));
numcol := strtoint(Piece(aitems[0], '^', 2));
numvalues := strtoint(Piece(aitems[0], '^', 3));
serHigh.Clear; serLow.Clear; serTest.Clear;
if numtest > 0 then
begin
for i := 1 to numtest do
if testnum = Piece(aitems[i], '^', 2) then
begin
testorder := inttostr(i);
break;
end;
GetStartStop(start, stop, aitems);
if OKFloatValue(high) then
begin
serHigh.AddXY(FMToDateTime(start), strtofloat(high), '',clTeeColor);
serHigh.AddXY(FMToDateTime(stop), strtofloat(high), '',clTeeColor);
end;
if OKFloatValue(low) then
begin
serLow.AddXY(FMToDateTime(start), strtofloat(low), '',clTeeColor);
serLow.AddXY(FMToDateTime(stop), strtofloat(low), '',clTeeColor);
end;
numspec := Piece(specimen, '^', 1);
chtChart.Legend.Color := grdLab.Color;
chtChart.Title.Font.Size := MainFontSize;
chtChart.LeftAxis.Title.Caption := units;
serTest.Title := Piece(test, '^', 2);
serHigh.Title := 'Ref High ' + high;
serLow.Title := 'Ref Low ' + low;
testcheck := testorder;
for i := numtest + numcol + 1 to numtest + numcol + numvalues do
if Piece(aitems[i], '^', 2) = testcheck then
if Piece(aitems[numtest + strtoint(Piece(aitems[i], '^', 1))], '^', 3) = numspec then
begin
value := Piece(aitems[i], '^', 3);
if OkFloatValue(value) then
begin
labvalue := strtofloat(value);
datevalue := FMToDateTime(Piece(aitems[numtest + strtoint(Piece(aitems[i], '^', 1))], '^', 2));
serTest.AddXY(datevalue, labvalue, '', clTeeColor);
inc(valuecount);
end;
end;
end;
if valuecount = 0 then
begin
lblGraph.Left := chtChart.Left + ((chtChart.Width - lblGraph.Width) div 2);
lblGraph.Top := 2;
lblGraph.Visible := true;
if length(Piece(specimen, '^', 2)) > 0 then
pnlChart.Caption := '<No results can be graphed for ' + serTest.Title + ' in this date range.> '
else
pnlChart.Caption := '<No results can be graphed for ' + Piece(test, '^', 2) + ' in this date range.>';
chtChart.Visible := false;
end
else
lblGraph.Visible := false;
if not chkZoom.Checked then
begin
chtChart.UndoZoom;
chtChart.ZoomPercent(ZOOM_PERCENT);
end;
end;
procedure TfrmLabs.GetStartStop(var start, stop: string; aitems: TStrings);
var
numtest, numcol: integer;
begin
numtest := strtoint(Piece(aitems[0], '^', 1));
numcol := strtoint(Piece(aitems[0], '^', 2));
start := Piece(aitems[numtest + 1], '^', 2);
stop := Piece(aitems[numtest + numcol], '^', 2);
end;
procedure TfrmLabs.cmdRecentClick(Sender: TObject);
var
HadFocus: boolean;
begin
inherited;
HadFocus := Screen.ActiveControl = cmdRecent;
StatusText('Retrieving most recent lab data...');
uFormat := 1;
GetInterimGrid(FMToday + 0.2359, 1);
StatusText('');
if HadFocus and cmdPrev.Enabled then cmdPrev.SetFocus;
end;
procedure TfrmLabs.cmdOldClick(Sender: TObject);
var
HadFocus: boolean;
begin
inherited;
HadFocus := Screen.ActiveControl = cmdOld;
StatusText('Retrieving oldest lab data...');
uFormat := 1;
GetInterimGrid(2700101, -1);
if HadFocus and cmdNext.Enabled then cmdNext.SetFocus;
StatusText('');
end;
procedure TfrmLabs.FormResize(Sender: TObject);
//var
//aID: integer;
begin
inherited;
AlignList;
lblHeaders.Height := lblReports.Height;
lblDates.Height := lblReports.Height;
lblHeading.Height := lblReports.Height;
pnlFooter.Height := lblReports.Height + 5;
lblFooter.Height := lblReports.Height;
{aID := 0;
if CharAt(uRPTID,2) =':' then
aID := StrToInt(piece(uRptID,':',1));
if (aID = 0) and (CharAt(uRPTID,3) =':') then
aID := StrToInt(piece(uRptID,':',1)); }
{case lstReports.ItemIEN of }
{case aID of
1: begin // Most Recent
pnlHeader.Align := alTop;
memLab.Height := pnlLeft.Height div 5;
memLab.Top := pnlLeft.Height - pnlFooter.Height - memLab.Height;
memLab.Align := alBottom;
grdLab.Align := alClient;
if tmpGrid.Count > 0 then HGrid(tmpGrid);
if (grdLab.VisibleRowCount + 1) < grdLab.RowCount then
grdLab.ColWidths[4] := grdLab.ColWidths[4] - 18;
pnlFooter.Top := pnlLeft.Height - pnlFooter.Height;
pnlFooter.Align := alBottom;
memLab.Repaint;
pnlRightTop.Height := pnlLeft.Height - (pnlLeft.Height div 5);
//*pnlRightTop.Visible := true;
//*pnlButtons.Visible := true;
//*pnlWorksheet.Visible := false;
//*pnlGraph.Visible := false;
//memLab.Align := alBottom;
sptHorzRight.Visible := true;
pnlRightBottom.Height := pnlLeft.Height div 5;
//memLab.Height := pnlLeft.Height div 5;
//grdLab.Align := alClient;
end;
21: begin // Cumulative
pnlFooter.Top := pnlLeft.Height - pnlFooter.Height;
pnlFooter.Align := alBottom;
lblFooter.Align := alTop;
memLab.Align := alClient;
memLab.Repaint;
end;
3: begin // Interim
pnlFooter.Top := pnlLeft.Height - pnlFooter.Height;
pnlFooter.Align := alBottom;
lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value';
lblFooter.Align := alTop;
memLab.Align := alClient;
memLab.Repaint;
end;
4: begin // Interim for Selected Tests
pnlFooter.Top := pnlLeft.Height - pnlFooter.Height;
pnlFooter.Align := alBottom;
lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value';
lblFooter.Align := alTop;
memLab.Align := alClient;
memLab.Repaint;
end;
5: begin // Worksheet
pnlHeader.Align := alTop;
grdLab.Align := alClient;
ragCorGClick(self);
pnlFooter.Top := pnlLeft.Height - pnlFooter.Height;
pnlFooter.Align := alBottom;
end;
6: begin // Graph
if not uGraphingActivated then
begin
memLab.Height := pnlLeft.Height div 4;
memLab.Align := alBottom;
pnlChart.Top := pnlHeader.Height;
pnlChart.Align := alClient;
memLab.Height := pnlLeft.Height div 4;
memLab.Align := alBottom;
memLab.Repaint;
end;
end;
20: begin // Anatomic Path
memLab.Repaint;
end;
2: begin // Blood Bank
memLab.Repaint;
end;
9: begin // Microbiology
memLab.Repaint;
end;
10: begin // Lab Status
memLab.Repaint;
end;
end; }
end;
procedure TfrmLabs.pnlRightResize(Sender: TObject);
begin
inherited;
pnlRight.Refresh;
lblFooter.Height := lblHeading.Height;
end;
function TfrmLabs.FMToDateTime(FMDateTime: string): TDateTime;
var
x, Year: string;
begin
{ Note: TDateTime cannot store month only or year only dates }
x := FMDateTime + '0000000';
if Length(x) > 12 then x := Copy(x, 1, 12);
if StrToInt(Copy(x, 9, 4)) > 2359 then x := Copy(x,1,7) + '.2359';
Year := IntToStr(17 + StrToInt(Copy(x,1,1))) + Copy(x,2,2);
x := Copy(x,4,2) + '/' + Copy(x,6,2) + '/' + Year + ' ' + Copy(x,9,2) + ':' + Copy(x,11,2);
Result := StrToDateTime(x);
end;
procedure TfrmLabs.chkValuesClick(Sender: TObject);
begin
inherited;
serTest.Marks.Visible := chkValues.Checked;
end;
procedure TfrmLabs.chk3DClick(Sender: TObject);
begin
inherited;
chtChart.View3D := chk3D.Checked;
end;
procedure TfrmLabs.GraphChart(test: string; aitems: TStrings);
var
datevalue: TDateTime;
labvalue: double;
i, numvalues: integer;
high, low, start, stop, value, units, specimen: string;
begin
numvalues := strtoint(Piece(aitems[0], '^', 1));
specimen := Piece(aitems[0], '^', 2);
high := Piece(aitems[0], '^', 3);
low := Piece(aitems[0], '^', 4);
units := Piece(aitems[0], '^', 5);
if numvalues > 0 then
begin
start := Piece(aitems[1], '^', 1);
stop := Piece(aitems[numvalues], '^', 1);
chtChart.Legend.Color := grdLab.Color;
serHigh.Clear; serLow.Clear; serTest.Clear;
if high <> '' then
begin
serHigh.AddXY(FMToDateTime(start), strtofloat(high), '',clTeeColor);
serHigh.AddXY(FMToDateTime(stop), strtofloat(high), '',clTeeColor);
end;
if low <> '' then
begin
serLow.AddXY(FMToDateTime(start), strtofloat(low), '',clTeeColor);
serLow.AddXY(FMToDateTime(stop), strtofloat(low), '',clTeeColor);
end;
//chtChart.Title.Text.Strings[0] := Piece(test, '^', 2) + ' (' + MixedCase(specimen) + ')';
//chtChart.Title.Font.Size := 12;
chtChart.LeftAxis.Title.Caption := units;
serTest.Title := Piece(test, '^', 2) + ' (' + MixedCase(specimen) + ')';
serHigh.Title := 'Ref High ' + high;
serLow.Title := 'Ref Low ' + low;
for i := 1 to numvalues do
begin
value := Piece(aitems[i], '^', 2);
labvalue := strtofloat(value);
datevalue := FMToDateTime(Piece(aitems[i], '^', 1));
serTest.AddXY(datevalue, labvalue, '', clTeeColor);
end;
end;
end;
procedure TfrmLabs.ragHorVClick(Sender: TObject);
begin
inherited;
if ragHorV.ItemIndex = 0 then HGrid(tmpGrid) else VGrid(tmpGrid);
end;
procedure TfrmLabs.ragCorGClick(Sender: TObject);
begin
inherited;
if ragCorG.ItemIndex = 0 then // comments
begin
chkZoom.Enabled := false;
chk3D.Enabled := false;
chkValues.Enabled := false;
pnlChart.Visible:= false;
pnlRightTop.Align := alTop;
pnlRightTop.Height := pnlRight.Height - (pnlRight.Height div 6);
pnlRightBottom.Visible := true;
pnlRightBottom.Align := alClient;
memLab.Align := alClient;
memLab.Visible := true;
grdLab.Align := alClient;
end
else // graph
begin
chkZoom.Enabled := true;
chk3D.Enabled := true;
chkValues.Enabled := true;
chk3DClick(self);
chkValuesClick(self);
memLab.Visible := false;
pnlRightBottom.Visible := false;
pnlRightTop.Align := alClient;
pnlChart.Height := pnlRight.Height div 2;
pnlChart.Top := pnlRight.Height - pnlFooter.Height - pnlChart.Height;
pnlChart.Align := alBottom;
pnlChart.Visible := true;
grdLab.Align := alClient;
if lstTestGraph.Items.Count > 0 then
begin
if lstTestGraph.ItemIndex < 0 then
lstTestGraph.ItemIndex := 0;
lstTestGraphClick(self);
end;
end;
end;
procedure TfrmLabs.lstTestGraphClick(Sender: TObject);
begin
inherited;
WorksheetChart(lstTestGraph.Items[lstTestGraph.ItemIndex], tmpGrid);
end;
procedure TfrmLabs.Print1Click(Sender: TObject);
begin
inherited;
RequestPrint;
end;
procedure TfrmLabs.Copy1Click(Sender: TObject);
var
i,j: integer;
line: string;
ListItem: TListItem;
aText: String;
begin
inherited;
ClipBoard;
aText := '';
for i := 0 to lvReports.Items.Count - 1 do
if lvReports.Items[i].Selected then
begin
ListItem := lvReports.Items[i];
line := '';
for j := 1 to lvReports.Columns.Count - 1 do
begin
if (lvReports.Column[j].Width <> 0) and (j < (ListItem.SubItems.Count + 1)) then
line := line + ' ' + ListItem.SubItems[j-1];
end;
if (length(line) > 0) and (lvReports.Column[0].Width <> 0) then
line := ListItem.Caption + ' ' + line;
if length(aText) > 0 then
aText := aText + CRLF + line
else aText := line;
end;
ClipBoard.Clear;
ClipBoard.AsText := aText;
end;
procedure TfrmLabs.Copy2Click(Sender: TObject);
begin
inherited;
memLab.CopyToClipboard;
end;
procedure TfrmLabs.Print2Click(Sender: TObject);
begin
inherited;
RequestPrint;
end;
procedure TfrmLabs.lvReportsColumnClick(Sender: TObject;
Column: TListColumn);
var
ClickedColumn: Integer;
a1, a2: integer;
s,s1,s2: string;
begin
inherited;
a1 := StrToIntDef(piece(uSortOrder,':',1),0) - 1;
a2 := StrToIntDef(piece(uSortOrder,':',2),0) - 1;
ClickedColumn := Column.Index;
ColumnToSort := Column.Index;
SortIdx1 := StrToIntDef(piece(uColumns[ColumnToSort],'^',9),0);
SortIdx2 := 0;
SortIdx3 := 0;
if a1 > -1 then SortIdx2 := StrToIntDef(piece(uColumns[a1],'^',9),0);
if a2 > -1 then SortIdx3 := StrToIntDef(piece(uColumns[a2],'^',9),0);
if a1 = ColumnToSort then
begin
SortIdx2 := SortIdx3;
SortIdx3 := 0;
end;
if a2 = ColumnToSort then
SortIdx3 := 0;
if ClickedColumn = ColumnToSort then
ColumnSortForward := not ColumnSortForward
else
ColumnSortForward := true;
ColumnToSort := ClickedColumn;
uFirstSort := ColumnToSort;
uSecondSort := a1;
uThirdSort := a2;
lvReports.Hint := '';
if ColumnSortForward = true then
s := 'Sorted forward'
else
s := 'Sorted reverse';
s1 := piece(uColumns[uFirstSort],'^',1);
s2 := '';
if length(piece(s1,' ',2)) > 0 then
s2 := pieces(s1,' ',2,99);
if length(s2) > 0 then s2 := StripSpace(s2);
s := s + ' by ' + piece(s1,' ',1) + ' ' + s2;
if (a1 <> uFirstSort) and (a1 > -1) then
begin
s1 := piece(uColumns[a1], '^', 1);
s2 := '';
if length(piece(s1,' ',2)) > 0 then
s2 := pieces(s1,' ',2,99);
if length(s2) > 0 then s2 := StripSpace(s2);
s := s + ' then by ' + piece(s1,' ',1) + ' ' + s2;
end;
if (a2 <> uFirstSort) and (a2 > -1) then
begin
s1 := piece(uColumns[a2], '^', 1);
s2 := '';
if length(piece(s1,' ',2)) > 0 then
s2 := pieces(s1,' ',2,99);
if length(s2) > 0 then s2 := StripSpace(s2);
s := s + ' then by ' + piece(s1,' ',1) + ' ' + s2;
end;
lvReports.Hint := s;
lvReports.CustomSort(nil, 0);
end;
procedure TfrmLabs.lvReportsCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
function CompareValues(Col: Integer): integer;
var
ix: Integer;
s1, s2: string;
v1, v2: extended;
d1, d2: TFMDateTime;
begin
inherited;
if ColumnToSort = 0 then
Result := CompareText(Item1.Caption,Item2.Caption)
else
begin
ix := ColumnToSort - 1;
case Col of
0: //strings
begin
if(Item1.SubItems.Count > 0) and (ix < Item1.SubItems.Count) then
s1 := Item1.SubItems[ix]
else
s1 := '0';
if(Item2.SubItems.Count > 0) and (ix < Item2.SubItems.Count) then
s2 := Item2.SubItems[ix]
else
s2 := '0';
Result := CompareText(s1,s2);
end;
1: //integers
begin
if(Item1.SubItems.Count > 0) and (ix < Item1.SubItems.Count) then
s1 := Item1.SubItems[ix]
else
s1 := '0';
if(Item2.SubItems.Count > 0) and (ix < Item2.SubItems.Count) then
s2 := Item2.SubItems[ix]
else
s2 := '0';
IsValidNumber(s1, v1);
IsValidNumber(s2, v2);
if v1 > v2 then
Result := 1
else
if v1 < v2 then
Result := -1
else
Result := 0;
end;
2: //date/times
begin
if(Item1.SubItems.Count > 1) and (ix < Item1.SubItems.Count) then
s1 := Item1.SubItems[ix]
else
s1 := '1/1/1700';
if(Item2.SubItems.Count > 1) and (ix < Item2.SubItems.Count) then
s2 := Item2.SubItems[ix]
else
s2 := '1/1/1700';
d1 := StringToFMDateTime(s1);
d2 := StringToFMDateTime(s2);
if d1 > d2 then
Result := 1
else
if d1 < d2 then
Result := -1
else
Result := 0;
end;
else
Result := 0; // to make the compiler happy
end;
end;
end;
begin
ColumnToSort := uFirstSort;
Compare := CompareValues(SortIdx1);
if Compare = 0 then
begin
if (uSecondSort > -1) and (uFirstSort <> uSecondSort) then
begin
ColumnToSort := uSecondSort;
Compare := CompareValues(SortIdx2);
end;
if Compare = 0 then
if (uThirdSort > -1) and (uFirstSort <> uThirdSort) and (uSecondSort <> uThirdSort) then
begin
ColumnToSort := uThirdSort;
Compare := CompareValues(SortIdx3);
end;
end;
if not ColumnSortForward then Compare := -Compare;
end;
procedure TfrmLabs.lvReportsKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if (Key = 67) and (ssCtrl in Shift) then
Copy1Click(Self);
if (Key = 65) and (ssCtrl in Shift) then
SelectAll1Click(Self);
end;
procedure TfrmLabs.lvReportsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
aID, aSID: string;
i,j,k: integer;
aBasket: TStringList;
aWPFlag: Boolean;
x, HasImages: string;
begin
inherited;
if not selected then Exit;
aBasket := TStringList.Create;
uLocalReportData.Clear;
aWPFlag := false;
with lvReports do
begin
aID := Item.SubItems[0];
case uQualifierType of
QT_OTHER:
begin // = 0
end;
QT_DATERANGE:
begin // = 2
end;
QT_IMAGING:
begin // = 3
end;
QT_NUTR:
begin // = 4
end;
QT_HSWPCOMPONENT:
begin // = 6
if lvReports.SelCount < 3 then
begin
memLab.Lines.Clear;
ulvSelectOn := false;
end;
aBasket.Clear;
if (SelCount = 2) and (ulvSelectOn = false) then
begin
ulvSelectOn := true;
for i := 0 to Items.Count - 1 do
if (Items[i].Selected) and (aID <> Items[i].SubItems[0]) then
begin
aSID := Items[i].SubItems[0];
for j := 0 to LabRowObjects.ColumnList.Count - 1 do
if piece(aSID,':',1) = piece(TCellObject(LabRowObjects.ColumnList[j]).Handle,':',1) then
if Item.Caption = (piece(TCellObject(LabRowObjects.ColumnList[j]).Site,';',1)) then
if (TCellObject(LabRowObjects.ColumnList[j]).Data.Count > 0) and
(TCellObject(LabRowObjects.ColumnList[j]).Include = '1') then
begin
aWPFlag := true;
MemLab.Lines.Add(TCellObject(LabRowObjects.ColumnList[j]).Name);
FastAssign(TCellObject(LabRowObjects.ColumnList[j]).Data, aBasket);
for k := 0 to aBasket.Count - 1 do
MemLab.Lines.Add(' ' + aBasket[k]);
end;
if aWPFlag = true then
begin
memLab.Lines.Add('Facility: ' + Item.Caption);
memLab.Lines.Add('===============================================================================');
end;
end;
end;
aBasket.Clear;
aWPFlag := false;
for i := 0 to LabRowObjects.ColumnList.Count - 1 do
if piece(aID,':',1) = piece(TCellObject(LabRowObjects.ColumnList[i]).Handle,':',1) then
if Item.Caption = (piece(TCellObject(LabRowObjects.ColumnList[i]).Site,';',1)) then
if (TCellObject(LabRowObjects.ColumnList[i]).Data.Count > 0) and
(TCellObject(LabRowObjects.ColumnList[i]).Include = '1') then
begin
aWPFlag := true;
MemLab.Lines.Add(TCellObject(LabRowObjects.ColumnList[i]).Name);
FastAssign(TCellObject(LabRowObjects.ColumnList[i]).Data, aBasket);
for j := 0 to aBasket.Count - 1 do
MemLab.Lines.Add(' ' + aBasket[j]);
end;
if aWPFlag = true then
begin
memLab.Lines.Add('Facility: ' + Item.Caption);
memLab.Lines.Add('===============================================================================');
end;
if uRptID = 'OR_R18:IMAGING' then
begin
if (Item.SubItems.Count > 8) then //has id, may have case (?)
begin
x := 'RA^' + Item.SubItems[8] + U + Item.SubItems[4] + U + Item.Caption;
SetPiece(x, U, 10, BOOLCHAR[Item.SubItemImages[1] = IMG_1_IMAGE]);
NotifyOtherApps(NAE_REPORT, x);
end
else if (Item.SubItems.Count > 4) then
begin
x := 'RA^' + U + U + Item.SubItems[4] + U + Item.Caption;
SetPiece(x, U, 10, BOOLCHAR[Item.SubItemImages[1] = IMG_1_IMAGE]);
NotifyOtherApps(NAE_REPORT, x);
end
else if Item.SubItemImages[1] = IMG_1_IMAGE then
begin
memLab.Lines.Insert(0,'<Imaging links not active at this site>');
memLab.Lines.Insert(1,' ');
end;
end;
if uRptID = 'OR_PN:PROGRESS NOTES' then
if (Item.SubItems.Count > 7) then
begin
if StrToIntDef(Item.SubItems[7], 0) > 0 then HasImages := '1' else HasImages := '0';
x := 'PN^' + Item.SubItems[7] + U + Item.SubItems[1] + U + Item.Caption;
SetPiece(x, U, 10, HasImages);
NotifyOtherApps(NAE_REPORT, x);
end;
end;
QT_PROCEDURES:
begin // = 19
end;
QT_SURGERY:
begin // = 28
end;
end;
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
end;
aBasket.Free;
end;
procedure TfrmLabs.SelectAll1Click(Sender: TObject);
var
i: integer;
begin
inherited;
for i := 0 to lvReports.Items.Count - 1 do
lvReports.Items[i].Selected := true;
end;
procedure TfrmLabs.SelectAll2Click(Sender: TObject);
begin
inherited;
memLab.SelectAll;
end;
procedure TfrmLabs.chkGraphValuesClick(Sender: TObject);
begin
inherited;
serTest.Marks.Visible := chkGraphValues.Checked;
end;
procedure TfrmLabs.chkGraph3DClick(Sender: TObject);
begin
inherited;
chtChart.View3D := chkGraph3D.Checked;
end;
procedure TfrmLabs.chkGraphZoomClick(Sender: TObject);
begin
inherited;
chtChart.AllowZoom := chkGraphZoom.Checked;
chtChart.AnimatedZoom := chkGraphZoom.Checked;
lblGraphInfo.Caption := 'To Zoom, hold down the mouse button while dragging an area to be enlarged.';
if chkGraphZoom.Checked then
lblGraphInfo.Caption := lblGraphInfo.Caption + #13
+ 'To Zoom Back drag to the upper left. You can also use the actions on the right mouse button.';
lblGraphInfo.Visible := chkGraphZoom.Checked;
if not chkGraphZoom.Checked then chtChart.UndoZoom;
end;
procedure TfrmLabs.chkMaxFreqClick(Sender: TObject);
begin
inherited;
if chkMaxFreq.Checked = true then
begin
uMaxOcc := piece(uQualifier, ';', 3);
SetPiece(uQualifier, ';', 3, '');
end
else
begin
SetPiece(uQualifier, ';', 3, uMaxOcc);
end;
tvReportsClick(self);
end;
procedure TfrmLabs.GotoTop1Click(Sender: TObject);
begin
inherited;
SendMessage(memLab.Handle, WM_VSCROLL, SB_TOP, 0);
{GoToTop1.Enabled := false;
GoToBottom1.Enabled := true; }
end;
procedure TfrmLabs.GotoBottom1Click(Sender: TObject);
begin
Inherited;
SendMessage(memLab.Handle, WM_VSCROLL, SB_BOTTOM, 0);
{GoToTop1.Enabled := true;
GoToBottom1.Enabled := false; }
end;
procedure TfrmLabs.FreezeText1Click(Sender: TObject);
var
Current, Desired : Longint;
LineCount : Integer;
begin
Inherited;
If memLab.SelLength > 0 then begin
Memo1.visible := true;
Memo1.Text := memLab.SelText;
If Memo1.Lines.Count <6 then
LineCount := Memo1.Lines.Count + 1
Else
LineCount := 5;
Memo1.Height := LineCount * frmLabs.Canvas.TextHeight(memLab.SelText);
Current := SendMessage(memLab.handle, EM_GETFIRSTVISIBLELINE, 0, 0);
Desired := SendMessage(memLab.handle, EM_LINEFROMCHAR,
memLab.SelStart + memLab.SelLength ,0);
SendMessage(memLab.Handle,EM_LINESCROLL, 0, Desired - Current);
uFrozen := True;
end;
end;
procedure TfrmLabs.UnfreezeText1Click(Sender: TObject);
begin
Inherited;
If uFrozen = True Then begin
uFrozen := False;
UnFreezeText1.Enabled := False;
Memo1.Visible := False;
Memo1.Text := '';
end;
end;
procedure TfrmLabs.PopupMenu3Popup(Sender: TObject);
begin
inherited;
If Screen.ActiveControl.Name <> memLab.Name then
begin
memLab.SetFocus;
memLab.SelStart := 0;
end;
If memLab.SelLength > 0 Then
FreezeText1.Enabled := True
Else
FreezeText1.Enabled := False;
If Memo1.Visible Then
UnFreezeText1.Enabled := True;
{If memLab.SelStart > 0 then
GotoTop1.Enabled := True
Else
GotoTop1.Enabled := False;
If SendMessage(memLab.handle, EM_LINEFROMCHAR,
memLab.SelStart,0) < memLab.Lines.Count then
GotoBottom1.Enabled := True
Else
GotoBottom1.Enabled := False; }
{case lstReports.ItemIEN of
1: FreezeText1.Enabled := False;
5: FreezeText1.Enabled := False;
6: FreezeText1.Enabled := False;
end; }
end;
procedure TfrmLabs.ProcessNotifications;
var
//AlertDate, CurrentDate: TFMDateTime;
OrderIFN: string;
begin
{uNewest := '';
uOldest := '';
GetNewestOldest(Patient.DFN, uNewest, uOldest); }
{AlertDate := Trunc(StrToFMDateTime(Piece(Piece(Notifications.RecordID, U, 2), ';', 3)));
CurrentDate := FMToday;
lstReports.ItemIndex := 2;
if AlertDate = CurrentDate then
begin
lstDates.ItemIndex := 0;
lstReports.ItemIndex := 0;
end
else if CurrentDate - AlertDate < 7 then lstDates.ItemIndex := 2
else if CurrentDate - AlertDate < 14 then lstDates.ItemIndex := 3
else if CurrentDate - AlertDate < 28 then lstDates.ItemIndex := 4
else lstDates.ItemIndex := 5;
lstReportsClick(self); }
OrderIFN := Piece(Notifications.AlertData, '@', 1);
if StrToIntDef(OrderIFN,0) > 0 then
begin
//the following if condition & clause resolves CQ 16405 & 17076 - a mixture of two different patient's lab results in one display (TC).
if (AnsiContainsStr(tvReports.Selected.Text, 'Microbiology')) or (AnsiContainsStr(tvReports.Selected.Text, 'Anatomic Pathology'))
or (AnsiContainsStr(tvReports.Selected.Text, 'Cytology')) or (AnsiContainsStr(tvReports.Selected.Text, 'Electron Microscopy'))
or (AnsiContainsStr(tvReports.Selected.Text, 'Surgical Pathology')) and (lvReports.Visible = TRUE) then
begin
lvReports.Visible := FALSE;
end;
tvReports.Selected := tvReports.TopItem; //moved here to fix the conflicting lab results caption header that is displayed with the alert message text.
DisplayHeading(''); //fixes part B of CQ #17548 - CPRS v28.1 (TC)
lstDates.ItemIndex := -1;
Memo1.Visible := false;
lblHeaders.Visible := false;
lstHeaders.Visible := false;
pnlOtherTests.Visible := false;
lblDates.Visible := true;
lstDates.Visible := true;
pnlHeader.Visible := false;
grdLab.Visible := false;
pnlChart.Visible := false;
//WebBrowser1.Visible := false; **Browser Remove**
//WebBrowser1.SendToBack; **Browser Remove**
memLab.Visible := true;
memLab.BringToFront;
pnlFooter.Visible := true;
memLab.Clear;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
pnlRightTop.Height := 5;
memLab.Align := alClient;
FormResize(self);
QuickCopy(ResultOrder(OrderIFN), memLab);
memLab.SelStart := 0;
memLab.Repaint;
lblHeading.Caption := Notifications.Text;
end
else
begin
if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 4;
tvReports.Selected := tvReports.Items.GetFirstNode;
tvReportsClick(self);
end;
case Notifications.FollowUp of
NF_LAB_RESULTS : Notifications.Delete;
NF_ABNORMAL_LAB_RESULTS : Notifications.Delete;
NF_SITE_FLAGGED_RESULTS : Notifications.Delete;
NF_STAT_RESULTS : Notifications.Delete;
NF_CRITICAL_LAB_RESULTS : Notifications.Delete;
NF_LAB_THRESHOLD_EXCEEDED : Notifications.Delete;
end;
end;
procedure TfrmLabs.chkZoomClick(Sender: TObject);
begin
inherited;
chtChart.AllowZoom := chkZoom.Checked;
chtChart.AnimatedZoom := chkZoom.Checked;
if not chkZoom.Checked then
begin
chtChart.UndoZoom;
chtChart.ZoomPercent(ZOOM_PERCENT);
end;
end;
procedure TfrmLabs.chtChartUndoZoom(Sender: TObject);
begin
inherited;
chtChart.BottomAxis.Automatic := true;
end;
procedure TfrmLabs.popCopyClick(Sender: TObject);
begin
inherited;
chtChart.CopyToClipboardBitmap;
end;
procedure TfrmLabs.popChartPopup(Sender: TObject);
begin
inherited;
if pnlWorksheet.Visible then
begin
popValues.Checked := chkValues.Checked;
pop3D.Checked := chk3D.Checked;
popZoom.Checked := chkZoom.Checked;
end
else
begin
popValues.Checked := chkGraphValues.Checked;
pop3D.Checked := chkGraph3D.Checked;
popZoom.Checked := chkGraphZoom.Checked;
end;
popZoomBack.Enabled := popZoom.Checked and not chtChart.BottomAxis.Automatic;;
if chtChart.Hint <> '' then
begin
popDetails.Caption := chtChart.Hint;
popDetails.Enabled := true;
end
else
begin
popDetails.Caption := 'Details';
popDetails.Enabled := false;
end;
end;
procedure TfrmLabs.popValuesClick(Sender: TObject);
begin
inherited;
if pnlWorksheet.Visible then
begin
chkValues.Checked := not chkValues.Checked;
chkValuesClick(self);
end
else
begin
chkGraphValues.Checked := not chkGraphValues.Checked;
chkGraphValuesClick(self);
end;
end;
procedure TfrmLabs.pop3DClick(Sender: TObject);
begin
inherited;
if pnlWorksheet.Visible then
begin
chk3D.Checked := not chk3D.Checked;
chk3DClick(self);
end
else
begin
chkGraph3D.Checked := not chkGraph3D.Checked;
chkGraph3DClick(self);
end;
end;
procedure TfrmLabs.popZoomClick(Sender: TObject);
begin
inherited;
if pnlWorksheet.Visible then
begin
chkZoom.Checked := not chkZoom.Checked;
chkZoomClick(self);
end
else
begin
chkGraphZoom.Checked := not chkGraphZoom.Checked;
chkGraphZoomClick(self);
end;
end;
procedure TfrmLabs.popZoomBackClick(Sender: TObject);
begin
inherited;
chtChart.UndoZoom;
end;
procedure TfrmLabs.chtChartMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inherited;
chtChart.Hint := '';
chtChart.Tag := 0;
end;
procedure TfrmLabs.chtChartClickSeries(Sender: TCustomChart;
Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inherited;
if Series = serHigh then exit;
if Series = serLow then exit;
uDate1 := Series.XValue[ValueIndex];
uDate2 := uDate1;
chtChart.Hint := 'Details - Lab results for ' + FormatDateTime('dddd, mmmm d, yyyy', Series.XValue[ValueIndex]) + '...';
chtChart.Tag := ValueIndex + 1;
if Button <> mbRight then popDetailsClick(self);
end;
procedure TfrmLabs.chtChartClickLegend(Sender: TCustomChart;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited;
chtChart.Hint := 'Details - for ' + Piece(serTest.Title, '(', 1) + '...';
chtChart.Tag := 0;
if Button <> mbRight then popDetailsClick(self);
end;
procedure TfrmLabs.popDetailsClick(Sender: TObject);
var
tmpList: TStringList;
date1, date2: TFMDateTime;
strdate1, strdate2: string;
begin
inherited;
Screen.Cursor := crHourGlass;
if chtChart.Tag > 0 then
begin
tmpList := TStringList.Create;
try
strdate1 := FormatDateTime('mm/dd/yyyy', uDate1);
strdate2 := FormatDateTime('mm/dd/yyyy', uDate2);
uDate1 := StrToDateTime(strdate1);
uDate2 := StrToDateTime(strdate2);
date1 := DateTimeToFMDateTime(uDate1 + 1);
date2 := DateTimeToFMDateTime(uDate2);
StatusText('Retrieving data for ' + FormatDateTime('dddd, mmmm d, yyyy', uDate2) + '...');
Interim(tmpList, Patient.DFN, date1, date2,'ORWLRR INTERIM');
ReportBox(tmpList, 'Lab results on ' + Patient.Name + ' for ' + FormatDateTime('dddd, mmmm d, yyyy', uDate2), True);
finally
tmplist.Free;
end;
end
else
begin
date1 := DateTimeToFMDateTime(chtChart.BottomAxis.Maximum);
date2 := DateTimeToFMDateTime(chtChart.BottomAxis.Minimum);
tmpList := TStringList.Create;
try
if lstTestGraph.ItemIndex > -1 then
tmpList.Add(lstTestGraph.Items[lstTestGraph.ItemIndex])
else
tmpList.Add(Piece(lblSingleTest.Caption, '^', 1));
StatusText('Retrieving data for ' + serTest.Title + '...');
ReportBox(InterimSelect(Patient.DFN, date1, date2, tmpList), Piece(serTest.Title, '(', 1) + 'results on ' + Patient.Name, True);
finally
tmpList.Free;
end;
end;
Screen.Cursor := crDefault;
StatusText('');
end;
procedure TfrmLabs.popPrintClick(Sender: TObject);
begin
inherited;
if chtChart.Visible then PrintLabGraph;
end;
procedure TfrmLabs.PrintLabGraph;
var
GraphTitle: string;
begin
inherited;
GraphTitle := Piece(lblSingleTest.Caption, '^', 2);
if (Length(lblSpecimen.Caption) > 2) then GraphTitle := GraphTitle + ' (' + Piece(lblSpecimen.Caption, '^', 2) + ')';
GraphTitle := GraphTitle + ' - ' + lstDates.DisplayText[lstDates.ItemIndex];
if dlgWinPrint.Execute then PrintGraph(chtChart, GraphTitle);
end;
procedure TfrmLabs.BeginEndDates(var ADate1, ADate2: TFMDateTime; var ADaysBack: integer);
var
datetemp: TFMDateTime;
today, datetime1, datetime2: TDateTime;
relativedate: string;
begin
today := FMToDateTime(floattostr(FMToday));
relativedate := Piece(lstDates.ItemID, ';', 1);
relativedate := Piece(relativedate, '-', 2);
ADaysBack := strtointdef(relativedate, 0);
ADate1 := DateTimeToFMDateTime(today - ADaysBack);
relativedate := Piece(lstDates.ItemID, ';', 2);
if StrToIntDef(Piece(relativedate, '+', 2), 0) > 0 then
begin
relativedate := Piece(relativedate, '+', 2);
ADaysBack := strtointdef(relativedate, 0);
ADate2 := DateTimeToFMDateTime(today + ADaysBack + 1);
end
else
begin
relativedate := Piece(relativedate, '-', 2);
ADaysBack := strtointdef(relativedate, 0);
ADate2 := DateTimeToFMDateTime(today - ADaysBack);
end;
datetime1 := FMDateTimeToDateTime(ADate1);
datetime2 := FMDateTimeToDateTime(ADate2);
if datetime1 < datetime2 then // reorder dates, if needed
begin
datetemp := ADate1;
ADate1 := ADate2;
ADate2 := datetemp
end;
ADate1 := ADate1 + 0.2359;
end;
procedure TfrmLabs.Timer1Timer(Sender: TObject);
var
i,j,fail: integer;
r0: String;
begin
inherited;
with RemoteSites.SiteList do
begin
for i := 0 to Count - 1 do
if TRemoteSite(Items[i]).Selected then
begin
if Length(TRemoteSite(Items[i]).LabRemoteHandle) > 0 then
begin
r0 := GetRemoteStatus(TRemoteSite(Items[i]).LabRemoteHandle);
TRemoteSite(Items[i]).LabQueryStatus := r0; //r0='1^Done' if no errors
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, piece(r0,'^',2));
if piece(r0,'^',1) = '1' then
begin
GetRemoteData(TRemoteSite(Items[i]).LabData,
TRemoteSite(Items[i]).LabRemoteHandle,Items[i]);
RemoteReports.Add(TRemoteSite(Items[i]).CurrentLabQuery,
TRemoteSite(Items[i]).LabRemoteHandle);
TRemoteSite(Items[i]).LabRemoteHandle := '';
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then
begin
uRemoteReportData.Clear;
QuickCopy(TRemoteSite(Items[i]).LabData,uRemoteReportData);
fail := 0;
if uRemoteReportData.Count > 0 then
begin
if uRemoteReportData[0] = 'Report not available at this time.' then
begin
fail := 1;
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID,'Report not available');
end;
if piece(uRemoteReportData[0],'^',1) = '-1' then
begin
fail := 1;
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID,'Communication failure');
end;
if fail = 0 then
LoadListView(uRemoteReportData);
end;
end;
end
else
begin
uRemoteCount := uRemoteCount + 1;
if uRemoteCount > 90 then //~7 minute limit
begin
TRemoteSite(Items[i]).LabRemoteHandle := '';
TRemoteSite(Items[i]).LabQueryStatus := '-1^Timed out';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Timed out');
StatusText('');
TabControl1.OnChange(nil);
end
else
StatusText('Retrieving Lab data from '
+ TRemoteSite(Items[i]).SiteName + '...');
end;
Timer1.Interval := 10000;
end;
end;
if Timer1.Enabled = True then
begin
j := 0;
for i := 0 to Count -1 do
begin
if Length(TRemoteSite(Items[i]).LabRemoteHandle) > 0 then
begin
j := 1;
break;
end;
end;
if j = 0 then //Shutdown timer if all sites have been processed
begin
Timer1.Enabled := False;
StatusText('');
end;
j := 0;
for i := 0 to Count -1 do
if TRemoteSite(Items[i]).Selected = true then
begin
j := 1;
break;
end;
if j = 0 then //Shutdown timer if user has de-selected all sites
begin
Timer1.Enabled := False;
StatusText('');
TabControl1.OnChange(nil);
end;
end;
end;
end;
procedure TfrmLabs.tvReportsClick(Sender: TObject);
var
i: integer;
aHeading, aReportType, aRPC, aQualifier, aStartTime, aStopTime, aMax, aRptCode, aRemote, aCategory, aSortOrder, aDaysBack, x, x1, x2: string;
aIFN, aOldID: integer;
aID, aHSTag, aColChange, aDirect, aHDR, aFHIE, aFHIEONLY, aQualifierID: string;
CurrentNode: TTreeNode;
begin
inherited;
if (Length(lblHeading.Caption) > 0) and (Length(frmFrame.stsArea.Panels.Items[1].Text) > 0) then
begin //ProcessNotfications post-cleanup and clearing of notification message text
lblHeading.Caption := ''; //in the header and status bar display when clicking to view lab results.
frmFrame.stsArea.Panels.Items[1].Text := '';
end;
lvReports.Hint := 'To sort, click on column headers|';
tvReports.TopItem := tvReports.Selected;
uRemoteCount := 0;
uReportInstruction := '';
aHeading := PReportTreeObject(tvReports.Selected.Data)^.Heading;
aRemote := PReportTreeObject(tvReports.Selected.Data)^.Remote;
aReportType := PReportTreeObject(tvReports.Selected.Data)^.RptType;
aQualifier := PReportTreeObject(tvReports.Selected.Data)^.Qualifier;
aID := PReportTreeObject(tvReports.Selected.Data)^.ID;
aRPC := PReportTreeObject(tvReports.Selected.Data)^.RPCName;
aHSTag := PReportTreeObject(tvReports.Selected.Data)^.HSTag;
aCategory := PReportTreeObject(tvReports.Selected.Data)^.Category;
aSortOrder := PReportTreeObject(tvReports.Selected.Data)^.SortOrder;
aDaysBack := PReportTreeObject(tvReports.Selected.Data)^.MaxDaysBack;
aIFN := StrToIntDef(PReportTreeObject(tvReports.Selected.Data)^.IFN,0);
aDirect := PReportTreeObject(tvReports.Selected.Data)^.Direct;
aHDR := PReportTreeObject(tvReports.Selected.Data)^.HDR;
aFHIE := PReportTreeObject(tvReports.Selected.Data)^.FHIE;
aFHIEONLY := PReportTreeObject(tvReports.Selected.Data)^.FHIEONLY;
aStartTime := Piece(aQualifier,';',1);
aStopTime := Piece(aQualifier,';',2);
aMax := Piece(aQualifier,';',3);
aRptCode := Piece(aQualifier,';',4);
aQualifierID:= '';
lstQualifier.ItemIndex := -1;
if length(uColChange) > 0 then
begin
aColChange := '';
for i := 0 to lvReports.Columns.Count - 1 do
aColChange := aColChange + IntToStr(lvReports.Column[i].width) + ',';
if (Length(aColChange) > 0) and (aColChange <> piece(uColchange,'^',2)) then
SaveColumnSizes(piece(uColChange,'^',1) + '^' + aColChange);
uColChange := '';
end;
if (aReportType <> 'M') and (aRPC = '') and (CharAt(aID,1) = 'H') then
begin
aReportType := 'R';
aRptCode := LowerCase(CharAt(aID,1)) + Copy(aID, 2, Length(aID));
aID := '1';
aRPC := 'ORWRP REPORT TEXT';
aHSTag := '';
end;
uLabLocalReportData.Clear;
uLabRemoteReportData.Clear;
if aReportType = '' then aReportType := 'R';
uReportRPC := aRPC;
uRptID := aID;
uLabRepID := aID;
uDirect := aDirect;
uReportType := aReportType;
uQualifier := aQualifier;
uSortOrder := aSortOrder;
uRemoteType := aRemote + '^' + aReportType + '^' + IntToStr(aIFN) + '^' + aHeading + '^' + aRptCode + '^' + aDaysBack + '^' + aHDR + '^' + aFHIE + '^' + aFHIEONLY;
pnlRightTop.Height := lblTitle.Height; // see below
RedrawSuspend(tvReports.Handle);
RedrawSuspend(memLab.Handle);
uHState := aHSTag;
Timer1.Enabled := False;
HideTabControl;
sptHorzRight.Visible := true;
lvReports.Visible := false;
if (aRemote = '1') or (aRemote = '2') then
if not(uReportType = 'V') then
ShowTabControl;
StatusText('');
uHTMLDoc := '';
//WebBrowser1.Navigate('about:blank'); **Browser Remove**
memLab.Lines.Clear;
memLab.Parent := pnlRightBottom;
memLab.Align := alClient;
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
lvReports.Columns.Clear;
DisplayHeading('');
if uReportType = 'H' then
begin
lvReports.Visible := false;
pnlRightBottom.Visible := true;
{WebBrowser1.Visible := true; **Browser Remove**
WebBrowser1.TabStop := true;
WebBrowser1.Navigate('about:blank');
WebBrowser1.BringToFront; }
memLab.Visible := false;
memLab.TabStop := false;
end
else
if uReportType = 'V' then
begin
with lvReports do
begin
RedrawSuspend(lvReports.Handle);
Columns.BeginUpdate;
ViewStyle := vsReport;
ColumnHeaders(uColumns, IntToStr(aIFN));
for i := 0 to uColumns.Count -1 do
begin
uNewColumn := Columns.Add;
uNewColumn.Caption := piece(uColumns.Strings[i],'^',1);
if length(uColChange) < 1 then uColChange := IntToStr(aIFN) + '^';
if piece(uColumns.Strings[i],'^',2) = '1' then
begin
uNewColumn.Width := 0;
uColChange := uColChange + '0,';
end
else
if length(piece(uColumns.Strings[i],'^',10)) > 0 then
begin
uColChange := uColChange + piece(uColumns.Strings[i],'^',10) + ',';
uNewColumn.Width := StrToInt(piece(uColumns.Strings[i],'^',10))
end
else
uNewColumn.Width := ColumnHeaderWidth; //ColumnTextWidth for width of text
if (i = 0) and (((aRemote <> '2') and (aRemote <> '1')) or ((TabControl1.Tabs.Count < 2) and (not (aHDR = '1')))) then
uNewColumn.Width := 0;
end;
Columns.EndUpdate;
RedrawActivate(lvReports.Handle);
end;
lvReports.Visible := true;
sptHorzRight.Visible := true;
//WebBrowser1.Visible := false; **Browser Remove**
//WebBrowser1.TabStop := false; **Browser Remove**
pnlRightBottom.Visible := true;
memLab.Visible := true;
memLab.TabStop := true;
memLab.BringToFront;
RedrawActivate(memLab.Handle);
end
else
begin
lvReports.Visible := true;
sptHorzRight.Visible := false;
//WebBrowser1.Visible := false; **Browser Remove**
//WebBrowser1.TabStop := false; **Browser Remove**
pnlRightBottom.Visible := True;
memLab.Visible := true;
memLab.TabStop := true;
memLab.BringToFront;
RedrawActivate(memLab.Handle);
end;
uLocalReportData.Clear;
LabRowObjects.Clear;
uRemoteReportData.Clear;
lstHeaders.Visible := false;
lstHeaders.TabStop := false;
lblHeaders.Visible := false;
lstHeaders.Clear;
for i := 0 to RemoteSites.SiteList.Count - 1 do
TRemoteSite(RemoteSites.SiteList.Items[i]).LabClear;
if uFrozen = True then
begin
memo1.visible := False;
memo1.TabStop := False;
end;
Screen.Cursor := crHourGlass;
if aReportType = 'M' then
begin
pnlLeftBottom.Visible := false;
splitter1.Visible := false;
CommonComponentVisible(false,false,false,false,false,false,false,false,false,false,false,false);
memLab.Clear;
chkBrowser;
pnlHeader.Visible := false;
sptHorzRight.Visible := true;
lvReports.Visible := false;
pnlRighttop.Height := lblHeading.Height;
memLab.Height := pnlRight.Height - (lblHeading.Height + lblTitle.Height);
pnlRightTop.Visible := true;
memLab.Align := alClient;
FormResize(self);
end
else
begin
uQualifierType := StrToIntDef(aRptCode,0);
case uQualifierType of
QT_OTHER:
begin // = 0
memLab.Lines.Clear;
If aID = '1:MOST RECENT' then
begin
CommonComponentVisible(false,false,false,false,false,true,true,false,true,false,false,false);
pnlRightTop.Height := pnlLeft.Height - (pnlLeft.Height div 5);
pnlRightTop.Visible := true;
pnlButtons.Visible := true;
pnlWorksheet.Visible := false;
pnlGraph.Visible := false;
memLab.Align := alBottom;
pnlRightTop.Align := alTop;
pnlRightBottom.Align := alclient;
sptHorzRight.Visible := true;
pnlRightBottom.Visible := true;
pnlRightBottom.Height := pnlLeft.Height div 5;
memLab.Height := pnlLeft.Height div 5;
grdLab.Align := alTop;
memLab.Clear;
{if uReportType = 'H' then **Browser Remove**
begin
WebBrowser1.Navigate('about:blank');
WebBrowser1.Align := alBottom;
WebBrowser1.Height := pnlLeft.Height div 5;
WebBrowser1.Visible := true;
WebBrowser1.BringToFront;
memLab.Visible := false;
end
else
begin
WebBrowser1.Visible := false;
WebBrowser1.SendToBack; }
memLab.Visible := true;
memLab.BringToFront;
//end; }
FormResize(self);
cmdRecentClick(self);
uPrevReportNode := tvReports.Selected;
end
else if aID = '4:SELECTED TESTS BY DATE' then
begin // Interim for Selected Tests
if uPrevReportNode <> tvReports.Selected then
begin
lstTests.Clear;
lblSpecimen.Caption := '';
end;
SelectTests(Font.Size);
if lstTests.Items.Count > 0 then
begin
CommonComponentVisible(false,false,true,true,true,false,false,false,true,false,false,false);
pnlRighttop.Height := lblHeading.Height + lblTitle.Height;
pnlRightTop.Visible := false;
memLab.Clear;
chkBrowser;
FormResize(self);
RedrawActivate(memLab.Handle);
lstDatesClick(self);
//lstQualifierClick(self);
cmdOtherTests.SetFocus;
cmdOtherTests.Default := true;
uPrevReportNode := tvReports.Selected;
end
else
begin
uPrevReportNode := tvReports.Items.GetFirstNode;
tvReports.Selected := uPrevReportNode;
tvReportsClick(self);
end;
end
else if aID = '5:WORKSHEET' then
begin // Worksheet
if uPrevReportNode <> tvReports.Selected then
begin
lstTests.Clear;
lblSpecimen.Caption := '';
end;
SelectTestGroups(Font.Size);
if lstTests.Items.Count > 0 then
begin
CommonComponentVisible(false,false,true,true,true,true,true,false,false,false,false,false);
pnlRighttop.Height := pnlRight.Height - (pnlRight.Height div 4);
pnlRightTop.Visible := true;
pnlHeader.Align := alTop;
pnlChart.Align := alTop;
sptHorzRight.Visible := true;
chtChart.Visible := true;
memLab.Visible := false;
pnlButtons.Visible := false;
pnlWorksheet.Visible := true;
pnlGraph.Visible := false;
lstTestGraph.Width := 97;
ragCorG.ItemIndex := 0;
FormResize(self);
lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value, "**" = Comments on Specimen';
//chkZoom.Checked := false;
//chkZoomClick(self);
//lstDatesClick(self);
//lstQualifierClick(self);
cmdOtherTests.SetFocus;
cmdOtherTests.Default := true;
uPrevReportNode := tvReports.Selected;
if lstDates.ItemIndex = -1 then
if Patient.Inpatient then lstDates.ItemIndex := 2
else lstDates.ItemIndex := 4;
//for i := 1 to lstDates.Count - 1 do //Sets default date range to next item > 1 Month (which should be 6 months)
//if strToInt(piece(lstDates.Items[i],'^',1)) > 31 then
//begin
//lstDates.ItemIndex := i;
//break;
//end;
lstDatesClick(self);
if ScreenReaderSystemActive then
grdLab.SetFocus;
end
else
begin
uPrevReportNode := tvReports.Items.GetFirstNode;
tvReports.Selected := uPrevReportNode;
tvReportsClick(self);
end;
end
else if aID = '6:GRAPH' then
begin // Graph
// do if graphing is activiated
if uGraphingActivated then
begin
memLab.Clear;
chkBrowser;
FormResize(self);
memLab.Align := alClient;
CommonComponentVisible(false,false,false,false,false,false,false,false,false,false,false,false);
pnlRightTop.Visible := false;
RedrawActivate(memLab.Handle);
StatusText('');
memLab.Lines.Insert(0, ' ');
memLab.Lines.Insert(1, 'Graphing activated');
memLab.SelStart := 0;
frmFrame.mnuToolsGraphingClick(self); // make it just lab tests ??
//tvReports.Selected := uPrevReportNode;
end
else // otherwise, do lab graph
begin
if uPrevReportNode <> tvReports.Selected then
begin
lblSingleTest.Caption := '';
lblSpecimen.Caption := '';
end;
SelectTest(Font.Size);
if (length(lblSingleTest.Caption) > 2) and (length(lblSpecimen.Caption) > 2) then
begin
CommonComponentVisible(false,false,true,true,true,true,false,false,true,false,false,false);
pnlChart.Visible := true;
chtChart.Visible := true;
pnlButtons.Visible := false;
pnlWorksheet.Visible := false;
pnlGraph.Visible := true;
memLab.Height := pnlRight.Height div 5;
memLab.Clear;
{if uReportType = 'H' then **Browser Remove**
begin
WebBrowser1.Visible := true;
WebBrowser1.Navigate('about:blank');
WebBrowser1.Height := pnlRight.Height div 5;
WebBrowser1.BringToFront;
memLab.Visible := false;
end
else
begin
WebBrowser1.Visible := false;
WebBrowser1.SendToBack; }
memLab.Visible := true;
memLab.BringToFront;
//end; }
lstTestGraph.Items.Clear;
lstTestGraph.Width := 0;
FormResize(self);
RedrawActivate(memLab.Handle);
lblFooter.Caption := '';
chkGraphZoom.Checked := false;
chkGraphZoomClick(self);
chkGraph3DClick(self);
chkGraphValuesClick(self);
lstDatesClick(self);
//lstQualifierClick(self);
cmdOtherTests.SetFocus;
cmdOtherTests.Default := true;
uPrevReportNode := tvReports.Selected;
end
else
tvReports.Selected := uPrevReportNode;
end;
end
else if (aID = '9:MICROBIOLOGY') or (aID = '20:ANATOMIC PATHOLOGY') or (aID = '2:BLOOD BANK') or (aID = '10:LAB STATUS') or (aID = '3:ALL TESTS BY DATE') or (aID = '21:CUMULATIVE') or (aID = '27:AUTOPSY') then
begin
//added to deal with other reports from file 101.24
memLab.Clear;
chkBrowser;
pnlHeader.Visible := false;
pnlRightTop.Visible := false;
pnlRightBottom.Visible := false;
sptHorzRight.Visible := false;
pnlRightTop.Height := lblHeading.Height;
if ((aRemote = '1') or (aRemote = '2')) then
ShowTabControl;
pnlRightTopHeader.Align := alTop;
pnlRightTop.Align := alTop;
TabControl1.Align := alTop;
pnlRightBottom.Align := alclient;
sptHorzRight.Visible := true;
pnlRightBottom.Visible := true;
lvReports.Visible := false;
memLab.Align := alClient;
if lstDates.ItemIndex = -1 then
if Patient.Inpatient then lstDates.ItemIndex := 2
else lstDates.ItemIndex := 4;
{for i := 1 to lstDates.Count - 1 do //Sets default date range to next item > 1 Month (which should be 6 months)
if strToInt(piece(lstDates.Items[i],'^',1)) > 31 then
begin
lstDates.ItemIndex := i;
break;
end; }
FormResize(self);
aOldID := 1;
if aID = '9:MICROBIOLOGY' then aOldID := 4;
//if aID = '20:ANATOMIC PATHOLOGY' then AOldID := 8;
if aID = '2:BLOOD BANK' then AOldID := 9;
if aID = '10:LAB STATUS' then AOldID := 10;
if aID = '3:ALL TESTS BY DATE' then AOldID := 3;
if aID = '21:CUMULATIVE' then AOldID := 2;
case StrToInt(aCategory) of
{Categories of reports:
0:Fixed
1:Fixed w/Dates
2:Fixed w/Headers
3:Fixed w/Dates & Headers
4:Specialized
5:Graphic}
0: begin
CommonComponentVisible(false,false,false,false,false,false,false,false,false,false,false,false);
StatusText('Retrieving data...');
GoRemoteOld(uLabRemoteReportData,StrToInt(Piece(aID,':',1)),aOldID,'',uReportRPC,'0','9999','1',0,0);
//GoRemote(uRemoteReportData, aID, aRptCode, aRPC, uHState, aHDR, aFHIE);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, 'L:' + Piece(aID,':',1), '0', '9999', '1', 0, 0, uReportRPC);
if TabControl1.TabIndex < 1 then
QuickCopy(uLabLocalReportData,memLab);
RedrawActivate(memLab.Handle);
StatusText('');
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
memLab.SelStart := 0;
if uReportType = 'R' then
uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST
else
uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text;
//if WebBrowser1.Visible = true then WebBrowser1.Navigate('about:blank'); **Browser Remove**
end;
1: begin
CommonComponentVisible(false,false,false,true,true,false,false,false,false,false,false,false);
memLab.Repaint;
lstDatesClick(self);
//lstQualifierClick(self);
end;
2: begin
CommonComponentVisible(true,true,false,false,false,false,false,false,false,false,false,false);
lstHeaders.Clear;
StatusText('Retrieving data...');
GoRemoteOld(uLabRemoteReportData,StrToInt(Piece(aID,':',1)),aOldID,'',uReportRPC,'0','9999','1',0,0);
//GoRemote(uRemoteReportData, aID, aRptCode, aRPC, uHState, aHDR, aFHIE);
TabControl1.OnChange(nil);
Reports(uLabLocalReportData,Patient.DFN, Piece(aID,':',1), '0', '9999', '1', 0, 0, uReportRPC);
if uLabLocalReportData.Count > 0 then
begin
TabControl1.OnChange(nil);
if lstHeaders.Items.Count > 0 then lstHeaders.ItemIndex := 0;
end;
RedrawActivate(memLab.Handle);
StatusText('');
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
if uReportType = 'R' then
uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST
else
uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text;
//if WebBrowser1.Visible = true then WebBrowser1.Navigate('about:blank'); **Browser Remove**
end;
3: begin
CommonComponentVisible(true,true,false,true,true,false,false,false,true,false,false,false);
lstDatesClick(self);
//lstQualifierClick(self);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
end;
end;
uPrevReportNode := tvReports.Selected;
end
//else if aID = '20:ANATOMIC PATHOLOGY' then
//else if aID = '2:BLOOD BANK' then
//else if aID = '10:LAB STATUS' then
else
begin
pnlLeftBottom.Visible := false;
splitter1.Visible := false;
CommonComponentVisible(true,true,false,false,false,false,false,false,false,false,false,false);
pnlRightTop.Visible := true;
StatusText('Retrieving ' + tvReports.Selected.Text + '...');
GoRemote(uRemoteReportData, 'L:' + aID, aRptCode, aRPC, uHState, aHDR, aFHIE);
uReportInstruction := #13#10 + 'Retrieving data...';
TabControl1.OnChange(nil);
if not(piece(uRemoteType, '^', 9) = '1') then
LoadReportText(uLocalReportData, 'L:' + aID, aRptCode, aRPC, uHState);
QuickCopy(uLocalReportData, memLab);
if uLocalReportData.Count > 0 then
TabControl1.OnChange(nil);
StatusText('');
uPrevReportNode := tvReports.Selected;
end;
end;
QT_DATERANGE:
begin // = 2
ListReportDateRanges(lstQualifier.Items);
if lstQualifier.ItemID = '' then
begin
lstQualifier.ItemIndex := lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
lstQualifierClick(self);
end
else
lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lblQualifier.Caption := 'Date Range';
pnlLeftBottom.Visible := true;
splitter1.Visible := true;
uPrevReportNode := tvReports.Selected;
end;
QT_HSCOMPONENT:
begin // = 5
pnlRightTop.Height := pnlRight.Height - (pnlRight.Height div 4);
pnlLeftBottom.Visible := false;
splitter1.Visible := false;
StatusText('Retrieving ' + tvReports.Selected.Text + '...');
uReportInstruction := #13#10 + 'Retrieving data...';
CommonComponentVisible(false,false,false,false,false,false,false,false,false,false,true,true);
pnlRightTop.Visible := true;
lvReports.Visible := true;
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
LabRowObjects.Clear;
memLab.Lines.Clear;
if (length(piece(aHSTag,';',2)) > 0) then
begin
if aCategory <> '0' then
begin
ListReportDateRanges(lstQualifier.Items);
aQualifierID := lstQualifier.ItemID;
if aQualifierID = '' then
begin
if aHDR = '1' then
lstQualifier.ItemIndex := lstQualifier.Items.Add('T-50000' + ';' + 'T+50000' + '^' + 'T-50000' + ' to ' + 'T+50000')
else
if length(aStartTime) > 0 then lstQualifier.ItemIndex := lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lstQualifierClick(self);
end
else
begin
GoRemote(uRemoteReportData, 'L:' + aID, aQualifier, aRPC, uHState, aHDR, aFHIE);
if aHDR = '1' then
lstQualifier.ItemIndex := lstQualifier.Items.Add('T-50000' + ';' + 'T+50000' + '^' + 'T-50000' + ' to ' + 'T+50000')
else
if length(aStartTime) > 0 then lstQualifier.ItemIndex := lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lstQualifierClick(self);
end;
lblQualifier.Caption := 'Date Range';
pnlLeftBottom.Visible := true;
splitter1.Visible := true;
end
else
begin
if not (aRemote = '2' ) then
GoRemote(uRemoteReportData, 'L:' + aID, aQualifier, aRPC, uHState, aHDR, aFHIE);
if not(piece(uRemoteType, '^', 9) = '1') then
begin
LoadReportText(uLocalReportData, 'L:' + aID, aQualifier, aRPC, uHState);
LoadListView(uLocalReportData);
end;
end;
end
else
begin
if (aRemote = '1') or (aRemote = '2') then
if TabControl1.Tabs.Count > 1 then
ShowTabControl;
GoRemote(uRemoteReportData, 'L:' + aID, aQualifier, aRPC, uHState, aHDR, aFHIE);
if not(piece(uRemoteType, '^', 9) = '1') then
LoadReportText(uLocalReportData, 'L:' + aID, aQualifier, aRPC, uHState);
if uLocalReportData.Count < 1 then
uReportInstruction := '<No Report Available>'
else
begin
if TabControl1.TabIndex < 1 then
QuickCopy(uLocalReportData,memLab);
end;
TabControl1.OnChange(nil);
if aCategory <> '0' then
begin
ListReportDateRanges(lstQualifier.Items);
if lstQualifier.ItemID = '' then
begin
lstQualifier.ItemIndex := lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lstQualifierClick(self);
end
else
lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lblQualifier.Caption := 'Date Range';
pnlLeftBottom.Visible := true;
splitter1.Visible := true;
end
else
begin
if uLocalReportData.Count < 1 then
begin
uReportInstruction := '<No Report Available>';
memLab.Lines.Add(uReportInstruction);
end
else
begin
QuickCopy(uLocalReportData,memLab);
TabControl1.OnChange(nil);
end;
end;
end;
StatusText('');
uPrevReportNode := tvReports.Selected;
end;
QT_HSWPCOMPONENT:
begin // = 6
pnlRightTop.Height := pnlRight.Height - (pnlRight.Height div 2);
sptHorzRight.top := pnlRightTop.Height;
uScreenSplitLoc := sptHorzRight.Top;
pnlLeftBottom.Visible := false;
splitter1.Visible := false;
StatusText('Retrieving ' + tvReports.Selected.Text + '...');
uReportInstruction := #13#10 + 'Retrieving data...';
CommonComponentVisible(false,false,false,false,false,false,false,false,false,false,false,false);
pnlRightTop.Visible := true;
lvReports.Visible := true;
sptHorzRight.Visible := true;
memLab.Visible := true;
TabControl1.OnChange(nil);
LabRowObjects.Clear;
memLab.Lines.Clear;
lvReports.SmallImages := uEmptyImageList;
lvReports.Items.Clear;
memLab.Repaint;
if (length(piece(aHSTag,';',2)) > 0) then
begin
if aCategory <> '0' then
begin
ListReportDateRanges(lstQualifier.Items);
aQualifierID := lstQualifier.ItemID;
if aQualifierID = '' then
begin
if aHDR = '1' then
lstQualifier.ItemIndex := lstQualifier.Items.Add('T-50000' + ';' + 'T+50000' + '^' + 'T-50000' + ' to ' + 'T+50000')
else
if length(aStartTime) > 0 then lstQualifier.ItemIndex := lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lstQualifierClick(self);
end
else
begin
GoRemote(uRemoteReportData, 'L:' + aID, aQualifier, aRPC, uHState, aHDR, aFHIE);
if aHDR = '1' then
lstQualifier.ItemIndex := lstQualifier.Items.Add('T-50000' + ';' + 'T+50000' + '^' + 'T-50000' + ' to ' + 'T+50000')
else
if length(aStartTime) > 0 then lstQualifier.ItemIndex := lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lstQualifierClick(self);
end;
lblQualifier.Caption := 'Date Range';
CommonComponentVisible(false,false,false,false,false,false,false,false,false,true,true,true);
pnlLeftBottom.Visible := true;
splitter1.Visible := true;
end
else
begin
GoRemote(uRemoteReportData, 'L:' + aID, aQualifier, aRPC, uHState, aHDR, aFHIE);
if not (aRemote = '2' ) and (not(piece(uRemoteType, '^', 9) = '1')) then
begin
LoadReportText(uLocalReportData, 'L:' + aID, aQualifier, aRPC, uHState);
LoadListView(uLocalReportData);
end;
end;
end
else
begin
if (aRemote = '1') or (aRemote = '2') then
ShowTabControl;
GoRemote(uRemoteReportData, 'L:' + aID, aQualifier, aRPC, uHState, aHDR, aFHIE);
if not(piece(uRemoteType, '^', 9) = '1') then
LoadReportText(uLocalReportData, 'L:' + aID, aQualifier, aRPC, uHState);
if uLocalReportData.Count < 1 then
uReportInstruction := '<No Report Available>'
else
begin
if TabControl1.TabIndex < 1 then
QuickCopy(uLocalReportData,memLab);
end;
TabControl1.OnChange(nil);
if aCategory <> '0' then
begin
ListReportDateRanges(lstQualifier.Items);
if lstQualifier.ItemID = '' then
begin
lstQualifier.ItemIndex := lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lstQualifierClick(self);
end
else
lstQualifier.Items.Add(aStartTime + ';' + aStopTime + '^' + aStartTime + ' to ' + aStopTime);
lblQualifier.Caption := 'Date Range';
pnlLeftBottom.Visible := true;
splitter1.Visible := true;
end
else
begin
LoadListView(uLocalReportData);
end;
end;
StatusText('');
uPrevReportNode := tvReports.Selected;
end;
else
begin // = ?
uQualifierType := QT_OTHER;
pnlLeftBottom.Visible := false;
splitter1.Visible := false;
StatusText('Retrieving ' + tvReports.Selected.Text + '...');
GoRemote(uRemoteReportData, 'L:' + aID, aRptCode, aRPC, uHState, aHDR, aFHIE);
uReportInstruction := #13#10 + 'Retrieving data...';
TabControl1.OnChange(nil);
//LoadReportText(uLocalReportData, 'L:' + aID, aRptCode, aRPC, uHState);
if not(piece(uRemoteType, '^', 9) = '1') then
LoadReportText(uLocalReportData, 'L:' + aID, '', aRPC, uHState);
if uLocalReportData.Count < 1 then
uReportInstruction := '<No Report Available>'
else
begin
if TabControl1.TabIndex < 1 then
QuickCopy(uLocalReportData,memLab);
end;
TabControl1.OnChange(nil);
StatusText('');
uPrevReportNode := tvReports.Selected;
end;
lstQualifier.Caption := lblQualifier.Caption;
end;
end;
if lstQualifier.ItemIndex > -1 then
begin
if not (aHDR = '1') then
if aCategory <> '0' then
DisplayHeading(uQualifier)
else
DisplayHeading('');
end
else
begin
if not (aHDR = '1') then
if aCategory <> '0' then
begin
//lstDatesClick(self);
x := lstDates.DisplayText[lstDates.ItemIndex];
x1 := piece(x,' ',1);
x2 := piece(x,' ',2);
if (Uppercase(Copy(x1,1,1)) = 'T') and (Uppercase(Copy(x2,1,1)) = 'T') then
DisplayHeading(piece(x,' ',1) + ';' + piece(x,' ',2))
else
DisplayHeading('d' + lstDates.ItemID);
end
else
DisplayHeading('');
end;
SendMessage(tvReports.Handle, WM_HSCROLL, SB_THUMBTRACK, 0);
RedrawActivate(tvReports.Handle);
memLab.Visible := true;
memLab.TabStop := true;
memLab.BringToFront;
RedrawActivate(memLab.Handle);
{if WebBrowser1.Visible = true then **Browser Remove**
begin
WebBrowser1.Navigate('about:blank');
WebBrowser1.BringToFront;
end }
{else if not GraphFormActive then
begin
memLab.Visible := true;
memLab.TabStop := true;
memLab.BringToFront;
RedrawActivate(memLab.Handle);
end}
//else **Browser Remove**
//begin **Browser Remove**
{GraphPanel(true);
with GraphForm do
begin
lstDateRange.Items := cboDateRange.Items;
lstDateRange.ItemIndex := cboDateRange.ItemIndex;
ViewSelections;
BringToFront;
end; }
//end; **Browser Remove**
lvReports.Columns.BeginUpdate;
lvReports.Columns.EndUpdate;
Screen.Cursor := crDefault;
end;
procedure TfrmLabs.tvReportsCollapsing(Sender: TObject; Node: TTreeNode;
var AllowCollapse: Boolean);
begin
inherited;
tvReports.Selected := Node;
end;
procedure TfrmLabs.tvReportsExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
inherited;
tvReports.Selected := Node;
end;
procedure TfrmLabs.tvReportsKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
case Key of
VK_LBUTTON, VK_RETURN, VK_SPACE:
begin
tvReportsClick(Sender);
Key := 0;
end;
end;
end;
procedure TfrmLabs.GoRemote(Dest: TStringList; AItem: string; AQualifier, ARpc: string; AHSTag: string; AHDR: string; aFHIE: string);
var
i, j: integer;
LocalHandle, Query, Report, Seq: string;
HSType, DaysBack, ExamID, MaxOcc: string;
Alpha, Omega, Trans: double;
begin
HSType := '';
DaysBack := '';
ExamID := '';
Alpha := 0;
Omega := 0;
Seq := '';
if AHDR = '1' then
begin
if HDRActive = '0' then
begin
InfoBox('The HDR is currently inactive.' + CRLF + 'Unable to retrieve HDR data at this time.', 'HDR Error', MB_OK);
Exit;
end;
InfoBox('You must use VistaWeb to view this report.', 'Use VistaWeb for HDR data', MB_OK);
if (Piece(AItem, ':', 1) = 'OR_VWAL') or (Piece(AItem, ':', 1) = 'OR_VWRX') then
AQualifier := 'T-50000;T+50000;99999';
if (Piece(AItem, ':', 1) = 'OR_VWVS') and (CharAt(AQualifier, 1) = ';') then
AQualifier := 'T-50000;T+50000;99999';
end;
if CharAt(AQualifier, 1) = 'd' then
begin
DaysBack := Copy(AQualifier, 2, Length(AQualifier));
AQualifier := ('T-' + Piece(DaysBack,';',1) + ';T;' + Pieces(AQualifier,';',2,3));
DaysBack := '';
end;
if CharAt(AQualifier, 1) = 'T' then
begin
if Piece(AQualifier,';',1) = 'T-0' then SetPiece(AQualifier,';',1,'T');
if (Piece(Aqualifier,';',1) = 'T') and (Piece(Aqualifier,';',2) = 'T')
then SetPiece(AQualifier,';',2,'T+1');
Alpha := StrToFMDateTime(Piece(AQualifier,';',1));
Omega := StrToFMDateTime(Piece(AQualifier,';',2));
if Alpha > Omega then
begin
Trans := Omega;
Omega := Alpha;
Alpha := Trans;
end;
MaxOcc := Piece(AQualifier,';',3);
SetPiece(AHSTag,';',4,MaxOcc);
end;
if CharAt(AQualifier, 1) = 'h' then HSType := Copy(AQualifier, 2, Length(AQualifier));
if CharAt(AQualifier, 1) = 'i' then ExamID := Copy(AQualifier, 2, Length(AQualifier));
with RemoteSites.SiteList do for i := 0 to Count - 1 do
begin
if (AHDR='1') and (LeftStr(TRemoteSite(Items[i]).SiteID, 5) = '200HD') then
begin
TRemoteSite(Items[i]).Selected := true;
frmFrame.lstCIRNLocations.Checked[i+1] := true;
end;
if TRemoteSite(Items[i]).Selected then
begin
TRemoteSite(Items[i]).ReportClear;
if (LeftStr(TRemoteSite(Items[i]).SiteID, 5) = '200HD') and not(AHDR = '1') then
begin
TRemoteSite(Items[i]).LabQueryStatus := '1^Not Included';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'NOT INCLUDED');
TRemoteSite(Items[i]).LabRemoteHandle := '';
TRemoteSite(Items[i]).LabQueryStatus := '1^Done';
if uQualifierType = 6 then seq := '1^';
TRemoteSite(Items[i]).Data.Add(seq + TRemoteSite(Items[i]).SiteName);
if uQualifierType = 6 then seq := '2^';
TRemoteSite(Items[i]).Data.Add(seq + '<No HDR Data Included> - Use "HDR Reports" menu for HDR Data.');
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then
LoadListView(TRemoteSite(Items[i]).Data);
continue;
end;
if (AHDR = '1') and not(LeftStr(TRemoteSite(Items[i]).SiteID, 5) = '200HD') then
begin
TRemoteSite(Items[i]).LabQueryStatus := '1^Not Included';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'NOT INCLUDED');
TRemoteSite(Items[i]).LabRemoteHandle := '';
TRemoteSite(Items[i]).LabQueryStatus := '1^Done';
if uQualifierType = 6 then seq := '1^';
TRemoteSite(Items[i]).Data.Add(seq + TRemoteSite(Items[i]).SiteName);
if uQualifierType = 6 then seq := '2^';
TRemoteSite(Items[i]).Data.Add(seq + '<No HDR Data> This site is not a source for HDR Data.');
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then
LoadListView(TRemoteSite(Items[i]).Data);
continue;
end;
if (LeftStr(TRemoteSite(Items[i]).SiteID, 5) = '200') and not(aFHIE = '1') then
begin
TRemoteSite(Items[i]).LabQueryStatus := '1^Not Included';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'NOT INCLUDED');
TRemoteSite(Items[i]).LabRemoteHandle := '';
TRemoteSite(Items[i]).LabQueryStatus := '1^Done';
if uQualifierType = 6 then seq := '1^';
TRemoteSite(Items[i]).Data.Add(seq + TRemoteSite(Items[i]).SiteName);
if uQualifierType = 6 then seq := '2^';
TRemoteSite(Items[i]).Data.Add(seq + '<No DOD Data> - Use "Dept. of Defense Reports" Menu to retrieve data from DOD.');
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then
LoadListView(TRemoteSite(Items[i]).Data);
continue;
end;
TRemoteSite(Items[i]).CurrentReportQuery := 'Report' + Patient.DFN + ';'
+ Patient.ICN + '^' + AItem + '^^^' + ARpc + '^' + HSType +
'^' + DaysBack + '^' + ExamID + '^' + FloatToStr(Alpha) + '^' +
FloatToStr(Omega) + '^' + TRemoteSite(Items[i]).SiteID + '^' + AHSTag + '^' + AHDR;
LocalHandle := '';
Query := TRemoteSite(Items[i]).CurrentReportQuery;
for j := 0 to RemoteReports.Count - 1 do
begin
Report := TRemoteReport(RemoteReports.ReportList.Items[j]).Report;
if Report = Query then
begin
LocalHandle := TRemoteReport(RemoteReports.ReportList.Items[j]).Handle;
break;
end;
end;
if Length(LocalHandle) > 1 then
with RemoteSites.SiteList do
begin
GetRemoteData(TRemoteSite(Items[i]).Data,LocalHandle,Items[i]);
TRemoteSite(Items[i]).LabRemoteHandle := '';
TRemoteSite(Items[i]).LabQueryStatus := '1^Done';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Done');
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then //and (chkText.Checked = false) then
LoadListView(TRemoteSite(Items[i]).Data);
end
else
begin
if uDirect = '1' then
begin
StatusText('Retrieving reports from ' + TRemoteSite(Items[i]).SiteName + '...');
TRemoteSite(Items[i]).LabQueryStatus := '1^Direct Call';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Direct Call');
DirectQuery(Dest, AItem, HSType, Daysback, ExamID, Alpha, Omega, TRemoteSite(Items[i]).SiteID, ARpc, AHSTag);
if Copy(Dest[0],1,2) = '-1' then
begin
TRemoteSite(Items[i]).LabQueryStatus := '-1^Communication error';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID,'Communication error');
if uQualifierType = 6 then seq := '1^';
TRemoteSite(Items[i]).Data.Add(seq + TRemoteSite(Items[i]).SiteName);
if uQualifierType = 6 then seq := '2^';
TRemoteSite(Items[i]).Data.Add(seq + '<ERROR>- Unable to communicate with Remote site');
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then
LoadListView(TRemoteSite(Items[i]).Data);
end
else
begin
QuickCopy(Dest,TRemoteSite(Items[i]).Data);
TRemoteSite(Items[i]).LabRemoteHandle := '';
TRemoteSite(Items[i]).LabQueryStatus := '1^Done';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Done');
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then
LoadListView(TRemoteSite(Items[i]).Data);
end;
StatusText('');
end
else
begin
RemoteQuery(Dest, AItem, HSType, Daysback, ExamID, Alpha, Omega, TRemoteSite(Items[i]).SiteID, ARpc, AHSTag);
if Dest[0] = '' then
begin
TRemoteSite(Items[i]).LabQueryStatus := '-1^Communication error';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID,'Communication error');
if uQualifierType = 6 then seq := '1^';
TRemoteSite(Items[i]).Data.Add(seq + TRemoteSite(Items[i]).SiteName);
if uQualifierType = 6 then seq := '2^';
TRemoteSite(Items[i]).Data.Add(seq + '<ERROR>- Unable to communicate with Remote site');
TabControl1.OnChange(nil);
if (length(piece(uHState,';',2)) > 0) then
LoadListView(TRemoteSite(Items[i]).Data);
end
else
begin
TRemoteSite(Items[i]).LabRemoteHandle := Dest[0];
TRemoteSite(Items[i]).LabQueryStatus := '0^initialization...';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'initialization');
Timer1.Enabled := True;
StatusText('Retrieving reports from ' + TRemoteSite(Items[i]).SiteName + '...');
end;
end;
end;
end;
end;
end;
procedure TfrmLabs.GoRemoteOld(Dest: TStringList; AItem, AReportID: Int64; AQualifier,
ARpc, AHSType, ADaysBack, ASection: string; ADate1, ADate2: TFMDateTime);
var
i,j: integer;
LocalHandle, Report, Query: String;
begin
{ AReportID := 1 Generic report RemoteLabReports
2 Cumulative RemoteLabCumulative
3 Interim RemoteLabInterim
4 Microbioloby RemoteLabMicro }
with RemoteSites.SiteList do
for i := 0 to Count - 1 do
if TRemoteSite(Items[i]).Selected then
begin
TRemoteSite(Items[i]).LabClear;
if (LeftStr(TRemoteSite(Items[i]).SiteID, 5) = '200HD') then
begin
TRemoteSite(Items[i]).LabQueryStatus := '1^Not Included';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'NOT INCLUDED');
TabControl1.OnChange(nil);
continue;
end;
if (LeftStr(TRemoteSite(Items[i]).SiteID, 5) = '200') then
begin
TRemoteSite(Items[i]).LabQueryStatus := '1^Not Included';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'NOT INCLUDED');
TabControl1.OnChange(nil);
continue;
end;
TRemoteSite(Items[i]).CurrentLabQuery := 'Lab' + Patient.DFN + ';' + Patient.ICN +
'^' + 'L:' + IntToStr(AItem) + '^' + IntToStr(AReportID) + '^^' + ARpc + '^' + AHSType +
'^' + ADaysBack + '^' + ASection + '^' + DateToStr(ADate1) + '^' + DateToStr(ADate2) + '^' +
TRemoteSite(Items[i]).SiteID;
LocalHandle := '';
for j := 0 to RemoteReports.Count - 1 do
begin
Query := TRemoteSite(Items[i]).CurrentLabQuery;
Report := TRemoteReport(RemoteReports.ReportList.Items[j]).Report;
if Report = Query then
begin
LocalHandle := TRemoteReport(RemoteReports.ReportList.Items[j]).Handle;
break;
end;
end;
if Length(LocalHandle) > 1 then
with RemoteSites.SiteList do
begin
GetRemoteData(TRemoteSite(Items[i]).LabData,LocalHandle,Items[i]);
TRemoteSite(Items[i]).LabRemoteHandle := '';
TRemoteSite(Items[i]).LabQueryStatus := '1^Done';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Done');
TabControl1.OnChange(nil);
end
else
begin
case AReportID of
1: begin
RemoteLabReports(Dest, Patient.DFN + ';' + Patient.ICN, 'L:' + IntToStr(AItem),
AHSType, ADaysBack, ASection, ADate1, ADate2,
TRemoteSite(Items[i]).SiteID, ARpc);
end;
2: begin
RemoteLabCumulative(Dest, Patient.DFN + ';' + Patient.ICN,
StrToInt(Adaysback), Adate1, Adate2, TRemoteSite(Items[i]).SiteID,ARpc);
end;
3: begin
RemoteLabInterim(Dest, Patient.DFN + ';' + Patient.ICN, Adate1, Adate2,
TRemoteSite(Items[i]).SiteID, ARpc);
end;
4: begin
RemoteLabMicro(Dest, Patient.DFN + ';' + Patient.ICN, Adate1, Adate2,
TRemoteSite(Items[i]).SiteID, ARpc);
end;
else begin
RemoteLab(Dest, Patient.DFN + ';' + Patient.ICN, 'L:' + IntToStr(AItem),
AHSType, ADaysBack, ASection, ADate1, ADate2,
TRemoteSite(Items[i]).SiteID, ARpc);
end;
end;
if Dest[0] = '' then
begin
TRemoteSite(Items[i]).LabQueryStatus := '-1^Communication error';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Communication error');
end
else
begin
TRemoteSite(Items[i]).LabRemoteHandle := Dest[0];
TRemoteSite(Items[i]).LabQueryStatus := '0^initialization...';
UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Initialization');
Timer1.Enabled := True;
StatusText('Retrieving reports from '
+ TRemoteSite(Items[i]).SiteName + '...');
end;
end;
end;
end;
procedure TfrmLabs.TabControl1Change(Sender: TObject);
var
aStatus: string;
hook: Boolean;
i: integer;
begin
inherited;
if (uQualifiertype <> 6) or (length(piece(uHState,';',2)) < 1) then
memLab.Lines.Clear;
lstHeaders.Items.Clear;
if (length(piece(uHState,';',2)) = 0) then with TabControl1 do
begin
memLab.Lines.BeginUpdate;
if TabIndex > 0 then
begin
aStatus := TRemoteSite(Tabs.Objects[TabIndex]).LabQueryStatus;
if aStatus = '1^Done' then
begin
if Piece(TRemoteSite(Tabs.Objects[TabIndex]).LabData[0],'^',1) = '[HIDDEN TEXT]' then
begin
lstHeaders.Clear;
hook := false;
for i := 1 to TRemoteSite(Tabs.Objects[TabIndex]).LabData.Count - 1 do
if hook = true then
memLab.Lines.Add(TRemoteSite(Tabs.Objects[TabIndex]).LabData[i])
else
begin
lstHeaders.Items.Add(MixedCase(TRemoteSite(Tabs.Objects[TabIndex]).LabData[i]));
if Piece(TRemoteSite(Tabs.Objects[TabIndex]).LabData[i],'^',1) = '[REPORT TEXT]' then
hook := true;
end;
end
else
QuickCopy(TRemoteSite(Tabs.Objects[TabIndex]).LabData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
end;
if Piece(aStatus,'^',1) = '-1' then
memLab.Lines.Add('Remote data transmission error: ' + Piece(aStatus,'^',2));
if Piece(aStatus,'^',1) = '0' then
memLab.Lines.Add('Retrieving data... ' + Piece(aStatus,'^',2));
if Piece(aStatus,'^',1) = '' then
memLab.Lines.Add(uReportInstruction);
end
else
if uLabLocalReportData.Count > 0 then
begin
if Piece(uLabLocalReportData[0],'^',1) = '[HIDDEN TEXT]' then
begin
lstHeaders.Clear;
hook := false;
for i := 1 to uLabLocalReportData.Count - 1 do
if hook = true then
memLab.Lines.Add(uLabLocalReportData[i])
else
begin
lstHeaders.Items.Add(MixedCase(uLabLocalReportData[i]));
if Piece(uLabLocalReportData[i],'^',1) = '[REPORT TEXT]' then
hook := true;
end;
end
else
if tvReports.Selected.Text = 'Imaging (local only)' then
memLab.Lines.clear
else
QuickCopy(uLabLocalReportData,memLab);
memLab.Lines.Insert(0,' ');
memLab.Lines.Delete(0);
end
else
memLab.Lines.Add(uReportInstruction);
memLab.SelStart := 0;
memLab.Lines.EndUpdate;
end;
end;
procedure TfrmLabs.WebBrowser1DocumentComplete(Sender: TObject; //**Browser Remove**
const pDisp: IDispatch; var URL: OleVariant);
var
//WebDoc: IHtmlDocument2; **Browser Remove**
v: variant;
begin
inherited;
if uHTMLDoc = '' then Exit;
if not(uReportType = 'H') then Exit; //this can be removed if & when browser replaces memLab control
//if not Assigned(WebBrowser1.Document) then Exit; **Browser Remove**
//WebDoc := WebBrowser1.Document as IHtmlDocument2; **Browser Remove**
v := VarArrayCreate([0, 0], varVariant);
v[0] := uHTMLDoc;
//WebDoc.write(PSafeArray(TVarData(v).VArray)); **Browser Remove**
//WebDoc.close; **Browser Remove**
//uHTMLDoc := '';
end;
procedure TfrmLabs.ChkBrowser; // **Browser Remove**
begin
{if uReportType = 'H' then **Browser Remove**
begin
WebBrowser1.Visible := true;
WebBrowser1.Navigate('about:blank');
WebBrowser1.BringToFront;
memLab.Visible := false;
end
else
begin
WebBrowser1.Visible := false;
WebBrowser1.SendToBack; }
memLab.Visible := true;
memLab.BringToFront;
//end; }
end;
procedure TfrmLabs.CommonComponentVisible(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12: Boolean);
begin
//Clear the last date selection
//if not A4 then lstDates.ItemIndex := -1;
lstDates.Caption := lblDates.Caption;
lstHeaders.Caption := lblHeaders.Caption;
if A4 or A2 or A12 then
begin
pnlLefTop.Height := (frmLabs.Height div 2);
pnlLeftBottom.Visible := true;
Splitter1.Visible := true;
end
else
begin
pnlLefTop.Height := frmLabs.Height;
pnlLeftBottom.Visible := false;
Splitter1.Visible := false;
end;
lstDates.Visible := false; // turned off to realign correctly
lblDates.Visible := false;
lstQualifier.Visible := false;
lblQualifier.Visible := false;
pnlOtherTests.Visible := false;
lstHeaders.Visible := false;
lblHeaders.Visible := false;
sptHorzRight.Visible := false;
lblHeaders.Visible := A1;
lstHeaders.Visible := A2;
lblQualifier.Visible := A11;
lstQualifier.Visible := A12;
lblDates.Visible := A4;
lstDates.Visible := A5; // reordered to realign
pnlOtherTests.Visible := A3;
pnlHeader.Visible := A6;
grdLab.Visible := A7;
pnlChart.Visible := A8;
pnlFooter.Visible := A9;
lvReports.Visible := A10;
sptHorzRight.Visible := true;
if A4 and A1 and (lblDates.Top < lblHeaders.Top) then
begin
lblDates.Caption := 'Headings'; // swithes captions if not aligned
lblHeaders.Caption := 'Date Range';
end
else
begin
lblDates.Caption := 'Date Range';
lblHeaders.Caption := 'Headings';
end;
frmLabs.Realign;
end;
procedure TfrmLabs.ShowTabControl;
begin
if TabControl1.Tabs.Count > 1 then
begin
TabControl1.Visible := true;
TabControl1.TabStop := true;
pnlRightTopHeader.Height := pnlRightTopHeaderTop.Height + TabControl1.Height;
end;
end;
procedure TfrmLabs.HideTabControl;
begin
TabControl1.Visible := false;
TabControl1.TabStop := false;
pnlRightTopHeader.Height := pnlRightTopHeaderTop.Height;
end;
procedure TfrmLabs.Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
inherited;
if NewSize < 150 then
Newsize := 150;
end;
procedure TfrmLabs.sptHorzRightCanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
inherited;
if NewSize < 5 then
Newsize := 5;
end;
procedure TfrmLabs.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if (Key = VK_TAB) then
begin
if ssShift in Shift then
begin
FindNextControl(Sender as TWinControl, False, True, False).SetFocus; //previous control
Key := 0;
end
else if ssCtrl in Shift then
begin
FindNextControl(Sender as TWinControl, True, True, False).SetFocus; //next control
Key := 0;
end;
end;
if (key = VK_ESCAPE) then begin
FindNextControl(Sender as TWinControl, False, True, False).SetFocus; //previous control
key := 0;
end;
end;
{ TGrdLab508Manager }
constructor TGrdLab508Manager.Create;
begin
inherited Create([mtValue, mtItemChange]);
end;
function TGrdLab508Manager.GetItem(Component: TWinControl): TObject;
var
sg : TCaptionStringGrid;
begin
sg := TCaptionStringGrid(Component);
Result := TObject(sg.Selection.Top + sg.Selection.Left);
end;
function TGrdLab508Manager.GetTextToSpeak(sg: TCaptionStringGrid): String;
var
textToSpeak : String;
CurrRowStrings,HeaderStrings : TStrings;
i : integer;
begin
textToSpeak := '';
HeaderStrings := sg.Rows[0];
CurrRowStrings := sg.Rows[sg.Selection.Top];
for i := 0 to CurrRowStrings.Count - 1 do begin
textToSpeak := TextToSpeak + ', ' + HeaderStrings[i] + ', ' + ToBlankIfEmpty(CurrRowStrings[i]);
end;
Result := textToSpeak;
end;
function TGrdLab508Manager.GetValue(Component: TWinControl): string;
var
sg : TCaptionStringGrid;
begin
sg := TCaptionStringGrid(Component);
Result := GetTextToSpeak(sg);
end;
function TGrdLab508Manager.ToBlankIfEmpty(aString: String): String;
begin
Result := aString;
if aString = '' then
Result := 'blank';
end;
initialization
SpecifyFormIsNotADialog(TfrmLabs);
end.