Files
advertising-profit-control/AdvertsingProfitControl/FrontPageGenerator.cs
T

505 lines
28 KiB
C#

using System;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.IO;
using System.Web.UI;
using System.Linq;
using System.Web.UI.WebControls;
using Pechkin;
namespace AdvertsingProfitControl
{
internal class FrontPageGenerator
{
FrmLogConsole _console = FrmLogConsole.GetStaticInstance;
public void RenderHtmlToImage()
{
var htmlCode = File.ReadAllLines(Application.StartupPath + "\\FrontPage.html");
var code = "";
foreach (var line in htmlCode)
{
code = code + "\r\n" + line;
}
try
{
//var imageFromHtml = HtmlRender.RenderToImage(code);
//imageFromHtml.RotateFlip(RotateFlipType.Rotate90FlipNone);
//imageFromHtml.Save(Application.StartupPath + "\\FrontPage.png", ImageFormat.Png);
//imageFromHtml.Dispose();
}
catch (Exception e)
{
_console.WriteToLog(FrmLogConsole.Level.Critical,
"Failed to generate an updated image for the front 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.");
}
}
public byte[] RenderHtmlCodeToImage(string path, string targetPath)
{
var htmlCode = File.ReadAllLines(path);
var code = htmlCode.Aggregate("", (current, line) => current + "\r\n" + line);
try
{
var config = new Pechkin.GlobalConfig().SetPaperSize(PaperKind.A4).SetPaperOrientation(true);
byte[] pdfBuf = new SimplePechkin(config).Convert(code);
using (var fs = new FileStream(targetPath, FileMode.Create, FileAccess.Write))
{
fs.Write(pdfBuf, 0, pdfBuf.Length);
}
return pdfBuf;
}
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 BuildFormFrontCompressedLayout(DateTime date)
{
var stringWriter = new StringWriter();
var writer = new HtmlTextWriter(stringWriter);
var db = new AdvertisingProfitControlModel();
var dateRecord = db.WeekEndingDates.SingleOrDefault(x => x.EndingDate == date);
if (dateRecord == null)
{
MessageBox.Show("Failed");
return;
}
writer.Write("<!DOCTYPE html>\n");
writer.RenderBeginTag(HtmlTextWriterTag.Html);
writer.RenderBeginTag(HtmlTextWriterTag.Head);
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.RenderEndTag();// end style
writer.RenderEndTag(); // end Head
writer.RenderBeginTag(HtmlTextWriterTag.Body);
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none; border-collapse: collapse; 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.Colspan, "20");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("<b>Advertising Profit Control v" + Application.ProductVersion + "</b>");
writer.RenderEndTag();//end product cell.
writer.RenderEndTag(); //End of first row
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //begin second row
writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left; border:none");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "9");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//begin store name cell
writer.Write("Store Name: <u>Allen's of Hastings</u>");
writer.RenderEndTag();//end store name cell
writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right; border:none");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "11");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //begin date and department cell
writer.Write("Week Ending: <u>" + date.ToString("d") + "</u><br>Department: <u>Produce</u>");
writer.RenderEndTag();//End date and department cell
writer.RenderEndTag();// second row
writer.RenderBeginTag(HtmlTextWriterTag.Tr);//begin label row
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.RenderEndTag();
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "6");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//projections label cell
writer.Write("Projection");
writer.RenderEndTag();//end projections label cell
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "10");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//actual label cell
writer.Write("Actual");
writer.RenderEndTag();//end actual label cell
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "3");
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//cost analysis label cell
writer.Write("Cost Analysis");
writer.RenderEndTag();//end cost analysis label cell
writer.RenderEndTag();//end label row (third row)
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
//Begin building the header row.
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-left:none; border-right:double");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Ad Items");
writer.RenderEndTag(); //th
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Sold");
writer.RenderEndTag(); //th
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Sale<br>Price");
writer.RenderEndTag(); //th
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Total<br>Sales");
writer.RenderEndTag(); //th
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Cost");
writer.RenderEndTag(); //th
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("$<br>Prof.<br>Retn.");
writer.RenderEndTag(); //th
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9; border-right:double");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Total<br>$<br>Prof.<br>Retn.");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Beg.<br>Inv.");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Rec'd");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Total");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("End.<br>Inv.");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Sold");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Sale<br>Price");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Total<br>Sales");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Cost");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("$<br>Prof.<br>Retn.");
writer.RenderEndTag(); //th
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Total<br>$<br>Prof.<br>Retn.");
writer.RenderEndTag(); //th
//Department Sales
//Grab the department sales from the database
var departmentRecord = db.WeeklySales.SingleOrDefault(x => x.FkDateId == dateRecord.Id);
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; border-left:double; font-size:9px");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//begin number cell
writer.Write("1");
writer.RenderEndTag();//end number cell
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; border-left:none");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//begin department sales cell
writer.Write("Department<br>Sales");
writer.RenderEndTag();//end department sales cell
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; border-left:none");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//department sales total sales column
writer.AddAttribute(HtmlTextWriterAttribute.Style, "margin:0px; border-left:1px solid black; border-top:1px dashed black; text-align:right");
writer.RenderBeginTag(HtmlTextWriterTag.P);//begin department sales paragraph tag; used because the borders of the element are flush with that of the cell's.
writer.Write(departmentRecord == null ? "$0.00" : $"{departmentRecord.TotalSales:C}");
writer.RenderEndTag();//end department sales paragraph tag
writer.RenderEndTag();//department sales total sales column
writer.RenderEndTag();//End of header row code.
//Profit Analysis values.
var projections = db.Projections.Where(x => x.FkDateId == dateRecord.Id).OrderBy(x => x.RowPosition).ToList();
var inventory = db.Inventories.Where(x => x.FkDateId == dateRecord.Id).OrderBy(x => x.RowPosition).ToList();
var actualSales = db.ActualSales.Where(x => x.FkDateId == dateRecord.Id).OrderBy(x => x.RowPosition).ToList();
var comments = db.Notes.SingleOrDefault(x => x.FkDateId == dateRecord.Id);
var projectionA = projections.Sum(x => x.TotalSales);
var projectionB = projections.Sum(x => x.TotalProfitReturn);
var actualA = actualSales.Sum(x => x.TotalSales);
var actualB = actualSales.Sum(x => x.TotalProfitReturn);
var adSpecialIndex = -1;
for (var i = 0; i < 25; i++)
{
var skipCheck = false;
if (i < projections.Count)
{
if (projections[i].FkAdSpecialId != null)
{
if (adSpecialIndex == -1)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr); //ad special table row
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-left:none; border-right:double");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "17");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write(projections[i].AdSpecial.Name);
writer.RenderEndTag(); //ad special cell
skipCheck = true;
SelectCostAnalysisCell(i, ref writer, actualA, actualB, departmentRecord, comments);
writer.RenderEndTag(); //end ad special row
}
adSpecialIndex = i;
}
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Style,
"border-left:none; border-right:double; text-align:left");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //ad item cell
writer.Write(projections[i].AdItem.Name);
writer.RenderEndTag(); //end ad item cell
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //projection sold
writer.Write(projections[i].Sold);
writer.RenderEndTag(); //end projection sold
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //projection sale price
writer.Write(projections[i].SalePrice);
writer.RenderEndTag(); //end projection sale price
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //projection total sales
writer.Write($"{projections[i].TotalSales:N2}");
writer.RenderEndTag(); //end projection total sales
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //projection cost
writer.Write($"{projections[i].Cost:N2}");
writer.RenderEndTag(); //end projection cost
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //projection profit return
writer.Write($"{projections[i].ProfitReturn:N2}");
writer.RenderEndTag(); //end projection profit return
writer.AddAttribute(HtmlTextWriterAttribute.Style, "background-color:#e9e9e9; border-right:double");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //projection total profit return
writer.Write($"{projections[i].TotalProfitReturn:N2}");
writer.RenderEndTag(); //end projection total profit return
writer.RenderBeginTag(HtmlTextWriterTag.Td); //inventory beginning
writer.Write(inventory[i].BeginningInventory);
writer.RenderEndTag(); //end inventory beginning
writer.RenderBeginTag(HtmlTextWriterTag.Td); //inventory received
writer.Write(inventory[i].Recieved);
writer.RenderEndTag(); //end inventory received
writer.RenderBeginTag(HtmlTextWriterTag.Td); //inventory total
writer.Write(inventory[i].TotalInventory);
writer.RenderEndTag(); //end inventory total
writer.RenderBeginTag(HtmlTextWriterTag.Td); //inventory ending
writer.Write(inventory[i].EndingInventory);
writer.RenderEndTag(); //end inventory ending
writer.RenderBeginTag(HtmlTextWriterTag.Td); //actual sales sold
writer.Write(actualSales[i].Sold);
writer.RenderEndTag(); //end actual sales sold
writer.RenderBeginTag(HtmlTextWriterTag.Td); //actual sales sale price
writer.Write(actualSales[i].SalePrice);
writer.RenderEndTag(); //end actual sales sale price
writer.RenderBeginTag(HtmlTextWriterTag.Td); //actual sales total sales
writer.Write($"{actualSales[i].TotalSales:N2}");
writer.RenderEndTag(); //end actual sales total sales
writer.RenderBeginTag(HtmlTextWriterTag.Td); //actual sales cost
writer.Write($"{actualSales[i].Cost:N2}");
writer.RenderEndTag(); //end actual sales cost
writer.RenderBeginTag(HtmlTextWriterTag.Td); //actual sales profit return
writer.Write($"{actualSales[i].ProfitReturn:N2}");
writer.RenderEndTag(); //end actual sales profit return
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:double");
writer.RenderBeginTag(HtmlTextWriterTag.Td); //actual sales total profit return
writer.Write($"{actualSales[i].TotalProfitReturn:N2}");
writer.RenderEndTag(); //end actual sales total profit return
}
else
{
//Pad
AppendPaddingRow(ref writer);
}
if(!skipCheck) SelectCostAnalysisCell(adSpecialIndex != -1 ? i + 1 : i, ref writer, actualA, actualB, departmentRecord, comments);
writer.RenderEndTag();//tr
}
//Create the totals row
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-left:none; border-right:double");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//empty cell
writer.RenderEndTag();//end padding
writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//projections total label cell
writer.Write("TOTAL");
writer.RenderEndTag();//end projections total label cell
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//projections A (total sales)
writer.Write("(A) " + $"{projectionA:N2}");
writer.RenderEndTag();//end projections A (total sales)
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:double");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//projections B (total profit return)
writer.Write("(B) " + $"{projectionB:N2}");
writer.RenderEndTag();//end projections B (total profit return)
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "5");
writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//actual sales total label cell
writer.Write("TOTAL");
writer.RenderEndTag();//end actual sales total label cell
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//actual sales A (total sales)
writer.Write("(A) " + $"{actualA:N2}");
writer.RenderEndTag();//end actual sales A (total sales)
writer.RenderBeginTag(HtmlTextWriterTag.Td);//begin empty cell
writer.RenderEndTag();//end empty cell
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:double");
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//actual sales B (total profit return)
writer.Write("(B) " + $"{actualB:N2}");
writer.RenderEndTag();//end actual sales A (total profit return)
writer.RenderEndTag();//end totals row
//end totals row
writer.RenderEndTag();//table
writer.RenderEndTag();//body
writer.RenderEndTag();//HTML
using (var streamWriter = new StreamWriter("C:\\Users\\Crypto\\Desktop\\TestPage.html"))
{
streamWriter.WriteLine(stringWriter.ToString());
}
RenderHtmlToImage();
}
private void RenderCostsAnalysisCell(CostAnalysisCells cell, ref HtmlTextWriter writer, decimal? value, string rowSpan)
{
var number = string.Empty;
var labelText = string.Empty;
switch (cell)
{
case CostAnalysisCells.DepartmentSales:
number = "1";
labelText = "Department<br>Sales";
break;
case CostAnalysisCells.SalesProduced:
number = "2";
labelText = "Sales Produced<br>by<br>Ad Items (A)";
break;
case CostAnalysisCells.RemainingSales:
number = "3";
labelText = "Remaining<br>Sales<br>(Line 1 minus<br>Line 2)";
break;
case CostAnalysisCells.ProfitReturnFromAdItems:
number = "4";
labelText = "Total $ Profit<br>Return From Ad<br>Items (B)";
break;
case CostAnalysisCells.ProfitReturnFromRemainingSales:
number = "5";
labelText = "Total $ Profit Return<br>From Remaining Sales<br><br>Going-in Gross % x Remaining Sales";
break;
case CostAnalysisCells.TotalProfitReturn:
number = "6";
labelText = "Total $ Profit<br>Return<br><br>Line 4 Plus Line 5";
break;
case CostAnalysisCells.CrossProfitInfoCell:
break;
case CostAnalysisCells.Comments:
break;
default:
throw new ArgumentOutOfRangeException(nameof(cell), cell, null);
}
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan, rowSpan);
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; border-left:double; font-size:14px; width:25px");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//begin number cell
writer.Write(number);
writer.RenderEndTag();//end number cell
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan, rowSpan);
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; border-left:none; width:200px");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//begin department sales cell
writer.Write(labelText);
writer.RenderEndTag();//end department sales cell
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan, rowSpan);
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; border-left:none; width:75px");
writer.RenderBeginTag(HtmlTextWriterTag.Td);//department sales total sales column
writer.AddAttribute(HtmlTextWriterAttribute.Style, "margin:0px; border-left:1px solid black; border-top:1px dashed black; text-align:right");
writer.RenderBeginTag(HtmlTextWriterTag.P);//begin department sales paragraph tag; used because the borders of the element are flush with that of the cell's.
writer.Write($"{value:C}");
writer.RenderEndTag();//end department sales paragraph tag
writer.RenderEndTag();//department sales total sales column
}
private void RenderCostsAnalysisCell(CostAnalysisCells cell, ref HtmlTextWriter writer, string value = "")
{
writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "3");
switch (cell)
{
case CostAnalysisCells.CrossProfitInfoCell:
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan, "3");
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; text-align:left");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("To Find Gross Profit % Divide<br>Total Profit Return By Dept.<br>Weekly Retail Sales");
break;
case CostAnalysisCells.Comments:
writer.AddAttribute(HtmlTextWriterAttribute.Rowspan, "5");
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; text-align:left; vertical-align:top");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("Comments: " + value);
break;
}
writer.RenderEndTag();
}
private void SelectCostAnalysisCell(int rowIndex, ref HtmlTextWriter writer, decimal? actualA, decimal? actualB, WeeklySale departmentRecord, Note comments)
{
switch (rowIndex)
{
case 0:
RenderCostsAnalysisCell(CostAnalysisCells.SalesProduced, ref writer, actualA, "3");
break;
case 3:
if (departmentRecord != null)
RenderCostsAnalysisCell(CostAnalysisCells.RemainingSales, ref writer, departmentRecord.TotalSales - actualA, "4");
break;
case 7:
RenderCostsAnalysisCell(CostAnalysisCells.ProfitReturnFromAdItems, ref writer, actualB, "3");
break;
case 10:
//get cross profit return
var s = (decimal) 0.3;
RenderCostsAnalysisCell(CostAnalysisCells.ProfitReturnFromRemainingSales, ref writer, s * (departmentRecord.TotalSales - actualA), "5");
break;
case 15:
var x = (decimal) 0.3 * (departmentRecord.TotalSales - actualA);
RenderCostsAnalysisCell(CostAnalysisCells.TotalProfitReturn, ref writer, x + actualB, "4");
break;
case 19:
RenderCostsAnalysisCell(CostAnalysisCells.CrossProfitInfoCell, ref writer);
break;
case 22:
RenderCostsAnalysisCell(CostAnalysisCells.Comments, ref writer, comments.Remark);
break;
}
}
private void AppendPaddingRow(ref HtmlTextWriter writer)
{
var cellCount = 0;
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
while (cellCount < 17)
{
switch (cellCount)
{
case 0:
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-left:none; border-right:double");
break;
case 6:
case 16:
writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:double");
break;
}
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("<br>");
writer.RenderEndTag();
cellCount++;
}
}
private enum CostAnalysisCells
{
DepartmentSales = 0,
SalesProduced = 1,
RemainingSales = 2,
ProfitReturnFromAdItems = 3,
ProfitReturnFromRemainingSales = 4,
TotalProfitReturn = 5,
CrossProfitInfoCell = 6,
Comments = 7
}
}
}