diff --git a/AdvertsingProfitControl/BackPageGenerator.cs b/AdvertsingProfitControl/BackPageGenerator.cs index d5234e6..5494fff 100644 --- a/AdvertsingProfitControl/BackPageGenerator.cs +++ b/AdvertsingProfitControl/BackPageGenerator.cs @@ -77,6 +77,7 @@ namespace AdvertsingProfitControl writer.AddAttribute(HtmlTextWriterAttribute.Style, "border:none"); writer.RenderBeginTag(HtmlTextWriterTag.Td); //TODO: Validate the last week's date + //Grab last week's date writer.Write("Week Ending " + date.AddDays(-7).ToString("d") + ""); writer.RenderEndTag();//td writer.RenderEndTag();//tr @@ -130,25 +131,33 @@ namespace AdvertsingProfitControl writer.RenderEndTag();//td //Sunday td writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (weeklySale == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("Sunday"); writer.RenderEndTag();//td - //Dollar amount for Sunday - writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); - writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (weeklySale != null) writer.Write($"{weeklySale.Sunday:N2}"); - writer.RenderEndTag();//dollar amount Sunday end - writer.RenderEndTag();//tr + if (weeklySale != null) + { + //Dollar amount for Sunday + writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); + writer.RenderBeginTag(HtmlTextWriterTag.Td); + writer.Write($"{weeklySale.Sunday:N2}"); + writer.RenderEndTag();//dollar amount Sunday end + writer.RenderEndTag();//tr + } //Row spanned row for the header row. writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (weeklySale == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Monday cell writer.Write("Monday"); writer.RenderEndTag();//Monday end - writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); - writer.RenderBeginTag(HtmlTextWriterTag.Td);//Monday dollar amount - if (weeklySale != null) writer.Write($"{weeklySale.Monday:N2}"); - writer.RenderEndTag();//end Monday dollar amount + if (weeklySale != null) + { + writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); + writer.RenderBeginTag(HtmlTextWriterTag.Td);//Monday dollar amount + writer.Write($"{weeklySale.Monday:N2}"); + writer.RenderEndTag();//end Monday dollar amount + } writer.RenderEndTag();//end spanned row tr // for (var i = 0; i < 33; i++) @@ -382,62 +391,74 @@ namespace AdvertsingProfitControl { case 0: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Tuesday writer.Write("Tuesday"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Tuesday - if (sales != null && sales.Tuesday != 0) writer.Write($@"{sales.Tuesday:N2}"); + writer.Write($@"{sales.Tuesday:N2}"); writer.RenderEndTag(); break; case 1: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if(sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Wednesday writer.Write("Wednesday"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (sales != null && sales.Wednesday != 0) writer.Write($@"{sales.Wednesday:N2}"); + writer.Write($@"{sales.Wednesday:N2}"); writer.RenderEndTag(); break; case 2: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Thursday writer.Write("Thursday"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (sales != null && sales.Thursday != 0) writer.Write($@"{sales.Thursday:N2}"); + writer.Write($@"{sales.Thursday:N2}"); writer.RenderEndTag(); break; case 3: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Friday writer.Write("Friday"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (sales != null && sales.Friday != 0) writer.Write($@"{sales.Friday:N2}"); + writer.Write($@"{sales.Friday:N2}"); writer.RenderEndTag(); break; case 4: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Saturday writer.Write("Saturday"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (sales != null && sales.Saturday != 0) writer.Write($@"{sales.Saturday:N2}"); + writer.Write($@"{sales.Saturday:N2}"); writer.RenderEndTag(); break; case 5: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//total sales writer.Write("Total Sales"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (sales != null && sales.TotalSales != 0) writer.Write($@"{sales.TotalSales:N2}"); + writer.Write($@"{sales.TotalSales:N2}"); writer.RenderEndTag(); break; } @@ -449,82 +470,98 @@ namespace AdvertsingProfitControl { case 7: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Sunday writer.Write("Sunday"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (taxable != null && taxable.Sunday != 0) writer.Write($@"{taxable.Sunday:N2}"); + writer.Write($@"{taxable.Sunday:N2}"); writer.RenderEndTag(); break; case 8: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Monday writer.Write("Monday"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (taxable != null && taxable.Monday != 0) writer.Write($@"{taxable.Monday:N2}"); + writer.Write($@"{taxable.Monday:N2}"); writer.RenderEndTag(); break; case 9: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Tuesday writer.Write("Tuesday"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Tuesday - if (taxable != null && taxable.Tuesday != 0) writer.Write($@"{taxable.Tuesday:N2}"); + writer.Write($@"{taxable.Tuesday:N2}"); writer.RenderEndTag(); break; case 10: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Wednesday writer.Write("Wednesday"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (taxable != null && taxable.Wednesday != 0) writer.Write($@"{taxable.Wednesday:N2}"); + writer.Write($@"{taxable.Wednesday:N2}"); writer.RenderEndTag(); break; case 11: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Thursday writer.Write("Thursday"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (taxable != null && taxable.Thursday != 0) writer.Write($@"{taxable.Thursday:N2}"); + writer.Write($@"{taxable.Thursday:N2}"); writer.RenderEndTag(); break; case 12: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Friday writer.Write("Friday"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (taxable != null && taxable.Friday != 0) writer.Write($@"{taxable.Friday:N2}"); + writer.Write($@"{taxable.Friday:N2}"); writer.RenderEndTag(); break; case 13: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Saturday writer.Write("Saturday"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (taxable != null && taxable.Saturday != 0) writer.Write($@"{taxable.Saturday:N2}"); + writer.Write($@"{taxable.Saturday:N2}"); writer.RenderEndTag(); break; case 14: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (taxable == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//total sales writer.Write("Total Taxable"); writer.RenderEndTag(); + if (taxable == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (taxable != null && taxable.Total != 0) writer.Write($@"{taxable.Total:N2}"); + writer.Write($@"{taxable.Total:N2}"); writer.RenderEndTag(); break; } @@ -536,19 +573,23 @@ namespace AdvertsingProfitControl { case 16: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Total sales writer.Write("1. Total Sales"); - writer.RenderEndTag(); + writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if(sales != null && sales.TotalSales != 0) writer.Write($@"{sales.TotalSales:N2}"); + writer.Write($@"{sales.TotalSales:N2}"); writer.RenderEndTag(); break; case 17: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Less cost of sales writer.Write("2. Less Cost of Sales"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); if (invoices.Count > 0) @@ -568,45 +609,45 @@ namespace AdvertsingProfitControl break; case 19: writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-top:none"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//dollar gross amount writer.Write("
");//Empty cell writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (sales != null) + if (invoices.Count > 0) { - if (invoices.Count > 0) - { - var dollarGross = sales.TotalSales - invoices.Sum(x => x.InvoiceNetAmountAtCost); - if(dollarGross != 0) - writer.Write($@"{dollarGross:N2}"); - } + var dollarGross = sales.TotalSales - invoices.Sum(x => x.InvoiceNetAmountAtCost); + if(dollarGross != 0) + writer.Write($@"{dollarGross:N2}"); } writer.RenderEndTag(); break; case 20: - writer.AddAttribute(HtmlTextWriterAttribute.Style, "border-right:none; text-align:left"); + writer.AddAttribute(HtmlTextWriterAttribute.Style, sales == null ? string.Empty : "border-right:none;" + " text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Gross dollar percentage writer.Write("% Gross Profit"); writer.RenderEndTag(); + if (sales == null) break; writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:right; border-left:none"); writer.RenderBeginTag(HtmlTextWriterTag.Td); - if (sales != null) + if (invoices.Count > 0) { - if (invoices.Count > 0) - { - var grossDollarPercentage = (sales.TotalSales - invoices.Sum(x => x.InvoiceNetAmountAtCost)) / sales.TotalSales; - if(grossDollarPercentage != 0) - writer.Write($@"{grossDollarPercentage:P}"); - } + var grossDollarPercentage = (sales.TotalSales - invoices.Sum(x => x.InvoiceNetAmountAtCost)) / sales.TotalSales; + if(grossDollarPercentage != 0) + writer.Write($@"{grossDollarPercentage:P}"); } writer.RenderEndTag(); break; case 21: writer.AddAttribute(HtmlTextWriterAttribute.Style, "text-align:left"); + if (sales == null) writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Td);//Weekly department Expense writer.Write("Est. Wkly. Dept. Expense"); writer.RenderEndTag(); + if (sales == null) break; writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write("
"); writer.RenderEndTag(); diff --git a/AdvertsingProfitControl/FrontPageGenerator.cs b/AdvertsingProfitControl/FrontPageGenerator.cs index fa60283..6b6f78c 100644 --- a/AdvertsingProfitControl/FrontPageGenerator.cs +++ b/AdvertsingProfitControl/FrontPageGenerator.cs @@ -190,7 +190,6 @@ namespace AdvertsingProfitControl var adSpecialIndex = -1; for (var i = 0; i < 25; i++) { - var skipCheck = false; if (i < projections.Count) { if (projections[i].FkAdSpecialId != null) @@ -203,7 +202,6 @@ namespace AdvertsingProfitControl 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 } @@ -276,7 +274,7 @@ namespace AdvertsingProfitControl //Pad AppendPaddingRow(ref writer); } - if(!skipCheck) SelectCostAnalysisCell(adSpecialIndex != -1 ? i + 1 : i, ref writer, actualA, actualB, departmentRecord, comments); + SelectCostAnalysisCell(adSpecialIndex != -1 ? i + 1 : i, ref writer, actualA, actualB, departmentRecord, comments); writer.RenderEndTag();//tr } //Create the totals row @@ -312,7 +310,7 @@ namespace AdvertsingProfitControl 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.Write("(B) " + $"{actualB:N2}"); writer.RenderEndTag();//end actual sales A (total profit return) writer.RenderEndTag();//end totals row //end totals row @@ -402,25 +400,44 @@ namespace AdvertsingProfitControl private void SelectCostAnalysisCell(int rowIndex, ref HtmlTextWriter writer, decimal? actualA, decimal? actualB, WeeklySale departmentRecord, Note comments) { + if (actualA == null) + { + actualA = 0; + } + + if (actualB == null) + { + actualB = 0; + } + + if (comments == null) + { + comments = new Note { Remark = string.Empty }; + } + + if (departmentRecord == null) + { + departmentRecord = new WeeklySale {TotalSales = 0}; + } + 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"); + 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; + var s = (decimal) 0.3; //0.3 is the shrink TODO:Change the shrink into a variable. RenderCostsAnalysisCell(CostAnalysisCells.ProfitReturnFromRemainingSales, ref writer, s * (departmentRecord.TotalSales - actualA), "5"); break; case 15: - var x = (decimal) 0.3 * (departmentRecord.TotalSales - actualA); + var x = (decimal) 0.3 * (departmentRecord.TotalSales - actualA); //0.3 is the shrink RenderCostsAnalysisCell(CostAnalysisCells.TotalProfitReturn, ref writer, x + actualB, "4"); break; case 19: diff --git a/AdvertsingProfitControl/Properties/AssemblyInfo.cs b/AdvertsingProfitControl/Properties/AssemblyInfo.cs index a4b27c6..18851d2 100644 --- a/AdvertsingProfitControl/Properties/AssemblyInfo.cs +++ b/AdvertsingProfitControl/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.3.0.0")] -[assembly: AssemblyFileVersion("3.3.0.0")] +[assembly: AssemblyVersion("3.4.0.0")] +[assembly: AssemblyFileVersion("3.4.0.0")]