using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using Csla; using Csla.Data; using Csla.Validation; using System.Diagnostics; namespace VEPROMS.CSLA.Library { public partial class Pdf { public static void DeleteAll(int docID) { if (!CanDeleteObject()) throw new System.Security.SecurityException("User not authorized to remove a Pdf"); try { DataPortal.Delete(new DocIDCriteria(docID)); } catch (Exception ex) { throw new DbCslaException("Error on Pdf.DeleteAll", ex); } } [Serializable()] protected class DocIDCriteria { private int _DocID; public int DocID { get { return _DocID; } } public DocIDCriteria(int docID) { _DocID = docID; } } [Transactional(TransactionalTypes.TransactionScope)] private void DataPortal_Delete(DocIDCriteria criteria) { if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Pdf.DataPortal_Delete", GetHashCode()); try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandTimeout = Database.SQLTimeout; cm.CommandText = "deleteAllPdfs"; cm.Parameters.AddWithValue("@DocID", criteria.DocID); cm.ExecuteNonQuery(); } } } catch (Exception ex) { if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DataPortal_Delete", ex); _ErrorMessage = ex.Message; throw new DbCslaException("Pdf.DataPortal_Delete", ex); } } // used to remove word section PDFs to force ROs to be updated when printed or saved public static void DeleteAllDocVersion(int versionID) { if (!CanDeleteObject()) throw new System.Security.SecurityException("User not authorized to remove a Pdf"); try { DataPortal.Delete(new VersionIDCriteria(versionID)); } catch (Exception ex) { throw new DbCslaException("Error on Pdf.DeleteAllDocVersion", ex); } } [Serializable()] protected class VersionIDCriteria { private int _VersionID; public int VersionID { get { return _VersionID; } } public VersionIDCriteria(int versionID) { _VersionID = versionID; } } [Transactional(TransactionalTypes.TransactionScope)] private void DataPortal_Delete(VersionIDCriteria criteria) { if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] Pdf.DataPortal_Delete", GetHashCode()); try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandTimeout = Database.SQLTimeout; cm.CommandText = "deleteAllDocVersionPdfs"; cm.Parameters.AddWithValue("@VersionID", criteria.VersionID); cm.ExecuteNonQuery(); } } } catch (Exception ex) { if (_MyLog.IsErrorEnabled) _MyLog.Error("Pdf.DataPortal_Delete", ex); _ErrorMessage = ex.Message; throw new DbCslaException("Pdf.DataPortal_Delete", ex); } } } public partial class PdfInfo { // B2023-024 PROMS was using old cached PDF data when printing Word sections. // Added this method that can be called to clear the PDF print cache for a specified section. public static void RemovePDFFromCache(ItemInfo sect) { if (sect.MyContent.MyEntry == null) return; // B2023-030 not a word section so just jump out DocStyle myDocStyle = sect.ActiveSection.MyDocStyle; SectionConfig sc = sect.ActiveSection.MyConfig as SectionConfig; int ss = sect.MyDocVersion.DocVersionConfig.SelectedSlave; if (sc != null && sc.Section_WordMargin == "Y") { RemoveFromCachedByPrimaryKey(sect.MyContent.MyEntry.DocID, ss * 10 + MSWordToPDF.DebugStatus, 0, 0, 0, 0); } else { RemoveFromCachedByPrimaryKey(sect.MyContent.MyEntry.DocID, ss * 10 + MSWordToPDF.DebugStatus, (int)myDocStyle.Layout.TopMargin, (int)myDocStyle.Layout.PageLength, (int)myDocStyle.Layout.LeftMargin, (int)myDocStyle.Layout.PageWidth); } } public static PdfInfo Get(ItemInfo sect, bool ovrride) { int count = 0; while (count < 2) { DocStyle myDocStyle = sect.ActiveSection.MyDocStyle; SectionConfig sc = sect.ActiveSection.MyConfig as SectionConfig; PdfInfo myPdf = null; int ss = sect.MyDocVersion.DocVersionConfig.SelectedSlave; if (sc != null && sc.Section_WordMargin == "Y") { myPdf = Get(sect.MyContent.MyEntry.DocID, ss*10 + MSWordToPDF.DebugStatus, 0, 0, 0, 0); } else { myPdf = Get(sect.MyContent.MyEntry.DocID, ss*10 + MSWordToPDF.DebugStatus, (int)myDocStyle.Layout.TopMargin, (int)myDocStyle.Layout.PageLength, (int)myDocStyle.Layout.LeftMargin, (int)myDocStyle.Layout.PageWidth); } // override forces the printing of the word section, which creates a word file with resolved ROs, which is saved for an approved export if (!ovrride || (ovrride && count == 1)) { if (myPdf != null) return myPdf; if (count > 0) return null; // Could not find or create a pdf } MSWordToPDF.SetDocPdf(sect.MyContent.MyEntry.MyDocument, sect); count++; } return null; } } public partial class PdfInfoList { } }