Files
Common-VS2019/SacsStandardBase/Base/ItemOptions/SaItemOptionMgr.cs
T
2025-02-08 16:41:25 +00:00

177 lines
6.9 KiB
C#

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;
namespace Sarand.Net.Standard.Base.ItemOptions
{
//=======================================================================
public abstract class SaItemOptionMgr : SacsItemMgr
{
//-------------------------------------------------------------------
// Data members.
private static readonly List<SaStatus> itemOptionStatuses = new List<SaStatus>();
//-------------------------------------------------------------------
// Static initialisation.
static SaItemOptionMgr ()
{
// Item option statuses.
itemOptionStatuses.Add(SaStatus.Current);
itemOptionStatuses.Add(SaStatus.Deleted);
}
//-------------------------------------------------------------------
// Construction.
protected SaItemOptionMgr ()
{
}
//-------------------------------------------------------------------
// Properties.
public abstract bool DatabaseIsValid { get; }
public abstract bool CanUpdateDatabase { get; }
//*******************************************************************
// I t e m O p t i o n s
//*******************************************************************
// Statuses.
public static SaStatus ActiveItemOptionStatus { get { return SaStatus.Current; } }
public static List<SaStatus> ItemOptionStatuses { get { return itemOptionStatuses; } }
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
// Retrieve individual item options.
public abstract bool ItemOptionExists (SaItemOption itemOption);
public abstract bool ItemOptionExists (ItemId itemId, String name, String context);
public abstract SaItemOption GetItemOption (SaItemOption itemOption);
public abstract SaItemOption GetItemOption (ItemId itemId, String name, String context);
// Create Item Option.
public abstract SaItemOption CreateItemOption (ItemId itemId, String name, String context);
//-------------------------------------------------------------------
// Validate Item Option.
public bool IsValidItemOption (SaItemOption itemOption)
{
ClearErrorState();
if (itemOption == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidItemOptionData(itemOption.GetData(), new SaItemOption.ErrField());
}
public virtual bool IsValidItemOptionData (SaItemOption.Data itemOptionData, SaItemOption.ErrField errField)
{
ClearErrorState();
if ((int)itemOptionData.ItemId.Type < 1)
{
errField.ItemType = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(Msg_ItemTypeNotSpecified);
}
if (!SysId.IsValid(itemOptionData.ItemId.Id))
{
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(Msg_ItemIdNotSpecified);
}
if (!IsValidValue(itemOptionData.Name, "name", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Name), true))
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!IsValidValue(itemOptionData.Context, "context", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Context)))
{
errField.Context = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!IsValidValue(itemOptionData.Value, "value", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Value)))
{
errField.Value = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (!IsValidValue(itemOptionData.Notes, "notes", (long)SaItemOptionDbDfn.GetColTextLen(SaItemOptionDbDfn.ColumnIdx.SaItemOption_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!ItemOptionStatuses.Contains(itemOptionData.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
return true;
}
//-------------------------------------------------------------------
// Database interface.
public abstract bool InsertItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo);
public virtual bool ItemOptionCanBeDeleted (SaItemOption itemOption)
{
ClearErrorState();
return true;
}
public abstract bool DeleteItemOption (SaItemOption itemOption, DbUpdateInfo dbUpdateInfo);
public abstract bool ClearItemOptionsForItem (ItemId itemId, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Item list.
public abstract ColumnDfn GetItemOptionColumnDfn (SaItemOption.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetItemOptionQueryFilter (SaItemOption.Params prm);
public abstract long GetItemOptionCount (SaItemOption.Params prm);
public abstract List<SaItemOption> GetItemOptionList (SaItemOption.Params prm);
public abstract DbResultSet ExecuteItemOptionQuery (List<ColumnDfn> columns, SaItemOption.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 DataValue GetItemOptionDataValue (ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SaItemOption.Column)column.Id)
{
//-----------------------------------------------------------
// Item type.
case SaItemOption.Column.ItemType_Desc:
{
short itemType = (short)values.GetValue(column.DataName).AsLong();
value = new DataValue(itemType.ToString());
}
break;
//-----------------------------------------------------------
// Notes.
case SaItemOption.Column.Notes:
{
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
}
break;
//-----------------------------------------------------------
// Status.
case SaItemOption.Column.Status_Desc:
case SaItemOption.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SaItemOption.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SaItemOption.Column.Status_Ind)
value = new DataValue(SaItemOption.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}