Initial population

This commit is contained in:
Jon
2026-03-07 19:22:22 -06:00
parent 647f55feb9
commit cae1a3ec46
108 changed files with 28484 additions and 0 deletions

View File

@@ -0,0 +1,410 @@
using Microsoft.AspNetCore.Html;
using Microsoft.Office.Interop.Word;
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
namespace JRCookbookBusiness
{
public class CookbookChapter
{
public Guid? cookbookChapterID = null;
public Guid? parentChapterID = null;
public Guid? cookbookID = null;
public String name = String.Empty;
public String comments = String.Empty;
public List<CookbookChapter> cookbookChapters = new List<CookbookChapter>();
public List<RecipeHighlights> recipeHighlights = new List<RecipeHighlights>();
public event EventHandler RecipeRenderedEvent;
public CookbookChapter()
{
}
public CookbookChapter(Guid cookbookID, Guid cookbookChapterID)
{
PopulateByID(cookbookID, cookbookChapterID);
}
public void Save()
{
if (this.cookbookChapterID == null)
{
this.cookbookChapterID = clsDatabaseLayer.GetDatabaseLayer().GetNewIDCookbookChapter();
clsDatabaseLayer.GetDatabaseLayer().InsertCookbookChapter(this);
}
else
{
clsDatabaseLayer.GetDatabaseLayer().UpdateCookbookChapter(this);
}
}
public void Delete()
{
foreach (var cookbookChapter in cookbookChapters)
{
cookbookChapter.Delete();
}
foreach (var recipe in recipeHighlights)
{
recipe.Delete();
}
clsDatabaseLayer.GetDatabaseLayer().DeleteCookbookChapterByID(cookbookID.Value, cookbookChapterID.Value);
}
internal String GenerateWebPagesToFolder(String folderToSaveTo, Dictionary<Guid, String> recipePageDictionary, SortedList<String, Recipe> recipesAlpha, SortedSet<String> pagesAlreadyAdded, List<Trackback> trackbackListForThisChapter)
{
String pageNameToUse = SharedRoutines.RemoveSpecialCharactersFromFileName(this.name);
String pageNameToUseWithExtension = pageNameToUse + ".htm";
while (pagesAlreadyAdded.Contains(pageNameToUseWithExtension.ToUpper()))
{
pageNameToUse += "1";
pageNameToUseWithExtension = pageNameToUse + ".htm";
}
pagesAlreadyAdded.Add(pageNameToUseWithExtension.ToUpper());
var builderChapterIndex = new HtmlContentBuilder();
builderChapterIndex.AppendHtmlLine("<html>");
builderChapterIndex.AppendHtmlLine("<head>");
builderChapterIndex.AppendFormat("<title>{0}</title>" + Constants.CRLF, this.name);
builderChapterIndex.AppendHtmlLine("<meta http-equiv=\"Content-Type\" content=\"text/html\">");
builderChapterIndex.AppendHtmlLine("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">");
builderChapterIndex.AppendHtmlLine("<style type=\"text/css\">");
builderChapterIndex.AppendHtmlLine("<!--");
builderChapterIndex.AppendHtmlLine(".trackback_links{FONT-FAMILY: \"Arial\"; FONT-SIZE: 8pt; COLOR: #484848; FONT-WEIGHT: 400; FONT-STYLE: normal; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; PADDING-TOP: 0in; PADDING-BOTTOM: 0in; MARGIN-LEFT: 0.0in; MARGIN-RIGHT: 0.4in; MARGIN-TOP: 0in; MARGIN-BOTTOM: 0.1in; }");
builderChapterIndex.AppendHtmlLine(".chapter_header{FONT-FAMILY: \"Arial\"; FONT-SIZE: 8pt; COLOR: #484848; FONT-WEIGHT: 400; FONT-STYLE: normal; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; PADDING-TOP: 0in; PADDING-BOTTOM: 0.1in; MARGIN-LEFT: 0.4in; MARGIN-RIGHT: 0.4in; MARGIN-TOP: 0.4in; MARGIN-BOTTOM: 0in; }");
builderChapterIndex.AppendHtmlLine(".chapter_title{FONT-FAMILY: \"Arial\"; FONT-SIZE: 16pt; COLOR: #7598C4; FONT-WEIGHT: 400; FONT-STYLE: normal; BORDER-BOTTOM: #7598C4 1pt solid; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; PADDING-TOP: 0in; PADDING-BOTTOM: 0in; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; }");
builderChapterIndex.AppendHtmlLine(".chapter_name{FONT-FAMILY: \"Arial\"; FONT-SIZE: 10pt; COLOR: #484848; FONT-WEIGHT: 400; FONT-STYLE: normal; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; PADDING-TOP: 0in; PADDING-BOTTOM: 0in; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; MARGIN-TOP: 0.05in; MARGIN-BOTTOM: 0in; }");
builderChapterIndex.AppendHtmlLine(".subchapter_name{FONT-FAMILY: \"Arial\"; FONT-SIZE: 10pt; COLOR: #484848; FONT-WEIGHT: 400; FONT-STYLE: normal; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; PADDING-TOP: 0in; PADDING-BOTTOM: 0in; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; MARGIN-TOP: 0.05in; MARGIN-BOTTOM: 0in; }");
builderChapterIndex.AppendHtmlLine(".recipe_name{FONT-FAMILY: \"Arial\"; FONT-SIZE: 10pt; COLOR: #484848; FONT-WEIGHT: 400; FONT-STYLE: normal; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; PADDING-TOP: 0in; PADDING-BOTTOM: 0in; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in; MARGIN-TOP: 0.05in; MARGIN-BOTTOM: 0in; }");
builderChapterIndex.AppendHtmlLine("-->");
builderChapterIndex.AppendHtmlLine("</style>");
builderChapterIndex.AppendHtmlLine("</head>");
builderChapterIndex.AppendHtmlLine("<body text=#000000 vLink=#000000 aLink=#000000 link=#000000 bgColor=White leftMargin=25 topMargin=25 rightMargin=25 background=\"\">");
builderChapterIndex.AppendHtmlLine("<table cellSpacing=0 cellPadding=0 width=\"100%\" border=0>");
if ((trackbackListForThisChapter?.Count() ?? 0) > 0)
{
builderChapterIndex.AppendHtmlLine(" <tr>");
builderChapterIndex.AppendHtmlLine(" <td valign=top>");
builderChapterIndex.AppendHtml(" <p class=trackback_links>");
builderChapterIndex.AppendHtml(SharedRoutines.GenerateTrackbackLinks(trackbackListForThisChapter));
builderChapterIndex.AppendHtmlLine("</p>");
builderChapterIndex.AppendHtmlLine(" </td>");
builderChapterIndex.AppendHtmlLine(" </tr>");
}
builderChapterIndex.AppendHtml(HTMLAddChapterName());
Trackback thisTrackback = new Trackback();
thisTrackback.TrackbackURL = pageNameToUseWithExtension;
thisTrackback.TrackbackText = this.name;
List<Trackback> trackbackListForChildren = new List<Trackback>();
trackbackListForChildren.AddRange(trackbackListForThisChapter);
trackbackListForChildren.Add(thisTrackback);
foreach (var cookbookChapter in cookbookChapters)
{
var chapterURLAdded = cookbookChapter.GenerateWebPagesToFolder(folderToSaveTo, recipePageDictionary, recipesAlpha, pagesAlreadyAdded, trackbackListForChildren);
cookbookChapter.RecipeRenderedEvent += HandleRecipeRendered;
builderChapterIndex.AppendHtml(HTMLAddSubChapterToIndex(cookbookChapter, chapterURLAdded));
cookbookChapter.RecipeRenderedEvent -= HandleRecipeRendered;
}
foreach (var recipeHighlight in recipeHighlights)
{
var recipe = Recipe.GetRecipeByID(recipeHighlight.recipeID.Value);
recipe.GenerateWebPageToFolder(folderToSaveTo, recipePageDictionary, recipesAlpha, pagesAlreadyAdded, trackbackListForChildren);
builderChapterIndex.AppendHtml(HTMLAddRecipeToIndex(recipe, recipePageDictionary));
if (RecipeRenderedEvent != null)
{
RecipeRenderedEvent.Invoke(recipe, new EventArgs());
}
}
builderChapterIndex.AppendHtmlLine("</table>");
builderChapterIndex.AppendHtmlLine("</body>");
builderChapterIndex.AppendHtmlLine("</html>");
var strChapterPath = folderToSaveTo;
if (strChapterPath.EndsWith("\\") == false)
{
strChapterPath += "\\";
}
strChapterPath += pageNameToUseWithExtension;
using (var writer = new System.IO.StreamWriter(strChapterPath, false))
{
builderChapterIndex.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default);
}
return pageNameToUseWithExtension;
}
private String HTMLAddChapterName()
{
var builder = new HtmlContentBuilder();
builder.AppendHtmlLine(" <tr>");
builder.AppendHtmlLine(" <td valign=top>");
builder.AppendHtml(" <p class=chapter_title>");
builder.AppendFormat("{0}", this.name);
builder.AppendHtmlLine("</p>");
builder.AppendHtmlLine(" </td>");
builder.AppendHtmlLine(" </tr>");
using (var writer = new System.IO.StringWriter())
{
builder.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default);
return writer.ToString();
}
}
private String HTMLAddSubChapterToIndex(CookbookChapter chapter, String chapterURL)
{
var builder = new HtmlContentBuilder();
builder.AppendHtmlLine(" <tr>");
builder.AppendHtmlLine(" <td valign=top>");
builder.AppendHtml(" <p class=subchapter_name>");
builder.AppendFormat("<a href=\"{0}\">", chapterURL);
builder.AppendFormat("{0}", chapter.name);
builder.AppendHtmlLine("</a>");
builder.AppendHtmlLine("</p>");
builder.AppendHtmlLine(" </td>");
builder.AppendHtmlLine(" </tr>");
using (var writer = new System.IO.StringWriter())
{
builder.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default);
return writer.ToString();
}
}
private String HTMLAddRecipeToIndex(Recipe recipe, Dictionary<Guid, String> recipePageDictionary)
{
var recipePageURL = recipePageDictionary.GetValueOrDefault(recipe.recipeID.Value, String.Empty);
var builder = new HtmlContentBuilder();
builder.AppendHtmlLine(" <tr>");
builder.AppendHtmlLine(" <td valign=top>");
builder.AppendHtml(" <p class=recipe_name>");
builder.AppendFormat("<a href=\"{0}\">", recipePageURL);
builder.AppendFormat("{0}", recipe.recipename);
builder.AppendHtmlLine("</a>");
builder.AppendHtmlLine("</p>");
builder.AppendHtmlLine(" </td>");
builder.AppendHtmlLine(" </tr>");
using (var writer = new System.IO.StringWriter())
{
builder.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default);
return writer.ToString();
}
}
internal void AddToWordDoc(Microsoft.Office.Interop.Word.Application objWord, Dictionary<Guid, String> recipePageDictionary, SortedList<String, Recipe> recipesAlpha, SortedSet<String> pagesAlreadyAdded, ref bool isFirstPageOfContent)
{
String pageNameToUse = SharedRoutines.RemoveSpecialCharactersFromFileName(this.name);
String pageNameToUseWithExtension = pageNameToUse;
while (pagesAlreadyAdded.Contains(pageNameToUseWithExtension.ToUpper()))
{
pageNameToUse += "1";
pageNameToUseWithExtension = pageNameToUse;
}
pagesAlreadyAdded.Add(pageNameToUseWithExtension.ToUpper());
clsWord.WordApplication.Selection.InsertBreak(WdBreakType.wdSectionBreakNextPage);
clsWord.Insert_HeaderText(this.name);
clsWord.Insert_PageNumberFooter(ref isFirstPageOfContent);
objWord.Selection.Font.Bold = 0;
objWord.Selection.Font.Size = clsWord.WORD_NORMAL_FONT_SIZE;
objWord.ActiveDocument.Tables.Add(objWord.Selection.Range, 1, 1, Microsoft.Office.Interop.Word.WdDefaultTableBehavior.wdWord9TableBehavior, Microsoft.Office.Interop.Word.WdAutoFitBehavior.wdAutoFitContent);
objWord.Selection.Cells[1].LeftPadding = 0;
//objWord.Selection.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineStyle = WdLineStyle.wdLineStyleNone;
//objWord.Selection.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineStyle = WdLineStyle.wdLineStyleNone;
//objWord.Selection.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineStyle = WdLineStyle.wdLineStyleNone;
objWord.Selection.Tables[1].Borders.OutsideLineStyle = WdLineStyle.wdLineStyleNone;
objWord.Selection.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineStyle = WdLineStyle.wdLineStyleSingle;
objWord.Selection.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineWidth = WdLineWidth.wdLineWidth050pt;
//objWord.Selection.Font.Bold = 1;
//objWord.Selection.Font.Size = clsWord.WORD_CHAPTER_NAME_FONT_SIZE;
//objWord.Selection.TypeText(this.name);
//objWord.Selection.Font.Bold = 0;
objWord.Selection.set_Style(objWord.ActiveDocument.Styles["Heading 1"]);
objWord.Selection.TypeText(this.name);
objWord.Selection.Font.Size = clsWord.WORD_NORMAL_FONT_SIZE;
objWord.Selection.EndKey(Microsoft.Office.Interop.Word.WdUnits.wdStory);
clsWord.AddHalfSpaceLineAtEndOfDocument();
objWord.Selection.ParagraphFormat.LineSpacingRule = WdLineSpacing.wdLineSpaceSingle;
objWord.Selection.ParagraphFormat.SpaceAfter = 0F;
foreach (var cookbookChapter in cookbookChapters)
{
cookbookChapter.RecipeRenderedEvent += HandleRecipeRendered;
cookbookChapter.AddToWordDoc(objWord, recipePageDictionary, recipesAlpha, pagesAlreadyAdded, ref isFirstPageOfContent);
cookbookChapter.RecipeRenderedEvent -= HandleRecipeRendered;
}
foreach (var recipeHighlight in recipeHighlights)
{
var recipe = Recipe.GetRecipeByID(recipeHighlight.recipeID.Value);
recipe.AddToWordDoc(objWord, recipePageDictionary, recipesAlpha, pagesAlreadyAdded);
if (RecipeRenderedEvent != null)
{
RecipeRenderedEvent.Invoke(recipe, new EventArgs());
}
//builderChapterIndex.AppendHtml(HTMLAddRecipeToIndex(recipe, recipePageDictionary));
}
}
private void HandleRecipeRendered(object sender, System.EventArgs e)
{
if (RecipeRenderedEvent != null)
{
RecipeRenderedEvent.Invoke(sender, new EventArgs());
}
}
public static CookbookChapter GetCookbookByID(Guid cookbookID, Guid cookbookChapterID)
{
return new CookbookChapter(cookbookID, cookbookChapterID);
}
public static CookbookChapter GetCookbookChapterByDataRow(DataRow row)
{
var newChapter = new CookbookChapter();
newChapter.PopulateFromDataRow(row);
return newChapter;
}
private void PopulateByID(Guid cookbookID, Guid cookbookChapterID)
{
DataSet recordSet;
recordSet = clsDatabaseLayer.GetDatabaseLayer().GetCookbookChapterByID(cookbookID, cookbookChapterID);
if (recordSet.Tables[0].Rows.Count > 0)
{
DataRow ldbrwRow;
ldbrwRow = recordSet.Tables[0].Rows[0];
PopulateFromDataRow(ldbrwRow);
}
}
private void PopulateFromDataRow(DataRow dataRow)
{
InitializeAllFields();
if (dataRow.IsNull("cookbookChapterID"))
cookbookChapterID = null;
else
cookbookChapterID = (Guid)dataRow["cookbookChapterID"];
if (dataRow.IsNull("cookbookID"))
cookbookID = null;
else
cookbookID = (Guid)dataRow["cookbookID"];
if (dataRow.IsNull("parentChapterID"))
parentChapterID = null;
else
parentChapterID = (Guid)dataRow["parentChapterID"];
if (dataRow.IsNull("name"))
name = String.Empty;
else
name = (String)dataRow["name"];
if (dataRow.IsNull("comments"))
comments = String.Empty;
else
comments = (String)dataRow["comments"];
LoadChapters();
LoadRecipeHighlights();
}
private void InitializeAllFields()
{
cookbookChapterID = null;
parentChapterID = null;
cookbookID = null;
name = String.Empty;
comments = String.Empty;
cookbookChapters = new List<CookbookChapter>();
recipeHighlights = new List<RecipeHighlights>();
}
private void LoadChapters()
{
//Populate child objects
DataSet recordSet;
recordSet = clsDatabaseLayer.GetDatabaseLayer().GetCookbookChaptersByParentChapter(this.cookbookID.Value, this.cookbookChapterID);
foreach (DataRow childDataRow in recordSet.Tables[0].Rows)
{
var newChapter = CookbookChapter.GetCookbookChapterByDataRow(childDataRow);
cookbookChapters.Add(newChapter);
}
}
private void LoadRecipeHighlights()
{
//Populate child objects
DataSet recordSet;
recordSet = clsDatabaseLayer.GetDatabaseLayer().GetRecipeHighlightsByParentChapter(this.cookbookID.Value, this.cookbookChapterID);
foreach (DataRow childDataRow in recordSet.Tables[0].Rows)
{
var newRecipeHighlights = RecipeHighlights.GetRecipeHighlightsByDataRow(childDataRow);
recipeHighlights.Add(newRecipeHighlights);
}
}
public int GetTotalRecipeCount()
{
int returnValue = 0;
foreach (var cookbookChapter in cookbookChapters)
{
returnValue += cookbookChapter.GetTotalRecipeCount();
}
returnValue += recipeHighlights.Count;
return returnValue;
}
}
}