SourceCode/PROMS/VEPROMS User Interface/DlgPrintProcedure.cs
Rich d24109fe19 QUOTED_IDENTIFIER ON
Show how long it takes to print all procedures
For Null values use Arial as a default font.
Added Try/Catch to PDFDocument.Close (In case page is empty)
Only output End Message if it exists
Pagination Fixes
2011-09-22 17:44:01 +00:00

575 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using VEPROMS.CSLA.Library;
using Volian.Print.Library;
//using Volian.Controls.Library;
using Volian.Base.Library;
namespace VEPROMS
{
public partial class DlgPrintProcedure : DevComponents.DotNetBar.Office2007Form
{
private DocVersionInfo _DocVersionInfo = null;
private bool _AllProcedures;
private DocVersionConfig _DocVersionConfig;
public string RevNum
{
get { return txbRevNum.Text; }
set { txbRevNum.Text = value; }
}
public string ProcNum
{
get { return MyProcedure.DisplayNumber; }
}
public string PDFPath
{
get { return txbPDFLocation.Text; }
set { txbPDFLocation.Text = value; }
}
public string RevDate
{
get { return txbRevDate.Text; }
set { txbRevDate.Text = value; }
}
public string ReviewDate
{
get { return txbReviewDate.Text; }
set { txbReviewDate.Text = value; }
}
public string PDFPathSetting
{
get { return txbPdfLocationS.Text; }
set { txbPdfLocationS.Text = value; }
}
public DlgPrintProcedure(DocVersionInfo dvi)
{
InitializeComponent();
_AllProcedures = true;
_DocVersionConfig = dvi.DocVersionConfig;
_DocVersionInfo = dvi;
_MyProcedure = dvi.Procedures[0].MyProcedure;
btnCreatePDF.Text = "Create PDFs";
HandleDocVersionSettings();
PrepForAllOrOne(false);
}
private void PrepForAllOrOne(bool oneProcedure)
{
txbPDFName.Visible = lblPDFFileName.Visible = oneProcedure;
txbRevNum.Visible = lblRevNum.Visible = oneProcedure;
txbReviewDate.Visible = lblReviewDate.Visible = oneProcedure;
txbRevDate.Visible = lblRevDate.Visible = oneProcedure;
cbxOpenAfterCreate2.Visible = oneProcedure;
cbxOpenAfterCreate2.Checked = false;
cbxOverwritePDF2.Visible = oneProcedure;
cbxOverwritePDF2.Checked = true;
gpnlDebug.Visible = Volian.Base.Library.VlnSettings.DebugMode;
}
public DlgPrintProcedure(ProcedureInfo pi)
{
InitializeComponent();
_AllProcedures = false;
_DocVersionConfig = (pi.ActiveParent as DocVersionInfo).DocVersionConfig;
_MyProcedure = pi;
btnCreatePDF.Text = "Create PDF";
HandleDocVersionSettings();
PrepForAllOrOne(true);
}
private void HandleDocVersionSettings()
{
GetDocVersionSettings();
// set to a default PDF location if none was specified in the DocVersions property
if (txbPDFLocation.Text == null || txbPDFLocation.Text.Length == 0 || !Directory.Exists(txbPDFLocation.Text))
txbPDFLocation.Text = VlnSettings.TemporaryFolder;
// if the default setting is 'SelectBeforePrinting', put up a message box to determine whether the user
// wants change bars. If not, 'Change Bar' on the Setting tab is 'OFF' and no Change bar tab.
// If yes, the Change bar tab is the selected tab.
if (_DocVersionConfig.Print_ChangeBar == PrintChangeBar.SelectBeforePrinting)
{
DialogResult dr = MessageBox.Show("Do you want change bars?", "Change Bars", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
btnChgBarOn.PerformClick();
tabControl1.SelectedTab = tbChangeBars;
rbFormatDefault.PerformClick();
rbFormatDefault.Checked = true; // default to 'Format Default'
}
else
{
btnChgBarOff.PerformClick();
}
}
}
private void GetDocVersionSettings()
{
_DocVersionConfig.SaveChangesToDocVersionConfig = false;
_DocVersionConfig.ParentLookup = false;
// PDF Location
PDFPath = _DocVersionConfig.Print_PDFLocation;
// Overwrite PDF
cbxOverwritePDF2.Checked = _DocVersionConfig.Print_AlwaysOverwritePDF;
// Open PDF After Create
cbxOpenAfterCreate2.Checked = _DocVersionConfig.Print_AlwaysViewPDFAfterCreate;
// Changebars on/off
if (_DocVersionConfig.Print_ChangeBar == PrintChangeBar.Without)
btnChgBarOff.PerformClick();
else
btnChgBarOn.PerformClick();
// Watermark on/off
if (_DocVersionConfig.Print_Watermark == PrintWatermark.None)
btnWaterMarkOff.PerformClick();
else
btnWaterMarkOn.PerformClick();
// Auto Duplexing on/off
if ((_MyProcedure.ActiveParent as DocVersionInfo).MyFormat.PlantFormat.FormatData.PrintData.AllowDuplex)
{
lblAutoDuplexing.Visible = true;
btnDuplxOff.Visible = true;
btnDuplxOn.Visible = true;
if (_DocVersionConfig.Print_DisableDuplex)
btnDuplxOff.PerformClick();
else
btnDuplxOn.PerformClick();
}
else
{
lblAutoDuplexing.Visible = false;
btnDuplxOff.Visible = false;
btnDuplxOn.Visible = false;
}
// default to print Debug info if App.config is set to debug mode
cbxDebug.Checked = VlnSettings.DebugMode;
}
private void DlgPrintProcedure_Load(object sender, EventArgs e)
{
SetupForProcedure();
}
private void SetupForProcedure()
{
this.Text = "Create PDF for " + ProcNum;
// get list of previous pdf files
// if no previous pdf file, then get path from frmVersionProperties
// dlgSelectFile.InitialDirectory = pdf path from frmVersionProperties
//cbxPDF.Text = string.Format(@"{0}\{1}.pdf", _PDFPath, _ProcNum);
// General 2 settings
//txbPDFLocation.Text = _PDFPath;
txbPDFName.Text = string.Format("{0}.pdf", ProcNum.Replace('/', '_').Replace('\\', '_'));
ProcedureConfig pc = _MyProcedure.MyConfig as ProcedureConfig;
if (pc != null)
{
RevNum = pc.Print_Rev;
RevDate = pc.Print_RevDate; //== null || pc.Print_RevDate=="" ? DateTime.Today : Convert.ToDateTime(pc.Print_RevDate);
ReviewDate = pc.Print_ReviewDate; // == null ? DateTime.Today : Convert.ToDateTime(pc.Print_ReviewDate);
}
else
{
RevNum = "0";
RevDate = DateTime.Today.ToShortDateString();
ReviewDate = null;
}
cbxWaterMark.DataSource = EnumDetail<PrintWatermark>.Details();
cbxWaterMark.DisplayMember = "Description";
cbxWaterMark.ValueMember = "EValue";
PrintWatermark pw = _DocVersionConfig.Print_Watermark; // MyProcedure.ProcedureConfig.Print_Watermark;
cbxWaterMark.Text = pw.ToString();
//ppCmbxChgBarPos.DataSource = EnumDetail<PrintChangeBarLoc>.Details();
//ppCmbxChgBarPos.DisplayMember = "Description";
//ppCmbxChgBarPos.ValueMember = "EValue";
//ppCmbxChgBarPos.SelectedIndex = (int)MyProcedure.MyDocVersion.DocVersionConfig.Print_ChangeBarLoc;
ppCmbxChgBarTxtType.DataSource = EnumDetail<PrintChangeBarText>.Details();
ppCmbxChgBarTxtType.DisplayMember = "Description";
ppCmbxChgBarTxtType.ValueMember = "EValue";
ppCmbxChgBarTxtType.SelectedIndex = (int)_DocVersionConfig.Print_ChangeBarText;
ppTxbxChangeBarUserMsgOne.Text = _DocVersionConfig.Print_UserCBMess1;
ppTxbxChangeBarUserMsgTwo.Text = _DocVersionConfig.Print_UserCBMess2;
ppGpbxUserSpecTxt.Enabled = ppCmbxChgBarTxtType.SelectedIndex == (int)PrintChangeBarText.UserDef;
bool hasReviewDate = _MyProcedure.ActiveFormat.PlantFormat.HasPageListToken("{REVIEWDATE}");
if (_MyProcedure.Sections != null)
{
foreach (SectionInfo mysection in _MyProcedure.Sections)
hasReviewDate |= mysection.ActiveFormat.PlantFormat.HasPageListToken("{REVIEWDATE}");
}
lblReviewDate.Visible = txbReviewDate.Visible = !_AllProcedures && hasReviewDate;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnAvChgBarOn_Click(object sender, EventArgs e)
{
if (!btnChgBarOn.Checked)
{
btnChgBarOn.Checked = true;
btnChgBarOff.Checked = false;
tbChangeBars.Visible = true;
// to set which radio button (Format default or Custom) is checked, look at config data
switch (_DocVersionConfig.Print_ChangeBar)
{
case PrintChangeBar.WithUserSpecified:
rbCustom.Checked = true;
break;
case PrintChangeBar.SelectBeforePrinting:
case PrintChangeBar.WithDefault:
default:
rbFormatDefault.Checked = true;
break;
}
}
}
private void btnAvChgBarOff_Click(object sender, EventArgs e)
{
if (!btnChgBarOff.Checked)
{
btnChgBarOff.Checked = true;
btnChgBarOn.Checked = false;
tbChangeBars.Visible = false;
}
}
private void btnAdvDuplxOn_Click(object sender, EventArgs e)
{
if (!btnDuplxOn.Checked)
{
btnDuplxOn.Checked = true;
btnDuplxOff.Checked = false;
}
}
private void btnAdvDuplxOff_Click(object sender, EventArgs e)
{
if (!btnDuplxOff.Checked)
{
btnDuplxOff.Checked = true; ;
btnDuplxOn.Checked = false;
}
}
private void btnAdvWaterMarkOn_Click(object sender, EventArgs e)
{
if (!btnWaterMarkOn.Checked)
{
btnWaterMarkOn.Checked = true;
btnWaterMarkOff.Checked = false;
cbxWaterMark.Visible = true;
}
}
private void btnAdvWaterMarkOff_Click(object sender, EventArgs e)
{
if (!btnWaterMarkOff.Checked)
{
btnWaterMarkOff.Checked = true;
btnWaterMarkOn.Checked = false;
cbxWaterMark.Visible = false;
}
}
private void txbPDFLocation_Leave(object sender, EventArgs e)
{
if (!Directory.Exists(PDFPath))
{
string msg = string.Format("'{0}' does not exist. \n\nCreate it?", PDFPath);
DialogResult dr= MessageBox.Show(msg, "Folder Not Found", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr == DialogResult.Yes)
{
try
{
Directory.CreateDirectory(PDFPath);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error trying to create folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
PDFPath = _DocVersionConfig.Print_PDFLocation;
}
}
else
{
PDFPath = _DocVersionConfig.Print_PDFLocation;
}
}
}
private void DlgPrintProcedure_FormClosed(object sender, FormClosedEventArgs e)
{
_DocVersionConfig.SaveChangesToDocVersionConfig = true;
_DocVersionConfig.ParentLookup = true;
}
private ProcedureInfo _MyProcedure;
public ProcedureInfo MyProcedure
{
get { return _MyProcedure; }
set { _MyProcedure = value; }
}
private void CreatePDFs()
{
CreateDebugFiles();
// If file exists, determine if overwrite checkbox allows overwrite, if not prompt.
Volian.Print.Library.Rtf2Pdf.PdfDebug = true;
PrintWatermark pw = (PrintWatermark)cbxWaterMark.SelectedValue;
// Determine change bar settings. First get from config & then see if override from dialog.
// Also check that format allows override.
ChangeBarDefinition cbd = DetermineChangeBarSettings();
int n = _DocVersionInfo.Procedures.Count;
int i = 0;
foreach (ProcedureInfo myProc in _DocVersionInfo.Procedures)
{
MyProcedure = myProc;
if (myProc.Sections != null)
{
SetupForProcedure();
this.Text = string.Format("Create PDF for {0} ({1} of {2})", myProc.DisplayNumber, ++i, n);
frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNum, RevDate, pw.ToString(), cbxDebug.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked, PDFPath, cbd, txbPDFName.Text);
frmStatus.CloseWhenDone = true;
frmStatus.ShowDialog();
}
}
this.Close();
ShowDebugFiles();
}
private void CreateDebugFiles()
{
if (cbxDebugPagination.Checked)
Volian.Base.Library.DebugPagination.Open(PDFPath + "\\DebugPagaination.txt");
if (cbxDebugText.Checked)
Volian.Base.Library.DebugText.Open(PDFPath + "\\DebugText.txt");
}
private void ShowDebugFiles()
{
if (cbxDebugPagination.Checked)
Volian.Base.Library.DebugPagination.Show();
if (cbxDebugText.Checked)
Volian.Base.Library.DebugText.Show();
}
private void CreatePDF()
{
CreateDebugFiles();
// If file exists, determine if overwrite checkbox allows overwrite, if not prompt.
Volian.Print.Library.Rtf2Pdf.PdfDebug = true;
PrintWatermark pw = (PrintWatermark)cbxWaterMark.SelectedValue;
// Determine change bar settings. First get from config & then see if override from dialog.
// Also check that format allows override.
ChangeBarDefinition cbd = DetermineChangeBarSettings();
frmPDFStatusForm frmStatus = new frmPDFStatusForm(MyProcedure, RevNum, RevDate, pw.ToString(), cbxDebug.Checked, cbxOpenAfterCreate2.Checked, cbxOverwritePDF2.Checked,PDFPath, cbd, txbPDFName.Text);
frmStatus.ShowDialog();
this.Close();
ShowDebugFiles();
}
// Determine if any dialog selections for change bars have overridden the data
// supplied in the DocVconfig data or format file. Settings are location and text.
private ChangeBarDefinition DetermineChangeBarSettings()
{
ChangeBarDefinition cbd = new ChangeBarDefinition();
// if the dialog has 'without change bar' selected, then just set without and return
if (btnChgBarOff.Checked)
{
cbd.MyChangeBarType = PrintChangeBar.Without;
return cbd;
}
// Get settings from dialog because these are used to set the initial dialog values and
// any changes from user overrides the initial settings.
ChangeBarData changeBarData = MyProcedure.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData;
if (rbFormatDefault.Checked || _DocVersionConfig == null || _DocVersionConfig.Print_ChangeBar == PrintChangeBar.WithDefault)
{
cbd.MyChangeBarType = PrintChangeBar.WithDefault;
cbd.MyChangeBarText = changeBarData.ChangeBarMessage == "ChgID" ? PrintChangeBarText.ChgID :
changeBarData.ChangeBarMessage == "DateAndChgID" ? PrintChangeBarText.DateChgID :
changeBarData.ChangeBarMessage == "None" ? PrintChangeBarText.None :
changeBarData.ChangeBarMessage == "RevNum" ? PrintChangeBarText.RevNum : PrintChangeBarText.UserDef;
}
else if (rbCustom.Checked || _DocVersionConfig.Print_ChangeBar == PrintChangeBar.WithUserSpecified)
{
cbd.MyChangeBarLoc = _DocVersionConfig.Print_ChangeBarLoc; // (PrintChangeBarLoc)ppCmbxChgBarPos.SelectedIndex;
cbd.MyChangeBarText = (PrintChangeBarText)ppCmbxChgBarTxtType.SelectedIndex;
}
else
{
cbd.MyChangeBarLoc = _DocVersionConfig.Print_ChangeBarLoc;
cbd.MyChangeBarText = _DocVersionConfig.Print_ChangeBarText;
}
// now figure out the location.
if (cbd.MyChangeBarType != PrintChangeBar.Without)
{
// if the format has the absolutefixedchangecolumn format flag, then always use the fixedchangecolumn from the
// format, otherwise, use the default column based on the selected location, stored in the base format.
cbd.MyChangeBarColumn = (changeBarData.AbsoluteFixedChangeColumn) ?
(int)changeBarData.FixedChangeColumn :
System.Convert.ToInt32(changeBarData.DefaultCBLoc.Split(" ,".ToCharArray())[System.Convert.ToInt32(cbd.MyChangeBarLoc)]);
//cbd.MyChangeBarColumn = (int)changeBarData.FixedChangeColumn;
if (cbd.MyChangeBarText == PrintChangeBarText.UserDef)
cbd.MyChangeBarMessage = _DocVersionConfig.Print_UserCBMess1 + @"\n" + _DocVersionConfig.Print_UserCBMess2;
}
return cbd;
}
private void btnCreatePDF_Click(object sender, EventArgs e)
{
if (_AllProcedures)
{
DateTime dtStart = DateTime.Now;
CreatePDFs();
if (VlnSettings.DebugMode)
{
MessageBox.Show(string.Format("{0} Minutes to Print All Procedures"
, TimeSpan.FromTicks(DateTime.Now.Ticks - dtStart.Ticks).TotalMinutes),
"Printing Duration", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
CreatePDF();
}
private bool _Initializing = false;
private void tbSettings_Click(object sender, EventArgs e)
{
// Fill in the settings from the config. This tab is used
// to update the settings for PdfLocation, RevNum, RevDate and ReviewDate
_Initializing = true;
txbPdfLocationS.Text = txbPDFLocation.Text;
_Initializing = false;
}
private void btnPdfLocation_Click(object sender, EventArgs e)
{
DlgBrowseFolder.SelectedPath = PDFPathSetting;
DialogResult drslt = DlgBrowseFolder.ShowDialog();
if (drslt == DialogResult.OK)
{
//cbxPDFloc.Text = DlgBrowseFolder.SelectedPath;
txbPdfLocationS.Text = DlgBrowseFolder.SelectedPath;
txbPDFLocation.Text = txbPdfLocationS.Text;
//lblCurPDFLoc.Text = cbxPDFloc.Text;
//UpdateDropDown2();
}
}
private void rbFormatDefault_Click(object sender, EventArgs e)
{
SetCustomControls(false);
// Make Custom controls invisible
ppGpbxUserSpecCB.Visible = false;
}
private void SetCustomControls(bool enabled)
{
ppCmbxChgBarPos.Enabled = enabled;
ppCmbxChgBarTxtType.Enabled = enabled;
ppTxbxChangeBarUserMsgOne.Enabled = enabled;
ppTxbxChangeBarUserMsgTwo.Enabled = enabled;
}
private void rbCustom_Click(object sender, EventArgs e)
{
SetCustomControls(true);
// Make Custom controls visible
ppGpbxUserSpecCB.Visible = true;
}
private void rbFormatDefault_CheckedChanged(object sender, EventArgs e)
{
SetCustomControls(false);
// Make Custom controls invisible
ppGpbxUserSpecCB.Visible = false;
}
private void ppCmbxChgBarTxtType_SelectedIndexChanged(object sender, EventArgs e)
{
if (_Initializing) return;
ppGpbxUserSpecTxt.Enabled = ppCmbxChgBarTxtType.SelectedIndex == (int)PrintChangeBarText.UserDef;
}
private void txbRevDate_Enter(object sender, EventArgs e)
{
txbDate = txbRevDate;
grpDateSelector.Text = "Select Revision Date";
grpDateSelector.Visible = calDateSelector.Visible = true;
}
private void txbRevDate_Leave(object sender, EventArgs e)
{
if (_Initializing) return;
txbDate = null;
grpDateSelector.Visible = calDateSelector.Visible = false;
// save the RevDate to the procedure's config.
ProcedureConfig pc = MyProcedure.MyConfig as ProcedureConfig;
if (pc == null) return;
pc.Print_RevDate = txbRevDate.Text;
using (Item itm = Item.Get(MyProcedure.ItemID))
{
itm.MyContent.Config = MyProcedure.MyConfig.ToString();
itm.Save();
}
}
private void txbReviewDate_Leave(object sender, EventArgs e)
{
if (_Initializing) return;
txbDate = null;
grpDateSelector.Visible = calDateSelector.Visible = false;
// save the ReviewDate to the procedure's config.
ProcedureConfig pc = MyProcedure.MyConfig as ProcedureConfig;
if (pc == null) return;
pc.Print_ReviewDate = txbReviewDate.Text;
using (Item itm = Item.Get(MyProcedure.ItemID))
{
itm.MyContent.Config = MyProcedure.MyConfig.ToString();
itm.Save();
// need to reset config to !dirty?
}
}
private void txbReviewDate_Enter(object sender, EventArgs e)
{
txbDate = txbReviewDate;
grpDateSelector.Text = "Select Review Date";
grpDateSelector.Visible = calDateSelector.Visible = true;
}
private TextBox txbDate = null;
private void calDateSelector_DateSelected(object sender, DateRangeEventArgs e)
{
if (txbDate != null)
txbDate.Text = e.Start.ToShortDateString();
}
private void txbRevNum_Leave(object sender, EventArgs e)
{
if (_Initializing) return;
// save the RevNum to the procedure's config.
ProcedureConfig pc = MyProcedure.MyConfig as ProcedureConfig;
if (pc == null) return;
pc.Print_Rev = txbRevNum.Text;
using (Item itm = Item.Get(MyProcedure.ItemID))
{
itm.MyContent.Config = MyProcedure.MyConfig.ToString();
itm.Save();
}
}
}
}