BusinessMgr

This commit is contained in:
Andy Howard
2024-10-29 08:41:11 +00:00
parent 45b3069ce7
commit a7ae1c1762
12 changed files with 434 additions and 232 deletions
+2 -2
View File
@@ -53,7 +53,7 @@ namespace Sacs.Web.Components
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Culture. // Culture.
private CultureInfo sessionCulture; private CultureInfo sessionCulture;
private CultureInfo RequestCulture { get { return Request.HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture.Culture ?? CultureInfo.InvariantCulture; } } private CultureInfo RequestCulture { get { return Request.HttpContext.Features.Get<IRequestCultureFeature>()?.RequestCulture?.Culture ?? CultureInfo.InvariantCulture; } }
public CultureInfo SessionCulture public CultureInfo SessionCulture
{ {
get get
@@ -258,7 +258,7 @@ namespace Sacs.Web.Components
// Common item properties. // Common item properties.
public String Id { get; set; } = null; public String Id { get; set; } = null;
private String notes; private String notes;
public String Notes { get { return StringUtil.OnBlank(notes, null); } set { notes = StringUtil.EmptyOnNull(value).Trim(); } } public String Notes { get { return StringUtil.IsBlank(notes) ? null : notes; } set { notes = StringUtil.EmptyOnNull(value).Trim(); } }
public String StatusCode { get; set; } = null; public String StatusCode { get; set; } = null;
public String StatusDesc { get; set; } = null; public String StatusDesc { get; set; } = null;
// Flags for common status values. // Flags for common status values.
+14 -6
View File
@@ -1,4 +1,5 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using System; using System;
@@ -11,7 +12,7 @@ using static Sarand.Net.Standard.Base.Bus.SaErrorStateItem;
namespace Sacs.Web.Components namespace Sacs.Web.Components
{ {
//======================================================================= //=======================================================================
public class SaModel public class SaModel : SacsDisposable
{ {
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Data members. // Data members.
@@ -27,9 +28,16 @@ namespace Sacs.Web.Components
{ {
} }
//--------------------------------------------------------------- protected override void Dispose(bool disposing)
// Properties. {
public bool DebugMode { get; } = SacsSystem.DebugMode; if (disposing)
{
}
}
//---------------------------------------------------------------
// Properties.
public bool DebugMode { get; } = SacsSystem.DebugMode;
public bool OK { get { return !HasMessages(); } } public bool OK { get { return !HasMessages(); } }
public virtual bool ProhibitCache { get; set; } = true; public virtual bool ProhibitCache { get; set; } = true;
public String PageCaption { get; set; } public String PageCaption { get; set; }
@@ -144,7 +152,7 @@ namespace Sacs.Web.Components
errorMessages.Add(message); errorMessages.Add(message);
} }
//--------------------------------------------------------------- //---------------------------------------------------------------
} }
//======================================================================= //=======================================================================
} }
+9 -5
View File
@@ -17,7 +17,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
// Code type properties. // Code type properties.
CodeTypeId, CodeTypeId,
CodeType_Code, CodeType_Code,
CodeType_Desc, CodeType_Name,
// Code properties. // Code properties.
Id, Id,
Code, Code,
@@ -205,16 +205,20 @@ namespace Sarand.Net.Standard.Base.CodeTypes
Any, Any,
ActiveOnly, ActiveOnly,
InactiveOnly, InactiveOnly,
NotDeleted,
DeletedOnly,
} }
/// <summary> /// <summary>
/// Item list parameters. /// Item list parameters.
/// </summary> /// </summary>
public new class Params : SacsHierarchyItem.Params public new class Params : SacsHierarchyItem.Params
{ {
public List<SysId> IncludedIds { get; } = new List<SysId>(); public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public List<SysId> ExcludedIds { get; } = new List<SysId>(); public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
public List<SysId> CodeTypeIds { get; } = new List<SysId>(); public HashSet<SysId> CodeTypeIds { get; } = new HashSet<SysId>();
public List<String> CodeTypeCodes { get; } = new List<string>(); public HashSet<String> CodeTypeCodes { get; } = new HashSet<string>();
/// <summary>Generic search - code, description etc.</summary>
public string Search{ get; set; }
public string Code { get; set; } public string Code { get; set; }
public string CodePartial { get; set; } public string CodePartial { get; set; }
public string Desc { get; set; } public string Desc { get; set; }
+26 -22
View File
@@ -17,7 +17,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
// Code type properties. // Code type properties.
Id, Id,
Code, Code,
Description, Name,
MaxCodeLen, MaxCodeLen,
CodeFormat, CodeFormat,
NextCode, NextCode,
@@ -39,7 +39,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
public class DataProperties public class DataProperties
{ {
public String Code { get; set; } = String.Empty; public String Code { get; set; } = String.Empty;
public String Description { get; set; } = String.Empty; public String Name { get; set; } = String.Empty;
public byte MaxCodeLen { get; set; } = 0; public byte MaxCodeLen { get; set; } = 0;
public String CodeFormat { get; set; } = String.Empty; public String CodeFormat { get; set; } = String.Empty;
public String NextCode { get; set; } = String.Empty; public String NextCode { get; set; } = String.Empty;
@@ -52,7 +52,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
// Data members. // Data members.
private readonly DataProperties data = new DataProperties(); private readonly DataProperties data = new DataProperties();
// Construction. // Construction.
public Data () public Data()
{ {
Status = DefaultStatus; Status = DefaultStatus;
} }
@@ -62,10 +62,10 @@ namespace Sarand.Net.Standard.Base.CodeTypes
get { return data.Code; } get { return data.Code; }
set { CheckChanged(data.Code, value); data.Code = value; } set { CheckChanged(data.Code, value); data.Code = value; }
} }
public String Description public String Name
{ {
get { return data.Description; } get { return data.Name; }
set { CheckChanged(data.Description, value); data.Description = value; } set { CheckChanged(data.Name, value); data.Name = value; }
} }
public byte MaxCodeLen public byte MaxCodeLen
{ {
@@ -83,16 +83,16 @@ namespace Sarand.Net.Standard.Base.CodeTypes
set { CheckChanged(data.NextCode, value); data.NextCode = value; } set { CheckChanged(data.NextCode, value); data.NextCode = value; }
} }
// Population. // Population.
internal void PopulateFrom (Data data) internal void PopulateFrom(Data data)
{ {
Code = data.Code; Code = data.Code;
Description = data.Description; Name = data.Name;
MaxCodeLen = data.MaxCodeLen; MaxCodeLen = data.MaxCodeLen;
CodeFormat = data.CodeFormat; CodeFormat = data.CodeFormat;
NextCode = data.NextCode; NextCode = data.NextCode;
base.PopulateFrom(data); base.PopulateFrom(data);
} }
public Data Clone () public Data Clone()
{ {
Data data = new Data(); Data data = new Data();
data.PopulateFrom(this); data.PopulateFrom(this);
@@ -106,7 +106,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
{ {
// Identifies the field that has invalid data. // Identifies the field that has invalid data.
public ValidValue Code { get; set; } = ValidValue.Valid; public ValidValue Code { get; set; } = ValidValue.Valid;
public ValidValue Description { get; set; } = ValidValue.Valid; public ValidValue Name { get; set; } = ValidValue.Valid;
public ValidValue MaxCodeLen { get; set; } = ValidValue.Valid; public ValidValue MaxCodeLen { get; set; } = ValidValue.Valid;
public ValidValue CodeFormat { get; set; } = ValidValue.Valid; public ValidValue CodeFormat { get; set; } = ValidValue.Valid;
public ValidValue NextCode { get; set; } = ValidValue.Valid; public ValidValue NextCode { get; set; } = ValidValue.Valid;
@@ -120,7 +120,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Construction. // Construction.
public SaCodeType (SysId id, String code) : public SaCodeType(SysId id, String code) :
base(id) base(id)
{ {
base.SetData(data); base.SetData(data);
@@ -137,7 +137,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
public static SaStatus DefaultStatus { get { return CurrentStatus; } } public static SaStatus DefaultStatus { get { return CurrentStatus; } }
public static SaStatus CurrentStatus { get { return SaStatus.Current; } } public static SaStatus CurrentStatus { get { return SaStatus.Current; } }
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(validStatuses); } } public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(validStatuses); } }
public static DataValue.TriStateType GetStatusTriState (SaStatus status) public static DataValue.TriStateType GetStatusTriState(SaStatus status)
{ {
switch (status) switch (status)
{ {
@@ -151,8 +151,8 @@ namespace Sarand.Net.Standard.Base.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Properties. // Properties.
public Data GetData () { return data.Clone(); } public Data GetData() { return data.Clone(); }
public void SetData (Data data) public void SetData(Data data)
{ {
// Properties that cannot be changed if previously specified. // Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id)) if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
@@ -167,10 +167,10 @@ namespace Sarand.Net.Standard.Base.CodeTypes
get { return data.Code; } get { return data.Code; }
set { data.Code = value; } set { data.Code = value; }
} }
public String Description public String Name
{ {
get { return data.Description; } get { return data.Name; }
set { data.Description = value; } set { data.Name = value; }
} }
public byte MaxCodeLen public byte MaxCodeLen
{ {
@@ -201,19 +201,23 @@ namespace Sarand.Net.Standard.Base.CodeTypes
{ {
Any, Any,
ActiveOnly, ActiveOnly,
NotDeleted,
DeletedOnly,
} }
/// <summary> /// <summary>
/// Item list parameters. /// Item list parameters.
/// </summary> /// </summary>
public new class Params : SacsHierarchyItem.Params public new class Params : SacsHierarchyItem.Params
{ {
public List<SysId> IncludedIds { get; } = new List<SysId>(); public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
public List<SysId> ExcludedIds { get; } = new List<SysId>(); public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
/// <summary>Generic search - code or name etc.</summary>
public String Search { get; set; }
public String Code { get; set; } public String Code { get; set; }
public String CodePartial { get; set; } public String CodePartial { get; set; }
public String Desc { get; set; } public String Name { get; set; }
public String DescPartial { get; set; } public String NamePartial { get; set; }
public StatusCat StatusCat { get; set; } = StatusCat.ActiveOnly; public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -45,7 +45,7 @@ namespace Sarand.Net.Standard.Base.CodeTypes
return null; return null;
} }
public abstract SaCodeTypeDfn GetCodeTypeDefinition (SysId codeTypeId); public abstract SaCodeTypeDfn GetCodeTypeDefinition (SysId codeTypeId);
public virtual String GetDescForCodeType (String codeTypeCode) public virtual String GetNameForCodeType (String codeTypeCode)
{ {
ClearErrorState(); ClearErrorState();
SaCodeTypeDfn codeTypeDfn = GetCodeTypeDefinition(codeTypeCode); SaCodeTypeDfn codeTypeDfn = GetCodeTypeDefinition(codeTypeCode);
@@ -85,9 +85,13 @@ namespace Sarand.Net.Standard.Base.CodeTypes
//******************************************************************* //*******************************************************************
// C o d e T y p e s // C o d e T y p e s
//******************************************************************* //*******************************************************************
public abstract bool CodeTypeExists (String codeTypeCode); public abstract SaCodeType CreateCodeType(String code);
public abstract bool CodeTypeExistsById(SysId codeTypeId);
public abstract bool CodeTypeExistsByCode(String codeTypeCode);
public abstract int GetCodeTypeCount (SaCodeType.Params prmCodeType); public abstract int GetCodeTypeCount (SaCodeType.Params prmCodeType);
public abstract SaCodeType GetCodeType (SaCodeType.Params prmCodeType); public abstract SaCodeType GetCodeTypeById(SysId codeTypeId);
public abstract SaCodeType GetCodeTypeByCode(String codeTypeCode);
public abstract SaCodeType GetCodeType(SaCodeType.Params prmCodeType);
public abstract List<SaCodeType> GetCodeTypeList (SaCodeType.Params prmCodeType); public abstract List<SaCodeType> GetCodeTypeList (SaCodeType.Params prmCodeType);
// Code type list. // Code type list.
public abstract ColumnDfn GetCodeTypeColumnDfn (SaCodeType.Column columnId, String caption = "", int width = 0); public abstract ColumnDfn GetCodeTypeColumnDfn (SaCodeType.Column columnId, String caption = "", int width = 0);
@@ -99,21 +103,29 @@ namespace Sarand.Net.Standard.Base.CodeTypes
public abstract DataValue GetCodeTypeDataValue (ColumnDfn column, NamedValue.Map values); public abstract DataValue GetCodeTypeDataValue (ColumnDfn column, NamedValue.Map values);
// Population. // Population.
public abstract bool PopulateCodeType (String codeTypeCode, DbUpdateInfo dbUpdateInfo); public abstract bool PopulateCodeType (String codeTypeCode, DbUpdateInfo dbUpdateInfo);
// Code Type updates.
public abstract bool InsertCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo);
public abstract bool DeleteCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo);
// Maintain code types - returns true if changes made. // Maintain code types - returns true if changes made.
public abstract bool MaintainCodeTypes (bool userCanManageCodeTypes, DbUpdateInfo dbUpdateInfo); // NB Only relevant to desktop application.
public abstract bool MaintainCodeType (String codeTypeCode, DbUpdateInfo dbUpdateInfo); public abstract bool MaintainCodeTypes(bool userCanManageCodeTypes, DbUpdateInfo dbUpdateInfo);
public abstract bool MaintainCodeType(String codeTypeCode, DbUpdateInfo dbUpdateInfo);
//******************************************************************* //*******************************************************************
// C o d e s // C o d e s
//******************************************************************* //*******************************************************************
// Create code.
public abstract SaCode CreateCode(SysId codeTypeId, String code);
// Check whether code exists. // Check whether code exists.
public abstract bool CodeExistsForCodeType (String codeTypeCode, String code, bool activeOnly = true); public abstract bool CodeExistsForCodeType (String codeTypeCode, String code, bool activeOnly = true);
// Codes for code type. // Codes for code type.
public abstract bool CodeTypeHasCodes (String codeTypeCode, bool activeOnly = true); public abstract bool CodeTypeHasCodes (String codeTypeCode, bool activeOnly = true);
public abstract int GetCodeCountForCodeType (String codeTypeCode, bool activeOnly = true); public abstract int GetCodeCountForCodeType (String codeTypeCode, bool activeOnly = true);
public abstract SaCode GetCodeForCodeType (String codeTypeCode, String code, bool activeOnly = true); public abstract SaCode GetCodeById (SysId codeId);
public abstract SaCode GetCodeForCodeType(String codeTypeCode, String code, bool activeOnly = true);
public abstract List<CodeDesc> GetCodeDescsForCodeType (String codeTypeCode, bool activeOnly = true); public abstract List<CodeDesc> GetCodeDescsForCodeType (String codeTypeCode, bool activeOnly = true);
public abstract List<SaCode> GetCodeListForCodeType (String codeTypeCode, bool activeOnly = true); public abstract List<SaCode> GetCodesForCodeType (String codeTypeCode, bool activeOnly = true);
// Code list. // Code list.
public abstract ColumnDfn GetCodeColumnDfn (SaCode.Column columnId, String caption = "", int width = 0); public abstract ColumnDfn GetCodeColumnDfn (SaCode.Column columnId, String caption = "", int width = 0);
public abstract List<SaCode> GetCodeList (SaCode.Params prmCode); public abstract List<SaCode> GetCodeList (SaCode.Params prmCode);
@@ -126,11 +138,15 @@ namespace Sarand.Net.Standard.Base.CodeTypes
// Codes by filter. // Codes by filter.
public abstract int GetCodeCount (SaCode.Params prmCode); public abstract int GetCodeCount (SaCode.Params prmCode);
public abstract SaCode GetCode (SaCode.Params prmCode); public abstract SaCode GetCode (SaCode.Params prmCode);
/// <summary>Get filtered codes, indexed by Code Type code.</summary> /// <summary>Get filtered code type codes, indexed by Code Type code.</summary>
public abstract Dictionary<String, List<SaCode>> GetCodesByCodeType (SaCode.Params prmCode); public abstract Dictionary<String, List<SaCode>> GetCodesByCodeType(SaCode.Params prmCode);
public abstract Task<Dictionary<String, List<SaCode>>> GetCodesByCodeTypeAsync (SaCode.Params prmCode); public abstract Task<Dictionary<String, List<SaCode>>> GetCodesByCodeTypeAsync (SaCode.Params prmCode);
/// <summary>Get filtered codes and descriptions, indexed by Code Type code.</summary> /// <summary>Get filtered codes and descriptions, indexed by Code Type code.</summary>
public abstract Dictionary<String, List<CodeDesc>> GetCodeDescsByCodeType (SaCode.Params prmCode); public abstract Dictionary<String, List<CodeDesc>> GetCodeDescsByCodeType (SaCode.Params prmCode);
// Code updates.
public abstract bool InsertCode(SaCode code, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateCode(SaCode code, DbUpdateInfo dbUpdateInfo);
public abstract bool DeleteCode(SaCode code, DbUpdateInfo dbUpdateInfo);
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Create codes. // Create codes.
@@ -65,9 +65,9 @@ namespace Sarand.Net.Standard.Base.CodeTypes
errField.Code = SacsHierarchyItem.ValidValue.Invalid; errField.Code = SacsHierarchyItem.ValidValue.Invalid;
return false; return false;
} }
if (!IsValidValue(codeTypeData.Description, "description", (long)SaCodeTypeDbDfn.GetColTextLen(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name), true)) if (!IsValidValue(codeTypeData.Name, "description", (long)SaCodeTypeDbDfn.GetColTextLen(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name), true))
{ {
errField.Description = SacsHierarchyItem.ValidValue.Invalid; errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false; return false;
} }
if (!IsValidValue(codeTypeData.CodeFormat, "code format", (long)SaCodeTypeDbDfn.GetColTextLen(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_CodeFormat))) if (!IsValidValue(codeTypeData.CodeFormat, "code format", (long)SaCodeTypeDbDfn.GetColTextLen(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_CodeFormat)))
+1 -1
View File
@@ -332,7 +332,7 @@ namespace Sarand.Net.Standard.Base.Dbas
/// <para>- Format as: ('Value1','Value2','Value3') if string data, else (Value1,Value2,Value3) etc.</para> /// <para>- Format as: ('Value1','Value2','Value3') if string data, else (Value1,Value2,Value3) etc.</para>
/// <para>- Returns empty string if list is empty.</para> /// <para>- Returns empty string if list is empty.</para>
/// </summary> /// </summary>
public static String FormatForIn(List<String> rawValues, bool stringData = true, bool ignoreBlanks = true) public static String FormatForIn(IEnumerable<String> rawValues, bool stringData = true, bool ignoreBlanks = true)
{ {
String result = String.Empty; String result = String.Empty;
List<String> values = new List<String>(); List<String> values = new List<String>();
@@ -16,6 +16,7 @@ namespace Sarand.Net.Standard.Base.Utils
struct _IMAGE_FILE_HEADER struct _IMAGE_FILE_HEADER
{ {
#pragma warning disable CS0649
public ushort Machine; public ushort Machine;
public ushort NumberOfSections; public ushort NumberOfSections;
public uint TimeDateStamp; public uint TimeDateStamp;
@@ -23,6 +24,7 @@ namespace Sarand.Net.Standard.Base.Utils
public uint NumberOfSymbols; public uint NumberOfSymbols;
public ushort SizeOfOptionalHeader; public ushort SizeOfOptionalHeader;
public ushort Characteristics; public ushort Characteristics;
#pragma warning restore CS0649
}; };
public static DateTime GetBuildDateTime (this Assembly assembly) public static DateTime GetBuildDateTime (this Assembly assembly)
+27 -7
View File
@@ -9,7 +9,7 @@ namespace Sarand.Net.Standard.Base.Utils
public static class EnumUtil public static class EnumUtil
{ {
//------------------------------------------------------------------- //-------------------------------------------------------------------
public static bool IsValid<TEnum> (int value) where TEnum : struct, IConvertible public static bool IsValid<TEnum>(int value) where TEnum : struct, IConvertible
{ {
try try
{ {
@@ -19,7 +19,7 @@ namespace Sarand.Net.Standard.Base.Utils
catch (Exception) { } catch (Exception) { }
return false; return false;
} }
public static bool IsValid<TEnum> (String value) where TEnum : struct, IConvertible public static bool IsValid<TEnum>(String value) where TEnum : struct, IConvertible
{ {
try try
{ {
@@ -29,6 +29,7 @@ namespace Sarand.Net.Standard.Base.Utils
catch (Exception) { } catch (Exception) { }
return false; return false;
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
/// <summary> /// <summary>
/// Get Name for enum value. /// Get Name for enum value.
@@ -36,10 +37,11 @@ namespace Sarand.Net.Standard.Base.Utils
/// <typeparam name="TEnum"></typeparam> /// <typeparam name="TEnum"></typeparam>
/// <param name="value"></param> /// <param name="value"></param>
/// <returns></returns> /// <returns></returns>
public static String GetName<TEnum> (Object value) where TEnum : struct, IConvertible public static String GetName<TEnum>(Object value) where TEnum : struct, IConvertible
{ {
return Enum.GetName(typeof(TEnum), value); return Enum.GetName(typeof(TEnum), value);
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
/// <summary> /// <summary>
/// <para>Get enum values.</para> /// <para>Get enum values.</para>
@@ -47,10 +49,11 @@ namespace Sarand.Net.Standard.Base.Utils
/// </summary> /// </summary>
/// <typeparam name="TEnum">Enum type</typeparam> /// <typeparam name="TEnum">Enum type</typeparam>
/// <returns></returns> /// <returns></returns>
public static IEnumerable<TEnum> GetValues<TEnum> () where TEnum : struct, IConvertible public static IEnumerable<TEnum> GetValues<TEnum>() where TEnum : struct, IConvertible
{ {
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>(); return Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
/// <summary> /// <summary>
/// <para>Convert String to enum.</para> /// <para>Convert String to enum.</para>
@@ -58,11 +61,11 @@ namespace Sarand.Net.Standard.Base.Utils
/// <typeparam name="TEnum"></typeparam> /// <typeparam name="TEnum"></typeparam>
/// <param name="value"></param> /// <param name="value"></param>
/// <returns></returns> /// <returns></returns>
public static TEnum ParseEnum<TEnum> (string value) where TEnum : struct, IConvertible public static TEnum ParseEnum<TEnum>(string value) where TEnum : struct, IConvertible
{ {
return (TEnum)Enum.Parse(typeof(TEnum), value, true); return (TEnum)Enum.Parse(typeof(TEnum), value, true);
} }
public static TEnum ParseEnum<TEnum> (string value, TEnum defaultValue) where TEnum : struct, IConvertible public static TEnum ParseEnum<TEnum>(string value, TEnum defaultValue) where TEnum : struct, IConvertible
{ {
if (StringUtil.IsEmpty(value)) return defaultValue; if (StringUtil.IsEmpty(value)) return defaultValue;
try try
@@ -72,6 +75,22 @@ namespace Sarand.Net.Standard.Base.Utils
catch (Exception exc) { SaLogger.Debug("EnumUtil.ParseEnum " + ExceptionUtil.GetErrorStateMessage(exc) + " [Enum: " + typeof(TEnum).Name + ". Value: " + value + "]"); } catch (Exception exc) { SaLogger.Debug("EnumUtil.ParseEnum " + ExceptionUtil.GetErrorStateMessage(exc) + " [Enum: " + typeof(TEnum).Name + ". Value: " + value + "]"); }
return defaultValue; return defaultValue;
} }
//-------------------------------------------------------------------
public static HashSet<TEnum> ParseEnums<TEnum>(IEnumerable<String> values) where TEnum : struct, IConvertible
{
HashSet<TEnum> enums = new HashSet<TEnum>();
foreach (String value in values)
{
try
{
enums.Add((TEnum)Enum.Parse(typeof(TEnum), value, true));
}
catch (Exception exc) { SaLogger.Debug("EnumUtil.ParseEnums " + ExceptionUtil.GetErrorStateMessage(exc) + " [Enum: " + typeof(TEnum).Name + ". Value: " + value + "]"); }
}
return enums;
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
/// <summary> /// <summary>
/// Retrieve the first enum value whose name starts with the specified value. /// Retrieve the first enum value whose name starts with the specified value.
@@ -80,7 +99,7 @@ namespace Sarand.Net.Standard.Base.Utils
/// <param name="value"></param> /// <param name="value"></param>
/// <param name="defaultValue"></param> /// <param name="defaultValue"></param>
/// <returns></returns> /// <returns></returns>
public static TEnum StartsWith<TEnum> (string value, TEnum defaultValue) where TEnum : struct, IConvertible public static TEnum StartsWith<TEnum>(string value, TEnum defaultValue) where TEnum : struct, IConvertible
{ {
foreach (TEnum t in GetValues<TEnum>()) foreach (TEnum t in GetValues<TEnum>())
{ {
@@ -89,6 +108,7 @@ namespace Sarand.Net.Standard.Base.Utils
} }
return defaultValue; return defaultValue;
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
} }
//======================================================================= //=======================================================================
@@ -20,13 +20,13 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Static initialisation. // Static initialisation.
static SaCodeTypeConsole_Dbas () static SaCodeTypeConsole_Dbas()
{ {
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Construction. // Construction.
protected SaCodeTypeConsole_Dbas (ISacsDatabase database) protected SaCodeTypeConsole_Dbas(ISacsDatabase database)
{ {
Database = database; Database = database;
codeTypeMgr = new SaCodeTypeMgr_Dbas(this); codeTypeMgr = new SaCodeTypeMgr_Dbas(this);
@@ -41,7 +41,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//******************************************************************* //*******************************************************************
// C o d e T y p e D e f i n i t i o n s // C o d e T y p e D e f i n i t i o n s
//******************************************************************* //*******************************************************************
public override SaCodeTypeDfn GetCodeTypeDefinition (SysId codeTypeId) public override SaCodeTypeDfn GetCodeTypeDefinition(SysId codeTypeId)
{ {
ClearErrorState(); ClearErrorState();
SaCodeType codeType = codeTypeMgr.GetCodeTypeById(codeTypeId); SaCodeType codeType = codeTypeMgr.GetCodeTypeById(codeTypeId);
@@ -55,68 +55,137 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//******************************************************************* //*******************************************************************
// C o d e T y p e s // C o d e T y p e s
//******************************************************************* //*******************************************************************
public override bool CodeTypeExists (String codeTypeCode)
// Create Code Type.
public override SaCodeType CreateCodeType(String code)
{ {
ClearErrorState(); ClearErrorState();
SaCodeType.Params prmCodeType = new SaCodeType.Params(); return codeTypeMgr.CreateCodeType(code);
prmCodeType.Code = codeTypeCode;
prmCodeType.StatusCat = SaCodeType.StatusCat.Any;
return (codeTypeMgr.GetCodeTypeCount(prmCodeType) > 0);
} }
public override String GetDescForCodeType (String codeTypeCode)
// Code Type exists.
public override bool CodeTypeExistsById(SysId codeTypeId)
{ {
ClearErrorState(); ClearErrorState();
SaCodeType codeTypeData = codeTypeMgr.GetCodeTypeByCode(codeTypeCode); bool exists = codeTypeMgr.CodeTypeExistsById(codeTypeId);
if (codeTypeData != null) SetErrorState(codeTypeMgr.ErrorStateMessage);
return codeTypeData.Description; return exists;
return base.GetDescForCodeType(codeTypeCode);
} }
public override int GetCodeTypeCount (SaCodeType.Params prmCodeType) public override bool CodeTypeExistsByCode(String codeTypeCode)
{
ClearErrorState();
bool exists = codeTypeMgr.CodeTypeExistsByCode(codeTypeCode);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return exists;
}
// Code Type count.
public override int GetCodeTypeCount(SaCodeType.Params prmCodeType)
{ {
ClearErrorState(); ClearErrorState();
return (int)codeTypeMgr.GetCodeTypeCount(prmCodeType); return (int)codeTypeMgr.GetCodeTypeCount(prmCodeType);
} }
public override SaCodeType GetCodeType (SaCodeType.Params prmCodeType)
// Get Code Type.
public override SaCodeType GetCodeTypeById(SysId codeTypeId)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCodeType(prmCodeType); SaCodeType codeType = codeTypeMgr.GetCodeTypeById(codeTypeId);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return codeType;
} }
public override List<SaCodeType> GetCodeTypeList (SaCodeType.Params prmCodeType) public override SaCodeType GetCodeTypeByCode(String codeTypeCode)
{
ClearErrorState();
SaCodeType codeType = codeTypeMgr.GetCodeTypeByCode(codeTypeCode);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return codeType;
}
public override SaCodeType GetCodeType(SaCodeType.Params prmCodeType)
{
ClearErrorState();
SaCodeType codeType = codeTypeMgr.GetCodeType(prmCodeType);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return codeType;
}
// Get name for Code Type.
public override String GetNameForCodeType(String codeTypeCode)
{
ClearErrorState();
SaCodeType codeTypeData = codeTypeMgr.GetCodeTypeByCode(codeTypeCode);
if (codeTypeData != null)
return codeTypeData.Name;
return base.GetNameForCodeType(codeTypeCode);
}
// Get Code Types.
public override List<SaCodeType> GetCodeTypeList(SaCodeType.Params prmCodeType)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCodeTypeList(prmCodeType); return codeTypeMgr.GetCodeTypeList(prmCodeType);
} }
public override ColumnDfn GetCodeTypeColumnDfn (SaCodeType.Column columnId, String caption = "", int width = 0)
// Code Type columns.
public override ColumnDfn GetCodeTypeColumnDfn(SaCodeType.Column columnId, String caption = "", int width = 0)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCodeTypeColumnDfn(columnId, caption, width); return codeTypeMgr.GetCodeTypeColumnDfn(columnId, caption, width);
} }
public override DbResultSet ExecuteCodeTypeQuery (List<ColumnDfn> columns, SaCodeType.Params prm)
// Execute Code Type query.
public override DbResultSet ExecuteCodeTypeQuery(List<ColumnDfn> columns, SaCodeType.Params prm)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.ExecuteCodeTypeQuery(columns, prm); return codeTypeMgr.ExecuteCodeTypeQuery(columns, prm);
} }
public override DataValue GetCodeTypeDataValue (ColumnDfn column, NamedValue.Map values)
// Get Code Type data value.
public override DataValue GetCodeTypeDataValue(ColumnDfn column, NamedValue.Map values)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCodeTypeDataValue(column, values); return codeTypeMgr.GetCodeTypeDataValue(column, values);
} }
//-------------------------------------------------------------------
// Code Type updates.
public override bool InsertCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
bool result = codeTypeMgr.InsertCodeType(codeType, dbUpdateInfo);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return result;
}
public override bool UpdateCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
bool result = codeTypeMgr.UpdateCodeType(codeType, dbUpdateInfo);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return result;
}
public override bool DeleteCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
bool result = codeTypeMgr.DeleteCodeType(codeType, dbUpdateInfo);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return result;
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Maintain code types - returns true if changes made. // Maintain code types - returns true if changes made.
public override bool MaintainCodeTypes (bool userCanManageCodeTypes, DbUpdateInfo dbUpdateInfo) public override bool MaintainCodeTypes(bool userCanManageCodeTypes, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
MaintainCodeTypesFn?.Invoke(this, userCanManageCodeTypes, dbUpdateInfo); MaintainCodeTypesFn?.Invoke(this, userCanManageCodeTypes, dbUpdateInfo);
return false; return false;
} }
// Method to display Code Type management dialog. // Method to display Code Type management dialog.
protected delegate bool MaintainCodeTypesFunction (SaCodeTypeConsole codeTypeConsole, bool userCanManageCodeTypes, DbUpdateInfo dbUpdateInfo); protected delegate bool MaintainCodeTypesFunction(SaCodeTypeConsole codeTypeConsole, bool userCanManageCodeTypes, DbUpdateInfo dbUpdateInfo);
protected abstract MaintainCodeTypesFunction MaintainCodeTypesFn { get; } protected abstract MaintainCodeTypesFunction MaintainCodeTypesFn { get; }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Maintain code type - returns true if changes made. // Maintain code type - returns true if changes made.
public override bool MaintainCodeType (String codeTypeCode, DbUpdateInfo dbUpdateInfo) public override bool MaintainCodeType(String codeTypeCode, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
return false; return false;
@@ -125,8 +194,21 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//******************************************************************* //*******************************************************************
// C o d e s // C o d e s
//******************************************************************* //*******************************************************************
// Create code.
public override SaCode CreateCode(SysId codeTypeId, String code)
{
return codeTypeMgr.CreateCode(codeTypeId, code);
}
// Check whether code exists. // Check whether code exists.
public override bool CodeExistsForCodeType (String codeTypeCode, String code, bool activeOnly)
public override bool CodeTypeHasCodes(String codeTypeCode, bool activeOnly = true)
{
return GetCodeCountForCodeType(codeTypeCode, activeOnly) > 0;
}
public override bool CodeExistsForCodeType(String codeTypeCode, String code, bool activeOnly)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(codeTypeCode) || StringUtil.IsEmpty(code)) return false; if (StringUtil.IsEmpty(codeTypeCode) || StringUtil.IsEmpty(code)) return false;
@@ -138,13 +220,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
return (codeTypeMgr.GetCodeCount(prmCode) == 1); return (codeTypeMgr.GetCodeCount(prmCode) == 1);
} }
//------------------------------------------------------------------- public override int GetCodeCountForCodeType(String codeTypeCode, bool activeOnly = true)
// Codes exist for code type.
public override bool CodeTypeHasCodes (String codeTypeCode, bool activeOnly = true)
{
return GetCodeCountForCodeType(codeTypeCode, activeOnly) > 0;
}
public override int GetCodeCountForCodeType (String codeTypeCode, bool activeOnly = true)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(codeTypeCode)) return 0; if (StringUtil.IsEmpty(codeTypeCode)) return 0;
@@ -155,8 +231,17 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Get code for code type. // Get code.
public override SaCode GetCodeForCodeType (String codeTypeCode, String code, bool activeOnly = true)
public override SaCode GetCodeById(SysId codeId)
{
ClearErrorState();
SaCode code = codeTypeMgr.GetCodeById(codeId);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return code;
}
public override SaCode GetCodeForCodeType(String codeTypeCode, String code, bool activeOnly = true)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(codeTypeCode) || StringUtil.IsEmpty(code)) return null; if (StringUtil.IsEmpty(codeTypeCode) || StringUtil.IsEmpty(code)) return null;
@@ -164,15 +249,13 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
prmCode.CodeTypeCodes.Add(codeTypeCode); prmCode.CodeTypeCodes.Add(codeTypeCode);
prmCode.Code = code; prmCode.Code = code;
prmCode.StatusCat = (activeOnly ? SaCode.StatusCat.ActiveOnly : SaCode.StatusCat.Any); prmCode.StatusCat = (activeOnly ? SaCode.StatusCat.ActiveOnly : SaCode.StatusCat.Any);
List<SaCode> codes = codeTypeMgr.GetCodeList(prmCode); return codeTypeMgr.GetCode(prmCode);
if (codes.Count > 0)
return codes[0];
return null;
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Get codes for code type. // Get codes for code type.
public override List<CodeDesc> GetCodeDescsForCodeType (String codeTypeCode, bool activeOnly = true)
public override List<CodeDesc> GetCodeDescsForCodeType(String codeTypeCode, bool activeOnly = true)
{ {
ClearErrorState(); ClearErrorState();
List<CodeDesc> codes = new List<CodeDesc>(); List<CodeDesc> codes = new List<CodeDesc>();
@@ -202,7 +285,8 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
} }
return codes; return codes;
} }
public override List<SaCode> GetCodeListForCodeType (String codeTypeCode, bool activeOnly = true)
public override List<SaCode> GetCodesForCodeType(String codeTypeCode, bool activeOnly = true)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(codeTypeCode)) return new List<SaCode>(); if (StringUtil.IsEmpty(codeTypeCode)) return new List<SaCode>();
@@ -221,34 +305,34 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Codes by filter. // Codes by filter.
public override int GetCodeCount (SaCode.Params prmCode) public override int GetCodeCount(SaCode.Params prmCode)
{ {
ClearErrorState(); ClearErrorState();
return (int)codeTypeMgr.GetCodeCount(prmCode); return (int)codeTypeMgr.GetCodeCount(prmCode);
} }
public override SaCode GetCode (SaCode.Params prmCode) public override SaCode GetCode(SaCode.Params prmCode)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCode(prmCode); return codeTypeMgr.GetCode(prmCode);
} }
public override List<SaCode> GetCodeList (SaCode.Params prmCode) public override List<SaCode> GetCodeList(SaCode.Params prmCode)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCodeList(prmCode); return codeTypeMgr.GetCodeList(prmCode);
} }
public override ColumnDfn GetCodeColumnDfn (SaCode.Column columnId, String caption = "", int width = 0) public override ColumnDfn GetCodeColumnDfn(SaCode.Column columnId, String caption = "", int width = 0)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCodeColumnDfn(columnId, caption, width); return codeTypeMgr.GetCodeColumnDfn(columnId, caption, width);
} }
public override DbResultSet ExecuteCodeQuery (List<ColumnDfn> columns, SaCode.Params prm) public override DbResultSet ExecuteCodeQuery(List<ColumnDfn> columns, SaCode.Params prm)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.ExecuteCodeQuery(columns, prm); return codeTypeMgr.ExecuteCodeQuery(columns, prm);
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
public override DataValue GetCodeDataValue (ColumnDfn column, NamedValue.Map values) public override DataValue GetCodeDataValue(ColumnDfn column, NamedValue.Map values)
{ {
ClearErrorState(); ClearErrorState();
return codeTypeMgr.GetCodeDataValue(column, values); return codeTypeMgr.GetCodeDataValue(column, values);
@@ -256,7 +340,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Get filtered codes, indexed by Code Type code. // Get filtered codes, indexed by Code Type code.
public override Dictionary<String, List<SaCode>> GetCodesByCodeType (SaCode.Params prmCode) public override Dictionary<String, List<SaCode>> GetCodesByCodeType(SaCode.Params prmCode)
{ {
ClearErrorState(); ClearErrorState();
@@ -265,14 +349,14 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
// Retrieve code type codes. // Retrieve code type codes.
SaCodeType.Params prmCodeType = new SaCodeType.Params(); SaCodeType.Params prmCodeType = new SaCodeType.Params();
prmCodeType.IncludedIds.AddRange(codesByCodeTypeId.Keys); prmCodeType.IdsIncluded.UnionWith(codesByCodeTypeId.Keys);
prmCodeType.StatusCat = SaCodeType.StatusCat.Any; prmCodeType.StatusCat = SaCodeType.StatusCat.Any;
List<SaCodeType> codeTypes = codeTypeMgr.GetCodeTypeList(prmCodeType); List<SaCodeType> codeTypes = codeTypeMgr.GetCodeTypeList(prmCodeType);
// Convert Code Type identity from Id to code and sort each list of codes appropriately. // Convert Code Type identity from Id to code and sort each list of codes appropriately.
return ConvertCodeTypeIdentityAndSortCodes(codesByCodeTypeId, codeTypes); return ConvertCodeTypeIdentityAndSortCodes(codesByCodeTypeId, codeTypes);
} }
public override async Task<Dictionary<String, List<SaCode>>> GetCodesByCodeTypeAsync (SaCode.Params prmCode) public override async Task<Dictionary<String, List<SaCode>>> GetCodesByCodeTypeAsync(SaCode.Params prmCode)
{ {
ClearErrorState(); ClearErrorState();
@@ -281,14 +365,14 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
// Retrieve code type codes. // Retrieve code type codes.
SaCodeType.Params prmCodeType = new SaCodeType.Params(); SaCodeType.Params prmCodeType = new SaCodeType.Params();
prmCodeType.IncludedIds.AddRange(codesByCodeTypeId.Keys); prmCodeType.IdsIncluded.UnionWith(codesByCodeTypeId.Keys);
prmCodeType.StatusCat = SaCodeType.StatusCat.Any; prmCodeType.StatusCat = SaCodeType.StatusCat.Any;
List<SaCodeType> codeTypes = await codeTypeMgr.GetCodeTypeListAsync(prmCodeType); List<SaCodeType> codeTypes = await codeTypeMgr.GetCodeTypeListAsync(prmCodeType);
// Convert Code Type identity from Id to code and sort each list of codes appropriately. // Convert Code Type identity from Id to code and sort each list of codes appropriately.
return ConvertCodeTypeIdentityAndSortCodes(codesByCodeTypeId, codeTypes); return ConvertCodeTypeIdentityAndSortCodes(codesByCodeTypeId, codeTypes);
} }
private Dictionary<SysId, List<SaCode>> GetCodesByCodeTypeId (List<SaCode> codes) private Dictionary<SysId, List<SaCode>> GetCodesByCodeTypeId(List<SaCode> codes)
{ {
// Retrieve codes and index by Code Type Id. // Retrieve codes and index by Code Type Id.
Dictionary<SysId, List<SaCode>> codesByCodeTypeId = new Dictionary<SysId, List<SaCode>>(); Dictionary<SysId, List<SaCode>> codesByCodeTypeId = new Dictionary<SysId, List<SaCode>>();
@@ -300,7 +384,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
} }
return codesByCodeTypeId; return codesByCodeTypeId;
} }
private Dictionary<String, List<SaCode>> ConvertCodeTypeIdentityAndSortCodes (Dictionary<SysId, List<SaCode>> codesByCodeTypeId, List<SaCodeType> codeTypes) private Dictionary<String, List<SaCode>> ConvertCodeTypeIdentityAndSortCodes(Dictionary<SysId, List<SaCode>> codesByCodeTypeId, List<SaCodeType> codeTypes)
{ {
// Convert identity from Code Type Id to Code and sort list foc deos associated with each code type. // Convert identity from Code Type Id to Code and sort list foc deos associated with each code type.
Dictionary<String, List<SaCode>> codesByCodeType = new Dictionary<string, List<SaCode>>(); Dictionary<String, List<SaCode>> codesByCodeType = new Dictionary<string, List<SaCode>>();
@@ -329,12 +413,12 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
public String Code { get; set; } = ""; public String Code { get; set; } = "";
public String Desc { get; set; } = ""; public String Desc { get; set; } = "";
public int Sequence { get; set; } = 0; public int Sequence { get; set; } = 0;
public static explicit operator CodeDesc (CodeData codeData) public static explicit operator CodeDesc(CodeData codeData)
{ {
return new CodeDesc(codeData.Code, codeData.Desc); return new CodeDesc(codeData.Code, codeData.Desc);
} }
} }
public override Dictionary<String, List<CodeDesc>> GetCodeDescsByCodeType (SaCode.Params prmCode) public override Dictionary<String, List<CodeDesc>> GetCodeDescsByCodeType(SaCode.Params prmCode)
{ {
ClearErrorState(); ClearErrorState();
// Query columns. // Query columns.
@@ -381,9 +465,33 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
return codes; return codes;
} }
//-------------------------------------------------------------------
// Code updates.
public override bool InsertCode(SaCode code, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
bool result = codeTypeMgr.InsertCode(code, dbUpdateInfo);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return result;
}
public override bool UpdateCode(SaCode code, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
bool result = codeTypeMgr.UpdateCode(code, dbUpdateInfo);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return result;
}
public override bool DeleteCode(SaCode code, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
bool result = codeTypeMgr.DeleteCode(code, dbUpdateInfo);
SetErrorState(codeTypeMgr.ErrorStateMessage);
return result;
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Create codes. // Create codes.
public override bool CreateCodeOfType (SysId codeTypeId, String code, String desc, DbUpdateInfo dbUpdateInfo) public override bool CreateCodeOfType(SysId codeTypeId, String code, String desc, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (!SysId.IsValid(codeTypeId)) return SetErrorState("Code type must be identified"); if (!SysId.IsValid(codeTypeId)) return SetErrorState("Code type must be identified");
@@ -393,7 +501,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
return SetErrorState("Failed to insert code - " + codeTypeMgr.ErrorStateMessage); return SetErrorState("Failed to insert code - " + codeTypeMgr.ErrorStateMessage);
return true; return true;
} }
public override bool CreateCodeOfType (String codeTypeCode, String code, String desc, DbUpdateInfo dbUpdateInfo) public override bool CreateCodeOfType(String codeTypeCode, String code, String desc, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
SaCodeType codeTypeData = codeTypeMgr.GetCodeTypeByCode(codeTypeCode); SaCodeType codeTypeData = codeTypeMgr.GetCodeTypeByCode(codeTypeCode);
@@ -404,7 +512,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Populate code types - application specific. // Populate code types - application specific.
public override bool PopulateCodeType (String codeTypeCode, DbUpdateInfo dbUpdateInfo) public override bool PopulateCodeType(String codeTypeCode, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(codeTypeCode)) return SetErrorState("Code type code must be supplied"); if (StringUtil.IsEmpty(codeTypeCode)) return SetErrorState("Code type code must be supplied");
@@ -419,7 +527,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
{ {
// Create code type. // Create code type.
codeType = codeTypeMgr.CreateCodeType(codeTypeCode); codeType = codeTypeMgr.CreateCodeType(codeTypeCode);
codeType.Description = codeTypeDfn.Description; codeType.Name = codeTypeDfn.Description;
codeType.Notes = codeTypeDfn.Notes; codeType.Notes = codeTypeDfn.Notes;
codeType.Status = SaCodeType.DefaultStatus; codeType.Status = SaCodeType.DefaultStatus;
if (!codeTypeMgr.InsertCodeType(codeType, dbUpdateInfo)) if (!codeTypeMgr.InsertCodeType(codeType, dbUpdateInfo))
@@ -428,7 +536,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
else else
{ {
// Code type exists - refresh properties. // Code type exists - refresh properties.
codeType.Description = codeTypeDfn.Description; codeType.Name = codeTypeDfn.Description;
if (StringUtil.IsEmpty(codeType.Notes)) if (StringUtil.IsEmpty(codeType.Notes))
codeType.Notes = codeTypeDfn.Notes; codeType.Notes = codeTypeDfn.Notes;
codeType.Status = SaCodeType.DefaultStatus; codeType.Status = SaCodeType.DefaultStatus;
@@ -454,7 +562,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
return true; return true;
} }
public override bool PopulateCode (String codeTypeCode, String code, String desc, bool active, DbUpdateInfo dbUpdateInfo) public override bool PopulateCode(String codeTypeCode, String code, String desc, bool active, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(codeTypeCode)) return SetErrorState("Code type code must be supplied"); if (StringUtil.IsEmpty(codeTypeCode)) return SetErrorState("Code type code must be supplied");
@@ -481,7 +589,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Select codes. // Select codes.
public override List<String> SelectCodes (String codeTypeCode, List<String> codesSelected) public override List<String> SelectCodes(String codeTypeCode, List<String> codesSelected)
{ {
ClearErrorState(); ClearErrorState();
List<String> codes = new List<String>(); List<String> codes = new List<String>();
@@ -14,7 +14,7 @@ namespace Sarand.Net.Standard.Dbas.CodeType
{ {
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Data members. // Data members.
private static String className = nameof(SaCodeTypeDbDfnGenerator); //private static String className = nameof(SaCodeTypeDbDfnGenerator);
//------------------------------------------------------------------- //-------------------------------------------------------------------
/// <summary> /// <summary>
@@ -12,6 +12,7 @@ using Sarand.Net.Standard.Dbas.Base;
using Sarand.Net.Standard.Dbas.CodeTypes.Internal; using Sarand.Net.Standard.Dbas.CodeTypes.Internal;
using Sarand.Net.Standard.Dbas.Data; using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using System.Text.RegularExpressions;
namespace Sarand.Net.Standard.Dbas.CodeTypes namespace Sarand.Net.Standard.Dbas.CodeTypes
{ {
@@ -24,13 +25,13 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Static initialisation. // Static initialisation.
static SaCodeTypeMgr_Dbas () static SaCodeTypeMgr_Dbas()
{ {
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Construction. // Construction.
internal SaCodeTypeMgr_Dbas (SaCodeTypeConsole_Dbas codeTypeConsole) internal SaCodeTypeMgr_Dbas(SaCodeTypeConsole_Dbas codeTypeConsole)
{ {
this.codeTypeConsole = codeTypeConsole; this.codeTypeConsole = codeTypeConsole;
DbInfo = new DbDataItem.DatabaseInfo(codeTypeConsole.Database); DbInfo = new DbDataItem.DatabaseInfo(codeTypeConsole.Database);
@@ -49,7 +50,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
// C o d e T y p e s // C o d e T y p e s
//******************************************************************* //*******************************************************************
// Associated data. // Associated data.
public override bool CodeTypeHasCodes (SysId codeTypeId) public override bool CodeTypeHasCodes(SysId codeTypeId)
{ {
String filter = SaCodeTypeDbDfn.GetColumnName(SaCodeTypeDbDfn.ColumnIdx.SaCode_CodeTypeId) + "=" + SysId.ToString(codeTypeId); String filter = SaCodeTypeDbDfn.GetColumnName(SaCodeTypeDbDfn.ColumnIdx.SaCode_CodeTypeId) + "=" + SysId.ToString(codeTypeId);
return (Database.GetRowCount(TableName_Code, filter) > 0); return (Database.GetRowCount(TableName_Code, filter) > 0);
@@ -57,19 +58,19 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Create Code Type. // Create Code Type.
public override SaCodeType CreateCodeType (String code) public override SaCodeType CreateCodeType(String code)
{ {
ClearErrorState(); ClearErrorState();
return new SaCodeType_Dbas(null, code, 0); return new SaCodeType_Dbas(null, code, 0);
} }
public SaCodeType CreateCodeType (SaCodeType_Db dbCodeType) public SaCodeType CreateCodeType(SaCodeType_Db dbCodeType)
{ {
ClearErrorState(); ClearErrorState();
SaCodeType codeType = new SaCodeType_Dbas(new SysId(dbCodeType._Id), dbCodeType._Code, (ushort)dbCodeType._Flags); SaCodeType codeType = new SaCodeType_Dbas(new SysId(dbCodeType._Id), dbCodeType._Code, (ushort)dbCodeType._Flags);
PopulateFrom(dbCodeType, codeType); PopulateFrom(dbCodeType, codeType);
return codeType; return codeType;
} }
private SaCodeType CreateCodeType (DbDataReader dataReader) private SaCodeType CreateCodeType(DbDataReader dataReader)
{ {
SaCodeType_Db dbCodeType = new SaCodeType_Db(DbInfo); SaCodeType_Db dbCodeType = new SaCodeType_Db(DbInfo);
dbCodeType.PopulateFrom(dataReader); dbCodeType.PopulateFrom(dataReader);
@@ -78,22 +79,22 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item exists. // Item exists.
public override bool CodeTypeExistsById (SysId id) public override bool CodeTypeExistsById(SysId id)
{ {
ClearErrorState(); ClearErrorState();
if (!SysId.IsValid(id)) return false; if (!SysId.IsValid(id)) return false;
return GetCodeTypeCount(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id, aliasCodeType) + "=" + SysId.ToString(id)) == 1; return GetCodeTypeCount($"{SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id, aliasCodeType)}={SysId.ToLong(id)}") == 1;
} }
public override bool CodeTypeExistsByCode (string code) public override bool CodeTypeExistsByCode(string code)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(code)) return false; if (StringUtil.IsEmpty(code)) return false;
return GetCodeTypeCount(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, aliasCodeType) + "='" + DbQuery.FormatForCondition(code) + "'") == 1; return GetCodeTypeCount($"{SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, aliasCodeType)}='{DbQuery.FormatForCondition(code)}'") == 1;
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Get Item. // Get Item.
private SaCodeType GetCodeType (String filter) private SaCodeType GetCodeType(String filter)
{ {
ClearErrorState(); ClearErrorState();
if (GetCodeTypeCount(filter) != 1) return null; if (GetCodeTypeCount(filter) != 1) return null;
@@ -117,18 +118,18 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
} }
return codeType; return codeType;
} }
public override SaCodeType GetCodeType (SaCodeType.Params prmCodeType) public override SaCodeType GetCodeType(SaCodeType.Params prmCodeType)
{ {
ClearErrorState(); ClearErrorState();
return GetCodeType(GetCodeTypeQueryFilter(prmCodeType).Concat(" And ", "(", ")")); return GetCodeType(GetCodeTypeQueryFilter(prmCodeType).Concat(" And ", "(", ")"));
} }
public override SaCodeType GetCodeTypeById (SysId id) public override SaCodeType GetCodeTypeById(SysId id)
{ {
ClearErrorState(); ClearErrorState();
if (!SysId.IsValid(id)) return null; if (!SysId.IsValid(id)) return null;
return GetCodeType("Id=" + SysId.ToString(id)); return GetCodeType("Id=" + SysId.ToString(id));
} }
public override SaCodeType GetCodeTypeByCode (string code) public override SaCodeType GetCodeTypeByCode(string code)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(code)) return null; if (StringUtil.IsEmpty(code)) return null;
@@ -137,7 +138,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Validate Item properties. // Validate Item properties.
public override bool IsValidCodeTypeData (SaCodeType.Data codeTypeData, SaCodeType.ErrField errField) public override bool IsValidCodeTypeData(SaCodeType.Data codeTypeData, SaCodeType.ErrField errField)
{ {
ClearErrorState(); ClearErrorState();
if (!base.IsValidCodeTypeData(codeTypeData, errField)) return false; if (!base.IsValidCodeTypeData(codeTypeData, errField)) return false;
@@ -146,7 +147,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Insert Item. // Insert Item.
public override bool InsertCodeType (SaCodeType codeType, DbUpdateInfo dbUpdateInfo) public override bool InsertCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (!IsValidCodeType(codeType)) return false; if (!IsValidCodeType(codeType)) return false;
@@ -174,7 +175,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Update Item. // Update Item.
public override bool UpdateCodeType (SaCodeType codeType, DbUpdateInfo dbUpdateInfo) public override bool UpdateCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (!IsValidCodeType(codeType)) return false; if (!IsValidCodeType(codeType)) return false;
@@ -199,13 +200,13 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Delete Item. // Delete Item.
public override bool CodeTypeCanBeDeleted (SaCodeType codeType) public override bool CodeTypeCanBeDeleted(SaCodeType codeType)
{ {
ClearErrorState(); ClearErrorState();
if (!base.CodeTypeCanBeDeleted(codeType)) return false; if (!base.CodeTypeCanBeDeleted(codeType)) return false;
return true; return true;
} }
public override bool DeleteCodeType (SaCodeType codeType, DbUpdateInfo dbUpdateInfo) public override bool DeleteCodeType(SaCodeType codeType, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (!CodeTypeCanBeDeleted(codeType)) return false; if (!CodeTypeCanBeDeleted(codeType)) return false;
@@ -230,11 +231,11 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Copy data properties to and from database. // Copy data properties to and from database.
private void PopulateTo (SaCodeType_Db dbCodeType, SaCodeType codeType, DbUpdateInfo dbUpdateInfo) private void PopulateTo(SaCodeType_Db dbCodeType, SaCodeType codeType, DbUpdateInfo dbUpdateInfo)
{ {
dbCodeType._Id = codeType.Id.ToInt(); dbCodeType._Id = codeType.Id.ToInt();
dbCodeType._Code = codeType.Code; dbCodeType._Code = codeType.Code;
dbCodeType._Name = codeType.Description; dbCodeType._Name = codeType.Name;
dbCodeType._MaxCodeLen = codeType.MaxCodeLen; dbCodeType._MaxCodeLen = codeType.MaxCodeLen;
dbCodeType._CodeFormat = codeType.CodeFormat; dbCodeType._CodeFormat = codeType.CodeFormat;
dbCodeType._NextCode = codeType.NextCode; dbCodeType._NextCode = codeType.NextCode;
@@ -252,11 +253,11 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
dbCodeType._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbCodeType._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbCodeType._UpdateHost = dbUpdateInfo.Host; dbCodeType._UpdateHost = dbUpdateInfo.Host;
} }
private void PopulateFrom (SaCodeType_Db dbCodeType, SaCodeType codeType) private void PopulateFrom(SaCodeType_Db dbCodeType, SaCodeType codeType)
{ {
//codeType.Id = new SysId(dbCodeType._Id); //codeType.Id = new SysId(dbCodeType._Id);
codeType.Code = dbCodeType._Code; codeType.Code = dbCodeType._Code;
codeType.Description = dbCodeType._Name; codeType.Name = dbCodeType._Name;
codeType.MaxCodeLen = dbCodeType._MaxCodeLen; codeType.MaxCodeLen = dbCodeType._MaxCodeLen;
codeType.CodeFormat = dbCodeType._CodeFormat; codeType.CodeFormat = dbCodeType._CodeFormat;
codeType.NextCode = dbCodeType._NextCode; codeType.NextCode = dbCodeType._NextCode;
@@ -281,7 +282,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
alias = aliasCodeType; alias = aliasCodeType;
col.Set(caption, width, (int)dbCol, prefix + SaCodeTypeDbDfn.GetColumnName(dbCol, false), SaCodeTypeDbDfn.GetColumnNameQual(dbCol, alias), dataType, align); col.Set(caption, width, (int)dbCol, prefix + SaCodeTypeDbDfn.GetColumnName(dbCol, false), SaCodeTypeDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
} }
public override ColumnDfn GetCodeTypeColumnDfn (SaCodeType.Column columnId, string caption = "", int width = 0) public override ColumnDfn GetCodeTypeColumnDfn(SaCodeType.Column columnId, string caption = "", int width = 0)
{ {
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId) switch (columnId)
@@ -300,8 +301,8 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
case SaCodeType.Column.Code: case SaCodeType.Column.Code:
SetCodeTypeColDfn(columnDfn, "Code", 90, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code); SetCodeTypeColDfn(columnDfn, "Code", 90, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code);
break; break;
case SaCodeType.Column.Description: case SaCodeType.Column.Name:
SetCodeTypeColDfn(columnDfn, "Description", 160, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name); SetCodeTypeColDfn(columnDfn, "Name", 160, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name);
break; break;
case SaCodeType.Column.MaxCodeLen: case SaCodeType.Column.MaxCodeLen:
SetCodeTypeColDfn(columnDfn, "Max code len", 90, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_MaxCodeLen, ColumnAlignment.Center, DataValue.DataType.Long); SetCodeTypeColDfn(columnDfn, "Max code len", 90, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_MaxCodeLen, ColumnAlignment.Center, DataValue.DataType.Long);
@@ -355,43 +356,63 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Query filter. // Query filter.
public override List<string> GetCodeTypeQueryFilter (SaCodeType.Params prm) public override List<string> GetCodeTypeQueryFilter(SaCodeType.Params prm)
{ {
List<String> filter = new List<String>(); List<String> filter = new List<String>();
// Code Type Id.
String colId = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id, aliasCodeType); String colId = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id, aliasCodeType);
String includedIds = prm.IncludedIds.Concat(","); String colCode = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, aliasCodeType);
if (!includedIds.IsEmpty()) String colName = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name, aliasCodeType);
filter.Add(colId + " IN (" + includedIds + ")"); String colNotes = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Notes, aliasCodeType);
String excludedIds = prm.ExcludedIds.Concat(","); String colStatus = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Status, aliasCodeType);
if (!excludedIds.IsEmpty())
filter.Add(colId + " NOT IN (" + excludedIds + ")"); // Item Id.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{colId} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{colId} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Generic search.
if (!StringUtil.IsBlank(prm.Search))
{
foreach (String search in Regex.Split(prm.Search, "[\\s,;\\-+]+"))
{
if (StringUtil.IsBlank(search)) continue;
String searchForLike = DbQuery.FormatForLike(search, true);
List<String> searchFilter = new List<string>();
searchFilter.Add($"{colCode} LIKE '%{searchForLike}%'");
searchFilter.Add($"{colName} LIKE '%{searchForLike}%'");
searchFilter.Add($"{colNotes} LIKE '%{searchForLike}%'");
filter.Add(searchFilter.Concat(" OR ", "(", ")"));
}
}
// Code. // Code.
String colCode = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, aliasCodeType); if (!StringUtil.IsBlank(prm.Code))
if (!StringUtil.IsEmpty(prm.Code)) filter.Add($"{colCode}='{DbQuery.FormatForCondition(prm.Code)}'");
filter.Add(colCode + "='" + DbQuery.FormatForCondition(prm.Code) + "'"); else if (!StringUtil.IsBlank(prm.CodePartial))
else if (!StringUtil.IsEmpty(prm.CodePartial)) filter.Add($"{colCode} LIKE '%{DbQuery.FormatForLike(prm.CodePartial)}%'");
filter.Add(colCode + " LIKE '%" + DbQuery.FormatForLike(prm.CodePartial) + "%'");
// Description. // Name.
String colName = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name, aliasCodeType); if (!StringUtil.IsBlank(prm.Name))
if (!StringUtil.IsEmpty(prm.Desc)) filter.Add($"{colName}='{DbQuery.FormatForCondition(prm.Name)}'");
filter.Add(colName + "='" + DbQuery.FormatForCondition(prm.Desc) + "'"); else if (!StringUtil.IsBlank(prm.NamePartial))
else if (!StringUtil.IsEmpty(prm.DescPartial)) filter.Add($"{colName} LIKE '%" + DbQuery.FormatForLike(prm.NamePartial) + "%'");
filter.Add(colName + " LIKE '%" + DbQuery.FormatForLike(prm.DescPartial) + "%'");
// Status. // Status.
String colStatus = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Status, aliasCodeType);
if (prm.StatusCat == SaCodeType.StatusCat.ActiveOnly) if (prm.StatusCat == SaCodeType.StatusCat.ActiveOnly)
filter.Add(colStatus + " In ('" + SacsSystem.GetStatusCode(SaCodeType.CurrentStatus) + "')"); filter.Add($"{colStatus} In ('{SacsSystem.GetStatusCode(SaCodeType.CurrentStatus)}')");
else if (prm.StatusCat == SaCodeType.StatusCat.NotDeleted)
filter.Add($"{colStatus} Not In ('{SacsSystem.GetStatusCode(SaStatus.Deleted)}')");
else if (prm.StatusCat == SaCodeType.StatusCat.DeletedOnly)
filter.Add($"{colStatus} In ('{SacsSystem.GetStatusCode(SaStatus.Deleted)}')");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1"); if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter; return filter;
} }
// CodeType sort columns.
public List<String> GetCodeTypeSortColumns (SaCodeType.Params prm) // Item sort columns.
public List<String> GetCodeTypeSortColumns(SaCodeType.Params prm)
{ {
// Sort sequence: // Sort sequence:
List<String> sortColumnNames = new List<String>(); List<String> sortColumnNames = new List<String>();
@@ -428,12 +449,12 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item count. // Item count.
private long GetCodeTypeCount (String filter) private long GetCodeTypeCount(String filter)
{ {
ClearErrorState(); ClearErrorState();
return Database.GetRowCount(TableName_CodeType + " As " + aliasCodeType, filter); return Database.GetRowCount(TableName_CodeType + " As " + aliasCodeType, filter);
} }
public override long GetCodeTypeCount (SaCodeType.Params prm) public override long GetCodeTypeCount(SaCodeType.Params prm)
{ {
ClearErrorState(); ClearErrorState();
return GetCodeTypeCount(GetCodeTypeQueryFilter(prm).Concat(" AND ", "(", ")")); return GetCodeTypeCount(GetCodeTypeQueryFilter(prm).Concat(" AND ", "(", ")"));
@@ -441,7 +462,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item list. // Item list.
private DbQuery CreateCodeTypeQuery (SaCodeType.Params prm) private DbQuery CreateCodeTypeQuery(SaCodeType.Params prm)
{ {
DbQuery qry = new DbQuery(Database.DbmsType); DbQuery qry = new DbQuery(Database.DbmsType);
qry.Tables.Add(TableName_CodeType, aliasCodeType); qry.Tables.Add(TableName_CodeType, aliasCodeType);
@@ -451,7 +472,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
qry.OrderBy.AddRange(GetCodeTypeSortColumns(prm)); qry.OrderBy.AddRange(GetCodeTypeSortColumns(prm));
return qry; return qry;
} }
public override List<SaCodeType> GetCodeTypeList (SaCodeType.Params prm) public override List<SaCodeType> GetCodeTypeList(SaCodeType.Params prm)
{ {
ClearErrorState(); ClearErrorState();
List<SaCodeType> codeTypes = new List<SaCodeType>(); List<SaCodeType> codeTypes = new List<SaCodeType>();
@@ -477,7 +498,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
} }
return codeTypes; return codeTypes;
} }
public override async Task<List<SaCodeType>> GetCodeTypeListAsync (SaCodeType.Params prm) public override async Task<List<SaCodeType>> GetCodeTypeListAsync(SaCodeType.Params prm)
{ {
List<SaCodeType> codeTypes = new List<SaCodeType>(); List<SaCodeType> codeTypes = new List<SaCodeType>();
DbQuery qry = CreateCodeTypeQuery(prm); DbQuery qry = CreateCodeTypeQuery(prm);
@@ -505,19 +526,19 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item query. // Item query.
public override DbResultSet ExecuteCodeTypeQuery (List<ColumnDfn> columns, SaCodeType.Params prm) public override DbResultSet ExecuteCodeTypeQuery(List<ColumnDfn> columns, SaCodeType.Params prm)
{ {
ClearErrorState(); ClearErrorState();
DbQuery query = CompileCodeTypeQuery (columns, prm); DbQuery query = CompileCodeTypeQuery(columns, prm);
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
} }
public override async Task<DbResultSet> ExecuteCodeTypeQueryAsync (List<ColumnDfn> columns, SaCodeType.Params prm) public override async Task<DbResultSet> ExecuteCodeTypeQueryAsync(List<ColumnDfn> columns, SaCodeType.Params prm)
{ {
ClearErrorState(); ClearErrorState();
DbQuery query = CompileCodeTypeQuery (columns, prm); DbQuery query = CompileCodeTypeQuery(columns, prm);
return await DbResultSet_DataReader.ExecuteQueryAsync(Database, query.BuildQuery(prm.ResultsPaging)); return await DbResultSet_DataReader.ExecuteQueryAsync(Database, query.BuildQuery(prm.ResultsPaging));
} }
private DbQuery CompileCodeTypeQuery (List<ColumnDfn> columns, SaCodeType.Params prm) private DbQuery CompileCodeTypeQuery(List<ColumnDfn> columns, SaCodeType.Params prm)
{ {
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Construct query. // Construct query.
@@ -529,7 +550,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id, aliasCodeType)); query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id, aliasCodeType));
if (columns.HasId((int)SaCodeType.Column.Code)) if (columns.HasId((int)SaCodeType.Column.Code))
query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, aliasCodeType)); query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, aliasCodeType));
if (columns.HasId((int)SaCodeType.Column.Description)) if (columns.HasId((int)SaCodeType.Column.Name))
query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name, aliasCodeType)); query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name, aliasCodeType));
if (columns.HasId((int)SaCodeType.Column.MaxCodeLen)) if (columns.HasId((int)SaCodeType.Column.MaxCodeLen))
query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_MaxCodeLen, aliasCodeType)); query.Columns.Add(SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_MaxCodeLen, aliasCodeType));
@@ -566,7 +587,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
// Filter and sort sequence. // Filter and sort sequence.
query.Filters.AddRange(GetCodeTypeQueryFilter(prm)); query.Filters.AddRange(GetCodeTypeQueryFilter(prm));
if (prm.IncludedIds.Count != 1) if (prm.IdsIncluded.Count != 1)
{ {
// Configure sort sequence. // Configure sort sequence.
foreach (String sortColumn in GetCodeTypeSortColumns(prm)) foreach (String sortColumn in GetCodeTypeSortColumns(prm))
@@ -580,19 +601,19 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
// C o d e s // C o d e s
//******************************************************************* //*******************************************************************
// Create Item. // Create Item.
public override SaCode CreateCode (SysId codeTypeId, String code) public override SaCode CreateCode(SysId codeTypeId, String code)
{ {
ClearErrorState(); ClearErrorState();
return new SaCode_Dbas(null, codeTypeId, code, 0); return new SaCode_Dbas(null, codeTypeId, code, 0);
} }
public SaCode CreateCode (SaCode_Db dbCode) public SaCode CreateCode(SaCode_Db dbCode)
{ {
ClearErrorState(); ClearErrorState();
SaCode saCode = new SaCode_Dbas(new SysId(dbCode._Id), new SysId(dbCode._CodeTypeId), dbCode._Code, (ushort)dbCode._Flags); SaCode saCode = new SaCode_Dbas(new SysId(dbCode._Id), new SysId(dbCode._CodeTypeId), dbCode._Code, (ushort)dbCode._Flags);
PopulateFrom(dbCode, saCode); PopulateFrom(dbCode, saCode);
return saCode; return saCode;
} }
private SaCode CreateCode (DbDataReader dataReader) private SaCode CreateCode(DbDataReader dataReader)
{ {
SaCode_Db dbCode = new SaCode_Db(DbInfo); SaCode_Db dbCode = new SaCode_Db(DbInfo);
dbCode.PopulateFrom(dataReader); dbCode.PopulateFrom(dataReader);
@@ -601,7 +622,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item exists. // Item exists.
public override bool CodeExistsById (SysId id) public override bool CodeExistsById(SysId id)
{ {
ClearErrorState(); ClearErrorState();
if (!SysId.IsValid(id)) return false; if (!SysId.IsValid(id)) return false;
@@ -610,7 +631,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Get Item. // Get Item.
private SaCode GetCode (String filter) private SaCode GetCode(String filter)
{ {
ClearErrorState(); ClearErrorState();
if (GetCodeCount(filter) != 1) return null; if (GetCodeCount(filter) != 1) return null;
@@ -634,18 +655,18 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
} }
return code; return code;
} }
public override SaCode GetCode (SaCode.Params prmCode) public override SaCode GetCode(SaCode.Params prmCode)
{ {
ClearErrorState(); ClearErrorState();
return GetCode(GetCodeQueryFilter(prmCode).Concat(" And ", "(", ")")); return GetCode(GetCodeQueryFilter(prmCode).Concat(" And ", "(", ")"));
} }
public override SaCode GetCodeById (SysId id) public override SaCode GetCodeById(SysId id)
{ {
ClearErrorState(); ClearErrorState();
if (!SysId.IsValid(id)) return null; if (!SysId.IsValid(id)) return null;
return GetCode("Id=" + SysId.ToString(id)); return GetCode("Id=" + SysId.ToString(id));
} }
public override SaCode GetCodeByCodeTypeCode (String codeTypeCode, String code) public override SaCode GetCodeByCodeTypeCode(String codeTypeCode, String code)
{ {
ClearErrorState(); ClearErrorState();
if (StringUtil.IsEmpty(codeTypeCode) || StringUtil.IsEmpty(code)) return null; if (StringUtil.IsEmpty(codeTypeCode) || StringUtil.IsEmpty(code)) return null;
@@ -658,7 +679,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Validate Item properties. // Validate Item properties.
public override bool IsValidCodeData (SaCode.Data codeData, SaCode.ErrField errField) public override bool IsValidCodeData(SaCode.Data codeData, SaCode.ErrField errField)
{ {
ClearErrorState(); ClearErrorState();
if (!base.IsValidCodeData(codeData, errField)) return false; if (!base.IsValidCodeData(codeData, errField)) return false;
@@ -667,7 +688,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Insert Item. // Insert Item.
public override bool InsertCode (SaCode code, DbUpdateInfo dbUpdateInfo) public override bool InsertCode(SaCode code, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (!IsValidCode(code)) return false; if (!IsValidCode(code)) return false;
@@ -695,7 +716,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Update Item. // Update Item.
public override bool UpdateCode (SaCode code, DbUpdateInfo dbUpdateInfo) public override bool UpdateCode(SaCode code, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
if (!IsValidCode(code)) return false; if (!IsValidCode(code)) return false;
@@ -723,13 +744,13 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Delete Item. // Delete Item.
public override bool CodeCanBeDeleted (SaCode code) public override bool CodeCanBeDeleted(SaCode code)
{ {
ClearErrorState(); ClearErrorState();
if (!base.CodeCanBeDeleted(code)) return false; if (!base.CodeCanBeDeleted(code)) return false;
return true; return true;
} }
public override bool DeleteCode (SaCode code, DbUpdateInfo dbUpdateInfo) public override bool DeleteCode(SaCode code, DbUpdateInfo dbUpdateInfo)
{ {
ClearErrorState(); ClearErrorState();
using (var dbConnection = Database.CreateConnection()) using (var dbConnection = Database.CreateConnection())
@@ -753,7 +774,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Copy data properties to and from database. // Copy data properties to and from database.
private void PopulateTo (SaCode_Db dbCode, SaCode code, DbUpdateInfo dbUpdateInfo) private void PopulateTo(SaCode_Db dbCode, SaCode code, DbUpdateInfo dbUpdateInfo)
{ {
dbCode._CodeTypeId = SysId.ToInt(code.CodeTypeId); dbCode._CodeTypeId = SysId.ToInt(code.CodeTypeId);
dbCode._Code = code.Code; dbCode._Code = code.Code;
@@ -772,7 +793,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
dbCode._UpdateBy = dbUpdateInfo.UserId.ToInt(); dbCode._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbCode._UpdateHost = dbUpdateInfo.Host; dbCode._UpdateHost = dbUpdateInfo.Host;
} }
private void PopulateFrom (SaCode_Db dbCode, SaCode code) private void PopulateFrom(SaCode_Db dbCode, SaCode code)
{ {
//code.Id = new SysId(dbCode._Id); //code.Id = new SysId(dbCode._Id);
//code.CodeTypeId = new SysId(dbCode._CodeTypeId); //code.CodeTypeId = new SysId(dbCode._CodeTypeId);
@@ -800,7 +821,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
alias = aliasCode; alias = aliasCode;
col.Set(caption, width, (int)dbCol, prefix + SaCodeTypeDbDfn.GetColumnName(dbCol, false), SaCodeTypeDbDfn.GetColumnNameQual(dbCol, alias), dataType, align); col.Set(caption, width, (int)dbCol, prefix + SaCodeTypeDbDfn.GetColumnName(dbCol, false), SaCodeTypeDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
} }
public override ColumnDfn GetCodeColumnDfn (SaCode.Column columnId, string caption = "", int width = 0) public override ColumnDfn GetCodeColumnDfn(SaCode.Column columnId, string caption = "", int width = 0)
{ {
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width); ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId) switch (columnId)
@@ -818,7 +839,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
case SaCode.Column.CodeType_Code: case SaCode.Column.CodeType_Code:
SetCodeColDfn(columnDfn, "Code type", 80, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, ColumnAlignment.Center, DataValue.DataType.String, aliasCode_CodeType, colPrefixCode_CodeType); SetCodeColDfn(columnDfn, "Code type", 80, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code, ColumnAlignment.Center, DataValue.DataType.String, aliasCode_CodeType, colPrefixCode_CodeType);
break; break;
case SaCode.Column.CodeType_Desc: case SaCode.Column.CodeType_Name:
SetCodeColDfn(columnDfn, "Code type desc", 100, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasCode_CodeType, colPrefixCode_CodeType); SetCodeColDfn(columnDfn, "Code type desc", 100, SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasCode_CodeType, colPrefixCode_CodeType);
break; break;
// Properties. // Properties.
@@ -886,55 +907,74 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Query filter. // Query filter.
public override List<string> GetCodeQueryFilter (SaCode.Params prm) public override List<string> GetCodeQueryFilter(SaCode.Params prm)
{ {
List<String> filter = new List<String>(); List<String> filter = new List<String>();
String colId = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Id, aliasCode);
String colCodeTypeId = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_CodeTypeId, aliasCode);
String colCode = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Code, aliasCode);
String colDescription = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Description, aliasCode);
String colStatus = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Status, aliasCode);
String colNotes = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Notes, aliasCode);
// Force DBMS type. // Force DBMS type.
DbQuery qry = new DbQuery(Database.DbmsType); DbQuery qry = new DbQuery(Database.DbmsType);
// Code Id. // Code Id.
String colId = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Id, aliasCode); if (prm.IdsIncluded.HasValidIds())
String includedIds = prm.IncludedIds.Concat(","); filter.Add($"{colId} IN ({prm.IdsIncluded.Concat(",")})");
if (!includedIds.IsEmpty()) if (prm.IdsExcluded.HasValidIds())
filter.Add(colId + " IN (" + includedIds + ")"); filter.Add($"{colId} NOT IN ({prm.IdsExcluded.Concat(",")})");
String excludedIds = prm.ExcludedIds.Concat(",");
if (!excludedIds.IsEmpty()) // Generic search.
filter.Add(colId + " NOT IN (" + excludedIds + ")"); if (!StringUtil.IsBlank(prm.Search))
{
foreach (String search in Regex.Split(prm.Search, "[\\s,;\\-+]+"))
{
if (StringUtil.IsBlank(search)) continue;
String searchForLike = DbQuery.FormatForLike(search, true);
List<String> searchFilter = new List<string>();
searchFilter.Add($"{colCode} LIKE '%{searchForLike}%'");
searchFilter.Add($"{colDescription} LIKE '%{searchForLike}%'");
searchFilter.Add($"{colNotes} LIKE '%{searchForLike}%'");
filter.Add(searchFilter.Concat(" OR ", "(", ")"));
}
}
// Code Type. // Code Type.
String colCodeTypeId = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_CodeTypeId, aliasCode); if (prm.CodeTypeIds.HasValidIds())
if (prm.CodeTypeIds.Count > 0) filter.Add($"{colCodeTypeId} In ({prm.CodeTypeIds.Concat(",")})");
filter.Add(colCodeTypeId + " In (" + prm.CodeTypeIds.Concat(",") + ")"); if (prm.CodeTypeCodes.Any())
if (prm.CodeTypeCodes.Count > 0) filter.Add($"{colCodeTypeId} In (Select {SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id) + " From " + TableName_CodeType + " Where " + SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code)} In {DbQuery.FormatForIn(prm.CodeTypeCodes, true, false)})");
filter.Add(colCodeTypeId + " In (Select " + SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Id) + " From " + TableName_CodeType + " Where " + SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCodeType_Code) + " In " + DbQuery.FormatForIn(prm.CodeTypeCodes, true, false) + ")");
// Code. // Code.
String colCode = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Code, aliasCode); if (!StringUtil.IsBlank(prm.Code))
if (!StringUtil.IsEmpty(prm.Code)) filter.Add($"{colCode}='{DbQuery.FormatForCondition(prm.Code)}'");
filter.Add(colCode + "='" + DbQuery.FormatForCondition(prm.Code) + "'"); else if (!StringUtil.IsBlank(prm.CodePartial))
else if (!StringUtil.IsEmpty(prm.CodePartial)) filter.Add($"{colCode} LIKE '%{DbQuery.FormatForLike(prm.CodePartial)}%'");
filter.Add(colCode + " LIKE '%" + DbQuery.FormatForLike(prm.CodePartial) + "%'");
// Description. // Description.
String colDescription = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Description, aliasCode); if (!StringUtil.IsBlank(prm.Desc))
if (!StringUtil.IsEmpty(prm.Desc)) filter.Add($"{colDescription}='{DbQuery.FormatForCondition(prm.Desc)}'");
filter.Add(colDescription + "='" + DbQuery.FormatForCondition(prm.Desc) + "'"); else if (!StringUtil.IsBlank(prm.DescPartial))
else if (!StringUtil.IsEmpty(prm.DescPartial)) filter.Add($"{colDescription} LIKE '%{DbQuery.FormatForLike(prm.DescPartial)}%'");
filter.Add(colDescription + " LIKE '%" + DbQuery.FormatForLike(prm.DescPartial) + "%'");
// Status. // Status.
String colStatus = SaCodeTypeDbDfn.GetColumnNameQual(SaCodeTypeDbDfn.ColumnIdx.SaCode_Status, aliasCode);
if (prm.StatusCat == SaCode.StatusCat.ActiveOnly) if (prm.StatusCat == SaCode.StatusCat.ActiveOnly)
filter.Add(colStatus + " In ('" + SacsSystem.GetStatusCode(SaCode.ActiveStatus) + "')"); filter.Add($"{colStatus} In ('{SacsSystem.GetStatusCode(SaCode.ActiveStatus)}')");
else if (prm.StatusCat == SaCode.StatusCat.InactiveOnly) else if (prm.StatusCat == SaCode.StatusCat.InactiveOnly)
filter.Add(colStatus + " Not In ('" + SacsSystem.GetStatusCode(SaCode.ActiveStatus) + "')"); filter.Add($"{colStatus} Not In ('{SacsSystem.GetStatusCode(SaCode.ActiveStatus)}')");
else if (prm.StatusCat == SaCode.StatusCat.NotDeleted)
filter.Add($"{colStatus} Not In ('{SacsSystem.GetStatusCode(SaStatus.Deleted)}')");
else if (prm.StatusCat == SaCode.StatusCat.DeletedOnly)
filter.Add($"{colStatus} In ('{SacsSystem.GetStatusCode(SaStatus.Deleted)}')");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1"); if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter; return filter;
} }
// Sort columns. // Sort columns.
public List<String> GetCodeSortColumns (SaCode.Params prm) public List<String> GetCodeSortColumns(SaCode.Params prm)
{ {
// Sort sequence. // Sort sequence.
List<String> sortColumnNames = new List<String>(); List<String> sortColumnNames = new List<String>();
@@ -972,12 +1012,12 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item count. // Item count.
private long GetCodeCount (String filter) private long GetCodeCount(String filter)
{ {
ClearErrorState(); ClearErrorState();
return Database.GetRowCount(TableName_Code + " As " + aliasCode, filter); return Database.GetRowCount(TableName_Code + " As " + aliasCode, filter);
} }
public override long GetCodeCount (SaCode.Params prm) public override long GetCodeCount(SaCode.Params prm)
{ {
ClearErrorState(); ClearErrorState();
return GetCodeCount(GetCodeQueryFilter(prm).Concat(" AND ", "(", ")")); return GetCodeCount(GetCodeQueryFilter(prm).Concat(" AND ", "(", ")"));
@@ -985,7 +1025,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item list. // Item list.
private DbQuery CreateCodeQuery (SaCode.Params prm) private DbQuery CreateCodeQuery(SaCode.Params prm)
{ {
DbQuery qry = new DbQuery(Database.DbmsType); DbQuery qry = new DbQuery(Database.DbmsType);
qry.Tables.Add(TableName_Code, aliasCode); qry.Tables.Add(TableName_Code, aliasCode);
@@ -995,7 +1035,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
qry.OrderBy.AddRange(GetCodeSortColumns(prm)); qry.OrderBy.AddRange(GetCodeSortColumns(prm));
return qry; return qry;
} }
public override List<SaCode> GetCodeList (SaCode.Params prm) public override List<SaCode> GetCodeList(SaCode.Params prm)
{ {
ClearErrorState(); ClearErrorState();
List<SaCode> codes = new List<SaCode>(); List<SaCode> codes = new List<SaCode>();
@@ -1022,7 +1062,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
} }
return codes; return codes;
} }
public override async Task<List<SaCode>> GetCodeListAsync (SaCode.Params prm) public override async Task<List<SaCode>> GetCodeListAsync(SaCode.Params prm)
{ {
List<SaCode> codes = new List<SaCode>(); List<SaCode> codes = new List<SaCode>();
DbQuery qry = CreateCodeQuery(prm); DbQuery qry = CreateCodeQuery(prm);
@@ -1051,19 +1091,19 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Item query. // Item query.
public override DbResultSet ExecuteCodeQuery (List<ColumnDfn> columns, SaCode.Params prm) public override DbResultSet ExecuteCodeQuery(List<ColumnDfn> columns, SaCode.Params prm)
{ {
ClearErrorState(); ClearErrorState();
DbQuery query = CompileCodeQuery (columns, prm); DbQuery query = CompileCodeQuery(columns, prm);
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging)); return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
} }
public override async Task<DbResultSet> ExecuteCodeQueryAsync (List<ColumnDfn> columns, SaCode.Params prm) public override async Task<DbResultSet> ExecuteCodeQueryAsync(List<ColumnDfn> columns, SaCode.Params prm)
{ {
ClearErrorState(); ClearErrorState();
DbQuery query = CompileCodeQuery (columns, prm); DbQuery query = CompileCodeQuery(columns, prm);
return await DbResultSet_DataReader.ExecuteQueryAsync(Database, query.BuildQuery(prm.ResultsPaging)); return await DbResultSet_DataReader.ExecuteQueryAsync(Database, query.BuildQuery(prm.ResultsPaging));
} }
private DbQuery CompileCodeQuery (List<ColumnDfn> columns, SaCode.Params prm) private DbQuery CompileCodeQuery(List<ColumnDfn> columns, SaCode.Params prm)
{ {
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Construct query. // Construct query.
@@ -1096,7 +1136,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Owner item. // Owner item.
if (columns.HasId((int)SaCode.Column.CodeType_Code) || columns.HasId((int)SaCode.Column.CodeType_Desc)) if (columns.HasId((int)SaCode.Column.CodeType_Code) || columns.HasId((int)SaCode.Column.CodeType_Name))
{ {
DbQueryJoin joinItmOwn = new DbQueryJoin(DbJoinType.LeftOuter); DbQueryJoin joinItmOwn = new DbQueryJoin(DbJoinType.LeftOuter);
joinItmOwn.Table = new StringPair(TableName_CodeType, aliasCode_CodeType); joinItmOwn.Table = new StringPair(TableName_CodeType, aliasCode_CodeType);
@@ -1109,7 +1149,7 @@ namespace Sarand.Net.Standard.Dbas.CodeTypes
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Filter and sort sequence. // Filter and sort sequence.
query.Filters.AddRange(GetCodeQueryFilter(prm)); query.Filters.AddRange(GetCodeQueryFilter(prm));
if (prm.IncludedIds.Count != 1) if (prm.IdsIncluded.Count != 1)
{ {
// Configure sort sequence. // Configure sort sequence.
foreach (String sortColumn in GetCodeSortColumns(prm)) foreach (String sortColumn in GetCodeSortColumns(prm))