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,269 @@
using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JRCookbookBusiness
{
public class IngredientUsage
{
public Guid? ingredientUsageID = null;
public string normalizedIngredientName = string.Empty;
public Guid? ingredientID = null;
public Int32 usageCount = 0;
private string retrievedIngredientName = string.Empty;
private static List<IngredientUsage> _allIngredientUsage = null;
public IngredientUsage()
{
}
public IngredientUsage(Guid ingredientUsageID)
{
PopulateByID(ingredientUsageID);
}
public IngredientUsage(DataRow dataRow)
{
PopulateFromDataRow(dataRow);
}
public IngredientUsage(string normalizedIngredientName, Guid ingredientID)
{
PopulateByNameAndIngredientID(normalizedIngredientName, ingredientID);
}
public static IngredientUsage GetIngredientUsageByID(Guid ingredientUsageID)
{
return new IngredientUsage(ingredientUsageID);
}
public static IngredientUsage GetIngredientUsageByNameAndIngredientID(string normalizedIngredientName, Guid ingredientID)
{
return new IngredientUsage(normalizedIngredientName, ingredientID);
}
private void PopulateByID(Guid ingredientUsageID)
{
DataSet recordSet;
recordSet = clsDatabaseLayer.GetDatabaseLayer().GetIngredientUsageByID(ingredientUsageID);
if (recordSet.Tables[0].Rows.Count > 0)
{
DataRow ldbrwRow;
ldbrwRow = recordSet.Tables[0].Rows[0];
PopulateFromDataRow(ldbrwRow);
}
}
private void PopulateByNameAndIngredientID(string normalizedIngredientName, Guid ingredientID)
{
DataSet recordSet;
recordSet = clsDatabaseLayer.GetDatabaseLayer().GetIngredientUsageByNameAndIngredientID(normalizedIngredientName, ingredientID);
if (recordSet.Tables[0].Rows.Count > 0)
{
DataRow ldbrwRow;
ldbrwRow = recordSet.Tables[0].Rows[0];
PopulateFromDataRow(ldbrwRow);
}
}
public static Int32 GetIngredientUsageCount(Ingredient ingredient)
{
var getUsage = GetIngredientUsageAll();
Int32 totalUsageCount = 0;
foreach(var ingredientUsage in getUsage)
{
if (ingredientUsage.ingredientID == ingredient.ingredientID)
{
totalUsageCount += ingredientUsage.usageCount;
}
}
return totalUsageCount;
}
public static List<IngredientUsage> GetIngredientUsageAll()
{
if (_allIngredientUsage == null)
{
_allIngredientUsage = new List<IngredientUsage>();
DataSet recordSet;
recordSet = clsDatabaseLayer.GetDatabaseLayer().GetIngredientUsageAll();
foreach (DataRow dataRow in recordSet.Tables[0].Rows)
{
var ingredientUsage = new IngredientUsage(dataRow);
_allIngredientUsage.Add(ingredientUsage);
}
}
_allIngredientUsage.Sort(CompareIngredientByUsage);
return _allIngredientUsage;
}
private static int CompareIngredientByUsage(IngredientUsage x, IngredientUsage y)
{
if (x == null)
{
if (y == null)
{
// If x is null and y is null, they're
// equal.
return 0;
}
else
{
// If x is null and y is not null, y
// is greater.
return -1;
}
}
else
{
// If x is not null...
//
if (y == null)
// ...and y is null, x is greater.
{
return 1;
}
else
{
// ...and y is not null, compare the usage count
//
int retval = -1 * x.usageCount.CompareTo(y.usageCount);
if (retval != 0)
{
// If the usageCounts are different,
// return that the higher count should be first
//
return retval;
}
else
{
// If the usageCounts are the same,
// sort them with ordinary string comparison.
//
return x.retrievedIngredientName.CompareTo(y.retrievedIngredientName);
}
}
}
}
public static IngredientUsage GetIngredientUsageByDataRow(DataRow row)
{
var newIngredientUsage = new IngredientUsage();
newIngredientUsage.PopulateFromDataRow(row);
return newIngredientUsage;
}
private void PopulateFromDataRow(DataRow dataRow)
{
InitializeAllFields();
if (dataRow.IsNull("ingredientUsageID"))
ingredientUsageID = null;
else
ingredientUsageID = (Guid)dataRow["ingredientUsageID"];
if (dataRow.IsNull("normalizedIngredientName"))
normalizedIngredientName = null;
else
normalizedIngredientName = (String)dataRow["normalizedIngredientName"];
if (dataRow.IsNull("ingredientID"))
ingredientID = null;
else
ingredientID = (Guid)dataRow["ingredientID"];
if (dataRow.IsNull("usageCount"))
usageCount = 0;
else
usageCount = (Int32)dataRow["usageCount"];
if (ingredientID != null)
{
retrievedIngredientName = Ingredient.GetIngredientByID(ingredientID.Value).name;
}
}
private void InitializeAllFields()
{
ingredientUsageID = null;
normalizedIngredientName = String.Empty;
ingredientID = null;
usageCount = 0;
}
public void Save()
{
if (this.ingredientUsageID == null)
{
this.ingredientUsageID = clsDatabaseLayer.GetDatabaseLayer().GetNewIDIngredientUsage();
clsDatabaseLayer.GetDatabaseLayer().InsertIngredientUsage(this);
}
else
{
clsDatabaseLayer.GetDatabaseLayer().UpdateIngredientUsage(this);
}
}
public static void RebuildIngredientUsage()
{
clsDatabaseLayer.GetDatabaseLayer().DeleteIngredientUsageAll();
List<IngredientUsage> newList = new List<IngredientUsage>();
var allRecipeIngredients = RecipeIngredient.GetRecipeIngredientAll();
foreach(RecipeIngredientItem recipeIngredient in allRecipeIngredients)
{
var normalizedIngredientName = RecipeIngredient.NormalizeRecipeIngredientName(recipeIngredient.ingredientText);
bool foundMatch = false;
foreach(var ingredientUsage in newList)
{
if (ingredientUsage.normalizedIngredientName == normalizedIngredientName && ingredientUsage.ingredientID == recipeIngredient.ingredientID)
{
foundMatch = true;
ingredientUsage.usageCount++;
}
}
if (!foundMatch)
{
var newIngredientUsage = new IngredientUsage();
newIngredientUsage.normalizedIngredientName = normalizedIngredientName;
newIngredientUsage.ingredientID = ((RecipeIngredientItem)recipeIngredient).ingredientID;
newIngredientUsage.usageCount = 1;
newList.Add(newIngredientUsage);
}
}
foreach(var ingredient in newList)
{
ingredient.Save();
}
}
}
}