209 lines
5.9 KiB
Plaintext
209 lines
5.9 KiB
Plaintext
unit fLabPrint;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ORCtrls, ORNet, Mask, ComCtrls;
|
|
|
|
type
|
|
TfrmLabPrint = class(TForm)
|
|
lblLabTitle: TMemo;
|
|
lblPrintTo: TLabel;
|
|
grpDevice: TGroupBox;
|
|
lblMargin: TLabel;
|
|
lblLength: TLabel;
|
|
txtRightMargin: TMaskEdit;
|
|
txtPageLength: TMaskEdit;
|
|
cboDevice: TORComboBox;
|
|
cmdOK: TButton;
|
|
cmdCancel: TButton;
|
|
dlgWinPrinter: TPrintDialog;
|
|
chkDefault: TCheckBox;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure cboDeviceChange(Sender: TObject);
|
|
procedure cboDeviceNeedData(Sender: TObject; const StartFrom: String;
|
|
Direction, InsertAt: Integer);
|
|
procedure cmdOKClick(Sender: TObject);
|
|
procedure cmdCancelClick(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
FReports: Integer;
|
|
FDaysBack: Integer;
|
|
FReportText: TRichEdit;
|
|
procedure DisplaySelectDevice;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
frmLabPrint: TfrmLabPrint;
|
|
|
|
procedure PrintLabs(AReports: Longint; const ALabTitle: string; ADaysBack: Integer);
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
uses ORFn, rCore, uCore, fLabs, rLabs, Printers, rReports;
|
|
|
|
const
|
|
TX_NODEVICE = 'A device must be selected to print, or press ''Cancel'' to not print.';
|
|
TX_NODEVICE_CAP = 'Device Not Selected';
|
|
TX_ERR_CAP = 'Print Error';
|
|
PAGE_BREAK = '**PAGE BREAK**';
|
|
|
|
procedure PrintLabs(AReports: Integer; const ALabTitle: string; ADaysBack: Integer);
|
|
{ displays a form that prompts for a device and then prints the report }
|
|
var
|
|
frmLabPrint: TfrmLabPrint;
|
|
DefPrt: string;
|
|
begin
|
|
frmLabPrint := TfrmLabPrint.Create(Application);
|
|
try
|
|
ResizeAnchoredFormToFont(frmLabPrint);
|
|
with frmLabPrint do
|
|
begin
|
|
lblLabTitle.Text := ALabTitle;
|
|
FReports := AReports;
|
|
FDaysBack := ADaysBack;
|
|
DefPrt := GetDefaultPrinter(User.Duz, Encounter.Location);
|
|
if User.CurrentPrinter = '' then User.CurrentPrinter := DefPrt;
|
|
with cboDevice do
|
|
begin
|
|
if Printer.Printers.Count > 0 then
|
|
begin
|
|
Items.Add('WIN;Windows Printer^Windows Printer');
|
|
Items.Add('^--------------------VistA Printers----------------------');
|
|
end;
|
|
if User.CurrentPrinter <> '' then
|
|
begin
|
|
InitLongList(Piece(User.CurrentPrinter, ';', 2));
|
|
SelectByID(User.CurrentPrinter);
|
|
end
|
|
else
|
|
InitLongList('');
|
|
end;
|
|
if (DefPrt = 'WIN;Windows Printer') and
|
|
(User.CurrentPrinter = DefPrt) then
|
|
cmdOKClick(frmLabPrint)
|
|
else
|
|
ShowModal;
|
|
end;
|
|
finally
|
|
frmLabPrint.Release;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmLabPrint.DisplaySelectDevice;
|
|
begin
|
|
with cboDevice, lblPrintTo do
|
|
begin
|
|
Caption := 'Print Report on: ' + Piece(ItemID, ';', 2);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmLabPrint.FormCreate(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
FReportText := TRichEdit.Create(Self);
|
|
with FReportText do
|
|
begin
|
|
Parent := Self;
|
|
Visible := False;
|
|
Width := 600;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmLabPrint.cboDeviceChange(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
with cboDevice do if ItemIndex > -1 then
|
|
begin
|
|
txtRightMargin.Text := Piece(Items[ItemIndex], '^', 4);
|
|
txtPageLength.Text := Piece(Items[ItemIndex], '^', 5);
|
|
DisplaySelectDevice;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmLabPrint.cboDeviceNeedData(Sender: TObject;
|
|
const StartFrom: String; Direction, InsertAt: Integer);
|
|
begin
|
|
inherited;
|
|
cboDevice.ForDataUse(SubsetOfDevices(StartFrom, Direction));
|
|
end;
|
|
|
|
procedure TfrmLabPrint.cmdOKClick(Sender: TObject);
|
|
var
|
|
ADevice, ErrMsg: string;
|
|
daysback: integer;
|
|
date1, date2: TFMDateTime;
|
|
today: TDateTime;
|
|
RemoteSiteID: string; //for Remote site printing
|
|
RemoteQuery: string; //for Remote site printing
|
|
begin
|
|
inherited;
|
|
RemoteSiteID := '';
|
|
RemoteQuery := '';
|
|
with frmLabs.TabControl1 do
|
|
if TabIndex > 0 then
|
|
begin
|
|
RemoteSiteID := TRemoteSite(Tabs.Objects[TabIndex]).SiteID;
|
|
RemoteQuery := TRemoteSite(Tabs.Objects[TabIndex]).CurrentLabQuery;
|
|
end;
|
|
if cboDevice.ItemID = '' then
|
|
begin
|
|
InfoBox(TX_NODEVICE, TX_NODEVICE_CAP, MB_OK);
|
|
Exit;
|
|
end;
|
|
today := frmLabs.FMToDateTime(floattostr(FMToday));
|
|
if frmLabs.lstDates.ItemIEN > 0 then
|
|
begin
|
|
daysback := frmLabs.lstDates.ItemIEN;
|
|
date1 := FMToday;
|
|
If daysback = 1 then
|
|
date2 := DateTimeToFMDateTime(today)
|
|
Else
|
|
date2 := DateTimeToFMDateTime(today - daysback);
|
|
end
|
|
else
|
|
frmLabs.BeginEndDates(date1,date2,daysback);
|
|
date1 := date1 + 0.2359;
|
|
if Piece(cboDevice.ItemID, ';', 1) = 'WIN' then
|
|
begin
|
|
if dlgWinPrinter.Execute then with FReportText do
|
|
begin
|
|
Lines.Assign(GetFormattedLabReport(FReports, FDaysBack, Patient.DFN,
|
|
frmLabs.lstTests.Items, date1, date2, RemoteSiteID, RemoteQuery));
|
|
PrintWindowsReport(FReportText, PAGE_BREAK, Self.Caption, ErrMsg);
|
|
if Length(ErrMsg) > 0 then InfoBox(ErrMsg, TX_ERR_CAP, MB_OK);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
ADevice := Piece(cboDevice.ItemID, ';', 2);
|
|
PrintLabsToDevice(FReports, FDaysBack, Patient.DFN, ADevice,
|
|
frmLabs.lstTests.Items, ErrMsg, date1, date2, RemoteSiteID, RemoteQuery);
|
|
ErrMsg := Piece(FReportText.Lines[0], U, 2);
|
|
if Length(ErrMsg) > 0 then InfoBox(ErrMsg, TX_ERR_CAP, MB_OK);
|
|
end;
|
|
if chkDefault.Checked then SaveDefaultPrinter(Piece(cboDevice.ItemID, ';', 1));
|
|
User.CurrentPrinter := cboDevice.ItemID;
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmLabPrint.cmdCancelClick(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmLabPrint.FormDestroy(Sender: TObject);
|
|
begin
|
|
FReportText.Free;
|
|
inherited;
|
|
end;
|
|
|
|
end.
|