VistA-cprs/CPRS-Chart/fNotePrt.pas

223 lines
6.5 KiB
Plaintext

unit fNotePrt;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
fAutoSz, ORCtrls, StdCtrls, Mask, ORNet, ORFn, ComCtrls,
VA508AccessibilityManager;
type
TfrmNotePrint = class(TfrmAutoSz)
grpChooseCopy: TGroupBox;
radChartCopy: TRadioButton;
radWorkCopy: TRadioButton;
grpDevice: TGroupBox;
lblMargin: TLabel;
lblLength: TLabel;
txtRightMargin: TMaskEdit;
txtPageLength: TMaskEdit;
cmdOK: TButton;
cmdCancel: TButton;
lblNoteTitle: TMemo;
cboDevice: TORComboBox;
lblPrintTo: TLabel;
dlgWinPrinter: TPrintDialog;
chkDefault: TCheckBox;
procedure cboDeviceNeedData(Sender: TObject; const StartFrom: String;
Direction, InsertAt: Integer);
procedure cboDeviceChange(Sender: TObject);
procedure radChartCopyClick(Sender: TObject);
procedure radWorkCopyClick(Sender: TObject);
procedure cmdOKClick(Sender: TObject);
procedure cmdCancelClick(Sender: TObject);
private
{ Private declarations }
FNote: Integer;
FReportText: TRichEdit;
procedure DisplaySelectDevice;
public
{ Public declarations }
end;
procedure PrintNote(ANote: Longint; const ANoteTitle: string; MultiNotes: boolean = False);
implementation
{$R *.DFM}
uses rCore, rTIU, rReports, uCore, Printers, uReports;
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 PrintNote(ANote: Longint; const ANoteTitle: string; MultiNotes: boolean = False);
{ displays a form that prompts for a device and then prints the progress note }
var
frmNotePrint: TfrmNotePrint;
DefPrt: string;
begin
frmNotePrint := TfrmNotePrint.Create(Application);
try
ResizeFormToFont(TForm(frmNotePrint));
with frmNotePrint do
begin
{ check to see of Chart Print allowed outside of MAS }
if AllowChartPrintForNote(ANote) then
begin
{This next code begs the question: Why are we even bothering to check
radWorkCopy if we immediately check the other button?
Short answer: it seems to wokr better
Long answer: The checkboxes have to in some way register with the group
they are in. If this doesn't happen, both will be initially included
the tab order. This means that the first time tabbing through the
controls, the work copy button would be tabbed to and selected after the
chart copy. Tabbing through controls should not change the group
selection.
}
radWorkCopy.Checked := True;
radChartCopy.Checked := True;
end
else
begin
radChartCopy.Enabled := False;
radWorkCopy.Checked := True;
end;
lblNoteTitle.Text := ANoteTitle;
frmNotePrint.Caption := 'Print ' + Piece(Piece(ANoteTitle, #9, 2), ',', 1);
FNote := ANote;
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(frmNotePrint) //CQ6660
//Commented out for CQ6660
//or
//((User.CurrentPrinter <> '') and
//(MultiNotes = True)) then
//frmNotePrint.cmdOKClick(frmNotePrint)
//end CQ6660
else
frmNotePrint.ShowModal;
end;
finally
frmNotePrint.Release;
end;
end;
procedure TfrmNotePrint.DisplaySelectDevice;
begin
with cboDevice, lblPrintTo do
begin
if radChartCopy.Checked then Caption := 'Print Chart Copy on: ' + Piece(ItemID, ';', 2);
if radWorkCopy.Checked then Caption := 'Print Work Copy on: ' + Piece(ItemID, ';', 2);
end;
end;
procedure TfrmNotePrint.cboDeviceNeedData(Sender: TObject; const StartFrom: string;
Direction, InsertAt: Integer);
begin
inherited;
cboDevice.ForDataUse(SubsetOfDevices(StartFrom, Direction));
end;
procedure TfrmNotePrint.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 TfrmNotePrint.radChartCopyClick(Sender: TObject);
begin
inherited;
DisplaySelectDevice;
end;
procedure TfrmNotePrint.radWorkCopyClick(Sender: TObject);
begin
inherited;
DisplaySelectDevice;
end;
procedure TfrmNotePrint.cmdOKClick(Sender: TObject);
var
ADevice, ErrMsg: string;
ChartCopy: Boolean;
RemoteSiteID: string; //for Remote site printing
RemoteQuery: string; //for Remote site printing
begin
inherited;
RemoteSiteID := '';
RemoteQuery := '';
if cboDevice.ItemID = '' then
begin
InfoBox(TX_NODEVICE, TX_NODEVICE_CAP, MB_OK);
Exit;
end;
if radChartCopy.Checked then
ChartCopy := True
else ChartCopy := False;
if Piece(cboDevice.ItemID, ';', 1) = 'WIN' then
begin
if dlgWinPrinter.Execute then
begin
FReportText := CreateReportTextComponent(Self);
FastAssign(GetFormattedNote(FNote, ChartCopy), FReportText.Lines);
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);
PrintNoteToDevice(FNote, ADevice, ChartCopy, ErrMsg);
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 TfrmNotePrint.cmdCancelClick(Sender: TObject);
begin
inherited;
Close;
end;
end.