diff --git a/AdvertsingProfitControl/AboutBox1.Designer.cs b/AdvertsingProfitControl/AboutBox1.Designer.cs index b941180..545e2ea 100644 --- a/AdvertsingProfitControl/AboutBox1.Designer.cs +++ b/AdvertsingProfitControl/AboutBox1.Designer.cs @@ -117,11 +117,11 @@ this.Controls.Add(this.tableLayoutPanel); this.DoubleBuffered = true; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Margin = new System.Windows.Forms.Padding(6, 6, 6, 6); + this.Margin = new System.Windows.Forms.Padding(6); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "AboutBox1"; - this.Padding = new System.Windows.Forms.Padding(17, 17, 17, 17); + this.Padding = new System.Windows.Forms.Padding(17); this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/AdvertsingProfitControl/AboutBox1.cs b/AdvertsingProfitControl/AboutBox1.cs index e97655d..53c99ff 100644 --- a/AdvertsingProfitControl/AboutBox1.cs +++ b/AdvertsingProfitControl/AboutBox1.cs @@ -13,7 +13,7 @@ namespace AdvertsingProfitControl var db = new AdvertisingProfitControlModel(); var version = db.Versions.SingleOrDefault(x => x.Id == 1); databaseVersionLabel.Text = version == null ? @"Database Version: N/A" : $@"Database Version: {version.VersionNumber}"; - reportGeneratingVersionLabel.Text = @"Report Generating Engine Version: 0.5.0.0 Alpha"; + reportGeneratingVersionLabel.Text = @"Report Generating Engine Version: " + ReportGenerator.Version; } } } diff --git a/AdvertsingProfitControl/AdvertsingProfitControl.csproj b/AdvertsingProfitControl/AdvertsingProfitControl.csproj index 3ca548b..53f2183 100644 --- a/AdvertsingProfitControl/AdvertsingProfitControl.csproj +++ b/AdvertsingProfitControl/AdvertsingProfitControl.csproj @@ -99,6 +99,12 @@ ..\packages\Pechkin.0.5.8.1\lib\net40\Pechkin.dll + + ..\packages\FreeSpire.PDF.3.2\lib\net40\Spire.License.dll + + + ..\packages\FreeSpire.PDF.3.2\lib\net40\Spire.Pdf.dll + diff --git a/AdvertsingProfitControl/BackPageGenerator.cs b/AdvertsingProfitControl/BackPageGenerator.cs index a47b75c..e1413aa 100644 --- a/AdvertsingProfitControl/BackPageGenerator.cs +++ b/AdvertsingProfitControl/BackPageGenerator.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -using System.IO; using System.Drawing.Printing; +using System.IO; using System.Linq; using System.Web.UI; using Pechkin; @@ -10,34 +10,28 @@ namespace AdvertsingProfitControl { internal class BackPageGenerator { - FrmLogConsole _console = FrmLogConsole.GetStaticInstance; - - public byte[] RenderHtmlCodeToImage(string path, string targetPath) + /// + /// Generates the back page of the report, Weekly Inventory Control, as a single PDF file. + /// + /// + public void GenerateBackPage(DateTime date) { - var htmlCode = File.ReadAllLines(path); - var code = htmlCode.Aggregate("", (current, line) => current + "\r\n" + line); - try + var stringWriter = new StringWriter(); + var writer = new HtmlTextWriter(stringWriter); + BuildReportBackPage(date, ref writer); + var backPage = new SimplePechkin(new GlobalConfig().SetPaperOrientation(false).SetPaperSize(PaperKind.A4)).Convert(stringWriter.ToString()); + // + using (var fs = new FileStream(GlobalClasses.LogFilePath + "Back.pdf", FileMode.Create, FileAccess.Write)) { - var config = new GlobalConfig().SetPaperSize(PaperKind.A4).SetPaperOrientation(true); - var pdfBuf = new SimplePechkin(config).Convert(code); - using (var fs = new FileStream(targetPath, FileMode.Create, FileAccess.ReadWrite)) - { - fs.Write(pdfBuf, 0, pdfBuf.Length); - } - return pdfBuf; + fs.Write(backPage, 0, backPage.Length); } - catch (Exception e) - { - _console.WriteToLog(FrmLogConsole.Level.Critical, - "Failed to generate an updated image for the back page of Advertising Profit Control."); - _console.WriteToLog(FrmLogConsole.Level.Debug, e.Message); - _console.WriteToLog(FrmLogConsole.Level.Info, "This is most likely a screw you from the GDI+ subsystem of Windows."); - - } - return new byte[1]; } - - public void BuildReportBackPage(DateTime date, ref HtmlTextWriter writer) + /// + /// Generates the HTML code for the back page, Weekly Inventory Control. + /// + /// + /// + private void BuildReportBackPage(DateTime date, ref HtmlTextWriter writer) { var db = new AdvertisingProfitControlModel(); var dateRecord = db.WeekEndingDates.SingleOrDefault(x => x.EndingDate == date); @@ -46,18 +40,18 @@ namespace AdvertsingProfitControl var taxable = db.Taxables.SingleOrDefault(x => x.FkDateId == dateRecord.Id); var costAnylsis = db.CostAnalysis.SingleOrDefault(x => x.FkDateId == dateRecord.Id); - //writer.Write("\n"); - //writer.RenderBeginTag(HtmlTextWriterTag.Html); - //writer.RenderBeginTag(HtmlTextWriterTag.Head); - //writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css"); - //writer.RenderBeginTag(HtmlTextWriterTag.Style); - //writer.Write("td{margins:0px; padding:2px; border:1px solid black; text-align:left; vertical-align:bottom}"); - //writer.RenderEndTag();//style - //writer.RenderEndTag();//Head - //writer.RenderBeginTag(HtmlTextWriterTag.Body); - writer.AddAttribute(HtmlTextWriterAttribute.Style, "page-break-inside: avoid; page-break-before:always"); - writer.RenderBeginTag(HtmlTextWriterTag.Div);//div - writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-collapse: collapse; width:50%; -webkit-transform: rotate(270deg)"); + writer.Write("\n"); + writer.RenderBeginTag(HtmlTextWriterTag.Html); + writer.RenderBeginTag(HtmlTextWriterTag.Head); + writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css"); + writer.RenderBeginTag(HtmlTextWriterTag.Style); + writer.Write("td{margins:0px; padding:2px; border:1px solid black; text-align:left; vertical-align:bottom; font-size:20px}"); + writer.RenderEndTag();//style + writer.RenderEndTag();//Head + writer.RenderBeginTag(HtmlTextWriterTag.Body); + //writer.AddAttribute(HtmlTextWriterAttribute.Style, "page-break-inside: avoid; page-break-before:always"); + //writer.RenderBeginTag(HtmlTextWriterTag.Div);//div + writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-collapse: collapse; width:100%; height:100%"); writer.RenderBeginTag(HtmlTextWriterTag.Table); //Create the header as the first row. writer.RenderBeginTag(HtmlTextWriterTag.Tr); @@ -372,7 +366,7 @@ namespace AdvertsingProfitControl writer.RenderEndTag();//tr } writer.RenderEndTag();//table - writer.RenderEndTag();//div + //writer.RenderEndTag();//div writer.RenderEndTag();//body writer.RenderEndTag();//html } diff --git a/AdvertsingProfitControl/FrmMain.Designer.cs b/AdvertsingProfitControl/FrmMain.Designer.cs index 0059ec2..f0e5b0c 100644 --- a/AdvertsingProfitControl/FrmMain.Designer.cs +++ b/AdvertsingProfitControl/FrmMain.Designer.cs @@ -45,8 +45,8 @@ this.manageSuppliersToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.adSpecialKeyWordsToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.helpMainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.showHideConsoleHelpMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.dbVersionHelpMainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.showHideConsoleHelpMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.examineLogsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.debugMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.rawViewDebugMainMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -135,11 +135,11 @@ // // printPreviewButton // - this.printPreviewButton.Location = new System.Drawing.Point(16, 273); + this.printPreviewButton.Location = new System.Drawing.Point(180, 271); this.printPreviewButton.Name = "printPreviewButton"; - this.printPreviewButton.Size = new System.Drawing.Size(138, 49); + this.printPreviewButton.Size = new System.Drawing.Size(174, 49); this.printPreviewButton.TabIndex = 4; - this.printPreviewButton.Text = "Print Preview"; + this.printPreviewButton.Text = "Generate Report"; this.printPreviewButton.UseVisualStyleBackColor = true; this.printPreviewButton.Click += new System.EventHandler(this.DisplayPrintPreview); // @@ -272,13 +272,6 @@ this.helpMainMenu.Size = new System.Drawing.Size(68, 34); this.helpMainMenu.Text = "&Help"; // - // showHideConsoleHelpMainMenu - // - this.showHideConsoleHelpMainMenu.Name = "showHideConsoleHelpMainMenu"; - this.showHideConsoleHelpMainMenu.Size = new System.Drawing.Size(288, 34); - this.showHideConsoleHelpMainMenu.Text = "Sh&ow/Hide Console"; - this.showHideConsoleHelpMainMenu.Click += new System.EventHandler(this.ShowHideLogConsole); - // // dbVersionHelpMainMenu // this.dbVersionHelpMainMenu.Name = "dbVersionHelpMainMenu"; @@ -286,6 +279,13 @@ this.dbVersionHelpMainMenu.Text = "&Verison Information"; this.dbVersionHelpMainMenu.Click += new System.EventHandler(this.DisplayProductVersionNumbers); // + // showHideConsoleHelpMainMenu + // + this.showHideConsoleHelpMainMenu.Name = "showHideConsoleHelpMainMenu"; + this.showHideConsoleHelpMainMenu.Size = new System.Drawing.Size(288, 34); + this.showHideConsoleHelpMainMenu.Text = "Sh&ow/Hide Console"; + this.showHideConsoleHelpMainMenu.Click += new System.EventHandler(this.ShowHideLogConsole); + // // examineLogsToolStripMenuItem // this.examineLogsToolStripMenuItem.Name = "examineLogsToolStripMenuItem"; diff --git a/AdvertsingProfitControl/FrmMain.cs b/AdvertsingProfitControl/FrmMain.cs index 529a3a7..49b7fa3 100644 --- a/AdvertsingProfitControl/FrmMain.cs +++ b/AdvertsingProfitControl/FrmMain.cs @@ -327,55 +327,10 @@ namespace AdvertsingProfitControl private void DisplayPrintPreview(object sender, EventArgs e) { - //Build and render the front and back forms of the document. - //var test = new FrontPageGenerator(); - //var backPageTest = new BackPageGenerator(); - //var printTestPage = new PrintDocument(); - //var printDialog = new PrintPreviewDialog(); - //if (!usePreRenderedFilesCheckbox.Checked) - //{ - // //var databaseTracker = new DatabaseTracker(); - // //var databaseReader = new DatabaseReader(); - // //var dateId = - // // databaseReader.RetrieveDateIdByDateString(monthCalendar.SelectionStart.ToShortDateString(), - // // databaseTracker.DatabaseConnectionString); - // //var remaingingSales = _departmentSales - _salesProducedByAdItems; - // //var totalProfitReturnFromReminaingSales = remaingingSales * .3m; - // //var totalProfitReturn = _totalProfitReturnFromAdItems + totalProfitReturnFromReminaingSales; - // ////test.BuildFormFrontCompressedLayout(dateId, _departmentSales, _salesProducedByAdItems, remaingingSales, - // // //_totalProfitReturnFromAdItems, totalProfitReturnFromReminaingSales, totalProfitReturn, - // // //commentsTextBox.Text); - // //test.RenderHtmlToImage(); - // //backPageTest.GenerateWeeklyInventoryControlPage(dateId); - // //backPageTest.RenderHtmlToImage(); - //} - //else - //{ - // if (File.Exists(Application.StartupPath + "\\" + "FrontPage.html") && - // File.Exists(Application.StartupPath + "\\" + "Backpage.html")) - // { - // test.RenderHtmlToImage(); - // backPageTest.RenderHtmlToImage(); - // } - //} - - //var margin = new Margins(50, 50, 0, 0); - //printDoc.DefaultPageSettings.Margins = margin; - //printTestPage.PrintPage += PrintPage; - //printDialog.Document = printTestPage; - //printDialog.ShowDialog(); - //printDialog.Document = new PrintDocument(); - - //var dialog = new FolderBrowserDialog(); - //dialog.ShowDialog(); - //var path = dialog.SelectedPath; - //var pdf = gen.RenderHtmlCodeToImage(path + "\\FrontPage.html", path + "\\Image.pdf"); - //var doc = new PrintDocument(); - //doc.PrintPage += RenderPage; - //var spam = new PrintPreviewDialog {Document = doc}; - //spam.ShowDialog(); - //var form = new Test(); - //form.ShowDialog(); + printPreviewButton.Enabled = false; + var report = new ReportGenerator(); + report.GeneratePdfReport(_currentActiveDate); + printPreviewButton.Enabled = true; } private void RenderPage(object sender, PrintPageEventArgs e) @@ -910,6 +865,7 @@ namespace AdvertsingProfitControl clearCurrentRecordSelectedDateToolsMainMenu.ToolTipText = string.Empty; clearCurrentActiveYearTools.Enabled = true; clearCurrentActiveYearTools.ToolTipText = string.Empty; + printPreviewButton.Enabled = true; } else { @@ -920,6 +876,7 @@ namespace AdvertsingProfitControl clearCurrentRecordSelectedDateToolsMainMenu.ToolTipText = @"There is no date to clear."; clearCurrentActiveYearTools.Enabled = false; clearCurrentActiveYearTools.ToolTipText = @"There are no records to clear."; + printPreviewButton.Enabled = false; } } @@ -1139,9 +1096,7 @@ namespace AdvertsingProfitControl private void testToolStripMenuItem_Click(object sender, EventArgs e) { - var page = new ReportGenerator(); - page.GeneratePdfReport(_currentActiveDate); - page.RenderHtmlCodeToImage("C:\\Users\\Crypto\\Desktop\\Full.html", "C:\\Users\\Crypto\\Desktop\\Full.pdf"); + MessageBox.Show(@"Nothing to debug here!", @"Debug Message", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } \ No newline at end of file diff --git a/AdvertsingProfitControl/FrontPageGenerator.cs b/AdvertsingProfitControl/FrontPageGenerator.cs index c92ce13..cc99d8d 100644 --- a/AdvertsingProfitControl/FrontPageGenerator.cs +++ b/AdvertsingProfitControl/FrontPageGenerator.cs @@ -10,9 +10,28 @@ namespace AdvertsingProfitControl { internal class FrontPageGenerator { - FrmLogConsole _console = FrmLogConsole.GetStaticInstance; - - public void BuildReportFrontPage(DateTime date, ref HtmlTextWriter writer) + /// + /// Generates the front page of the report, Advertising Profit Control, as a single PDF file. + /// + /// + public void GenerateFrontPage(DateTime date) + { + var stringWriter = new StringWriter(); + var writer = new HtmlTextWriter(stringWriter); + BuildReportFrontPage(date, ref writer); + var frontPage = new SimplePechkin(new GlobalConfig().SetPaperOrientation(true).SetPaperSize(PaperKind.A4)).Convert(stringWriter.ToString()); + // + using (var fs = new FileStream(GlobalClasses.LogFilePath + "Front.pdf", FileMode.Create, FileAccess.Write)) + { + fs.Write(frontPage, 0, frontPage.Length); + } + } + /// + /// Generates the HTML code for the front page, Advertising Profit Control. + /// + /// + /// + private void BuildReportFrontPage(DateTime date, ref HtmlTextWriter writer) { var db = new AdvertisingProfitControlModel(); var dateRecord = db.WeekEndingDates.SingleOrDefault(x => x.EndingDate == date); @@ -27,15 +46,16 @@ namespace AdvertsingProfitControl writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css"); //Set the global style for the data cells. writer.RenderBeginTag(HtmlTextWriterTag.Style); - writer.Write("td{margins:0; padding:2px; border:1px solid black; font-size:20px; text-align:center; vertical-align:bottom}"); + writer.Write("td{margins:0; padding:2px; border:1px solid black; font-size:14px; text-align:center; vertical-align:bottom}"); writer.RenderEndTag();// end style writer.RenderEndTag(); // end Head + //writer.AddAttribute(HtmlTextWriterAttribute.Style, "width:11in; height:8in"); writer.RenderBeginTag(HtmlTextWriterTag.Body); - writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none; border-collapse: collapse; width:100%"); //style for the table + writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none; border-collapse: collapse; margin-top:1in; width:100%; height:100%"); //style for the table writer.RenderBeginTag(HtmlTextWriterTag.Table); //Begin rendering the top rows, the form name, store, department and date fields. writer.RenderBeginTag(HtmlTextWriterTag.Tr);//begin first row - writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none; font-size:40px"); + writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none; font-size:30px"); writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "20"); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("Advertising Profit Control v" + Application.ProductVersion + ""); @@ -291,6 +311,8 @@ namespace AdvertsingProfitControl writer.RenderEndTag();//end totals row //end totals row writer.RenderEndTag();//table + writer.RenderEndTag();//body + writer.RenderEndTag();//html } private void RenderCostsAnalysisCell(CostAnalysisCells cell, ref HtmlTextWriter writer, decimal? value, string rowSpan) @@ -318,11 +340,11 @@ namespace AdvertsingProfitControl break; case CostAnalysisCells.ProfitReturnFromRemainingSales: number = "5"; - labelText = "Total $ Profit Return
From Remaining Sales

Going-in Gross % x Remaining Sales"; + labelText = "Total $ Profit Return
From Remaining Sales"; break; case CostAnalysisCells.TotalProfitReturn: number = "6"; - labelText = "Total $ Profit
Return

Line 4 Plus Line 5"; + labelText = "Total $ Profit
Return
Line 4 Plus Line 5"; break; case CostAnalysisCells.CrossProfitInfoCell: break; diff --git a/AdvertsingProfitControl/ReportGenerator.cs b/AdvertsingProfitControl/ReportGenerator.cs index ecba903..94f010d 100644 --- a/AdvertsingProfitControl/ReportGenerator.cs +++ b/AdvertsingProfitControl/ReportGenerator.cs @@ -1,50 +1,65 @@ using System; -using System.Drawing.Printing; using System.IO; -using System.Linq; -using System.Web.UI; -using Pechkin; +using Spire.Pdf; namespace AdvertsingProfitControl { internal class ReportGenerator { - public readonly string Version = "1.0.0.0"; + public static readonly string Version = "0.5.0.0"; + /// + /// Generates a full report, and places the file on the user's desktop for later viewing. + /// + /// public void GeneratePdfReport(DateTime date) { - var stringWriter = new StringWriter(); - var writer = new HtmlTextWriter(stringWriter); + //Check to see if the report already exists. + var reportFileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + date.ToString("yyyy MMMM dd") + " Report.pdf"; + if (File.Exists(reportFileName)) + { + var argument = "/select, \"" + reportFileName + "\""; + System.Diagnostics.Process.Start("explorer.exe", argument); + return; + } var front = new FrontPageGenerator(); var back = new BackPageGenerator(); - front.BuildReportFrontPage(date, ref writer); - back.BuildReportBackPage(date, ref writer); - - using (var streamWriter = new StreamWriter("C:\\Users\\Crypto\\Desktop\\Full.html")) - { - streamWriter.WriteLine(stringWriter.ToString()); - } + front.GenerateFrontPage(date); + back.GenerateBackPage(date); + //Merge the PDFs + GenerateFullReport(reportFileName); } - - public void RenderHtmlCodeToImage(string path, string targetPath) + /// + /// Merges the front and back PDF files into one and places the new file on the user's desktop. + /// Deletes the front and back pages when done. + /// + /// + private static void GenerateFullReport(string targetPath) { - var htmlCode = File.ReadAllLines(path); - var code = htmlCode.Aggregate("", (current, line) => current + "\r\n" + line); try { - var pechkin = new SimplePechkin(new GlobalConfig().SetMargins(50,0,0,0).SetPaperSize(PaperKind.A4).SetPaperOrientation(true).SetCopyCount(1)); - var pdf = pechkin.Convert(new ObjectConfig().SetZoomFactor(1.25), code); - //var config = new GlobalConfig().SetPaperSize(PaperKind.A4).SetPaperOrientation(true); - //var pdfBuf = new SimplePechkin(config).Convert(code); - using (var fs = new FileStream(targetPath, FileMode.Create, FileAccess.Write)) - { - fs.Write(pdf, 0, pdf.Length); - } + var pdfdocs = new PdfDocument[2]; + pdfdocs[0] = new PdfDocument(); + pdfdocs[0].LoadFromFile(GlobalClasses.LogFilePath + "Front.pdf", FileFormat.PDF); + pdfdocs[1] = new PdfDocument(); + pdfdocs[1].LoadFromFile(GlobalClasses.LogFilePath + "Back.pdf", FileFormat.PDF); + pdfdocs[0].AppendPage(pdfdocs[1]); + pdfdocs[0].SaveToFile(targetPath); + pdfdocs[0].Close(); + pdfdocs[1].Close(); + File.Delete(GlobalClasses.LogFilePath + "Front.pdf"); + File.Delete(GlobalClasses.LogFilePath + "Back.pdf"); + var argument = "/select, \"" + targetPath + "\""; + System.Diagnostics.Process.Start("explorer.exe", argument); } - finally + catch (IOException e) { } - } + finally + { + + } + } } } diff --git a/AdvertsingProfitControl/packages.config b/AdvertsingProfitControl/packages.config index c2bb520..75a2ffd 100644 --- a/AdvertsingProfitControl/packages.config +++ b/AdvertsingProfitControl/packages.config @@ -3,5 +3,6 @@ + \ No newline at end of file diff --git a/SetupProject/Product.wxs b/SetupProject/Product.wxs index c273ccb..48a546c 100644 --- a/SetupProject/Product.wxs +++ b/SetupProject/Product.wxs @@ -90,17 +90,51 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +