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