Add project files.

This commit is contained in:
Andy Howard
2021-05-05 15:36:28 +01:00
parent 949836d24c
commit a4cf706eb3
353 changed files with 60029 additions and 0 deletions
@@ -0,0 +1,205 @@
using System;
using System.Collections.Generic;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
namespace Sarand.Net.Standard.Base.UpdateLog
{
//=======================================================================
public abstract class SaUpdateLogMgr : SacsItemMgr
{
//-------------------------------------------------------------------
// Data members.
private readonly Dictionary<SysId,String> userNames = new Dictionary<SysId, string>();
//-------------------------------------------------------------------
// Static initialisation.
static SaUpdateLogMgr ()
{
}
//-------------------------------------------------------------------
// Construction.
protected SaUpdateLogMgr (SaUpdateLogConsole updateLogConsole)
{
UpdateLogConsole = updateLogConsole;
}
//-------------------------------------------------------------------
// Properties.
protected SaUpdateLogConsole UpdateLogConsole { get; }
public abstract bool DatabaseIsValid { get; }
public abstract bool CanUpdateDatabase { get; }
//*******************************************************************
// U p d a t e L o g E n t r i e s
//*******************************************************************
// Retrieve individual update log entries.
public abstract bool LogEntryExists (SaUpdateLogEntry logEntry);
public abstract bool LogEntryExists (ItemId itemId, String attribute, DateTime logged);
public abstract SaUpdateLogEntry GetLogEntry (ItemId itemId, String attribute, DateTime logged);
// Create Update Log Entry.
public abstract SaUpdateLogEntry CreateLogEntry (ItemId itemId, String attribute);
//-------------------------------------------------------------------
// Validate Update Log Entry.
public bool IsValidLogEntry (SaUpdateLogEntry logEntry)
{
ClearErrorState();
if (logEntry == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidLogEntryData(logEntry.GetData(), new SaUpdateLogEntry.ErrField());
}
public virtual bool IsValidLogEntryData (SaUpdateLogEntry.Data logEntryData, SaUpdateLogEntry.ErrField errField)
{
ClearErrorState();
if ((int)logEntryData.ItemId.Type < 1)
{
errField.ItemType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item type must be supplied");
}
if (!SysId.IsValid(logEntryData.ItemId.Id))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Item Id must be supplied");
}
if (!IsValidValue(logEntryData.Attribute, "attribute", (long)SaUpdateLogDbDfn.GetColTextLen(SaUpdateLogDbDfn.ColumnIdx.SaAttrUpdate_Attribute), true))
{
errField.Attribute = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!IsValidValue(logEntryData.DataBefore, "data before", (long)SaUpdateLogDbDfn.GetColTextLen(SaUpdateLogDbDfn.ColumnIdx.SaAttrUpdate_DataBefore)))
{
errField.DataBefore = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!IsValidValue(logEntryData.DataAfter, "data after", (long)SaUpdateLogDbDfn.GetColTextLen(SaUpdateLogDbDfn.ColumnIdx.SaAttrUpdate_DataAfter)))
{
errField.DataAfter = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (!IsValidValue(logEntryData.Notes, "notes", (long)SaUpdateLogDbDfn.GetColTextLen(SaUpdateLogDbDfn.ColumnIdx.SaAttrUpdate_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SaUpdateLogEntry.ValidStatuses.Contains(logEntryData.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
return true;
}
//-------------------------------------------------------------------
// Update Log Entry database interface.
public abstract bool LogUpdates (SaUpdateLogItemMonitor updateLogItemMonitor, DbUpdateInfo dbUpdateInfo);
public abstract bool InsertLogEntry (SaUpdateLogEntry logEntry, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateLogEntry (SaUpdateLogEntry logEntry, DbUpdateInfo dbUpdateInfo);
public virtual bool LogEntryCanBeDeleted (SaUpdateLogEntry logEntry)
{
ClearErrorState();
return true;
}
public abstract bool DeleteLogEntry (SaUpdateLogEntry logEntry, DbUpdateInfo dbUpdateInfo);
public abstract bool ClearLogEntriesForItem (ItemId itemId, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Update Log Entry list.
public abstract ColumnDfn GetLogEntryColumnDfn (SaUpdateLogEntry.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetLogEntryQueryFilter (SaUpdateLogEntry.Params prm);
public abstract long GetLogEntryCount (SaUpdateLogEntry.Params prm);
public abstract List<SaUpdateLogEntry> GetLogEntryList (SaUpdateLogEntry.Params prm);
public abstract DbResultSet ExecuteLogEntryQuery (List<ColumnDfn> columns, SaUpdateLogEntry.Params prm);
//-------------------------------------------------------------------
/// <summary>
/// Extract and format result set data value where specific handling is required.
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
/// </summary>
public virtual DataValue GetLogEntryDataValue (ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaUpdateLogEntry.Column)column.Id)
{
//-----------------------------------------------------------
// Item type.
case SaUpdateLogEntry.Column.ItemType_Desc:
{
short itemType = (short)values.GetValue(column.DataName).AsLong();
value = new DataValue(itemType.ToString());
}
break;
//-----------------------------------------------------------
// Data values.
case SaUpdateLogEntry.Column.DataBefore:
case SaUpdateLogEntry.Column.DataAfter:
{
value = new DataValue(values.GetValue(column.DataName).ToString());
String attribute = values.GetValue(GetLogEntryColumnDfn(SaUpdateLogEntry.Column.Attribute).DataName).ToString();
if (attribute.EqualsCI("Status"))
value = new DataValue(SacsSystem.GetStatusDescForCode(value.ToString()));
}
break;
//-----------------------------------------------------------
// Notes.
case SaUpdateLogEntry.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaUpdateLogEntry.Column.Status_Desc:
case SaUpdateLogEntry.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaUpdateLogEntry.Column.Status_Desc)
{
String statusDesc = SacsSystem.GetStatusDescForCode(statusCode);
value = new DataValue(statusDesc);
}
else if (column.Id == (int)SaUpdateLogEntry.Column.Status_Ind)
{
DataValue.TriStateType triState = DataValue.TriStateType.Unknown;
if (status == SaStatus.Logged)
triState = DataValue.TriStateType.Green;
value = new DataValue(triState);
}
}
break;
//-----------------------------------------------------------
// Notes.
case SaUpdateLogEntry.Column.CreateBy_Name:
{
SysId userId = new SysId(StringUtil.ToInt(values.GetValue(GetLogEntryColumnDfn(SaUpdateLogEntry.Column.CreateBy).DataName).ToString()));
String userName = SysId.ToString(userId);
if (SysId.IsValid(userId) && !userNames.ContainsKey(userId))
{
foreach (var userNameKV in UpdateLogConsole.GetNameForUserIds(new List<SysId> { userId }))
userNames.Add(userNameKV.Key, userNameKV.Value);
}
if (userNames.ContainsKey(userId))
userName = userNames[userId];
value = new DataValue(userName);
}
break;
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}