v1.3.0 Restructure Saxonite workspace and upgrade to .NET 10 (#1)

Move Saxonite’s projects into a dedicated `Workspace` folder and align the solution with .NET 10 and the current Common workspace. Update encryption integration, test project structure and coverage, and repository guidance and upgrade notes.

- Relocate application and library projects while retaining Git rename history.
- Split tests into Admin, Online, and Shared projects; add representative behavioral and serialization tests.
- Update Common integration, application version, and repository documentation.

Application version: 1.3.0

Reviewed-on: #1
Co-authored-by: andy <andy@sarand.com>
This commit was merged in pull request #1.
This commit is contained in:
2026-10-16 18:24:16 +01:00
committed by andy
parent 2c3fb146ab
commit 9f22b522df
1996 changed files with 1992 additions and 1179 deletions
@@ -0,0 +1,127 @@
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Dbas.Base;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Base.App;
namespace Saxonite.Net.Standard.Dbas.App
{
//=======================================================================
public static class SaxDbDfnGenerator
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
/// <summary>
/// Generate database definitions.
/// </summary>
public static bool Generate(Sax.Database dbInstance, String connectionString)
{
String fn = nameof(SaxDbDfnGenerator) + ".Generate";
// Locate output folder:
String directory = GetOutputFolder(dbInstance);
if (String.IsNullOrEmpty(directory) || !FileUtil.IsDirectory(directory)) return false;
// Open database.
// NB Must be ODBC connection - especially to retrieve index columns.
SacsDatabaseConsole.OdbcConfig config = new SacsDatabaseConsole.OdbcConfig();
config.ConnectionString = connectionString;
SacsDatabase database = SacsDatabaseConsole.OpenOdbcDatabase(config);
// Generate database definition.
try
{
return GenerateDatabaseDefinition(dbInstance, database, directory);
}
catch (Exception exc)
{
SaLogger.Error(fn + " " + ExceptionUtil.GetErrorStateMessage(exc));
}
return false;
}
//-------------------------------------------------------------------
private static bool GenerateDatabaseDefinition(Sax.Database dbInstance, SacsDatabase database, String directory)
{
DatabaseDefinitionGenerator.Config config = new DatabaseDefinitionGenerator.Config()
{
SarandCommonVersion = DatabaseDefinitionGenerator.SarandCommonVersion.VS2019,
DotNetVersion = DatabaseDefinitionGenerator.DotNetVersion.Core3,
Database = database,
OutputDirectory = directory
};
// Schema - Tables.
config.Schema.Tables_Excluded.UnionWith(new String[] { });
// Schema - Columns.
config.Schema.InsertOnlyColumns.Add(".*", "CreateOn,CreateBy,CreateHost");
config.Schema.InsertOnlyColumns.Add("SomeOldTable", "Code");
// Database definition class.
config.DefinitionClass.Usings.Add("Sarand.Net.Standard.Base.Core");
config.DefinitionClass.Usings.Add("Sarand.Net.Standard.Base.Dbas");
config.DefinitionClass.Usings.Add("Sarand.Net.Standard.Base.Utils");
config.DefinitionClass.Namespace = "Saxonite.Base.App";
config.DefinitionClass.Classname = "SaxDbDfn_" + dbInstance.ToString();
// Table class.
config.TableClass.Usings.Add("Sarand.Net.Standard.Base.App");
config.TableClass.Usings.Add("Sarand.Net.Standard.Base.Core");
config.TableClass.Usings.Add("Sarand.Net.Standard.Base.Dbas");
config.TableClass.Usings.Add("Sarand.Net.Standard.Base.Utils");
config.TableClass.Namespace_BaseClass = "Saxonite.Net.Standard.Dbas.Data";
config.TableClass.Namespace = "Saxonite.Net.Standard.Dbas.Internal." + dbInstance.ToString();
config.TableClass.BaseClass = "SaxDbDataItem";
config.TableClass.ClassName_DatabaseInfo = "IDatabaseInfo";
config.TableClass.MandatoryConstructorDbInfo = true;
// Generate database definition.
DatabaseDefinitionGenerator generator = new DatabaseDefinitionGenerator();
return generator.Generate(config);
}
//-------------------------------------------------------------------
private static String GetOutputFolder(Sax.Database dbInstance)
{
String fn = nameof(SaxDbDfnGenerator) + ".GetOutputFolder";
var assembly = Assembly.GetAssembly(typeof(DatabaseDefinitionGenerator));
var assemblyLocation = assembly.Location;
String assemblyDirectory = FileUtil.GetParentDirectory(assemblyLocation);
String directory = assemblyDirectory;
SaLogger.Debug(fn + " Assembly folder: " + directory);
// Locate the parent of the 'Workspace' solution root folder.
String projectFolder = "Database";
while (!String.IsNullOrEmpty(directory))
{
if (FileUtil.IsDirectory(directory + Path.DirectorySeparatorChar + projectFolder))
{
break;
}
directory = FileUtil.GetParentDirectory(directory);
}
if (String.IsNullOrEmpty(directory))
{
SaLogger.Error(fn + " Failed to find '" + projectFolder + "' solution root folder in assembly path:\n\t" + assemblyDirectory);
return String.Empty;
}
// Code files are generated to '..\Dbas\Generated\Saxonite-[Instance]\' folder.
directory += Path.DirectorySeparatorChar + "Database" + Path.DirectorySeparatorChar + "Generated" + Path.DirectorySeparatorChar + "Saxonite-" + dbInstance.ToString();
SaLogger.Debug(fn + " Output folder: " + directory);
if (!FileUtil.ValidateDirectory(directory, true))
{
SaLogger.Error(fn + " Output folder not found:\n\n" + directory);
return String.Empty;
}
return directory;
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,54 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr;
using Saxonite.Net.Standard.Base.Mgr.Reference;
using Saxonite.Net.Standard.Base.Mgr.Support;
using Saxonite.Net.Standard.Dbas.Mgr;
using Saxonite.Net.Standard.Dbas.Mgr.Reference;
using Saxonite.Net.Standard.Dbas.Mgr.Support;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.App
{
//=======================================================================
public class SaxSystem_Dbas : SaxSystem
{
//-------------------------------------------------------------------
// Protected construction.
protected SaxSystem_Dbas()
{
}
//-------------------------------------------------------------------
// Business components.
//-------------------------------------------------------------------
public override SaxReferenceMgr CreateReferenceMgr(SaxSessionContext sessionContext, SaxInternals internals)
{
return new SaxReferenceMgr_Dbas(sessionContext, internals);
}
public override SaxAccountMgr CreateAccountMgr(SaxSessionContext sessionContext, SaxInternals internals)
{
return new SaxAccountMgr_Dbas(sessionContext, internals);
}
public override SaxActivityMgr CreateActivityMgr(SaxSessionContext sessionContext, SaxInternals internals)
{
return new SaxActivityMgr_Dbas(sessionContext, internals);
}
public override SaxItemDataMgr CreateItemDataMgr(SaxSessionContext sessionContext, SaxInternals internals)
{
return new SaxItemDataMgr_Dbas(sessionContext, internals);
}
public override SaxReferenceGolfMgr CreateReferenceGolfMgr(SaxSessionContext sessionContext, SaxInternals internals)
{
return new SaxReferenceGolfMgr_Dbas(sessionContext, internals);
}
public override SaxSupportMgr CreateSupportMgr(SaxSessionContext sessionContext, SaxInternals internals)
{
return new SaxSupportMgr_Dbas(sessionContext, internals);
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
namespace Saxonite.Net.Standard.Dbas.Bus.Reference
{
//=======================================================================
public class SaxGolfUsgaCountry_Dbas : SaxGolfUsgaCountry
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxGolfUsgaCountry_Dbas(ISacsDatabase database, SysId id, UInt16 flags) :
base(id)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
namespace Saxonite.Net.Standard.Dbas.Bus.Reference
{
//=======================================================================
public class SaxGolfUsgaCourse_Dbas : SaxGolfUsgaCourse
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxGolfUsgaCourse_Dbas(ISacsDatabase database, SysId id, SysId facilityId, UInt16 flags) :
base(id, facilityId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
namespace Saxonite.Net.Standard.Dbas.Bus.Reference
{
//=======================================================================
public class SaxGolfUsgaFacility_Dbas : SaxGolfUsgaFacility
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxGolfUsgaFacility_Dbas(ISacsDatabase database, SysId id, SysId provinceId, UInt16 flags) :
base(id, provinceId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
namespace Saxonite.Net.Standard.Dbas.Bus.Reference
{
//=======================================================================
public class SaxGolfUsgaMarker_Dbas : SaxGolfUsgaMarker
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxGolfUsgaMarker_Dbas(ISacsDatabase database, SysId id, SysId courseId, UInt16 flags) :
base(id, courseId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus.Reference;
using System;
namespace Saxonite.Net.Standard.Dbas.Bus.Reference
{
//=======================================================================
public class SaxGolfUsgaProvince_Dbas : SaxGolfUsgaProvince
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxGolfUsgaProvince_Dbas(ISacsDatabase database, SysId id, SysId countryId, UInt16 flags) :
base(id, countryId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,31 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxActivityFeedback_Dbas : SaxActivityFeedback
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxActivityFeedback_Dbas(ISacsDatabase database, ItemId itemId) :
base(itemId)
{
this.database = database;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxActivityIndex_Dbas : SaxActivityIndex
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxActivityIndex_Dbas(ISacsDatabase database, ItemId itemId, SysId sportId, SysId regionId, UInt16 flags) :
base(itemId, sportId, regionId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxArticle_Dbas : SaxArticle
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxArticle_Dbas(ISacsDatabase database, SysId id, SysId userAccountIdAuthor, SysId organisationId, UInt16 flags) :
base(id, userAccountIdAuthor, organisationId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxItemAddress_Dbas : SaxItemAddress
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxItemAddress_Dbas(ISacsDatabase database, SysId id, ItemId itemId, Sax.AddressType addressType, UInt16 flags) :
base(id, itemId, addressType)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxItemAssociation_Dbas : SaxItemAssociation
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxItemAssociation_Dbas(ISacsDatabase database, SysId id, ItemId itemIdFrom, ItemId itemIdTo, Sax.AssociationType associationType, UInt16 flags) :
base(id, itemIdFrom, itemIdTo, associationType)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxItemImage_Dbas : SaxItemImage
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxItemImage_Dbas (ISacsDatabase database, SysId id, ItemId itemId, Sax.ImageType ImageType, UInt16 flags) :
base(id, itemId, ImageType)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxItemSport_Dbas : SaxItemProcess
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxItemSport_Dbas (ISacsDatabase database, SysId id, ItemId itemId, SysId sportId, UInt16 flags) :
base(id, itemId, sportId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxOrganisationEvent_Dbas : SaxOrganisationEvent
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxOrganisationEvent_Dbas(ISacsDatabase database, SysId id, SysId organisationId, UInt16 flags) :
base(id, organisationId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxOrganisationOpportunity_Dbas : SaxOrganisationOpportunity
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxOrganisationOpportunity_Dbas(ISacsDatabase database, SysId id, SysId organisationId, UInt16 flags) :
base(id, organisationId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxOrganisation_Dbas : SaxOrganisation
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxOrganisation_Dbas (ISacsDatabase database, SysId id, UInt16 flags) :
base(id)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxRegion_Dbas : SaxRegion
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxRegion_Dbas (ISacsDatabase database, SysId id, UInt16 flags) :
base(id)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxSport_Dbas : SaxSport
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxSport_Dbas (ISacsDatabase database, SysId id, UInt16 flags) :
base(id)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserAccount_Dbas : SaxUserAccount
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserAccount_Dbas (ISacsDatabase database, SysId id, UInt16 flags) :
base(id)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserActivity_Dbas : SaxUserActivity
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserActivity_Dbas(ISacsDatabase database, SysId id, SysId userAccountId, ItemId itemId, UInt16 flags) :
base(id, userAccountId, itemId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserConfig_Dbas : SaxUserConfig
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserConfig_Dbas(ISacsDatabase database, SysId id, SysId userAccountId, Sax.UserConfigType configType, UInt16 flags) :
base(id, userAccountId, configType)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserEligibility_Dbas : SaxUserEligibility
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserEligibility_Dbas (ISacsDatabase database, SysId id, SysId userAccountId, SysId regionId, Sax.EligibilityType eligibilityType, UInt16 flags) :
base(id, userAccountId, regionId, eligibilityType)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserOnline_Dbas : SaxUserOnline
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserOnline_Dbas (ISacsDatabase database, SysId userAccountId) :
base(userAccountId)
{
this.database = database;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserOrganisation_Dbas : SaxUserOrganisation
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserOrganisation_Dbas (ISacsDatabase database, SysId id, SysId userAccountId, SysId organisationId, UInt16 flags) :
base(id, userAccountId, organisationId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserRole_Dbas : SaxUserRole
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserRole_Dbas (ISacsDatabase database, SysId id, SysId userAccountId, Sax.UserRole userRole, UInt16 flags) :
base(id, userAccountId, userRole)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserSession_Dbas : SaxUserSession
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserSession_Dbas(ISacsDatabase database, SysId userAccountId, UInt16 flags) :
base(userAccountId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserSportExperience_Dbas : SaxUserSportExperience
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserSportExperience_Dbas(ISacsDatabase database, SysId id, SysId userUserId, UInt16 flags) :
base(id, userUserId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,32 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus
{
//=======================================================================
public class SaxUserSport_Dbas : SaxUserSport
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserSport_Dbas(ISacsDatabase database, SysId id, SysId userAccountId, SysId sportId, UInt16 flags) :
base(id, userAccountId, sportId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,33 @@
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Support;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Bus.Support
{
//=======================================================================
public class SaxUserReport_Dbas : SaxUserReport
{
//-------------------------------------------------------------------
// Data members.
private ISacsDatabase database;
//-------------------------------------------------------------------
// Construction.
public SaxUserReport_Dbas(ISacsDatabase database, SysId id, SysId userAccountId, UInt16 flags) :
base(id, userAccountId)
{
this.database = database;
Flags = flags;
}
//-------------------------------------------------------------------
// Associated data.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,74 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using System;
using System.Collections.Generic;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
namespace Saxonite.Net.Standard.Dbas.Data
{
//=======================================================================
public abstract class SaxDbDataItem : DbDataItem
{
//-------------------------------------------------------------------
// Definitions.
/// <summary>
/// Database information - object supplied by main application.
/// <para>NB Application may have multiple databases with schema differences.</para>
/// <para>Each instance of a DbDataItem must be database specific.</para>
/// </summary>
public class SlmDatabaseInfo : IDatabaseInfo
{
// Data members.
private readonly List<DbDfnTable> tables;
private static readonly String defaultSchemaName = "dbo";
// Construction.
public SlmDatabaseInfo(String databaseName, List<DbDfnTable> tables)
{
this.DatabaseName = databaseName;
this.tables = tables;
}
// Properties.
public String DatabaseName { get; }
public String Context { get { return StringUtil.OnEmpty(DatabaseName, "UnknownDb"); } }
// Database schema.
public DbDfnTable GetTableDefinition(String schemaName, String tableName)
{
foreach (DbDfnTable table in tables.FindAll(item => item.Name.EqualsCI(tableName)))
{
if (StringUtil.OnEmpty(table.Schema, defaultSchemaName).EqualsCI(StringUtil.OnEmpty(schemaName, defaultSchemaName)))
return table;
}
return null;
}
public bool TableExists(String schemaName, String tableName)
{
return GetTableDefinition(schemaName, tableName) != null;
}
public bool ColumnExists(String schemaName, String tableName, String columnName)
{
DbDfnTable table = GetTableDefinition(schemaName, tableName);
if (table == null) return false;
return table.HasColumnByName(columnName);
}
public List<DbDfnColumn> GetColumnsForTable(String schemaName, String tableName)
{
DbDfnTable table = GetTableDefinition(schemaName, tableName);
if (table != null) return table.Columns;
return new List<DbDfnColumn>();
}
}
//-------------------------------------------------------------------
// Construction.
protected SaxDbDataItem(IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,187 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class ActivityFeedback_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
public ColumnDataInt64 _ItemId { get; } = new ColumnDataInt64("ItemId");
public ColumnDataInt64 _ViewCount { get; } = new ColumnDataInt64("ViewCount");
public ColumnDataInt64 _FeedbackCount { get; } = new ColumnDataInt64("FeedbackCount");
public ColumnDataInt64 _FeedbackTotal { get; } = new ColumnDataInt64("FeedbackTotal");
public ColumnDataDecimal _FeedbackAverage { get; } = new ColumnDataDecimal("FeedbackAverage");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"ItemType",
"ItemId",
"ViewCount",
"FeedbackCount",
"FeedbackTotal",
"FeedbackAverage",
"CreateOn",
"UpdateOn",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"ItemType",
"ItemId",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal ActivityFeedback_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "ActivityFeedback";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
public Int64 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
public Int64 _ViewCount { get { return Cols._ViewCount.Value; } set { Cols._ViewCount.Value = value; } }
public Int64 _FeedbackCount { get { return Cols._FeedbackCount.Value; } set { Cols._FeedbackCount.Value = value; } }
public Int64 _FeedbackTotal { get { return Cols._FeedbackTotal.Value; } set { Cols._FeedbackTotal.Value = value; } }
public Decimal _FeedbackAverage { get { return Cols._FeedbackAverage.Value; } set { Cols._FeedbackAverage.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
_ItemId = GetFieldInt64(dbDataReader, "ItemId", _ItemId);
_ViewCount = GetFieldInt64(dbDataReader, "ViewCount", _ViewCount);
_FeedbackCount = GetFieldInt64(dbDataReader, "FeedbackCount", _FeedbackCount);
_FeedbackTotal = GetFieldInt64(dbDataReader, "FeedbackTotal", _FeedbackTotal);
_FeedbackAverage = GetFieldDecimal(dbDataReader, "FeedbackAverage", _FeedbackAverage);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("ViewCount")) AddCommandParameter(dbCommand, "@ViewCount", _ViewCount);
if (columnNames.ContainsCI("FeedbackCount")) AddCommandParameter(dbCommand, "@FeedbackCount", _FeedbackCount);
if (columnNames.ContainsCI("FeedbackTotal")) AddCommandParameter(dbCommand, "@FeedbackTotal", _FeedbackTotal);
if (columnNames.ContainsCI("FeedbackAverage")) AddCommandParameter(dbCommand, "@FeedbackAverage", _FeedbackAverage);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
commandSuccess = true;
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE ItemType=@ItemType AND ItemId=@ItemId;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE ItemType=? AND ItemId=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ViewCount")) AddCommandParameter(dbCommand, "@ViewCount", _ViewCount);
if (columnNames.ContainsCI("FeedbackCount")) AddCommandParameter(dbCommand, "@FeedbackCount", _FeedbackCount);
if (columnNames.ContainsCI("FeedbackTotal")) AddCommandParameter(dbCommand, "@FeedbackTotal", _FeedbackTotal);
if (columnNames.ContainsCI("FeedbackAverage")) AddCommandParameter(dbCommand, "@FeedbackAverage", _FeedbackAverage);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
AddCommandParameter(dbCommand, "@ItemType", _ItemType);
AddCommandParameter(dbCommand, "@ItemId", _ItemId);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,244 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class ActivityIndex_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
public ColumnDataInt64 _ItemId { get; } = new ColumnDataInt64("ItemId");
public ColumnDataInt32 _SportId { get; } = new ColumnDataInt32("SportId");
public ColumnDataInt32 _RegionId { get; } = new ColumnDataInt32("RegionId");
public ColumnDataInt32Nullable _UserAccountIdOwner { get; } = new ColumnDataInt32Nullable("UserAccountIdOwner");
public ColumnDataInt32Nullable _OrganisationIdOwner { get; } = new ColumnDataInt32Nullable("OrganisationIdOwner");
public ColumnDataDateTime _EffectiveOn { get; } = new ColumnDataDateTime("EffectiveOn");
public ColumnDataDateTimeNullable _ExpiresOn { get; } = new ColumnDataDateTimeNullable("ExpiresOn");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"ItemType",
"ItemId",
"SportId",
"RegionId",
"UserAccountIdOwner",
"OrganisationIdOwner",
"EffectiveOn",
"ExpiresOn",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"ItemType",
"ItemId",
"SportId",
"RegionId",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"UserAccountIdOwner",
"OrganisationIdOwner",
"ExpiresOn",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal ActivityIndex_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "ActivityIndex";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
public Int64 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
public Int32 _SportId { get { return Cols._SportId.Value; } set { Cols._SportId.Value = value; } }
public Int32 _RegionId { get { return Cols._RegionId.Value; } set { Cols._RegionId.Value = value; } }
public Int32? _UserAccountIdOwner { get { return Cols._UserAccountIdOwner.Value; } set { Cols._UserAccountIdOwner.Value = value; } }
public Int32? _OrganisationIdOwner { get { return Cols._OrganisationIdOwner.Value; } set { Cols._OrganisationIdOwner.Value = value; } }
public DateTime _EffectiveOn { get { return Cols._EffectiveOn.Value; } set { Cols._EffectiveOn.Value = value; } }
public DateTime? _ExpiresOn { get { return Cols._ExpiresOn.Value; } set { Cols._ExpiresOn.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
_ItemId = GetFieldInt64(dbDataReader, "ItemId", _ItemId);
_SportId = GetFieldInt32(dbDataReader, "SportId", _SportId);
_RegionId = GetFieldInt32(dbDataReader, "RegionId", _RegionId);
_UserAccountIdOwner = GetFieldInt32Nullable(dbDataReader, "UserAccountIdOwner", _UserAccountIdOwner);
_OrganisationIdOwner = GetFieldInt32Nullable(dbDataReader, "OrganisationIdOwner", _OrganisationIdOwner);
_EffectiveOn = GetFieldDateTime(dbDataReader, "EffectiveOn", _EffectiveOn);
_ExpiresOn = GetFieldDateTimeNullable(dbDataReader, "ExpiresOn", _ExpiresOn);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("SportId")) AddCommandParameter(dbCommand, "@SportId", _SportId);
if (columnNames.ContainsCI("RegionId")) AddCommandParameter(dbCommand, "@RegionId", _RegionId);
if (columnNames.ContainsCI("UserAccountIdOwner")) AddCommandParameter(dbCommand, "@UserAccountIdOwner", _UserAccountIdOwner);
if (columnNames.ContainsCI("OrganisationIdOwner")) AddCommandParameter(dbCommand, "@OrganisationIdOwner", _OrganisationIdOwner);
if (columnNames.ContainsCI("EffectiveOn")) AddCommandParameter(dbCommand, "@EffectiveOn", _EffectiveOn);
if (columnNames.ContainsCI("ExpiresOn")) AddCommandParameter(dbCommand, "@ExpiresOn", _ExpiresOn);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
commandSuccess = true;
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE ItemType=@ItemType AND ItemId=@ItemId AND SportId=@SportId AND RegionId=@RegionId;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE ItemType=? AND ItemId=? AND SportId=? AND RegionId=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountIdOwner")) AddCommandParameter(dbCommand, "@UserAccountIdOwner", _UserAccountIdOwner);
if (columnNames.ContainsCI("OrganisationIdOwner")) AddCommandParameter(dbCommand, "@OrganisationIdOwner", _OrganisationIdOwner);
if (columnNames.ContainsCI("EffectiveOn")) AddCommandParameter(dbCommand, "@EffectiveOn", _EffectiveOn);
if (columnNames.ContainsCI("ExpiresOn")) AddCommandParameter(dbCommand, "@ExpiresOn", _ExpiresOn);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@ItemType", _ItemType);
AddCommandParameter(dbCommand, "@ItemId", _ItemId);
AddCommandParameter(dbCommand, "@SportId", _SportId);
AddCommandParameter(dbCommand, "@RegionId", _RegionId);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,259 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class Article_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataInt32 _UserAccountIdAuthor { get; } = new ColumnDataInt32("UserAccountIdAuthor");
public ColumnDataInt32 _OrganisationId { get; } = new ColumnDataInt32("OrganisationId");
public ColumnDataInt32 _SportIdPrimary { get; } = new ColumnDataInt32("SportIdPrimary");
public ColumnDataInt32 _RegionIdPrimary { get; } = new ColumnDataInt32("RegionIdPrimary");
public ColumnDataString _Headline { get; } = new ColumnDataString("Headline");
public ColumnDataString _Summary { get; } = new ColumnDataString("Summary");
public ColumnDataInt32Nullable _ItemImageIdThumbnail { get; } = new ColumnDataInt32Nullable("ItemImageIdThumbnail");
public ColumnDataString _BodyData { get; } = new ColumnDataString("BodyData");
public ColumnDataDateTimeNullable _PublishedAt { get; } = new ColumnDataDateTimeNullable("PublishedAt");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountIdAuthor",
"OrganisationId",
"SportIdPrimary",
"RegionIdPrimary",
"Headline",
"Summary",
"ItemImageIdThumbnail",
"BodyData",
"PublishedAt",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"ItemImageIdThumbnail",
"PublishedAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Article_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "Article";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountIdAuthor { get { return Cols._UserAccountIdAuthor.Value; } set { Cols._UserAccountIdAuthor.Value = value; } }
public Int32 _OrganisationId { get { return Cols._OrganisationId.Value; } set { Cols._OrganisationId.Value = value; } }
public Int32 _SportIdPrimary { get { return Cols._SportIdPrimary.Value; } set { Cols._SportIdPrimary.Value = value; } }
public Int32 _RegionIdPrimary { get { return Cols._RegionIdPrimary.Value; } set { Cols._RegionIdPrimary.Value = value; } }
public String _Headline { get { return Cols._Headline.Value; } set { Cols._Headline.Value = value; } }
public String _Summary { get { return Cols._Summary.Value; } set { Cols._Summary.Value = value; } }
public Int32? _ItemImageIdThumbnail { get { return Cols._ItemImageIdThumbnail.Value; } set { Cols._ItemImageIdThumbnail.Value = value; } }
public String _BodyData { get { return Cols._BodyData.Value; } set { Cols._BodyData.Value = value; } }
public DateTime? _PublishedAt { get { return Cols._PublishedAt.Value; } set { Cols._PublishedAt.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_UserAccountIdAuthor = GetFieldInt32(dbDataReader, "UserAccountIdAuthor", _UserAccountIdAuthor);
_OrganisationId = GetFieldInt32(dbDataReader, "OrganisationId", _OrganisationId);
_SportIdPrimary = GetFieldInt32(dbDataReader, "SportIdPrimary", _SportIdPrimary);
_RegionIdPrimary = GetFieldInt32(dbDataReader, "RegionIdPrimary", _RegionIdPrimary);
_Headline = GetFieldString(dbDataReader, "Headline", _Headline);
_Summary = GetFieldString(dbDataReader, "Summary", _Summary);
_ItemImageIdThumbnail = GetFieldInt32Nullable(dbDataReader, "ItemImageIdThumbnail", _ItemImageIdThumbnail);
_BodyData = GetFieldString(dbDataReader, "BodyData", _BodyData);
_PublishedAt = GetFieldDateTimeNullable(dbDataReader, "PublishedAt", _PublishedAt);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountIdAuthor")) AddCommandParameter(dbCommand, "@UserAccountIdAuthor", _UserAccountIdAuthor);
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdPrimary")) AddCommandParameter(dbCommand, "@RegionIdPrimary", _RegionIdPrimary);
if (columnNames.ContainsCI("Headline")) AddCommandParameter(dbCommand, "@Headline", _Headline);
if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("ItemImageIdThumbnail")) AddCommandParameter(dbCommand, "@ItemImageIdThumbnail", _ItemImageIdThumbnail);
if (columnNames.ContainsCI("BodyData")) AddCommandParameter(dbCommand, "@BodyData", _BodyData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountIdAuthor")) AddCommandParameter(dbCommand, "@UserAccountIdAuthor", _UserAccountIdAuthor);
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdPrimary")) AddCommandParameter(dbCommand, "@RegionIdPrimary", _RegionIdPrimary);
if (columnNames.ContainsCI("Headline")) AddCommandParameter(dbCommand, "@Headline", _Headline);
if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("ItemImageIdThumbnail")) AddCommandParameter(dbCommand, "@ItemImageIdThumbnail", _ItemImageIdThumbnail);
if (columnNames.ContainsCI("BodyData")) AddCommandParameter(dbCommand, "@BodyData", _BodyData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,339 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class ItemAddress_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
public ColumnDataInt32 _ItemId { get; } = new ColumnDataInt32("ItemId");
public ColumnDataInt16 _AddressType { get; } = new ColumnDataInt16("AddressType");
public ColumnDataString _Caption { get; } = new ColumnDataString("Caption");
public ColumnDataString _Line1 { get; } = new ColumnDataString("Line1");
public ColumnDataString _Line2 { get; } = new ColumnDataString("Line2");
public ColumnDataString _Line3 { get; } = new ColumnDataString("Line3");
public ColumnDataString _Town { get; } = new ColumnDataString("Town");
public ColumnDataString _Province { get; } = new ColumnDataString("Province");
public ColumnDataInt32 _RegionIdProvince { get; } = new ColumnDataInt32("RegionIdProvince");
public ColumnDataString _Country { get; } = new ColumnDataString("Country");
public ColumnDataInt32 _RegionIdCountry { get; } = new ColumnDataInt32("RegionIdCountry");
public ColumnDataString _PostalCode { get; } = new ColumnDataString("PostalCode");
public ColumnDataString _PhoneMain { get; } = new ColumnDataString("PhoneMain");
public ColumnDataString _LocationSource { get; } = new ColumnDataString("LocationSource");
public ColumnDataDateTimeNullable _LocationStoredAt { get; } = new ColumnDataDateTimeNullable("LocationStoredAt");
public ColumnDataBoolean _LocationUpdateRequired { get; } = new ColumnDataBoolean("LocationUpdateRequired");
public ColumnDataString _LocationData { get; } = new ColumnDataString("LocationData");
public ColumnDataString _LocationFormattedAddress { get; } = new ColumnDataString("LocationFormattedAddress");
public ColumnDataDecimalNullable _LocationLatitude { get; } = new ColumnDataDecimalNullable("LocationLatitude");
public ColumnDataDecimalNullable _LocationLongitude { get; } = new ColumnDataDecimalNullable("LocationLongitude");
public ColumnDataDecimalNullable _LocationAltitude { get; } = new ColumnDataDecimalNullable("LocationAltitude");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"ItemType",
"ItemId",
"AddressType",
"Caption",
"Line1",
"Line2",
"Line3",
"Town",
"Province",
"RegionIdProvince",
"Country",
"RegionIdCountry",
"PostalCode",
"PhoneMain",
"LocationSource",
"LocationStoredAt",
"LocationUpdateRequired",
"LocationData",
"LocationFormattedAddress",
"LocationLatitude",
"LocationLongitude",
"LocationAltitude",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"LocationStoredAt",
"LocationLatitude",
"LocationLongitude",
"LocationAltitude",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal ItemAddress_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "ItemAddress";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
public Int32 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
public Int16 _AddressType { get { return Cols._AddressType.Value; } set { Cols._AddressType.Value = value; } }
public String _Caption { get { return Cols._Caption.Value; } set { Cols._Caption.Value = value; } }
public String _Line1 { get { return Cols._Line1.Value; } set { Cols._Line1.Value = value; } }
public String _Line2 { get { return Cols._Line2.Value; } set { Cols._Line2.Value = value; } }
public String _Line3 { get { return Cols._Line3.Value; } set { Cols._Line3.Value = value; } }
public String _Town { get { return Cols._Town.Value; } set { Cols._Town.Value = value; } }
public String _Province { get { return Cols._Province.Value; } set { Cols._Province.Value = value; } }
public Int32 _RegionIdProvince { get { return Cols._RegionIdProvince.Value; } set { Cols._RegionIdProvince.Value = value; } }
public String _Country { get { return Cols._Country.Value; } set { Cols._Country.Value = value; } }
public Int32 _RegionIdCountry { get { return Cols._RegionIdCountry.Value; } set { Cols._RegionIdCountry.Value = value; } }
public String _PostalCode { get { return Cols._PostalCode.Value; } set { Cols._PostalCode.Value = value; } }
public String _PhoneMain { get { return Cols._PhoneMain.Value; } set { Cols._PhoneMain.Value = value; } }
public String _LocationSource { get { return Cols._LocationSource.Value; } set { Cols._LocationSource.Value = value; } }
public DateTime? _LocationStoredAt { get { return Cols._LocationStoredAt.Value; } set { Cols._LocationStoredAt.Value = value; } }
public Boolean _LocationUpdateRequired { get { return Cols._LocationUpdateRequired.Value; } set { Cols._LocationUpdateRequired.Value = value; } }
public String _LocationData { get { return Cols._LocationData.Value; } set { Cols._LocationData.Value = value; } }
public String _LocationFormattedAddress { get { return Cols._LocationFormattedAddress.Value; } set { Cols._LocationFormattedAddress.Value = value; } }
public Decimal? _LocationLatitude { get { return Cols._LocationLatitude.Value; } set { Cols._LocationLatitude.Value = value; } }
public Decimal? _LocationLongitude { get { return Cols._LocationLongitude.Value; } set { Cols._LocationLongitude.Value = value; } }
public Decimal? _LocationAltitude { get { return Cols._LocationAltitude.Value; } set { Cols._LocationAltitude.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
_ItemId = GetFieldInt32(dbDataReader, "ItemId", _ItemId);
_AddressType = GetFieldInt16(dbDataReader, "AddressType", _AddressType);
_Caption = GetFieldString(dbDataReader, "Caption", _Caption);
_Line1 = GetFieldString(dbDataReader, "Line1", _Line1);
_Line2 = GetFieldString(dbDataReader, "Line2", _Line2);
_Line3 = GetFieldString(dbDataReader, "Line3", _Line3);
_Town = GetFieldString(dbDataReader, "Town", _Town);
_Province = GetFieldString(dbDataReader, "Province", _Province);
_RegionIdProvince = GetFieldInt32(dbDataReader, "RegionIdProvince", _RegionIdProvince);
_Country = GetFieldString(dbDataReader, "Country", _Country);
_RegionIdCountry = GetFieldInt32(dbDataReader, "RegionIdCountry", _RegionIdCountry);
_PostalCode = GetFieldString(dbDataReader, "PostalCode", _PostalCode);
_PhoneMain = GetFieldString(dbDataReader, "PhoneMain", _PhoneMain);
_LocationSource = GetFieldString(dbDataReader, "LocationSource", _LocationSource);
_LocationStoredAt = GetFieldDateTimeNullable(dbDataReader, "LocationStoredAt", _LocationStoredAt);
_LocationUpdateRequired = GetFieldBoolean(dbDataReader, "LocationUpdateRequired", _LocationUpdateRequired);
_LocationData = GetFieldString(dbDataReader, "LocationData", _LocationData);
_LocationFormattedAddress = GetFieldString(dbDataReader, "LocationFormattedAddress", _LocationFormattedAddress);
_LocationLatitude = GetFieldDecimalNullable(dbDataReader, "LocationLatitude", _LocationLatitude);
_LocationLongitude = GetFieldDecimalNullable(dbDataReader, "LocationLongitude", _LocationLongitude);
_LocationAltitude = GetFieldDecimalNullable(dbDataReader, "LocationAltitude", _LocationAltitude);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("AddressType")) AddCommandParameter(dbCommand, "@AddressType", _AddressType);
if (columnNames.ContainsCI("Caption")) AddCommandParameter(dbCommand, "@Caption", _Caption);
if (columnNames.ContainsCI("Line1")) AddCommandParameter(dbCommand, "@Line1", _Line1);
if (columnNames.ContainsCI("Line2")) AddCommandParameter(dbCommand, "@Line2", _Line2);
if (columnNames.ContainsCI("Line3")) AddCommandParameter(dbCommand, "@Line3", _Line3);
if (columnNames.ContainsCI("Town")) AddCommandParameter(dbCommand, "@Town", _Town);
if (columnNames.ContainsCI("Province")) AddCommandParameter(dbCommand, "@Province", _Province);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("Country")) AddCommandParameter(dbCommand, "@Country", _Country);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("PostalCode")) AddCommandParameter(dbCommand, "@PostalCode", _PostalCode);
if (columnNames.ContainsCI("PhoneMain")) AddCommandParameter(dbCommand, "@PhoneMain", _PhoneMain);
if (columnNames.ContainsCI("LocationSource")) AddCommandParameter(dbCommand, "@LocationSource", _LocationSource);
if (columnNames.ContainsCI("LocationStoredAt")) AddCommandParameter(dbCommand, "@LocationStoredAt", _LocationStoredAt);
if (columnNames.ContainsCI("LocationUpdateRequired")) AddCommandParameter(dbCommand, "@LocationUpdateRequired", _LocationUpdateRequired);
if (columnNames.ContainsCI("LocationData")) AddCommandParameter(dbCommand, "@LocationData", _LocationData);
if (columnNames.ContainsCI("LocationFormattedAddress")) AddCommandParameter(dbCommand, "@LocationFormattedAddress", _LocationFormattedAddress);
if (columnNames.ContainsCI("LocationLatitude")) AddCommandParameter(dbCommand, "@LocationLatitude", _LocationLatitude);
if (columnNames.ContainsCI("LocationLongitude")) AddCommandParameter(dbCommand, "@LocationLongitude", _LocationLongitude);
if (columnNames.ContainsCI("LocationAltitude")) AddCommandParameter(dbCommand, "@LocationAltitude", _LocationAltitude);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("AddressType")) AddCommandParameter(dbCommand, "@AddressType", _AddressType);
if (columnNames.ContainsCI("Caption")) AddCommandParameter(dbCommand, "@Caption", _Caption);
if (columnNames.ContainsCI("Line1")) AddCommandParameter(dbCommand, "@Line1", _Line1);
if (columnNames.ContainsCI("Line2")) AddCommandParameter(dbCommand, "@Line2", _Line2);
if (columnNames.ContainsCI("Line3")) AddCommandParameter(dbCommand, "@Line3", _Line3);
if (columnNames.ContainsCI("Town")) AddCommandParameter(dbCommand, "@Town", _Town);
if (columnNames.ContainsCI("Province")) AddCommandParameter(dbCommand, "@Province", _Province);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("Country")) AddCommandParameter(dbCommand, "@Country", _Country);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("PostalCode")) AddCommandParameter(dbCommand, "@PostalCode", _PostalCode);
if (columnNames.ContainsCI("PhoneMain")) AddCommandParameter(dbCommand, "@PhoneMain", _PhoneMain);
if (columnNames.ContainsCI("LocationSource")) AddCommandParameter(dbCommand, "@LocationSource", _LocationSource);
if (columnNames.ContainsCI("LocationStoredAt")) AddCommandParameter(dbCommand, "@LocationStoredAt", _LocationStoredAt);
if (columnNames.ContainsCI("LocationUpdateRequired")) AddCommandParameter(dbCommand, "@LocationUpdateRequired", _LocationUpdateRequired);
if (columnNames.ContainsCI("LocationData")) AddCommandParameter(dbCommand, "@LocationData", _LocationData);
if (columnNames.ContainsCI("LocationFormattedAddress")) AddCommandParameter(dbCommand, "@LocationFormattedAddress", _LocationFormattedAddress);
if (columnNames.ContainsCI("LocationLatitude")) AddCommandParameter(dbCommand, "@LocationLatitude", _LocationLatitude);
if (columnNames.ContainsCI("LocationLongitude")) AddCommandParameter(dbCommand, "@LocationLongitude", _LocationLongitude);
if (columnNames.ContainsCI("LocationAltitude")) AddCommandParameter(dbCommand, "@LocationAltitude", _LocationAltitude);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,233 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class ItemAssociation_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt16 _ItemTypeFrom { get; } = new ColumnDataInt16("ItemTypeFrom");
public ColumnDataInt32 _ItemIdFrom { get; } = new ColumnDataInt32("ItemIdFrom");
public ColumnDataInt16 _ItemTypeTo { get; } = new ColumnDataInt16("ItemTypeTo");
public ColumnDataInt32 _ItemIdTo { get; } = new ColumnDataInt32("ItemIdTo");
public ColumnDataInt16 _AssociationType { get; } = new ColumnDataInt16("AssociationType");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"ItemTypeFrom",
"ItemIdFrom",
"ItemTypeTo",
"ItemIdTo",
"AssociationType",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal ItemAssociation_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "ItemAssociation";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int16 _ItemTypeFrom { get { return Cols._ItemTypeFrom.Value; } set { Cols._ItemTypeFrom.Value = value; } }
public Int32 _ItemIdFrom { get { return Cols._ItemIdFrom.Value; } set { Cols._ItemIdFrom.Value = value; } }
public Int16 _ItemTypeTo { get { return Cols._ItemTypeTo.Value; } set { Cols._ItemTypeTo.Value = value; } }
public Int32 _ItemIdTo { get { return Cols._ItemIdTo.Value; } set { Cols._ItemIdTo.Value = value; } }
public Int16 _AssociationType { get { return Cols._AssociationType.Value; } set { Cols._AssociationType.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_ItemTypeFrom = GetFieldInt16(dbDataReader, "ItemTypeFrom", _ItemTypeFrom);
_ItemIdFrom = GetFieldInt32(dbDataReader, "ItemIdFrom", _ItemIdFrom);
_ItemTypeTo = GetFieldInt16(dbDataReader, "ItemTypeTo", _ItemTypeTo);
_ItemIdTo = GetFieldInt32(dbDataReader, "ItemIdTo", _ItemIdTo);
_AssociationType = GetFieldInt16(dbDataReader, "AssociationType", _AssociationType);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemTypeFrom")) AddCommandParameter(dbCommand, "@ItemTypeFrom", _ItemTypeFrom);
if (columnNames.ContainsCI("ItemIdFrom")) AddCommandParameter(dbCommand, "@ItemIdFrom", _ItemIdFrom);
if (columnNames.ContainsCI("ItemTypeTo")) AddCommandParameter(dbCommand, "@ItemTypeTo", _ItemTypeTo);
if (columnNames.ContainsCI("ItemIdTo")) AddCommandParameter(dbCommand, "@ItemIdTo", _ItemIdTo);
if (columnNames.ContainsCI("AssociationType")) AddCommandParameter(dbCommand, "@AssociationType", _AssociationType);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemTypeFrom")) AddCommandParameter(dbCommand, "@ItemTypeFrom", _ItemTypeFrom);
if (columnNames.ContainsCI("ItemIdFrom")) AddCommandParameter(dbCommand, "@ItemIdFrom", _ItemIdFrom);
if (columnNames.ContainsCI("ItemTypeTo")) AddCommandParameter(dbCommand, "@ItemTypeTo", _ItemTypeTo);
if (columnNames.ContainsCI("ItemIdTo")) AddCommandParameter(dbCommand, "@ItemIdTo", _ItemIdTo);
if (columnNames.ContainsCI("AssociationType")) AddCommandParameter(dbCommand, "@AssociationType", _AssociationType);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,275 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class ItemImage_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
public ColumnDataInt32 _ItemId { get; } = new ColumnDataInt32("ItemId");
public ColumnDataInt16 _ImageType { get; } = new ColumnDataInt16("ImageType");
public ColumnDataByte _ImageSeq { get; } = new ColumnDataByte("ImageSeq");
public ColumnDataInt64 _SessionUid { get; } = new ColumnDataInt64("SessionUid");
public ColumnDataInt32 _ImageUid { get; } = new ColumnDataInt32("ImageUid");
public ColumnDataString _Filename { get; } = new ColumnDataString("Filename");
public ColumnDataString _Mime { get; } = new ColumnDataString("Mime");
public ColumnDataString _ContentType { get; } = new ColumnDataString("ContentType");
public ColumnDataInt32 _Width { get; } = new ColumnDataInt32("Width");
public ColumnDataInt32 _Height { get; } = new ColumnDataInt32("Height");
public ColumnDataByteArray _ImageData { get; } = new ColumnDataByteArray("ImageData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"ItemType",
"ItemId",
"ImageType",
"ImageSeq",
"SessionUid",
"ImageUid",
"Filename",
"Mime",
"ContentType",
"Width",
"Height",
"ImageData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal ItemImage_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "ItemImage";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
public Int32 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
public Int16 _ImageType { get { return Cols._ImageType.Value; } set { Cols._ImageType.Value = value; } }
public Byte _ImageSeq { get { return Cols._ImageSeq.Value; } set { Cols._ImageSeq.Value = value; } }
public Int64 _SessionUid { get { return Cols._SessionUid.Value; } set { Cols._SessionUid.Value = value; } }
public Int32 _ImageUid { get { return Cols._ImageUid.Value; } set { Cols._ImageUid.Value = value; } }
public String _Filename { get { return Cols._Filename.Value; } set { Cols._Filename.Value = value; } }
public String _Mime { get { return Cols._Mime.Value; } set { Cols._Mime.Value = value; } }
public String _ContentType { get { return Cols._ContentType.Value; } set { Cols._ContentType.Value = value; } }
public Int32 _Width { get { return Cols._Width.Value; } set { Cols._Width.Value = value; } }
public Int32 _Height { get { return Cols._Height.Value; } set { Cols._Height.Value = value; } }
public Byte[] _ImageData { get { return Cols._ImageData.Value; } set { Cols._ImageData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
_ItemId = GetFieldInt32(dbDataReader, "ItemId", _ItemId);
_ImageType = GetFieldInt16(dbDataReader, "ImageType", _ImageType);
_ImageSeq = GetFieldByte(dbDataReader, "ImageSeq", _ImageSeq);
_SessionUid = GetFieldInt64(dbDataReader, "SessionUid", _SessionUid);
_ImageUid = GetFieldInt32(dbDataReader, "ImageUid", _ImageUid);
_Filename = GetFieldString(dbDataReader, "Filename", _Filename);
_Mime = GetFieldString(dbDataReader, "Mime", _Mime);
_ContentType = GetFieldString(dbDataReader, "ContentType", _ContentType);
_Width = GetFieldInt32(dbDataReader, "Width", _Width);
_Height = GetFieldInt32(dbDataReader, "Height", _Height);
_ImageData = GetFieldByteArray(dbDataReader, "ImageData", _ImageData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("ImageType")) AddCommandParameter(dbCommand, "@ImageType", _ImageType);
if (columnNames.ContainsCI("ImageSeq")) AddCommandParameter(dbCommand, "@ImageSeq", _ImageSeq);
if (columnNames.ContainsCI("SessionUid")) AddCommandParameter(dbCommand, "@SessionUid", _SessionUid);
if (columnNames.ContainsCI("ImageUid")) AddCommandParameter(dbCommand, "@ImageUid", _ImageUid);
if (columnNames.ContainsCI("Filename")) AddCommandParameter(dbCommand, "@Filename", _Filename);
if (columnNames.ContainsCI("Mime")) AddCommandParameter(dbCommand, "@Mime", _Mime);
if (columnNames.ContainsCI("ContentType")) AddCommandParameter(dbCommand, "@ContentType", _ContentType);
if (columnNames.ContainsCI("Width")) AddCommandParameter(dbCommand, "@Width", _Width);
if (columnNames.ContainsCI("Height")) AddCommandParameter(dbCommand, "@Height", _Height);
if (columnNames.ContainsCI("ImageData")) AddCommandParameter(dbCommand, "@ImageData", _ImageData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("ImageType")) AddCommandParameter(dbCommand, "@ImageType", _ImageType);
if (columnNames.ContainsCI("ImageSeq")) AddCommandParameter(dbCommand, "@ImageSeq", _ImageSeq);
if (columnNames.ContainsCI("SessionUid")) AddCommandParameter(dbCommand, "@SessionUid", _SessionUid);
if (columnNames.ContainsCI("ImageUid")) AddCommandParameter(dbCommand, "@ImageUid", _ImageUid);
if (columnNames.ContainsCI("Filename")) AddCommandParameter(dbCommand, "@Filename", _Filename);
if (columnNames.ContainsCI("Mime")) AddCommandParameter(dbCommand, "@Mime", _Mime);
if (columnNames.ContainsCI("ContentType")) AddCommandParameter(dbCommand, "@ContentType", _ContentType);
if (columnNames.ContainsCI("Width")) AddCommandParameter(dbCommand, "@Width", _Width);
if (columnNames.ContainsCI("Height")) AddCommandParameter(dbCommand, "@Height", _Height);
if (columnNames.ContainsCI("ImageData")) AddCommandParameter(dbCommand, "@ImageData", _ImageData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,227 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class ItemSport_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
public ColumnDataInt32 _ItemId { get; } = new ColumnDataInt32("ItemId");
public ColumnDataInt32 _SportId { get; } = new ColumnDataInt32("SportId");
public ColumnDataString _ItemSportData { get; } = new ColumnDataString("ItemSportData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"ItemType",
"ItemId",
"SportId",
"ItemSportData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal ItemSport_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "ItemSport";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
public Int32 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
public Int32 _SportId { get { return Cols._SportId.Value; } set { Cols._SportId.Value = value; } }
public String _ItemSportData { get { return Cols._ItemSportData.Value; } set { Cols._ItemSportData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
_ItemId = GetFieldInt32(dbDataReader, "ItemId", _ItemId);
_SportId = GetFieldInt32(dbDataReader, "SportId", _SportId);
_ItemSportData = GetFieldString(dbDataReader, "ItemSportData", _ItemSportData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("SportId")) AddCommandParameter(dbCommand, "@SportId", _SportId);
if (columnNames.ContainsCI("ItemSportData")) AddCommandParameter(dbCommand, "@ItemSportData", _ItemSportData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("SportId")) AddCommandParameter(dbCommand, "@SportId", _SportId);
if (columnNames.ContainsCI("ItemSportData")) AddCommandParameter(dbCommand, "@ItemSportData", _ItemSportData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,272 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class OrganisationEvent_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataInt32 _OrganisationId { get; } = new ColumnDataInt32("OrganisationId");
public ColumnDataInt32 _SportIdPrimary { get; } = new ColumnDataInt32("SportIdPrimary");
public ColumnDataInt32 _RegionIdCountry { get; } = new ColumnDataInt32("RegionIdCountry");
public ColumnDataDateTime _EventAt { get; } = new ColumnDataDateTime("EventAt");
public ColumnDataDateTimeNullable _EventTo { get; } = new ColumnDataDateTimeNullable("EventTo");
public ColumnDataString _EventTypeCode { get; } = new ColumnDataString("EventTypeCode");
public ColumnDataString _Summary { get; } = new ColumnDataString("Summary");
public ColumnDataString _Details { get; } = new ColumnDataString("Details");
public ColumnDataString _EventData { get; } = new ColumnDataString("EventData");
public ColumnDataDateTimeNullable _PublishedAt { get; } = new ColumnDataDateTimeNullable("PublishedAt");
public ColumnDataDateTimeNullable _ExpiresAt { get; } = new ColumnDataDateTimeNullable("ExpiresAt");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"OrganisationId",
"SportIdPrimary",
"RegionIdCountry",
"EventAt",
"EventTo",
"EventTypeCode",
"Summary",
"Details",
"EventData",
"PublishedAt",
"ExpiresAt",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"EventTo",
"PublishedAt",
"ExpiresAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal OrganisationEvent_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "OrganisationEvent";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _OrganisationId { get { return Cols._OrganisationId.Value; } set { Cols._OrganisationId.Value = value; } }
public Int32 _SportIdPrimary { get { return Cols._SportIdPrimary.Value; } set { Cols._SportIdPrimary.Value = value; } }
public Int32 _RegionIdCountry { get { return Cols._RegionIdCountry.Value; } set { Cols._RegionIdCountry.Value = value; } }
public DateTime _EventAt { get { return Cols._EventAt.Value; } set { Cols._EventAt.Value = value; } }
public DateTime? _EventTo { get { return Cols._EventTo.Value; } set { Cols._EventTo.Value = value; } }
public String _EventTypeCode { get { return Cols._EventTypeCode.Value; } set { Cols._EventTypeCode.Value = value; } }
public String _Summary { get { return Cols._Summary.Value; } set { Cols._Summary.Value = value; } }
public String _Details { get { return Cols._Details.Value; } set { Cols._Details.Value = value; } }
public String _EventData { get { return Cols._EventData.Value; } set { Cols._EventData.Value = value; } }
public DateTime? _PublishedAt { get { return Cols._PublishedAt.Value; } set { Cols._PublishedAt.Value = value; } }
public DateTime? _ExpiresAt { get { return Cols._ExpiresAt.Value; } set { Cols._ExpiresAt.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_OrganisationId = GetFieldInt32(dbDataReader, "OrganisationId", _OrganisationId);
_SportIdPrimary = GetFieldInt32(dbDataReader, "SportIdPrimary", _SportIdPrimary);
_RegionIdCountry = GetFieldInt32(dbDataReader, "RegionIdCountry", _RegionIdCountry);
_EventAt = GetFieldDateTime(dbDataReader, "EventAt", _EventAt);
_EventTo = GetFieldDateTimeNullable(dbDataReader, "EventTo", _EventTo);
_EventTypeCode = GetFieldString(dbDataReader, "EventTypeCode", _EventTypeCode);
_Summary = GetFieldString(dbDataReader, "Summary", _Summary);
_Details = GetFieldString(dbDataReader, "Details", _Details);
_EventData = GetFieldString(dbDataReader, "EventData", _EventData);
_PublishedAt = GetFieldDateTimeNullable(dbDataReader, "PublishedAt", _PublishedAt);
_ExpiresAt = GetFieldDateTimeNullable(dbDataReader, "ExpiresAt", _ExpiresAt);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt);
if (columnNames.ContainsCI("EventTo")) AddCommandParameter(dbCommand, "@EventTo", _EventTo);
if (columnNames.ContainsCI("EventTypeCode")) AddCommandParameter(dbCommand, "@EventTypeCode", _EventTypeCode);
if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("Details")) AddCommandParameter(dbCommand, "@Details", _Details);
if (columnNames.ContainsCI("EventData")) AddCommandParameter(dbCommand, "@EventData", _EventData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("EventAt")) AddCommandParameter(dbCommand, "@EventAt", _EventAt);
if (columnNames.ContainsCI("EventTo")) AddCommandParameter(dbCommand, "@EventTo", _EventTo);
if (columnNames.ContainsCI("EventTypeCode")) AddCommandParameter(dbCommand, "@EventTypeCode", _EventTypeCode);
if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("Details")) AddCommandParameter(dbCommand, "@Details", _Details);
if (columnNames.ContainsCI("EventData")) AddCommandParameter(dbCommand, "@EventData", _EventData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,259 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class OrganisationOpportunity_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataInt32 _OrganisationId { get; } = new ColumnDataInt32("OrganisationId");
public ColumnDataInt32 _SportIdPrimary { get; } = new ColumnDataInt32("SportIdPrimary");
public ColumnDataInt32 _RegionIdPrimary { get; } = new ColumnDataInt32("RegionIdPrimary");
public ColumnDataString _OpportunityTypeCode { get; } = new ColumnDataString("OpportunityTypeCode");
public ColumnDataString _Position { get; } = new ColumnDataString("Position");
public ColumnDataString _Outline { get; } = new ColumnDataString("Outline");
public ColumnDataString _OpportunityData { get; } = new ColumnDataString("OpportunityData");
public ColumnDataDateTimeNullable _PublishedAt { get; } = new ColumnDataDateTimeNullable("PublishedAt");
public ColumnDataDateTimeNullable _ExpiresAt { get; } = new ColumnDataDateTimeNullable("ExpiresAt");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"OrganisationId",
"SportIdPrimary",
"RegionIdPrimary",
"OpportunityTypeCode",
"Position",
"Outline",
"OpportunityData",
"PublishedAt",
"ExpiresAt",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"PublishedAt",
"ExpiresAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal OrganisationOpportunity_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "OrganisationOpportunity";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _OrganisationId { get { return Cols._OrganisationId.Value; } set { Cols._OrganisationId.Value = value; } }
public Int32 _SportIdPrimary { get { return Cols._SportIdPrimary.Value; } set { Cols._SportIdPrimary.Value = value; } }
public Int32 _RegionIdPrimary { get { return Cols._RegionIdPrimary.Value; } set { Cols._RegionIdPrimary.Value = value; } }
public String _OpportunityTypeCode { get { return Cols._OpportunityTypeCode.Value; } set { Cols._OpportunityTypeCode.Value = value; } }
public String _Position { get { return Cols._Position.Value; } set { Cols._Position.Value = value; } }
public String _Outline { get { return Cols._Outline.Value; } set { Cols._Outline.Value = value; } }
public String _OpportunityData { get { return Cols._OpportunityData.Value; } set { Cols._OpportunityData.Value = value; } }
public DateTime? _PublishedAt { get { return Cols._PublishedAt.Value; } set { Cols._PublishedAt.Value = value; } }
public DateTime? _ExpiresAt { get { return Cols._ExpiresAt.Value; } set { Cols._ExpiresAt.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_OrganisationId = GetFieldInt32(dbDataReader, "OrganisationId", _OrganisationId);
_SportIdPrimary = GetFieldInt32(dbDataReader, "SportIdPrimary", _SportIdPrimary);
_RegionIdPrimary = GetFieldInt32(dbDataReader, "RegionIdPrimary", _RegionIdPrimary);
_OpportunityTypeCode = GetFieldString(dbDataReader, "OpportunityTypeCode", _OpportunityTypeCode);
_Position = GetFieldString(dbDataReader, "Position", _Position);
_Outline = GetFieldString(dbDataReader, "Outline", _Outline);
_OpportunityData = GetFieldString(dbDataReader, "OpportunityData", _OpportunityData);
_PublishedAt = GetFieldDateTimeNullable(dbDataReader, "PublishedAt", _PublishedAt);
_ExpiresAt = GetFieldDateTimeNullable(dbDataReader, "ExpiresAt", _ExpiresAt);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdPrimary")) AddCommandParameter(dbCommand, "@RegionIdPrimary", _RegionIdPrimary);
if (columnNames.ContainsCI("OpportunityTypeCode")) AddCommandParameter(dbCommand, "@OpportunityTypeCode", _OpportunityTypeCode);
if (columnNames.ContainsCI("Position")) AddCommandParameter(dbCommand, "@Position", _Position);
if (columnNames.ContainsCI("Outline")) AddCommandParameter(dbCommand, "@Outline", _Outline);
if (columnNames.ContainsCI("OpportunityData")) AddCommandParameter(dbCommand, "@OpportunityData", _OpportunityData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdPrimary")) AddCommandParameter(dbCommand, "@RegionIdPrimary", _RegionIdPrimary);
if (columnNames.ContainsCI("OpportunityTypeCode")) AddCommandParameter(dbCommand, "@OpportunityTypeCode", _OpportunityTypeCode);
if (columnNames.ContainsCI("Position")) AddCommandParameter(dbCommand, "@Position", _Position);
if (columnNames.ContainsCI("Outline")) AddCommandParameter(dbCommand, "@Outline", _Outline);
if (columnNames.ContainsCI("OpportunityData")) AddCommandParameter(dbCommand, "@OpportunityData", _OpportunityData);
if (columnNames.ContainsCI("PublishedAt")) AddCommandParameter(dbCommand, "@PublishedAt", _PublishedAt);
if (columnNames.ContainsCI("ExpiresAt")) AddCommandParameter(dbCommand, "@ExpiresAt", _ExpiresAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,262 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class Organisation_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataString _Name { get; } = new ColumnDataString("Name");
public ColumnDataString _OrganisationType { get; } = new ColumnDataString("OrganisationType");
public ColumnDataString _OrganisationCategory { get; } = new ColumnDataString("OrganisationCategory");
public ColumnDataInt32Nullable _SportIdPrimary { get; } = new ColumnDataInt32Nullable("SportIdPrimary");
public ColumnDataInt32Nullable _RegionIdPrimary { get; } = new ColumnDataInt32Nullable("RegionIdPrimary");
public ColumnDataString _About { get; } = new ColumnDataString("About");
public ColumnDataString _Facilities { get; } = new ColumnDataString("Facilities");
public ColumnDataString _ContactData { get; } = new ColumnDataString("ContactData");
public ColumnDataString _CountryIso2Code { get; } = new ColumnDataString("CountryIso2Code");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"Name",
"OrganisationType",
"OrganisationCategory",
"SportIdPrimary",
"RegionIdPrimary",
"About",
"Facilities",
"ContactData",
"CountryIso2Code",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"SportIdPrimary",
"RegionIdPrimary",
"About",
"Facilities",
"ContactData",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Organisation_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "Organisation";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public String _Name { get { return Cols._Name.Value; } set { Cols._Name.Value = value; } }
public String _OrganisationType { get { return Cols._OrganisationType.Value; } set { Cols._OrganisationType.Value = value; } }
public String _OrganisationCategory { get { return Cols._OrganisationCategory.Value; } set { Cols._OrganisationCategory.Value = value; } }
public Int32? _SportIdPrimary { get { return Cols._SportIdPrimary.Value; } set { Cols._SportIdPrimary.Value = value; } }
public Int32? _RegionIdPrimary { get { return Cols._RegionIdPrimary.Value; } set { Cols._RegionIdPrimary.Value = value; } }
public String _About { get { return Cols._About.Value; } set { Cols._About.Value = value; } }
public String _Facilities { get { return Cols._Facilities.Value; } set { Cols._Facilities.Value = value; } }
public String _ContactData { get { return Cols._ContactData.Value; } set { Cols._ContactData.Value = value; } }
public String _CountryIso2Code { get { return Cols._CountryIso2Code.Value; } set { Cols._CountryIso2Code.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_Name = GetFieldString(dbDataReader, "Name", _Name);
_OrganisationType = GetFieldString(dbDataReader, "OrganisationType", _OrganisationType);
_OrganisationCategory = GetFieldString(dbDataReader, "OrganisationCategory", _OrganisationCategory);
_SportIdPrimary = GetFieldInt32Nullable(dbDataReader, "SportIdPrimary", _SportIdPrimary);
_RegionIdPrimary = GetFieldInt32Nullable(dbDataReader, "RegionIdPrimary", _RegionIdPrimary);
_About = GetFieldString(dbDataReader, "About", _About);
_Facilities = GetFieldString(dbDataReader, "Facilities", _Facilities);
_ContactData = GetFieldString(dbDataReader, "ContactData", _ContactData);
_CountryIso2Code = GetFieldString(dbDataReader, "CountryIso2Code", _CountryIso2Code);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
if (columnNames.ContainsCI("OrganisationType")) AddCommandParameter(dbCommand, "@OrganisationType", _OrganisationType);
if (columnNames.ContainsCI("OrganisationCategory")) AddCommandParameter(dbCommand, "@OrganisationCategory", _OrganisationCategory);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdPrimary")) AddCommandParameter(dbCommand, "@RegionIdPrimary", _RegionIdPrimary);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About);
if (columnNames.ContainsCI("Facilities")) AddCommandParameter(dbCommand, "@Facilities", _Facilities);
if (columnNames.ContainsCI("ContactData")) AddCommandParameter(dbCommand, "@ContactData", _ContactData);
if (columnNames.ContainsCI("CountryIso2Code")) AddCommandParameter(dbCommand, "@CountryIso2Code", _CountryIso2Code);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
if (columnNames.ContainsCI("OrganisationType")) AddCommandParameter(dbCommand, "@OrganisationType", _OrganisationType);
if (columnNames.ContainsCI("OrganisationCategory")) AddCommandParameter(dbCommand, "@OrganisationCategory", _OrganisationCategory);
if (columnNames.ContainsCI("SportIdPrimary")) AddCommandParameter(dbCommand, "@SportIdPrimary", _SportIdPrimary);
if (columnNames.ContainsCI("RegionIdPrimary")) AddCommandParameter(dbCommand, "@RegionIdPrimary", _RegionIdPrimary);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About);
if (columnNames.ContainsCI("Facilities")) AddCommandParameter(dbCommand, "@Facilities", _Facilities);
if (columnNames.ContainsCI("ContactData")) AddCommandParameter(dbCommand, "@ContactData", _ContactData);
if (columnNames.ContainsCI("CountryIso2Code")) AddCommandParameter(dbCommand, "@CountryIso2Code", _CountryIso2Code);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,241 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class Region_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataInt16 _RegionType { get; } = new ColumnDataInt16("RegionType");
public ColumnDataString _CountryIso2Code { get; } = new ColumnDataString("CountryIso2Code");
public ColumnDataString _Name { get; } = new ColumnDataString("Name");
public ColumnDataDecimalNullable _Latitude { get; } = new ColumnDataDecimalNullable("Latitude");
public ColumnDataDecimalNullable _Longitude { get; } = new ColumnDataDecimalNullable("Longitude");
public ColumnDataInt32 _RegionIdParent { get; } = new ColumnDataInt32("RegionIdParent");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"RegionType",
"CountryIso2Code",
"Name",
"Latitude",
"Longitude",
"RegionIdParent",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"Latitude",
"Longitude",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Region_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "Region";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int16 _RegionType { get { return Cols._RegionType.Value; } set { Cols._RegionType.Value = value; } }
public String _CountryIso2Code { get { return Cols._CountryIso2Code.Value; } set { Cols._CountryIso2Code.Value = value; } }
public String _Name { get { return Cols._Name.Value; } set { Cols._Name.Value = value; } }
public Decimal? _Latitude { get { return Cols._Latitude.Value; } set { Cols._Latitude.Value = value; } }
public Decimal? _Longitude { get { return Cols._Longitude.Value; } set { Cols._Longitude.Value = value; } }
public Int32 _RegionIdParent { get { return Cols._RegionIdParent.Value; } set { Cols._RegionIdParent.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_RegionType = GetFieldInt16(dbDataReader, "RegionType", _RegionType);
_CountryIso2Code = GetFieldString(dbDataReader, "CountryIso2Code", _CountryIso2Code);
_Name = GetFieldString(dbDataReader, "Name", _Name);
_Latitude = GetFieldDecimalNullable(dbDataReader, "Latitude", _Latitude);
_Longitude = GetFieldDecimalNullable(dbDataReader, "Longitude", _Longitude);
_RegionIdParent = GetFieldInt32(dbDataReader, "RegionIdParent", _RegionIdParent);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("RegionType")) AddCommandParameter(dbCommand, "@RegionType", _RegionType);
if (columnNames.ContainsCI("CountryIso2Code")) AddCommandParameter(dbCommand, "@CountryIso2Code", _CountryIso2Code);
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
if (columnNames.ContainsCI("Latitude")) AddCommandParameter(dbCommand, "@Latitude", _Latitude);
if (columnNames.ContainsCI("Longitude")) AddCommandParameter(dbCommand, "@Longitude", _Longitude);
if (columnNames.ContainsCI("RegionIdParent")) AddCommandParameter(dbCommand, "@RegionIdParent", _RegionIdParent);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("RegionType")) AddCommandParameter(dbCommand, "@RegionType", _RegionType);
if (columnNames.ContainsCI("CountryIso2Code")) AddCommandParameter(dbCommand, "@CountryIso2Code", _CountryIso2Code);
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
if (columnNames.ContainsCI("Latitude")) AddCommandParameter(dbCommand, "@Latitude", _Latitude);
if (columnNames.ContainsCI("Longitude")) AddCommandParameter(dbCommand, "@Longitude", _Longitude);
if (columnNames.ContainsCI("RegionIdParent")) AddCommandParameter(dbCommand, "@RegionIdParent", _RegionIdParent);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,230 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class Sport_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataInt16Nullable _Grouping { get; } = new ColumnDataInt16Nullable("Grouping");
public ColumnDataInt32Nullable _SportIdParent { get; } = new ColumnDataInt32Nullable("SportIdParent");
public ColumnDataString _Name { get; } = new ColumnDataString("Name");
public ColumnDataInt16Nullable _SpecialityLabel { get; } = new ColumnDataInt16Nullable("SpecialityLabel");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"Grouping",
"SportIdParent",
"Name",
"SpecialityLabel",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"Grouping",
"SportIdParent",
"SpecialityLabel",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Sport_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "Sport";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int16? _Grouping { get { return Cols._Grouping.Value; } set { Cols._Grouping.Value = value; } }
public Int32? _SportIdParent { get { return Cols._SportIdParent.Value; } set { Cols._SportIdParent.Value = value; } }
public String _Name { get { return Cols._Name.Value; } set { Cols._Name.Value = value; } }
public Int16? _SpecialityLabel { get { return Cols._SpecialityLabel.Value; } set { Cols._SpecialityLabel.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_Grouping = GetFieldInt16Nullable(dbDataReader, "Grouping", _Grouping);
_SportIdParent = GetFieldInt32Nullable(dbDataReader, "SportIdParent", _SportIdParent);
_Name = GetFieldString(dbDataReader, "Name", _Name);
_SpecialityLabel = GetFieldInt16Nullable(dbDataReader, "SpecialityLabel", _SpecialityLabel);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("Grouping")) AddCommandParameter(dbCommand, "@Grouping", _Grouping);
if (columnNames.ContainsCI("SportIdParent")) AddCommandParameter(dbCommand, "@SportIdParent", _SportIdParent);
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
if (columnNames.ContainsCI("SpecialityLabel")) AddCommandParameter(dbCommand, "@SpecialityLabel", _SpecialityLabel);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("Grouping")) AddCommandParameter(dbCommand, "@Grouping", _Grouping);
if (columnNames.ContainsCI("SportIdParent")) AddCommandParameter(dbCommand, "@SportIdParent", _SportIdParent);
if (columnNames.ContainsCI("Name")) AddCommandParameter(dbCommand, "@Name", _Name);
if (columnNames.ContainsCI("SpecialityLabel")) AddCommandParameter(dbCommand, "@SpecialityLabel", _SpecialityLabel);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,360 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserAccount_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _Id { get; } = new ColumnDataInt32("Id", true);
public ColumnDataString _EmailAddress { get; } = new ColumnDataString("EmailAddress");
public ColumnDataString _Title { get; } = new ColumnDataString("Title");
public ColumnDataString _FirstName { get; } = new ColumnDataString("FirstName");
public ColumnDataString _Initials { get; } = new ColumnDataString("Initials");
public ColumnDataString _LastName { get; } = new ColumnDataString("LastName");
public ColumnDataString _About { get; } = new ColumnDataString("About");
public ColumnDataString _PhoneMain { get; } = new ColumnDataString("PhoneMain");
public ColumnDataString _PhoneMobile { get; } = new ColumnDataString("PhoneMobile");
public ColumnDataString _PhoneAlt { get; } = new ColumnDataString("PhoneAlt");
public ColumnDataByteNullable _Gender { get; } = new ColumnDataByteNullable("Gender");
public ColumnDataString _GenderOther { get; } = new ColumnDataString("GenderOther");
public ColumnDataByteNullable _DateOfBirthDay { get; } = new ColumnDataByteNullable("DateOfBirthDay");
public ColumnDataByteNullable _DateOfBirthMonth { get; } = new ColumnDataByteNullable("DateOfBirthMonth");
public ColumnDataInt16Nullable _DateOfBirthYear { get; } = new ColumnDataInt16Nullable("DateOfBirthYear");
public ColumnDataInt32Nullable _RegionIdCountry { get; } = new ColumnDataInt32Nullable("RegionIdCountry");
public ColumnDataInt32Nullable _RegionIdProvince { get; } = new ColumnDataInt32Nullable("RegionIdProvince");
public ColumnDataString _JournalistData { get; } = new ColumnDataString("JournalistData");
public ColumnDataString _PasswordToken { get; } = new ColumnDataString("PasswordToken");
public ColumnDataString _PasswordHashed { get; } = new ColumnDataString("PasswordHashed");
public ColumnDataString _PasswordHistory { get; } = new ColumnDataString("PasswordHistory");
public ColumnDataDateTimeNullable _PasswordChangedAt { get; } = new ColumnDataDateTimeNullable("PasswordChangedAt");
public ColumnDataDateTimeNullable _LastLoginAt { get; } = new ColumnDataDateTimeNullable("LastLoginAt");
public ColumnDataDateTimeNullable _LastInvalidLoginAt { get; } = new ColumnDataDateTimeNullable("LastInvalidLoginAt");
public ColumnDataInt16 _InvalidLoginCount { get; } = new ColumnDataInt16("InvalidLoginCount");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"EmailAddress",
"Title",
"FirstName",
"Initials",
"LastName",
"About",
"PhoneMain",
"PhoneMobile",
"PhoneAlt",
"Gender",
"GenderOther",
"DateOfBirthDay",
"DateOfBirthMonth",
"DateOfBirthYear",
"RegionIdCountry",
"RegionIdProvince",
"JournalistData",
"PasswordToken",
"PasswordHashed",
"PasswordHistory",
"PasswordChangedAt",
"LastLoginAt",
"LastInvalidLoginAt",
"InvalidLoginCount",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"About",
"Gender",
"GenderOther",
"DateOfBirthDay",
"DateOfBirthMonth",
"DateOfBirthYear",
"RegionIdCountry",
"RegionIdProvince",
"JournalistData",
"PasswordToken",
"PasswordChangedAt",
"LastLoginAt",
"LastInvalidLoginAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserAccount_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserAccount";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public String _EmailAddress { get { return Cols._EmailAddress.Value; } set { Cols._EmailAddress.Value = value; } }
public String _Title { get { return Cols._Title.Value; } set { Cols._Title.Value = value; } }
public String _FirstName { get { return Cols._FirstName.Value; } set { Cols._FirstName.Value = value; } }
public String _Initials { get { return Cols._Initials.Value; } set { Cols._Initials.Value = value; } }
public String _LastName { get { return Cols._LastName.Value; } set { Cols._LastName.Value = value; } }
public String _About { get { return Cols._About.Value; } set { Cols._About.Value = value; } }
public String _PhoneMain { get { return Cols._PhoneMain.Value; } set { Cols._PhoneMain.Value = value; } }
public String _PhoneMobile { get { return Cols._PhoneMobile.Value; } set { Cols._PhoneMobile.Value = value; } }
public String _PhoneAlt { get { return Cols._PhoneAlt.Value; } set { Cols._PhoneAlt.Value = value; } }
public Byte? _Gender { get { return Cols._Gender.Value; } set { Cols._Gender.Value = value; } }
public String _GenderOther { get { return Cols._GenderOther.Value; } set { Cols._GenderOther.Value = value; } }
public Byte? _DateOfBirthDay { get { return Cols._DateOfBirthDay.Value; } set { Cols._DateOfBirthDay.Value = value; } }
public Byte? _DateOfBirthMonth { get { return Cols._DateOfBirthMonth.Value; } set { Cols._DateOfBirthMonth.Value = value; } }
public Int16? _DateOfBirthYear { get { return Cols._DateOfBirthYear.Value; } set { Cols._DateOfBirthYear.Value = value; } }
public Int32? _RegionIdCountry { get { return Cols._RegionIdCountry.Value; } set { Cols._RegionIdCountry.Value = value; } }
public Int32? _RegionIdProvince { get { return Cols._RegionIdProvince.Value; } set { Cols._RegionIdProvince.Value = value; } }
public String _JournalistData { get { return Cols._JournalistData.Value; } set { Cols._JournalistData.Value = value; } }
public String _PasswordToken { get { return Cols._PasswordToken.Value; } set { Cols._PasswordToken.Value = value; } }
public String _PasswordHashed { get { return Cols._PasswordHashed.Value; } set { Cols._PasswordHashed.Value = value; } }
public String _PasswordHistory { get { return Cols._PasswordHistory.Value; } set { Cols._PasswordHistory.Value = value; } }
public DateTime? _PasswordChangedAt { get { return Cols._PasswordChangedAt.Value; } set { Cols._PasswordChangedAt.Value = value; } }
public DateTime? _LastLoginAt { get { return Cols._LastLoginAt.Value; } set { Cols._LastLoginAt.Value = value; } }
public DateTime? _LastInvalidLoginAt { get { return Cols._LastInvalidLoginAt.Value; } set { Cols._LastInvalidLoginAt.Value = value; } }
public Int16 _InvalidLoginCount { get { return Cols._InvalidLoginCount.Value; } set { Cols._InvalidLoginCount.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt32(dbDataReader, "Id", _Id);
_EmailAddress = GetFieldString(dbDataReader, "EmailAddress", _EmailAddress);
_Title = GetFieldString(dbDataReader, "Title", _Title);
_FirstName = GetFieldString(dbDataReader, "FirstName", _FirstName);
_Initials = GetFieldString(dbDataReader, "Initials", _Initials);
_LastName = GetFieldString(dbDataReader, "LastName", _LastName);
_About = GetFieldString(dbDataReader, "About", _About);
_PhoneMain = GetFieldString(dbDataReader, "PhoneMain", _PhoneMain);
_PhoneMobile = GetFieldString(dbDataReader, "PhoneMobile", _PhoneMobile);
_PhoneAlt = GetFieldString(dbDataReader, "PhoneAlt", _PhoneAlt);
_Gender = GetFieldByteNullable(dbDataReader, "Gender", _Gender);
_GenderOther = GetFieldString(dbDataReader, "GenderOther", _GenderOther);
_DateOfBirthDay = GetFieldByteNullable(dbDataReader, "DateOfBirthDay", _DateOfBirthDay);
_DateOfBirthMonth = GetFieldByteNullable(dbDataReader, "DateOfBirthMonth", _DateOfBirthMonth);
_DateOfBirthYear = GetFieldInt16Nullable(dbDataReader, "DateOfBirthYear", _DateOfBirthYear);
_RegionIdCountry = GetFieldInt32Nullable(dbDataReader, "RegionIdCountry", _RegionIdCountry);
_RegionIdProvince = GetFieldInt32Nullable(dbDataReader, "RegionIdProvince", _RegionIdProvince);
_JournalistData = GetFieldString(dbDataReader, "JournalistData", _JournalistData);
_PasswordToken = GetFieldString(dbDataReader, "PasswordToken", _PasswordToken);
_PasswordHashed = GetFieldString(dbDataReader, "PasswordHashed", _PasswordHashed);
_PasswordHistory = GetFieldString(dbDataReader, "PasswordHistory", _PasswordHistory);
_PasswordChangedAt = GetFieldDateTimeNullable(dbDataReader, "PasswordChangedAt", _PasswordChangedAt);
_LastLoginAt = GetFieldDateTimeNullable(dbDataReader, "LastLoginAt", _LastLoginAt);
_LastInvalidLoginAt = GetFieldDateTimeNullable(dbDataReader, "LastInvalidLoginAt", _LastInvalidLoginAt);
_InvalidLoginCount = GetFieldInt16(dbDataReader, "InvalidLoginCount", _InvalidLoginCount);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("EmailAddress")) AddCommandParameter(dbCommand, "@EmailAddress", _EmailAddress);
if (columnNames.ContainsCI("Title")) AddCommandParameter(dbCommand, "@Title", _Title);
if (columnNames.ContainsCI("FirstName")) AddCommandParameter(dbCommand, "@FirstName", _FirstName);
if (columnNames.ContainsCI("Initials")) AddCommandParameter(dbCommand, "@Initials", _Initials);
if (columnNames.ContainsCI("LastName")) AddCommandParameter(dbCommand, "@LastName", _LastName);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About);
if (columnNames.ContainsCI("PhoneMain")) AddCommandParameter(dbCommand, "@PhoneMain", _PhoneMain);
if (columnNames.ContainsCI("PhoneMobile")) AddCommandParameter(dbCommand, "@PhoneMobile", _PhoneMobile);
if (columnNames.ContainsCI("PhoneAlt")) AddCommandParameter(dbCommand, "@PhoneAlt", _PhoneAlt);
if (columnNames.ContainsCI("Gender")) AddCommandParameter(dbCommand, "@Gender", _Gender);
if (columnNames.ContainsCI("GenderOther")) AddCommandParameter(dbCommand, "@GenderOther", _GenderOther);
if (columnNames.ContainsCI("DateOfBirthDay")) AddCommandParameter(dbCommand, "@DateOfBirthDay", _DateOfBirthDay);
if (columnNames.ContainsCI("DateOfBirthMonth")) AddCommandParameter(dbCommand, "@DateOfBirthMonth", _DateOfBirthMonth);
if (columnNames.ContainsCI("DateOfBirthYear")) AddCommandParameter(dbCommand, "@DateOfBirthYear", _DateOfBirthYear);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("JournalistData")) AddCommandParameter(dbCommand, "@JournalistData", _JournalistData);
if (columnNames.ContainsCI("PasswordToken")) AddCommandParameter(dbCommand, "@PasswordToken", _PasswordToken);
if (columnNames.ContainsCI("PasswordHashed")) AddCommandParameter(dbCommand, "@PasswordHashed", _PasswordHashed);
if (columnNames.ContainsCI("PasswordHistory")) AddCommandParameter(dbCommand, "@PasswordHistory", _PasswordHistory);
if (columnNames.ContainsCI("PasswordChangedAt")) AddCommandParameter(dbCommand, "@PasswordChangedAt", _PasswordChangedAt);
if (columnNames.ContainsCI("LastLoginAt")) AddCommandParameter(dbCommand, "@LastLoginAt", _LastLoginAt);
if (columnNames.ContainsCI("LastInvalidLoginAt")) AddCommandParameter(dbCommand, "@LastInvalidLoginAt", _LastInvalidLoginAt);
if (columnNames.ContainsCI("InvalidLoginCount")) AddCommandParameter(dbCommand, "@InvalidLoginCount", _InvalidLoginCount);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = (Int32)Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("EmailAddress")) AddCommandParameter(dbCommand, "@EmailAddress", _EmailAddress);
if (columnNames.ContainsCI("Title")) AddCommandParameter(dbCommand, "@Title", _Title);
if (columnNames.ContainsCI("FirstName")) AddCommandParameter(dbCommand, "@FirstName", _FirstName);
if (columnNames.ContainsCI("Initials")) AddCommandParameter(dbCommand, "@Initials", _Initials);
if (columnNames.ContainsCI("LastName")) AddCommandParameter(dbCommand, "@LastName", _LastName);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About);
if (columnNames.ContainsCI("PhoneMain")) AddCommandParameter(dbCommand, "@PhoneMain", _PhoneMain);
if (columnNames.ContainsCI("PhoneMobile")) AddCommandParameter(dbCommand, "@PhoneMobile", _PhoneMobile);
if (columnNames.ContainsCI("PhoneAlt")) AddCommandParameter(dbCommand, "@PhoneAlt", _PhoneAlt);
if (columnNames.ContainsCI("Gender")) AddCommandParameter(dbCommand, "@Gender", _Gender);
if (columnNames.ContainsCI("GenderOther")) AddCommandParameter(dbCommand, "@GenderOther", _GenderOther);
if (columnNames.ContainsCI("DateOfBirthDay")) AddCommandParameter(dbCommand, "@DateOfBirthDay", _DateOfBirthDay);
if (columnNames.ContainsCI("DateOfBirthMonth")) AddCommandParameter(dbCommand, "@DateOfBirthMonth", _DateOfBirthMonth);
if (columnNames.ContainsCI("DateOfBirthYear")) AddCommandParameter(dbCommand, "@DateOfBirthYear", _DateOfBirthYear);
if (columnNames.ContainsCI("RegionIdCountry")) AddCommandParameter(dbCommand, "@RegionIdCountry", _RegionIdCountry);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("JournalistData")) AddCommandParameter(dbCommand, "@JournalistData", _JournalistData);
if (columnNames.ContainsCI("PasswordToken")) AddCommandParameter(dbCommand, "@PasswordToken", _PasswordToken);
if (columnNames.ContainsCI("PasswordHashed")) AddCommandParameter(dbCommand, "@PasswordHashed", _PasswordHashed);
if (columnNames.ContainsCI("PasswordHistory")) AddCommandParameter(dbCommand, "@PasswordHistory", _PasswordHistory);
if (columnNames.ContainsCI("PasswordChangedAt")) AddCommandParameter(dbCommand, "@PasswordChangedAt", _PasswordChangedAt);
if (columnNames.ContainsCI("LastLoginAt")) AddCommandParameter(dbCommand, "@LastLoginAt", _LastLoginAt);
if (columnNames.ContainsCI("LastInvalidLoginAt")) AddCommandParameter(dbCommand, "@LastInvalidLoginAt", _LastInvalidLoginAt);
if (columnNames.ContainsCI("InvalidLoginCount")) AddCommandParameter(dbCommand, "@InvalidLoginCount", _InvalidLoginCount);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,280 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserActivity_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataInt16 _ItemType { get; } = new ColumnDataInt16("ItemType");
public ColumnDataInt64 _ItemId { get; } = new ColumnDataInt64("ItemId");
public ColumnDataBoolean _CurrentlyListed { get; } = new ColumnDataBoolean("CurrentlyListed");
public ColumnDataDateTime _ListedAtFirst { get; } = new ColumnDataDateTime("ListedAtFirst");
public ColumnDataDateTimeNullable _ListedAtLast { get; } = new ColumnDataDateTimeNullable("ListedAtLast");
public ColumnDataDateTimeNullable _ViewedAtFirst { get; } = new ColumnDataDateTimeNullable("ViewedAtFirst");
public ColumnDataDateTimeNullable _ViewedAtLast { get; } = new ColumnDataDateTimeNullable("ViewedAtLast");
public ColumnDataInt16 _Reaction { get; } = new ColumnDataInt16("Reaction");
public ColumnDataDateTimeNullable _ReactedAtFirst { get; } = new ColumnDataDateTimeNullable("ReactedAtFirst");
public ColumnDataDateTimeNullable _ReactedAtLast { get; } = new ColumnDataDateTimeNullable("ReactedAtLast");
public ColumnDataString _UserActivityData { get; } = new ColumnDataString("UserActivityData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountId",
"ItemType",
"ItemId",
"CurrentlyListed",
"ListedAtFirst",
"ListedAtLast",
"ViewedAtFirst",
"ViewedAtLast",
"Reaction",
"ReactedAtFirst",
"ReactedAtLast",
"UserActivityData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"ListedAtLast",
"ViewedAtFirst",
"ViewedAtLast",
"ReactedAtFirst",
"ReactedAtLast",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserActivity_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserActivity";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public Int16 _ItemType { get { return Cols._ItemType.Value; } set { Cols._ItemType.Value = value; } }
public Int64 _ItemId { get { return Cols._ItemId.Value; } set { Cols._ItemId.Value = value; } }
public Boolean _CurrentlyListed { get { return Cols._CurrentlyListed.Value; } set { Cols._CurrentlyListed.Value = value; } }
public DateTime _ListedAtFirst { get { return Cols._ListedAtFirst.Value; } set { Cols._ListedAtFirst.Value = value; } }
public DateTime? _ListedAtLast { get { return Cols._ListedAtLast.Value; } set { Cols._ListedAtLast.Value = value; } }
public DateTime? _ViewedAtFirst { get { return Cols._ViewedAtFirst.Value; } set { Cols._ViewedAtFirst.Value = value; } }
public DateTime? _ViewedAtLast { get { return Cols._ViewedAtLast.Value; } set { Cols._ViewedAtLast.Value = value; } }
public Int16 _Reaction { get { return Cols._Reaction.Value; } set { Cols._Reaction.Value = value; } }
public DateTime? _ReactedAtFirst { get { return Cols._ReactedAtFirst.Value; } set { Cols._ReactedAtFirst.Value = value; } }
public DateTime? _ReactedAtLast { get { return Cols._ReactedAtLast.Value; } set { Cols._ReactedAtLast.Value = value; } }
public String _UserActivityData { get { return Cols._UserActivityData.Value; } set { Cols._UserActivityData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_ItemType = GetFieldInt16(dbDataReader, "ItemType", _ItemType);
_ItemId = GetFieldInt64(dbDataReader, "ItemId", _ItemId);
_CurrentlyListed = GetFieldBoolean(dbDataReader, "CurrentlyListed", _CurrentlyListed);
_ListedAtFirst = GetFieldDateTime(dbDataReader, "ListedAtFirst", _ListedAtFirst);
_ListedAtLast = GetFieldDateTimeNullable(dbDataReader, "ListedAtLast", _ListedAtLast);
_ViewedAtFirst = GetFieldDateTimeNullable(dbDataReader, "ViewedAtFirst", _ViewedAtFirst);
_ViewedAtLast = GetFieldDateTimeNullable(dbDataReader, "ViewedAtLast", _ViewedAtLast);
_Reaction = GetFieldInt16(dbDataReader, "Reaction", _Reaction);
_ReactedAtFirst = GetFieldDateTimeNullable(dbDataReader, "ReactedAtFirst", _ReactedAtFirst);
_ReactedAtLast = GetFieldDateTimeNullable(dbDataReader, "ReactedAtLast", _ReactedAtLast);
_UserActivityData = GetFieldString(dbDataReader, "UserActivityData", _UserActivityData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("CurrentlyListed")) AddCommandParameter(dbCommand, "@CurrentlyListed", _CurrentlyListed);
if (columnNames.ContainsCI("ListedAtFirst")) AddCommandParameter(dbCommand, "@ListedAtFirst", _ListedAtFirst);
if (columnNames.ContainsCI("ListedAtLast")) AddCommandParameter(dbCommand, "@ListedAtLast", _ListedAtLast);
if (columnNames.ContainsCI("ViewedAtFirst")) AddCommandParameter(dbCommand, "@ViewedAtFirst", _ViewedAtFirst);
if (columnNames.ContainsCI("ViewedAtLast")) AddCommandParameter(dbCommand, "@ViewedAtLast", _ViewedAtLast);
if (columnNames.ContainsCI("Reaction")) AddCommandParameter(dbCommand, "@Reaction", _Reaction);
if (columnNames.ContainsCI("ReactedAtFirst")) AddCommandParameter(dbCommand, "@ReactedAtFirst", _ReactedAtFirst);
if (columnNames.ContainsCI("ReactedAtLast")) AddCommandParameter(dbCommand, "@ReactedAtLast", _ReactedAtLast);
if (columnNames.ContainsCI("UserActivityData")) AddCommandParameter(dbCommand, "@UserActivityData", _UserActivityData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ItemType")) AddCommandParameter(dbCommand, "@ItemType", _ItemType);
if (columnNames.ContainsCI("ItemId")) AddCommandParameter(dbCommand, "@ItemId", _ItemId);
if (columnNames.ContainsCI("CurrentlyListed")) AddCommandParameter(dbCommand, "@CurrentlyListed", _CurrentlyListed);
if (columnNames.ContainsCI("ListedAtFirst")) AddCommandParameter(dbCommand, "@ListedAtFirst", _ListedAtFirst);
if (columnNames.ContainsCI("ListedAtLast")) AddCommandParameter(dbCommand, "@ListedAtLast", _ListedAtLast);
if (columnNames.ContainsCI("ViewedAtFirst")) AddCommandParameter(dbCommand, "@ViewedAtFirst", _ViewedAtFirst);
if (columnNames.ContainsCI("ViewedAtLast")) AddCommandParameter(dbCommand, "@ViewedAtLast", _ViewedAtLast);
if (columnNames.ContainsCI("Reaction")) AddCommandParameter(dbCommand, "@Reaction", _Reaction);
if (columnNames.ContainsCI("ReactedAtFirst")) AddCommandParameter(dbCommand, "@ReactedAtFirst", _ReactedAtFirst);
if (columnNames.ContainsCI("ReactedAtLast")) AddCommandParameter(dbCommand, "@ReactedAtLast", _ReactedAtLast);
if (columnNames.ContainsCI("UserActivityData")) AddCommandParameter(dbCommand, "@UserActivityData", _UserActivityData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,182 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserConfig_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataInt16Nullable _ConfigType { get; } = new ColumnDataInt16Nullable("ConfigType");
public ColumnDataString _ConfigData { get; } = new ColumnDataString("ConfigData");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountId",
"ConfigType",
"ConfigData",
"CreateOn",
"UpdateOn",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"ConfigType",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserConfig_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserConfig";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public Int16? _ConfigType { get { return Cols._ConfigType.Value; } set { Cols._ConfigType.Value = value; } }
public String _ConfigData { get { return Cols._ConfigData.Value; } set { Cols._ConfigData.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_ConfigType = GetFieldInt16Nullable(dbDataReader, "ConfigType", _ConfigType);
_ConfigData = GetFieldString(dbDataReader, "ConfigData", _ConfigData);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ConfigType")) AddCommandParameter(dbCommand, "@ConfigType", _ConfigType);
if (columnNames.ContainsCI("ConfigData")) AddCommandParameter(dbCommand, "@ConfigData", _ConfigData);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ConfigType")) AddCommandParameter(dbCommand, "@ConfigType", _ConfigType);
if (columnNames.ContainsCI("ConfigData")) AddCommandParameter(dbCommand, "@ConfigData", _ConfigData);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,235 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserEligibility_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataInt32Nullable _RegionId { get; } = new ColumnDataInt32Nullable("RegionId");
public ColumnDataInt16 _EligibilityType { get; } = new ColumnDataInt16("EligibilityType");
public ColumnDataString _Info { get; } = new ColumnDataString("Info");
public ColumnDataDateTimeNullable _ExpiresOn { get; } = new ColumnDataDateTimeNullable("ExpiresOn");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountId",
"RegionId",
"EligibilityType",
"Info",
"ExpiresOn",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"RegionId",
"ExpiresOn",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserEligibility_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserEligibility";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public Int32? _RegionId { get { return Cols._RegionId.Value; } set { Cols._RegionId.Value = value; } }
public Int16 _EligibilityType { get { return Cols._EligibilityType.Value; } set { Cols._EligibilityType.Value = value; } }
public String _Info { get { return Cols._Info.Value; } set { Cols._Info.Value = value; } }
public DateTime? _ExpiresOn { get { return Cols._ExpiresOn.Value; } set { Cols._ExpiresOn.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_RegionId = GetFieldInt32Nullable(dbDataReader, "RegionId", _RegionId);
_EligibilityType = GetFieldInt16(dbDataReader, "EligibilityType", _EligibilityType);
_Info = GetFieldString(dbDataReader, "Info", _Info);
_ExpiresOn = GetFieldDateTimeNullable(dbDataReader, "ExpiresOn", _ExpiresOn);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("RegionId")) AddCommandParameter(dbCommand, "@RegionId", _RegionId);
if (columnNames.ContainsCI("EligibilityType")) AddCommandParameter(dbCommand, "@EligibilityType", _EligibilityType);
if (columnNames.ContainsCI("Info")) AddCommandParameter(dbCommand, "@Info", _Info);
if (columnNames.ContainsCI("ExpiresOn")) AddCommandParameter(dbCommand, "@ExpiresOn", _ExpiresOn);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("RegionId")) AddCommandParameter(dbCommand, "@RegionId", _RegionId);
if (columnNames.ContainsCI("EligibilityType")) AddCommandParameter(dbCommand, "@EligibilityType", _EligibilityType);
if (columnNames.ContainsCI("Info")) AddCommandParameter(dbCommand, "@Info", _Info);
if (columnNames.ContainsCI("ExpiresOn")) AddCommandParameter(dbCommand, "@ExpiresOn", _ExpiresOn);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,151 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserOnline_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataDateTime _OnlineAt { get; } = new ColumnDataDateTime("OnlineAt");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"UserAccountId",
"OnlineAt",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"UserAccountId",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserOnline_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserOnline";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public DateTime _OnlineAt { get { return Cols._OnlineAt.Value; } set { Cols._OnlineAt.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_OnlineAt = GetFieldDateTime(dbDataReader, "OnlineAt", _OnlineAt);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("OnlineAt")) AddCommandParameter(dbCommand, "@OnlineAt", _OnlineAt);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
commandSuccess = true;
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE UserAccountId=@UserAccountId;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE UserAccountId=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("OnlineAt")) AddCommandParameter(dbCommand, "@OnlineAt", _OnlineAt);
AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,233 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserOrganisation_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataInt32 _OrganisationId { get; } = new ColumnDataInt32("OrganisationId");
public ColumnDataString _OrganisationRoleCodes { get; } = new ColumnDataString("OrganisationRoleCodes");
public ColumnDataByte _OrganisationRoleCount { get; } = new ColumnDataByte("OrganisationRoleCount");
public ColumnDataString _AdminComment { get; } = new ColumnDataString("AdminComment");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountId",
"OrganisationId",
"OrganisationRoleCodes",
"OrganisationRoleCount",
"AdminComment",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserOrganisation_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserOrganisation";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public Int32 _OrganisationId { get { return Cols._OrganisationId.Value; } set { Cols._OrganisationId.Value = value; } }
public String _OrganisationRoleCodes { get { return Cols._OrganisationRoleCodes.Value; } set { Cols._OrganisationRoleCodes.Value = value; } }
public Byte _OrganisationRoleCount { get { return Cols._OrganisationRoleCount.Value; } set { Cols._OrganisationRoleCount.Value = value; } }
public String _AdminComment { get { return Cols._AdminComment.Value; } set { Cols._AdminComment.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_OrganisationId = GetFieldInt32(dbDataReader, "OrganisationId", _OrganisationId);
_OrganisationRoleCodes = GetFieldString(dbDataReader, "OrganisationRoleCodes", _OrganisationRoleCodes);
_OrganisationRoleCount = GetFieldByte(dbDataReader, "OrganisationRoleCount", _OrganisationRoleCount);
_AdminComment = GetFieldString(dbDataReader, "AdminComment", _AdminComment);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("OrganisationRoleCodes")) AddCommandParameter(dbCommand, "@OrganisationRoleCodes", _OrganisationRoleCodes);
if (columnNames.ContainsCI("OrganisationRoleCount")) AddCommandParameter(dbCommand, "@OrganisationRoleCount", _OrganisationRoleCount);
if (columnNames.ContainsCI("AdminComment")) AddCommandParameter(dbCommand, "@AdminComment", _AdminComment);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("OrganisationRoleCodes")) AddCommandParameter(dbCommand, "@OrganisationRoleCodes", _OrganisationRoleCodes);
if (columnNames.ContainsCI("OrganisationRoleCount")) AddCommandParameter(dbCommand, "@OrganisationRoleCount", _OrganisationRoleCount);
if (columnNames.ContainsCI("AdminComment")) AddCommandParameter(dbCommand, "@AdminComment", _AdminComment);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,236 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserRole_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataString _UserRoleCode { get; } = new ColumnDataString("UserRoleCode");
public ColumnDataDateTimeNullable _LastLoginAt { get; } = new ColumnDataDateTimeNullable("LastLoginAt");
public ColumnDataDateTimeNullable _LastInvalidLoginAt { get; } = new ColumnDataDateTimeNullable("LastInvalidLoginAt");
public ColumnDataInt16Nullable _InvalidLoginCount { get; } = new ColumnDataInt16Nullable("InvalidLoginCount");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountId",
"UserRoleCode",
"LastLoginAt",
"LastInvalidLoginAt",
"InvalidLoginCount",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"LastLoginAt",
"LastInvalidLoginAt",
"InvalidLoginCount",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserRole_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserRole";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public String _UserRoleCode { get { return Cols._UserRoleCode.Value; } set { Cols._UserRoleCode.Value = value; } }
public DateTime? _LastLoginAt { get { return Cols._LastLoginAt.Value; } set { Cols._LastLoginAt.Value = value; } }
public DateTime? _LastInvalidLoginAt { get { return Cols._LastInvalidLoginAt.Value; } set { Cols._LastInvalidLoginAt.Value = value; } }
public Int16? _InvalidLoginCount { get { return Cols._InvalidLoginCount.Value; } set { Cols._InvalidLoginCount.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_UserRoleCode = GetFieldString(dbDataReader, "UserRoleCode", _UserRoleCode);
_LastLoginAt = GetFieldDateTimeNullable(dbDataReader, "LastLoginAt", _LastLoginAt);
_LastInvalidLoginAt = GetFieldDateTimeNullable(dbDataReader, "LastInvalidLoginAt", _LastInvalidLoginAt);
_InvalidLoginCount = GetFieldInt16Nullable(dbDataReader, "InvalidLoginCount", _InvalidLoginCount);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("UserRoleCode")) AddCommandParameter(dbCommand, "@UserRoleCode", _UserRoleCode);
if (columnNames.ContainsCI("LastLoginAt")) AddCommandParameter(dbCommand, "@LastLoginAt", _LastLoginAt);
if (columnNames.ContainsCI("LastInvalidLoginAt")) AddCommandParameter(dbCommand, "@LastInvalidLoginAt", _LastInvalidLoginAt);
if (columnNames.ContainsCI("InvalidLoginCount")) AddCommandParameter(dbCommand, "@InvalidLoginCount", _InvalidLoginCount);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("UserRoleCode")) AddCommandParameter(dbCommand, "@UserRoleCode", _UserRoleCode);
if (columnNames.ContainsCI("LastLoginAt")) AddCommandParameter(dbCommand, "@LastLoginAt", _LastLoginAt);
if (columnNames.ContainsCI("LastInvalidLoginAt")) AddCommandParameter(dbCommand, "@LastInvalidLoginAt", _LastInvalidLoginAt);
if (columnNames.ContainsCI("InvalidLoginCount")) AddCommandParameter(dbCommand, "@InvalidLoginCount", _InvalidLoginCount);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,176 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserSession_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataString _ActivityIndexIds { get; } = new ColumnDataString("ActivityIndexIds");
public ColumnDataString _UserSessionData { get; } = new ColumnDataString("UserSessionData");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"UserAccountId",
"ActivityIndexIds",
"UserSessionData",
"Flags",
"CreateOn",
"UpdateOn",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"UserAccountId",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"ActivityIndexIds",
"UserSessionData",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserSession_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserSession";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public String _ActivityIndexIds { get { return Cols._ActivityIndexIds.Value; } set { Cols._ActivityIndexIds.Value = value; } }
public String _UserSessionData { get { return Cols._UserSessionData.Value; } set { Cols._UserSessionData.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_ActivityIndexIds = GetFieldString(dbDataReader, "ActivityIndexIds", _ActivityIndexIds);
_UserSessionData = GetFieldString(dbDataReader, "UserSessionData", _UserSessionData);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ActivityIndexIds")) AddCommandParameter(dbCommand, "@ActivityIndexIds", _ActivityIndexIds);
if (columnNames.ContainsCI("UserSessionData")) AddCommandParameter(dbCommand, "@UserSessionData", _UserSessionData);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
commandSuccess = true;
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE UserAccountId=@UserAccountId;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE UserAccountId=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ActivityIndexIds")) AddCommandParameter(dbCommand, "@ActivityIndexIds", _ActivityIndexIds);
if (columnNames.ContainsCI("UserSessionData")) AddCommandParameter(dbCommand, "@UserSessionData", _UserSessionData);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,289 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserSportExperience_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt64 _UserSportId { get; } = new ColumnDataInt64("UserSportId");
public ColumnDataDateTime _PeriodFrom { get; } = new ColumnDataDateTime("PeriodFrom");
public ColumnDataDateTimeNullable _PeriodTo { get; } = new ColumnDataDateTimeNullable("PeriodTo");
public ColumnDataInt32 _OrganisationId { get; } = new ColumnDataInt32("OrganisationId");
public ColumnDataString _OrganisationName { get; } = new ColumnDataString("OrganisationName");
public ColumnDataString _Summary { get; } = new ColumnDataString("Summary");
public ColumnDataString _Team { get; } = new ColumnDataString("Team");
public ColumnDataString _League { get; } = new ColumnDataString("League");
public ColumnDataString _Speciality { get; } = new ColumnDataString("Speciality");
public ColumnDataString _SpecialitiesOther { get; } = new ColumnDataString("SpecialitiesOther");
public ColumnDataInt32 _RegionIdNation { get; } = new ColumnDataInt32("RegionIdNation");
public ColumnDataInt32 _RegionIdProvince { get; } = new ColumnDataInt32("RegionIdProvince");
public ColumnDataString _Awards { get; } = new ColumnDataString("Awards");
public ColumnDataString _UserSportExperienceData { get; } = new ColumnDataString("UserSportExperienceData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserSportId",
"PeriodFrom",
"PeriodTo",
"OrganisationId",
"OrganisationName",
"Summary",
"Team",
"League",
"Speciality",
"SpecialitiesOther",
"RegionIdNation",
"RegionIdProvince",
"Awards",
"UserSportExperienceData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"PeriodTo",
"Awards",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserSportExperience_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserSportExperience";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int64 _UserSportId { get { return Cols._UserSportId.Value; } set { Cols._UserSportId.Value = value; } }
public DateTime _PeriodFrom { get { return Cols._PeriodFrom.Value; } set { Cols._PeriodFrom.Value = value; } }
public DateTime? _PeriodTo { get { return Cols._PeriodTo.Value; } set { Cols._PeriodTo.Value = value; } }
public Int32 _OrganisationId { get { return Cols._OrganisationId.Value; } set { Cols._OrganisationId.Value = value; } }
public String _OrganisationName { get { return Cols._OrganisationName.Value; } set { Cols._OrganisationName.Value = value; } }
public String _Summary { get { return Cols._Summary.Value; } set { Cols._Summary.Value = value; } }
public String _Team { get { return Cols._Team.Value; } set { Cols._Team.Value = value; } }
public String _League { get { return Cols._League.Value; } set { Cols._League.Value = value; } }
public String _Speciality { get { return Cols._Speciality.Value; } set { Cols._Speciality.Value = value; } }
public String _SpecialitiesOther { get { return Cols._SpecialitiesOther.Value; } set { Cols._SpecialitiesOther.Value = value; } }
public Int32 _RegionIdNation { get { return Cols._RegionIdNation.Value; } set { Cols._RegionIdNation.Value = value; } }
public Int32 _RegionIdProvince { get { return Cols._RegionIdProvince.Value; } set { Cols._RegionIdProvince.Value = value; } }
public String _Awards { get { return Cols._Awards.Value; } set { Cols._Awards.Value = value; } }
public String _UserSportExperienceData { get { return Cols._UserSportExperienceData.Value; } set { Cols._UserSportExperienceData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserSportId = GetFieldInt64(dbDataReader, "UserSportId", _UserSportId);
_PeriodFrom = GetFieldDateTime(dbDataReader, "PeriodFrom", _PeriodFrom);
_PeriodTo = GetFieldDateTimeNullable(dbDataReader, "PeriodTo", _PeriodTo);
_OrganisationId = GetFieldInt32(dbDataReader, "OrganisationId", _OrganisationId);
_OrganisationName = GetFieldString(dbDataReader, "OrganisationName", _OrganisationName);
_Summary = GetFieldString(dbDataReader, "Summary", _Summary);
_Team = GetFieldString(dbDataReader, "Team", _Team);
_League = GetFieldString(dbDataReader, "League", _League);
_Speciality = GetFieldString(dbDataReader, "Speciality", _Speciality);
_SpecialitiesOther = GetFieldString(dbDataReader, "SpecialitiesOther", _SpecialitiesOther);
_RegionIdNation = GetFieldInt32(dbDataReader, "RegionIdNation", _RegionIdNation);
_RegionIdProvince = GetFieldInt32(dbDataReader, "RegionIdProvince", _RegionIdProvince);
_Awards = GetFieldString(dbDataReader, "Awards", _Awards);
_UserSportExperienceData = GetFieldString(dbDataReader, "UserSportExperienceData", _UserSportExperienceData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserSportId")) AddCommandParameter(dbCommand, "@UserSportId", _UserSportId);
if (columnNames.ContainsCI("PeriodFrom")) AddCommandParameter(dbCommand, "@PeriodFrom", _PeriodFrom);
if (columnNames.ContainsCI("PeriodTo")) AddCommandParameter(dbCommand, "@PeriodTo", _PeriodTo);
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("OrganisationName")) AddCommandParameter(dbCommand, "@OrganisationName", _OrganisationName);
if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("Team")) AddCommandParameter(dbCommand, "@Team", _Team);
if (columnNames.ContainsCI("League")) AddCommandParameter(dbCommand, "@League", _League);
if (columnNames.ContainsCI("Speciality")) AddCommandParameter(dbCommand, "@Speciality", _Speciality);
if (columnNames.ContainsCI("SpecialitiesOther")) AddCommandParameter(dbCommand, "@SpecialitiesOther", _SpecialitiesOther);
if (columnNames.ContainsCI("RegionIdNation")) AddCommandParameter(dbCommand, "@RegionIdNation", _RegionIdNation);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("Awards")) AddCommandParameter(dbCommand, "@Awards", _Awards);
if (columnNames.ContainsCI("UserSportExperienceData")) AddCommandParameter(dbCommand, "@UserSportExperienceData", _UserSportExperienceData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserSportId")) AddCommandParameter(dbCommand, "@UserSportId", _UserSportId);
if (columnNames.ContainsCI("PeriodFrom")) AddCommandParameter(dbCommand, "@PeriodFrom", _PeriodFrom);
if (columnNames.ContainsCI("PeriodTo")) AddCommandParameter(dbCommand, "@PeriodTo", _PeriodTo);
if (columnNames.ContainsCI("OrganisationId")) AddCommandParameter(dbCommand, "@OrganisationId", _OrganisationId);
if (columnNames.ContainsCI("OrganisationName")) AddCommandParameter(dbCommand, "@OrganisationName", _OrganisationName);
if (columnNames.ContainsCI("Summary")) AddCommandParameter(dbCommand, "@Summary", _Summary);
if (columnNames.ContainsCI("Team")) AddCommandParameter(dbCommand, "@Team", _Team);
if (columnNames.ContainsCI("League")) AddCommandParameter(dbCommand, "@League", _League);
if (columnNames.ContainsCI("Speciality")) AddCommandParameter(dbCommand, "@Speciality", _Speciality);
if (columnNames.ContainsCI("SpecialitiesOther")) AddCommandParameter(dbCommand, "@SpecialitiesOther", _SpecialitiesOther);
if (columnNames.ContainsCI("RegionIdNation")) AddCommandParameter(dbCommand, "@RegionIdNation", _RegionIdNation);
if (columnNames.ContainsCI("RegionIdProvince")) AddCommandParameter(dbCommand, "@RegionIdProvince", _RegionIdProvince);
if (columnNames.ContainsCI("Awards")) AddCommandParameter(dbCommand, "@Awards", _Awards);
if (columnNames.ContainsCI("UserSportExperienceData")) AddCommandParameter(dbCommand, "@UserSportExperienceData", _UserSportExperienceData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,257 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:16
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Core
{
internal class UserSport_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataInt32 _SportId { get; } = new ColumnDataInt32("SportId");
public ColumnDataString _About { get; } = new ColumnDataString("About");
public ColumnDataString _ContactsData { get; } = new ColumnDataString("ContactsData");
public ColumnDataInt16Nullable _Participating { get; } = new ColumnDataInt16Nullable("Participating");
public ColumnDataInt16Nullable _Preparing { get; } = new ColumnDataInt16Nullable("Preparing");
public ColumnDataInt16Nullable _Officiating { get; } = new ColumnDataInt16Nullable("Officiating");
public ColumnDataString _UserSportData { get; } = new ColumnDataString("UserSportData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountId",
"SportId",
"About",
"ContactsData",
"Participating",
"Preparing",
"Officiating",
"UserSportData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"About",
"ContactsData",
"Participating",
"Preparing",
"Officiating",
"UserSportData",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserSport_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserSport";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public Int32 _SportId { get { return Cols._SportId.Value; } set { Cols._SportId.Value = value; } }
public String _About { get { return Cols._About.Value; } set { Cols._About.Value = value; } }
public String _ContactsData { get { return Cols._ContactsData.Value; } set { Cols._ContactsData.Value = value; } }
public Int16? _Participating { get { return Cols._Participating.Value; } set { Cols._Participating.Value = value; } }
public Int16? _Preparing { get { return Cols._Preparing.Value; } set { Cols._Preparing.Value = value; } }
public Int16? _Officiating { get { return Cols._Officiating.Value; } set { Cols._Officiating.Value = value; } }
public String _UserSportData { get { return Cols._UserSportData.Value; } set { Cols._UserSportData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_SportId = GetFieldInt32(dbDataReader, "SportId", _SportId);
_About = GetFieldString(dbDataReader, "About", _About);
_ContactsData = GetFieldString(dbDataReader, "ContactsData", _ContactsData);
_Participating = GetFieldInt16Nullable(dbDataReader, "Participating", _Participating);
_Preparing = GetFieldInt16Nullable(dbDataReader, "Preparing", _Preparing);
_Officiating = GetFieldInt16Nullable(dbDataReader, "Officiating", _Officiating);
_UserSportData = GetFieldString(dbDataReader, "UserSportData", _UserSportData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("SportId")) AddCommandParameter(dbCommand, "@SportId", _SportId);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About);
if (columnNames.ContainsCI("ContactsData")) AddCommandParameter(dbCommand, "@ContactsData", _ContactsData);
if (columnNames.ContainsCI("Participating")) AddCommandParameter(dbCommand, "@Participating", _Participating);
if (columnNames.ContainsCI("Preparing")) AddCommandParameter(dbCommand, "@Preparing", _Preparing);
if (columnNames.ContainsCI("Officiating")) AddCommandParameter(dbCommand, "@Officiating", _Officiating);
if (columnNames.ContainsCI("UserSportData")) AddCommandParameter(dbCommand, "@UserSportData", _UserSportData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("SportId")) AddCommandParameter(dbCommand, "@SportId", _SportId);
if (columnNames.ContainsCI("About")) AddCommandParameter(dbCommand, "@About", _About);
if (columnNames.ContainsCI("ContactsData")) AddCommandParameter(dbCommand, "@ContactsData", _ContactsData);
if (columnNames.ContainsCI("Participating")) AddCommandParameter(dbCommand, "@Participating", _Participating);
if (columnNames.ContainsCI("Preparing")) AddCommandParameter(dbCommand, "@Preparing", _Preparing);
if (columnNames.ContainsCI("Officiating")) AddCommandParameter(dbCommand, "@Officiating", _Officiating);
if (columnNames.ContainsCI("UserSportData")) AddCommandParameter(dbCommand, "@UserSportData", _UserSportData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,236 @@
using Microsoft.Data.SqlClient;
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 Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Reference
{
internal class Golf_UsgaCountry_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataString _CountryCode { get; } = new ColumnDataString("CountryCode");
public ColumnDataString _CountryName { get; } = new ColumnDataString("CountryName");
public ColumnDataString _EntCountryCode { get; } = new ColumnDataString("EntCountryCode");
public ColumnDataDateTimeNullable _ProvincesUpdateAt { get; } = new ColumnDataDateTimeNullable("ProvincesUpdateAt");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"CountryCode",
"CountryName",
"EntCountryCode",
"ProvincesUpdateAt",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"EntCountryCode",
"ProvincesUpdateAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Golf_UsgaCountry_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "golf";
public override String TableName { get; } = "UsgaCountry";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public String _CountryCode { get { return Cols._CountryCode.Value; } set { Cols._CountryCode.Value = value; } }
public String _CountryName { get { return Cols._CountryName.Value; } set { Cols._CountryName.Value = value; } }
public String _EntCountryCode { get { return Cols._EntCountryCode.Value; } set { Cols._EntCountryCode.Value = value; } }
public DateTime? _ProvincesUpdateAt { get { return Cols._ProvincesUpdateAt.Value; } set { Cols._ProvincesUpdateAt.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
public List<String> UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_CountryCode = GetFieldString(dbDataReader, "CountryCode", _CountryCode);
_CountryName = GetFieldString(dbDataReader, "CountryName", _CountryName);
_EntCountryCode = GetFieldString(dbDataReader, "EntCountryCode", _EntCountryCode);
_ProvincesUpdateAt = GetFieldDateTimeNullable(dbDataReader, "ProvincesUpdateAt", _ProvincesUpdateAt);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("CountryCode")) AddCommandParameter(dbCommand, "@CountryCode", _CountryCode);
if (columnNames.ContainsCI("CountryName")) AddCommandParameter(dbCommand, "@CountryName", _CountryName);
if (columnNames.ContainsCI("EntCountryCode")) AddCommandParameter(dbCommand, "@EntCountryCode", _EntCountryCode);
if (columnNames.ContainsCI("ProvincesUpdateAt")) AddCommandParameter(dbCommand, "@ProvincesUpdateAt", _ProvincesUpdateAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand, List<String> columnsToUpdate = null)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = (columnsToUpdate?.Any() ?? false ? columnsToUpdate : UpdatableColumns).Where(col => UpdatableColumns.ContainsCI(col)).ToList();
if (!columnNames.Any())
{
SaLogger.Warn($"{SysUtil.Fn} No columns to update. [{GetType().Name}]");
return false;
}
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("CountryCode")) AddCommandParameter(dbCommand, "@CountryCode", _CountryCode);
if (columnNames.ContainsCI("CountryName")) AddCommandParameter(dbCommand, "@CountryName", _CountryName);
if (columnNames.ContainsCI("EntCountryCode")) AddCommandParameter(dbCommand, "@EntCountryCode", _EntCountryCode);
if (columnNames.ContainsCI("ProvincesUpdateAt")) AddCommandParameter(dbCommand, "@ProvincesUpdateAt", _ProvincesUpdateAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,309 @@
using Microsoft.Data.SqlClient;
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 Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Reference
{
internal class Golf_UsgaCourse_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt64 _FacilityId { get; } = new ColumnDataInt64("FacilityId");
public ColumnDataInt64 _UsgaCourseId { get; } = new ColumnDataInt64("UsgaCourseId");
public ColumnDataInt64 _LegacyCrpCourseId { get; } = new ColumnDataInt64("LegacyCrpCourseId");
public ColumnDataString _Caption { get; } = new ColumnDataString("Caption");
public ColumnDataString _CourseName { get; } = new ColumnDataString("CourseName");
public ColumnDataString _FullName { get; } = new ColumnDataString("FullName");
public ColumnDataString _Address1 { get; } = new ColumnDataString("Address1");
public ColumnDataString _Address2 { get; } = new ColumnDataString("Address2");
public ColumnDataString _City { get; } = new ColumnDataString("City");
public ColumnDataString _PostalCode { get; } = new ColumnDataString("PostalCode");
public ColumnDataDecimalNullable _Latitude { get; } = new ColumnDataDecimalNullable("Latitude");
public ColumnDataDecimalNullable _Longitude { get; } = new ColumnDataDecimalNullable("Longitude");
public ColumnDataString _Email { get; } = new ColumnDataString("Email");
public ColumnDataString _Telephone { get; } = new ColumnDataString("Telephone");
public ColumnDataDateTimeNullable _MarkersUpdateAt { get; } = new ColumnDataDateTimeNullable("MarkersUpdateAt");
public ColumnDataString _MarkersData { get; } = new ColumnDataString("MarkersData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"FacilityId",
"UsgaCourseId",
"LegacyCrpCourseId",
"Caption",
"CourseName",
"FullName",
"Address1",
"Address2",
"City",
"PostalCode",
"Latitude",
"Longitude",
"Email",
"Telephone",
"MarkersUpdateAt",
"MarkersData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"Latitude",
"Longitude",
"MarkersUpdateAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Golf_UsgaCourse_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "golf";
public override String TableName { get; } = "UsgaCourse";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int64 _FacilityId { get { return Cols._FacilityId.Value; } set { Cols._FacilityId.Value = value; } }
public Int64 _UsgaCourseId { get { return Cols._UsgaCourseId.Value; } set { Cols._UsgaCourseId.Value = value; } }
public Int64 _LegacyCrpCourseId { get { return Cols._LegacyCrpCourseId.Value; } set { Cols._LegacyCrpCourseId.Value = value; } }
public String _Caption { get { return Cols._Caption.Value; } set { Cols._Caption.Value = value; } }
public String _CourseName { get { return Cols._CourseName.Value; } set { Cols._CourseName.Value = value; } }
public String _FullName { get { return Cols._FullName.Value; } set { Cols._FullName.Value = value; } }
public String _Address1 { get { return Cols._Address1.Value; } set { Cols._Address1.Value = value; } }
public String _Address2 { get { return Cols._Address2.Value; } set { Cols._Address2.Value = value; } }
public String _City { get { return Cols._City.Value; } set { Cols._City.Value = value; } }
public String _PostalCode { get { return Cols._PostalCode.Value; } set { Cols._PostalCode.Value = value; } }
public Decimal? _Latitude { get { return Cols._Latitude.Value; } set { Cols._Latitude.Value = value; } }
public Decimal? _Longitude { get { return Cols._Longitude.Value; } set { Cols._Longitude.Value = value; } }
public String _Email { get { return Cols._Email.Value; } set { Cols._Email.Value = value; } }
public String _Telephone { get { return Cols._Telephone.Value; } set { Cols._Telephone.Value = value; } }
public DateTime? _MarkersUpdateAt { get { return Cols._MarkersUpdateAt.Value; } set { Cols._MarkersUpdateAt.Value = value; } }
public String _MarkersData { get { return Cols._MarkersData.Value; } set { Cols._MarkersData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
public List<String> UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_FacilityId = GetFieldInt64(dbDataReader, "FacilityId", _FacilityId);
_UsgaCourseId = GetFieldInt64(dbDataReader, "UsgaCourseId", _UsgaCourseId);
_LegacyCrpCourseId = GetFieldInt64(dbDataReader, "LegacyCrpCourseId", _LegacyCrpCourseId);
_Caption = GetFieldString(dbDataReader, "Caption", _Caption);
_CourseName = GetFieldString(dbDataReader, "CourseName", _CourseName);
_FullName = GetFieldString(dbDataReader, "FullName", _FullName);
_Address1 = GetFieldString(dbDataReader, "Address1", _Address1);
_Address2 = GetFieldString(dbDataReader, "Address2", _Address2);
_City = GetFieldString(dbDataReader, "City", _City);
_PostalCode = GetFieldString(dbDataReader, "PostalCode", _PostalCode);
_Latitude = GetFieldDecimalNullable(dbDataReader, "Latitude", _Latitude);
_Longitude = GetFieldDecimalNullable(dbDataReader, "Longitude", _Longitude);
_Email = GetFieldString(dbDataReader, "Email", _Email);
_Telephone = GetFieldString(dbDataReader, "Telephone", _Telephone);
_MarkersUpdateAt = GetFieldDateTimeNullable(dbDataReader, "MarkersUpdateAt", _MarkersUpdateAt);
_MarkersData = GetFieldString(dbDataReader, "MarkersData", _MarkersData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("FacilityId")) AddCommandParameter(dbCommand, "@FacilityId", _FacilityId);
if (columnNames.ContainsCI("UsgaCourseId")) AddCommandParameter(dbCommand, "@UsgaCourseId", _UsgaCourseId);
if (columnNames.ContainsCI("LegacyCrpCourseId")) AddCommandParameter(dbCommand, "@LegacyCrpCourseId", _LegacyCrpCourseId);
if (columnNames.ContainsCI("Caption")) AddCommandParameter(dbCommand, "@Caption", _Caption);
if (columnNames.ContainsCI("CourseName")) AddCommandParameter(dbCommand, "@CourseName", _CourseName);
if (columnNames.ContainsCI("FullName")) AddCommandParameter(dbCommand, "@FullName", _FullName);
if (columnNames.ContainsCI("Address1")) AddCommandParameter(dbCommand, "@Address1", _Address1);
if (columnNames.ContainsCI("Address2")) AddCommandParameter(dbCommand, "@Address2", _Address2);
if (columnNames.ContainsCI("City")) AddCommandParameter(dbCommand, "@City", _City);
if (columnNames.ContainsCI("PostalCode")) AddCommandParameter(dbCommand, "@PostalCode", _PostalCode);
if (columnNames.ContainsCI("Latitude")) AddCommandParameter(dbCommand, "@Latitude", _Latitude);
if (columnNames.ContainsCI("Longitude")) AddCommandParameter(dbCommand, "@Longitude", _Longitude);
if (columnNames.ContainsCI("Email")) AddCommandParameter(dbCommand, "@Email", _Email);
if (columnNames.ContainsCI("Telephone")) AddCommandParameter(dbCommand, "@Telephone", _Telephone);
if (columnNames.ContainsCI("MarkersUpdateAt")) AddCommandParameter(dbCommand, "@MarkersUpdateAt", _MarkersUpdateAt);
if (columnNames.ContainsCI("MarkersData")) AddCommandParameter(dbCommand, "@MarkersData", _MarkersData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand, List<String> columnsToUpdate = null)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = (columnsToUpdate?.Any() ?? false ? columnsToUpdate : UpdatableColumns).Where(col => UpdatableColumns.ContainsCI(col)).ToList();
if (!columnNames.Any())
{
SaLogger.Warn($"{SysUtil.Fn} No columns to update. [{GetType().Name}]");
return false;
}
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("FacilityId")) AddCommandParameter(dbCommand, "@FacilityId", _FacilityId);
if (columnNames.ContainsCI("UsgaCourseId")) AddCommandParameter(dbCommand, "@UsgaCourseId", _UsgaCourseId);
if (columnNames.ContainsCI("LegacyCrpCourseId")) AddCommandParameter(dbCommand, "@LegacyCrpCourseId", _LegacyCrpCourseId);
if (columnNames.ContainsCI("Caption")) AddCommandParameter(dbCommand, "@Caption", _Caption);
if (columnNames.ContainsCI("CourseName")) AddCommandParameter(dbCommand, "@CourseName", _CourseName);
if (columnNames.ContainsCI("FullName")) AddCommandParameter(dbCommand, "@FullName", _FullName);
if (columnNames.ContainsCI("Address1")) AddCommandParameter(dbCommand, "@Address1", _Address1);
if (columnNames.ContainsCI("Address2")) AddCommandParameter(dbCommand, "@Address2", _Address2);
if (columnNames.ContainsCI("City")) AddCommandParameter(dbCommand, "@City", _City);
if (columnNames.ContainsCI("PostalCode")) AddCommandParameter(dbCommand, "@PostalCode", _PostalCode);
if (columnNames.ContainsCI("Latitude")) AddCommandParameter(dbCommand, "@Latitude", _Latitude);
if (columnNames.ContainsCI("Longitude")) AddCommandParameter(dbCommand, "@Longitude", _Longitude);
if (columnNames.ContainsCI("Email")) AddCommandParameter(dbCommand, "@Email", _Email);
if (columnNames.ContainsCI("Telephone")) AddCommandParameter(dbCommand, "@Telephone", _Telephone);
if (columnNames.ContainsCI("MarkersUpdateAt")) AddCommandParameter(dbCommand, "@MarkersUpdateAt", _MarkersUpdateAt);
if (columnNames.ContainsCI("MarkersData")) AddCommandParameter(dbCommand, "@MarkersData", _MarkersData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,278 @@
using Microsoft.Data.SqlClient;
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 Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Reference
{
internal class Golf_UsgaFacility_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt64 _ProvinceId { get; } = new ColumnDataInt64("ProvinceId");
public ColumnDataInt64 _UsgaFacilityId { get; } = new ColumnDataInt64("UsgaFacilityId");
public ColumnDataString _FacilityName { get; } = new ColumnDataString("FacilityName");
public ColumnDataString _Address1 { get; } = new ColumnDataString("Address1");
public ColumnDataString _Address2 { get; } = new ColumnDataString("Address2");
public ColumnDataString _City { get; } = new ColumnDataString("City");
public ColumnDataString _PostalCode { get; } = new ColumnDataString("PostalCode");
public ColumnDataDecimalNullable _Latitude { get; } = new ColumnDataDecimalNullable("Latitude");
public ColumnDataDecimalNullable _Longitude { get; } = new ColumnDataDecimalNullable("Longitude");
public ColumnDataString _Email { get; } = new ColumnDataString("Email");
public ColumnDataString _Telephone { get; } = new ColumnDataString("Telephone");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"ProvinceId",
"UsgaFacilityId",
"FacilityName",
"Address1",
"Address2",
"City",
"PostalCode",
"Latitude",
"Longitude",
"Email",
"Telephone",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"Latitude",
"Longitude",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Golf_UsgaFacility_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "golf";
public override String TableName { get; } = "UsgaFacility";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int64 _ProvinceId { get { return Cols._ProvinceId.Value; } set { Cols._ProvinceId.Value = value; } }
public Int64 _UsgaFacilityId { get { return Cols._UsgaFacilityId.Value; } set { Cols._UsgaFacilityId.Value = value; } }
public String _FacilityName { get { return Cols._FacilityName.Value; } set { Cols._FacilityName.Value = value; } }
public String _Address1 { get { return Cols._Address1.Value; } set { Cols._Address1.Value = value; } }
public String _Address2 { get { return Cols._Address2.Value; } set { Cols._Address2.Value = value; } }
public String _City { get { return Cols._City.Value; } set { Cols._City.Value = value; } }
public String _PostalCode { get { return Cols._PostalCode.Value; } set { Cols._PostalCode.Value = value; } }
public Decimal? _Latitude { get { return Cols._Latitude.Value; } set { Cols._Latitude.Value = value; } }
public Decimal? _Longitude { get { return Cols._Longitude.Value; } set { Cols._Longitude.Value = value; } }
public String _Email { get { return Cols._Email.Value; } set { Cols._Email.Value = value; } }
public String _Telephone { get { return Cols._Telephone.Value; } set { Cols._Telephone.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
public List<String> UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_ProvinceId = GetFieldInt64(dbDataReader, "ProvinceId", _ProvinceId);
_UsgaFacilityId = GetFieldInt64(dbDataReader, "UsgaFacilityId", _UsgaFacilityId);
_FacilityName = GetFieldString(dbDataReader, "FacilityName", _FacilityName);
_Address1 = GetFieldString(dbDataReader, "Address1", _Address1);
_Address2 = GetFieldString(dbDataReader, "Address2", _Address2);
_City = GetFieldString(dbDataReader, "City", _City);
_PostalCode = GetFieldString(dbDataReader, "PostalCode", _PostalCode);
_Latitude = GetFieldDecimalNullable(dbDataReader, "Latitude", _Latitude);
_Longitude = GetFieldDecimalNullable(dbDataReader, "Longitude", _Longitude);
_Email = GetFieldString(dbDataReader, "Email", _Email);
_Telephone = GetFieldString(dbDataReader, "Telephone", _Telephone);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ProvinceId")) AddCommandParameter(dbCommand, "@ProvinceId", _ProvinceId);
if (columnNames.ContainsCI("UsgaFacilityId")) AddCommandParameter(dbCommand, "@UsgaFacilityId", _UsgaFacilityId);
if (columnNames.ContainsCI("FacilityName")) AddCommandParameter(dbCommand, "@FacilityName", _FacilityName);
if (columnNames.ContainsCI("Address1")) AddCommandParameter(dbCommand, "@Address1", _Address1);
if (columnNames.ContainsCI("Address2")) AddCommandParameter(dbCommand, "@Address2", _Address2);
if (columnNames.ContainsCI("City")) AddCommandParameter(dbCommand, "@City", _City);
if (columnNames.ContainsCI("PostalCode")) AddCommandParameter(dbCommand, "@PostalCode", _PostalCode);
if (columnNames.ContainsCI("Latitude")) AddCommandParameter(dbCommand, "@Latitude", _Latitude);
if (columnNames.ContainsCI("Longitude")) AddCommandParameter(dbCommand, "@Longitude", _Longitude);
if (columnNames.ContainsCI("Email")) AddCommandParameter(dbCommand, "@Email", _Email);
if (columnNames.ContainsCI("Telephone")) AddCommandParameter(dbCommand, "@Telephone", _Telephone);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand, List<String> columnsToUpdate = null)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = (columnsToUpdate?.Any() ?? false ? columnsToUpdate : UpdatableColumns).Where(col => UpdatableColumns.ContainsCI(col)).ToList();
if (!columnNames.Any())
{
SaLogger.Warn($"{SysUtil.Fn} No columns to update. [{GetType().Name}]");
return false;
}
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("ProvinceId")) AddCommandParameter(dbCommand, "@ProvinceId", _ProvinceId);
if (columnNames.ContainsCI("UsgaFacilityId")) AddCommandParameter(dbCommand, "@UsgaFacilityId", _UsgaFacilityId);
if (columnNames.ContainsCI("FacilityName")) AddCommandParameter(dbCommand, "@FacilityName", _FacilityName);
if (columnNames.ContainsCI("Address1")) AddCommandParameter(dbCommand, "@Address1", _Address1);
if (columnNames.ContainsCI("Address2")) AddCommandParameter(dbCommand, "@Address2", _Address2);
if (columnNames.ContainsCI("City")) AddCommandParameter(dbCommand, "@City", _City);
if (columnNames.ContainsCI("PostalCode")) AddCommandParameter(dbCommand, "@PostalCode", _PostalCode);
if (columnNames.ContainsCI("Latitude")) AddCommandParameter(dbCommand, "@Latitude", _Latitude);
if (columnNames.ContainsCI("Longitude")) AddCommandParameter(dbCommand, "@Longitude", _Longitude);
if (columnNames.ContainsCI("Email")) AddCommandParameter(dbCommand, "@Email", _Email);
if (columnNames.ContainsCI("Telephone")) AddCommandParameter(dbCommand, "@Telephone", _Telephone);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,282 @@
using Microsoft.Data.SqlClient;
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 Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Reference
{
internal class Golf_UsgaMarker_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt64 _CourseId { get; } = new ColumnDataInt64("CourseId");
public ColumnDataInt64 _UsgaMarkerId { get; } = new ColumnDataInt64("UsgaMarkerId");
public ColumnDataString _Caption { get; } = new ColumnDataString("Caption");
public ColumnDataInt16 _Holes { get; } = new ColumnDataInt16("Holes");
public ColumnDataString _HolesCaption { get; } = new ColumnDataString("HolesCaption");
public ColumnDataString _Tee { get; } = new ColumnDataString("Tee");
public ColumnDataString _Gender { get; } = new ColumnDataString("Gender");
public ColumnDataInt16 _SlopeRating { get; } = new ColumnDataInt16("SlopeRating");
public ColumnDataInt16 _Par { get; } = new ColumnDataInt16("Par");
public ColumnDataDecimal _CourseRating { get; } = new ColumnDataDecimal("CourseRating");
public ColumnDataDecimal _BogeyRating { get; } = new ColumnDataDecimal("BogeyRating");
public ColumnDataInt16 _Length { get; } = new ColumnDataInt16("Length");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"CourseId",
"UsgaMarkerId",
"Caption",
"Holes",
"HolesCaption",
"Tee",
"Gender",
"SlopeRating",
"Par",
"CourseRating",
"BogeyRating",
"Length",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Golf_UsgaMarker_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "golf";
public override String TableName { get; } = "UsgaMarker";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int64 _CourseId { get { return Cols._CourseId.Value; } set { Cols._CourseId.Value = value; } }
public Int64 _UsgaMarkerId { get { return Cols._UsgaMarkerId.Value; } set { Cols._UsgaMarkerId.Value = value; } }
public String _Caption { get { return Cols._Caption.Value; } set { Cols._Caption.Value = value; } }
public Int16 _Holes { get { return Cols._Holes.Value; } set { Cols._Holes.Value = value; } }
public String _HolesCaption { get { return Cols._HolesCaption.Value; } set { Cols._HolesCaption.Value = value; } }
public String _Tee { get { return Cols._Tee.Value; } set { Cols._Tee.Value = value; } }
public String _Gender { get { return Cols._Gender.Value; } set { Cols._Gender.Value = value; } }
public Int16 _SlopeRating { get { return Cols._SlopeRating.Value; } set { Cols._SlopeRating.Value = value; } }
public Int16 _Par { get { return Cols._Par.Value; } set { Cols._Par.Value = value; } }
public Decimal _CourseRating { get { return Cols._CourseRating.Value; } set { Cols._CourseRating.Value = value; } }
public Decimal _BogeyRating { get { return Cols._BogeyRating.Value; } set { Cols._BogeyRating.Value = value; } }
public Int16 _Length { get { return Cols._Length.Value; } set { Cols._Length.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
public List<String> UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_CourseId = GetFieldInt64(dbDataReader, "CourseId", _CourseId);
_UsgaMarkerId = GetFieldInt64(dbDataReader, "UsgaMarkerId", _UsgaMarkerId);
_Caption = GetFieldString(dbDataReader, "Caption", _Caption);
_Holes = GetFieldInt16(dbDataReader, "Holes", _Holes);
_HolesCaption = GetFieldString(dbDataReader, "HolesCaption", _HolesCaption);
_Tee = GetFieldString(dbDataReader, "Tee", _Tee);
_Gender = GetFieldString(dbDataReader, "Gender", _Gender);
_SlopeRating = GetFieldInt16(dbDataReader, "SlopeRating", _SlopeRating);
_Par = GetFieldInt16(dbDataReader, "Par", _Par);
_CourseRating = GetFieldDecimal(dbDataReader, "CourseRating", _CourseRating);
_BogeyRating = GetFieldDecimal(dbDataReader, "BogeyRating", _BogeyRating);
_Length = GetFieldInt16(dbDataReader, "Length", _Length);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("CourseId")) AddCommandParameter(dbCommand, "@CourseId", _CourseId);
if (columnNames.ContainsCI("UsgaMarkerId")) AddCommandParameter(dbCommand, "@UsgaMarkerId", _UsgaMarkerId);
if (columnNames.ContainsCI("Caption")) AddCommandParameter(dbCommand, "@Caption", _Caption);
if (columnNames.ContainsCI("Holes")) AddCommandParameter(dbCommand, "@Holes", _Holes);
if (columnNames.ContainsCI("HolesCaption")) AddCommandParameter(dbCommand, "@HolesCaption", _HolesCaption);
if (columnNames.ContainsCI("Tee")) AddCommandParameter(dbCommand, "@Tee", _Tee);
if (columnNames.ContainsCI("Gender")) AddCommandParameter(dbCommand, "@Gender", _Gender);
if (columnNames.ContainsCI("SlopeRating")) AddCommandParameter(dbCommand, "@SlopeRating", _SlopeRating);
if (columnNames.ContainsCI("Par")) AddCommandParameter(dbCommand, "@Par", _Par);
if (columnNames.ContainsCI("CourseRating")) AddCommandParameter(dbCommand, "@CourseRating", _CourseRating);
if (columnNames.ContainsCI("BogeyRating")) AddCommandParameter(dbCommand, "@BogeyRating", _BogeyRating);
if (columnNames.ContainsCI("Length")) AddCommandParameter(dbCommand, "@Length", _Length);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand, List<String> columnsToUpdate = null)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = (columnsToUpdate?.Any() ?? false ? columnsToUpdate : UpdatableColumns).Where(col => UpdatableColumns.ContainsCI(col)).ToList();
if (!columnNames.Any())
{
SaLogger.Warn($"{SysUtil.Fn} No columns to update. [{GetType().Name}]");
return false;
}
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("CourseId")) AddCommandParameter(dbCommand, "@CourseId", _CourseId);
if (columnNames.ContainsCI("UsgaMarkerId")) AddCommandParameter(dbCommand, "@UsgaMarkerId", _UsgaMarkerId);
if (columnNames.ContainsCI("Caption")) AddCommandParameter(dbCommand, "@Caption", _Caption);
if (columnNames.ContainsCI("Holes")) AddCommandParameter(dbCommand, "@Holes", _Holes);
if (columnNames.ContainsCI("HolesCaption")) AddCommandParameter(dbCommand, "@HolesCaption", _HolesCaption);
if (columnNames.ContainsCI("Tee")) AddCommandParameter(dbCommand, "@Tee", _Tee);
if (columnNames.ContainsCI("Gender")) AddCommandParameter(dbCommand, "@Gender", _Gender);
if (columnNames.ContainsCI("SlopeRating")) AddCommandParameter(dbCommand, "@SlopeRating", _SlopeRating);
if (columnNames.ContainsCI("Par")) AddCommandParameter(dbCommand, "@Par", _Par);
if (columnNames.ContainsCI("CourseRating")) AddCommandParameter(dbCommand, "@CourseRating", _CourseRating);
if (columnNames.ContainsCI("BogeyRating")) AddCommandParameter(dbCommand, "@BogeyRating", _BogeyRating);
if (columnNames.ContainsCI("Length")) AddCommandParameter(dbCommand, "@Length", _Length);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,241 @@
using Microsoft.Data.SqlClient;
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 Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Reference
{
internal class Golf_UsgaProvince_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt64 _CountryId { get; } = new ColumnDataInt64("CountryId");
public ColumnDataString _ProvinceCode { get; } = new ColumnDataString("ProvinceCode");
public ColumnDataString _EntProvinceCode { get; } = new ColumnDataString("EntProvinceCode");
public ColumnDataString _ProvinceName { get; } = new ColumnDataString("ProvinceName");
public ColumnDataDateTimeNullable _CoursesUpdateAt { get; } = new ColumnDataDateTimeNullable("CoursesUpdateAt");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"CountryId",
"ProvinceCode",
"EntProvinceCode",
"ProvinceName",
"CoursesUpdateAt",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"CoursesUpdateAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal Golf_UsgaProvince_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "golf";
public override String TableName { get; } = "UsgaProvince";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int64 _CountryId { get { return Cols._CountryId.Value; } set { Cols._CountryId.Value = value; } }
public String _ProvinceCode { get { return Cols._ProvinceCode.Value; } set { Cols._ProvinceCode.Value = value; } }
public String _EntProvinceCode { get { return Cols._EntProvinceCode.Value; } set { Cols._EntProvinceCode.Value = value; } }
public String _ProvinceName { get { return Cols._ProvinceName.Value; } set { Cols._ProvinceName.Value = value; } }
public DateTime? _CoursesUpdateAt { get { return Cols._CoursesUpdateAt.Value; } set { Cols._CoursesUpdateAt.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
public List<String> UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_CountryId = GetFieldInt64(dbDataReader, "CountryId", _CountryId);
_ProvinceCode = GetFieldString(dbDataReader, "ProvinceCode", _ProvinceCode);
_EntProvinceCode = GetFieldString(dbDataReader, "EntProvinceCode", _EntProvinceCode);
_ProvinceName = GetFieldString(dbDataReader, "ProvinceName", _ProvinceName);
_CoursesUpdateAt = GetFieldDateTimeNullable(dbDataReader, "CoursesUpdateAt", _CoursesUpdateAt);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("CountryId")) AddCommandParameter(dbCommand, "@CountryId", _CountryId);
if (columnNames.ContainsCI("ProvinceCode")) AddCommandParameter(dbCommand, "@ProvinceCode", _ProvinceCode);
if (columnNames.ContainsCI("EntProvinceCode")) AddCommandParameter(dbCommand, "@EntProvinceCode", _EntProvinceCode);
if (columnNames.ContainsCI("ProvinceName")) AddCommandParameter(dbCommand, "@ProvinceName", _ProvinceName);
if (columnNames.ContainsCI("CoursesUpdateAt")) AddCommandParameter(dbCommand, "@CoursesUpdateAt", _CoursesUpdateAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand, List<String> columnsToUpdate = null)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = (columnsToUpdate?.Any() ?? false ? columnsToUpdate : UpdatableColumns).Where(col => UpdatableColumns.ContainsCI(col)).ToList();
if (!columnNames.Any())
{
SaLogger.Warn($"{SysUtil.Fn} No columns to update. [{GetType().Name}]");
return false;
}
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("CountryId")) AddCommandParameter(dbCommand, "@CountryId", _CountryId);
if (columnNames.ContainsCI("ProvinceCode")) AddCommandParameter(dbCommand, "@ProvinceCode", _ProvinceCode);
if (columnNames.ContainsCI("EntProvinceCode")) AddCommandParameter(dbCommand, "@EntProvinceCode", _EntProvinceCode);
if (columnNames.ContainsCI("ProvinceName")) AddCommandParameter(dbCommand, "@ProvinceName", _ProvinceName);
if (columnNames.ContainsCI("CoursesUpdateAt")) AddCommandParameter(dbCommand, "@CoursesUpdateAt", _CoursesUpdateAt);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,228 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Support
{
internal class UserReportComment_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt64 _UserReportId { get; } = new ColumnDataInt64("UserReportId");
public ColumnDataDateTimeNullable _RecordedAt { get; } = new ColumnDataDateTimeNullable("RecordedAt");
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataString _CommentData { get; } = new ColumnDataString("CommentData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserReportId",
"RecordedAt",
"UserAccountId",
"CommentData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
"RecordedAt",
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserReportComment_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserReportComment";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int64 _UserReportId { get { return Cols._UserReportId.Value; } set { Cols._UserReportId.Value = value; } }
public DateTime? _RecordedAt { get { return Cols._RecordedAt.Value; } set { Cols._RecordedAt.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public String _CommentData { get { return Cols._CommentData.Value; } set { Cols._CommentData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserReportId = GetFieldInt64(dbDataReader, "UserReportId", _UserReportId);
_RecordedAt = GetFieldDateTimeNullable(dbDataReader, "RecordedAt", _RecordedAt);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_CommentData = GetFieldString(dbDataReader, "CommentData", _CommentData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserReportId")) AddCommandParameter(dbCommand, "@UserReportId", _UserReportId);
if (columnNames.ContainsCI("RecordedAt")) AddCommandParameter(dbCommand, "@RecordedAt", _RecordedAt);
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("CommentData")) AddCommandParameter(dbCommand, "@CommentData", _CommentData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserReportId")) AddCommandParameter(dbCommand, "@UserReportId", _UserReportId);
if (columnNames.ContainsCI("RecordedAt")) AddCommandParameter(dbCommand, "@RecordedAt", _RecordedAt);
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("CommentData")) AddCommandParameter(dbCommand, "@CommentData", _CommentData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,239 @@
using Microsoft.Data.SqlClient;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Data;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
//---------------------------------------------------------------------------
// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17
//---------------------------------------------------------------------------
namespace Saxonite.Net.Standard.Dbas.Internal.Support
{
internal class UserReport_Db : SaxDbDataItem
{
//-------------------------------------------------------------------
// Column definitions.
public class ColumnsData
{
public ColumnDataInt64 _Id { get; } = new ColumnDataInt64("Id", true);
public ColumnDataInt32 _UserAccountId { get; } = new ColumnDataInt32("UserAccountId");
public ColumnDataInt16 _ReportType { get; } = new ColumnDataInt16("ReportType");
public ColumnDataString _Title { get; } = new ColumnDataString("Title");
public ColumnDataString _Report { get; } = new ColumnDataString("Report");
public ColumnDataDateTime _RecordedOn { get; } = new ColumnDataDateTime("RecordedOn");
public ColumnDataString _ReportData { get; } = new ColumnDataString("ReportData");
public ColumnDataString _Notes { get; } = new ColumnDataString("Notes");
public ColumnDataInt16 _Flags { get; } = new ColumnDataInt16("Flags");
public ColumnDataString _Status { get; } = new ColumnDataString("Status");
public ColumnDataDateTime _CreateOn { get; } = new ColumnDataDateTime("CreateOn");
public ColumnDataInt32 _CreateBy { get; } = new ColumnDataInt32("CreateBy");
public ColumnDataString _CreateHost { get; } = new ColumnDataString("CreateHost");
public ColumnDataDateTime _UpdateOn { get; } = new ColumnDataDateTime("UpdateOn");
public ColumnDataInt32 _UpdateBy { get; } = new ColumnDataInt32("UpdateBy");
public ColumnDataString _UpdateHost { get; } = new ColumnDataString("UpdateHost");
}
//-------------------------------------------------------------------
// Data members.
protected static List<String> fields { get; } = new List<String>()
{
"Id",
"UserAccountId",
"ReportType",
"Title",
"Report",
"RecordedOn",
"ReportData",
"Notes",
"Flags",
"Status",
"CreateOn",
"CreateBy",
"CreateHost",
"UpdateOn",
"UpdateBy",
"UpdateHost",
};
protected static List<String> fieldsId { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsPrimary { get; } = new List<String>()
{
"Id",
};
protected static List<String> fieldsNullable { get; } = new List<String>()
{
};
protected static List<String> fieldsIgnoreOnUpdate { get; } = new List<String>()
{
"CreateOn",
"CreateBy",
"CreateHost",
};
//-------------------------------------------------------------------
// Construction.
internal UserReport_Db (IDatabaseInfo dbInfo) : base(dbInfo)
{
}
//-------------------------------------------------------------------
// Properties.
public override String SchemaName { get; } = "dbo";
public override String TableName { get; } = "UserReport";
public String TableNameFmt { get { return (!String.IsNullOrEmpty(SchemaName) ? "[" + SchemaName + "]." : "") + "[" + TableName + "]"; } }
public static List<String> Fields { get { return new List<String>(fields); } }
public static List<String> FieldsId { get { return new List<String>(fieldsId); } }
public static List<String> FieldsNonId { get { return fields.FindAll(item => !fieldsId.ContainsCI(item)); } }
// Columns.
public ColumnsData Cols { get; } = new ColumnsData();
public Int64 _Id { get { return Cols._Id.Value; } set { Cols._Id.Value = value; } }
public Int32 _UserAccountId { get { return Cols._UserAccountId.Value; } set { Cols._UserAccountId.Value = value; } }
public Int16 _ReportType { get { return Cols._ReportType.Value; } set { Cols._ReportType.Value = value; } }
public String _Title { get { return Cols._Title.Value; } set { Cols._Title.Value = value; } }
public String _Report { get { return Cols._Report.Value; } set { Cols._Report.Value = value; } }
public DateTime _RecordedOn { get { return Cols._RecordedOn.Value; } set { Cols._RecordedOn.Value = value; } }
public String _ReportData { get { return Cols._ReportData.Value; } set { Cols._ReportData.Value = value; } }
public String _Notes { get { return Cols._Notes.Value; } set { Cols._Notes.Value = value; } }
public Int16 _Flags { get { return Cols._Flags.Value; } set { Cols._Flags.Value = value; } }
public String _Status { get { return Cols._Status.Value; } set { Cols._Status.Value = value; } }
public DateTime _CreateOn { get { return Cols._CreateOn.Value; } set { Cols._CreateOn.Value = value; } }
public Int32 _CreateBy { get { return Cols._CreateBy.Value; } set { Cols._CreateBy.Value = value; } }
public String _CreateHost { get { return Cols._CreateHost.Value; } set { Cols._CreateHost.Value = value; } }
public DateTime _UpdateOn { get { return Cols._UpdateOn.Value; } set { Cols._UpdateOn.Value = value; } }
public Int32 _UpdateBy { get { return Cols._UpdateBy.Value; } set { Cols._UpdateBy.Value = value; } }
public String _UpdateHost { get { return Cols._UpdateHost.Value; } set { Cols._UpdateHost.Value = value; } }
// Existing columns - confirmed on database if table exists.
public List<String> ExistingColumnNames { get { return GetExistingColumnNames(Fields); } }
public List<String> ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } }
//-------------------------------------------------------------------
// Population.
public override void PopulateFrom (DbCommand dbCommand, String tableAlias, String filter)
{
dbCommand.CommandText =
"SELECT " + ExistingColumnNames.Concat(", ", (!String.IsNullOrEmpty(tableAlias) ? tableAlias + "." : "") + "[", "]") + " " +
"FROM " + TableNameFmt + (!String.IsNullOrEmpty(tableAlias) ? " " + tableAlias : "") + " " +
(!String.IsNullOrEmpty(filter) ? "WHERE " + filter : "");
Log(GetType().Name + ".PopulateFrom", dbCommand.CommandText);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
dbDataReader.Read();
PopulateFrom(dbDataReader);
}
}
public override void PopulateFrom (DbDataReader dbDataReader)
{
_Id = GetFieldInt64(dbDataReader, "Id", _Id);
_UserAccountId = GetFieldInt32(dbDataReader, "UserAccountId", _UserAccountId);
_ReportType = GetFieldInt16(dbDataReader, "ReportType", _ReportType);
_Title = GetFieldString(dbDataReader, "Title", _Title);
_Report = GetFieldString(dbDataReader, "Report", _Report);
_RecordedOn = GetFieldDateTime(dbDataReader, "RecordedOn", _RecordedOn);
_ReportData = GetFieldString(dbDataReader, "ReportData", _ReportData);
_Notes = GetFieldString(dbDataReader, "Notes", _Notes);
_Flags = GetFieldInt16(dbDataReader, "Flags", _Flags);
_Status = GetFieldString(dbDataReader, "Status", _Status);
_CreateOn = GetFieldDateTime(dbDataReader, "CreateOn", _CreateOn);
_CreateBy = GetFieldInt32(dbDataReader, "CreateBy", _CreateBy);
_CreateHost = GetFieldString(dbDataReader, "CreateHost", _CreateHost);
_UpdateOn = GetFieldDateTime(dbDataReader, "UpdateOn", _UpdateOn);
_UpdateBy = GetFieldInt32(dbDataReader, "UpdateBy", _UpdateBy);
_UpdateHost = GetFieldString(dbDataReader, "UpdateHost", _UpdateHost);
}
//-------------------------------------------------------------------
// Insert command.
public override bool ExecuteInsertCommand (DbCommand dbCommand)
{
List<String> columnNames = ExistingColumnNamesNonId;
// Avoid insert if Identity field is already valid.
if (_Id != 0) throw new Exception("Invalid for Insert - item already has a valid Id");
// Construct query.
String query =
"INSERT INTO " + TableNameFmt + " " +
"("+columnNames.Concat(",","[","]")+") ";
query += "Output Inserted.Id ";
if (dbCommand is SqlCommand)
query += "VALUES (" + columnNames.Concat(",", "@", "") + ") ";
else query += "VALUES (" + StringListUtil.CreateList("?", columnNames.Count).Concat(",") + ") ";
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteInsertCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ReportType")) AddCommandParameter(dbCommand, "@ReportType", _ReportType);
if (columnNames.ContainsCI("Title")) AddCommandParameter(dbCommand, "@Title", _Title);
if (columnNames.ContainsCI("Report")) AddCommandParameter(dbCommand, "@Report", _Report);
if (columnNames.ContainsCI("RecordedOn")) AddCommandParameter(dbCommand, "@RecordedOn", _RecordedOn);
if (columnNames.ContainsCI("ReportData")) AddCommandParameter(dbCommand, "@ReportData", _ReportData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("CreateOn")) AddCommandParameter(dbCommand, "@CreateOn", _CreateOn);
if (columnNames.ContainsCI("CreateBy")) AddCommandParameter(dbCommand, "@CreateBy", _CreateBy);
if (columnNames.ContainsCI("CreateHost")) AddCommandParameter(dbCommand, "@CreateHost", _CreateHost);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
// Execute insert command.
bool commandSuccess = false;
int executeNonQuery = dbCommand.ExecuteNonQuery();
if (executeNonQuery == 1)
{
dbCommand.CommandText = "SELECT Max(Id) FROM " + TableNameFmt + ";";
_Id = Convert.ToInt64(dbCommand.ExecuteScalar());
commandSuccess = (_Id > 0);
}
return commandSuccess;
}
//-------------------------------------------------------------------
// Update command.
public override bool ExecuteUpdateCommand (DbCommand dbCommand)
{
// Avoid update if Identity field isn't valid.
if (_Id == 0) throw new Exception("Invalid for Update - item has an invalid Id");
// Columns to update.
List<String> columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList();
// Construct query.
String query = "UPDATE " + TableNameFmt + " SET ";
if (dbCommand is SqlCommand)
{
query += StringPairList.CreateFrom(columnNames.Bracket("[","]"),columnNames).Concat("=@").Concat(", ") + " ";
query += "WHERE Id=@Id;";
}
else
{
query += columnNames.Concat(", ", "", "=?") + " ";
query += "WHERE Id=?;";
}
dbCommand.CommandText = query;
Log(GetType().Name + ".ExecuteUpdateCommand", dbCommand.CommandText);
// Populate parameters.
dbCommand.Parameters.Clear();
if (columnNames.ContainsCI("UserAccountId")) AddCommandParameter(dbCommand, "@UserAccountId", _UserAccountId);
if (columnNames.ContainsCI("ReportType")) AddCommandParameter(dbCommand, "@ReportType", _ReportType);
if (columnNames.ContainsCI("Title")) AddCommandParameter(dbCommand, "@Title", _Title);
if (columnNames.ContainsCI("Report")) AddCommandParameter(dbCommand, "@Report", _Report);
if (columnNames.ContainsCI("RecordedOn")) AddCommandParameter(dbCommand, "@RecordedOn", _RecordedOn);
if (columnNames.ContainsCI("ReportData")) AddCommandParameter(dbCommand, "@ReportData", _ReportData);
if (columnNames.ContainsCI("Notes")) AddCommandParameter(dbCommand, "@Notes", _Notes);
if (columnNames.ContainsCI("Flags")) AddCommandParameter(dbCommand, "@Flags", _Flags);
if (columnNames.ContainsCI("Status")) AddCommandParameter(dbCommand, "@Status", _Status);
if (columnNames.ContainsCI("UpdateOn")) AddCommandParameter(dbCommand, "@UpdateOn", _UpdateOn);
if (columnNames.ContainsCI("UpdateBy")) AddCommandParameter(dbCommand, "@UpdateBy", _UpdateBy);
if (columnNames.ContainsCI("UpdateHost")) AddCommandParameter(dbCommand, "@UpdateHost", _UpdateHost);
AddCommandParameter(dbCommand, "@Id", _Id);
int executeNonQueryResult = dbCommand.ExecuteNonQuery();
return (executeNonQueryResult == 1);
}
//-------------------------------------------------------------------
}
}
@@ -0,0 +1,729 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Dbas.Data;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Internal.Reference;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
namespace Saxonite.Net.Standard.Dbas.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr_Dbas
{
//*******************************************************************
// Support Mgr - User Report
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxGolfUsgaCountry usgaCountry)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(usgaCountry.Id)),
new StringPair("Country code",usgaCountry.CountryCode),
new StringPair("Country name",usgaCountry.CountryName),
new StringPair("Status",usgaCountry.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxGolfUsgaCountry CreateUsgaCountry()
{
ClearErrorState();
return new SaxGolfUsgaCountry_Dbas(ReferenceDatabase, null, 0);
}
private SaxGolfUsgaCountry_Dbas CreateUsgaCountry(Golf_UsgaCountry_Db dbUsgaCountry)
{
ClearErrorState();
SaxGolfUsgaCountry_Dbas usgaCountry = new SaxGolfUsgaCountry_Dbas(ReferenceDatabase, new SysId(dbUsgaCountry._Id), (ushort)dbUsgaCountry._Flags);
PopulateFrom(dbUsgaCountry, usgaCountry);
return usgaCountry;
}
//-------------------------------------------------------------------
// Get item.
public override SaxGolfUsgaCountry GetUsgaCountry(SaxGolfUsgaCountry.Params prm)
{
ClearErrorState();
return GetUsgaCountry(GetUsgaCountryQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxGolfUsgaCountry GetUsgaCountry(String filter)
{
ClearErrorState();
long count = GetUsgaCountryCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxGolfUsgaCountry usgaCountry = null;
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaCountry_Db dbUsgaCountry = new Golf_UsgaCountry_Db(ReferenceDbInfo);
dbUsgaCountry.PopulateFrom(dbCommand, aliasUsgaCountry, filter);
usgaCountry = CreateUsgaCountry(dbUsgaCountry);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return usgaCountry;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUsgaCountryData(SaxGolfUsgaCountry.Data data, SaxGolfUsgaCountry.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUsgaCountryData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUsgaCountry(SaxGolfUsgaCountry usgaCountry, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUsgaCountry";
ClearErrorState();
if (!IsValidUsgaCountry(usgaCountry)) return false;
if (SysId.IsValid(usgaCountry.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaCountry_Db dbUsgaCountry = new Golf_UsgaCountry_Db(ReferenceDbInfo);
PopulateTo(dbUsgaCountry, usgaCountry, dbUpdateInfo);
if (Golf_UsgaCountry_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUsgaCountry._Id = ReferenceDatabase.GetNextIdFromTable("UsgaCountry");
}
dbUsgaCountry.ExecuteInsertCommand(dbCommand);
usgaCountry.Id = new SysId(dbUsgaCountry._Id);
usgaCountry.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(usgaCountry).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUsgaCountry(SaxGolfUsgaCountry usgaCountry, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUsgaCountry";
ClearErrorState();
if (!IsValidUsgaCountry(usgaCountry)) return false;
if (!SysId.IsValid(usgaCountry.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!usgaCountry.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(usgaCountry).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaCountry_Db dbUsgaCountry = new Golf_UsgaCountry_Db(ReferenceDbInfo);
dbUsgaCountry.PopulateFrom(dbCommand, aliasUsgaCountry, "Id=" + SysId.ToString(usgaCountry.Id));
// ToDo SaxUpdateLogItemMonitor_UsgaCountry updateLogMonitor = new SaxUpdateLogItemMonitor_UsgaCountry(SessionContext, CreateUsgaCountry(dbUsgaCountry), dbUpdateInfo);
// Update item.
PopulateTo(dbUsgaCountry, usgaCountry, dbUpdateInfo);
dbUsgaCountry.ExecuteUpdateCommand(dbCommand);
usgaCountry.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(usgaCountry).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(usgaCountry);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UsgaCountryCanBeDeleted(SaxGolfUsgaCountry usgaCountry)
{
ClearErrorState();
if (!base.UsgaCountryCanBeDeleted(usgaCountry)) return false;
return true;
}
public override bool DeleteUsgaCountry(SaxGolfUsgaCountry usgaCountry, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUsgaCountry";
ClearErrorState();
if (!UsgaCountryCanBeDeleted(usgaCountry)) return false;
// User Roles are logically deleted by changing the status.
usgaCountry.Status = SaStatus.Deleted;
return UpdateUsgaCountry(usgaCountry, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaCountry_Db dbUsgaCountry = new Golf_UsgaCountry_Db(ReferenceDbInfo);
dbUsgaCountry.PopulateFrom(dbCommand, aliasUsgaCountry, "Id=" + usgaCountry.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCountry) + " WHERE Id=" + SysId.ToString(usgaCountry.Id) + ";";
dbCommand.ExecuteNonQuery();
usgaCountry.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(usgaCountry).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Golf_UsgaCountry_Db dbUsgaCountry, SaxGolfUsgaCountry usgaCountry, DbUpdateInfo dbUpdateInfo)
{
dbUsgaCountry._Id = SysId.ToLong(usgaCountry.Id);
dbUsgaCountry._CountryCode = usgaCountry.CountryCode;
dbUsgaCountry._EntCountryCode = usgaCountry.EntCountryCode;
dbUsgaCountry._CountryName = usgaCountry.CountryName;
dbUsgaCountry._ProvincesUpdateAt = usgaCountry.ProvincesUpdateAt;
// Common.
dbUsgaCountry._Notes = usgaCountry.Notes;
dbUsgaCountry._Status = SacsSystem.GetStatusCode(usgaCountry.Status);
dbUsgaCountry._Flags = (short)usgaCountry.Flags;
if (!SysId.IsValid(usgaCountry.Id))
{
dbUsgaCountry._CreateOn = DateTime.Now;
dbUsgaCountry._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaCountry._CreateHost = dbUpdateInfo.Host;
}
dbUsgaCountry._UpdateOn = DateTime.Now;
dbUsgaCountry._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaCountry._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Golf_UsgaCountry_Db dbUsgaCountry, SaxGolfUsgaCountry usgaCountry)
{
//usgaCountry.Id = new SysId(dbUsgaCountry._Id);
usgaCountry.CountryCode = dbUsgaCountry._CountryCode;
usgaCountry.EntCountryCode = dbUsgaCountry._EntCountryCode;
usgaCountry.CountryName = dbUsgaCountry._CountryName;
usgaCountry.ProvincesUpdateAt = dbUsgaCountry._ProvincesUpdateAt;
// Common.
usgaCountry.Notes = dbUsgaCountry._Notes;
usgaCountry.Status = SacsSystem.GetStatusForCode(dbUsgaCountry._Status);
usgaCountry.SetCreateStamp(dbUsgaCountry._CreateOn, new SysId(dbUsgaCountry._CreateBy), dbUsgaCountry._CreateHost);
usgaCountry.SetUpdateStamp(dbUsgaCountry._UpdateOn, new SysId(dbUsgaCountry._UpdateBy), dbUsgaCountry._UpdateHost);
usgaCountry.AcceptChanges();
}
//-------------------------------------------------------------------
// Bulk updates.
/// <summary>
/// Bulk update USGA Countries.
/// <para>- Country code must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per country rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public override bool BulkUpdateUsgaCountries(List<UsgaCountryData> countries, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
List<UsgaCountryData> countriesToUpdate = new List<UsgaCountryData>();
// Validate supplied data.
foreach (UsgaCountryData country in countries)
{
// Validate country properties.
// Code is mandatory, other values only validated if non-null.
if (!IsValidValue(country.CountryCode, "code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryCode), true)) return false;
if (country.EntCountryCode != null && !IsValidValue(country.EntCountryCode, "ent code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_EntCountryCode))) return false;
if (country.CountryName != null && !IsValidValue(country.CountryName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName))) return false;
countriesToUpdate.Add(country);
}
int MaxBulkUpdateBatchSize = 64;
int batchSize = countriesToUpdate.Any() ? (int)Math.Ceiling(countriesToUpdate.Count() / Math.Ceiling((double)countriesToUpdate.Count() / MaxBulkUpdateBatchSize)) : MaxBulkUpdateBatchSize;
while (countriesToUpdate.Any())
{
List<String> query = new List<string>();
query.Add($"Declare @statusActive VarChar(3) = '{SacsSystem.GetStatusCode(SaxGolfUsgaCountry.DefaultStatus)}';");
query.Add($"Declare @updateOn DateTime = GetDate();");
query.Add($"Declare @updateBy Int = {SysId.ToLong(dbUpdateInfo.UserId)};");
query.Add($"Declare @updateHost VarChar(100) = '{DbQuery.FormatForCondition(dbUpdateInfo.Host)}';");
query.Add("Merge");
query.Add($"Into {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCountry)} uCty");
query.Add("Using");
query.Add("(");
query.Add("Select '' CountryCode, '' EntCountryCode, '' CountryName");
foreach (UsgaCountryData country in countriesToUpdate.ExtractRange(0, batchSize))
query.Add($"Union Select '{DbQuery.FormatForCondition(country.CountryCode)}', " + (country.EntCountryCode != null ? $"'{DbQuery.FormatForCondition(country.EntCountryCode)}'" : "Null") + ", " + (country.CountryName != null ? $"'{DbQuery.FormatForCondition(country.CountryName)}'" : "Null"));
query.Add(") dCty");
query.Add("On uCty.CountryCode=dCty.CountryCode");
// Always update countries so that they are time stamped.
// Was: query.Add("When Matched And ((dCty.EntCountryCode Is Not Null And uCty.EntCountryCode!=dCty.EntCountryCode) Or (dCty.CountryName Is Not Null And uCty.CountryName!=dCty.CountryName) Or uCty.Status!=@statusActive)");
query.Add("When Matched");
query.Add("Then Update Set");
query.Add(" EntCountryCode=Coalesce(dCty.EntCountryCode,uCty.EntCountryCode),");
query.Add(" CountryName=Coalesce(dCty.CountryName,uCty.CountryName),");
query.Add(" Status=@statusActive,");
query.Add(" UpdateOn=@updateOn,");
query.Add(" UpdateBy=@updateBy,");
query.Add(" UpdateHost=@updateHost");
query.Add("When Not Matched And Len(IsNull(dCty.CountryName,''))>0");
query.Add("Then Insert (CountryCode,EntCountryCode,CountryName,Notes,Flags,Status,CreateOn,CreateBy,CreateHost,UpdateOn,UpdateBy,UpdateHost)");
query.Add($"Values (dCty.CountryCode,Coalesce(dCty.EntCountryCode,''),dCty.CountryName,'',0,@statusActive,@updateOn,@updateBy,@updateHost,@updateOn,@updateBy,@updateHost)");
query.Add(";");
//SaLogger.Info($"{SysUtil.Fn} Bulk USGA Country update query:\n\t{query.Concat("\n\t")}");
try
{
int result = ReferenceDatabase.ExecuteNonQuery(query.Concat("\n"));
if (ReferenceDatabase.HasErrorState())
SaLogger.Warn($"{SysUtil.Fn} Error executing bulk USGA Country update - {ReferenceDatabase.ErrorStateMessage}");
}
catch (Exception exc)
{
SaLogger.Warn(SysUtil.Fn + " " + ExceptionUtil.GetLogMessage(exc, " executing bulk USGA Country update"));
}
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUsgaCountry = "UsgPrv";
private static readonly String aliasUsgaCountry_Dummy = "UsgPrv_Cty";
private static readonly String prefixUsgaCountry_Dummy = aliasUsgaCountry_Dummy + "_";
private static readonly String colCountry_Province_Count = "Cty_Prv_Count";
private static readonly String colCountry_Province_Active_Count = "Cty_Prv_Act_Count";
private static readonly String colCountry_Facility_Count = "Cty_Fty_Count";
private static readonly String colCountry_Facility_Active_Count = "Cty_Fty_Act_Count";
private static readonly String colCountry_Courses_Percent = "Cty_Crs_Perc";
private void SetUsgaCountryColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Reference.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Reference.GetTableForColumn(dbCol) == SaxDbDfn_Reference.TableIdx.UsgaCountry)
alias = aliasUsgaCountry;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Reference.GetColumnName(dbCol, false), SaxDbDfn_Reference.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Reference.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Reference.GetColTextLen(dbCol);
}
public override ColumnDfn GetUsgaCountryColumnDfn(SaxGolfUsgaCountry.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxGolfUsgaCountry.Column.Pos:
SetUsgaCountryColDfn(columnDfn, "Pos", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxGolfUsgaCountry.Column.Id:
SetUsgaCountryColDfn(columnDfn, "Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaCountry.Column.CountryCode:
SetUsgaCountryColDfn(columnDfn, "Code", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryCode, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCountry.Column.CountryName:
SetUsgaCountryColDfn(columnDfn, "Name", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCountry.Column.ProvincesUpdateAt_Date:
SetUsgaCountryColDfn(columnDfn, "Provinces updated", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_ProvincesUpdateAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
case SaxGolfUsgaCountry.Column.ProvinceCount_All:
SetUsgaCountryColDfn(columnDfn, "Provinces", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colCountry_Province_Count;
break;
case SaxGolfUsgaCountry.Column.ProvinceCount_Active:
SetUsgaCountryColDfn(columnDfn, "Provinces (act)", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colCountry_Province_Active_Count;
break;
case SaxGolfUsgaCountry.Column.FacilityCount_All:
SetUsgaCountryColDfn(columnDfn, "Facilities", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colCountry_Facility_Count;
break;
case SaxGolfUsgaCountry.Column.FacilityCount_Active:
SetUsgaCountryColDfn(columnDfn, "Facilities (act)", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colCountry_Facility_Active_Count;
break;
case SaxGolfUsgaCountry.Column.FacilityPercent:
SetUsgaCountryColDfn(columnDfn, "Courses %", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colCountry_Courses_Percent;
break;
//-----------------------------------------------------------
// Common properties.
case SaxGolfUsgaCountry.Column.Notes:
SetUsgaCountryColDfn(columnDfn, "Notes", 240, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Notes);
break;
case SaxGolfUsgaCountry.Column.Flags:
SetUsgaCountryColDfn(columnDfn, "Flags", 60, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxGolfUsgaCountry.Column.Status:
SetUsgaCountryColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaCountry.Column.Status_Desc:
SetUsgaCountryColDfn(columnDfn, "Status", 90, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaCountry.Column.Status_Ind:
SetUsgaCountryColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxGolfUsgaCountry.Column.CreateOn_Date:
SetUsgaCountryColDfn(columnDfn, "Created", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCountry.Column.UpdateOn_Date:
SetUsgaCountryColDfn(columnDfn, "Updated", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUsgaCountryQueryFilter(SaxGolfUsgaCountry.Params prm)
{
List<String> filter = new List<String>();
String col_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry);
// Item Ids.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{col_Id} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{col_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Country code.
if (prm.CountryCodesIncluded.Any(item => !StringUtil.IsBlank(item)))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryCode, aliasUsgaCountry)} In ({prm.CountryCodesIncluded.Select(item => DbQuery.FormatForCondition(item)).Concat(",","'","'")})");
if (!StringUtil.IsBlank(prm.CountryFilter))
{
// Split filter into words.
List<String> filterWords = prm.CountryFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> countryFilter = new List<String>();
countryFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryCode, aliasUsgaCountry)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
countryFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName, aliasUsgaCountry)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
filter.Add(countryFilter.Concat(" OR ", "(", ")"));
}
}
// Name.
if (!StringUtil.IsEmpty(prm.CountryNameFull))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName, aliasUsgaCountry)}='{DbQuery.FormatForCondition(prm.CountryNameFull)}'");
if (!StringUtil.IsEmpty(prm.CountryNamePartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName, aliasUsgaCountry)} LIKE '%{DbQuery.FormatForLike(prm.CountryNamePartial)}%'");
// Flags.
if (prm.PriorityFlagState != SacsHierarchyItem.Params.FlagState.Either)
filter.Add(DbQuery.BuildBitMappedFilter(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Flags, aliasUsgaCountry), SaxGolfUsgaCountry.Flag_Priority, prm.PriorityFlagState == SacsHierarchyItem.Params.FlagState.True));
// Associated data.
if (prm.HasProvinces != SacsHierarchyItem.Params.BoolState.Either)
{
String existsPrefix = (prm.HasProvinces == SacsHierarchyItem.Params.BoolState.True ? "" : "Not ");
filter.Add($"{existsPrefix} Exists (Select 1 From {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince)} Where {SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId)}={col_Id})");
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Notes, aliasUsgaCountry)} LIKE '%{DbQuery.FormatForLike(prm.NotesPartial)}%'");
// Status.
if (prm.StatusCat != SaxGolfUsgaCountry.StatusCat.Any)
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Status, aliasUsgaCountry)} {GetUsgaCountryStatusCatFilterCondition(prm.StatusCat)}");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
internal static String GetUsgaCountryStatusCatFilterCondition(SaxGolfUsgaCountry.StatusCat statusCat)
{
if (statusCat == SaxGolfUsgaCountry.StatusCat.ActiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Active)}'";
if (statusCat == SaxGolfUsgaCountry.StatusCat.InactiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Inactive)}'";
if (statusCat == SaxGolfUsgaCountry.StatusCat.NotDeleted)
return $"!='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
if (statusCat == SaxGolfUsgaCountry.StatusCat.DeletedOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
return "";
}
// Item sort columns.
public List<String> GetUsgaCountrySortColumns(SaxGolfUsgaCountry.Params prm)
{
// Sort sequence:
HashSet<String> sortColumnNames = new HashSet<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UsgaCountry columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Reference.GetTableForColumn((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Reference.TableIdx.UsgaCountry)
{
sortCol = SaxDbDfn_Reference.GetColumnNameQual((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn, aliasUsgaCountry);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
AddRandomSortColumn(prm, sortColumnNames);
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry) + " ASC");
}
return sortColumnNames.ToList();
}
//-------------------------------------------------------------------
// Item count.
private long GetUsgaCountryCount(String filter)
{
ClearErrorState();
return ReferenceDatabase.GetRowCount(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCountry) + " As " + aliasUsgaCountry, filter);
}
public override long GetUsgaCountryCount(SaxGolfUsgaCountry.Params prm)
{
ClearErrorState();
return GetUsgaCountryCount(GetUsgaCountryQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxGolfUsgaCountry> GetUsgaCountryList(SaxGolfUsgaCountry.Params prm)
{
ClearErrorState();
List<SaxGolfUsgaCountry> userRoles = new List<SaxGolfUsgaCountry>();
DbQuery qry = new DbQuery(ReferenceDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCountry), aliasUsgaCountry);
Golf_UsgaCountry_Db dbUsgaCountry = new Golf_UsgaCountry_Db(ReferenceDbInfo);
qry.Columns.AddRange(dbUsgaCountry.ExistingColumnNames);
qry.Filters.AddRange(GetUsgaCountryQueryFilter(prm));
qry.OrderBy.AddRange(GetUsgaCountrySortColumns(prm));
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUsgaCountry = new Golf_UsgaCountry_Db(ReferenceDbInfo);
dbUsgaCountry.PopulateFrom(dbDataReader);
userRoles.Add(CreateUsgaCountry(dbUsgaCountry));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRoles;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUsgaCountryQuery(List<ColumnDfn> columns, SaxGolfUsgaCountry.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(ReferenceDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCountry), aliasUsgaCountry);
// Add columns as defined in query list.
if (columns.HasId(SaxGolfUsgaCountry.Column.Id))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry));
if (columns.HasId(SaxGolfUsgaCountry.Column.CountryCode))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryCode, aliasUsgaCountry));
if (columns.HasId(SaxGolfUsgaCountry.Column.CountryName))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName, aliasUsgaCountry));
if (columns.HasId(SaxGolfUsgaCountry.Column.ProvincesUpdateAt_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_ProvincesUpdateAt, aliasUsgaCountry));
// Common properties.
if (columns.HasId(SaxGolfUsgaCountry.Column.Notes))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Notes, aliasUsgaCountry));
if (columns.HasId(SaxGolfUsgaCountry.Column.Flags))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Flags, aliasUsgaCountry));
if (columns.HasId(SaxGolfUsgaCountry.Column.Status) || columns.HasId(SaxGolfUsgaCountry.Column.Status_Desc) || columns.HasId(SaxGolfUsgaCountry.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Status, aliasUsgaCountry));
if (columns.HasId(SaxGolfUsgaCountry.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CreateOn, aliasUsgaCountry));
if (columns.HasId(SaxGolfUsgaCountry.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_UpdateOn, aliasUsgaCountry));
//---------------------------------------------------------------------
// Province count.
if (columns.HasId(SaxGolfUsgaCountry.Column.ProvinceCount_All))
{
String aliasProvince = "aCtyPrv_Count";
DbQuery queryProvince = new DbQuery(CoreDatabase.DbmsType);
queryProvince.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince), aliasProvince);
queryProvince.Columns.Add("Count(*)");
queryProvince.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, aliasProvince) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry));
query.Columns.Add("(" + queryProvince.BuildQuery() + ")", colCountry_Province_Count);
}
// Active Province count.
if (columns.HasId(SaxGolfUsgaCountry.Column.ProvinceCount_Active))
{
String aliasProvince = "aCtyPrvAct_Count";
DbQuery queryProvince = new DbQuery(CoreDatabase.DbmsType);
queryProvince.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince), aliasProvince);
queryProvince.Columns.Add("Count(*)");
queryProvince.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, aliasProvince) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry));
queryProvince.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status, aliasProvince) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
query.Columns.Add("(" + queryProvince.BuildQuery() + ")", colCountry_Province_Active_Count);
}
//---------------------------------------------------------------------
// Facility count.
if (columns.HasId(SaxGolfUsgaCountry.Column.ProvinceCount_All))
{
String aliasProvince = "aCtyFty_Count_Prv";
DbQuery queryProvince = new DbQuery(CoreDatabase.DbmsType);
queryProvince.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince), aliasProvince);
queryProvince.Columns.Add("Count(*)");
queryProvince.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, aliasProvince) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry));
// Join to Facility.
String aliasFacility = "aCtyFty_Count_Fty";
DbQueryJoin joinFacility = new DbQueryJoin(DbJoinType.Inner);
joinFacility.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasFacility);
joinFacility.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasFacility) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasProvince));
queryProvince.Joins.Add(joinFacility);
// Construct sub-query.
query.Columns.Add("(" + queryProvince.BuildQuery() + ")", colCountry_Facility_Count);
}
// Active Facility count.
if (columns.HasId(SaxGolfUsgaCountry.Column.ProvinceCount_Active))
{
String aliasProvince = "aCtyFty_Count_Prv";
DbQuery queryProvince = new DbQuery(CoreDatabase.DbmsType);
queryProvince.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince), aliasProvince);
queryProvince.Columns.Add("Count(*)");
queryProvince.Filters.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, aliasProvince)}={SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry)}");
queryProvince.Filters.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status, aliasProvince)}='{SacsSystem.GetStatusCode(SaStatus.Active)}'");
// Join to Facility.
String aliasFacility = "aCtyFty_Count_Fty";
DbQueryJoin joinFacility = new DbQueryJoin(DbJoinType.Inner);
joinFacility.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasFacility);
joinFacility.Filters.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasFacility)}={SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasProvince)}");
joinFacility.Filters.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status, aliasFacility)}='{SacsSystem.GetStatusCode(SaStatus.Active)}'");
queryProvince.Joins.Add(joinFacility);
// Construct sub-query.
query.Columns.Add("(" + queryProvince.BuildQuery() + ")", colCountry_Facility_Active_Count);
}
//---------------------------------------------------------------------
// Facility population %.
if (columns.HasId(SaxGolfUsgaCountry.Column.FacilityPercent))
{
// Sub query to count provinces & provinces with facilities, and work out the percent with facilities.
String alias_Province = "prv";
String alias_Facility = "fty";
String table_Province = $"{SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince)} {alias_Province}";
String table_Facility = $"{SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility)} {alias_Facility}";
String col_Country_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaCountry);
String col_Province_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, alias_Province);
String col_Province_CountryId = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, alias_Province);
String col_Facility_ProvinceId = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, alias_Facility);
String name_ProvinceCount = "ProvinceCount";
String name_ProvincesWithFacilities = "ProvincesWithFacilities";
List<String> subQuery = new List<String>();
subQuery.Add($"Select Convert (decimal(9,2), Case When {name_ProvinceCount} > 0 Then 100.0 * (1.0 * {name_ProvincesWithFacilities} / {name_ProvinceCount}) Else 0 End)");
subQuery.Add($"From");
subQuery.Add($"(");
subQuery.Add($"Select");
subQuery.Add($"{name_ProvinceCount} = (select Count(*) From {table_Province} Where {col_Province_CountryId}={col_Country_Id}),");
subQuery.Add($"{name_ProvincesWithFacilities} = (select Count(*) From {table_Province} Where {col_Province_CountryId}={col_Country_Id} and {col_Province_Id} in (Select {col_Facility_ProvinceId} from {table_Facility}))");
subQuery.Add($") dat");
query.Columns.Add($"({subQuery.Concat(" ")})", colCountry_Courses_Percent);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUsgaCountryQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUsgaCountrySortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(ReferenceDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,810 @@
using DocumentFormat.OpenXml.Office2016.Excel;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Dbas.Data;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Internal.Reference;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
namespace Saxonite.Net.Standard.Dbas.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr_Dbas
{
//*******************************************************************
// Support Mgr - User Report
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxGolfUsgaCourse usgaCourse)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(usgaCourse.Id)),
new StringPair("Facility Id",SysId.ToString(usgaCourse.FacilityId)),
new StringPair("Usga Course Id",SysId.ToString(usgaCourse.UsgaCourseId)),
new StringPair("Caption",usgaCourse.Caption),
new StringPair("Status",usgaCourse.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxGolfUsgaCourse CreateUsgaCourse(SysId facilityId)
{
ClearErrorState();
return new SaxGolfUsgaCourse_Dbas(ReferenceDatabase, null, facilityId, 0);
}
private SaxGolfUsgaCourse_Dbas CreateUsgaCourse(Golf_UsgaCourse_Db dbUsgaCourse)
{
ClearErrorState();
SaxGolfUsgaCourse_Dbas usgaCourse = new SaxGolfUsgaCourse_Dbas(ReferenceDatabase, new SysId(dbUsgaCourse._Id), new SysId(dbUsgaCourse._FacilityId), (ushort)dbUsgaCourse._Flags);
PopulateFrom(dbUsgaCourse, usgaCourse);
return usgaCourse;
}
//-------------------------------------------------------------------
// Get item.
public override SaxGolfUsgaCourse GetUsgaCourse(SaxGolfUsgaCourse.Params prm)
{
ClearErrorState();
return GetUsgaCourse(GetUsgaCourseQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxGolfUsgaCourse GetUsgaCourse(String filter)
{
ClearErrorState();
long count = GetUsgaCourseCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxGolfUsgaCourse usgaCourse = null;
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaCourse_Db dbUsgaCourse = new Golf_UsgaCourse_Db(ReferenceDbInfo);
dbUsgaCourse.PopulateFrom(dbCommand, aliasUsgaCourse, filter);
usgaCourse = CreateUsgaCourse(dbUsgaCourse);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return usgaCourse;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUsgaCourseData(SaxGolfUsgaCourse.Data data, SaxGolfUsgaCourse.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUsgaCourseData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUsgaCourse(SaxGolfUsgaCourse usgaCourse, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUsgaCourse";
ClearErrorState();
if (!IsValidUsgaCourse(usgaCourse)) return false;
if (SysId.IsValid(usgaCourse.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaCourse_Db dbUsgaCourse = new Golf_UsgaCourse_Db(ReferenceDbInfo);
PopulateTo(dbUsgaCourse, usgaCourse, dbUpdateInfo);
if (Golf_UsgaCourse_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUsgaCourse._Id = ReferenceDatabase.GetNextIdFromTable("UsgaCourse");
}
dbUsgaCourse.ExecuteInsertCommand(dbCommand);
usgaCourse.Id = new SysId(dbUsgaCourse._Id);
usgaCourse.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(usgaCourse).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUsgaCourse(SaxGolfUsgaCourse usgaCourse, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUsgaCourse";
ClearErrorState();
if (!IsValidUsgaCourse(usgaCourse)) return false;
if (!SysId.IsValid(usgaCourse.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!usgaCourse.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(usgaCourse).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaCourse_Db dbUsgaCourse = new Golf_UsgaCourse_Db(ReferenceDbInfo);
dbUsgaCourse.PopulateFrom(dbCommand, aliasUsgaCourse, "Id=" + SysId.ToString(usgaCourse.Id));
// ToDo SaxUpdateLogItemMonitor_UsgaCourse updateLogMonitor = new SaxUpdateLogItemMonitor_UsgaCourse(SessionContext, CreateUsgaCourse(dbUsgaCourse), dbUpdateInfo);
// Update item.
PopulateTo(dbUsgaCourse, usgaCourse, dbUpdateInfo);
dbUsgaCourse.ExecuteUpdateCommand(dbCommand);
usgaCourse.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(usgaCourse).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(usgaCourse);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UsgaCourseCanBeDeleted(SaxGolfUsgaCourse usgaCourse)
{
ClearErrorState();
if (!base.UsgaCourseCanBeDeleted(usgaCourse)) return false;
return true;
}
public override bool DeleteUsgaCourse(SaxGolfUsgaCourse usgaCourse, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUsgaCourse";
ClearErrorState();
if (!UsgaCourseCanBeDeleted(usgaCourse)) return false;
// User Roles are logically deleted by changing the status.
usgaCourse.Status = SaStatus.Deleted;
return UpdateUsgaCourse(usgaCourse, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaCourse_Db dbUsgaCourse = new Golf_UsgaCourse_Db(ReferenceDbInfo);
dbUsgaCourse.PopulateFrom(dbCommand, aliasUsgaCourse, "Id=" + usgaCourse.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse) + " WHERE Id=" + SysId.ToString(usgaCourse.Id) + ";";
dbCommand.ExecuteNonQuery();
usgaCourse.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(usgaCourse).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Golf_UsgaCourse_Db dbUsgaCourse, SaxGolfUsgaCourse usgaCourse, DbUpdateInfo dbUpdateInfo)
{
dbUsgaCourse._Id = SysId.ToLong(usgaCourse.Id);
dbUsgaCourse._FacilityId = SysId.ToInt(usgaCourse.FacilityId);
dbUsgaCourse._UsgaCourseId = SysId.ToInt(usgaCourse.UsgaCourseId);
dbUsgaCourse._LegacyCrpCourseId = SysId.ToInt(usgaCourse.LegacyCrpCourseId);
dbUsgaCourse._Caption = usgaCourse.Caption;
dbUsgaCourse._CourseName = usgaCourse.CourseName;
dbUsgaCourse._FullName = usgaCourse.FullName;
dbUsgaCourse._Address1 = usgaCourse.Address1;
dbUsgaCourse._Address2 = usgaCourse.Address2;
dbUsgaCourse._City = usgaCourse.City;
dbUsgaCourse._PostalCode = usgaCourse.PostalCode;
dbUsgaCourse._Latitude = usgaCourse.Latitude;
dbUsgaCourse._Longitude = usgaCourse.Longitude;
dbUsgaCourse._Email = usgaCourse.Email;
dbUsgaCourse._Telephone = usgaCourse.Telephone;
dbUsgaCourse._MarkersUpdateAt = usgaCourse.MarkersUpdateAt;
dbUsgaCourse._MarkersData = usgaCourse.MarkersData;
// Common.
dbUsgaCourse._Notes = usgaCourse.Notes;
dbUsgaCourse._Status = SacsSystem.GetStatusCode(usgaCourse.Status);
dbUsgaCourse._Flags = (short)usgaCourse.Flags;
if (!SysId.IsValid(usgaCourse.Id))
{
dbUsgaCourse._CreateOn = DateTime.Now;
dbUsgaCourse._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaCourse._CreateHost = dbUpdateInfo.Host;
}
dbUsgaCourse._UpdateOn = DateTime.Now;
dbUsgaCourse._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaCourse._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Golf_UsgaCourse_Db dbUsgaCourse, SaxGolfUsgaCourse usgaCourse)
{
//usgaCourse.Id = new SysId(dbUsgaCourse._Id);
usgaCourse.FacilityId = new SysId(dbUsgaCourse._FacilityId);
usgaCourse.UsgaCourseId = new SysId(dbUsgaCourse._UsgaCourseId);
usgaCourse.LegacyCrpCourseId = new SysId(dbUsgaCourse._LegacyCrpCourseId);
usgaCourse.Caption = dbUsgaCourse._Caption;
usgaCourse.CourseName = dbUsgaCourse._CourseName;
usgaCourse.FullName = dbUsgaCourse._FullName;
usgaCourse.Address1 = dbUsgaCourse._Address1;
usgaCourse.Address2 = dbUsgaCourse._Address2;
usgaCourse.City = dbUsgaCourse._City;
usgaCourse.PostalCode = dbUsgaCourse._PostalCode;
usgaCourse.Latitude = dbUsgaCourse._Latitude;
usgaCourse.Longitude = dbUsgaCourse._Longitude;
usgaCourse.Email = dbUsgaCourse._Email;
usgaCourse.Telephone = dbUsgaCourse._Telephone;
usgaCourse.MarkersUpdateAt = dbUsgaCourse._MarkersUpdateAt;
usgaCourse.MarkersData = dbUsgaCourse._MarkersData;
// Common.
usgaCourse.Notes = dbUsgaCourse._Notes;
usgaCourse.Status = SacsSystem.GetStatusForCode(dbUsgaCourse._Status);
usgaCourse.SetCreateStamp(dbUsgaCourse._CreateOn, new SysId(dbUsgaCourse._CreateBy), dbUsgaCourse._CreateHost);
usgaCourse.SetUpdateStamp(dbUsgaCourse._UpdateOn, new SysId(dbUsgaCourse._UpdateBy), dbUsgaCourse._UpdateHost);
usgaCourse.AcceptChanges();
}
//-------------------------------------------------------------------
// Bulk updates.
/// <summary>
/// Bulk update USGA Courses.
/// <para>- Facility Id must be supplied to identify parent.</para>
/// <para>- Course Id must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per course rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public override bool BulkUpdateUsgaCourses(List<UsgaCourseData> courses, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
List<UsgaCourseData> coursesToUpdate = new List<UsgaCourseData>();
// Validate supplied data.
foreach (UsgaCourseData course in courses)
{
// Validate course properties.
// Facility and Course Codes are mandatory, other values only validated if non-null.
if (!SysId.IsValid(course.UsgaFacilityId)) return SetErrorState("Facility Id must be supplied");
if (!SysId.IsValid(course.UsgaCourseId)) return SetErrorState("USGA Course Id must be supplied");
if (course.Caption != null && !IsValidValue(course.Caption, "caption", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Caption), true)) return false;
if (course.CourseName != null && !IsValidValue(course.CourseName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CourseName))) return false;
if (course.FullName != null && !IsValidValue(course.FullName, "full name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FullName))) return false;
if (course.Address1 != null && !IsValidValue(course.Address1, "address 1", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address1))) return false;
if (course.Address2 != null && !IsValidValue(course.Address2, "address 2", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address2))) return false;
if (course.City != null && !IsValidValue(course.City, "city", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_City))) return false;
if (course.Email != null && !IsValidValue(course.Email, "email", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Email))) return false;
if (course.Telephone != null && !IsValidValue(course.Telephone, "telephone", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Telephone))) return false;
coursesToUpdate.Add(course);
}
int MaxBulkUpdateBatchSize = 64;
int batchSize = coursesToUpdate.Any() ? (int)Math.Ceiling(coursesToUpdate.Count() / Math.Ceiling((double)coursesToUpdate.Count() / MaxBulkUpdateBatchSize)) : MaxBulkUpdateBatchSize;
while (coursesToUpdate.Any())
{
List<String> query = new List<string>();
query.Add($"Declare @statusActive VarChar(3) = '{SacsSystem.GetStatusCode(SaxGolfUsgaCourse.DefaultStatus)}';");
query.Add($"Declare @updateOn DateTime = GetDate();");
query.Add($"Declare @updateBy Int = {SysId.ToLong(dbUpdateInfo.UserId)};");
query.Add($"Declare @updateHost VarChar(100) = '{DbQuery.FormatForCondition(dbUpdateInfo.Host)}';");
query.Add("Merge");
query.Add($"Into {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse)} uCrs");
query.Add("Using");
query.Add("(");
query.Add("Select dFty.Id FacilityId, dCrs.UsgaFacilityId, dCrs.UsgaCourseId, dCrs.LegacyCrpCourseId, dCrs.Caption, dCrs.CourseName, dCrs.FullName, dCrs.Address1, dCrs.Address2, dCrs.City, dCrs.PostalCode, dCrs.Email, dCrs.Telephone");
query.Add("From");
query.Add("(");
query.Add("Select 0 UsgaFacilityId, 0 UsgaCourseId, 0 LegacyCrpCourseId, '' Caption, '' CourseName, '' FullName, '' Address1, '' Address2, '' City, '' PostalCode, '' Email, '' Telephone");
foreach (UsgaCourseData course in coursesToUpdate.ExtractRange(0, batchSize))
query.Add($"Union Select {course.UsgaFacilityId}, {course.UsgaCourseId}, " +
(SysId.IsValid(course.LegacyCrpCourseId) ? $"{course.LegacyCrpCourseId}" : "Null") + "," +
(course.Caption != null ? $"'{DbQuery.FormatForCondition(course.Caption)}'" : "Null") + "," +
(course.CourseName != null ? $"'{DbQuery.FormatForCondition(course.CourseName)}'" : "Null") + "," +
(course.FullName != null ? $"'{DbQuery.FormatForCondition(course.FullName)}'" : "Null") + "," +
(course.Address1 != null ? $"'{DbQuery.FormatForCondition(course.Address1)}'" : "Null") + "," +
(course.Address2 != null ? $"'{DbQuery.FormatForCondition(course.Address2)}'" : "Null") + "," +
(course.City != null ? $"'{DbQuery.FormatForCondition(course.City)}'" : "Null") + "," +
(course.PostalCode != null ? $"'{DbQuery.FormatForCondition(course.PostalCode)}'" : "Null") + "," +
(course.Email != null ? $"'{DbQuery.FormatForCondition(course.Email)}'" : "Null") + "," +
(course.Telephone != null ? $"'{DbQuery.FormatForCondition(course.Telephone)}'" : "Null"));
query.Add(") dCrs");
query.Add($"Inner Join {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility)} dFty On dFty.UsgaFacilityId=dCrs.UsgaFacilityId");
query.Add(") dCrs");
query.Add("On uCrs.FacilityId=dCrs.FacilityId And uCrs.UsgaCourseId=dCrs.UsgaCourseId");
query.Add("When Matched And ((dCrs.LegacyCrpCourseId Is Not Null And uCrs.LegacyCrpCourseId!=dCrs.LegacyCrpCourseId) Or (dCrs.Caption Is Not Null And uCrs.Caption!=dCrs.Caption) Or (dCrs.CourseName Is Not Null And uCrs.CourseName!=dCrs.CourseName) Or (dCrs.FullName Is Not Null And uCrs.FullName!=dCrs.FullName) Or (dCrs.Address1 Is Not Null And uCrs.Address1!=dCrs.Address1) Or (dCrs.Address2 Is Not Null And uCrs.Address2!=dCrs.Address2) Or (dCrs.City Is Not Null And uCrs.City!=dCrs.City) Or (dCrs.PostalCode Is Not Null And uCrs.PostalCode!=dCrs.PostalCode) Or (dCrs.Email Is Not Null And uCrs.Email!=dCrs.Email) Or (dCrs.Telephone Is Not Null And uCrs.Telephone!=dCrs.Telephone) Or uCrs.Status!=@statusActive)");
query.Add("Then Update Set");
query.Add(" LegacyCrpCourseId=Coalesce(dCrs.LegacyCrpCourseId,uCrs.LegacyCrpCourseId),");
query.Add(" Caption=Coalesce(dCrs.Caption,uCrs.Caption),");
query.Add(" CourseName=Coalesce(dCrs.CourseName,uCrs.CourseName),");
query.Add(" FullName=Coalesce(dCrs.FullName,uCrs.FullName),");
query.Add(" Address1=Coalesce(dCrs.Address1,uCrs.Address1),");
query.Add(" Address2=Coalesce(dCrs.Address2,uCrs.Address2),");
query.Add(" City=Coalesce(dCrs.City,uCrs.City),");
query.Add(" PostalCode=Coalesce(dCrs.PostalCode,uCrs.PostalCode),");
query.Add(" Email=Coalesce(dCrs.Email,uCrs.Email),");
query.Add(" Telephone=Coalesce(dCrs.Telephone,uCrs.Telephone),");
query.Add(" Status=@statusActive,");
query.Add(" UpdateOn=@updateOn,");
query.Add(" UpdateBy=@updateBy,");
query.Add(" UpdateHost=@updateHost");
query.Add("When Not Matched And Len(Coalesce(dCrs.Caption,''))>0");
query.Add("Then Insert (FacilityId,UsgaCourseId,LegacyCrpCourseId,Caption,CourseName,FullName,Address1,Address2,City,PostalCode,Email,Telephone,MarkersData,Notes,Flags,Status,CreateOn,CreateBy,CreateHost,UpdateOn,UpdateBy,UpdateHost)");
query.Add($"Values (dCrs.FacilityId,dCrs.UsgaCourseId,Coalesce(dCrs.LegacyCrpCourseId,0),dCrs.Caption,Coalesce(dCrs.CourseName,''),Coalesce(dCrs.FullName,''),Coalesce(dCrs.Address1,''),Coalesce(dCrs.Address2,''),Coalesce(dCrs.City,''),Coalesce(dCrs.PostalCode,''),Coalesce(dCrs.Email,''),Coalesce(dCrs.Telephone,''),'','',0,@statusActive,@updateOn,@updateBy,@updateHost,@updateOn,@updateBy,@updateHost)");
query.Add(";");
//SaLogger.Info($"{SysUtil.Fn} Bulk USGA Course update query:\n\t{query.Concat("\n\t")}");
try
{
int result = ReferenceDatabase.ExecuteNonQuery(query.Concat("\n"));
if (ReferenceDatabase.HasErrorState())
SaLogger.Warn($"{SysUtil.Fn} Error executing bulk USGA Course update - {ReferenceDatabase.ErrorStateMessage}");
}
catch (Exception exc)
{
SaLogger.Warn(SysUtil.Fn + " " + ExceptionUtil.GetLogMessage(exc, " executing bulk USGA Course update"));
}
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUsgaCourse = "UsgCrs";
private static readonly String aliasUsgaCourse_Facility = "UsgCrs_Cty";
private static readonly String prefixUsgaCourse_Facility = aliasUsgaCourse_Facility + "_";
private static readonly String colCourse_Marker_Count = "Crs_Mkr_Count";
private static readonly String colCourse_Marker_Active_Count = "Crs_Mkr_Act_Count";
private void SetUsgaCourseColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Reference.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Reference.GetTableForColumn(dbCol) == SaxDbDfn_Reference.TableIdx.UsgaCourse)
alias = aliasUsgaCourse;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Reference.GetColumnName(dbCol, false), SaxDbDfn_Reference.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Reference.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Reference.GetColTextLen(dbCol);
}
public override ColumnDfn GetUsgaCourseColumnDfn(SaxGolfUsgaCourse.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxGolfUsgaCourse.Column.Pos:
SetUsgaCourseColDfn(columnDfn, "Pos", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxGolfUsgaCourse.Column.Id:
SetUsgaCourseColDfn(columnDfn, "Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaCourse.Column.FacilityId:
SetUsgaCourseColDfn(columnDfn, "Facility #", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Facility_Name:
SetUsgaCourseColDfn(columnDfn, "Facility", 120, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName, ColumnAlignment.Center, DataValue.DataType.String, aliasUsgaCourse_Facility, prefixUsgaCourse_Facility);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaCourse.Column.UsgaCourseId:
SetUsgaCourseColDfn(columnDfn, "Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_UsgaCourseId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.LegacyCrpCourseId:
SetUsgaCourseColDfn(columnDfn, "CRP Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_LegacyCrpCourseId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Caption:
SetUsgaCourseColDfn(columnDfn, "Caption", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Caption, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.CourseName:
SetUsgaCourseColDfn(columnDfn, "Name", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CourseName, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.FullName:
SetUsgaCourseColDfn(columnDfn, "Full Name", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FullName, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Address1:
SetUsgaCourseColDfn(columnDfn, "Address 1", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address1, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Address2:
SetUsgaCourseColDfn(columnDfn, "Address 2", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address2, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.City:
SetUsgaCourseColDfn(columnDfn, "City", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_City, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Email:
SetUsgaCourseColDfn(columnDfn, "Email", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Email, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Telephone:
SetUsgaCourseColDfn(columnDfn, "Telephone", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Telephone, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.MarkersUpdateOn_Date:
SetUsgaCourseColDfn(columnDfn, "Markers updated", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_MarkersUpdateAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
case SaxGolfUsgaCourse.Column.MarkerCount_All:
SetUsgaProvinceColDfn(columnDfn, "Markers", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colCourse_Marker_Count;
break;
case SaxGolfUsgaCourse.Column.MarkerCount_Active:
SetUsgaProvinceColDfn(columnDfn, "Markers (act)", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colCourse_Marker_Active_Count;
break;
//-----------------------------------------------------------
// Common properties.
case SaxGolfUsgaCourse.Column.Notes:
SetUsgaCourseColDfn(columnDfn, "Notes", 240, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Notes);
break;
case SaxGolfUsgaCourse.Column.Flags:
SetUsgaCourseColDfn(columnDfn, "Flags", 60, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Status:
SetUsgaCourseColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Status, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Status_Desc:
SetUsgaCourseColDfn(columnDfn, "Status", 90, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Status, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.Status_Ind:
SetUsgaCourseColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.CreateOn_Date:
SetUsgaCourseColDfn(columnDfn, "Created", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaCourse.Column.UpdateOn_Date:
SetUsgaCourseColDfn(columnDfn, "Updated", 80, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUsgaCourseQueryFilter(SaxGolfUsgaCourse.Params prm)
{
List<String> filter = new List<String>();
String col_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, aliasUsgaCourse);
String col_FacilityId = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId, aliasUsgaCourse);
String col_CourseName = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CourseName, aliasUsgaCourse);
// Item Ids.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{col_Id} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{col_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Provinces.
if (prm.ProvinceIdsIncluded.HasValidIds())
{
String provinceIdsIncluded = prm.ProvinceIdsIncluded.Concat(",");
if (StringUtil.IsBlank(prm.Alias_Province))
filter.Add($"{col_FacilityId} IN (SELECT Id FROM {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility)} WHERE ProvinceId IN ({provinceIdsIncluded}))");
else
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, prm.Alias_Province)} IN ({provinceIdsIncluded})");
}
// Facilities.
if (prm.FacilityIdsIncluded.HasValidIds())
filter.Add($"{col_FacilityId} IN ({prm.FacilityIdsIncluded.Concat(",")})");
// USGA Course Ids.
if (prm.UsgaCourseIdsIncluded.HasValidIds())
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_UsgaCourseId, aliasUsgaCourse)} IN ({prm.UsgaCourseIdsIncluded.Concat(",")})");
if (!StringUtil.IsBlank(prm.CourseFilter))
{
// Split filter into words.
List<String> filterWords = prm.CourseFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> courseFilter = new List<String>();
courseFilter.Add($"{col_CourseName} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
courseFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FullName, aliasUsgaCourse)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
courseFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address1, aliasUsgaCourse)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
courseFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address2, aliasUsgaCourse)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
courseFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_City, aliasUsgaCourse)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
filter.Add(courseFilter.Concat(" OR ", "(", ")"));
}
}
// Name.
if (!StringUtil.IsEmpty(prm.CourseNameFull))
filter.Add($"{col_CourseName}='{DbQuery.FormatForCondition(prm.CourseNameFull)}'");
if (!StringUtil.IsEmpty(prm.CourseNamePartial))
filter.Add($"{col_CourseName} LIKE '%{DbQuery.FormatForLike(prm.CourseNamePartial)}%'");
// Markers data.
if (prm.HasMarkersData != SacsHierarchyItem.Params.BoolState.Either)
{
String lenComparison = (prm.HasMarkers == SacsHierarchyItem.Params.BoolState.True ? ">0" : "<1");
filter.Add($"Len(LTrim(RTrim(IsNull({SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker)})))){lenComparison}");
}
// Flags.
if (prm.PriorityFlagState != SacsHierarchyItem.Params.FlagState.Either)
filter.Add(DbQuery.BuildBitMappedFilter(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Flags, aliasUsgaCourse), SaxGolfUsgaCourse.Flag_Priority, prm.PriorityFlagState == SacsHierarchyItem.Params.FlagState.True));
// Associated data.
if (prm.HasMarkers != SacsHierarchyItem.Params.BoolState.Either)
{
String existsPrefix = (prm.HasMarkers == SacsHierarchyItem.Params.BoolState.True ? "" : "Not ");
filter.Add($"{existsPrefix} Exists (Select 1 From {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker)} Where {SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId)}={col_Id})");
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Notes, aliasUsgaCourse)} LIKE '%{DbQuery.FormatForLike(prm.NotesPartial)}%'");
// Status.
if (prm.StatusCat != SaxGolfUsgaCourse.StatusCat.Any)
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Status, aliasUsgaCourse)} {GetUsgaCourseStatusCatFilterCondition(prm.StatusCat)}");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
internal static String GetUsgaCourseStatusCatFilterCondition(SaxGolfUsgaCourse.StatusCat statusCat)
{
if (statusCat == SaxGolfUsgaCourse.StatusCat.ActiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Active)}'";
if (statusCat == SaxGolfUsgaCourse.StatusCat.InactiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Inactive)}'";
if (statusCat == SaxGolfUsgaCourse.StatusCat.NotDeleted)
return $"!='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
if (statusCat == SaxGolfUsgaCourse.StatusCat.DeletedOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
return "";
}
// Item sort columns.
public HashSet<String> GetUsgaCourseSortColumns(SaxGolfUsgaCourse.Params prm)
{
// Sort sequence:
HashSet<String> sortColumnNames = new HashSet<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UsgaCourse columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Reference.GetTableForColumn((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Reference.TableIdx.UsgaCourse)
{
sortCol = SaxDbDfn_Reference.GetColumnNameQual((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn, aliasUsgaCourse);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
AddRandomSortColumn(prm, sortColumnNames);
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, aliasUsgaCourse) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUsgaCourseCount(String filter)
{
ClearErrorState();
return ReferenceDatabase.GetRowCount(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse) + " As " + aliasUsgaCourse, filter);
}
public override long GetUsgaCourseCount(SaxGolfUsgaCourse.Params prm)
{
ClearErrorState();
return GetUsgaCourseCount(GetUsgaCourseQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxGolfUsgaCourse> GetUsgaCourseList(SaxGolfUsgaCourse.Params prm)
{
ClearErrorState();
List<SaxGolfUsgaCourse> userRoles = new List<SaxGolfUsgaCourse>();
DbQuery qry = new DbQuery(ReferenceDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse), aliasUsgaCourse);
Golf_UsgaCourse_Db dbUsgaCourse = new Golf_UsgaCourse_Db(ReferenceDbInfo);
qry.Columns.AddRange(dbUsgaCourse.ExistingColumnNames);
qry.Filters.AddRange(GetUsgaCourseQueryFilter(prm));
qry.OrderBy.AddRange(GetUsgaCourseSortColumns(prm));
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUsgaCourse = new Golf_UsgaCourse_Db(ReferenceDbInfo);
dbUsgaCourse.PopulateFrom(dbDataReader);
userRoles.Add(CreateUsgaCourse(dbUsgaCourse));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRoles;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUsgaCourseQuery(List<ColumnDfn> columns, SaxGolfUsgaCourse.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(ReferenceDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse), aliasUsgaCourse);
// Add columns as defined in query list.
if (columns.HasId(SaxGolfUsgaCourse.Column.Id))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, aliasUsgaCourse));
bool hasFacilityCols = (columns.HasId(SaxGolfUsgaCourse.Column.Facility_Name));
if (columns.HasId(SaxGolfUsgaCourse.Column.FacilityId) || hasFacilityCols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.UsgaCourseId))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_UsgaCourseId, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.LegacyCrpCourseId))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_LegacyCrpCourseId, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.Caption))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Caption, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.CourseName))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CourseName, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.FullName))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FullName, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.Address1))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address1, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.Address2))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Address2, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.City))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_City, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.Email))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Email, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.Telephone))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Telephone, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.MarkersUpdateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_MarkersUpdateAt, aliasUsgaCourse));
// Common properties.
if (columns.HasId(SaxGolfUsgaCourse.Column.Notes))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Notes, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.Flags))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Flags, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.Status) || columns.HasId(SaxGolfUsgaCourse.Column.Status_Desc) || columns.HasId(SaxGolfUsgaCourse.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Status, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CreateOn, aliasUsgaCourse));
if (columns.HasId(SaxGolfUsgaCourse.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_UpdateOn, aliasUsgaCourse));
//---------------------------------------------------------------------
// Facility.
if (hasFacilityCols)
{
DbQueryJoin joinFacility = new DbQueryJoin(DbJoinType.LeftOuter);
joinFacility.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasUsgaCourse_Facility);
joinFacility.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, aliasUsgaCourse_Facility) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId, aliasUsgaCourse));
query.Joins.Add(joinFacility);
List<SaxDbDfn_Reference.ColumnIdx> cols = new List<SaxDbDfn_Reference.ColumnIdx>();
cols.Add(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_UsgaFacilityId);
cols.Add(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(col, aliasUsgaCourse_Facility), prefixUsgaCourse_Facility + SaxDbDfn_Reference.GetColumnName(col, false));
prm.Alias_Facility = aliasUsgaCourse_Facility;
}
//---------------------------------------------------------------------
// Marker count.
if (columns.HasId(SaxGolfUsgaCourse.Column.MarkerCount_All))
{
String aliasMarker = "aCrsMkr_Count";
DbQuery queryMarker = new DbQuery(CoreDatabase.DbmsType);
queryMarker.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker), aliasMarker);
queryMarker.Columns.Add("Count(*)");
queryMarker.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId, aliasMarker) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, aliasUsgaCourse));
query.Columns.Add("(" + queryMarker.BuildQuery() + ")", colCourse_Marker_Count);
}
// Active Marker count.
if (columns.HasId(SaxGolfUsgaCourse.Column.MarkerCount_Active))
{
String aliasMarker = "aCrsMkrAct_Count";
DbQuery queryMarker = new DbQuery(CoreDatabase.DbmsType);
queryMarker.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker), aliasMarker);
queryMarker.Columns.Add("Count(*)");
queryMarker.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId, aliasMarker) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, aliasUsgaCourse));
queryMarker.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Status, aliasMarker) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
query.Columns.Add("(" + queryMarker.BuildQuery() + ")", colCourse_Marker_Active_Count);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUsgaCourseQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUsgaCourseSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(ReferenceDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,667 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Dbas.Data;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Internal.Reference;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
namespace Saxonite.Net.Standard.Dbas.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr_Dbas
{
//*******************************************************************
// Support Mgr - User Report
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxGolfUsgaFacility usgaFacility)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(usgaFacility.Id)),
new StringPair("Province Id",SysId.ToString(usgaFacility.ProvinceId)),
new StringPair("Usga Facility Id",SysId.ToString(usgaFacility.UsgaFacilityId)),
new StringPair("Facility name",usgaFacility.FacilityName),
new StringPair("Status",usgaFacility.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxGolfUsgaFacility CreateUsgaFacility(SysId usgaProvinceId)
{
ClearErrorState();
return new SaxGolfUsgaFacility_Dbas(ReferenceDatabase, null, usgaProvinceId, 0);
}
private SaxGolfUsgaFacility_Dbas CreateUsgaFacility(Golf_UsgaFacility_Db dbUsgaFacility)
{
ClearErrorState();
SaxGolfUsgaFacility_Dbas usgaFacility = new SaxGolfUsgaFacility_Dbas(ReferenceDatabase, new SysId(dbUsgaFacility._Id), new SysId(dbUsgaFacility._ProvinceId), (ushort)dbUsgaFacility._Flags);
PopulateFrom(dbUsgaFacility, usgaFacility);
return usgaFacility;
}
//-------------------------------------------------------------------
// Get item.
public override SaxGolfUsgaFacility GetUsgaFacility(SaxGolfUsgaFacility.Params prm)
{
ClearErrorState();
return GetUsgaFacility(GetUsgaFacilityQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxGolfUsgaFacility GetUsgaFacility(String filter)
{
ClearErrorState();
long count = GetUsgaFacilityCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxGolfUsgaFacility usgaFacility = null;
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaFacility_Db dbUsgaFacility = new Golf_UsgaFacility_Db(ReferenceDbInfo);
dbUsgaFacility.PopulateFrom(dbCommand, aliasUsgaFacility, filter);
usgaFacility = CreateUsgaFacility(dbUsgaFacility);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return usgaFacility;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUsgaFacilityData(SaxGolfUsgaFacility.Data data, SaxGolfUsgaFacility.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUsgaFacilityData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUsgaFacility(SaxGolfUsgaFacility usgaFacility, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUsgaFacility";
ClearErrorState();
if (!IsValidUsgaFacility(usgaFacility)) return false;
if (SysId.IsValid(usgaFacility.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaFacility_Db dbUsgaFacility = new Golf_UsgaFacility_Db(ReferenceDbInfo);
PopulateTo(dbUsgaFacility, usgaFacility, dbUpdateInfo);
if (Golf_UsgaFacility_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUsgaFacility._Id = ReferenceDatabase.GetNextIdFromTable("UsgaFacility");
}
dbUsgaFacility.ExecuteInsertCommand(dbCommand);
usgaFacility.Id = new SysId(dbUsgaFacility._Id);
usgaFacility.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(usgaFacility).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUsgaFacility(SaxGolfUsgaFacility usgaFacility, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUsgaFacility";
ClearErrorState();
if (!IsValidUsgaFacility(usgaFacility)) return false;
if (!SysId.IsValid(usgaFacility.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!usgaFacility.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(usgaFacility).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaFacility_Db dbUsgaFacility = new Golf_UsgaFacility_Db(ReferenceDbInfo);
dbUsgaFacility.PopulateFrom(dbCommand, aliasUsgaFacility, "Id=" + SysId.ToString(usgaFacility.Id));
// ToDo SaxUpdateLogItemMonitor_UsgaFacility updateLogMonitor = new SaxUpdateLogItemMonitor_UsgaFacility(SessionContext, CreateUsgaFacility(dbUsgaFacility), dbUpdateInfo);
// Update item.
PopulateTo(dbUsgaFacility, usgaFacility, dbUpdateInfo);
dbUsgaFacility.ExecuteUpdateCommand(dbCommand);
usgaFacility.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(usgaFacility).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(usgaFacility);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UsgaFacilityCanBeDeleted(SaxGolfUsgaFacility usgaFacility)
{
ClearErrorState();
if (!base.UsgaFacilityCanBeDeleted(usgaFacility)) return false;
return true;
}
public override bool DeleteUsgaFacility(SaxGolfUsgaFacility usgaFacility, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUsgaFacility";
ClearErrorState();
if (!UsgaFacilityCanBeDeleted(usgaFacility)) return false;
// User Roles are logically deleted by changing the status.
usgaFacility.Status = SaStatus.Deleted;
return UpdateUsgaFacility(usgaFacility, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaFacility_Db dbUsgaFacility = new Golf_UsgaFacility_Db(ReferenceDbInfo);
dbUsgaFacility.PopulateFrom(dbCommand, aliasUsgaFacility, "Id=" + usgaFacility.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility) + " WHERE Id=" + SysId.ToString(usgaFacility.Id) + ";";
dbCommand.ExecuteNonQuery();
usgaFacility.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(usgaFacility).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Golf_UsgaFacility_Db dbUsgaFacility, SaxGolfUsgaFacility usgaFacility, DbUpdateInfo dbUpdateInfo)
{
dbUsgaFacility._Id = SysId.ToLong(usgaFacility.Id);
dbUsgaFacility._ProvinceId = SysId.ToInt(usgaFacility.ProvinceId);
dbUsgaFacility._UsgaFacilityId = SysId.ToLong(usgaFacility.UsgaFacilityId);
dbUsgaFacility._FacilityName = usgaFacility.FacilityName;
dbUsgaFacility._Address1 = usgaFacility.Address1;
dbUsgaFacility._Address2 = usgaFacility.Address2;
dbUsgaFacility._City = usgaFacility.City;
dbUsgaFacility._PostalCode = usgaFacility.PostalCode;
dbUsgaFacility._Latitude = usgaFacility.Latitude;
dbUsgaFacility._Longitude = usgaFacility.Longitude;
dbUsgaFacility._Email = usgaFacility.Email;
dbUsgaFacility._Telephone = usgaFacility.Telephone;
// Common.
dbUsgaFacility._Notes = usgaFacility.Notes;
dbUsgaFacility._Status = SacsSystem.GetStatusCode(usgaFacility.Status);
dbUsgaFacility._Flags = (short)usgaFacility.Flags;
if (!SysId.IsValid(usgaFacility.Id))
{
dbUsgaFacility._CreateOn = DateTime.Now;
dbUsgaFacility._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaFacility._CreateHost = dbUpdateInfo.Host;
}
dbUsgaFacility._UpdateOn = DateTime.Now;
dbUsgaFacility._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaFacility._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Golf_UsgaFacility_Db dbUsgaFacility, SaxGolfUsgaFacility usgaFacility)
{
//usgaFacility.Id = new SysId(dbUsgaFacility._Id);
usgaFacility.ProvinceId = new SysId(dbUsgaFacility._ProvinceId);
usgaFacility.UsgaFacilityId = new SysId(dbUsgaFacility._UsgaFacilityId);
usgaFacility.FacilityName = dbUsgaFacility._FacilityName;
usgaFacility.Address1 = dbUsgaFacility._Address1;
usgaFacility.Address2 = dbUsgaFacility._Address2;
usgaFacility.City = dbUsgaFacility._City;
usgaFacility.PostalCode = dbUsgaFacility._PostalCode;
usgaFacility.Latitude = dbUsgaFacility._Latitude;
usgaFacility.Longitude = dbUsgaFacility._Longitude;
usgaFacility.Email = dbUsgaFacility._Email;
usgaFacility.Telephone = dbUsgaFacility._Telephone;
// Common.
usgaFacility.Notes = dbUsgaFacility._Notes;
usgaFacility.Status = SacsSystem.GetStatusForCode(dbUsgaFacility._Status);
usgaFacility.SetCreateStamp(dbUsgaFacility._CreateOn, new SysId(dbUsgaFacility._CreateBy), dbUsgaFacility._CreateHost);
usgaFacility.SetUpdateStamp(dbUsgaFacility._UpdateOn, new SysId(dbUsgaFacility._UpdateBy), dbUsgaFacility._UpdateHost);
usgaFacility.AcceptChanges();
}
//-------------------------------------------------------------------
// Bulk updates.
/// <summary>
/// Bulk update USGA Facilities.
/// <para>- Province code must be supplied to identify parent.</para>
/// <para>- Facility Id must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per facility rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public override bool BulkUpdateUsgaFacilities(List<UsgaFacilityData> facilities, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
List<UsgaFacilityData> facilitiesToUpdate = new List<UsgaFacilityData>();
// Validate supplied data.
foreach (UsgaFacilityData facility in facilities)
{
// Validate facility properties.
// Province and Facility Codes are mandatory, other values only validated if non-null.
if (!IsValidValue(facility.ProvinceCode, "province", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceCode), true)) return false;
if (!SysId.IsValid(facility.UsgaFacilityId)) return SetErrorState("USGA Facility Id must be supplied");
if (facility.FacilityName != null && !IsValidValue(facility.FacilityName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName))) return false;
if (facility.Address1 != null && !IsValidValue(facility.Address1, "address 1", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Address1))) return false;
if (facility.Address2 != null && !IsValidValue(facility.Address2, "address 2", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Address2))) return false;
if (facility.City != null && !IsValidValue(facility.City, "city", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_City))) return false;
if (facility.Email != null && !IsValidValue(facility.Email, "email", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Email))) return false;
if (facility.Telephone != null && !IsValidValue(facility.Telephone, "telephone", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Telephone))) return false;
facilitiesToUpdate.Add(facility);
}
int MaxBulkUpdateBatchSize = 64;
int batchSize = facilitiesToUpdate.Any() ? (int)Math.Ceiling(facilitiesToUpdate.Count() / Math.Ceiling((double)facilitiesToUpdate.Count() / MaxBulkUpdateBatchSize)) : MaxBulkUpdateBatchSize;
while (facilitiesToUpdate.Any())
{
List<String> query = new List<string>();
query.Add($"Declare @statusActive VarChar(3) = '{SacsSystem.GetStatusCode(SaxGolfUsgaFacility.DefaultStatus)}';");
query.Add($"Declare @updateOn DateTime = GetDate();");
query.Add($"Declare @updateBy Int = {SysId.ToLong(dbUpdateInfo.UserId)};");
query.Add($"Declare @updateHost VarChar(100) = '{DbQuery.FormatForCondition(dbUpdateInfo.Host)}';");
query.Add("Merge");
query.Add($"Into {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility)} uFty");
query.Add("Using");
query.Add("(");
query.Add("Select dPrv.Id ProvinceId, dFty.ProvinceCode, dFty.UsgaFacilityId, dFty.FacilityName, dFty.Address1, dFty.Address2, dFty.City, dFty.PostalCode, dFty.Email, dFty.Telephone");
query.Add("From");
query.Add("(");
query.Add("Select '' ProvinceCode, 0 UsgaFacilityId, '' FacilityName, '' Address1, '' Address2, '' City, '' PostalCode, '' Email, '' Telephone");
foreach (UsgaFacilityData facility in facilitiesToUpdate.ExtractRange(0, batchSize))
query.Add($"Union Select '{DbQuery.FormatForCondition(facility.ProvinceCode)}', {SysId.ToString(facility.UsgaFacilityId)}, " +
(facility.FacilityName != null ? $"'{DbQuery.FormatForCondition(facility.FacilityName)}'" : "Null") + "," +
(facility.Address1 != null ? $"'{DbQuery.FormatForCondition(facility.Address1)}'" : "Null") + "," +
(facility.Address2 != null ? $"'{DbQuery.FormatForCondition(facility.Address2)}'" : "Null") + "," +
(facility.City != null ? $"'{DbQuery.FormatForCondition(facility.City)}'" : "Null") + "," +
(facility.PostalCode != null ? $"'{DbQuery.FormatForCondition(facility.PostalCode)}'" : "Null") + "," +
(facility.Email != null ? $"'{DbQuery.FormatForCondition(facility.Email)}'" : "Null") + "," +
(facility.Telephone != null ? $"'{DbQuery.FormatForCondition(facility.Telephone)}'" : "Null"));
query.Add(") dFty");
query.Add($"Inner Join {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince)} dPrv On dPrv.ProvinceCode=dFty.ProvinceCode");
query.Add(") dFty");
query.Add("On uFty.ProvinceId=dFty.ProvinceId And uFty.UsgaFacilityId=dFty.UsgaFacilityId");
query.Add("When Matched And ((dFty.FacilityName Is Not Null And uFty.FacilityName!=dFty.FacilityName) Or (dFty.Address1 Is Not Null And uFty.Address1!=dFty.Address1) Or (dFty.Address2 Is Not Null And uFty.Address2!=dFty.Address2) Or (dFty.City Is Not Null And uFty.City!=dFty.City) Or (dFty.PostalCode Is Not Null And uFty.PostalCode!=dFty.PostalCode) Or (dFty.Email Is Not Null And uFty.Email!=dFty.Email) Or (dFty.Telephone Is Not Null And uFty.Telephone!=dFty.Telephone) Or uFty.Status!=@statusActive)");
query.Add("Then Update Set");
query.Add(" FacilityName=Coalesce(dFty.FacilityName,uFty.FacilityName),");
query.Add(" Address1=Coalesce(dFty.Address1,uFty.Address1),");
query.Add(" Address2=Coalesce(dFty.Address2,uFty.Address2),");
query.Add(" City=Coalesce(dFty.City,uFty.City),");
query.Add(" PostalCode=Coalesce(dFty.PostalCode,uFty.PostalCode),");
query.Add(" Email=Coalesce(dFty.Email,uFty.Email),");
query.Add(" Telephone=Coalesce(dFty.Telephone,uFty.Telephone),");
query.Add(" Status=@statusActive,");
query.Add(" UpdateOn=@updateOn,");
query.Add(" UpdateBy=@updateBy,");
query.Add(" UpdateHost=@updateHost");
query.Add("When Not Matched And Len(IsNull(dFty.FacilityName,''))>0");
query.Add("Then Insert (ProvinceId,UsgaFacilityId,FacilityName,Address1,Address2,City,PostalCode,Email,Telephone,Notes,Flags,Status,CreateOn,CreateBy,CreateHost,UpdateOn,UpdateBy,UpdateHost)");
query.Add($"Values (dFty.ProvinceId,dFty.UsgaFacilityId,dFty.FacilityName,Coalesce(dFty.Address1,''),Coalesce(dFty.Address2,''),Coalesce(dFty.City,''),Coalesce(dFty.PostalCode,''),Coalesce(dFty.Email,''),Coalesce(dFty.Telephone,''),'',0,@statusActive,@updateOn,@updateBy,@updateHost,@updateOn,@updateBy,@updateHost)");
query.Add(";");
//SaLogger.Info($"{SysUtil.Fn} Bulk USGA Facility update query:\n\t{query.Concat("\n\t")}");
try
{
int result = ReferenceDatabase.ExecuteNonQuery(query.Concat("\n"));
if (ReferenceDatabase.HasErrorState())
SaLogger.Warn($"{SysUtil.Fn} Error executing bulk USGA Facility update - {ReferenceDatabase.ErrorStateMessage}");
}
catch (Exception exc)
{
SaLogger.Warn(SysUtil.Fn + " " + ExceptionUtil.GetLogMessage(exc, " executing bulk USGA Facility update"));
}
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUsgaFacility = "UsgFty";
private static readonly String aliasUsgaFacility_Province = "UsgFty_Prv";
private static readonly String prefixUsgaFacility_Province = aliasUsgaFacility_Province + "_";
private void SetUsgaFacilityColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Reference.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Reference.GetTableForColumn(dbCol) == SaxDbDfn_Reference.TableIdx.UsgaFacility)
alias = aliasUsgaFacility;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Reference.GetColumnName(dbCol, false), SaxDbDfn_Reference.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Reference.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Reference.GetColTextLen(dbCol);
}
public override ColumnDfn GetUsgaFacilityColumnDfn(SaxGolfUsgaFacility.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxGolfUsgaFacility.Column.Pos:
SetUsgaFacilityColDfn(columnDfn, "Pos", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxGolfUsgaFacility.Column.Id:
SetUsgaFacilityColDfn(columnDfn, "Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaFacility.Column.ProvinceId:
SetUsgaFacilityColDfn(columnDfn, "Province #", 80, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaFacility.Column.Province_Name:
SetUsgaFacilityColDfn(columnDfn, "Province", 120, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName, ColumnAlignment.Center, DataValue.DataType.String, aliasUsgaFacility_Province, prefixUsgaFacility_Province);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaFacility.Column.UsgaFacilityId:
SetUsgaFacilityColDfn(columnDfn, "USGA Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_UsgaFacilityId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaFacility.Column.FacilityName:
SetUsgaFacilityColDfn(columnDfn, "Name", 120, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxGolfUsgaFacility.Column.Notes:
SetUsgaFacilityColDfn(columnDfn, "Notes", 240, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Notes);
break;
case SaxGolfUsgaFacility.Column.Flags:
SetUsgaFacilityColDfn(columnDfn, "Flags", 60, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxGolfUsgaFacility.Column.Status:
SetUsgaFacilityColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaFacility.Column.Status_Desc:
SetUsgaFacilityColDfn(columnDfn, "Status", 90, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaFacility.Column.Status_Ind:
SetUsgaFacilityColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxGolfUsgaFacility.Column.CreateOn_Date:
SetUsgaFacilityColDfn(columnDfn, "Created", 80, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaFacility.Column.UpdateOn_Date:
SetUsgaFacilityColDfn(columnDfn, "Updated", 80, SaxDbDfn_Reference.ColumnIdx.UsgaFacility_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUsgaFacilityQueryFilter(SaxGolfUsgaFacility.Params prm)
{
List<String> filter = new List<String>();
String col_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, aliasUsgaFacility);
// Item Ids.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{col_Id} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{col_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Countries.
if (prm.ProvinceIdsIncluded.HasValidIds())
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasUsgaFacility)} IN ({prm.ProvinceIdsIncluded.Concat(",")})");
if (!StringUtil.IsBlank(prm.FacilityFilter))
{
// Split filter into words.
List<String> filterWords = prm.FacilityFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> facilityFilter = new List<String>();
facilityFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName, aliasUsgaFacility)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
filter.Add(facilityFilter.Concat(" OR ", "(", ")"));
}
}
// Name.
if (!StringUtil.IsEmpty(prm.FacilityNameFull))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName, aliasUsgaFacility)}='{DbQuery.FormatForCondition(prm.FacilityNameFull)}'");
if (!StringUtil.IsEmpty(prm.FacilityNamePartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName, aliasUsgaFacility)} LIKE '%{DbQuery.FormatForLike(prm.FacilityNamePartial)}%'");
// Associated data.
if (prm.HasCourses != SacsHierarchyItem.Params.BoolState.Either)
{
String existsPrefix = (prm.HasCourses == SacsHierarchyItem.Params.BoolState.True ? "" : "Not ");
filter.Add($"{existsPrefix} Exists (Select 1 From {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse)} Where {SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId)}={col_Id})");
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Notes, aliasUsgaFacility)} LIKE '%{DbQuery.FormatForLike(prm.NotesPartial)}%'");
// Status.
if (prm.StatusCat != SaxGolfUsgaFacility.StatusCat.Any)
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status, aliasUsgaFacility)} {GetUsgaFacilityStatusCatFilterCondition(prm.StatusCat)}");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
internal static String GetUsgaFacilityStatusCatFilterCondition(SaxGolfUsgaFacility.StatusCat statusCat)
{
if (statusCat == SaxGolfUsgaFacility.StatusCat.ActiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Active)}'";
if (statusCat == SaxGolfUsgaFacility.StatusCat.InactiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Inactive)}'";
if (statusCat == SaxGolfUsgaFacility.StatusCat.NotDeleted)
return $"!='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
if (statusCat == SaxGolfUsgaFacility.StatusCat.DeletedOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
return "";
}
// Item sort columns.
public HashSet<String> GetUsgaFacilitySortColumns(SaxGolfUsgaFacility.Params prm)
{
// Sort sequence:
HashSet<String> sortColumnNames = new HashSet<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UsgaFacility columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Reference.GetTableForColumn((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Reference.TableIdx.UsgaFacility)
{
sortCol = SaxDbDfn_Reference.GetColumnNameQual((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn, aliasUsgaFacility);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
AddRandomSortColumn(prm, sortColumnNames);
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, aliasUsgaFacility) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUsgaFacilityCount(String filter)
{
ClearErrorState();
return ReferenceDatabase.GetRowCount(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility) + " As " + aliasUsgaFacility, filter);
}
public override long GetUsgaFacilityCount(SaxGolfUsgaFacility.Params prm)
{
ClearErrorState();
return GetUsgaFacilityCount(GetUsgaFacilityQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxGolfUsgaFacility> GetUsgaFacilityList(SaxGolfUsgaFacility.Params prm)
{
ClearErrorState();
List<SaxGolfUsgaFacility> userRoles = new List<SaxGolfUsgaFacility>();
DbQuery qry = new DbQuery(ReferenceDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasUsgaFacility);
Golf_UsgaFacility_Db dbUsgaFacility = new Golf_UsgaFacility_Db(ReferenceDbInfo);
qry.Columns.AddRange(dbUsgaFacility.ExistingColumnNames);
qry.Filters.AddRange(GetUsgaFacilityQueryFilter(prm));
qry.OrderBy.AddRange(GetUsgaFacilitySortColumns(prm));
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUsgaFacility = new Golf_UsgaFacility_Db(ReferenceDbInfo);
dbUsgaFacility.PopulateFrom(dbDataReader);
userRoles.Add(CreateUsgaFacility(dbUsgaFacility));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRoles;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUsgaFacilityQuery(List<ColumnDfn> columns, SaxGolfUsgaFacility.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(ReferenceDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasUsgaFacility);
// Add columns as defined in query list.
if (columns.HasId(SaxGolfUsgaFacility.Column.Id))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, aliasUsgaFacility));
bool hasProvinceCols = (columns.HasId(SaxGolfUsgaFacility.Column.Province_Name));
if (columns.HasId(SaxGolfUsgaFacility.Column.ProvinceId) || hasProvinceCols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasUsgaFacility));
if (columns.HasId(SaxGolfUsgaFacility.Column.UsgaFacilityId))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_UsgaFacilityId, aliasUsgaFacility));
if (columns.HasId(SaxGolfUsgaFacility.Column.FacilityName))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_FacilityName, aliasUsgaFacility));
// Common properties.
if (columns.HasId(SaxGolfUsgaFacility.Column.Notes))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Notes, aliasUsgaFacility));
if (columns.HasId(SaxGolfUsgaFacility.Column.Flags))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Flags, aliasUsgaFacility));
if (columns.HasId(SaxGolfUsgaFacility.Column.Status) || columns.HasId(SaxGolfUsgaFacility.Column.Status_Desc) || columns.HasId(SaxGolfUsgaFacility.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status, aliasUsgaFacility));
if (columns.HasId(SaxGolfUsgaFacility.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_CreateOn, aliasUsgaFacility));
if (columns.HasId(SaxGolfUsgaFacility.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_UpdateOn, aliasUsgaFacility));
//---------------------------------------------------------------------
// Province.
if (hasProvinceCols)
{
DbQueryJoin joinProvince = new DbQueryJoin(DbJoinType.LeftOuter);
joinProvince.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince), aliasUsgaFacility_Province);
joinProvince.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaFacility_Province) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasUsgaFacility));
query.Joins.Add(joinProvince);
List<SaxDbDfn_Reference.ColumnIdx> cols = new List<SaxDbDfn_Reference.ColumnIdx>();
cols.Add(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(col, aliasUsgaFacility_Province), prefixUsgaFacility_Province + SaxDbDfn_Reference.GetColumnName(col, false));
prm.Alias_Province = aliasUsgaFacility_Province;
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUsgaFacilityQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUsgaFacilitySortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(ReferenceDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,730 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Dbas.Data;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Internal.Reference;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
namespace Saxonite.Net.Standard.Dbas.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr_Dbas
{
//*******************************************************************
// Support Mgr - User Report
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxGolfUsgaMarker usgaMarker)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(usgaMarker.Id)),
new StringPair("Course Id",SysId.ToString(usgaMarker.CourseId)),
new StringPair("Usga Marker Id",SysId.ToString(usgaMarker.UsgaMarkerId)),
new StringPair("Caption",usgaMarker.Caption),
new StringPair("Status",usgaMarker.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxGolfUsgaMarker CreateUsgaMarker(SysId courseId)
{
ClearErrorState();
return new SaxGolfUsgaMarker_Dbas(ReferenceDatabase, null, courseId, 0);
}
private SaxGolfUsgaMarker_Dbas CreateUsgaMarker(Golf_UsgaMarker_Db dbUsgaMarker)
{
ClearErrorState();
SaxGolfUsgaMarker_Dbas usgaMarker = new SaxGolfUsgaMarker_Dbas(ReferenceDatabase, new SysId(dbUsgaMarker._Id), new SysId(dbUsgaMarker._CourseId), (ushort)dbUsgaMarker._Flags);
PopulateFrom(dbUsgaMarker, usgaMarker);
return usgaMarker;
}
//-------------------------------------------------------------------
// Get item.
public override SaxGolfUsgaMarker GetUsgaMarker(SaxGolfUsgaMarker.Params prm)
{
ClearErrorState();
return GetUsgaMarker(GetUsgaMarkerQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxGolfUsgaMarker GetUsgaMarker(String filter)
{
ClearErrorState();
long count = GetUsgaMarkerCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxGolfUsgaMarker usgaMarker = null;
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaMarker_Db dbUsgaMarker = new Golf_UsgaMarker_Db(ReferenceDbInfo);
dbUsgaMarker.PopulateFrom(dbCommand, aliasUsgaMarker, filter);
usgaMarker = CreateUsgaMarker(dbUsgaMarker);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return usgaMarker;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUsgaMarkerData(SaxGolfUsgaMarker.Data data, SaxGolfUsgaMarker.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUsgaMarkerData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUsgaMarker(SaxGolfUsgaMarker usgaMarker, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUsgaMarker";
ClearErrorState();
if (!IsValidUsgaMarker(usgaMarker)) return false;
if (SysId.IsValid(usgaMarker.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaMarker_Db dbUsgaMarker = new Golf_UsgaMarker_Db(ReferenceDbInfo);
PopulateTo(dbUsgaMarker, usgaMarker, dbUpdateInfo);
if (Golf_UsgaMarker_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUsgaMarker._Id = ReferenceDatabase.GetNextIdFromTable("UsgaMarker");
}
dbUsgaMarker.ExecuteInsertCommand(dbCommand);
usgaMarker.Id = new SysId(dbUsgaMarker._Id);
usgaMarker.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(usgaMarker).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUsgaMarker(SaxGolfUsgaMarker usgaMarker, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUsgaMarker";
ClearErrorState();
if (!IsValidUsgaMarker(usgaMarker)) return false;
if (!SysId.IsValid(usgaMarker.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!usgaMarker.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(usgaMarker).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaMarker_Db dbUsgaMarker = new Golf_UsgaMarker_Db(ReferenceDbInfo);
dbUsgaMarker.PopulateFrom(dbCommand, aliasUsgaMarker, "Id=" + SysId.ToString(usgaMarker.Id));
// ToDo SaxUpdateLogItemMonitor_UsgaMarker updateLogMonitor = new SaxUpdateLogItemMonitor_UsgaMarker(SessionContext, CreateUsgaMarker(dbUsgaMarker), dbUpdateInfo);
// Update item.
PopulateTo(dbUsgaMarker, usgaMarker, dbUpdateInfo);
dbUsgaMarker.ExecuteUpdateCommand(dbCommand);
usgaMarker.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(usgaMarker).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(usgaMarker);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UsgaMarkerCanBeDeleted(SaxGolfUsgaMarker usgaMarker)
{
ClearErrorState();
if (!base.UsgaMarkerCanBeDeleted(usgaMarker)) return false;
return true;
}
public override bool DeleteUsgaMarker(SaxGolfUsgaMarker usgaMarker, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUsgaMarker";
ClearErrorState();
if (!UsgaMarkerCanBeDeleted(usgaMarker)) return false;
// User Roles are logically deleted by changing the status.
usgaMarker.Status = SaStatus.Deleted;
return UpdateUsgaMarker(usgaMarker, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaMarker_Db dbUsgaMarker = new Golf_UsgaMarker_Db(ReferenceDbInfo);
dbUsgaMarker.PopulateFrom(dbCommand, aliasUsgaMarker, "Id=" + usgaMarker.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker) + " WHERE Id=" + SysId.ToString(usgaMarker.Id) + ";";
dbCommand.ExecuteNonQuery();
usgaMarker.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(usgaMarker).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Golf_UsgaMarker_Db dbUsgaMarker, SaxGolfUsgaMarker usgaMarker, DbUpdateInfo dbUpdateInfo)
{
dbUsgaMarker._Id = SysId.ToLong(usgaMarker.Id);
dbUsgaMarker._CourseId = SysId.ToInt(usgaMarker.CourseId);
dbUsgaMarker._UsgaMarkerId = SysId.ToInt(usgaMarker.UsgaMarkerId);
dbUsgaMarker._Caption = usgaMarker.Caption;
dbUsgaMarker._Holes = usgaMarker.Holes;
dbUsgaMarker._HolesCaption = usgaMarker.HolesCaption;
dbUsgaMarker._Tee = usgaMarker.Tee;
dbUsgaMarker._Gender = usgaMarker.Gender;
dbUsgaMarker._SlopeRating = usgaMarker.SlopeRating;
dbUsgaMarker._Par = usgaMarker.Par;
dbUsgaMarker._CourseRating = usgaMarker.CourseRating;
dbUsgaMarker._BogeyRating = usgaMarker.BogeyRating;
dbUsgaMarker._Length = usgaMarker.Length;
// Common.
dbUsgaMarker._Notes = usgaMarker.Notes;
dbUsgaMarker._Status = SacsSystem.GetStatusCode(usgaMarker.Status);
dbUsgaMarker._Flags = (short)usgaMarker.Flags;
if (!SysId.IsValid(usgaMarker.Id))
{
dbUsgaMarker._CreateOn = DateTime.Now;
dbUsgaMarker._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaMarker._CreateHost = dbUpdateInfo.Host;
}
dbUsgaMarker._UpdateOn = DateTime.Now;
dbUsgaMarker._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaMarker._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Golf_UsgaMarker_Db dbUsgaMarker, SaxGolfUsgaMarker usgaMarker)
{
//usgaMarker.Id = new SysId(dbUsgaMarker._Id);
usgaMarker.CourseId = new SysId(dbUsgaMarker._CourseId);
usgaMarker.UsgaMarkerId = new SysId(dbUsgaMarker._UsgaMarkerId);
usgaMarker.Caption = dbUsgaMarker._Caption;
usgaMarker.Holes = dbUsgaMarker._Holes;
usgaMarker.HolesCaption = dbUsgaMarker._HolesCaption;
usgaMarker.Tee = dbUsgaMarker._Tee;
usgaMarker.Gender = dbUsgaMarker._Gender;
usgaMarker.SlopeRating = dbUsgaMarker._SlopeRating;
usgaMarker.Par = dbUsgaMarker._Par;
usgaMarker.CourseRating = dbUsgaMarker._CourseRating;
usgaMarker.BogeyRating = dbUsgaMarker._BogeyRating;
usgaMarker.Length = dbUsgaMarker._Length;
// Common.
usgaMarker.Notes = dbUsgaMarker._Notes;
usgaMarker.Status = SacsSystem.GetStatusForCode(dbUsgaMarker._Status);
usgaMarker.SetCreateStamp(dbUsgaMarker._CreateOn, new SysId(dbUsgaMarker._CreateBy), dbUsgaMarker._CreateHost);
usgaMarker.SetUpdateStamp(dbUsgaMarker._UpdateOn, new SysId(dbUsgaMarker._UpdateBy), dbUsgaMarker._UpdateHost);
usgaMarker.AcceptChanges();
}
//-------------------------------------------------------------------
// Bulk updates.
/// <summary>
/// Bulk update USGA Markers.
/// <para>- Course Id must be supplied to identify parent.</para>
/// <para>- Marker Id must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per marker rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public override bool BulkUpdateUsgaMarkers(List<UsgaMarkerData> markers, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
List<UsgaMarkerData> markersToUpdate = new List<UsgaMarkerData>();
// Validate supplied data.
foreach (UsgaMarkerData marker in markers)
{
// Validate marker properties.
// Course and Marker Codes are mandatory, other values only validated if non-null.
if (!SysId.IsValid(marker.UsgaCourseId)) return SetErrorState("USGA Course Id must be supplied");
// 9 hole markers missing Id: if (!SysId.IsValid(marker.UsgaMarkerId)) return SetErrorState("USGA Marker Id must be supplied");
if (marker.Caption != null && !IsValidValue(marker.HolesCaption, "caption", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_HolesCaption))) return false;
if (marker.Holes < 1) return SetErrorState("Holes must be supplied");
if (marker.HolesCaption != null && !IsValidValue(marker.HolesCaption, "holes caption", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_HolesCaption), true)) return false;
if (marker.Tee != null && !IsValidValue(marker.Tee, "tee", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Tee), true)) return false;
if (marker.Gender != null && !IsValidValue(marker.Gender, "gender", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Gender))) return false;
if (marker.SlopeRating < 1) return SetErrorState("Slope rating must be supplied");
if (marker.Par < 1) return SetErrorState("Par must be supplied");
if (marker.CourseRating < 1) return SetErrorState("Course rating must be supplied");
markersToUpdate.Add(marker);
}
int MaxBulkUpdateBatchSize = 64;
int batchSize = markersToUpdate.Any() ? (int)Math.Ceiling(markersToUpdate.Count() / Math.Ceiling((double)markersToUpdate.Count() / MaxBulkUpdateBatchSize)) : MaxBulkUpdateBatchSize;
while (markersToUpdate.Any())
{
List<String> query = new List<string>();
query.Add($"Declare @statusActive VarChar(3) = '{SacsSystem.GetStatusCode(SaxGolfUsgaMarker.DefaultStatus)}';");
query.Add($"Declare @updateOn DateTime = GetDate();");
query.Add($"Declare @updateBy Int = {SysId.ToLong(dbUpdateInfo.UserId)};");
query.Add($"Declare @updateHost VarChar(100) = '{DbQuery.FormatForCondition(dbUpdateInfo.Host)}';");
query.Add("Merge");
query.Add($"Into {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker)} uMkr");
query.Add("Using");
query.Add("(");
query.Add("Select uCrs.Id CourseId, dMkr.UsgaCourseId, dMkr.UsgaMarkerId, dMkr.Caption, dMkr.Holes, dMkr.HolesCaption, dMkr.Tee, dMkr.Gender, dMkr.SlopeRating, dMkr.Par, dMkr.CourseRating, dMkr.BogeyRating, dMkr.Length");
query.Add("From");
query.Add("(");
query.Add("Select 0 UsgaCourseId, 0 UsgaMarkerId, '' Caption, 0 Holes, '' HolesCaption, '' Tee, '' Gender, 0 SlopeRating, 0 Par, 0 CourseRating, 0 BogeyRating, 0 Length");
foreach (UsgaMarkerData marker in markersToUpdate.ExtractRange(0, batchSize))
query.Add($"Union Select {marker.UsgaCourseId},{StringUtil.OnBlank(SysId.ToString(marker.UsgaMarkerId), "0")}," +
(marker.Caption != null ? $"'{DbQuery.FormatForCondition(marker.Caption)}'" : "Null") + "," +
$"{marker.Holes}," +
(marker.HolesCaption != null ? $"'{DbQuery.FormatForCondition(marker.HolesCaption)}'" : "Null") + "," +
(marker.Tee != null ? $"'{DbQuery.FormatForCondition(marker.Tee)}'" : "Null") + "," +
(marker.Gender != null ? $"'{DbQuery.FormatForCondition(marker.Gender)}'" : "Null") + "," +
$"{marker.SlopeRating}," +
$"{marker.Par}," +
$"{marker.CourseRating}," +
(marker.BogeyRating > 0 ? $"{marker.BogeyRating}" : "Null") + "," +
(marker.Length > 0 ? $"{marker.Length}" : "Null"));
query.Add(") dMkr");
query.Add($"Inner Join {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse)} uCrs On uCrs.UsgaCourseId=dMkr.UsgaCourseId");
query.Add(") dMkr");
// Want to use UsgaMarkerId to identify the Marker alongside the CourseId, but only 18 hole markers have an Id value.
// Use alternative identifiers for now: Holes Caption, Tee and Gender.
// Was: query.Add("On uMkr.CourseId=dMkr.CourseId And uMkr.UsgaMarkerId=dMkr.UsgaMarkerId");
query.Add("On uMkr.CourseId=dMkr.CourseId And uMkr.HolesCaption=dMkr.HolesCaption And uMkr.Tee=dMkr.Tee And uMkr.Gender=Coalesce(dMkr.Gender,'')");
query.Add("When Matched And ((dMkr.Caption Is Not Null And uMkr.Caption!=dMkr.Caption) Or (uMkr.Holes!=dMkr.Holes) Or (dMkr.HolesCaption Is Not Null And uMkr.HolesCaption!=dMkr.HolesCaption) Or (dMkr.Tee Is Not Null And uMkr.Tee!=dMkr.Tee) Or (dMkr.Gender Is Not Null And uMkr.Gender!=dMkr.Gender) Or (uMkr.SlopeRating!=dMkr.SlopeRating) Or (uMkr.Par!=dMkr.Par) Or (uMkr.CourseRating!=dMkr.CourseRating) Or (dMkr.BogeyRating Is Not Null And uMkr.BogeyRating!=dMkr.BogeyRating) Or (dMkr.Length Is Not Null And uMkr.Length!=dMkr.Length) Or uMkr.Status!=@statusActive)");
query.Add("Then Update Set");
query.Add(" Caption=Coalesce(dMkr.Caption,uMkr.Caption),");
query.Add(" Holes=Coalesce(dMkr.Holes,uMkr.Holes),");
query.Add(" HolesCaption=Coalesce(dMkr.HolesCaption,uMkr.HolesCaption),");
query.Add(" Tee=Coalesce(dMkr.Tee,uMkr.Tee),");
query.Add(" Gender=Coalesce(dMkr.Gender,uMkr.Gender),");
query.Add(" SlopeRating=Coalesce(dMkr.SlopeRating,uMkr.SlopeRating),");
query.Add(" Par=Coalesce(dMkr.Par,uMkr.Par),");
query.Add(" CourseRating=Coalesce(dMkr.CourseRating,uMkr.CourseRating),");
query.Add(" BogeyRating=Coalesce(dMkr.BogeyRating,uMkr.BogeyRating),");
query.Add(" Length=Coalesce(dMkr.Length,uMkr.Length),");
query.Add(" Status=@statusActive,");
query.Add(" UpdateOn=@updateOn,");
query.Add(" UpdateBy=@updateBy,");
query.Add(" UpdateHost=@updateHost");
query.Add("When Not Matched And Len(Coalesce(dMkr.Caption,''))>0 And dMkr.Holes>0 And dMkr.SlopeRating>0 And dMkr.Par>0 And dMkr.CourseRating>0");
query.Add("Then Insert (CourseId,UsgaMarkerId,Caption,Holes,HolesCaption,Tee,Gender,SlopeRating,Par,CourseRating,BogeyRating,Length,Notes,Flags,Status,CreateOn,CreateBy,CreateHost,UpdateOn,UpdateBy,UpdateHost)");
query.Add($"Values (dMkr.CourseId,dMkr.UsgaMarkerId,Coalesce(dMkr.Caption,''),dMkr.Holes,Coalesce(dMkr.HolesCaption,''),Coalesce(dMkr.Tee,''),Coalesce(dMkr.Gender,''),Coalesce(dMkr.SlopeRating,''),Coalesce(dMkr.Par,''),Coalesce(dMkr.CourseRating,''),Coalesce(dMkr.BogeyRating,''),Coalesce(dMkr.Length,''),'',0,@statusActive,@updateOn,@updateBy,@updateHost,@updateOn,@updateBy,@updateHost)");
query.Add(";");
//SaLogger.Info($"{SysUtil.Fn} Bulk USGA Marker update query:\n\t{query.Concat("\n\t")}");
try
{
int result = ReferenceDatabase.ExecuteNonQuery(query.Concat("\n"));
if (ReferenceDatabase.HasErrorState())
SaLogger.Warn($"{SysUtil.Fn} Error executing bulk USGA Marker update - {ReferenceDatabase.ErrorStateMessage}");
}
catch (Exception exc)
{
SaLogger.Warn(SysUtil.Fn + " " + ExceptionUtil.GetLogMessage(exc, " executing bulk USGA Marker update"));
}
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUsgaMarker = "UsgMkr";
private static readonly String aliasUsgaMarker_Course = "UsgMkr_Cty";
private static readonly String prefixUsgaMarker_Course = aliasUsgaMarker_Course + "_";
private void SetUsgaMarkerColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Reference.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Reference.GetTableForColumn(dbCol) == SaxDbDfn_Reference.TableIdx.UsgaMarker)
alias = aliasUsgaMarker;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Reference.GetColumnName(dbCol, false), SaxDbDfn_Reference.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Reference.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Reference.GetColTextLen(dbCol);
}
public override ColumnDfn GetUsgaMarkerColumnDfn(SaxGolfUsgaMarker.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxGolfUsgaMarker.Column.Pos:
SetUsgaMarkerColDfn(columnDfn, "Pos", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxGolfUsgaMarker.Column.Id:
SetUsgaMarkerColDfn(columnDfn, "Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaMarker.Column.CourseId:
SetUsgaMarkerColDfn(columnDfn, "Course #", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.Course_Name:
SetUsgaMarkerColDfn(columnDfn, "Course", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CourseName, ColumnAlignment.Center, DataValue.DataType.String, aliasUsgaMarker_Course, prefixUsgaMarker_Course);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaMarker.Column.UsgaMarkerId:
SetUsgaMarkerColDfn(columnDfn, "Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_UsgaMarkerId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.Caption:
SetUsgaMarkerColDfn(columnDfn, "Caption", 160, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Caption);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.Holes:
SetUsgaMarkerColDfn(columnDfn, "Holes", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Holes, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.HolesCaption:
SetUsgaMarkerColDfn(columnDfn, "Holes", 100, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_HolesCaption, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.Tee:
SetUsgaMarkerColDfn(columnDfn, "Tee", 100, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Tee, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.Gender:
SetUsgaMarkerColDfn(columnDfn, "Gender", 100, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Gender, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.SlopeRating:
SetUsgaMarkerColDfn(columnDfn, "Slope Rating", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_SlopeRating, ColumnAlignment.Center, DataValue.DataType.Decimal);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.Par:
SetUsgaMarkerColDfn(columnDfn, "Par", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Par, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.CourseRating:
SetUsgaMarkerColDfn(columnDfn, "Course Rating", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseRating, ColumnAlignment.Center, DataValue.DataType.Decimal);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.BogeyRating:
SetUsgaMarkerColDfn(columnDfn, "Bogey Rating", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_BogeyRating, ColumnAlignment.Center, DataValue.DataType.Decimal);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.Length:
SetUsgaMarkerColDfn(columnDfn, "Length", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Length, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxGolfUsgaMarker.Column.Notes:
SetUsgaMarkerColDfn(columnDfn, "Notes", 240, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Notes);
break;
case SaxGolfUsgaMarker.Column.Flags:
SetUsgaMarkerColDfn(columnDfn, "Flags", 60, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxGolfUsgaMarker.Column.Status:
SetUsgaMarkerColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaMarker.Column.Status_Desc:
SetUsgaMarkerColDfn(columnDfn, "Status", 90, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaMarker.Column.Status_Ind:
SetUsgaMarkerColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxGolfUsgaMarker.Column.CreateOn_Date:
SetUsgaMarkerColDfn(columnDfn, "Created", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaMarker.Column.UpdateOn_Date:
SetUsgaMarkerColDfn(columnDfn, "Updated", 80, SaxDbDfn_Reference.ColumnIdx.UsgaMarker_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUsgaMarkerQueryFilter(SaxGolfUsgaMarker.Params prm)
{
List<String> filter = new List<String>();
String col_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Id, aliasUsgaMarker);
// Item Ids.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{col_Id} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{col_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Courses.
if (prm.CourseIdsIncluded.HasValidIds())
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId, aliasUsgaMarker)} IN ({prm.CourseIdsIncluded.Concat(",")})");
if (!StringUtil.IsBlank(prm.MarkerFilter))
{
// Split filter into words.
List<String> filterWords = prm.MarkerFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> markerFilter = new List<String>();
markerFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Caption, aliasUsgaMarker)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
markerFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_HolesCaption, aliasUsgaMarker)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
markerFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Tee, aliasUsgaMarker)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
markerFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Gender, aliasUsgaMarker)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
filter.Add(markerFilter.Concat(" OR ", "(", ")"));
}
}
// Marker properties.
if (prm.Holes > 0)
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Holes, aliasUsgaMarker)}={prm.Holes}");
if (!StringUtil.IsEmpty(prm.Gender))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Gender, aliasUsgaMarker)}='{DbQuery.FormatForLike(prm.Gender)}'");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Notes, aliasUsgaMarker)} LIKE '%{DbQuery.FormatForLike(prm.NotesPartial)}%'");
// Status.
if (prm.StatusCat != SaxGolfUsgaMarker.StatusCat.Any)
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Status, aliasUsgaMarker)} {GetUsgaMarkerStatusCatFilterCondition(prm.StatusCat)}");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
internal static String GetUsgaMarkerStatusCatFilterCondition(SaxGolfUsgaMarker.StatusCat statusCat)
{
if (statusCat == SaxGolfUsgaMarker.StatusCat.ActiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Active)}'";
if (statusCat == SaxGolfUsgaMarker.StatusCat.InactiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Inactive)}'";
if (statusCat == SaxGolfUsgaMarker.StatusCat.NotDeleted)
return $"!='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
if (statusCat == SaxGolfUsgaMarker.StatusCat.DeletedOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
return "";
}
// Item sort columns.
public HashSet<String> GetUsgaMarkerSortColumns(SaxGolfUsgaMarker.Params prm)
{
// Sort sequence:
HashSet<String> sortColumnNames = new HashSet<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UsgaMarker columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Reference.GetTableForColumn((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Reference.TableIdx.UsgaMarker)
{
sortCol = SaxDbDfn_Reference.GetColumnNameQual((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn, aliasUsgaMarker);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
AddRandomSortColumn(prm, sortColumnNames);
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Id, aliasUsgaMarker) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUsgaMarkerCount(String filter)
{
ClearErrorState();
return ReferenceDatabase.GetRowCount(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker) + " As " + aliasUsgaMarker, filter);
}
public override long GetUsgaMarkerCount(SaxGolfUsgaMarker.Params prm)
{
ClearErrorState();
return GetUsgaMarkerCount(GetUsgaMarkerQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxGolfUsgaMarker> GetUsgaMarkerList(SaxGolfUsgaMarker.Params prm)
{
ClearErrorState();
List<SaxGolfUsgaMarker> userRoles = new List<SaxGolfUsgaMarker>();
DbQuery qry = new DbQuery(ReferenceDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker), aliasUsgaMarker);
Golf_UsgaMarker_Db dbUsgaMarker = new Golf_UsgaMarker_Db(ReferenceDbInfo);
qry.Columns.AddRange(dbUsgaMarker.ExistingColumnNames);
qry.Filters.AddRange(GetUsgaMarkerQueryFilter(prm));
qry.OrderBy.AddRange(GetUsgaMarkerSortColumns(prm));
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUsgaMarker = new Golf_UsgaMarker_Db(ReferenceDbInfo);
dbUsgaMarker.PopulateFrom(dbDataReader);
userRoles.Add(CreateUsgaMarker(dbUsgaMarker));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRoles;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUsgaMarkerQuery(List<ColumnDfn> columns, SaxGolfUsgaMarker.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(ReferenceDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker), aliasUsgaMarker);
// Add columns as defined in query list.
if (columns.HasId(SaxGolfUsgaMarker.Column.Id))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Id, aliasUsgaMarker));
bool hasCourseCols = (columns.HasId(SaxGolfUsgaMarker.Column.Course_Name));
if (columns.HasId(SaxGolfUsgaMarker.Column.CourseId) || hasCourseCols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.UsgaMarkerId))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_UsgaMarkerId, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Caption))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Caption, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Holes))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Holes, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.HolesCaption))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_HolesCaption, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Tee))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Tee, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Gender))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Gender, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.SlopeRating))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_SlopeRating, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Par))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Par, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.CourseRating))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseRating, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.BogeyRating))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_BogeyRating, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Length))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Length, aliasUsgaMarker));
// Common properties.
if (columns.HasId(SaxGolfUsgaMarker.Column.Notes))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Notes, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Flags))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Flags, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.Status) || columns.HasId(SaxGolfUsgaMarker.Column.Status_Desc) || columns.HasId(SaxGolfUsgaMarker.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_Status, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CreateOn, aliasUsgaMarker));
if (columns.HasId(SaxGolfUsgaMarker.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_UpdateOn, aliasUsgaMarker));
//---------------------------------------------------------------------
// Course.
if (hasCourseCols)
{
DbQueryJoin joinCourse = new DbQueryJoin(DbJoinType.LeftOuter);
joinCourse.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse), aliasUsgaMarker_Course);
joinCourse.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, aliasUsgaMarker_Course) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId, aliasUsgaMarker));
query.Joins.Add(joinCourse);
List<SaxDbDfn_Reference.ColumnIdx> cols = new List<SaxDbDfn_Reference.ColumnIdx>();
cols.Add(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_CourseName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(col, aliasUsgaMarker_Course), prefixUsgaMarker_Course + SaxDbDfn_Reference.GetColumnName(col, false));
prm.Alias_Course = aliasUsgaMarker_Course;
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUsgaMarkerQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUsgaMarkerSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(ReferenceDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,772 @@
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Utils;
using Sarand.Net.Standard.Dbas.Data;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using Saxonite.Net.Standard.Base.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Bus.Reference;
using Saxonite.Net.Standard.Dbas.Internal.Reference;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
namespace Saxonite.Net.Standard.Dbas.Mgr.Reference
{
//=======================================================================
partial class SaxReferenceGolfMgr_Dbas
{
//*******************************************************************
// Support Mgr - User Report
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxGolfUsgaProvince usgaProvince)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(usgaProvince.Id)),
new StringPair("Country Id",SysId.ToString(usgaProvince.CountryId)),
new StringPair("Province code",usgaProvince.ProvinceCode),
new StringPair("Province name",usgaProvince.ProvinceName),
new StringPair("Status",usgaProvince.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxGolfUsgaProvince CreateUsgaProvince(SysId countryId)
{
ClearErrorState();
return new SaxGolfUsgaProvince_Dbas(ReferenceDatabase, null, countryId, 0);
}
private SaxGolfUsgaProvince_Dbas CreateUsgaProvince(Golf_UsgaProvince_Db dbUsgaProvince)
{
ClearErrorState();
SaxGolfUsgaProvince_Dbas usgaProvince = new SaxGolfUsgaProvince_Dbas(ReferenceDatabase, new SysId(dbUsgaProvince._Id), new SysId(dbUsgaProvince._CountryId), (ushort)dbUsgaProvince._Flags);
PopulateFrom(dbUsgaProvince, usgaProvince);
return usgaProvince;
}
//-------------------------------------------------------------------
// Get item.
public override SaxGolfUsgaProvince GetUsgaProvince(SaxGolfUsgaProvince.Params prm)
{
ClearErrorState();
return GetUsgaProvince(GetUsgaProvinceQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxGolfUsgaProvince GetUsgaProvince(String filter)
{
ClearErrorState();
long count = GetUsgaProvinceCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxGolfUsgaProvince usgaProvince = null;
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaProvince_Db dbUsgaProvince = new Golf_UsgaProvince_Db(ReferenceDbInfo);
dbUsgaProvince.PopulateFrom(dbCommand, aliasUsgaProvince, filter);
usgaProvince = CreateUsgaProvince(dbUsgaProvince);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return usgaProvince;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUsgaProvinceData(SaxGolfUsgaProvince.Data data, SaxGolfUsgaProvince.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUsgaProvinceData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUsgaProvince(SaxGolfUsgaProvince usgaProvince, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUsgaProvince";
ClearErrorState();
if (!IsValidUsgaProvince(usgaProvince)) return false;
if (SysId.IsValid(usgaProvince.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Golf_UsgaProvince_Db dbUsgaProvince = new Golf_UsgaProvince_Db(ReferenceDbInfo);
PopulateTo(dbUsgaProvince, usgaProvince, dbUpdateInfo);
if (Golf_UsgaProvince_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUsgaProvince._Id = ReferenceDatabase.GetNextIdFromTable("UsgaProvince");
}
dbUsgaProvince.ExecuteInsertCommand(dbCommand);
usgaProvince.Id = new SysId(dbUsgaProvince._Id);
usgaProvince.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(usgaProvince).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUsgaProvince(SaxGolfUsgaProvince usgaProvince, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUsgaProvince";
ClearErrorState();
if (!IsValidUsgaProvince(usgaProvince)) return false;
if (!SysId.IsValid(usgaProvince.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!usgaProvince.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(usgaProvince).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaProvince_Db dbUsgaProvince = new Golf_UsgaProvince_Db(ReferenceDbInfo);
dbUsgaProvince.PopulateFrom(dbCommand, aliasUsgaProvince, "Id=" + SysId.ToString(usgaProvince.Id));
// ToDo SaxUpdateLogItemMonitor_UsgaProvince updateLogMonitor = new SaxUpdateLogItemMonitor_UsgaProvince(SessionContext, CreateUsgaProvince(dbUsgaProvince), dbUpdateInfo);
// Update item.
PopulateTo(dbUsgaProvince, usgaProvince, dbUpdateInfo);
dbUsgaProvince.ExecuteUpdateCommand(dbCommand);
usgaProvince.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(usgaProvince).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(usgaProvince);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UsgaProvinceCanBeDeleted(SaxGolfUsgaProvince usgaProvince)
{
ClearErrorState();
if (!base.UsgaProvinceCanBeDeleted(usgaProvince)) return false;
return true;
}
public override bool DeleteUsgaProvince(SaxGolfUsgaProvince usgaProvince, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUsgaProvince";
ClearErrorState();
if (!UsgaProvinceCanBeDeleted(usgaProvince)) return false;
// User Roles are logically deleted by changing the status.
usgaProvince.Status = SaStatus.Deleted;
return UpdateUsgaProvince(usgaProvince, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Golf_UsgaProvince_Db dbUsgaProvince = new Golf_UsgaProvince_Db(ReferenceDbInfo);
dbUsgaProvince.PopulateFrom(dbCommand, aliasUsgaProvince, "Id=" + usgaProvince.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince) + " WHERE Id=" + SysId.ToString(usgaProvince.Id) + ";";
dbCommand.ExecuteNonQuery();
usgaProvince.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(usgaProvince).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Golf_UsgaProvince_Db dbUsgaProvince, SaxGolfUsgaProvince usgaProvince, DbUpdateInfo dbUpdateInfo)
{
dbUsgaProvince._Id = SysId.ToLong(usgaProvince.Id);
dbUsgaProvince._CountryId = SysId.ToInt(usgaProvince.CountryId);
dbUsgaProvince._ProvinceCode = usgaProvince.ProvinceCode;
dbUsgaProvince._EntProvinceCode = usgaProvince.EntProvinceCode;
dbUsgaProvince._ProvinceName = usgaProvince.ProvinceName;
dbUsgaProvince._CoursesUpdateAt = usgaProvince.CoursesUpdateAt;
// Common.
dbUsgaProvince._Notes = usgaProvince.Notes;
dbUsgaProvince._Status = SacsSystem.GetStatusCode(usgaProvince.Status);
dbUsgaProvince._Flags = (short)usgaProvince.Flags;
if (!SysId.IsValid(usgaProvince.Id))
{
dbUsgaProvince._CreateOn = DateTime.Now;
dbUsgaProvince._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaProvince._CreateHost = dbUpdateInfo.Host;
}
dbUsgaProvince._UpdateOn = DateTime.Now;
dbUsgaProvince._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUsgaProvince._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Golf_UsgaProvince_Db dbUsgaProvince, SaxGolfUsgaProvince usgaProvince)
{
//usgaProvince.Id = new SysId(dbUsgaProvince._Id);
usgaProvince.CountryId = new SysId(dbUsgaProvince._CountryId);
usgaProvince.ProvinceCode = dbUsgaProvince._ProvinceCode;
usgaProvince.EntProvinceCode = dbUsgaProvince._EntProvinceCode;
usgaProvince.ProvinceName = dbUsgaProvince._ProvinceName;
usgaProvince.CoursesUpdateAt = dbUsgaProvince._CoursesUpdateAt;
// Common.
usgaProvince.Notes = dbUsgaProvince._Notes;
usgaProvince.Status = SacsSystem.GetStatusForCode(dbUsgaProvince._Status);
usgaProvince.SetCreateStamp(dbUsgaProvince._CreateOn, new SysId(dbUsgaProvince._CreateBy), dbUsgaProvince._CreateHost);
usgaProvince.SetUpdateStamp(dbUsgaProvince._UpdateOn, new SysId(dbUsgaProvince._UpdateBy), dbUsgaProvince._UpdateHost);
usgaProvince.AcceptChanges();
}
//-------------------------------------------------------------------
// Bulk updates.
/// <summary>
/// Bulk update USGA Provinces.
/// <para>- Country code must be supplied to identify parent.</para>
/// <para>- Province code must be supplied to act as identifier.</para>
/// <para>- Other properties are validated as per province rules - check error state.</para>
/// <para>- Other properties are left as is if null.</para>
/// </summary>
public override bool BulkUpdateUsgaProvinces(List<UsgaProvinceData> provinces, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
List<UsgaProvinceData> provincesToUpdate = new List<UsgaProvinceData>();
// Validate supplied data.
foreach (UsgaProvinceData province in provinces)
{
// Validate province properties.
// Country and Province Codes are mandatory, other values only validated if non-null.
if (!IsValidValue(province.CountryCode, "country", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryCode), true)) return false;
if (!IsValidValue(province.ProvinceCode, "code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceCode), true)) return false;
if (!IsValidValue(province.EntProvinceCode, "ENT code", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_EntProvinceCode))) return false;
if (province.ProvinceName != null && !IsValidValue(province.ProvinceName, "name", (long)SaxDbDfn_Reference.GetColTextLen(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName))) return false;
provincesToUpdate.Add(province);
}
int MaxBulkUpdateBatchSize = 64;
int batchSize = provincesToUpdate.Any() ? (int)Math.Ceiling(provincesToUpdate.Count() / Math.Ceiling((double)provincesToUpdate.Count() / MaxBulkUpdateBatchSize)) : MaxBulkUpdateBatchSize;
while (provincesToUpdate.Any())
{
List<String> query = new List<string>();
query.Add($"Declare @statusActive VarChar(3) = '{SacsSystem.GetStatusCode(SaxGolfUsgaProvince.DefaultStatus)}';");
query.Add($"Declare @updateOn DateTime = GetDate();");
query.Add($"Declare @updateBy Int = {SysId.ToLong(dbUpdateInfo.UserId)};");
query.Add($"Declare @updateHost VarChar(100) = '{DbQuery.FormatForCondition(dbUpdateInfo.Host)}';");
query.Add("Merge");
query.Add($"Into {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince)} uPrv");
query.Add("Using");
query.Add("(");
query.Add("Select dCty.Id CountryId, dPrv.CountryCode, dPrv.ProvinceCode, dPrv.EntProvinceCode, dPrv.ProvinceName");
query.Add("From");
query.Add("(");
query.Add("Select '' CountryCode, '' ProvinceCode, '' EntProvinceCode, '' ProvinceName");
foreach (UsgaProvinceData province in provincesToUpdate.ExtractRange(0, batchSize))
query.Add($"Union Select '{DbQuery.FormatForCondition(province.CountryCode)}', '{DbQuery.FormatForCondition(province.ProvinceCode)}', " + (province.EntProvinceCode != null ? $"'{DbQuery.FormatForCondition(province.EntProvinceCode)}'" : "Null") + "," + (province.ProvinceName != null ? $"'{DbQuery.FormatForCondition(province.ProvinceName)}'" : "Null"));
query.Add(") dPrv");
query.Add($"Inner Join {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCountry)} dCty On dCty.CountryCode=dPrv.CountryCode");
query.Add(") dPrv");
query.Add("On uPrv.CountryId=dPrv.CountryId And uPrv.ProvinceCode=dPrv.ProvinceCode");
query.Add("When Matched And ((dPrv.EntProvinceCode Is Not Null And uPrv.EntProvinceCode!=dPrv.EntProvinceCode) Or (dPrv.ProvinceName Is Not Null And uPrv.ProvinceName!=dPrv.ProvinceName) Or uPrv.Status!=@statusActive)");
query.Add("Then Update Set");
query.Add(" EntProvinceCode=Coalesce(dPrv.EntProvinceCode,uPrv.EntProvinceCode),");
query.Add(" ProvinceName=Coalesce(dPrv.ProvinceName,uPrv.ProvinceName),");
query.Add(" Status=@statusActive,");
query.Add(" UpdateOn=@updateOn,");
query.Add(" UpdateBy=@updateBy,");
query.Add(" UpdateHost=@updateHost");
query.Add("When Not Matched And Len(IsNull(dPrv.ProvinceName,''))>0");
query.Add("Then Insert (CountryId,ProvinceCode,EntProvinceCode,ProvinceName,Notes,Flags,Status,CreateOn,CreateBy,CreateHost,UpdateOn,UpdateBy,UpdateHost)");
query.Add($"Values (dPrv.CountryId,dPrv.ProvinceCode,Coalesce(dPrv.EntProvinceCode,''),dPrv.ProvinceName,'',0,@statusActive,@updateOn,@updateBy,@updateHost,@updateOn,@updateBy,@updateHost)");
query.Add(";");
//SaLogger.Info($"{SysUtil.Fn} Bulk USGA Province update query:\n\t{query.Concat("\n\t")}");
try
{
int result = ReferenceDatabase.ExecuteNonQuery(query.Concat("\n"));
if (ReferenceDatabase.HasErrorState())
SaLogger.Warn($"{SysUtil.Fn} Error executing bulk USGA Province update - {ReferenceDatabase.ErrorStateMessage}");
}
catch (Exception exc)
{
SaLogger.Warn(SysUtil.Fn + " " + ExceptionUtil.GetLogMessage(exc, " executing bulk USGA Province update"));
}
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUsgaProvince = "UsgPrv";
private static readonly String aliasUsgaProvince_Country = "UsgPrv_Cty";
private static readonly String prefixUsgaProvince_Country = aliasUsgaProvince_Country + "_";
private static readonly String colProvince_Facility_Count = "Prv_Fty_Count";
private static readonly String colProvince_Facility_Active_Count = "Prv_Fty_Act_Count";
private static readonly String colProvince_Course_Count = "Prv_Crs_Count";
private static readonly String colProvince_Course_Active_Count = "Prv_Crs_Act_Count";
private static readonly String colProvince_Markers_Percent = "Prv_Mkr_Perc";
private void SetUsgaProvinceColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Reference.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Reference.GetTableForColumn(dbCol) == SaxDbDfn_Reference.TableIdx.UsgaProvince)
alias = aliasUsgaProvince;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Reference.GetColumnName(dbCol, false), SaxDbDfn_Reference.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Reference.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Reference.GetColTextLen(dbCol);
}
public override ColumnDfn GetUsgaProvinceColumnDfn(SaxGolfUsgaProvince.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxGolfUsgaProvince.Column.Pos:
SetUsgaProvinceColDfn(columnDfn, "Pos", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxGolfUsgaProvince.Column.Id:
SetUsgaProvinceColDfn(columnDfn, "Id", 80, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaProvince.Column.CountryId:
SetUsgaProvinceColDfn(columnDfn, "Country #", 80, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaProvince.Column.Country_Name:
SetUsgaProvinceColDfn(columnDfn, "Country", 120, SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName, ColumnAlignment.Center, DataValue.DataType.String, aliasUsgaProvince_Country, prefixUsgaProvince_Country);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxGolfUsgaProvince.Column.ProvinceCode:
SetUsgaProvinceColDfn(columnDfn, "Code", 80, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceCode, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaProvince.Column.ProvinceName:
SetUsgaProvinceColDfn(columnDfn, "Name", 120, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaProvince.Column.CoursesUpdateAt_Date:
SetUsgaProvinceColDfn(columnDfn, "Courses updated", 120, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CoursesUpdateAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
case SaxGolfUsgaProvince.Column.FacilityCount_All:
SetUsgaProvinceColDfn(columnDfn, "Facilities", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colProvince_Facility_Count;
break;
case SaxGolfUsgaProvince.Column.FacilityCount_Active:
SetUsgaProvinceColDfn(columnDfn, "Facilities (act)", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colProvince_Facility_Active_Count;
break;
case SaxGolfUsgaProvince.Column.CourseCount_All:
SetUsgaProvinceColDfn(columnDfn, "Courses", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colProvince_Course_Count;
break;
case SaxGolfUsgaProvince.Column.CourseCount_Active:
SetUsgaProvinceColDfn(columnDfn, "Courses (act)", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colProvince_Course_Active_Count;
break;
case SaxGolfUsgaProvince.Column.MarkerPercent:
SetUsgaCountryColDfn(columnDfn, "Markers %", 60, SaxDbDfn_Reference.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colProvince_Markers_Percent;
break;
//-----------------------------------------------------------
// Common properties.
case SaxGolfUsgaProvince.Column.Notes:
SetUsgaProvinceColDfn(columnDfn, "Notes", 240, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Notes);
break;
case SaxGolfUsgaProvince.Column.Flags:
SetUsgaProvinceColDfn(columnDfn, "Flags", 60, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxGolfUsgaProvince.Column.Status:
SetUsgaProvinceColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaProvince.Column.Status_Desc:
SetUsgaProvinceColDfn(columnDfn, "Status", 90, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status, ColumnAlignment.Center);
break;
case SaxGolfUsgaProvince.Column.Status_Ind:
SetUsgaProvinceColDfn(columnDfn, "Status", 80, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxGolfUsgaProvince.Column.CreateOn_Date:
SetUsgaProvinceColDfn(columnDfn, "Created", 80, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxGolfUsgaProvince.Column.UpdateOn_Date:
SetUsgaProvinceColDfn(columnDfn, "Updated", 80, SaxDbDfn_Reference.ColumnIdx.UsgaProvince_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUsgaProvinceQueryFilter(SaxGolfUsgaProvince.Params prm)
{
List<String> filter = new List<String>();
String col_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince);
// Item Ids.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{col_Id} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{col_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Countries.
if (prm.CountryIdsIncluded.HasValidIds())
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, aliasUsgaProvince)} IN ({prm.CountryIdsIncluded.Concat(",")})");
// Province code.
if (!StringUtil.IsEmpty(prm.ProvinceCodeFull))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceCode, aliasUsgaProvince)}='{DbQuery.FormatForCondition(prm.ProvinceCodeFull)}'");
if (!StringUtil.IsBlank(prm.ProvinceFilter))
{
// Split filter into words.
List<String> filterWords = prm.ProvinceFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> provinceFilter = new List<String>();
provinceFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceCode, aliasUsgaProvince)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
provinceFilter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName, aliasUsgaProvince)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
filter.Add(provinceFilter.Concat(" OR ", "(", ")"));
}
}
// Name.
if (!StringUtil.IsEmpty(prm.ProvinceNameFull))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName, aliasUsgaProvince)}='{DbQuery.FormatForCondition(prm.ProvinceNameFull)}'");
if (!StringUtil.IsEmpty(prm.ProvinceNamePartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName, aliasUsgaProvince)} LIKE '%{DbQuery.FormatForLike(prm.ProvinceNamePartial)}%'");
// Flags.
if (prm.PriorityFlagState != SacsHierarchyItem.Params.FlagState.Either)
filter.Add(DbQuery.BuildBitMappedFilter(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Flags, aliasUsgaProvince), SaxGolfUsgaProvince.Flag_Priority, prm.PriorityFlagState == SacsHierarchyItem.Params.FlagState.True));
// Associated data.
if (prm.HasFacilities != SacsHierarchyItem.Params.BoolState.Either)
{
String existsPrefix = (prm.HasFacilities == SacsHierarchyItem.Params.BoolState.True ? "" : "Not ");
filter.Add($"{existsPrefix} Exists (Select 1 From {SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility)} Where {SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId)}={col_Id})");
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Notes, aliasUsgaProvince)} LIKE '%{DbQuery.FormatForLike(prm.NotesPartial)}%'");
// Status.
if (prm.StatusCat != SaxGolfUsgaProvince.StatusCat.Any)
filter.Add($"{SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status, aliasUsgaProvince)} {GetUsgaProvinceStatusCatFilterCondition(prm.StatusCat)}");
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
return filter;
}
internal static String GetUsgaProvinceStatusCatFilterCondition(SaxGolfUsgaProvince.StatusCat statusCat)
{
if (statusCat == SaxGolfUsgaProvince.StatusCat.ActiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Active)}'";
if (statusCat == SaxGolfUsgaProvince.StatusCat.InactiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Inactive)}'";
if (statusCat == SaxGolfUsgaProvince.StatusCat.NotDeleted)
return $"!='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
if (statusCat == SaxGolfUsgaProvince.StatusCat.DeletedOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
return "";
}
// Item sort columns.
public HashSet<String> GetUsgaProvinceSortColumns(SaxGolfUsgaProvince.Params prm)
{
// Sort sequence:
HashSet<String> sortColumnNames = new HashSet<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UsgaProvince columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Reference.GetTableForColumn((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Reference.TableIdx.UsgaProvince)
{
sortCol = SaxDbDfn_Reference.GetColumnNameQual((SaxDbDfn_Reference.ColumnIdx)columnDfn.DbColumn, aliasUsgaProvince);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
AddRandomSortColumn(prm, sortColumnNames);
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUsgaProvinceCount(String filter)
{
ClearErrorState();
return ReferenceDatabase.GetRowCount(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince) + " As " + aliasUsgaProvince, filter);
}
public override long GetUsgaProvinceCount(SaxGolfUsgaProvince.Params prm)
{
ClearErrorState();
return GetUsgaProvinceCount(GetUsgaProvinceQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxGolfUsgaProvince> GetUsgaProvinceList(SaxGolfUsgaProvince.Params prm)
{
ClearErrorState();
List<SaxGolfUsgaProvince> userRoles = new List<SaxGolfUsgaProvince>();
DbQuery qry = new DbQuery(ReferenceDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince), aliasUsgaProvince);
Golf_UsgaProvince_Db dbUsgaProvince = new Golf_UsgaProvince_Db(ReferenceDbInfo);
qry.Columns.AddRange(dbUsgaProvince.ExistingColumnNames);
qry.Filters.AddRange(GetUsgaProvinceQueryFilter(prm));
qry.OrderBy.AddRange(GetUsgaProvinceSortColumns(prm));
// Query data.
using (var dbConnection = ReferenceDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUsgaProvince = new Golf_UsgaProvince_Db(ReferenceDbInfo);
dbUsgaProvince.PopulateFrom(dbDataReader);
userRoles.Add(CreateUsgaProvince(dbUsgaProvince));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRoles;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUsgaProvinceQuery(List<ColumnDfn> columns, SaxGolfUsgaProvince.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(ReferenceDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaProvince), aliasUsgaProvince);
// Add columns as defined in query list.
if (columns.HasId(SaxGolfUsgaProvince.Column.Id))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince));
bool hasCountryCols = (columns.HasId(SaxGolfUsgaProvince.Column.Country_Name));
if (columns.HasId(SaxGolfUsgaProvince.Column.CountryId) || hasCountryCols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, aliasUsgaProvince));
if (columns.HasId(SaxGolfUsgaProvince.Column.ProvinceCode))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceCode, aliasUsgaProvince));
if (columns.HasId(SaxGolfUsgaProvince.Column.ProvinceName))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_ProvinceName, aliasUsgaProvince));
if (columns.HasId(SaxGolfUsgaProvince.Column.CoursesUpdateAt_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CoursesUpdateAt, aliasUsgaProvince));
// Common properties.
if (columns.HasId(SaxGolfUsgaProvince.Column.Notes))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Notes, aliasUsgaProvince));
if (columns.HasId(SaxGolfUsgaProvince.Column.Flags))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Flags, aliasUsgaProvince));
if (columns.HasId(SaxGolfUsgaProvince.Column.Status) || columns.HasId(SaxGolfUsgaProvince.Column.Status_Desc) || columns.HasId(SaxGolfUsgaProvince.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Status, aliasUsgaProvince));
if (columns.HasId(SaxGolfUsgaProvince.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CreateOn, aliasUsgaProvince));
if (columns.HasId(SaxGolfUsgaProvince.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_UpdateOn, aliasUsgaProvince));
//---------------------------------------------------------------------
// Country.
if (hasCountryCols)
{
DbQueryJoin joinCountry = new DbQueryJoin(DbJoinType.LeftOuter);
joinCountry.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCountry), aliasUsgaProvince_Country);
joinCountry.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_Id, aliasUsgaProvince_Country) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_CountryId, aliasUsgaProvince));
query.Joins.Add(joinCountry);
List<SaxDbDfn_Reference.ColumnIdx> cols = new List<SaxDbDfn_Reference.ColumnIdx>();
cols.Add(SaxDbDfn_Reference.ColumnIdx.UsgaCountry_CountryName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Reference.GetColumnNameQual(col, aliasUsgaProvince_Country), prefixUsgaProvince_Country + SaxDbDfn_Reference.GetColumnName(col, false));
prm.Alias_Country = aliasUsgaProvince_Country;
}
//---------------------------------------------------------------------
// Facility count.
if (columns.HasId(SaxGolfUsgaProvince.Column.FacilityCount_All))
{
String aliasFacility = "aPrvFty_Count";
DbQuery queryFacility = new DbQuery(CoreDatabase.DbmsType);
queryFacility.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasFacility);
queryFacility.Columns.Add("Count(*)");
queryFacility.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasFacility) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince));
query.Columns.Add("(" + queryFacility.BuildQuery() + ")", colProvince_Facility_Count);
}
// Active Facility count.
if (columns.HasId(SaxGolfUsgaProvince.Column.FacilityCount_Active))
{
String aliasFacility = "aPrvFtyAct_Count";
DbQuery queryFacility = new DbQuery(CoreDatabase.DbmsType);
queryFacility.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasFacility);
queryFacility.Columns.Add("Count(*)");
queryFacility.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasFacility) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince));
queryFacility.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Status, aliasFacility) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
query.Columns.Add("(" + queryFacility.BuildQuery() + ")", colProvince_Facility_Active_Count);
}
//---------------------------------------------------------------------
// Course count.
if (columns.HasId(SaxGolfUsgaProvince.Column.FacilityCount_All))
{
String aliasFacility = "aPrvFty_Count_Fty";
DbQuery queryFacility = new DbQuery(CoreDatabase.DbmsType);
queryFacility.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasFacility);
queryFacility.Columns.Add("Count(*)");
queryFacility.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasFacility) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince));
// Join to Course.
String aliasCourse = "aPrvFty_Count_Crs";
DbQueryJoin joinCourse = new DbQueryJoin(DbJoinType.Inner);
joinCourse.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse), aliasCourse);
joinCourse.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId, aliasCourse) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, aliasFacility));
queryFacility.Joins.Add(joinCourse);
// Construct sub-query.
query.Columns.Add("(" + queryFacility.BuildQuery() + ")", colProvince_Course_Count);
}
// Active Course count.
if (columns.HasId(SaxGolfUsgaProvince.Column.FacilityCount_Active))
{
String aliasFacility = "aPrvFty_Count_Fty";
DbQuery queryFacility = new DbQuery(CoreDatabase.DbmsType);
queryFacility.Tables.Add(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility), aliasFacility);
queryFacility.Columns.Add("Count(*)");
queryFacility.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, aliasFacility) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince));
// Join to Course.
String aliasCourse = "aPrvFty_Count_Crs";
DbQueryJoin joinCourse = new DbQueryJoin(DbJoinType.Inner);
joinCourse.Table = new StringPair(SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse), aliasCourse);
joinCourse.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId, aliasCourse) + "=" + SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, aliasFacility));
joinCourse.Filters.Add(SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Status, aliasCourse) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
queryFacility.Joins.Add(joinCourse);
// Construct sub-query.
query.Columns.Add("(" + queryFacility.BuildQuery() + ")", colProvince_Course_Active_Count);
}
//---------------------------------------------------------------------
// Marker population %.
if (columns.HasId(SaxGolfUsgaProvince.Column.MarkerPercent))
{
// Sub query to count facilities & privinces with markers, and work out the percent with markers.
String alias_Facility = "prv";
String alias_Course = "crs";
String alias_Marker = "fty";
String table_Facility = $"{SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaFacility)} {alias_Facility}";
String table_Course = $"{SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaCourse)} {alias_Course}";
String table_Marker = $"{SaxDbDfn_Reference.GetTableNameQual(SaxDbDfn_Reference.TableIdx.UsgaMarker)} {alias_Marker}";
String col_Province_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaProvince_Id, aliasUsgaProvince);
String col_Facility_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_Id, alias_Facility);
String col_Facility_ProvinceId = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaFacility_ProvinceId, alias_Facility);
String col_Course_Id = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_Id, alias_Course);
String col_Course_FacilityId = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaCourse_FacilityId, alias_Course);
String col_Marker_CourseId = SaxDbDfn_Reference.GetColumnNameQual(SaxDbDfn_Reference.ColumnIdx.UsgaMarker_CourseId, alias_Marker);
String name_CourseCount = "CourseCount";
String name_CoursesWithMarkers = "CoursesWithMarkers";
List<String> subQuery = new List<String>();
subQuery.Add($"Select Convert (decimal(9,2), Case When {name_CourseCount} > 0 Then 100.0 * (1.0 * {name_CoursesWithMarkers} / {name_CourseCount}) Else 0 End)");
subQuery.Add($"From");
subQuery.Add($"(");
subQuery.Add($"Select");
subQuery.Add($"{name_CourseCount} = (select Count(*) From {table_Course} Where {col_Course_FacilityId} In (Select {col_Facility_Id} From {table_Facility} Where {col_Facility_ProvinceId}={col_Province_Id})),");
subQuery.Add($"{name_CoursesWithMarkers} = (select Count(*) From {table_Course} Where {col_Course_FacilityId} In (Select {col_Facility_Id} From {table_Facility} Where {col_Facility_ProvinceId}={col_Province_Id}) And {col_Course_Id} in (Select {col_Marker_CourseId} from {table_Marker}))");
subQuery.Add($") dat");
query.Columns.Add($"({subQuery.Concat(" ")})", colProvince_Markers_Percent);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUsgaProvinceQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUsgaProvinceSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(ReferenceDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,25 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr.Reference;
namespace Saxonite.Net.Standard.Dbas.Mgr.Reference
{
//=======================================================================
public partial class SaxReferenceGolfMgr_Dbas : SaxReferenceGolfMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SaxReferenceGolfMgr_Dbas(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,739 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - Organisation
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxOrganisation organisation)
{
return new List<StringPair>()
{
new StringPair("Id", SysId.ToString(organisation.Id)),
new StringPair("Name", organisation.Name),
new StringPair("Status", organisation.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxOrganisation CreateOrganisation()
{
ClearErrorState();
return new SaxOrganisation_Dbas(CoreDatabase, null, 0);
}
private SaxOrganisation_Dbas CreateOrganisation(Organisation_Db dbOrganisation)
{
ClearErrorState();
SaxOrganisation_Dbas organisation = new SaxOrganisation_Dbas(CoreDatabase, new SysId(dbOrganisation._Id), (UInt16)dbOrganisation._Flags);
PopulateFrom(dbOrganisation, organisation);
return organisation;
}
//-------------------------------------------------------------------
// Get item.
public override SaxOrganisation GetOrganisation(SaxOrganisation.Params prm)
{
ClearErrorState();
return GetOrganisation(GetOrganisationQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxOrganisation GetOrganisation(String filter)
{
ClearErrorState();
long count = GetOrganisationCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxOrganisation organisation = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo);
dbOrganisation.PopulateFrom(dbCommand, aliasOrganisation, filter);
organisation = CreateOrganisation(dbOrganisation);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return organisation;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidOrganisationData(SaxOrganisation.Data data, SaxOrganisation.ErrField errField)
{
ClearErrorState();
if (!base.IsValidOrganisationData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertOrganisation";
ClearErrorState();
if (!IsValidOrganisation(organisation)) return false;
if (SysId.IsValid(organisation.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo);
PopulateTo(dbOrganisation, organisation, dbUpdateInfo);
if (Organisation_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbOrganisation._Id = CoreDatabase.GetNextIdFromTable("Organisation");
}
dbOrganisation.ExecuteInsertCommand(dbCommand);
organisation.Id = new SysId(dbOrganisation._Id);
organisation.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateOrganisation";
ClearErrorState();
if (!IsValidOrganisation(organisation)) return false;
if (!SysId.IsValid(organisation.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!organisation.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo);
dbOrganisation.PopulateFrom(dbCommand, aliasOrganisation, "Id=" + SysId.ToString(organisation.Id));
// ToDo SaxUpdateLogItemMonitor_Organisation updateLogMonitor = new SaxUpdateLogItemMonitor_Organisation(SessionContext, CreateOrganisation(dbOrganisation), dbUpdateInfo);
// Update item.
PopulateTo(dbOrganisation, organisation, dbUpdateInfo);
dbOrganisation.ExecuteUpdateCommand(dbCommand);
organisation.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(organisation);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool OrganisationCanBeDeleted(SaxOrganisation organisation)
{
ClearErrorState();
if (!base.OrganisationCanBeDeleted(organisation)) return false;
return true;
}
public override bool DeleteOrganisation(SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteOrganisation";
ClearErrorState();
if (!OrganisationCanBeDeleted(organisation)) return false;
// Organisations are logically deleted by changing the status.
organisation.Status = SaStatus.Deleted;
return UpdateOrganisation(organisation, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo);
dbOrganisation.PopulateFrom(dbCommand, aliasOrganisation, "Id=" + organisation.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation) + " WHERE Id=" + SysId.ToString(organisation.Id) + ";";
dbCommand.ExecuteNonQuery();
organisation.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(organisation).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Organisation_Db dbOrganisation, SaxOrganisation organisation, DbUpdateInfo dbUpdateInfo)
{
dbOrganisation._Id = SysId.ToInt(organisation.Id);
dbOrganisation._Name = organisation.Name;
dbOrganisation._OrganisationType = OrganisationTypeCodes.GetCodeForType(organisation.OrganisationType);
dbOrganisation._OrganisationCategory = OrganisationCategoryCodes.GetCodeForType(organisation.OrganisationCategory);
dbOrganisation._SportIdPrimary = SysId.ToInt(organisation.SportIdPrimary);
dbOrganisation._RegionIdPrimary = SysId.ToInt(organisation.RegionIdPrimary);
dbOrganisation._About = StringUtil.EmptyOnNull(organisation.About);
dbOrganisation._Facilities = StringUtil.EmptyOnNull(organisation.Facilities);
dbOrganisation._ContactData = StringUtil.EmptyOnNull(organisation.ContactData);
dbOrganisation._Notes = StringUtil.EmptyOnNull(organisation.Notes);
dbOrganisation._Status = SacsSystem.GetStatusCode(organisation.Status);
dbOrganisation._Flags = (short)organisation.Flags;
if (!SysId.IsValid(organisation.Id))
{
dbOrganisation._CreateOn = DateTime.Now;
dbOrganisation._CreateBy = dbUpdateInfo.UserId.ToInt();
dbOrganisation._CreateHost = dbUpdateInfo.Host;
}
dbOrganisation._UpdateOn = DateTime.Now;
dbOrganisation._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbOrganisation._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Organisation_Db dbOrganisation, SaxOrganisation organisation)
{
//organisation.Id = new SysId(dbOrganisation._Id);
//organisation.UserAccountId = new SysId(dbOrganisation._UserAccountId);
organisation.Name = dbOrganisation._Name;
organisation.OrganisationType = (Sax.OrganisationType)OrganisationTypeCodes.GetTypeForCode(dbOrganisation._OrganisationType);
organisation.OrganisationCategory = (Sax.OrganisationCategory)OrganisationCategoryCodes.GetTypeForCode(dbOrganisation._OrganisationCategory);
organisation.SportIdPrimary = new SysId(dbOrganisation._SportIdPrimary ?? 0);
organisation.RegionIdPrimary = new SysId(dbOrganisation._RegionIdPrimary ?? 0);
organisation.About = dbOrganisation._About;
organisation.Facilities = dbOrganisation._Facilities;
organisation.ContactData = dbOrganisation._ContactData;
organisation.Notes = dbOrganisation._Notes;
organisation.Status = SacsSystem.GetStatusForCode(dbOrganisation._Status);
organisation.SetCreateStamp(dbOrganisation._CreateOn, new SysId(dbOrganisation._CreateBy), dbOrganisation._CreateHost);
organisation.SetUpdateStamp(dbOrganisation._UpdateOn, new SysId(dbOrganisation._UpdateBy), dbOrganisation._UpdateHost);
organisation.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasOrganisation = "Org";
private static readonly String aliasOrganisation_Sport = "Org_Spt";
private static readonly String prefixOrganisation_Sport = "Org_Spt_";
private static readonly String aliasOrganisation_Region = "Org_Rgn";
private static readonly String prefixOrganisation_Region = "Org_Rgn_";
private static readonly String colOrganisation_User_Count = "Org_Usr_Count";
private static readonly String colOrganisation_Member_Count = "Org_Mbr_Count";
private static readonly String colOrganisation_LogoImage_Count = "Org_LogoImg_Count";
private void SetOrganisationColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.Organisation)
alias = aliasOrganisation;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetOrganisationColumnDfn(SaxOrganisation.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxOrganisation.Column.Pos:
SetOrganisationColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxOrganisation.Column.Id:
SetOrganisationColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.Organisation_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxOrganisation.Column.Name:
SetOrganisationColDfn(columnDfn, "Name", 180, SaxDbDfn_Core.ColumnIdx.Organisation_Name);
break;
case SaxOrganisation.Column.OrganisationType:
SetOrganisationColDfn(columnDfn, "Type", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SaxOrganisation.Column.OrganisationType_Desc:
SetOrganisationColDfn(columnDfn, "Type", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SaxOrganisation.Column.OrganisationCategory:
SetOrganisationColDfn(columnDfn, "Category", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SaxOrganisation.Column.OrganisationCategory_Desc:
SetOrganisationColDfn(columnDfn, "Category", 80, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, ColumnAlignment.Center, DataValue.DataType.String);
break;
//-----------------------------------------------------------
// Sport.
case SaxOrganisation.Column.SportId:
SetOrganisationColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.Sport_Id, ColumnAlignment.Right, DataValue.DataType.Long, aliasOrganisation_Sport, prefixOrganisation_Sport);
columnDfn.ReadOnly = true;
break;
case SaxOrganisation.Column.Sport_Name:
SetOrganisationColDfn(columnDfn, "Sport", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisation_Sport, prefixOrganisation_Sport);
break;
//-----------------------------------------------------------
// Region.
case SaxOrganisation.Column.RegionId:
SetOrganisationColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.Region_Id, ColumnAlignment.Right, DataValue.DataType.Long, aliasOrganisation_Region, prefixOrganisation_Region);
columnDfn.ReadOnly = true;
break;
case SaxOrganisation.Column.Region_Name:
SetOrganisationColDfn(columnDfn, "Region", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisation_Region, prefixOrganisation_Region);
break;
//-----------------------------------------------------------
// Derived properties.
case SaxOrganisation.Column.User_Count:
SetOrganisationColDfn(columnDfn, "Users", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colOrganisation_User_Count;
break;
case SaxOrganisation.Column.Member_Count:
SetOrganisationColDfn(columnDfn, "Members", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colOrganisation_Member_Count;
break;
case SaxOrganisation.Column.LogoImage_Count:
SetOrganisationColDfn(columnDfn, "Logos", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colOrganisation_LogoImage_Count;
break;
//-----------------------------------------------------------
// Common properties.
case SaxOrganisation.Column.Notes:
SetOrganisationColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.Organisation_Notes);
break;
case SaxOrganisation.Column.Flags:
SetOrganisationColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.Organisation_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxOrganisation.Column.Status:
SetOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Organisation_Status, ColumnAlignment.Center);
break;
case SaxOrganisation.Column.Status_Desc:
SetOrganisationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.Organisation_Status, ColumnAlignment.Center);
break;
case SaxOrganisation.Column.Status_Ind:
SetOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Organisation_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxOrganisation.Column.CreateOn_Date:
SetOrganisationColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.Organisation_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisation.Column.UpdateOn_Date:
SetOrganisationColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.Organisation_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetOrganisationQueryFilter(SaxOrganisation.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation) + " NOT IN (" + idsExcluded + ")");
// Name.
if (!StringUtil.IsEmpty(prm.NameFull))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation) + "='" + DbQuery.FormatForCondition(prm.NameFull) + "'");
if (!StringUtil.IsEmpty(prm.NamePartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation) + " Like '%" + DbQuery.FormatForLike(prm.NamePartial, true) + "%'");
// Organisation Type.
if (prm.OrganisationType > 0)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, aliasOrganisation) + "='" + OrganisationTypeCodes.GetCodeForType(prm.OrganisationType) + "'");
// Organisation Category.
if (prm.OrganisationCategory > 0)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, aliasOrganisation) + "='" + OrganisationCategoryCodes.GetCodeForType(prm.OrganisationCategory) + "'");
if (!prm.OrganisationCategoriesExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, aliasOrganisation) + " Not In (" + prm.OrganisationCategoriesExcluded.Select(cat => "'" + OrganisationCategoryCodes.GetCodeForType(cat) + "'").Concat(",") + ")");
// Organisation filter.
if (!StringUtil.IsEmpty(prm.OrganisationFilter))
{
// Split filter into words.
List<String> searchFilter = new List<String>();
List<String> filterWords = prm.OrganisationFilter.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> organisationFilter = new List<String>();
organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
searchFilter.Add(organisationFilter.Concat(" OR ", "(", ")"));
}
filter.Add(searchFilter.Concat(" AND ", "(", ")"));
}
// Sport Ids.
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
{
// Sport can be matched directly or as the parent of the sport.
List<String> sportFilter = new List<string>();
String aliasSport = prm.Alias_Sport_Primary;
if (StringUtil.IsEmpty(aliasSport))
{
// Sport table is not linked in query.
aliasSport = "aSpt";
DbQuery sportQuery = new DbQuery(CoreDatabase.DbmsType);
sportQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasSport);
sportQuery.Columns.Add("1");
sportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation));
sportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport) + " IN (" + sportIdsIncluded + ")");
sportFilter.Add("Exists(" + sportQuery.BuildQuery() + ")");
}
else
{
// Sport table is linked in the main query.
sportFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport) + " IN (" + sportIdsIncluded + ")");
}
sportFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation) + " IN (" + sportIdsIncluded + ")");
filter.Add(sportFilter.Concat(" OR ", "(", ")"));
}
// Region Ids.
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
if (!regionIdsIncluded.IsEmpty())
{
// Region can be matched directly or as the parent of the region.
List<String> regionFilter = new List<string>();
String aliasRegion = prm.Alias_Region_Primary;
if (StringUtil.IsEmpty(aliasRegion))
{
// Region table is not linked in query.
aliasRegion = "aRgn";
DbQuery regionQuery = new DbQuery(CoreDatabase.DbmsType);
regionQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasRegion);
regionQuery.Columns.Add("1");
regionQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation));
regionQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion) + " IN (" + regionIdsIncluded + ")");
regionFilter.Add("Exists(" + regionQuery.BuildQuery() + ")");
}
else
{
// Region table is linked in the main query.
regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion) + " IN (" + regionIdsIncluded + ")");
}
regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation) + " IN (" + regionIdsIncluded + ")");
filter.Add(regionFilter.Concat(" OR ", "(", ")"));
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Notes, aliasOrganisation) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxOrganisation.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasOrganisation) + GetOrganisationStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetOrganisationStatusCatFilterCondition(SaxOrganisation.StatusCat statusCat)
{
if (statusCat == SaxOrganisation.StatusCat.AwaitingOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + "'";
if (statusCat == SaxOrganisation.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxOrganisation.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxOrganisation.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxOrganisation.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetOrganisationSortColumns(SaxOrganisation.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for Organisation columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.Organisation)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasOrganisation);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetOrganisationCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation) + " As " + aliasOrganisation, filter);
}
public override long GetOrganisationCount(SaxOrganisation.Params prm)
{
ClearErrorState();
return GetOrganisationCount(GetOrganisationQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxOrganisation> GetOrganisationList(SaxOrganisation.Params prm)
{
ClearErrorState();
List<SaxOrganisation> userAccounts = new List<SaxOrganisation>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasOrganisation);
Organisation_Db dbOrganisation = new Organisation_Db(CoreDbInfo);
qry.Columns.AddRange(dbOrganisation.ExistingColumnNames);
qry.Filters.AddRange(GetOrganisationQueryFilter(prm));
qry.OrderBy.AddRange(GetOrganisationSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbOrganisation = new Organisation_Db(CoreDbInfo);
dbOrganisation.PopulateFrom(dbDataReader);
userAccounts.Add(CreateOrganisation(dbOrganisation));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userAccounts;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteOrganisationQuery(List<ColumnDfn> columns, SaxOrganisation.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasOrganisation);
// Add columns as defined in query list.
if (columns.HasId(SaxOrganisation.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation));
if (columns.HasId(SaxOrganisation.Column.Name))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Name, aliasOrganisation));
if (columns.HasId(SaxOrganisation.Column.OrganisationType) || columns.HasId(SaxOrganisation.Column.OrganisationType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, aliasOrganisation));
if (columns.HasId(SaxOrganisation.Column.OrganisationCategory) || columns.HasId(SaxOrganisation.Column.OrganisationCategory_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, aliasOrganisation));
// Sport.
bool hasSportCols = columns.HasId(SaxOrganisation.Column.Sport_Name);
if (columns.HasId(SaxOrganisation.Column.SportId) || hasSportCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation));
// Region.
bool hasRegionCols = columns.HasId(SaxOrganisation.Column.Region_Name);
if (columns.HasId(SaxOrganisation.Column.RegionId) || hasRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation));
// Common properties.
if (columns.HasId(SaxOrganisation.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Notes, aliasOrganisation));
if (columns.HasId(SaxOrganisation.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Flags, aliasOrganisation));
if (columns.HasId(SaxOrganisation.Column.Status) || columns.HasId(SaxOrganisation.Column.Status_Desc) || columns.HasId(SaxOrganisation.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasOrganisation));
if (columns.HasId(SaxOrganisation.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_CreateOn, aliasOrganisation));
if (columns.HasId(SaxOrganisation.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_UpdateOn, aliasOrganisation));
//---------------------------------------------------------------------
// Sport.
if (hasSportCols || prm.SportIdsIncluded.HasValidIds())
{
prm.Alias_Sport_Primary = aliasOrganisation_Sport;
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasOrganisation_Sport);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasOrganisation_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasOrganisation));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisation_Sport), prefixOrganisation_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Region.
if (hasRegionCols || prm.RegionIdsIncluded.HasValidIds())
{
prm.Alias_Region_Primary = aliasOrganisation_Region;
DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasOrganisation_Region);
joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasOrganisation_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasOrganisation));
query.Joins.Add(joinRegion);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisation_Region), prefixOrganisation_Region + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// User count.
if (columns.HasId(SaxOrganisation.Column.User_Count))
{
String aliasUserCount = "aUsrOrg_Count";
DbQuery queryUserCount = new DbQuery(CoreDatabase.DbmsType);
queryUserCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasUserCount);
queryUserCount.Columns.Add("Count(*)");
queryUserCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation));
queryUserCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasUserCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Join to User Account.
String aliasUserAccount = "aUsrOrg_UsrAcc";
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.Inner);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserCount));
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
queryUserCount.Joins.Add(joinUserAccount);
// Construct sub-query.
query.Columns.Add("(" + queryUserCount.BuildQuery() + ")", colOrganisation_User_Count);
}
//---------------------------------------------------------------------
// Member count.
if (columns.HasId(SaxOrganisation.Column.Member_Count))
{
String aliasMemberCount = "aUsrOrg_Count";
DbQuery queryMemberCount = new DbQuery(CoreDatabase.DbmsType);
queryMemberCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasMemberCount);
queryMemberCount.Columns.Add("Count(*)");
queryMemberCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasMemberCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation));
queryMemberCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasMemberCount) + ">0");
queryMemberCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasMemberCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Join to User Account.
String aliasUserAccount = "aUsrOrg_UsrAcc";
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.Inner);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasMemberCount));
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
queryMemberCount.Joins.Add(joinUserAccount);
// Construct sub-query.
query.Columns.Add("(" + queryMemberCount.BuildQuery() + ")", colOrganisation_Member_Count);
}
//---------------------------------------------------------------------
// Logo Image count.
if (columns.HasId(SaxOrganisation.Column.LogoImage_Count))
{
String aliasLogoCount = "aImg_Logo";
DbQuery queryLogoCount = new DbQuery(CoreDatabase.DbmsType);
queryLogoCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasLogoCount);
queryLogoCount.Columns.Add("Count(*)");
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasLogoCount) + "=" + (int)Sax.DataItemType.Organisation);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasLogoCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisation));
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasLogoCount) + "=" + (int)Sax.ImageType.OrganisationLogo);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasLogoCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Construct sub-query.
query.Columns.Add("(" + queryLogoCount.BuildQuery() + ")", colOrganisation_LogoImage_Count);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetOrganisationQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetOrganisationSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,909 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Account
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserAccount userAccount)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userAccount.Id)),
new StringPair("Email",userAccount.EmailAddress),
new StringPair("Status",userAccount.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserAccount CreateUserAccount()
{
ClearErrorState();
return new SaxUserAccount_Dbas(CoreDatabase, null, 0);
}
private SaxUserAccount_Dbas CreateUserAccount(UserAccount_Db dbUserAccount)
{
ClearErrorState();
SaxUserAccount_Dbas userAccount = new SaxUserAccount_Dbas(CoreDatabase, new SysId(dbUserAccount._Id), (ushort)dbUserAccount._Flags);
PopulateFrom(dbUserAccount, userAccount);
return userAccount;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserAccount GetUserAccount(SaxUserAccount.Params prm)
{
ClearErrorState();
return GetUserAccount(GetUserAccountQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserAccount GetUserAccount(String filter)
{
ClearErrorState();
long count = GetUserAccountCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserAccount userAccount = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo);
dbUserAccount.PopulateFrom(dbCommand, aliasUserAccount, filter);
userAccount = CreateUserAccount(dbUserAccount);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userAccount;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserAccountData(SaxUserAccount.Data data, SaxUserAccount.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserAccountData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserAccount";
ClearErrorState();
if (!IsValidUserAccount(userAccount)) return false;
if (SysId.IsValid(userAccount.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo);
PopulateTo(dbUserAccount, userAccount, dbUpdateInfo);
if (UserAccount_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserAccount._Id = CoreDatabase.GetNextIdFromTable("UserAccount");
}
dbUserAccount.ExecuteInsertCommand(dbCommand);
userAccount.Id = new SysId(dbUserAccount._Id);
userAccount.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserAccount";
ClearErrorState();
if (!IsValidUserAccount(userAccount)) return false;
if (!SysId.IsValid(userAccount.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userAccount.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo);
dbUserAccount.PopulateFrom(dbCommand, aliasUserAccount, "Id=" + SysId.ToString(userAccount.Id));
// ToDo SaxUpdateLogItemMonitor_UserAccount updateLogMonitor = new SaxUpdateLogItemMonitor_UserAccount(SessionContext, CreateUserAccount(dbUserAccount), dbUpdateInfo);
// Update item.
PopulateTo(dbUserAccount, userAccount, dbUpdateInfo);
dbUserAccount.ExecuteUpdateCommand(dbCommand);
userAccount.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userAccount);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserAccountCanBeDeleted(SaxUserAccount userAccount)
{
ClearErrorState();
if (!base.UserAccountCanBeDeleted(userAccount)) return false;
return true;
}
public override bool DeleteUserAccount(SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserAccount";
ClearErrorState();
if (!UserAccountCanBeDeleted(userAccount)) return false;
// User Accounts are logically deleted by changing the status.
userAccount.Status = SaStatus.Deleted;
return UpdateUserAccount(userAccount, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo);
dbUserAccount.PopulateFrom(dbCommand, aliasUserAccount, "Id=" + userAccount.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount) + " WHERE Id=" + SysId.ToString(userAccount.Id) + ";";
dbCommand.ExecuteNonQuery();
userAccount.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userAccount).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserAccount_Db dbUserAccount, SaxUserAccount userAccount, DbUpdateInfo dbUpdateInfo)
{
dbUserAccount._Id = SysId.ToInt(userAccount.Id);
dbUserAccount._EmailAddress = userAccount.EmailAddress;
dbUserAccount._Title = userAccount.Title;
dbUserAccount._FirstName = userAccount.FirstName;
dbUserAccount._Initials = userAccount.Initials;
dbUserAccount._LastName = userAccount.LastName;
dbUserAccount._About = userAccount.About;
dbUserAccount._PhoneMain = StringUtil.EmptyOnNull(userAccount.PhoneMain);
dbUserAccount._PhoneMobile = StringUtil.EmptyOnNull(userAccount.PhoneMobile);
dbUserAccount._Gender = (byte)userAccount.Gender;
dbUserAccount._DateOfBirthDay = userAccount.DateOfBirthDay;
dbUserAccount._DateOfBirthMonth = userAccount.DateOfBirthMonth;
dbUserAccount._DateOfBirthYear = userAccount.DateOfBirthYear;
dbUserAccount._RegionIdCountry = SysId.ToInt(userAccount.RegionIdCountry);
dbUserAccount._RegionIdProvince = SysId.ToInt(userAccount.RegionIdProvince);
// Security
dbUserAccount._PasswordHashed = userAccount.PasswordHashed;
dbUserAccount._PasswordToken = userAccount.PasswordToken;
dbUserAccount._PasswordHistory = userAccount.PasswordHistory.Concat(SaxUserAccount.PasswordHistoryDelim);
dbUserAccount._PasswordChangedAt = userAccount.PasswordChangedAt;
// Login.
dbUserAccount._LastLoginAt = userAccount.LastLoginAt;
dbUserAccount._LastInvalidLoginAt = userAccount.LastInvalidLoginAt;
dbUserAccount._InvalidLoginCount = userAccount.InvalidLoginCount;
// Common.
dbUserAccount._Notes = userAccount.Notes;
dbUserAccount._Status = SacsSystem.GetStatusCode(userAccount.Status);
dbUserAccount._Flags = (short)userAccount.Flags;
if (!SysId.IsValid(userAccount.Id))
{
dbUserAccount._CreateOn = DateTime.Now;
dbUserAccount._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserAccount._CreateHost = dbUpdateInfo.Host;
}
dbUserAccount._UpdateOn = DateTime.Now;
dbUserAccount._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserAccount._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserAccount_Db dbUserAccount, SaxUserAccount userAccount)
{
//userAccount.Id = new SysId(dbUserAccount._Id);
userAccount.EmailAddress = dbUserAccount._EmailAddress;
userAccount.Title = dbUserAccount._Title;
userAccount.FirstName = dbUserAccount._FirstName;
userAccount.Initials = dbUserAccount._Initials;
userAccount.LastName = dbUserAccount._LastName;
userAccount.About = dbUserAccount._About;
userAccount.PhoneMain = dbUserAccount._PhoneMain;
userAccount.PhoneMobile = dbUserAccount._PhoneMobile;
userAccount.Gender = (Sax.Gender)dbUserAccount._Gender;
userAccount.DateOfBirthDay = dbUserAccount._DateOfBirthDay;
userAccount.DateOfBirthMonth = dbUserAccount._DateOfBirthMonth;
userAccount.DateOfBirthYear = dbUserAccount._DateOfBirthYear ?? 0;
userAccount.RegionIdCountry = new SysId(dbUserAccount._RegionIdCountry ?? 0);
userAccount.RegionIdProvince = new SysId(dbUserAccount._RegionIdProvince ?? 0);
// Security.
userAccount.PasswordHashed = dbUserAccount._PasswordHashed;
userAccount.PasswordToken = dbUserAccount._PasswordToken;
userAccount.PasswordHistory = StringListUtil.Split(dbUserAccount._PasswordHistory, SaxUserAccount.PasswordHistoryDelim);
userAccount.PasswordChangedAt = dbUserAccount._PasswordChangedAt;
// Login.
userAccount.LastLoginAt = dbUserAccount._LastLoginAt;
userAccount.LastInvalidLoginAt = dbUserAccount._LastInvalidLoginAt;
userAccount.InvalidLoginCount = dbUserAccount._InvalidLoginCount;
// Common.
userAccount.Notes = dbUserAccount._Notes;
userAccount.Status = SacsSystem.GetStatusForCode(dbUserAccount._Status);
userAccount.SetCreateStamp(dbUserAccount._CreateOn, new SysId(dbUserAccount._CreateBy), dbUserAccount._CreateHost);
userAccount.SetUpdateStamp(dbUserAccount._UpdateOn, new SysId(dbUserAccount._UpdateBy), dbUserAccount._UpdateHost);
userAccount.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserAccount = "UsrAct";
private static readonly String aliasUserAccount_Region_Country = "UsrAct_Ctr";
private static readonly String prefixUserAccount_Region_Country = aliasUserAccount_Region_Country + "_";
private static readonly String aliasUserAccount_Region_Province = "UsrAct_Prv";
private static readonly String prefixUserAccount_Region_Province = aliasUserAccount_Region_Province + "_";
private static readonly String aliasUserAccount_UserRole_SysAdmin = "UsrAct_UsrRol_SysAdm";
private static readonly String prefixUserAccount_UserRole_SysAdmin = aliasUserAccount_UserRole_SysAdmin + "_";
private static readonly String aliasUserAccount_UserSport = "UsrAct_UsrSpt";
//private static readonly String prefixUserAccount_UserSport = aliasUserAccount_UserSport + "_";
private static readonly String aliasUserAccount_UserRole = "UsrAct_UsrRol";
//private static readonly String prefixUserAccount_UserRole = aliasUserAccount_UserRole + "_";
private static readonly String colUserAccount_UserSportCount = "UsrAct_SportCount";
private static readonly String colUserAccount_UserSportCount_Active = "UsrAct_SportCount_Act";
private static readonly String colUserAccount_UserRoleCount = "UsrAct_RoleCount";
private static readonly String colUserAccount_SystemAdminRole = "UsrAct_SystemAdminRole";
private void SetUserAccountColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserAccount)
alias = aliasUserAccount;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserAccountColumnDfn(SaxUserAccount.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserAccount.Column.Pos:
SetUserAccountColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserAccount.Column.Id:
SetUserAccountColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.EmailAddress:
SetUserAccountColDfn(columnDfn, "Email", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.Title:
SetUserAccountColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
break;
case SaxUserAccount.Column.FirstName:
SetUserAccountColDfn(columnDfn, "FirstName", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
break;
case SaxUserAccount.Column.Initials:
SetUserAccountColDfn(columnDfn, "Initials", 60, SaxDbDfn_Core.ColumnIdx.UserAccount_Initials);
break;
case SaxUserAccount.Column.LastName:
SetUserAccountColDfn(columnDfn, "LastName", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
break;
case SaxUserAccount.Column.PhoneMain:
SetUserAccountColDfn(columnDfn, "PhoneMain", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMain);
break;
case SaxUserAccount.Column.PhoneMobile:
SetUserAccountColDfn(columnDfn, "PhoneMobile", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMobile);
break;
case SaxUserAccount.Column.DateOfBirthDay:
SetUserAccountColDfn(columnDfn, "DOB day", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthDay, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SaxUserAccount.Column.DateOfBirthMonth:
SetUserAccountColDfn(columnDfn, "DOB month", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthMonth, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SaxUserAccount.Column.DateOfBirthYear:
SetUserAccountColDfn(columnDfn, "DOB year", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthYear, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SaxUserAccount.Column.DateOfBirth:
SetUserAccountColDfn(columnDfn, "DOB", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Date);
break;
//-------------------------------------------------------
// Regions.
case SaxUserAccount.Column.RegionIdCountry:
SetUserAccountColDfn(columnDfn, "Country #", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SaxUserAccount.Column.RegionCountry_Name:
SetUserAccountColDfn(columnDfn, "Country", 120, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasUserAccount_Region_Country, prefixUserAccount_Region_Country);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.RegionIdProvince:
SetUserAccountColDfn(columnDfn, "Province #", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SaxUserAccount.Column.RegionProvince_Name:
SetUserAccountColDfn(columnDfn, "Province", 120, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasUserAccount_Region_Province, prefixUserAccount_Region_Province);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Security.
case SaxUserAccount.Column.LastLoginOn:
SetUserAccountColDfn(columnDfn, "Last login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastLoginAt:
SetUserAccountColDfn(columnDfn, "Last login", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastInvalidLoginOn:
SetUserAccountColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastInvalidLoginAt:
SetUserAccountColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.InvalidLoginCount:
SetUserAccountColDfn(columnDfn, "Invalid logins", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_InvalidLoginCount, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
// User Sports.
case SaxUserAccount.Column.UserSportCount:
SetUserAccountColDfn(columnDfn, "Sports", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colUserAccount_UserSportCount;
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.UserSportCount_Active:
SetUserAccountColDfn(columnDfn, "Sports (active)", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colUserAccount_UserSportCount_Active;
columnDfn.ReadOnly = true;
break;
// User roles.
case SaxUserAccount.Column.UserRoleCount:
SetUserAccountColDfn(columnDfn, "Roles", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colUserAccount_UserRoleCount;
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.SystemAdminUser:
SetUserAccountColDfn(columnDfn, "System Admin", 80, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Bool);
columnDfn.DataName = colUserAccount_SystemAdminRole;
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastAdminLoginOn:
SetUserAccountColDfn(columnDfn, "Last Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastAdminLoginAt:
SetUserAccountColDfn(columnDfn, "Last Admin login", 120, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastInvalidAdminLoginOn:
SetUserAccountColDfn(columnDfn, "Last invalid Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.LastInvalidAdminLoginAt:
SetUserAccountColDfn(columnDfn, "Last invalid Admin login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.InvalidAdminLoginCount:
SetUserAccountColDfn(columnDfn, "Invalid Admin logins", 80, SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserAccount_UserRole_SysAdmin, prefixUserAccount_UserRole_SysAdmin);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Common properties.
case SaxUserAccount.Column.Notes:
SetUserAccountColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserAccount_Notes);
break;
case SaxUserAccount.Column.Flags:
SetUserAccountColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserAccount_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserAccount.Column.Status:
SetUserAccountColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center);
break;
case SaxUserAccount.Column.Status_Desc:
SetUserAccountColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center);
break;
case SaxUserAccount.Column.Status_Ind:
SetUserAccountColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserAccount.Column.CreateOn_Date:
SetUserAccountColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserAccount.Column.UpdateOn_Date:
SetUserAccountColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserAccountQueryFilter(SaxUserAccount.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String includedIds = prm.IdsIncluded.Concat(",");
if (!includedIds.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + " IN (" + includedIds + ")");
String excludedIds = prm.IdsExcluded.Concat(",");
if (!excludedIds.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + " NOT IN (" + excludedIds + ")");
// Email address.
if (!StringUtil.IsEmpty(prm.EmailAddress))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + " = '" + DbQuery.FormatForCondition(prm.EmailAddress) + "'");
// Name.
if (!StringUtil.IsEmpty(prm.NamePartial))
{
// Split filter into words.
List<String> filterWords = prm.NamePartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userFilter = new List<string>();
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(filterWord) + "%'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(filterWord) + "%'");
userFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "Like'%" + DbQuery.FormatForLike(filterWord) + "%'");
filter.Add(userFilter.Concat(" OR ", "(", ")"));
}
}
// Sport Ids.
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
{
if (prm.Alias_UserSport.IsEmpty())
{
// User Sport table is not linked in query.
DbQuery userSportQuery = new DbQuery(CoreDatabase.DbmsType);
userSportQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserAccount_UserSport);
userSportQuery.Columns.Add("1");
userSportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserAccount_UserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
userSportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, aliasUserAccount_UserSport) + " IN (" + sportIdsIncluded + ")");
filter.Add("Exists(" + userSportQuery.BuildQuery() + ")");
}
else
// User Sport table is already linked in the query.
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, prm.Alias_UserSport) + " IN (" + sportIdsIncluded + ")");
}
// Region Ids.
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
if (!regionIdsIncluded.IsEmpty())
{
List<String> regionFilter = new List<string>();
regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, aliasUserAccount) + " IN (" + regionIdsIncluded + ")");
regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserAccount) + " IN (" + regionIdsIncluded + ")");
filter.Add(regionFilter.Concat(" OR ", "(", ")"));
}
// User filter.
if (!StringUtil.IsEmpty(prm.UserFilter))
filter.AddRange(GetUserAccountFilters(prm.UserFilter, aliasUserAccount));
// User filter - partial.
if (!StringUtil.IsEmpty(prm.UserFilterPartial))
filter.AddRange(GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserAccount));
// Active roles.
List<String> roleCodes = new List<string>();
foreach (Sax.UserRole userRole in prm.ActiveRoles)
roleCodes.Add(UserRoleCodes.GetCodeForType(userRole));
if (roleCodes.Exists(item => !item.Trim().IsEmpty()))
{
if (prm.Alias_UserRole.IsEmpty())
{
// User Role table is not linked in the query.
DbQuery roleQuery = new DbQuery(CoreDatabase.DbmsType);
roleQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserAccount_UserRole);
roleQuery.Columns.Add("1");
roleQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserAccount_UserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
roleQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserAccount_UserRole) + " IN (" + DbQuery.FormatForIn(roleCodes) + ")");
filter.Add("Exists(" + roleQuery.BuildQuery() + ")");
}
else
{
// User Role table is already linked in the query.
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, prm.Alias_UserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, prm.Alias_UserRole) + " IN (" + DbQuery.FormatForIn(roleCodes) + ")");
}
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Notes, aliasUserAccount) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxUserAccount.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount) + GetUserAccountStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static List<String> GetUserAccountFilters(String userFilter, String aliasUserAccount)
{
List<String> filter = new List<string>();
if (!StringUtil.IsEmpty(userFilter))
{
// Split filter into words.
List<String> filterWords = userFilter.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userAccountFilter = new List<string>();
// Exact match for each word to avoid Online user search allowing partial lookup.
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + "='" + DbQuery.FormatForCondition(filterWord) + "'");
filter.Add(userAccountFilter.Concat(" OR ", "(", ")"));
}
}
return filter;
}
internal static List<String> GetPartialUserAccountFilters(String userFilterPartial, String aliasUserAccount)
{
List<String> filter = new List<string>();
if (!StringUtil.IsEmpty(userFilterPartial))
{
// Split filter into words.
List<String> filterWords = userFilterPartial.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> userAccountFilter = new List<string>();
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
userAccountFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount) + " Like '%" + DbQuery.FormatForLike(filterWord) + "%'");
filter.Add(userAccountFilter.Concat(" OR ", "(", ")"));
}
}
return filter;
}
internal static String GetUserAccountStatusCatFilterCondition(SaxUserAccount.StatusCat statusCat)
{
if (statusCat == SaxUserAccount.StatusCat.AwaitingOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + "'";
if (statusCat == SaxUserAccount.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxUserAccount.StatusCat.AwaitingOrActive)
return " In ('" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + "','" + SacsSystem.GetStatusCode(SaStatus.Active) + "')";
if (statusCat == SaxUserAccount.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxUserAccount.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserAccount.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
//-------------------------------------------------------------------
// Item sort columns.
public List<String> GetUserAccountSortColumns(SaxUserAccount.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserAccount columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserAccount)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserAccount);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserAccountCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount) + " As " + aliasUserAccount, filter);
}
public override long GetUserAccountCount(SaxUserAccount.Params prm)
{
ClearErrorState();
return GetUserAccountCount(GetUserAccountQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserAccount> GetUserAccountList(SaxUserAccount.Params prm)
{
ClearErrorState();
List<SaxUserAccount> userAccounts = new List<SaxUserAccount>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount);
UserAccount_Db dbUserAccount = new UserAccount_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserAccount.ExistingColumnNames);
qry.Filters.AddRange(GetUserAccountQueryFilter(prm));
qry.OrderBy.AddRange(GetUserAccountSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserAccount = new UserAccount_Db(CoreDbInfo);
dbUserAccount.PopulateFrom(dbDataReader);
userAccounts.Add(CreateUserAccount(dbUserAccount));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userAccounts;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserAccountQuery(List<ColumnDfn> columns, SaxUserAccount.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount);
// Add columns as defined in query list.
if (columns.HasId(SaxUserAccount.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.EmailAddress))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.Title))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Title, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.FirstName))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.Initials))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Initials, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.LastName))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.PhoneMain))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMain, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.PhoneMobile))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_PhoneMobile, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.DateOfBirthDay) || columns.HasId(SaxUserAccount.Column.DateOfBirth))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthDay, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.DateOfBirthMonth) || columns.HasId(SaxUserAccount.Column.DateOfBirth))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthMonth, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.DateOfBirthYear) || columns.HasId(SaxUserAccount.Column.DateOfBirth))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_DateOfBirthYear, aliasUserAccount));
// Regions.
bool hasCountryRegionCols = columns.HasId(SaxUserAccount.Column.RegionCountry_Name);
if (columns.HasId(SaxUserAccount.Column.RegionIdCountry) || hasCountryRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, aliasUserAccount));
bool hasProvinceRegionCols = columns.HasId(SaxUserAccount.Column.RegionProvince_Name);
if (columns.HasId(SaxUserAccount.Column.RegionIdProvince) || hasProvinceRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserAccount));
// Login.
if (columns.HasId(SaxUserAccount.Column.LastLoginOn) || columns.HasId(SaxUserAccount.Column.LastLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.LastInvalidLoginOn) || columns.HasId(SaxUserAccount.Column.LastInvalidLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_LastInvalidLoginAt, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.InvalidLoginCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_InvalidLoginCount, aliasUserAccount));
// Common properties.
if (columns.HasId(SaxUserAccount.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Notes, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Flags, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.Status) || columns.HasId(SaxUserAccount.Column.Status_Desc) || columns.HasId(SaxUserAccount.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_CreateOn, aliasUserAccount));
if (columns.HasId(SaxUserAccount.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_UpdateOn, aliasUserAccount));
//---------------------------------------------------------------------
// Country Region.
if (hasCountryRegionCols)
{
DbQueryJoin joinRegionCountry = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegionCountry.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserAccount_Region_Country);
joinRegionCountry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserAccount_Region_Country) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, aliasUserAccount));
query.Joins.Add(joinRegionCountry);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_Region_Country), prefixUserAccount_Region_Country + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Province Region.
if (hasProvinceRegionCols)
{
DbQueryJoin joinRegionProvince = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegionProvince.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserAccount_Region_Province);
joinRegionProvince.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserAccount_Region_Province) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserAccount));
query.Joins.Add(joinRegionProvince);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_Region_Province), prefixUserAccount_Region_Province + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// System Admin User Role.
if (columns.Exists(item => SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)item.DbColumn) == SaxDbDfn_Core.TableIdx.UserRole))
{
DbQueryJoin joinSysAdmin = new DbQueryJoin(DbJoinType.LeftOuter);
joinSysAdmin.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserAccount_UserRole_SysAdmin);
joinSysAdmin.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserAccount_UserRole_SysAdmin) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
joinSysAdmin.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserAccount_UserRole_SysAdmin) + "='" + UserRoleCodes.GetCodeForType(Sax.UserRole.SystemAdmin) + "'");
query.Joins.Add(joinSysAdmin);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserAccount_UserRole_SysAdmin), prefixUserAccount_UserRole_SysAdmin + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// User Sport count.
if (columns.HasId(SaxUserAccount.Column.UserSportCount) || columns.HasId(SaxUserAccount.Column.UserSportCount_Active))
{
String aliasUserSport = "aUsrSpt";
DbQuery queryUserSport = new DbQuery(CoreDatabase.DbmsType);
queryUserSport.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserSport);
queryUserSport.Columns.Add("Count(*)");
queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Status, aliasUserSport) + "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'");
query.Columns.Add("(" + queryUserSport.BuildQuery() + ")", colUserAccount_UserSportCount);
// Active user sports.
queryUserSport.Filters.Clear();
queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
queryUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Status, aliasUserSport) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
query.Columns.Add("(" + queryUserSport.BuildQuery() + ")", colUserAccount_UserSportCount_Active);
}
//---------------------------------------------------------------------
// User Role count.
if (columns.HasId(SaxUserAccount.Column.UserRoleCount))
{
String aliasUserRole = "aUsrRol";
DbQuery queryUserRole = new DbQuery(CoreDatabase.DbmsType);
queryUserRole.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserRole);
queryUserRole.Columns.Add("Count(*)");
queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Status, aliasUserRole) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
query.Columns.Add("(" + queryUserRole.BuildQuery() + ")", colUserAccount_UserRoleCount);
}
//---------------------------------------------------------------------
// System Admin user.
if (columns.HasId(SaxUserAccount.Column.SystemAdminUser))
{
String aliasUserRole = "aUsrRol";
DbQuery queryUserRole = new DbQuery(CoreDatabase.DbmsType);
queryUserRole.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserRole);
queryUserRole.Columns.Add("Count(*)");
queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount));
queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserRole) + "='" + UserRoleCodes.GetCodeForType(Sax.UserRole.SystemAdmin) + "'");
queryUserRole.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Status, aliasUserRole) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
query.Columns.Add("(" + queryUserRole.BuildQuery() + ")", colUserAccount_SystemAdminRole);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserAccountQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserAccountSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,481 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Config
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserConfig userConfig)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userConfig.Id)),
new StringPair("UserAccountId",SysId.ToString(userConfig.UserAccountId)),
new StringPair("ConfigType",userConfig.ConfigType.ToString()),
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserConfig CreateUserConfig(SysId userAccountId, Sax.UserConfigType configType)
{
ClearErrorState();
return new SaxUserConfig_Dbas(CoreDatabase, null, userAccountId, configType, 0);
}
private SaxUserConfig_Dbas CreateUserConfig(UserConfig_Db dbUserConfig)
{
ClearErrorState();
SaxUserConfig_Dbas userConfig = new SaxUserConfig_Dbas(CoreDatabase, new SysId(dbUserConfig._Id), new SysId(dbUserConfig._UserAccountId), (Sax.UserConfigType)dbUserConfig._ConfigType, 0);
PopulateFrom(dbUserConfig, userConfig);
return userConfig;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserConfig GetUserConfig(SaxUserConfig.Params prm)
{
ClearErrorState();
return GetUserConfig(GetUserConfigQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserConfig GetUserConfig(String filter)
{
ClearErrorState();
long count = GetUserConfigCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserConfig userConfig = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo);
dbUserConfig.PopulateFrom(dbCommand, aliasUserConfig, filter);
userConfig = CreateUserConfig(dbUserConfig);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userConfig;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserConfigData(SaxUserConfig.Data data, SaxUserConfig.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserConfigData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserConfig";
ClearErrorState();
if (!IsValidUserConfig(userConfig)) return false;
if (SysId.IsValid(userConfig.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo);
PopulateTo(dbUserConfig, userConfig, dbUpdateInfo);
if (UserConfig_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserConfig._Id = CoreDatabase.GetNextIdFromTable("UserConfig");
}
dbUserConfig.ExecuteInsertCommand(dbCommand);
//userConfig.Id = new SysId(dbUserConfig._Id);
userConfig.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserConfig";
ClearErrorState();
if (!IsValidUserConfig(userConfig)) return false;
if (!SysId.IsValid(userConfig.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userConfig.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo);
dbUserConfig.PopulateFrom(dbCommand, aliasUserConfig, "Id=" + SysId.ToString(userConfig.Id));
// Update properties.
PopulateTo(dbUserConfig, userConfig, dbUpdateInfo);
dbUserConfig.ExecuteUpdateCommand(dbCommand);
userConfig.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserConfigCanBeDeleted(SaxUserConfig userConfig)
{
ClearErrorState();
if (!base.UserConfigCanBeDeleted(userConfig)) return false;
return true;
}
public override bool DeleteUserConfig(SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserConfig";
ClearErrorState();
if (!UserConfigCanBeDeleted(userConfig)) return false;
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo);
dbUserConfig.PopulateFrom(dbCommand, aliasUserConfig, "Id=" + SysId.ToString(userConfig.Id));
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig) + " WHERE Id=" + SysId.ToString(userConfig.Id) + ";";
dbCommand.ExecuteNonQuery();
userConfig.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userConfig).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserConfig_Db dbUserConfig, SaxUserConfig userConfig, DbUpdateInfo dbUpdateInfo)
{
dbUserConfig._UserAccountId = SysId.ToInt(userConfig.UserAccountId);
dbUserConfig._ConfigType = (short)userConfig.ConfigType;
dbUserConfig._ConfigData = userConfig.ConfigData;
// Common.
//dbUserConfig._Flags = (short)userConfig.Flags;
if (!DateUtil.IsValid(dbUserConfig._CreateOn))
{
dbUserConfig._CreateOn = DateTime.Now;
}
dbUserConfig._UpdateOn = DateTime.Now;
}
private void PopulateFrom(UserConfig_Db dbUserConfig, SaxUserConfig userConfig)
{
//userConfig.UserAccountId = new SysId(dbUserConfig._UserAccountId);
//userConfig.ConfigType = (Sax.UserConfigType)dbUserConfig._ConfigType;
userConfig.ConfigData = dbUserConfig._ConfigData;
// Common.
userConfig.SetCreateStamp(dbUserConfig._CreateOn, new SysId(), "");
userConfig.SetUpdateStamp(dbUserConfig._UpdateOn, new SysId(), "");
userConfig.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserConfig = "UsrCfg";
private static readonly String aliasUserConfig_UserAccount = "UsrCfg_Usr";
private static readonly String prefixUserConfig_UserAccount = aliasUserConfig_UserAccount + "_";
private void SetUserConfigColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserConfig)
alias = aliasUserConfig;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserConfigColumnDfn(SaxUserConfig.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserConfig.Column.Pos:
SetUserConfigColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserConfig.Column.UserAccountId:
SetUserConfigColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserConfig.Column.User_EmailAddress:
SetUserConfigColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserConfig.Column.User_DisplayName:
SetUserConfigColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserConfig.Column.User_Title:
SetUserConfigColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserConfig.Column.User_FirstName:
SetUserConfigColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserConfig.Column.User_LastName:
SetUserConfigColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserConfig_UserAccount, prefixUserConfig_UserAccount);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Configuration.
case SaxUserConfig.Column.ConfigType:
SetUserConfigColDfn(columnDfn, "Type", 60, SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
/*
case SaxUserConfig.Column.Flags:
SetUserConfigColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserConfig_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
*/
case SaxUserConfig.Column.CreateOn_Date:
SetUserConfigColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserConfig_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserConfig.Column.UpdateOn_Date:
SetUserConfigColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserConfig_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserConfigQueryFilter(SaxUserConfig.Params prm)
{
List<String> filter = new List<String>();
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, aliasUserConfig) + " IN (" + userAccountIdsIncluded + ")");
// Config type.
if (prm.ConfigType > 0)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, aliasUserConfig) + "=" + ((short)prm.ConfigType).ToString());
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
// Item sort columns.
public List<String> GetUserConfigSortColumns(SaxUserConfig.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserConfig columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserConfig)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserConfig);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, aliasUserConfig) + " ASC");
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, aliasUserConfig) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserConfigCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig) + " As " + aliasUserConfig, filter);
}
public override long GetUserConfigCount(SaxUserConfig.Params prm)
{
ClearErrorState();
return GetUserConfigCount(GetUserConfigQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserConfig> GetUserConfigList(SaxUserConfig.Params prm)
{
ClearErrorState();
List<SaxUserConfig> userConfigs = new List<SaxUserConfig>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig), aliasUserConfig);
UserConfig_Db dbUserConfig = new UserConfig_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserConfig.ExistingColumnNames);
qry.Filters.AddRange(GetUserConfigQueryFilter(prm));
qry.OrderBy.AddRange(GetUserConfigSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserConfig = new UserConfig_Db(CoreDbInfo);
dbUserConfig.PopulateFrom(dbDataReader);
userConfigs.Add(CreateUserConfig(dbUserConfig));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userConfigs;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserConfigQuery(List<ColumnDfn> columns, SaxUserConfig.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserConfig), aliasUserConfig);
// Add columns as defined in query list.
bool hasUserAccountCols = (columns.HasId(SaxUserConfig.Column.User_EmailAddress) || columns.HasId(SaxUserConfig.Column.User_DisplayName) || columns.HasId(SaxUserConfig.Column.User_Title) || columns.HasId(SaxUserConfig.Column.User_FirstName) || columns.HasId(SaxUserConfig.Column.User_LastName));
if (columns.HasId(SaxUserConfig.Column.UserAccountId) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, aliasUserConfig));
if (columns.HasId(SaxUserConfig.Column.ConfigType))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_ConfigType, aliasUserConfig));
// Common properties.
//if (columns.HasId(SaxUserConfig.Column.Flags))
// query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_Flags, aliasUserConfig));
if (columns.HasId(SaxUserConfig.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_CreateOn, aliasUserConfig));
if (columns.HasId(SaxUserConfig.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UpdateOn, aliasUserConfig));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserConfig_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserConfig_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserConfig_UserAccountId, aliasUserConfig));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserConfig_UserAccount), prefixUserConfig_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserConfigQueryFilter(prm));
// Sort is applied if the results are likely to be more than a single row.
if (prm.UserAccountIdsIncluded.Count != 1 || prm.ConfigType <= 0)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserConfigSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,633 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using static Saxonite.Net.Standard.Base.App.Sax;
using System.ComponentModel;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Eligibility
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserEligibility userEligibility)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userEligibility.Id)),
new StringPair("UserAccountId",SysId.ToString(userEligibility.UserAccountId)),
new StringPair("RegionId",SysId.ToString(userEligibility.RegionId)),
new StringPair("Eligibility",userEligibility.EligibilityType.ToString()),
new StringPair("Status",userEligibility.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserEligibility CreateUserEligibility(SysId userAccountId, SysId regionId, Sax.EligibilityType userEligibility)
{
ClearErrorState();
return new SaxUserEligibility_Dbas(CoreDatabase, null, userAccountId, regionId, userEligibility, 0);
}
private SaxUserEligibility_Dbas CreateUserEligibility(UserEligibility_Db dbUserEligibility)
{
ClearErrorState();
SaxUserEligibility_Dbas userEligibility = new SaxUserEligibility_Dbas(CoreDatabase, new SysId(dbUserEligibility._Id), new SysId(dbUserEligibility._UserAccountId), new SysId(dbUserEligibility._RegionId ?? 0), (Sax.EligibilityType)dbUserEligibility._EligibilityType, (ushort)dbUserEligibility._Flags);
PopulateFrom(dbUserEligibility, userEligibility);
return userEligibility;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserEligibility GetUserEligibility(SaxUserEligibility.Params prm)
{
ClearErrorState();
return GetUserEligibility(GetUserEligibilityQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserEligibility GetUserEligibility(String filter)
{
ClearErrorState();
long count = GetUserEligibilityCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserEligibility userEligibility = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserEligibility_Db dbUserEligibility = new UserEligibility_Db(CoreDbInfo);
dbUserEligibility.PopulateFrom(dbCommand, aliasUserEligibility, filter);
userEligibility = CreateUserEligibility(dbUserEligibility);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userEligibility;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserEligibilityData(SaxUserEligibility.Data data, SaxUserEligibility.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserEligibilityData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserEligibility(SaxUserEligibility userEligibility, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserEligibility";
ClearErrorState();
if (!IsValidUserEligibility(userEligibility)) return false;
if (SysId.IsValid(userEligibility.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserEligibility_Db dbUserEligibility = new UserEligibility_Db(CoreDbInfo);
PopulateTo(dbUserEligibility, userEligibility, dbUpdateInfo);
if (UserEligibility_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserEligibility._Id = CoreDatabase.GetNextIdFromTable("UserEligibility");
}
dbUserEligibility.ExecuteInsertCommand(dbCommand);
userEligibility.Id = new SysId(dbUserEligibility._Id);
userEligibility.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userEligibility).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserEligibility(SaxUserEligibility userEligibility, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserEligibility";
ClearErrorState();
if (!IsValidUserEligibility(userEligibility)) return false;
if (!SysId.IsValid(userEligibility.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userEligibility.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userEligibility).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserEligibility_Db dbUserEligibility = new UserEligibility_Db(CoreDbInfo);
dbUserEligibility.PopulateFrom(dbCommand, aliasUserEligibility, "Id=" + SysId.ToString(userEligibility.Id));
// ToDo SaxUpdateLogItemMonitor_UserEligibility updateLogMonitor = new SaxUpdateLogItemMonitor_UserEligibility(SessionContext, CreateUserEligibility(dbUserEligibility), dbUpdateInfo);
// Update item.
PopulateTo(dbUserEligibility, userEligibility, dbUpdateInfo);
dbUserEligibility.ExecuteUpdateCommand(dbCommand);
userEligibility.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userEligibility).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userEligibility);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserEligibilityCanBeDeleted(SaxUserEligibility userEligibility)
{
ClearErrorState();
if (!base.UserEligibilityCanBeDeleted(userEligibility)) return false;
return true;
}
public override bool DeleteUserEligibility(SaxUserEligibility userEligibility, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserEligibility";
ClearErrorState();
if (!UserEligibilityCanBeDeleted(userEligibility)) return false;
// User Eligibilitys are logically deleted by changing the status.
userEligibility.Status = SaStatus.Deleted;
return UpdateUserEligibility(userEligibility, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserEligibility_Db dbUserEligibility = new UserEligibility_Db(CoreDbInfo);
dbUserEligibility.PopulateFrom(dbCommand, aliasUserEligibility, "Id=" + userEligibility.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserEligibility) + " WHERE Id=" + SysId.ToString(userEligibility.Id) + ";";
dbCommand.ExecuteNonQuery();
userEligibility.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userEligibility).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserEligibility_Db dbUserEligibility, SaxUserEligibility userEligibility, DbUpdateInfo dbUpdateInfo)
{
dbUserEligibility._Id = SysId.ToLong(userEligibility.Id);
dbUserEligibility._UserAccountId = SysId.ToInt(userEligibility.UserAccountId);
dbUserEligibility._RegionId = SysId.ToInt(userEligibility.RegionId);
dbUserEligibility._EligibilityType = (short)userEligibility.EligibilityType;
dbUserEligibility._Info = userEligibility.Info;
dbUserEligibility._ExpiresOn = userEligibility.ExpiresOn;
// Common.
dbUserEligibility._Notes = userEligibility.Notes;
dbUserEligibility._Status = SacsSystem.GetStatusCode(userEligibility.Status);
dbUserEligibility._Flags = (short)userEligibility.Flags;
if (!SysId.IsValid(userEligibility.Id))
{
dbUserEligibility._CreateOn = DateTime.Now;
dbUserEligibility._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserEligibility._CreateHost = dbUpdateInfo.Host;
}
dbUserEligibility._UpdateOn = DateTime.Now;
dbUserEligibility._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserEligibility._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserEligibility_Db dbUserEligibility, SaxUserEligibility userEligibility)
{
//userEligibility.Id = new SysId(dbUserEligibility._Id);
//userEligibility.UserAccountId = new SysId(dbUserEligibility._UserAccountId);
//userEligibility.RegionId = new SysId(dbUserEligibility._RegionId);
//userEligibility.EligibilityType = (Sax.EligibilityType)dbUserEligibility._EligibilityType;
userEligibility.Info = dbUserEligibility._Info;
userEligibility.ExpiresOn = dbUserEligibility._ExpiresOn;
// Common.
userEligibility.Notes = dbUserEligibility._Notes;
userEligibility.Status = SacsSystem.GetStatusForCode(dbUserEligibility._Status);
userEligibility.SetCreateStamp(dbUserEligibility._CreateOn, new SysId(dbUserEligibility._CreateBy), dbUserEligibility._CreateHost);
userEligibility.SetUpdateStamp(dbUserEligibility._UpdateOn, new SysId(dbUserEligibility._UpdateBy), dbUserEligibility._UpdateHost);
userEligibility.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserEligibility = "UsrRol";
private static readonly String aliasUserEligibility_UserAccount = "UsrElg_Usr";
private static readonly String prefixUserEligibility_UserAccount = aliasUserEligibility_UserAccount + "_";
private static readonly String aliasUserEligibility_Region = "UsrElg_Usr";
private static readonly String prefixUserEligibility_Region = aliasUserEligibility_Region + "_";
private void SetUserEligibilityColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserEligibility)
alias = aliasUserEligibility;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserEligibilityColumnDfn(SaxUserEligibility.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserEligibility.Column.Pos:
SetUserEligibilityColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserEligibility.Column.Id:
SetUserEligibilityColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_Id, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserEligibility.Column.UserAccountId:
SetUserEligibilityColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_UserAccountId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.User_EmailAddress:
SetUserEligibilityColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserEligibility_UserAccount, prefixUserEligibility_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.User_DisplayName:
SetUserEligibilityColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.User_Title:
SetUserEligibilityColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserEligibility_UserAccount, prefixUserEligibility_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.User_FirstName:
SetUserEligibilityColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserEligibility_UserAccount, prefixUserEligibility_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.User_LastName:
SetUserEligibilityColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserEligibility_UserAccount, prefixUserEligibility_UserAccount);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Region.
case SaxUserEligibility.Column.RegionId:
SetUserEligibilityColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_RegionId, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.Region_Type:
SetUserEligibilityColDfn(columnDfn, "Region Type", 80, SaxDbDfn_Core.ColumnIdx.Region_RegionType, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserEligibility_Region, prefixUserEligibility_Region);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.Region_Type_Desc:
SetUserEligibilityColDfn(columnDfn, "Region Type", 100, SaxDbDfn_Core.ColumnIdx.Region_RegionType, ColumnAlignment.Center, DataValue.DataType.String, aliasUserEligibility_Region, prefixUserEligibility_Region);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.Region_CountryIso2Code:
SetUserEligibilityColDfn(columnDfn, "Country code", 80, SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code, ColumnAlignment.Center, DataValue.DataType.String, aliasUserEligibility_Region, prefixUserEligibility_Region);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.Region_Name:
SetUserEligibilityColDfn(columnDfn, "Region", 80, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasUserEligibility_Region, prefixUserEligibility_Region);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.Region_ParentId:
SetUserEligibilityColDfn(columnDfn, "Parent Region Id", 90, SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserEligibility_Region, prefixUserEligibility_Region);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Eligibility.
case SaxUserEligibility.Column.EligibilityType:
SetUserEligibilityColDfn(columnDfn, "Eligibility", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_EligibilityType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.EligibilityType_Desc:
SetUserEligibilityColDfn(columnDfn, "Eligibility", 120, SaxDbDfn_Core.ColumnIdx.UserEligibility_EligibilityType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.Info:
SetUserEligibilityColDfn(columnDfn, "Info", 120, SaxDbDfn_Core.ColumnIdx.UserEligibility_Info);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.ExpiresOn:
SetUserEligibilityColDfn(columnDfn, "Expires", 100, SaxDbDfn_Core.ColumnIdx.UserEligibility_ExpiresOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Common properties.
case SaxUserEligibility.Column.Notes:
SetUserEligibilityColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserEligibility_Notes);
break;
case SaxUserEligibility.Column.Flags:
SetUserEligibilityColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserEligibility_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserEligibility.Column.Status:
SetUserEligibilityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_Status, ColumnAlignment.Center);
break;
case SaxUserEligibility.Column.Status_Desc:
SetUserEligibilityColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserEligibility_Status, ColumnAlignment.Center);
break;
case SaxUserEligibility.Column.Status_Ind:
SetUserEligibilityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserEligibility.Column.CreateOn_Date:
SetUserEligibilityColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserEligibility.Column.UpdateOn_Date:
SetUserEligibilityColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserEligibility_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserEligibilityQueryFilter(SaxUserEligibility.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Id, aliasUserEligibility) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Id, aliasUserEligibility) + " NOT IN (" + idsExcluded + ")");
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_UserAccountId, aliasUserEligibility) + " IN (" + userAccountIdsIncluded + ")");
// Regions.
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
if (!regionIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_RegionId, aliasUserEligibility) + " IN (" + regionIdsIncluded + ")");
// Eligibility.
String eligibilityTypes = prm.EligibilityTypesIncluded.Select(item => ((int)item).ToString()).ToList().Concat(",", "", "", true, true);
if (!eligibilityTypes.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_EligibilityType, aliasUserEligibility) + " IN (" + eligibilityTypes + ")");
// Valid on.
if (DateUtil.IsValid(prm.ValidOn))
{
String colName_ExpiresOn = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_ExpiresOn, aliasUserEligibility);
filter.Add(colName_ExpiresOn + " Is Null Or " + colName_ExpiresOn + " >= " + DbQuery.FormatDateForCondition(prm.ValidOn) + ")");
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Notes, aliasUserEligibility) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxUserEligibility.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Status, aliasUserEligibility) + GetUserEligibilityStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetUserEligibilityStatusCatFilterCondition(SaxUserEligibility.StatusCat statusCat)
{
if (statusCat == SaxUserEligibility.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxUserEligibility.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxUserEligibility.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserEligibility.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetUserEligibilitySortColumns(SaxUserEligibility.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserEligibility columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserEligibility)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserEligibility);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Id, aliasUserEligibility) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserEligibilityCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserEligibility) + " As " + aliasUserEligibility, filter);
}
public override long GetUserEligibilityCount(SaxUserEligibility.Params prm)
{
ClearErrorState();
return GetUserEligibilityCount(GetUserEligibilityQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserEligibility> GetUserEligibilityList(SaxUserEligibility.Params prm)
{
ClearErrorState();
List<SaxUserEligibility> userEligibilitys = new List<SaxUserEligibility>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserEligibility), aliasUserEligibility);
UserEligibility_Db dbUserEligibility = new UserEligibility_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserEligibility.ExistingColumnNames);
qry.Filters.AddRange(GetUserEligibilityQueryFilter(prm));
qry.OrderBy.AddRange(GetUserEligibilitySortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserEligibility = new UserEligibility_Db(CoreDbInfo);
dbUserEligibility.PopulateFrom(dbDataReader);
userEligibilitys.Add(CreateUserEligibility(dbUserEligibility));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userEligibilitys;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserEligibilityQuery(List<ColumnDfn> columns, SaxUserEligibility.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserEligibility), aliasUserEligibility);
// Add columns as defined in query list.
if (columns.HasId(SaxUserEligibility.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Id, aliasUserEligibility));
bool hasUserAccountCols = (columns.HasId(SaxUserEligibility.Column.User_EmailAddress) || columns.HasId(SaxUserEligibility.Column.User_DisplayName) || columns.HasId(SaxUserEligibility.Column.User_Title) || columns.HasId(SaxUserEligibility.Column.User_FirstName) || columns.HasId(SaxUserEligibility.Column.User_LastName));
if (columns.HasId(SaxUserEligibility.Column.UserAccountId) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_UserAccountId, aliasUserEligibility));
bool hasRegionCols = (columns.HasId(SaxUserEligibility.Column.Region_Type) || columns.HasId(SaxUserEligibility.Column.Region_Type_Desc) || columns.HasId(SaxUserEligibility.Column.Region_CountryIso2Code) || columns.HasId(SaxUserEligibility.Column.Region_Name) || columns.HasId(SaxUserEligibility.Column.Region_ParentId));
if (columns.HasId(SaxUserEligibility.Column.RegionId) || hasRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_RegionId, aliasUserEligibility));
if (columns.HasId(SaxUserEligibility.Column.EligibilityType) || columns.HasId(SaxUserEligibility.Column.EligibilityType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_EligibilityType, aliasUserEligibility));
if (columns.HasId(SaxUserEligibility.Column.Info))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Info, aliasUserEligibility));
if (columns.HasId(SaxUserEligibility.Column.ExpiresOn))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_ExpiresOn, aliasUserEligibility));
// Common properties.
if (columns.HasId(SaxUserEligibility.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Notes, aliasUserEligibility));
if (columns.HasId(SaxUserEligibility.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Flags, aliasUserEligibility));
if (columns.HasId(SaxUserEligibility.Column.Status) || columns.HasId(SaxUserEligibility.Column.Status_Desc) || columns.HasId(SaxUserEligibility.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_Status, aliasUserEligibility));
if (columns.HasId(SaxUserEligibility.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_CreateOn, aliasUserEligibility));
if (columns.HasId(SaxUserEligibility.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_UpdateOn, aliasUserEligibility));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserEligibility_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserEligibility_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_UserAccountId, aliasUserEligibility));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserEligibility_UserAccount), prefixUserEligibility_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Region.
if (hasRegionCols)
{
DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserEligibility_Region);
joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserEligibility_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserEligibility_RegionId, aliasUserEligibility));
query.Joins.Add(joinRegion);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_RegionType);
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code);
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserEligibility_Region), prefixUserEligibility_Region + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserEligibilityQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserEligibilitySortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,563 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Role
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserOnline userOnline)
{
return new List<StringPair>()
{
new StringPair("UserAccountId",SysId.ToString(userOnline.UserAccountId)),
new StringPair("OnlineAt",DateUtil.Format(userOnline.OnlineAt, "d-MMM-yyyy HH:mm:ss")),
};
}
public override bool CommitUsersOnline(IEnumerable<SaxUserOnline.DataProperties> usersOnline)
{
String fn = GetType().Name + ".CommitUsersOnline";
try
{
// Merge query - insert missing User Online records and update existing.
List<String> query = new List<String>()
{
"Merge",
" Into " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOnline) + " As UsrOnl",
// Virtual table defining Activity Item Ids currently listed.
" Using",
" (",
" Select UserAccountId, OnlineAt From (Select 0 UserAccountId, null OnlineAt" + usersOnline.Select(item => " Union Select " + item.UserAccountId.ToString() + ", " + DbQuery.FormatDateTimeForCondition(item.OnlineAt)).ToList().Concat("", " ") + ") Dat Where Dat.UserAccountId>0 And Dat.OnlineAt Is Not Null",
" ) As DatOnl",
" On UsrOnl.UserAccountId=DatOnl.UserAccountId",
// Matched - Update the User Online to store latest Online data.
" When Matched Then",
" Update Set OnlineAt=DatOnl.OnlineAt",
// Not Matched By Target - Insert the User Online with latest data.
" When Not Matched Then",
" Insert",
" (UserAccountId, OnlineAt)",
" Values (DatOnl.UserAccountId, DatOnl.OnlineAt)",
";"
};
String sql = query.Concat("\n");
//SaLogger.Debug(fn + " Query:\n" + sql);
ISacsDatabase db = CoreDatabase;
int rows = db.ExecuteNonQuery(sql);
if (db.HasErrorState())
SaLogger.Error(fn + " Database error: " + db.ErrorStateMessage);
SaLogger.Debug(fn + " UserOnline rows modified: " + rows);
}
catch (Exception exc)
{
SaLogger.Warn(fn + " " + ExceptionUtil.GetLogMessage(exc, 0));
return false;
}
return true;
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserOnline CreateUserOnline(SysId userAccountId)
{
ClearErrorState();
return new SaxUserOnline_Dbas(CoreDatabase, userAccountId);
}
private SaxUserOnline_Dbas CreateUserOnline(UserOnline_Db dbUserOnline)
{
ClearErrorState();
SaxUserOnline_Dbas userOnline = new SaxUserOnline_Dbas(CoreDatabase, new SysId(dbUserOnline._UserAccountId));
PopulateFrom(dbUserOnline, userOnline);
return userOnline;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserOnline GetUserOnline(SaxUserOnline.Params prm)
{
ClearErrorState();
return GetUserOnline(GetUserOnlineQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserOnline GetUserOnline(String filter)
{
ClearErrorState();
long count = GetUserOnlineCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserOnline userOnline = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserOnline_Db dbUserOnline = new UserOnline_Db(CoreDbInfo);
dbUserOnline.PopulateFrom(dbCommand, aliasUserOnline, filter);
userOnline = CreateUserOnline(dbUserOnline);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userOnline;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserOnlineData(SaxUserOnline.Data data, SaxUserOnline.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserOnlineData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserOnline(SaxUserOnline userOnline, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserOnline";
ClearErrorState();
if (!IsValidUserOnline(userOnline)) return false;
if (SysId.IsValid(userOnline.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserOnline_Db dbUserOnline = new UserOnline_Db(CoreDbInfo);
PopulateTo(dbUserOnline, userOnline, dbUpdateInfo);
if (UserOnline_Db.FieldsNonId.Contains("Id"))
{
// User Online has no Id.
}
dbUserOnline.ExecuteInsertCommand(dbCommand);
userOnline.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userOnline).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserOnline(SaxUserOnline userOnline, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserOnline";
ClearErrorState();
if (!IsValidUserOnline(userOnline)) return false;
if (!SysId.IsValid(userOnline.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userOnline.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userOnline).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserOnline_Db dbUserOnline = new UserOnline_Db(CoreDbInfo);
dbUserOnline.PopulateFrom(dbCommand, aliasUserOnline, "UserAccountId=" + SysId.ToString(userOnline.UserAccountId));
// ToDo SaxUpdateLogItemMonitor_UserOnline updateLogMonitor = new SaxUpdateLogItemMonitor_UserOnline(SessionContext, CreateUserOnline(dbUserOnline), dbUpdateInfo);
// Update item.
PopulateTo(dbUserOnline, userOnline, dbUpdateInfo);
dbUserOnline.ExecuteUpdateCommand(dbCommand);
userOnline.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userOnline).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userOnline);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserOnlineCanBeDeleted(SaxUserOnline userOnline)
{
ClearErrorState();
if (!base.UserOnlineCanBeDeleted(userOnline)) return false;
return true;
}
public override bool DeleteUserOnline(SaxUserOnline userOnline, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserOnline";
ClearErrorState();
if (!UserOnlineCanBeDeleted(userOnline)) return false;
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserOnline_Db dbUserOnline = new UserOnline_Db(CoreDbInfo);
dbUserOnline.PopulateFrom(dbCommand, aliasUserOnline, "Id=" + userOnline.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOnline) + " WHERE UserAccountId=" + SysId.ToString(userOnline.UserAccountId) + ";";
dbCommand.ExecuteNonQuery();
userOnline.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userOnline).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserOnline_Db dbUserOnline, SaxUserOnline userOnline, DbUpdateInfo dbUpdateInfo)
{
dbUserOnline._UserAccountId = SysId.ToInt(userOnline.UserAccountId);
dbUserOnline._OnlineAt = userOnline.OnlineAt;
}
private void PopulateFrom(UserOnline_Db dbUserOnline, SaxUserOnline userOnline)
{
//userOnline.UserAccountId = new SysId(dbUserOnline._UserAccountId);
userOnline.OnlineAt = dbUserOnline._OnlineAt;
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserOnline = "UsrRol";
private static readonly String aliasUserOnline_UserAccount = "UsrRol_Usr";
private static readonly String prefixUserOnline_UserAccount = "UsrRol_Usr_";
private static readonly String aliasUserOnline_UserSport = "UsrOnl_UsrSpt";
private void SetUserOnlineColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserOnline)
alias = aliasUserOnline;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserOnlineColumnDfn(SaxUserOnline.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserOnline.Column.Pos:
SetUserOnlineColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserOnline.Column.UserAccountId:
SetUserOnlineColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserOnline_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.OnlineOn:
SetUserOnlineColDfn(columnDfn, "Online", 80, SaxDbDfn_Core.ColumnIdx.UserOnline_OnlineAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.OnlineAt:
SetUserOnlineColDfn(columnDfn, "Online", 100, SaxDbDfn_Core.ColumnIdx.UserOnline_OnlineAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User properties.
case SaxUserOnline.Column.EmailAddress:
SetUserOnlineColDfn(columnDfn, "Email", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.DisplayName:
SetUserOnlineColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.Title:
SetUserOnlineColDfn(columnDfn, "Title", 70, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.FirstName:
SetUserOnlineColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.LastName:
SetUserOnlineColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.LastLoginOn:
SetUserOnlineColDfn(columnDfn, "Last login on", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOnline.Column.LastLoginAt:
SetUserOnlineColDfn(columnDfn, "Last login", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasUserOnline_UserAccount, prefixUserOnline_UserAccount);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserOnlineQueryFilter(SaxUserOnline.Params prm)
{
List<String> filter = new List<String>();
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_UserAccountId, aliasUserOnline) + " IN (" + userAccountIdsIncluded + ")");
// Online On.
if (DateUtil.IsValid(prm.OnlineOnFrom))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_OnlineAt, aliasUserOnline) + ">=" + DbQuery.FormatDateForCondition(prm.OnlineOnFrom));
if (DateUtil.IsValid(prm.OnlineOnTo))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_OnlineAt, aliasUserOnline) + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.OnlineOnTo, 1)));
// User Account filters.
String aliasUserOnline_UserAccount = StringUtil.OnEmpty(prm.Alias_UserAccount, SaxAccountMgr_Dbas.aliasUserOnline_UserAccount);
List<String> userAccountFilters = new List<string>();
// User filter - partial.
userAccountFilters.AddRange(GetUserAccountFilters(prm.UserFilter, aliasUserOnline_UserAccount));
userAccountFilters.AddRange(GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserOnline_UserAccount));
// Sport Ids.
String aliasUserOnline_UserSport = StringUtil.OnEmpty(prm.Alias_UserSport, SaxAccountMgr_Dbas.aliasUserOnline_UserSport);
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
{
List<String> userSportFilters = new List<string>();
userSportFilters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, aliasUserOnline_UserSport) + " IN (" + sportIdsIncluded + ")");
if (!userSportFilters.IsEmpty())
{
if (prm.Alias_UserSport.IsEmpty())
{
// User Sport table is not linked in query.
DbQuery userSportQuery = new DbQuery(CoreDatabase.DbmsType);
userSportQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserOnline_UserSport);
userSportQuery.Columns.Add("1");
userSportQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserOnline_UserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOnline_UserAccount));
userSportQuery.Filters.AddRange(userSportFilters);
filter.Add("Exists(" + userSportQuery.BuildQuery() + ")");
}
else
// User Sport table is already linked in the query.
filter.AddRange(userSportFilters);
}
}
// Region Ids.
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
if (!regionIdsIncluded.IsEmpty())
{
List<String> userRegionFilters = new List<string>();
userRegionFilters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdCountry, aliasUserOnline_UserAccount) + " IN (" + regionIdsIncluded + ")");
userRegionFilters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_RegionIdProvince, aliasUserOnline_UserAccount) + " IN (" + regionIdsIncluded + ")");
userAccountFilters.Add(userRegionFilters.Concat(" OR ", "", ""));
}
// User Account filter.
if (!userAccountFilters.IsEmpty())
{
if (prm.Alias_UserAccount.IsEmpty())
{
// User Account table is not linked in query.
DbQuery userAccountQuery = new DbQuery(CoreDatabase.DbmsType);
userAccountQuery.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOnline_UserAccount);
userAccountQuery.Columns.Add("1");
userAccountQuery.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOnline_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_UserAccountId, aliasUserOnline));
userAccountQuery.Filters.AddRange(userAccountFilters);
filter.Add("Exists(" + userAccountQuery.BuildQuery() + ")");
}
else
// User Account table is already linked in the query.
filter.AddRange(userAccountFilters);
}
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
// Item sort columns.
public List<String> GetUserOnlineSortColumns(SaxUserOnline.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserOnline columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserOnline)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserOnline);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_OnlineAt, aliasUserOnline) + " DESC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserOnlineCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOnline) + " As " + aliasUserOnline, filter);
}
public override long GetUserOnlineCount(SaxUserOnline.Params prm)
{
ClearErrorState();
return GetUserOnlineCount(GetUserOnlineQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserOnline> GetUserOnlineList(SaxUserOnline.Params prm)
{
ClearErrorState();
List<SaxUserOnline> userOnlines = new List<SaxUserOnline>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOnline), aliasUserOnline);
UserOnline_Db dbUserOnline = new UserOnline_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserOnline.ExistingColumnNames);
qry.Filters.AddRange(GetUserOnlineQueryFilter(prm));
qry.OrderBy.AddRange(GetUserOnlineSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserOnline = new UserOnline_Db(CoreDbInfo);
dbUserOnline.PopulateFrom(dbDataReader);
userOnlines.Add(CreateUserOnline(dbUserOnline));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userOnlines;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserOnlineQuery(List<ColumnDfn> columns, SaxUserOnline.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOnline), aliasUserOnline);
// Add columns as defined in query list.
if (columns.HasId(SaxUserOnline.Column.UserAccountId))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_UserAccountId, aliasUserOnline));
if (columns.HasId(SaxUserOnline.Column.OnlineOn) || columns.HasId(SaxUserOnline.Column.OnlineAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_OnlineAt, aliasUserOnline));
//---------------------------------------------------------------------
// User Account.
bool hasUserAccountCols = columns.HasId(SaxUserOnline.Column.EmailAddress) || columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.Title) || columns.HasId(SaxUserOnline.Column.FirstName) || columns.HasId(SaxUserOnline.Column.LastName) || columns.HasId(SaxUserOnline.Column.LastLoginOn) || columns.HasId(SaxUserOnline.Column.LastLoginAt);
if (hasUserAccountCols)
{
prm.Alias_UserAccount = aliasUserOnline_UserAccount;
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOnline_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOnline_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOnline_UserAccountId, aliasUserOnline));
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
if (columns.HasId(SaxUserOnline.Column.EmailAddress))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
if (columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.Title))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
if (columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.FirstName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
if (columns.HasId(SaxUserOnline.Column.DisplayName) || columns.HasId(SaxUserOnline.Column.LastName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
if (columns.HasId(SaxUserOnline.Column.LastLoginOn) || columns.HasId(SaxUserOnline.Column.LastLoginAt))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastLoginAt);
if (cols.Count > 0)
{
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOnline_UserAccount), prefixUserOnline_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
query.Joins.Add(joinUserAccount);
}
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserOnlineQueryFilter(prm));
if (prm.UserAccountIdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserOnlineSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,843 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Organisation
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserOrganisation userOrganisation)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userOrganisation.Id)),
new StringPair("UserAccountId",SysId.ToString(userOrganisation.UserAccountId)),
new StringPair("OrganisationId",SysId.ToString(userOrganisation.OrganisationId)),
new StringPair("Roles",userOrganisation.GetOrganisationRoles().ToList().Select(item => item.ToString()).Concat(", ")),
new StringPair("Status",userOrganisation.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserOrganisation CreateUserOrganisation(SysId userAccountId, SysId organisationId)
{
ClearErrorState();
return new SaxUserOrganisation_Dbas(CoreDatabase, null, userAccountId, organisationId, 0);
}
private SaxUserOrganisation_Dbas CreateUserOrganisation(UserOrganisation_Db dbUserOrganisation)
{
ClearErrorState();
SaxUserOrganisation_Dbas userOrganisation = new SaxUserOrganisation_Dbas(CoreDatabase, new SysId(dbUserOrganisation._Id), new SysId(dbUserOrganisation._UserAccountId), new SysId(dbUserOrganisation._OrganisationId), (ushort)dbUserOrganisation._Flags);
PopulateFrom(dbUserOrganisation, userOrganisation);
return userOrganisation;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserOrganisation GetUserOrganisation(SaxUserOrganisation.Params prm)
{
ClearErrorState();
return GetUserOrganisation(GetUserOrganisationQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserOrganisation GetUserOrganisation(String filter)
{
ClearErrorState();
long count = GetUserOrganisationCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserOrganisation userOrganisation = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo);
dbUserOrganisation.PopulateFrom(dbCommand, aliasUserOrganisation, filter);
userOrganisation = CreateUserOrganisation(dbUserOrganisation);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userOrganisation;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserOrganisationData(SaxUserOrganisation.Data data, SaxUserOrganisation.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserOrganisationData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserOrganisation";
ClearErrorState();
if (!IsValidUserOrganisation(userOrganisation)) return false;
if (SysId.IsValid(userOrganisation.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo);
PopulateTo(dbUserOrganisation, userOrganisation, dbUpdateInfo);
if (UserOrganisation_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserOrganisation._Id = CoreDatabase.GetNextIdFromTable("UserOrganisation");
}
dbUserOrganisation.ExecuteInsertCommand(dbCommand);
userOrganisation.Id = new SysId(dbUserOrganisation._Id);
userOrganisation.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserOrganisation";
ClearErrorState();
if (!IsValidUserOrganisation(userOrganisation)) return false;
if (!SysId.IsValid(userOrganisation.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userOrganisation.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo);
dbUserOrganisation.PopulateFrom(dbCommand, aliasUserOrganisation, "Id=" + SysId.ToString(userOrganisation.Id));
// ToDo SaxUpdateLogItemMonitor_UserOrganisation updateLogMonitor = new SaxUpdateLogItemMonitor_UserOrganisation(SessionContext, CreateUserOrganisation(dbUserOrganisation), dbUpdateInfo);
// Update item.
PopulateTo(dbUserOrganisation, userOrganisation, dbUpdateInfo);
dbUserOrganisation.ExecuteUpdateCommand(dbCommand);
userOrganisation.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userOrganisation);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserOrganisationCanBeDeleted(SaxUserOrganisation userOrganisation)
{
ClearErrorState();
if (!base.UserOrganisationCanBeDeleted(userOrganisation)) return false;
return true;
}
public override bool DeleteUserOrganisation(SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserOrganisation";
ClearErrorState();
if (!UserOrganisationCanBeDeleted(userOrganisation)) return false;
// User Organisations are logically deleted by changing the status.
userOrganisation.Status = SaStatus.Deleted;
return UpdateUserOrganisation(userOrganisation, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo);
dbUserOrganisation.PopulateFrom(dbCommand, aliasUserOrganisation, "Id=" + userOrganisation.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation) + " WHERE Id=" + SysId.ToString(userOrganisation.Id) + ";";
dbCommand.ExecuteNonQuery();
userOrganisation.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userOrganisation).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserOrganisation_Db dbUserOrganisation, SaxUserOrganisation userOrganisation, DbUpdateInfo dbUpdateInfo)
{
dbUserOrganisation._Id = SysId.ToInt(userOrganisation.Id);
dbUserOrganisation._UserAccountId = SysId.ToInt(userOrganisation.UserAccountId);
dbUserOrganisation._OrganisationId = SysId.ToInt(userOrganisation.OrganisationId);
dbUserOrganisation._OrganisationRoleCodes = userOrganisation.GetOrganisationRoleCodesData();
dbUserOrganisation._OrganisationRoleCount = (byte)userOrganisation.OrganisationRoleCount;
dbUserOrganisation._AdminComment = userOrganisation.AdminComment;
// Common.
dbUserOrganisation._Notes = userOrganisation.Notes;
dbUserOrganisation._Status = SacsSystem.GetStatusCode(userOrganisation.Status);
dbUserOrganisation._Flags = (short)userOrganisation.Flags;
if (!SysId.IsValid(userOrganisation.Id))
{
dbUserOrganisation._CreateOn = DateTime.Now;
dbUserOrganisation._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserOrganisation._CreateHost = dbUpdateInfo.Host;
}
dbUserOrganisation._UpdateOn = DateTime.Now;
dbUserOrganisation._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserOrganisation._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserOrganisation_Db dbUserOrganisation, SaxUserOrganisation userOrganisation)
{
//userOrganisation.Id = new SysId(dbUserOrganisation._Id);
//userOrganisation.UserAccountId = new SysId(dbUserOrganisation._UserAccountId);
//userOrganisation.OrganisationId = new SysId(dbUserOrganisation._OrganisationId);
userOrganisation.OrganisationRoles = SaxUserOrganisation.GetOrganisationRolesFromCodes(dbUserOrganisation._OrganisationRoleCodes);
userOrganisation.AdminComment = dbUserOrganisation._AdminComment;
// Common.
userOrganisation.Notes = dbUserOrganisation._Notes;
userOrganisation.Status = SacsSystem.GetStatusForCode(dbUserOrganisation._Status);
userOrganisation.SetCreateStamp(dbUserOrganisation._CreateOn, new SysId(dbUserOrganisation._CreateBy), dbUserOrganisation._CreateHost);
userOrganisation.SetUpdateStamp(dbUserOrganisation._UpdateOn, new SysId(dbUserOrganisation._UpdateBy), dbUserOrganisation._UpdateHost);
userOrganisation.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserOrganisation = "UsrOrg";
private static readonly String aliasUserOrganisation_UserAccount = "UsrOrg_Usr";
private static readonly String prefixUserOrganisation_UserAccount = "UsrOrg_Usr_";
private static readonly String aliasUserOrganisation_Organisation = "UsrOrg_Org";
private static readonly String prefixUserOrganisation_Organisation = "UsrOrg_Org_";
private static readonly String aliasUserOrganisation_Organisation_Region = "UsrOrg_Org_Rgn";
private static readonly String prefixUserOrganisation_Organisation_Region = "UsrOrg_Org_Rgn_";
private static readonly String aliasUserOrganisation_Organisation_Sport = "UsrOrg_Org_Spt";
private static readonly String prefixUserOrganisation_Organisation_Sport = "UsrOrg_Org_Spt_";
private static readonly String dataName_UserOrganisation_Organisation_Member_Count = "UsrOrg_Org_Mbr_Count";
private static readonly String dataName_UserOrganisation_Organisation_Opportunity_Count = "UsrOrg_Org_Opp_Count";
private static readonly String dataName_UserOrganisation_Organisation_LogoImage_Count = "UsrOrg_Org_Logo_Count";
private void SetUserOrganisationColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserOrganisation)
alias = aliasUserOrganisation;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserOrganisationColumnDfn(SaxUserOrganisation.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserOrganisation.Column.Pos:
SetUserOrganisationColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserOrganisation.Column.Id:
SetUserOrganisationColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.UserAccountId:
SetUserOrganisationColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.OrganisationId:
SetUserOrganisationColDfn(columnDfn, "Organisation Id", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Organisation roles.
case SaxUserOrganisation.Column.OrganisationRoleCount:
SetUserOrganisationColDfn(columnDfn, "Role count", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.OrganisationRoleCodes:
SetUserOrganisationColDfn(columnDfn, "Roles", 100, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, ColumnAlignment.Left);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.OrganisationRoleDescs:
SetUserOrganisationColDfn(columnDfn, "Roles", 100, SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, ColumnAlignment.Left);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserOrganisation.Column.User_EmailAddress:
SetUserOrganisationColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_DisplayName:
SetUserOrganisationColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_Title:
SetUserOrganisationColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_FirstName:
SetUserOrganisationColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_LastName:
SetUserOrganisationColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_Status:
SetUserOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.User_Status_Desc:
SetUserOrganisationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserAccount_Status, ColumnAlignment.Center, DataValue.DataType.String, aliasUserOrganisation_UserAccount, prefixUserOrganisation_UserAccount);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Organisation.
case SaxUserOrganisation.Column.Organisation_Name:
SetUserOrganisationColDfn(columnDfn, "Organisation", 160, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_Category:
SetUserOrganisationColDfn(columnDfn, "Category", 60, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_Type:
SetUserOrganisationColDfn(columnDfn, "Type", 60, SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType, ColumnAlignment.Center, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_RegionId:
SetUserOrganisationColDfn(columnDfn, "Organisation region Id", 80, SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_Region_Name:
SetUserOrganisationColDfn(columnDfn, "Organisation region", 160, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_Organisation_Region, prefixUserOrganisation_Organisation_Region);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_SportId:
SetUserOrganisationColDfn(columnDfn, "Organisation sport Id", 80, SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasUserOrganisation_Organisation, prefixUserOrganisation_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_Sport_Name:
SetUserOrganisationColDfn(columnDfn, "Organisation sport", 160, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserOrganisation_Organisation_Sport, prefixUserOrganisation_Organisation_Sport);
columnDfn.ReadOnly = true;
break;
// Derived properties.
case SaxUserOrganisation.Column.Organisation_Member_Count:
SetUserOrganisationColDfn(columnDfn, "Members", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = dataName_UserOrganisation_Organisation_Member_Count;
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_Opportunity_Count:
SetUserOrganisationColDfn(columnDfn, "Opportunities", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = dataName_UserOrganisation_Organisation_Opportunity_Count;
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.Organisation_LogoImage_Count:
SetOrganisationColDfn(columnDfn, "Logos", 76, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = dataName_UserOrganisation_Organisation_LogoImage_Count;
break;
//-----------------------------------------------------------
// Properties.
case SaxUserOrganisation.Column.AdminComment:
SetUserOrganisationColDfn(columnDfn, "Comment", 240, SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment);
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxUserOrganisation.Column.Notes:
SetUserOrganisationColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes);
break;
case SaxUserOrganisation.Column.Flags:
SetUserOrganisationColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserOrganisation.Column.Status:
SetUserOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, ColumnAlignment.Center);
break;
case SaxUserOrganisation.Column.Status_Desc:
SetUserOrganisationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, ColumnAlignment.Center);
break;
case SaxUserOrganisation.Column.Status_Ind:
SetUserOrganisationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserOrganisation.Column.CreateOn_Date:
SetUserOrganisationColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserOrganisation.Column.UpdateOn_Date:
SetUserOrganisationColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserOrganisation_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserOrganisationQueryFilter(SaxUserOrganisation.Params prm)
{
List<String> filter = new List<String>();
String aliasUserOrganisation = StringUtil.OnEmpty(prm.Alias_UserOrganisation, SaxAccountMgr_Dbas.aliasUserOrganisation);
// Item Ids.
String colUserOrganisation_Id = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, aliasUserOrganisation);
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{colUserOrganisation_Id} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{colUserOrganisation_Id} NOT IN ({prm.IdsExcluded.Concat(",")})");
// User accounts.
if (prm.UserAccountIdsIncluded.HasValidIds())
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation)} IN ({prm.UserAccountIdsIncluded.Concat(",")})");
// User Account filters.
if (StringUtil.IsEmpty(prm.Alias_UserAccount))
{
// User Account table isn't linked - use sub-query.
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount);
qry.Columns.Add("1");
// Construct required filters.
if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any)
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserOrganisation_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat));
if (!StringUtil.IsEmpty(prm.UserFilter))
qry.Filters.AddRange(SaxAccountMgr_Dbas.GetUserAccountFilters(prm.UserFilter, aliasUserOrganisation_UserAccount));
if (!StringUtil.IsEmpty(prm.UserFilterPartial))
qry.Filters.AddRange(SaxAccountMgr_Dbas.GetPartialUserAccountFilters(prm.UserFilterPartial, aliasUserOrganisation_UserAccount));
if (!qry.Filters.IsEmpty())
{
// At least one User Account filter has been applied. Include Id filter and construct main query filter.
qry.Filters.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount)}={SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation)}");
filter.Add($"Exists ({qry.BuildQuery()})");
}
}
else
{
// User Account table is linked - filter directly.
if (prm.UserAccountStatusCat != SaxUserAccount.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, prm.Alias_UserAccount) + GetUserAccountStatusCatFilterCondition(prm.UserAccountStatusCat));
if (!StringUtil.IsEmpty(prm.UserFilter))
filter.AddRange(SaxAccountMgr_Dbas.GetUserAccountFilters(prm.UserFilter, prm.Alias_UserAccount));
if (!StringUtil.IsEmpty(prm.UserFilterPartial))
filter.AddRange(SaxAccountMgr_Dbas.GetPartialUserAccountFilters(prm.UserFilterPartial, prm.Alias_UserAccount));
}
// Organisations.
String organisationIdsIncluded = prm.OrganisationIdsIncluded.Concat(",");
if (!organisationIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation) + " IN (" + organisationIdsIncluded + ")");
// Scheduled events.
if (prm.OrganisationHasScheduledEvents)
{
// Sub-query on Organisation Events.
String aliasOrganisationEvent = "UsrOrg_OrgEvt";
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationEvent), aliasOrganisationEvent);
qry.Columns.Add("1");
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, aliasOrganisationEvent) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
qry.Filters.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, aliasOrganisationEvent)}>=DateAdd(day,-7,GetDate())");
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Status, aliasOrganisationEvent) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat));
filter.Add($"Exists ({qry.BuildQuery()})");
}
// Organisation status.
if (prm.OrganisationStatusCat != SaxOrganisation.StatusCat.Any)
{
if (StringUtil.IsEmpty(prm.Alias_Organisation))
{
// User Account table isn't linked.
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasUserOrganisation_Organisation);
qry.Columns.Add("1");
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserOrganisation_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
qry.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, aliasUserOrganisation_Organisation) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat));
filter.Add($"Exists ({qry.BuildQuery()})");
}
else
// User Account table is linked - filter directly.
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Status, prm.Alias_Organisation) + GetOrganisationStatusCatFilterCondition(prm.OrganisationStatusCat));
}
// Organisation roles.
if (prm.OrganisationMembersOnly)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasUserOrganisation) + ">0");
if (!prm.OrganisationRoles.IsEmpty())
{
foreach (Sax.OrganisationRole organisationRole in prm.OrganisationRoles)
{
String organisationRoleCode = OrganisationRoleCodes.GetCodeForType(organisationRole).TrimAll();
if (!StringUtil.IsEmpty(organisationRoleCode))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, aliasUserOrganisation) + " LIKE '%" + DbQuery.FormatForLike(organisationRoleCode) + "%'");
}
}
if (!prm.OrganisationRolesAny.IsEmpty())
{
List<String> roleFilter = new List<string>();
foreach (Sax.OrganisationRole organisationRole in prm.OrganisationRolesAny)
{
String organisationRoleCode = OrganisationRoleCodes.GetCodeForType(organisationRole).TrimAll();
if (!StringUtil.IsEmpty(organisationRoleCode))
roleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, aliasUserOrganisation) + " LIKE '%" + DbQuery.FormatForLike(organisationRoleCode) + "%'");
}
if (!roleFilter.IsEmpty())
filter.Add(roleFilter.Concat(" OR "));
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes, aliasUserOrganisation) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxUserOrganisation.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasUserOrganisation) + GetUserOrganisationStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetUserOrganisationStatusCatFilterCondition(SaxUserOrganisation.StatusCat statusCat)
{
if (statusCat == SaxUserOrganisation.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxUserOrganisation.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserOrganisation.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
//-------------------------------------------------------------------
// Item sort columns.
public List<String> GetUserOrganisationSortColumns(SaxUserOrganisation.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserOrganisation columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserOrganisation)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserOrganisation);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, aliasUserOrganisation) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserOrganisationCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation) + " As " + aliasUserOrganisation, filter);
}
public override long GetUserOrganisationCount(SaxUserOrganisation.Params prm)
{
ClearErrorState();
return GetUserOrganisationCount(GetUserOrganisationQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserOrganisation> GetUserOrganisationList(SaxUserOrganisation.Params prm)
{
ClearErrorState();
List<SaxUserOrganisation> userOrganisations = new List<SaxUserOrganisation>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasUserOrganisation);
UserOrganisation_Db dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserOrganisation.ExistingColumnNames);
qry.Filters.AddRange(GetUserOrganisationQueryFilter(prm));
qry.OrderBy.AddRange(GetUserOrganisationSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserOrganisation = new UserOrganisation_Db(CoreDbInfo);
dbUserOrganisation.PopulateFrom(dbDataReader);
userOrganisations.Add(CreateUserOrganisation(dbUserOrganisation));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userOrganisations;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserOrganisationQuery(List<ColumnDfn> columns, SaxUserOrganisation.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasUserOrganisation);
prm.Alias_UserOrganisation = aliasUserOrganisation;
// Add columns as defined in query list.
if (columns.HasId(SaxUserOrganisation.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Id, aliasUserOrganisation));
bool hasUserAccountCols = (columns.HasId(SaxUserOrganisation.Column.User_EmailAddress) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName) || columns.HasId(SaxUserOrganisation.Column.User_Title) || columns.HasId(SaxUserOrganisation.Column.User_FirstName) || columns.HasId(SaxUserOrganisation.Column.User_LastName) || columns.HasId(SaxUserOrganisation.Column.User_Status) || columns.HasId(SaxUserOrganisation.Column.User_Status_Desc));
if (columns.HasId(SaxUserOrganisation.Column.UserAccountId) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
bool hasOrganisationCols = (columns.HasId(SaxUserOrganisation.Column.Organisation_Name) || columns.HasId(SaxUserOrganisation.Column.Organisation_RegionId) || columns.HasId(SaxUserOrganisation.Column.Organisation_SportId));
bool hasOrganisationRegionCols = (columns.HasId(SaxUserOrganisation.Column.Organisation_Region_Name));
bool hasOrganisationSportCols = (columns.HasId(SaxUserOrganisation.Column.Organisation_Sport_Name));
if (columns.HasId(SaxUserOrganisation.Column.OrganisationId) || hasOrganisationCols || hasOrganisationRegionCols || hasOrganisationSportCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.OrganisationRoleCodes) || columns.HasId(SaxUserOrganisation.Column.OrganisationRoleDescs))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCodes, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.OrganisationRoleCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.AdminComment))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_AdminComment, aliasUserOrganisation));
// Common properties.
if (columns.HasId(SaxUserOrganisation.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Notes, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Flags, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.Status) || columns.HasId(SaxUserOrganisation.Column.Status_Desc) || columns.HasId(SaxUserOrganisation.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_CreateOn, aliasUserOrganisation));
if (columns.HasId(SaxUserOrganisation.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UpdateOn, aliasUserOrganisation));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
// Inform the parameters that the User Account table is linked.
prm.Alias_UserAccount = aliasUserOrganisation_UserAccount;
// User Account join.
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserOrganisation_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserOrganisation_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasUserOrganisation));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
if (columns.HasId(SaxUserOrganisation.Column.User_EmailAddress))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
if (columns.HasId(SaxUserOrganisation.Column.User_Title) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
if (columns.HasId(SaxUserOrganisation.Column.User_FirstName) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
if (columns.HasId(SaxUserOrganisation.Column.User_LastName) || columns.HasId(SaxUserOrganisation.Column.User_DisplayName))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
if (columns.HasId(SaxUserOrganisation.Column.User_Status) || columns.HasId(SaxUserOrganisation.Column.User_Status_Desc))
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Status);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_UserAccount), prefixUserOrganisation_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Organisation.
if (hasOrganisationCols || hasOrganisationRegionCols || hasOrganisationSportCols)
{
// Inform the parameters that the Organisation table is linked.
prm.Alias_Organisation = aliasUserOrganisation_Organisation;
// Organisation join.
DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasUserOrganisation_Organisation);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserOrganisation_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
query.Joins.Add(joinOrganisation);
List<SaxDbDfn_Core.ColumnIdx> OrganisationCols = new List<SaxDbDfn_Core.ColumnIdx>();
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationCategory);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_OrganisationType);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary);
foreach (var col in OrganisationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_Organisation), prefixUserOrganisation_Organisation + SaxDbDfn_Core.GetColumnName(col, false));
if (hasOrganisationRegionCols)
{
DbQueryJoin joinOrganisationRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisationRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserOrganisation_Organisation_Region);
joinOrganisationRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserOrganisation_Organisation_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, aliasUserOrganisation_Organisation));
query.Joins.Add(joinOrganisationRegion);
List<SaxDbDfn_Core.ColumnIdx> regionCols = new List<SaxDbDfn_Core.ColumnIdx>();
regionCols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in regionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_Organisation_Region), prefixUserOrganisation_Organisation_Region + SaxDbDfn_Core.GetColumnName(col, false));
}
if (hasOrganisationSportCols)
{
DbQueryJoin joinOrganisationSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisationSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasUserOrganisation_Organisation_Sport);
joinOrganisationSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasUserOrganisation_Organisation_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, aliasUserOrganisation_Organisation));
query.Joins.Add(joinOrganisationSport);
List<SaxDbDfn_Core.ColumnIdx> regionCols = new List<SaxDbDfn_Core.ColumnIdx>();
regionCols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in regionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserOrganisation_Organisation_Sport), prefixUserOrganisation_Organisation_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
}
//---------------------------------------------------------------------
// Organisation Member count.
if (columns.HasId(SaxUserOrganisation.Column.Organisation_Member_Count))
{
// Count 'Member' entries on User Organisation for the Organisation.
String aliasOrgMbr = "OrgMbr";
DbQuery qryOrgMbr = new DbQuery(CoreDatabase.DbmsType);
qryOrgMbr.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), aliasOrgMbr);
qryOrgMbr.Columns.Add("Count(*)");
qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasOrgMbr) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationRoleCount, aliasOrgMbr) + ">0");
qryOrgMbr.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_Status, aliasOrgMbr) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Join to User Account.
String aliasUserAccount = "aUsrOrg_UsrAcc";
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.Inner);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, aliasOrgMbr));
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Status, aliasUserAccount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
qryOrgMbr.Joins.Add(joinUserAccount);
// Construct sub-query.
query.Columns.Add("(" + qryOrgMbr.BuildQuery() + ")", dataName_UserOrganisation_Organisation_Member_Count);
}
//---------------------------------------------------------------------
// Organisation Opportunity count.
if (columns.HasId(SaxUserOrganisation.Column.Organisation_Opportunity_Count))
{
// Count Organisation Opportunities.
String aliasOrgOpp = "OrgOpp";
DbQuery qryOrgOpp = new DbQuery(CoreDatabase.DbmsType);
qryOrgOpp.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity), aliasOrgOpp);
qryOrgOpp.Columns.Add("Count(*)");
qryOrgOpp.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrgOpp) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
// ToDo Should be limited by expiry etc.
query.Columns.Add("(" + qryOrgOpp.BuildQuery() + ")", dataName_UserOrganisation_Organisation_Opportunity_Count);
}
//---------------------------------------------------------------------
// Organisation Logo Image count.
if (columns.HasId(SaxUserOrganisation.Column.Organisation_LogoImage_Count))
{
String aliasLogoCount = "Img_Org_Logo";
DbQuery queryLogoCount = new DbQuery(CoreDatabase.DbmsType);
queryLogoCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasLogoCount);
queryLogoCount.Columns.Add("Count(*)");
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasLogoCount) + "=" + (int)Sax.DataItemType.Organisation);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasLogoCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, aliasUserOrganisation));
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasLogoCount) + "=" + (int)Sax.ImageType.OrganisationLogo);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasLogoCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Construct sub-query.
query.Columns.Add("(" + queryLogoCount.BuildQuery() + ")", dataName_UserOrganisation_Organisation_LogoImage_Count);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserOrganisationQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserOrganisationSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,586 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Role
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserRole userRole)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userRole.Id)),
new StringPair("UserAccountId",SysId.ToString(userRole.UserAccountId)),
new StringPair("Role",userRole.UserRole.ToString()),
new StringPair("Status",userRole.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserRole CreateUserRole(SysId userAccountId, Sax.UserRole userRole)
{
ClearErrorState();
return new SaxUserRole_Dbas(CoreDatabase, null, userAccountId, userRole, 0);
}
private SaxUserRole_Dbas CreateUserRole(UserRole_Db dbUserRole)
{
ClearErrorState();
SaxUserRole_Dbas userRole = new SaxUserRole_Dbas(CoreDatabase, new SysId(dbUserRole._Id), new SysId(dbUserRole._UserAccountId), (Sax.UserRole)UserRoleCodes.GetTypeForCode(dbUserRole._UserRoleCode), (ushort)dbUserRole._Flags);
PopulateFrom(dbUserRole, userRole);
return userRole;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserRole GetUserRole(SaxUserRole.Params prm)
{
ClearErrorState();
return GetUserRole(GetUserRoleQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserRole GetUserRole(String filter)
{
ClearErrorState();
long count = GetUserRoleCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserRole userRole = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserRole_Db dbUserRole = new UserRole_Db(CoreDbInfo);
dbUserRole.PopulateFrom(dbCommand, aliasUserRole, filter);
userRole = CreateUserRole(dbUserRole);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRole;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserRoleData(SaxUserRole.Data data, SaxUserRole.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserRoleData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserRole(SaxUserRole userRole, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserRole";
ClearErrorState();
if (!IsValidUserRole(userRole)) return false;
if (SysId.IsValid(userRole.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserRole_Db dbUserRole = new UserRole_Db(CoreDbInfo);
PopulateTo(dbUserRole, userRole, dbUpdateInfo);
if (UserRole_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserRole._Id = CoreDatabase.GetNextIdFromTable("UserRole");
}
dbUserRole.ExecuteInsertCommand(dbCommand);
userRole.Id = new SysId(dbUserRole._Id);
userRole.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userRole).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserRole(SaxUserRole userRole, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserRole";
ClearErrorState();
if (!IsValidUserRole(userRole)) return false;
if (!SysId.IsValid(userRole.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userRole.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userRole).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserRole_Db dbUserRole = new UserRole_Db(CoreDbInfo);
dbUserRole.PopulateFrom(dbCommand, aliasUserRole, "Id=" + SysId.ToString(userRole.Id));
// ToDo SaxUpdateLogItemMonitor_UserRole updateLogMonitor = new SaxUpdateLogItemMonitor_UserRole(SessionContext, CreateUserRole(dbUserRole), dbUpdateInfo);
// Update item.
PopulateTo(dbUserRole, userRole, dbUpdateInfo);
dbUserRole.ExecuteUpdateCommand(dbCommand);
userRole.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userRole).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userRole);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserRoleCanBeDeleted(SaxUserRole userRole)
{
ClearErrorState();
if (!base.UserRoleCanBeDeleted(userRole)) return false;
return true;
}
public override bool DeleteUserRole(SaxUserRole userRole, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserRole";
ClearErrorState();
if (!UserRoleCanBeDeleted(userRole)) return false;
// User Roles are logically deleted by changing the status.
userRole.Status = SaStatus.Deleted;
return UpdateUserRole(userRole, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserRole_Db dbUserRole = new UserRole_Db(CoreDbInfo);
dbUserRole.PopulateFrom(dbCommand, aliasUserRole, "Id=" + userRole.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole) + " WHERE Id=" + SysId.ToString(userRole.Id) + ";";
dbCommand.ExecuteNonQuery();
userRole.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userRole).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserRole_Db dbUserRole, SaxUserRole userRole, DbUpdateInfo dbUpdateInfo)
{
dbUserRole._Id = SysId.ToLong(userRole.Id);
dbUserRole._UserAccountId = SysId.ToInt(userRole.UserAccountId);
dbUserRole._UserRoleCode = UserRoleCodes.GetCodeForType(userRole.UserRole);
// Login.
dbUserRole._LastLoginAt = userRole.LastLoginAt;
dbUserRole._LastInvalidLoginAt = userRole.LastInvalidLoginAt;
dbUserRole._InvalidLoginCount = userRole.InvalidLoginCount;
// Common.
dbUserRole._Notes = userRole.Notes;
dbUserRole._Status = SacsSystem.GetStatusCode(userRole.Status);
dbUserRole._Flags = (short)userRole.Flags;
if (!SysId.IsValid(userRole.Id))
{
dbUserRole._CreateOn = DateTime.Now;
dbUserRole._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserRole._CreateHost = dbUpdateInfo.Host;
}
dbUserRole._UpdateOn = DateTime.Now;
dbUserRole._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserRole._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserRole_Db dbUserRole, SaxUserRole userRole)
{
//userRole.Id = new SysId(dbUserRole._Id);
//userRole.UserAccountId = new SysId(dbUserRole._UserAccountId);
//userRole.UserRole = (Sax.UserRole)UserRoles.GetTypeForCode(dbUserRole._UserRoleCode);
// Login.
userRole.LastLoginAt = dbUserRole._LastLoginAt;
userRole.LastInvalidLoginAt = dbUserRole._LastInvalidLoginAt;
userRole.InvalidLoginCount = dbUserRole._InvalidLoginCount;
// Common.
userRole.Notes = dbUserRole._Notes;
userRole.Status = SacsSystem.GetStatusForCode(dbUserRole._Status);
userRole.SetCreateStamp(dbUserRole._CreateOn, new SysId(dbUserRole._CreateBy), dbUserRole._CreateHost);
userRole.SetUpdateStamp(dbUserRole._UpdateOn, new SysId(dbUserRole._UpdateBy), dbUserRole._UpdateHost);
userRole.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserRole = "UsrRol";
private static readonly String aliasUserRole_UserAccount = "UsrRol_Usr";
private static readonly String prefixUserRole_UserAccount = "UsrRol_Usr_";
private void SetUserRoleColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserRole)
alias = aliasUserRole;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserRoleColumnDfn(SaxUserRole.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserRole.Column.Pos:
SetUserRoleColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserRole.Column.UserAccountId:
SetUserRoleColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.Id:
SetUserRoleColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserRole_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.UserRole:
SetUserRoleColDfn(columnDfn, "Role", 120, SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Login.
case SaxUserRole.Column.LastLoginOn:
SetUserRoleColDfn(columnDfn, "Last login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.LastLoginAt:
SetUserRoleColDfn(columnDfn, "Last login", 120, SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.LastInvalidLoginOn:
SetUserRoleColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.LastInvalidLoginAt:
SetUserRoleColDfn(columnDfn, "Last invalid login", 100, SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.InvalidLoginCount:
SetUserRoleColDfn(columnDfn, "Invalid logins", 80, SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserRole.Column.User_EmailAddress:
SetUserRoleColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserRole_UserAccount, prefixUserRole_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.User_DisplayName:
SetUserRoleColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.User_Title:
SetUserRoleColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserRole_UserAccount, prefixUserRole_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.User_FirstName:
SetUserRoleColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserRole_UserAccount, prefixUserRole_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.User_LastName:
SetUserRoleColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserRole_UserAccount, prefixUserRole_UserAccount);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxUserRole.Column.Notes:
SetUserRoleColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserRole_Notes);
break;
case SaxUserRole.Column.Flags:
SetUserRoleColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserRole_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserRole.Column.Status:
SetUserRoleColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserRole_Status, ColumnAlignment.Center);
break;
case SaxUserRole.Column.Status_Desc:
SetUserRoleColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserRole_Status, ColumnAlignment.Center);
break;
case SaxUserRole.Column.Status_Ind:
SetUserRoleColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserRole_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserRole.Column.CreateOn_Date:
SetUserRoleColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserRole_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserRole.Column.UpdateOn_Date:
SetUserRoleColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserRole_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserRoleQueryFilter(SaxUserRole.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Id, aliasUserRole) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Id, aliasUserRole) + " NOT IN (" + idsExcluded + ")");
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole) + " IN (" + userAccountIdsIncluded + ")");
// User roles.
List<TypeCodeDesc> userRoles = UserRoleCodes;
String userRoleCodes = prm.UserRolesIncluded.Select(item => UserRoleCodes.GetCodeForType(item)).ToList().Concat(",", "'", "'", true, true);
if (!userRoleCodes.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserRole) + " IN (" + userRoleCodes + ")");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Notes, aliasUserRole) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxUserRole.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Status, aliasUserRole) + GetUserRoleStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetUserRoleStatusCatFilterCondition(SaxUserRole.StatusCat statusCat)
{
if (statusCat == SaxUserRole.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxUserRole.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxUserRole.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserRole.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetUserRoleSortColumns(SaxUserRole.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserRole columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserRole)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserRole);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Id, aliasUserRole) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserRoleCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole) + " As " + aliasUserRole, filter);
}
public override long GetUserRoleCount(SaxUserRole.Params prm)
{
ClearErrorState();
return GetUserRoleCount(GetUserRoleQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserRole> GetUserRoleList(SaxUserRole.Params prm)
{
ClearErrorState();
List<SaxUserRole> userRoles = new List<SaxUserRole>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserRole);
UserRole_Db dbUserRole = new UserRole_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserRole.ExistingColumnNames);
qry.Filters.AddRange(GetUserRoleQueryFilter(prm));
qry.OrderBy.AddRange(GetUserRoleSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserRole = new UserRole_Db(CoreDbInfo);
dbUserRole.PopulateFrom(dbDataReader);
userRoles.Add(CreateUserRole(dbUserRole));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRoles;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserRoleQuery(List<ColumnDfn> columns, SaxUserRole.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserRole), aliasUserRole);
// Add columns as defined in query list.
if (columns.HasId(SaxUserRole.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Id, aliasUserRole));
bool hasUserAccountCols = (columns.HasId(SaxUserRole.Column.User_EmailAddress) || columns.HasId(SaxUserRole.Column.User_DisplayName) || columns.HasId(SaxUserRole.Column.User_Title) || columns.HasId(SaxUserRole.Column.User_FirstName) || columns.HasId(SaxUserRole.Column.User_LastName));
if (columns.HasId(SaxUserRole.Column.UserAccountId) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.UserRole) || columns.HasId(SaxUserRole.Column.UserRole_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserRoleCode, aliasUserRole));
// Login.
if (columns.HasId(SaxUserRole.Column.LastLoginOn) || columns.HasId(SaxUserRole.Column.LastLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_LastLoginAt, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.LastInvalidLoginOn) || columns.HasId(SaxUserRole.Column.LastInvalidLoginAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_LastInvalidLoginAt, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.InvalidLoginCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_InvalidLoginCount, aliasUserRole));
// Common properties.
if (columns.HasId(SaxUserRole.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Notes, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Flags, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.Status) || columns.HasId(SaxUserRole.Column.Status_Desc) || columns.HasId(SaxUserRole.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_Status, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_CreateOn, aliasUserRole));
if (columns.HasId(SaxUserRole.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UpdateOn, aliasUserRole));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserRole_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserRole_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserRole_UserAccountId, aliasUserRole));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserRole_UserAccount), prefixUserRole_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserRoleQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserRoleSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,470 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Session
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserSession userSession)
{
return new List<StringPair>()
{
new StringPair("UserAccountId",SysId.ToString(userSession.UserAccountId)),
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserSession CreateUserSession(SysId userAccountId)
{
ClearErrorState();
return new SaxUserSession_Dbas(CoreDatabase, userAccountId, 0);
}
private SaxUserSession_Dbas CreateUserSession(UserSession_Db dbUserSession)
{
ClearErrorState();
SaxUserSession_Dbas userSession = new SaxUserSession_Dbas(CoreDatabase, new SysId(dbUserSession._UserAccountId), (ushort)dbUserSession._Flags);
PopulateFrom(dbUserSession, userSession);
return userSession;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserSession GetUserSession(SaxUserSession.Params prm)
{
ClearErrorState();
return GetUserSession(GetUserSessionQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserSession GetUserSession(String filter)
{
ClearErrorState();
long count = GetUserSessionCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserSession userSession = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserSession_Db dbUserSession = new UserSession_Db(CoreDbInfo);
dbUserSession.PopulateFrom(dbCommand, aliasUserSession, filter);
userSession = CreateUserSession(dbUserSession);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userSession;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserSessionData(SaxUserSession.Data data, SaxUserSession.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserSessionData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserSession(SaxUserSession userSession, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserSession";
ClearErrorState();
if (!IsValidUserSession(userSession)) return false;
if (SysId.IsValid(userSession.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserSession_Db dbUserSession = new UserSession_Db(CoreDbInfo);
PopulateTo(dbUserSession, userSession, dbUpdateInfo);
if (UserSession_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
//dbUserSession._Id = CoreDatabase.GetNextIdFromTable("UserSession");
}
dbUserSession.ExecuteInsertCommand(dbCommand);
//userSession.Id = new SysId(dbUserSession._Id);
userSession.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userSession).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserSession(SaxUserSession userSession, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserSession";
ClearErrorState();
if (!IsValidUserSession(userSession)) return false;
if (!SysId.IsValid(userSession.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userSession.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userSession).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserSession_Db dbUserSession = new UserSession_Db(CoreDbInfo);
dbUserSession.PopulateFrom(dbCommand, aliasUserSession, "UserAccountId=" + SysId.ToString(userSession.UserAccountId));
// Update properties.
PopulateTo(dbUserSession, userSession, dbUpdateInfo);
dbUserSession.ExecuteUpdateCommand(dbCommand);
userSession.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userSession).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserSessionCanBeDeleted(SaxUserSession userSession)
{
ClearErrorState();
if (!base.UserSessionCanBeDeleted(userSession)) return false;
return true;
}
public override bool DeleteUserSession(SaxUserSession userSession, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserSession";
ClearErrorState();
if (!UserSessionCanBeDeleted(userSession)) return false;
// User Sessions are logically deleted by changing the status.
userSession.Status = SaStatus.Deleted;
return UpdateUserSession(userSession, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserSession_Db dbUserSession = new UserSession_Db(CoreDbInfo);
dbUserSession.PopulateFrom(dbCommand, aliasUserSession, "UserAccountId=" + SysId.ToString(userSession.UserAccountId));
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSession) + " WHERE UserAccountId=" + SysId.ToString(userSession.UserAccountId) + ";";
dbCommand.ExecuteNonQuery();
userSession.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userSession).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserSession_Db dbUserSession, SaxUserSession userSession, DbUpdateInfo dbUpdateInfo)
{
dbUserSession._UserAccountId = SysId.ToInt(userSession.UserAccountId);
dbUserSession._ActivityIndexIds= SysIdCollection.Concat(userSession.ActivityIndexIds, SaxUserSession.ActivityIndexDelim);
dbUserSession._UserSessionData = userSession.UserSessionData;
// Common.
dbUserSession._Flags = (short)userSession.Flags;
if (!DateUtil.IsValid(dbUserSession._CreateOn))
{
dbUserSession._CreateOn = DateTime.Now;
}
dbUserSession._UpdateOn = DateTime.Now;
}
private void PopulateFrom(UserSession_Db dbUserSession, SaxUserSession userSession)
{
//userSession.UserAccountId = new SysId(dbUserSession._UserAccountId);
userSession.ActivityIndexIds = StringListUtil.Split(dbUserSession._ActivityIndexIds, SaxUserSession.ActivityIndexDelim).Select(item => SysId.ToSysId(item)).ToList();
userSession.UserSessionData = dbUserSession._UserSessionData;
// Common.
userSession.SetCreateStamp(dbUserSession._CreateOn, new SysId(), "");
userSession.SetUpdateStamp(dbUserSession._UpdateOn, new SysId(), "");
userSession.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserSession = "UsrSes";
private static readonly String aliasUserSession_UserAccount = "UsrSes_Usr";
private static readonly String prefixUserSession_UserAccount = "UsrSes_Usr_";
private void SetUserSessionColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserSession)
alias = aliasUserSession;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserSessionColumnDfn(SaxUserSession.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserSession.Column.Pos:
SetUserSessionColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserSession.Column.UserAccountId:
SetUserSessionColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserSession_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserSession.Column.User_EmailAddress:
SetUserSessionColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSession_UserAccount, prefixUserSession_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserSession.Column.User_DisplayName:
SetUserSessionColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserSession.Column.User_Title:
SetUserSessionColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSession_UserAccount, prefixUserSession_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserSession.Column.User_FirstName:
SetUserSessionColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSession_UserAccount, prefixUserSession_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserSession.Column.User_LastName:
SetUserSessionColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSession_UserAccount, prefixUserSession_UserAccount);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxUserSession.Column.Flags:
SetUserSessionColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserSession_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserSession.Column.CreateOn_Date:
SetUserSessionColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserSession_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserSession.Column.UpdateOn_Date:
SetUserSessionColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserSession_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserSessionQueryFilter(SaxUserSession.Params prm)
{
List<String> filter = new List<String>();
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSession_UserAccountId, aliasUserSession) + " IN (" + userAccountIdsIncluded + ")");
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
// Item sort columns.
public List<String> GetUserSessionSortColumns(SaxUserSession.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserSession columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserSession)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserSession);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSession_UserAccountId, aliasUserSession) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserSessionCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSession) + " As " + aliasUserSession, filter);
}
public override long GetUserSessionCount(SaxUserSession.Params prm)
{
ClearErrorState();
return GetUserSessionCount(GetUserSessionQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserSession> GetUserSessionList(SaxUserSession.Params prm)
{
ClearErrorState();
List<SaxUserSession> userSessions = new List<SaxUserSession>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSession), aliasUserSession);
UserSession_Db dbUserSession = new UserSession_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserSession.ExistingColumnNames);
qry.Filters.AddRange(GetUserSessionQueryFilter(prm));
qry.OrderBy.AddRange(GetUserSessionSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserSession = new UserSession_Db(CoreDbInfo);
dbUserSession.PopulateFrom(dbDataReader);
userSessions.Add(CreateUserSession(dbUserSession));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userSessions;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserSessionQuery(List<ColumnDfn> columns, SaxUserSession.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSession), aliasUserSession);
// Add columns as defined in query list.
bool hasUserAccountCols = (columns.HasId(SaxUserSession.Column.User_EmailAddress) || columns.HasId(SaxUserSession.Column.User_DisplayName) || columns.HasId(SaxUserSession.Column.User_Title) || columns.HasId(SaxUserSession.Column.User_FirstName) || columns.HasId(SaxUserSession.Column.User_LastName));
if (columns.HasId(SaxUserSession.Column.UserAccountId) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSession_UserAccountId, aliasUserSession));
// Common properties.
if (columns.HasId(SaxUserSession.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSession_Flags, aliasUserSession));
if (columns.HasId(SaxUserSession.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSession_CreateOn, aliasUserSession));
if (columns.HasId(SaxUserSession.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSession_UpdateOn, aliasUserSession));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserSession_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserSession_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSession_UserAccountId, aliasUserSession));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSession_UserAccount), prefixUserSession_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserSessionQueryFilter(prm));
if (prm.UserAccountIdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserSessionSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,622 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Sport
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserSport userSport)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userSport.Id)),
new StringPair("UserAccountId",SysId.ToString(userSport.UserAccountId)),
new StringPair("SportId",SysId.ToString(userSport.SportId)),
new StringPair("Status",userSport.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserSport CreateUserSport(SysId userAccountId, SysId sportId)
{
ClearErrorState();
return new SaxUserSport_Dbas(CoreDatabase, null, userAccountId, sportId, 0);
}
private SaxUserSport_Dbas CreateUserSport(UserSport_Db dbUserSport)
{
ClearErrorState();
SaxUserSport_Dbas userSport = new SaxUserSport_Dbas(CoreDatabase, new SysId(dbUserSport._Id), new SysId(dbUserSport._UserAccountId), new SysId(dbUserSport._SportId), (ushort)dbUserSport._Flags);
PopulateFrom(dbUserSport, userSport);
return userSport;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserSport GetUserSport(SaxUserSport.Params prm)
{
ClearErrorState();
return GetUserSport(GetUserSportQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserSport GetUserSport(String filter)
{
ClearErrorState();
long count = GetUserSportCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserSport userSport = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserSport_Db dbUserSport = new UserSport_Db(CoreDbInfo);
dbUserSport.PopulateFrom(dbCommand, aliasUserSport, filter);
userSport = CreateUserSport(dbUserSport);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userSport;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserSportData(SaxUserSport.Data data, SaxUserSport.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserSportData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserSport(SaxUserSport userSport, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserSport";
ClearErrorState();
if (!IsValidUserSport(userSport)) return false;
if (SysId.IsValid(userSport.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserSport_Db dbUserSport = new UserSport_Db(CoreDbInfo);
PopulateTo(dbUserSport, userSport, dbUpdateInfo);
if (UserSport_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserSport._Id = CoreDatabase.GetNextIdFromTable("UserSport");
}
dbUserSport.ExecuteInsertCommand(dbCommand);
userSport.Id = new SysId(dbUserSport._Id);
userSport.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userSport).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserSport(SaxUserSport userSport, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserSport";
ClearErrorState();
if (!IsValidUserSport(userSport)) return false;
if (!SysId.IsValid(userSport.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userSport.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userSport).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserSport_Db dbUserSport = new UserSport_Db(CoreDbInfo);
dbUserSport.PopulateFrom(dbCommand, aliasUserSport, "Id=" + SysId.ToString(userSport.Id));
// ToDo SaxUpdateLogItemMonitor_UserSport updateLogMonitor = new SaxUpdateLogItemMonitor_UserSport(SessionContext, CreateUserSport(dbUserSport), dbUpdateInfo);
// Update item.
PopulateTo(dbUserSport, userSport, dbUpdateInfo);
dbUserSport.ExecuteUpdateCommand(dbCommand);
userSport.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userSport).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userSport);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserSportCanBeDeleted(SaxUserSport userSport)
{
ClearErrorState();
if (!base.UserSportCanBeDeleted(userSport)) return false;
return true;
}
public override bool DeleteUserSport(SaxUserSport userSport, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserSport";
ClearErrorState();
if (!UserSportCanBeDeleted(userSport)) return false;
// User Sports are logically deleted by changing the status.
userSport.Status = SaStatus.Deleted;
return UpdateUserSport(userSport, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserSport_Db dbUserSport = new UserSport_Db(CoreDbInfo);
dbUserSport.PopulateFrom(dbCommand, aliasUserSport, "Id=" + userSport.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport) + " WHERE Id=" + SysId.ToString(userSport.Id) + ";";
dbCommand.ExecuteNonQuery();
userSport.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userSport).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserSport_Db dbUserSport, SaxUserSport userSport, DbUpdateInfo dbUpdateInfo)
{
dbUserSport._Id = SysId.ToLong(userSport.Id);
dbUserSport._UserAccountId = SysId.ToInt(userSport.UserAccountId);
dbUserSport._SportId = SysId.ToInt(userSport.SportId);
dbUserSport._About = userSport.About;
dbUserSport._ContactsData = userSport.ContactsData;
dbUserSport._Participating = (short)userSport.Participating;
dbUserSport._Preparing = (short)userSport.Preparing;
dbUserSport._Officiating = (short)userSport.Officiating;
dbUserSport._UserSportData = userSport.UserSportData;
// Common.
dbUserSport._Notes = userSport.Notes;
dbUserSport._Status = SacsSystem.GetStatusCode(userSport.Status);
dbUserSport._Flags = (short)userSport.Flags;
if (!SysId.IsValid(userSport.Id))
{
dbUserSport._CreateOn = DateTime.Now;
dbUserSport._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserSport._CreateHost = dbUpdateInfo.Host;
}
dbUserSport._UpdateOn = DateTime.Now;
dbUserSport._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserSport._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserSport_Db dbUserSport, SaxUserSport userSport)
{
//userSport.Id = new SysId(dbUserSport._Id);
//userSport.UserAccountId = new SysId(dbUserSport._UserAccountId);
//userSport.SportId = new SysId(dbUserSport._SportId);
userSport.About = dbUserSport._About;
userSport.ContactsData = dbUserSport._ContactsData;
userSport.Participating = (Sax.SportParticipating)(dbUserSport._Participating ?? 0);
userSport.Preparing = (Sax.SportPreparing)(dbUserSport._Preparing ?? 0);
userSport.Officiating = (Sax.SportOfficiating)(dbUserSport._Officiating ?? 0);
userSport.UserSportData = dbUserSport._UserSportData;
// Common.
userSport.Notes = dbUserSport._Notes;
userSport.Status = SacsSystem.GetStatusForCode(dbUserSport._Status);
userSport.SetCreateStamp(dbUserSport._CreateOn, new SysId(dbUserSport._CreateBy), dbUserSport._CreateHost);
userSport.SetUpdateStamp(dbUserSport._UpdateOn, new SysId(dbUserSport._UpdateBy), dbUserSport._UpdateHost);
userSport.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserSport = "UsrSpt";
private static readonly String aliasUserSport_UserAccount = "UsrSpt_Usr";
private static readonly String prefixUserSport_UserAccount = "UsrSpt_Usr_";
private static readonly String aliasUserSport_Sport = "UsrSpt_Spt";
private static readonly String prefixUserSport_Sport = "UsrSpt_Spt_";
private void SetUserSportColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserSport)
alias = aliasUserSport;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserSportColumnDfn(SaxUserSport.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserSport.Column.Pos:
SetUserSportColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserSport.Column.Id:
SetUserSportColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserSport.Column.UserAccountId:
SetUserSportColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserSport.Column.User_EmailAddress:
SetUserSportColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSport_UserAccount, prefixUserSport_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserSport.Column.User_DisplayName:
SetUserSportColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserSport.Column.User_Title:
SetUserSportColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSport_UserAccount, prefixUserSport_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserSport.Column.User_FirstName:
SetUserSportColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSport_UserAccount, prefixUserSport_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserSport.Column.User_LastName:
SetUserSportColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSport_UserAccount, prefixUserSport_UserAccount);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Sport.
case SaxUserSport.Column.SportId:
SetUserSportColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.UserSport_SportId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserSport.Column.Sport_Name:
SetUserSportColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSport_Sport, prefixUserSport_Sport);
columnDfn.ReadOnly = true;
break;
// Participating.
case SaxUserSport.Column.SportParticipating:
SetUserSportColDfn(columnDfn, "Participating", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Participating, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserSport.Column.SportParticipating_Code:
SetUserSportColDfn(columnDfn, "Participating", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Participating, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SaxUserSport.Column.SportParticipating_Desc:
SetUserSportColDfn(columnDfn, "Participating", 120, SaxDbDfn_Core.ColumnIdx.UserSport_Participating, ColumnAlignment.Center, DataValue.DataType.String);
break;
// Preparing.
case SaxUserSport.Column.SportPreparing:
SetUserSportColDfn(columnDfn, "Preparing", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Preparing, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserSport.Column.SportPreparing_Code:
SetUserSportColDfn(columnDfn, "Preparing", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Preparing, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SaxUserSport.Column.SportPreparing_Desc:
SetUserSportColDfn(columnDfn, "Preparing", 120, SaxDbDfn_Core.ColumnIdx.UserSport_Preparing, ColumnAlignment.Center, DataValue.DataType.String);
break;
// Officiating.
case SaxUserSport.Column.SportOfficiating:
SetUserSportColDfn(columnDfn, "Officiating", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Officiating, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserSport.Column.SportOfficiating_Code:
SetUserSportColDfn(columnDfn, "Officiating", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Officiating, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SaxUserSport.Column.SportOfficiating_Desc:
SetUserSportColDfn(columnDfn, "Officiating", 120, SaxDbDfn_Core.ColumnIdx.UserSport_Officiating, ColumnAlignment.Center, DataValue.DataType.String);
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxUserSport.Column.Notes:
SetUserSportColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserSport_Notes);
break;
case SaxUserSport.Column.Flags:
SetUserSportColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserSport_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserSport.Column.Status:
SetUserSportColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Status, ColumnAlignment.Center);
break;
case SaxUserSport.Column.Status_Desc:
SetUserSportColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserSport_Status, ColumnAlignment.Center);
break;
case SaxUserSport.Column.Status_Ind:
SetUserSportColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserSport_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserSport.Column.CreateOn_Date:
SetUserSportColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserSport_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserSport.Column.UpdateOn_Date:
SetUserSportColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserSport_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserSportQueryFilter(SaxUserSport.Params prm)
{
List<String> filter = new List<String>();
// Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserSport) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserSport) + " NOT IN (" + idsExcluded + ")");
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserSport) + " IN (" + userAccountIdsIncluded + ")");
// Sports.
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, aliasUserSport) + " IN (" + sportIdsIncluded + ")");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Notes, aliasUserSport) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxUserSport.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Status, aliasUserSport) + GetUserSportStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetUserSportStatusCatFilterCondition(SaxUserSport.StatusCat statusCat)
{
if (statusCat == SaxUserSport.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxUserSport.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxUserSport.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserSport.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetUserSportSortColumns(SaxUserSport.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserSport columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserSport)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserSport);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserSport) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserSportCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport) + " As " + aliasUserSport, filter);
}
public override long GetUserSportCount(SaxUserSport.Params prm)
{
ClearErrorState();
return GetUserSportCount(GetUserSportQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserSport> GetUserSportList(SaxUserSport.Params prm)
{
ClearErrorState();
List<SaxUserSport> userSports = new List<SaxUserSport>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserSport);
UserSport_Db dbUserSport = new UserSport_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserSport.ExistingColumnNames);
qry.Filters.AddRange(GetUserSportQueryFilter(prm));
qry.OrderBy.AddRange(GetUserSportSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserSport = new UserSport_Db(CoreDbInfo);
dbUserSport.PopulateFrom(dbDataReader);
userSports.Add(CreateUserSport(dbUserSport));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userSports;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserSportQuery(List<ColumnDfn> columns, SaxUserSport.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserSport);
// Add columns as defined in query list.
if (columns.HasId(SaxUserSport.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserSport));
bool hasUserAccountCols = (columns.HasId(SaxUserSport.Column.User_EmailAddress) || columns.HasId(SaxUserSport.Column.User_DisplayName) || columns.HasId(SaxUserSport.Column.User_Title) || columns.HasId(SaxUserSport.Column.User_FirstName) || columns.HasId(SaxUserSport.Column.User_LastName));
if (columns.HasId(SaxUserSport.Column.UserAccountId) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserSport));
bool hasSportCols = (columns.HasId(SaxUserSport.Column.Sport_Name));
if (columns.HasId(SaxUserSport.Column.SportId) || hasSportCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, aliasUserSport));
if (columns.HasId(SaxUserSport.Column.SportParticipating) || columns.HasId(SaxUserSport.Column.SportParticipating_Code) || columns.HasId(SaxUserSport.Column.SportParticipating_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Participating, aliasUserSport));
if (columns.HasId(SaxUserSport.Column.SportPreparing) || columns.HasId(SaxUserSport.Column.SportPreparing_Code) || columns.HasId(SaxUserSport.Column.SportPreparing_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Preparing, aliasUserSport));
if (columns.HasId(SaxUserSport.Column.SportOfficiating) || columns.HasId(SaxUserSport.Column.SportOfficiating_Code) || columns.HasId(SaxUserSport.Column.SportOfficiating_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Officiating, aliasUserSport));
// Common properties.
if (columns.HasId(SaxUserSport.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Notes, aliasUserSport));
if (columns.HasId(SaxUserSport.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Flags, aliasUserSport));
if (columns.HasId(SaxUserSport.Column.Status) || columns.HasId(SaxUserSport.Column.Status_Desc) || columns.HasId(SaxUserSport.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Status, aliasUserSport));
if (columns.HasId(SaxUserSport.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_CreateOn, aliasUserSport));
if (columns.HasId(SaxUserSport.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UpdateOn, aliasUserSport));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserSport_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserSport_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserSport));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSport_UserAccount), prefixUserSport_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Sport.
if (hasSportCols)
{
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasUserSport_Sport);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasUserSport_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_SportId, aliasUserSport));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSport_Sport), prefixUserSport_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserSportQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserSportSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,680 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxAccountMgr_Dbas
{
//*******************************************************************
// Account Mgr - User Sport Experience
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserSportExperience userSportExperience)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userSportExperience.Id)),
new StringPair("UserSportId",SysId.ToString(userSportExperience.UserSportId)),
new StringPair("PeriodFrom",DateUtil.Format(userSportExperience.PeriodFrom, "d-MMM-yyyy")),
new StringPair("PeriodTo",DateUtil.Format(userSportExperience.PeriodTo, "d-MMM-yyyy")),
new StringPair("Status",userSportExperience.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserSportExperience CreateUserSportExperience(SysId userSportId)
{
ClearErrorState();
return new SaxUserSportExperience_Dbas(CoreDatabase, null, userSportId, 0);
}
private SaxUserSportExperience_Dbas CreateUserSportExperience(UserSportExperience_Db dbUserSportExperience)
{
ClearErrorState();
SaxUserSportExperience_Dbas userSportExperience = new SaxUserSportExperience_Dbas(CoreDatabase, new SysId(dbUserSportExperience._Id), new SysId(dbUserSportExperience._UserSportId), (ushort)dbUserSportExperience._Flags);
PopulateFrom(dbUserSportExperience, userSportExperience);
return userSportExperience;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserSportExperience GetUserSportExperience(SaxUserSportExperience.Params prm)
{
ClearErrorState();
return GetUserSportExperience(GetUserSportExperienceQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserSportExperience GetUserSportExperience(String filter)
{
ClearErrorState();
long count = GetUserSportExperienceCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserSportExperience userSportExperience = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo);
dbUserSportExperience.PopulateFrom(dbCommand, aliasUserSportExperience, filter);
userSportExperience = CreateUserSportExperience(dbUserSportExperience);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userSportExperience;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserSportExperienceData(SaxUserSportExperience.Data data, SaxUserSportExperience.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserSportExperienceData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertUserSportExperience";
ClearErrorState();
if (!IsValidUserSportExperience(userSportExperience)) return false;
if (SysId.IsValid(userSportExperience.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo);
PopulateTo(dbUserSportExperience, userSportExperience, dbUpdateInfo);
if (UserSportExperience_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserSportExperience._Id = CoreDatabase.GetNextIdFromTable("UserSportExperience");
}
dbUserSportExperience.ExecuteInsertCommand(dbCommand);
userSportExperience.Id = new SysId(dbUserSportExperience._Id);
userSportExperience.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateUserSportExperience";
ClearErrorState();
if (!IsValidUserSportExperience(userSportExperience)) return false;
if (!SysId.IsValid(userSportExperience.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userSportExperience.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo);
dbUserSportExperience.PopulateFrom(dbCommand, aliasUserSportExperience, "Id=" + SysId.ToString(userSportExperience.Id));
// ToDo SaxUpdateLogItemMonitor_UserSportExperience updateLogMonitor = new SaxUpdateLogItemMonitor_UserSportExperience(SessionContext, CreateUserSportExperience(dbUserSportExperience), dbUpdateInfo);
// Update item.
PopulateTo(dbUserSportExperience, userSportExperience, dbUpdateInfo);
dbUserSportExperience.ExecuteUpdateCommand(dbCommand);
userSportExperience.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userSportExperience);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserSportExperienceCanBeDeleted(SaxUserSportExperience userSportExperience)
{
ClearErrorState();
if (!base.UserSportExperienceCanBeDeleted(userSportExperience)) return false;
return true;
}
public override bool DeleteUserSportExperience(SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteUserSportExperience";
ClearErrorState();
if (!UserSportExperienceCanBeDeleted(userSportExperience)) return false;
// User Sports are logically deleted by changing the status.
userSportExperience.Status = SaStatus.Deleted;
return UpdateUserSportExperience(userSportExperience, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo);
dbUserSportExperience.PopulateFrom(dbCommand, aliasUserSportExperience, "Id=" + userSportExperience.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience) + " WHERE Id=" + SysId.ToString(userSportExperience.Id) + ";";
dbCommand.ExecuteNonQuery();
userSportExperience.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(userSportExperience).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserSportExperience_Db dbUserSportExperience, SaxUserSportExperience userSportExperience, DbUpdateInfo dbUpdateInfo)
{
dbUserSportExperience._Id = SysId.ToLong(userSportExperience.Id);
dbUserSportExperience._UserSportId = SysId.ToLong(userSportExperience.UserSportId);
dbUserSportExperience._PeriodFrom = userSportExperience.PeriodFrom;
dbUserSportExperience._PeriodTo = userSportExperience.PeriodTo;
dbUserSportExperience._OrganisationId = SysId.ToInt(userSportExperience.OrganisationId);
dbUserSportExperience._OrganisationName = StringUtil.EmptyOnNull(userSportExperience.OrganisationName);
dbUserSportExperience._Summary = StringUtil.EmptyOnNull(userSportExperience.Summary);
dbUserSportExperience._Team = StringUtil.EmptyOnNull(userSportExperience.Team);
dbUserSportExperience._League = StringUtil.EmptyOnNull(userSportExperience.League);
dbUserSportExperience._Speciality = StringUtil.EmptyOnNull(userSportExperience.Speciality);
dbUserSportExperience._SpecialitiesOther = userSportExperience.GetSpecialitiesOther().ToList().Concat(SaxUserSportExperience.SpecialitiesOtherDelim);
dbUserSportExperience._Awards = StringUtil.EmptyOnNull(userSportExperience.Awards);
dbUserSportExperience._RegionIdNation = SysId.ToInt(userSportExperience.RegionIdNation);
dbUserSportExperience._RegionIdProvince = SysId.ToInt(userSportExperience.RegionIdProvince);
dbUserSportExperience._UserSportExperienceData = StringUtil.EmptyOnNull(userSportExperience.UserSportExperienceData);
// Common.
dbUserSportExperience._Notes = userSportExperience.Notes;
dbUserSportExperience._Status = SacsSystem.GetStatusCode(userSportExperience.Status);
dbUserSportExperience._Flags = (short)userSportExperience.Flags;
if (!SysId.IsValid(userSportExperience.Id))
{
dbUserSportExperience._CreateOn = DateTime.Now;
dbUserSportExperience._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserSportExperience._CreateHost = dbUpdateInfo.Host;
}
dbUserSportExperience._UpdateOn = DateTime.Now;
dbUserSportExperience._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserSportExperience._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserSportExperience_Db dbUserSportExperience, SaxUserSportExperience userSportExperience)
{
//userSportExperience.Id = new SysId(dbUserSportExperience._Id);
//userSportExperience.UserSportId = new SysId(dbUserSportExperience._UserSportId);
userSportExperience.PeriodFrom = dbUserSportExperience._PeriodFrom;
userSportExperience.PeriodTo = dbUserSportExperience._PeriodTo;
userSportExperience.OrganisationId = new SysId(dbUserSportExperience._OrganisationId);
userSportExperience.OrganisationName = dbUserSportExperience._OrganisationName;
userSportExperience.Summary = dbUserSportExperience._Summary;
userSportExperience.Team = dbUserSportExperience._Team;
userSportExperience.League = dbUserSportExperience._League;
userSportExperience.Speciality = dbUserSportExperience._Speciality;
userSportExperience.SpecialitiesOther = StringListUtil.Split(dbUserSportExperience._SpecialitiesOther, SaxUserSportExperience.SpecialitiesOtherDelim);
userSportExperience.Awards = dbUserSportExperience._Awards;
userSportExperience.RegionIdNation = new SysId(dbUserSportExperience._RegionIdNation);
userSportExperience.UserSportExperienceData = dbUserSportExperience._UserSportExperienceData;
// Common.
userSportExperience.Notes = dbUserSportExperience._Notes;
userSportExperience.Status = SacsSystem.GetStatusForCode(dbUserSportExperience._Status);
userSportExperience.SetCreateStamp(dbUserSportExperience._CreateOn, new SysId(dbUserSportExperience._CreateBy), dbUserSportExperience._CreateHost);
userSportExperience.SetUpdateStamp(dbUserSportExperience._UpdateOn, new SysId(dbUserSportExperience._UpdateBy), dbUserSportExperience._UpdateHost);
userSportExperience.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserSportExperience = "SptExp";
private static readonly String aliasUserSportExperience_UserSport = "SptExp_UsrSpt";
private static readonly String prefixUserSportExperience_UserSport = "SptExp_UsrSpt_";
private static readonly String aliasUserSportExperience_Organisation = "SptExp_Org";
private static readonly String prefixUserSportExperience_Organisation = "SptExp_Org_";
private static readonly String aliasUserSportExperience_Region_Nation = "SptExp_Rgn_Nat";
private static readonly String prefixUserSportExperience_Region_Nation = "SptExp_Rgn_Nat_";
private static readonly String aliasUserSportExperience_Region_Province = "SptExp_Rgn_Pro";
private static readonly String prefixUserSportExperience_Region_Province = "SptExp_Rgn_Pro_";
private void SetUserSportExperienceColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserSportExperience)
alias = aliasUserSportExperience;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserSportExperienceColumnDfn(SaxUserSportExperience.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserSportExperience.Column.Pos:
SetUserSportExperienceColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserSportExperience.Column.Id:
SetUserSportExperienceColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User Sport.
case SaxUserSportExperience.Column.UserSportId:
SetUserSportExperienceColDfn(columnDfn, "User Sport Id", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_UserSportId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Sport.
case SaxUserSportExperience.Column.Sport_Id:
SetUserSportExperienceColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.UserSport_SportId, ColumnAlignment.Right, DataValue.DataType.Long, aliasUserSportExperience_UserSport, prefixUserSportExperience_UserSport);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Period.
case SaxUserSportExperience.Column.PeriodFrom:
SetUserSportExperienceColDfn(columnDfn, "From", 90, SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodFrom, ColumnAlignment.Center, DataValue.DataType.Date);
break;
case SaxUserSportExperience.Column.PeriodTo:
SetUserSportExperienceColDfn(columnDfn, "To", 90, SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodTo, ColumnAlignment.Center, DataValue.DataType.Date);
break;
//-------------------------------------------------------
// Organisation.
case SaxUserSportExperience.Column.OrganisationId:
SetUserSportExperienceColDfn(columnDfn, "Organisation Id", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SaxUserSportExperience.Column.OrganisationName:
SetUserSportExperienceColDfn(columnDfn, "Organisation Name", 160, SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName);
break;
case SaxUserSportExperience.Column.Organisation_Name:
SetUserSportExperienceColDfn(columnDfn, "Organisation", 160, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSportExperience_Organisation, prefixUserSportExperience_Organisation);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Summary.
case SaxUserSportExperience.Column.Summary:
SetUserSportExperienceColDfn(columnDfn, "Summary", 240, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary);
break;
// Team.
case SaxUserSportExperience.Column.Team:
SetUserSportExperienceColDfn(columnDfn, "Team", 120, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team);
break;
// League.
case SaxUserSportExperience.Column.League:
SetUserSportExperienceColDfn(columnDfn, "League", 120, SaxDbDfn_Core.ColumnIdx.UserSportExperience_League);
break;
// Speciality.
case SaxUserSportExperience.Column.Speciality:
SetUserSportExperienceColDfn(columnDfn, "Speciality", 120, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality);
break;
//-------------------------------------------------------
// Regions.
case SaxUserSportExperience.Column.RegionIdNation:
SetUserSportExperienceColDfn(columnDfn, "Region Id - Nation", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdNation, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SaxUserSportExperience.Column.Region_Nation_Name:
SetUserSportExperienceColDfn(columnDfn, "Nation", 140, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSportExperience_Region_Nation, prefixUserSportExperience_Region_Nation);
columnDfn.ReadOnly = true;
break;
case SaxUserSportExperience.Column.RegionIdProvince:
SetUserSportExperienceColDfn(columnDfn, "Region Id - Province", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdProvince, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SaxUserSportExperience.Column.Region_Province_Name:
SetUserSportExperienceColDfn(columnDfn, "Province", 140, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasUserSportExperience_Region_Province, prefixUserSportExperience_Region_Province);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxUserSportExperience.Column.Notes:
SetUserSportExperienceColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes);
break;
case SaxUserSportExperience.Column.Flags:
SetUserSportExperienceColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserSportExperience.Column.Status:
SetUserSportExperienceColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, ColumnAlignment.Center);
break;
case SaxUserSportExperience.Column.Status_Desc:
SetUserSportExperienceColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, ColumnAlignment.Center);
break;
case SaxUserSportExperience.Column.Status_Ind:
SetUserSportExperienceColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserSportExperience.Column.CreateOn_Date:
SetUserSportExperienceColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserSportExperience.Column.UpdateOn_Date:
SetUserSportExperienceColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserSportExperience_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserSportExperienceQueryFilter(SaxUserSportExperience.Params prm)
{
List<String> filter = new List<String>();
// Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience) + " NOT IN (" + idsExcluded + ")");
// User sports.
String userSportIdsIncluded = prm.UserSportIdsIncluded.Concat(",");
if (!userSportIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_UserSportId, aliasUserSportExperience) + " IN (" + userSportIdsIncluded + ")");
// Organisations.
String organisationIdsIncluded = prm.OrganisationIdsIncluded.Concat(",");
if (!organisationIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience) + " IN (" + organisationIdsIncluded + ")");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes, aliasUserSportExperience) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxUserSportExperience.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, aliasUserSportExperience) + GetUserSportExperienceStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetUserSportExperienceStatusCatFilterCondition(SaxUserSportExperience.StatusCat statusCat)
{
if (statusCat == SaxUserSportExperience.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxUserSportExperience.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxUserSportExperience.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserSportExperience.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetUserSportExperienceSortColumns(SaxUserSportExperience.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserSportExperience columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserSportExperience)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserSportExperience);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserSportExperienceCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience) + " As " + aliasUserSportExperience, filter);
}
public override long GetUserSportExperienceCount(SaxUserSportExperience.Params prm)
{
ClearErrorState();
return GetUserSportExperienceCount(GetUserSportExperienceQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserSportExperience> GetUserSportExperienceList(SaxUserSportExperience.Params prm)
{
ClearErrorState();
List<SaxUserSportExperience> userSportExperiences = new List<SaxUserSportExperience>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience), aliasUserSportExperience);
UserSportExperience_Db dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserSportExperience.ExistingColumnNames);
qry.Filters.AddRange(GetUserSportExperienceQueryFilter(prm));
qry.OrderBy.AddRange(GetUserSportExperienceSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserSportExperience = new UserSportExperience_Db(CoreDbInfo);
dbUserSportExperience.PopulateFrom(dbDataReader);
userSportExperiences.Add(CreateUserSportExperience(dbUserSportExperience));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userSportExperiences;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserSportExperienceQuery(List<ColumnDfn> columns, SaxUserSportExperience.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSportExperience), aliasUserSportExperience);
// Add columns as defined in query list.
if (columns.HasId(SaxUserSportExperience.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Id, aliasUserSportExperience));
bool hasUserSportCols = (columns.HasId(SaxUserSportExperience.Column.Sport_Id));
if (columns.HasId(SaxUserSportExperience.Column.UserSportId))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_UserSportId, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.PeriodFrom))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodFrom, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.PeriodTo))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_PeriodTo, aliasUserSportExperience));
bool hasOrganisationCols = (columns.HasId(SaxUserSportExperience.Column.Organisation_Name));
if (columns.HasId(SaxUserSportExperience.Column.OrganisationId) || hasOrganisationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.OrganisationName) || columns.HasId(SaxUserSportExperience.Column.Organisation_Name))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationName, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.Summary))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Summary, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.Team))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Team, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.League))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_League, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.Speciality))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Speciality, aliasUserSportExperience));
bool hasRegionNationCols = (columns.HasId(SaxUserSportExperience.Column.Region_Nation_Name));
if (columns.HasId(SaxUserSportExperience.Column.RegionIdNation) || hasRegionNationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdNation, aliasUserSportExperience));
bool hasRegionProvinceCols = (columns.HasId(SaxUserSportExperience.Column.Region_Province_Name));
if (columns.HasId(SaxUserSportExperience.Column.RegionIdProvince) || hasRegionProvinceCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_RegionIdProvince, aliasUserSportExperience));
// Common properties.
if (columns.HasId(SaxUserSportExperience.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Notes, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Flags, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.Status) || columns.HasId(SaxUserSportExperience.Column.Status_Desc) || columns.HasId(SaxUserSportExperience.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_Status, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_CreateOn, aliasUserSportExperience));
if (columns.HasId(SaxUserSportExperience.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_UpdateOn, aliasUserSportExperience));
//---------------------------------------------------------------------
// User Sport.
if (hasUserSportCols)
{
DbQueryJoin joinUserSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserSport), aliasUserSportExperience_UserSport);
joinUserSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserSportExperience_UserSport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_UserSportId, aliasUserSportExperience));
query.Joins.Add(joinUserSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserSport_SportId);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSportExperience_UserSport), prefixUserSportExperience_UserSport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Organisation.
if (hasOrganisationCols)
{
DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasUserSportExperience_Organisation);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasUserSportExperience_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience));
query.Joins.Add(joinOrganisation);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSportExperience_Organisation), prefixUserSportExperience_Organisation + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Region - Nation.
if (hasRegionNationCols)
{
DbQueryJoin joinRegionNation = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegionNation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserSportExperience_Region_Nation);
joinRegionNation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserSportExperience_Region_Nation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience));
query.Joins.Add(joinRegionNation);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSportExperience_Region_Nation), prefixUserSportExperience_Region_Nation + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Region - Province.
if (hasRegionProvinceCols)
{
DbQueryJoin joinRegionProvince = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegionProvince.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasUserSportExperience_Region_Province);
joinRegionProvince.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasUserSportExperience_Region_Province) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSportExperience_OrganisationId, aliasUserSportExperience));
query.Joins.Add(joinRegionProvince);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserSportExperience_Region_Province), prefixUserSportExperience_Region_Province + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserSportExperienceQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserSportExperienceSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
public partial class SaxAccountMgr_Dbas : SaxAccountMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SaxAccountMgr_Dbas(SaxSessionContext sessionContext, SaxInternals internals) :
base (sessionContext, internals)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,485 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxActivityMgr_Dbas
{
//*******************************************************************
// Activity Mgr - ActivityFeedback
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxActivityFeedback activityFeedback)
{
return new List<StringPair>()
{
new StringPair("ItemId",ItemId.ToString(activityFeedback.ItemId)),
new StringPair("ViewCount",activityFeedback.ViewCount.ToString()),
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxActivityFeedback CreateActivityFeedback(ItemId itemId)
{
ClearErrorState();
return new SaxActivityFeedback_Dbas(CoreDatabase, itemId);
}
private SaxActivityFeedback_Dbas CreateActivityFeedback(ActivityFeedback_Db dbActivityFeedback)
{
ClearErrorState();
ItemId itemId = new ItemId(dbActivityFeedback._ItemType, new SysId(dbActivityFeedback._ItemId));
SaxActivityFeedback_Dbas activityFeedback = new SaxActivityFeedback_Dbas(CoreDatabase, itemId);
PopulateFrom(dbActivityFeedback, activityFeedback);
return activityFeedback;
}
//-------------------------------------------------------------------
// Get item.
public override SaxActivityFeedback GetActivityFeedback(SaxActivityFeedback.Params prm)
{
ClearErrorState();
return GetActivityFeedback(GetActivityFeedbackQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxActivityFeedback GetActivityFeedback(String filter)
{
ClearErrorState();
long count = GetActivityFeedbackCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxActivityFeedback activityFeedback = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo);
dbActivityFeedback.PopulateFrom(dbCommand, aliasActivityFeedback, filter);
activityFeedback = CreateActivityFeedback(dbActivityFeedback);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return activityFeedback;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidActivityFeedbackData(SaxActivityFeedback.Data data, SaxActivityFeedback.ErrField errField)
{
ClearErrorState();
if (!base.IsValidActivityFeedbackData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertActivityFeedback(SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertActivityFeedback";
ClearErrorState();
if (!IsValidActivityFeedback(activityFeedback)) return false;
//if (SysId.IsValid(activityFeedback.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo);
PopulateTo(dbActivityFeedback, activityFeedback, dbUpdateInfo);
if (ActivityFeedback_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbActivityFeedback._Id = CoreDatabase.GetNextIdFromTable("ActivityFeedback");
}
dbActivityFeedback.ExecuteInsertCommand(dbCommand);
//activityFeedback.Id = new SysId(dbActivityFeedback._Id);
activityFeedback.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateActivityFeedback(SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateActivityFeedback";
ClearErrorState();
if (!IsValidActivityFeedback(activityFeedback)) return false;
//if (!SysId.IsValid(activityFeedback.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!activityFeedback.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo);
dbActivityFeedback.PopulateFrom(dbCommand, aliasActivityFeedback, GetActivityFeedbackQueryFilter(activityFeedback, aliasActivityFeedback).Concat(" AND ", "(", ")"));
// ToDo SaxUpdateLogItemMonitor_ActivityFeedback updateLogMonitor = new SaxUpdateLogItemMonitor_ActivityFeedback(SessionContext, CreateActivityFeedback(dbActivityFeedback), dbUpdateInfo);
// Update item.
PopulateTo(dbActivityFeedback, activityFeedback, dbUpdateInfo);
dbActivityFeedback.ExecuteUpdateCommand(dbCommand);
activityFeedback.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(activityFeedback);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool ActivityFeedbackCanBeDeleted(SaxActivityFeedback activityFeedback)
{
ClearErrorState();
if (!base.ActivityFeedbackCanBeDeleted(activityFeedback)) return false;
return true;
}
public override bool DeleteActivityFeedback(SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteActivityFeedback";
ClearErrorState();
if (!ActivityFeedbackCanBeDeleted(activityFeedback)) return false;
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo);
String filter = GetActivityFeedbackQueryFilter(activityFeedback, aliasActivityFeedback).Concat(" AND ", "(", ")");
dbActivityFeedback.PopulateFrom(dbCommand, aliasActivityFeedback, filter);
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE " + aliasActivityFeedback + " FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback) + " As " + aliasActivityFeedback + " WHERE " + filter + ";";
dbCommand.ExecuteNonQuery();
activityFeedback.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(activityFeedback).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(ActivityFeedback_Db dbActivityFeedback, SaxActivityFeedback activityFeedback, DbUpdateInfo dbUpdateInfo)
{
dbActivityFeedback._ItemType = activityFeedback.ItemId.Type;
dbActivityFeedback._ItemId = SysId.ToInt(activityFeedback.ItemId.Id);
dbActivityFeedback._ViewCount = activityFeedback.ViewCount;
dbActivityFeedback._FeedbackCount = activityFeedback.FeedbackCount;
dbActivityFeedback._FeedbackTotal = activityFeedback.FeedbackTotal;
dbActivityFeedback._FeedbackAverage = activityFeedback.FeedbackAverage;
if (!DateUtil.IsValid(dbActivityFeedback._CreateOn))
{
dbActivityFeedback._CreateOn = DateTime.Now;
}
dbActivityFeedback._UpdateOn = DateTime.Now;
}
private void PopulateFrom(ActivityFeedback_Db dbActivityFeedback, SaxActivityFeedback activityFeedback)
{
//activityFeedback.ItemId = new ItemId(dbActivityFeedback._ItemType, new SysId(dbActivityFeedback._ItemId);
activityFeedback.ViewCount = dbActivityFeedback._ViewCount;
activityFeedback.FeedbackCount = dbActivityFeedback._FeedbackCount;
activityFeedback.FeedbackTotal = dbActivityFeedback._FeedbackTotal;
activityFeedback.FeedbackAverage = dbActivityFeedback._FeedbackAverage;
activityFeedback.SetCreateStamp(dbActivityFeedback._CreateOn, null, null);
activityFeedback.SetUpdateStamp(dbActivityFeedback._UpdateOn, null, null);
activityFeedback.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
public static String aliasActivityFeedback { get; } = "ActFbk";
private void SetActivityFeedbackColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.ActivityFeedback)
alias = aliasActivityFeedback;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetActivityFeedbackColumnDfn(SaxActivityFeedback.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxActivityFeedback.Column.Pos:
SetActivityFeedbackColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
//-----------------------------------------------------------
// Item.
case SaxActivityFeedback.Column.ItemType:
SetActivityFeedbackColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityFeedback.Column.ItemType_Code:
SetActivityFeedbackColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxActivityFeedback.Column.ItemType_Desc:
SetActivityFeedbackColDfn(columnDfn, "Item type", 100, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxActivityFeedback.Column.ItemId:
SetActivityFeedbackColDfn(columnDfn, "Item #", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Feedback.
case SaxActivityFeedback.Column.ViewCount:
SetActivityFeedbackColDfn(columnDfn, "Views", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ViewCount, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityFeedback.Column.FeedbackCount:
SetActivityFeedbackColDfn(columnDfn, "Feedbacks", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackCount, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityFeedback.Column.FeedbackTotal:
SetActivityFeedbackColDfn(columnDfn, "Feedbacks", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackTotal, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityFeedback.Column.FeedbackAverage:
SetActivityFeedbackColDfn(columnDfn, "Feedbacks", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackAverage, ColumnAlignment.Center, DataValue.DataType.Double);
columnDfn.NumDecimals = 2;
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Common properties.
case SaxActivityFeedback.Column.CreateOn_Date:
SetActivityFeedbackColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxActivityFeedback.Column.UpdateOn_Date:
SetActivityFeedbackColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public List<string> GetActivityFeedbackQueryFilter(SaxActivityFeedback activityFeedback, String aliasActivityFeedback)
{
// NB Only the Ids need to be queried. Effective date is a property of the Ids.
List<String> filter = new List<String>();
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, aliasActivityFeedback) + "=" + activityFeedback.ItemId.Type);
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback) + "=" + SysId.ToInt(activityFeedback.ItemId.Id));
return filter;
}
public override List<string> GetActivityFeedbackQueryFilter(SaxActivityFeedback.Params prm)
{
List<String> filter = new List<String>();
String aliasActivityFeedback = SaxActivityMgr_Dbas.aliasActivityFeedback;
// Item Ids.
if (!prm.ItemIdsIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, aliasActivityFeedback) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
// Item sort columns.
public List<String> GetActivityFeedbackSortColumns(SaxActivityFeedback.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for ActivityFeedback columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ActivityFeedback)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasActivityFeedback);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, aliasActivityFeedback) + " ASC");
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetActivityFeedbackCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback) + " As " + aliasActivityFeedback, filter);
}
public override long GetActivityFeedbackCount(SaxActivityFeedback.Params prm)
{
ClearErrorState();
return GetActivityFeedbackCount(GetActivityFeedbackQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxActivityFeedback> GetActivityFeedbackList(SaxActivityFeedback.Params prm)
{
ClearErrorState();
List<SaxActivityFeedback> userActivitys = new List<SaxActivityFeedback>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback), aliasActivityFeedback);
ActivityFeedback_Db dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo);
qry.Columns.AddRange(dbActivityFeedback.ExistingColumnNames);
qry.Filters.AddRange(GetActivityFeedbackQueryFilter(prm));
qry.OrderBy.AddRange(GetActivityFeedbackSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbActivityFeedback = new ActivityFeedback_Db(CoreDbInfo);
dbActivityFeedback.PopulateFrom(dbDataReader);
userActivitys.Add(CreateActivityFeedback(dbActivityFeedback));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userActivitys;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteActivityFeedbackQuery(List<ColumnDfn> columns, SaxActivityFeedback.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback), aliasActivityFeedback);
// Add columns as defined in query list.
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, aliasActivityFeedback));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasActivityFeedback));
if (columns.HasId(SaxActivityFeedback.Column.ViewCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ViewCount, aliasActivityFeedback));
if (columns.HasId(SaxActivityFeedback.Column.FeedbackCount))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackCount, aliasActivityFeedback));
if (columns.HasId(SaxActivityFeedback.Column.FeedbackTotal))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackTotal, aliasActivityFeedback));
if (columns.HasId(SaxActivityFeedback.Column.FeedbackAverage))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackAverage, aliasActivityFeedback));
// Common properties.
if (columns.HasId(SaxActivityFeedback.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_CreateOn, aliasActivityFeedback));
if (columns.HasId(SaxActivityFeedback.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_UpdateOn, aliasActivityFeedback));
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetActivityFeedbackQueryFilter(prm));
if (prm.ItemIdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetActivityFeedbackSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,744 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxActivityMgr_Dbas
{
//*******************************************************************
// Activity Mgr - ActivityIndex
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxActivityIndex activityIndex)
{
return new List<StringPair>()
{
new StringPair("ItemId",ItemId.ToString(activityIndex.ItemId)),
new StringPair("Sport",SysId.ToString(activityIndex.SportId)),
new StringPair("Region",SysId.ToString(activityIndex.RegionId)),
new StringPair("Effective",DateUtil.Format(activityIndex.EffectiveOn, "d-MMM-yyyy")),
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxActivityIndex CreateActivityIndex(ItemId itemId, SysId sportId, SysId regionId)
{
ClearErrorState();
return new SaxActivityIndex_Dbas(CoreDatabase, itemId, sportId, regionId, 0);
}
private SaxActivityIndex_Dbas CreateActivityIndex(ActivityIndex_Db dbActivityIndex)
{
ClearErrorState();
ItemId itemId = new ItemId(dbActivityIndex._ItemType, new SysId(dbActivityIndex._ItemId));
SaxActivityIndex_Dbas activityIndex = new SaxActivityIndex_Dbas(CoreDatabase, itemId, new SysId(dbActivityIndex._SportId), new SysId(dbActivityIndex._RegionId), (UInt16)dbActivityIndex._Flags);
PopulateFrom(dbActivityIndex, activityIndex);
return activityIndex;
}
//-------------------------------------------------------------------
// Get item.
public override SaxActivityIndex GetActivityIndex(SaxActivityIndex.Params prm)
{
ClearErrorState();
return GetActivityIndex(GetActivityIndexQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxActivityIndex GetActivityIndex(String filter)
{
ClearErrorState();
long count = GetActivityIndexCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxActivityIndex activityIndex = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo);
dbActivityIndex.PopulateFrom(dbCommand, aliasActivityIndex, filter);
activityIndex = CreateActivityIndex(dbActivityIndex);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return activityIndex;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidActivityIndexData(SaxActivityIndex.Data data, SaxActivityIndex.ErrField errField)
{
ClearErrorState();
if (!base.IsValidActivityIndexData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertActivityIndex";
ClearErrorState();
if (!IsValidActivityIndex(activityIndex)) return false;
//if (SysId.IsValid(activityIndex.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo);
PopulateTo(dbActivityIndex, activityIndex, dbUpdateInfo);
if (ActivityIndex_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbActivityIndex._Id = CoreDatabase.GetNextIdFromTable("ActivityIndex");
}
dbActivityIndex.ExecuteInsertCommand(dbCommand);
//activityIndex.Id = new SysId(dbActivityIndex._Id);
activityIndex.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateActivityIndex";
ClearErrorState();
if (!IsValidActivityIndex(activityIndex)) return false;
//if (!SysId.IsValid(activityIndex.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!activityIndex.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo);
dbActivityIndex.PopulateFrom(dbCommand, aliasActivityIndex, GetActivityIndexQueryFilter(activityIndex, aliasActivityIndex).Concat(" AND ", "(", ")"));
// ToDo SaxUpdateLogItemMonitor_ActivityIndex updateLogMonitor = new SaxUpdateLogItemMonitor_ActivityIndex(SessionContext, CreateActivityIndex(dbActivityIndex), dbUpdateInfo);
// Update item.
PopulateTo(dbActivityIndex, activityIndex, dbUpdateInfo);
dbActivityIndex.ExecuteUpdateCommand(dbCommand);
activityIndex.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(activityIndex);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool ActivityIndexCanBeDeleted(SaxActivityIndex activityIndex)
{
ClearErrorState();
if (!base.ActivityIndexCanBeDeleted(activityIndex)) return false;
return true;
}
public override bool DeleteActivityIndex(SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteActivityIndex";
ClearErrorState();
if (!ActivityIndexCanBeDeleted(activityIndex)) return false;
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo);
String filter = GetActivityIndexQueryFilter(activityIndex, aliasActivityIndex).Concat(" AND ", "(", ")");
dbActivityIndex.PopulateFrom(dbCommand, aliasActivityIndex, filter);
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE " + aliasActivityIndex + " FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex) + " As " + aliasActivityIndex + " WHERE " + filter + ";";
dbCommand.ExecuteNonQuery();
activityIndex.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(activityIndex).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(ActivityIndex_Db dbActivityIndex, SaxActivityIndex activityIndex, DbUpdateInfo dbUpdateInfo)
{
dbActivityIndex._ItemType = activityIndex.ItemId.Type;
dbActivityIndex._ItemId = SysId.ToInt(activityIndex.ItemId.Id);
dbActivityIndex._SportId = SysId.ToInt(activityIndex.SportId);
dbActivityIndex._RegionId = SysId.ToInt(activityIndex.RegionId);
dbActivityIndex._UserAccountIdOwner = SysId.ToInt(activityIndex.UserAccountIdOwner);
dbActivityIndex._OrganisationIdOwner = SysId.ToInt(activityIndex.OrganisationIdOwner);
dbActivityIndex._EffectiveOn = activityIndex.EffectiveOn;
dbActivityIndex._ExpiresOn = activityIndex.ExpiresOn;
dbActivityIndex._Notes = activityIndex.Notes;
dbActivityIndex._Status = SacsSystem.GetStatusCode(activityIndex.Status);
dbActivityIndex._Flags = (short)activityIndex.Flags;
if (!DateUtil.IsValid(dbActivityIndex._CreateOn))
{
dbActivityIndex._CreateOn = DateTime.Now;
dbActivityIndex._CreateBy = dbUpdateInfo.UserId.ToInt();
dbActivityIndex._CreateHost = dbUpdateInfo.Host;
}
dbActivityIndex._UpdateOn = DateTime.Now;
dbActivityIndex._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbActivityIndex._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(ActivityIndex_Db dbActivityIndex, SaxActivityIndex activityIndex)
{
//activityIndex.ItemId = new ItemId(dbActivityIndex._ItemType, new SysId(dbActivityIndex._ItemId);
//activityIndex.SportId = new SysId(dbActivityIndex._SportId);
//activityIndex.RegionId = new SysId(dbActivityIndex._RegionId);
activityIndex.UserAccountIdOwner = new SysId(dbActivityIndex._UserAccountIdOwner ?? 0);
activityIndex.OrganisationIdOwner = new SysId(dbActivityIndex._OrganisationIdOwner ?? 0);
activityIndex.EffectiveOn = dbActivityIndex._EffectiveOn;
activityIndex.ExpiresOn = dbActivityIndex._ExpiresOn;
activityIndex.Notes = dbActivityIndex._Notes;
activityIndex.Status = SacsSystem.GetStatusForCode(dbActivityIndex._Status);
activityIndex.SetCreateStamp(dbActivityIndex._CreateOn, new SysId(dbActivityIndex._CreateBy), dbActivityIndex._CreateHost);
activityIndex.SetUpdateStamp(dbActivityIndex._UpdateOn, new SysId(dbActivityIndex._UpdateBy), dbActivityIndex._UpdateHost);
activityIndex.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
public static readonly String aliasActivityIndex = "ActIdx";
public static readonly String aliasActivityIndex_Organisation = "ActIdx_Org";
private static readonly String prefixActivityIndex_Organisation = aliasActivityIndex_Organisation + "_";
private static readonly String colActivityIndex_OrganisationOwner_LogoCount = "ActIdx_OrgOwn_LogoCount";
public static readonly String aliasActivityIndex_UserActivity = "ActIdx_UsrAct";
private static readonly String prefixActivityIndex_UserActivity = aliasActivityIndex_UserActivity + "_";
public static readonly String aliasActivityIndex_Article = "ActIdx_Art";
private static readonly String prefixActivityIndex_Article = aliasActivityIndex_Article + "_";
public static readonly String aliasActivityIndex_Opportunity = "ActIdx_OrgOpp";
private static readonly String prefixActivityIndex_Opportunity = aliasActivityIndex_Opportunity + "_";
public static readonly String aliasActivityIndex_Region = "ActIdx_Rgn";
private static readonly String prefixActivityIndex_Region = aliasActivityIndex_Region + "_";
public static readonly String aliasActivityIndex_Sport = "ActIdx_Spt";
private static readonly String prefixActivityIndex_Sport = aliasActivityIndex_Sport + "_";
private void SetActivityIndexColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.ActivityIndex)
alias = aliasActivityIndex;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetActivityIndexColumnDfn(SaxActivityIndex.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxActivityIndex.Column.Pos:
SetActivityIndexColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
//-----------------------------------------------------------
// Item.
case SaxActivityIndex.Column.ItemType:
SetActivityIndexColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.ItemType_Code:
SetActivityIndexColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.ItemType_Desc:
SetActivityIndexColDfn(columnDfn, "Item type", 100, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.ItemId:
SetActivityIndexColDfn(columnDfn, "Item #", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Organisation Owner.
case SaxActivityIndex.Column.OrganisationIdOwner:
SetActivityIndexColDfn(columnDfn, "Organisation #", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_OrganisationIdOwner, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.OrganisationOwner_Name:
SetActivityIndexColDfn(columnDfn, "Organisation", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Organisation, prefixActivityIndex_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.OrganisationOwner_LogoCount:
SetActivityIndexColDfn(columnDfn, "Organisation Logos", 100, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colActivityIndex_OrganisationOwner_LogoCount;
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// User Activity.
case SaxActivityIndex.Column.UserActivity_UserAccountId:
SetActivityIndexColDfn(columnDfn, "User #", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, ColumnAlignment.Center, DataValue.DataType.Long, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_ListedAtLast:
SetActivityIndexColDfn(columnDfn, "Last Listed", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_ViewedAtLast:
SetActivityIndexColDfn(columnDfn, "Last Viewed", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_Reaction:
SetActivityIndexColDfn(columnDfn, "Reaction", 60, SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, ColumnAlignment.Center, DataValue.DataType.Long, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UserActivity_ReactedAtLast:
SetActivityIndexColDfn(columnDfn, "Last Reacted", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime, aliasActivityIndex_UserActivity, prefixActivityIndex_UserActivity);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Article.
case SaxActivityIndex.Column.Article_Headline:
SetActivityIndexColDfn(columnDfn, "Headline", 160, SaxDbDfn_Core.ColumnIdx.Article_Headline, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Article, prefixActivityIndex_Article);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.Article_Summary:
SetActivityIndexColDfn(columnDfn, "Summary", 240, SaxDbDfn_Core.ColumnIdx.Article_Summary, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Article, prefixActivityIndex_Article);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Opportunity.
case SaxActivityIndex.Column.Opportunity_Position:
SetActivityIndexColDfn(columnDfn, "Position", 160, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Opportunity, prefixActivityIndex_Opportunity);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.Opportunity_Outline:
SetActivityIndexColDfn(columnDfn, "Outliner", 240, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Opportunity, prefixActivityIndex_Opportunity);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Sport.
case SaxActivityIndex.Column.SportId:
SetActivityIndexColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.Sport_Name:
SetActivityIndexColDfn(columnDfn, "Sport", 100, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Sport, prefixActivityIndex_Sport);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Region.
case SaxActivityIndex.Column.RegionId:
SetActivityIndexColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.Region_Name:
SetActivityIndexColDfn(columnDfn, "Region", 100, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasActivityIndex_Region, prefixActivityIndex_Region);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Properties.
case SaxActivityIndex.Column.EffectiveOn:
SetActivityIndexColDfn(columnDfn, "Effective", 90, SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.DateFormat = "d-MMM-yyyy";
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxActivityIndex.Column.Notes:
SetActivityIndexColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Notes);
break;
case SaxActivityIndex.Column.Flags:
SetActivityIndexColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxActivityIndex.Column.Status:
SetActivityIndexColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, ColumnAlignment.Center);
break;
case SaxActivityIndex.Column.Status_Desc:
SetActivityIndexColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, ColumnAlignment.Center);
break;
case SaxActivityIndex.Column.Status_Ind:
SetActivityIndexColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxActivityIndex.Column.CreateOn_Date:
SetActivityIndexColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxActivityIndex.Column.UpdateOn_Date:
SetActivityIndexColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ActivityIndex_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public List<string> GetActivityIndexQueryFilter(SaxActivityIndex activityIndex, String aliasActivityIndex)
{
// NB Only the Ids need to be queried. Effective date is a property of the Ids.
List<String> filter = new List<String>();
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + activityIndex.ItemId.Type);
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex) + "=" + SysId.ToInt(activityIndex.ItemId.Id));
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex) + " IN (" + activityIndex.SportId + ")");
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex) + " IN (" + activityIndex.RegionId + ")");
return filter;
}
public override List<string> GetActivityIndexQueryFilter(SaxActivityIndex.Params prm)
{
List<String> filter = new List<String>();
String aliasActivityIndex = StringUtil.OnEmpty(prm.Alias_ActivityIndex, SaxActivityMgr_Dbas.aliasActivityIndex);
// Item Ids.
if (!prm.ItemIdsIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
// Activities are applicable if match on eo fthe sport/region combinations or match one of the owners (user or organisation).
List<String> applicableFilter = new List<string>();
// Sport and Region Id combinations.
foreach (SaxActivityIndex.SportRegionIds sportRegionIds in prm.SportRegionIdsIncluded)
applicableFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex) + "=" + sportRegionIds.SportId.ToString() + " AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex) + "=" + sportRegionIds.RegionId.ToString());
// Owner - User Account and/or Organisation.
if (prm.UserAccountIdsOwnerIncluded.Exists(item => SysId.IsValid(item)))
applicableFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_UserAccountIdOwner, aliasActivityIndex) + " IN (" + prm.UserAccountIdsOwnerIncluded.Concat(",") + ")");
if (prm.OrganisationIdsOwnerIncluded.Exists(item => SysId.IsValid(item)))
applicableFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_OrganisationIdOwner, aliasActivityIndex) + " IN (" + prm.OrganisationIdsOwnerIncluded.Concat(",") + ")");
// Any one of the applicable filters can be matched.
if (!applicableFilter.IsEmpty())
filter.Add(applicableFilter.Concat(" OR ", "(", ")"));
// Effective period.
if (DateUtil.IsValid(prm.EffectiveFrom))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, aliasActivityIndex) + ">=" + DbQuery.FormatDateForCondition(prm.EffectiveFrom.Date));
if (DateUtil.IsValid(prm.EffectiveTo))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, aliasActivityIndex) + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.EffectiveTo.Date, 1)));
// Expiry.
if (DateUtil.IsValid(prm.NotExpiredOn))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ExpiresOn, aliasActivityIndex) + " Is Null Or " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ExpiresOn, aliasActivityIndex) + ">" + DbQuery.FormatDateForCondition(prm.NotExpiredOn.Date));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
// Item sort columns.
public List<String> GetActivityIndexSortColumns(SaxActivityIndex.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for ActivityIndex columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ActivityIndex)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasActivityIndex);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + " ASC");
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetActivityIndexCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex) + " As " + aliasActivityIndex, filter);
}
public override long GetActivityIndexCount(SaxActivityIndex.Params prm)
{
ClearErrorState();
return GetActivityIndexCount(GetActivityIndexQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxActivityIndex> GetActivityIndexList(SaxActivityIndex.Params prm)
{
ClearErrorState();
List<SaxActivityIndex> userActivitys = new List<SaxActivityIndex>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex), aliasActivityIndex);
ActivityIndex_Db dbActivityIndex = new ActivityIndex_Db(CoreDbInfo);
qry.Columns.AddRange(dbActivityIndex.ExistingColumnNames);
qry.Filters.AddRange(GetActivityIndexQueryFilter(prm));
qry.OrderBy.AddRange(GetActivityIndexSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbActivityIndex = new ActivityIndex_Db(CoreDbInfo);
dbActivityIndex.PopulateFrom(dbDataReader);
userActivitys.Add(CreateActivityIndex(dbActivityIndex));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userActivitys;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteActivityIndexQuery(List<ColumnDfn> columns, SaxActivityIndex.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityIndex), aliasActivityIndex);
// Add columns as defined in query list.
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_EffectiveOn, aliasActivityIndex));
if (columns.HasId(SaxActivityIndex.Column.OrganisationIdOwner))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_OrganisationIdOwner, aliasActivityIndex));
// Common properties.
if (columns.HasId(SaxActivityIndex.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_Notes, aliasActivityIndex));
if (columns.HasId(SaxActivityIndex.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_Flags, aliasActivityIndex));
if (columns.HasId(SaxActivityIndex.Column.Status) || columns.HasId(SaxActivityIndex.Column.Status_Desc) || columns.HasId(SaxActivityIndex.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_Status, aliasActivityIndex));
if (columns.HasId(SaxActivityIndex.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_CreateOn, aliasActivityIndex));
if (columns.HasId(SaxActivityIndex.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_UpdateOn, aliasActivityIndex));
//---------------------------------------------------------------------
// Organisation Owner.
if (columns.HasId(SaxActivityIndex.Column.OrganisationOwner_Name))
{
DbQueryJoin joinOrgOwner = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrgOwner.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasActivityIndex_Organisation);
joinOrgOwner.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasActivityIndex_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_OrganisationIdOwner, aliasActivityIndex));
query.Joins.Add(joinOrgOwner);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_Organisation), prefixActivityIndex_Organisation + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Organisation Owner Logo Image Count.
if (columns.HasId(SaxActivityIndex.Column.OrganisationOwner_LogoCount))
{
String aliasLogoCount = "aImg_Logo";
DbQuery queryLogoCount = new DbQuery(CoreDatabase.DbmsType);
queryLogoCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasLogoCount);
queryLogoCount.Columns.Add("Count(*)");
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasLogoCount) + "=" + (int)Sax.DataItemType.Organisation);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasLogoCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_OrganisationIdOwner, aliasActivityIndex));
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasLogoCount) + "=" + (int)Sax.ImageType.OrganisationLogo);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasLogoCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Construct sub-query.
query.Columns.Add("(" + queryLogoCount.BuildQuery() + ")", colActivityIndex_OrganisationOwner_LogoCount);
}
//---------------------------------------------------------------------
// User Activity.
if (columns.HasId(SaxActivityIndex.Column.UserActivity_UserAccountId) || columns.HasId(SaxActivityIndex.Column.UserActivity_ListedAtLast) || columns.HasId(SaxActivityIndex.Column.UserActivity_ViewedAtLast) || columns.HasId(SaxActivityIndex.Column.UserActivity_Reaction) || columns.HasId(SaxActivityIndex.Column.UserActivity_ReactedAtLast))
{
DbQueryJoin joinUserActivity = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserActivity.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity), aliasActivityIndex_UserActivity);
joinUserActivity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserActivityData, aliasActivityIndex_UserActivity) + "=" + prm.UserAccountId.ToString());
joinUserActivity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasActivityIndex_UserActivity) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex));
joinUserActivity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasActivityIndex_UserActivity) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex));
query.Joins.Add(joinUserActivity);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_UserActivity), prefixActivityIndex_UserActivity + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Article.
if (columns.HasId(SaxActivityIndex.Column.Article_Headline) || columns.HasId(SaxActivityIndex.Column.Article_Summary))
{
DbQueryJoin joinArticle = new DbQueryJoin(DbJoinType.LeftOuter);
joinArticle.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Article), aliasActivityIndex_Article);
joinArticle.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + ((int)Sax.DataItemType.Article).ToString());
joinArticle.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Id, aliasActivityIndex_Article) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex));
query.Joins.Add(joinArticle);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Article_Headline);
cols.Add(SaxDbDfn_Core.ColumnIdx.Article_Summary);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_Article), prefixActivityIndex_Article + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Opportunity.
if (columns.HasId(SaxActivityIndex.Column.Opportunity_Position) || columns.HasId(SaxActivityIndex.Column.Opportunity_Outline))
{
DbQueryJoin joinOpportunity = new DbQueryJoin(DbJoinType.LeftOuter);
joinOpportunity.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity), aliasActivityIndex_Opportunity);
joinOpportunity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemType, aliasActivityIndex) + "=" + ((int)Sax.DataItemType.OrganisationOpportunity).ToString());
joinOpportunity.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Id, aliasActivityIndex_Opportunity) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_ItemId, aliasActivityIndex));
query.Joins.Add(joinOpportunity);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position);
cols.Add(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_Opportunity), prefixActivityIndex_Opportunity + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Sport.
if (columns.HasId(SaxActivityIndex.Column.Sport_Name))
{
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasActivityIndex_Sport);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasActivityIndex_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_SportId, aliasActivityIndex));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_Sport), prefixActivityIndex_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Region.
if (columns.HasId(SaxActivityIndex.Column.Region_Name))
{
DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasActivityIndex_Region);
joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasActivityIndex_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityIndex_RegionId, aliasActivityIndex));
query.Joins.Add(joinRegion);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasActivityIndex_Region), prefixActivityIndex_Region + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetActivityIndexQueryFilter(prm));
if (prm.ItemIdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetActivityIndexSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,766 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxActivityMgr_Dbas
{
//*******************************************************************
// Activity Mgr - Article
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxArticle article)
{
return new List<StringPair>()
{
new StringPair("Id", SysId.ToString(article.Id)),
new StringPair("UserAccountIdAuthor", SysId.ToString(article.UserAccountIdAuthor)),
new StringPair("OrganisationId", SysId.ToString(article.OrganisationId)),
new StringPair("Headline", StringUtil.Left(article.Headline,32)),
new StringPair("Status", article.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxArticle CreateArticle(SysId userAccountIdAuthor, SysId organisationId)
{
ClearErrorState();
return new SaxArticle_Dbas(CoreDatabase, null, userAccountIdAuthor, organisationId, 0);
}
private SaxArticle_Dbas CreateArticle(Article_Db dbArticle)
{
ClearErrorState();
SaxArticle_Dbas article = new SaxArticle_Dbas(CoreDatabase, new SysId(dbArticle._Id), new SysId(dbArticle._UserAccountIdAuthor), new SysId(dbArticle._OrganisationId), (UInt16)dbArticle._Flags);
PopulateFrom(dbArticle, article);
return article;
}
//-------------------------------------------------------------------
// Get item.
public override SaxArticle GetArticle(SaxArticle.Params prm)
{
ClearErrorState();
return GetArticle(GetArticleQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxArticle GetArticle(String filter)
{
ClearErrorState();
long count = GetArticleCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxArticle article = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Article_Db dbArticle = new Article_Db(CoreDbInfo);
dbArticle.PopulateFrom(dbCommand, aliasArticle, filter);
article = CreateArticle(dbArticle);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return article;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidArticleData(SaxArticle.Data data, SaxArticle.ErrField errField)
{
ClearErrorState();
if (!base.IsValidArticleData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertArticle";
ClearErrorState();
if (!IsValidArticle(article)) return false;
if (SysId.IsValid(article.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Article_Db dbArticle = new Article_Db(CoreDbInfo);
PopulateTo(dbArticle, article, dbUpdateInfo);
if (Article_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbArticle._Id = CoreDatabase.GetNextIdFromTable("Article");
}
dbArticle.ExecuteInsertCommand(dbCommand);
article.Id = new SysId(dbArticle._Id);
article.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(article).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateArticle";
ClearErrorState();
if (!IsValidArticle(article)) return false;
if (!SysId.IsValid(article.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!article.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(article).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Article_Db dbArticle = new Article_Db(CoreDbInfo);
dbArticle.PopulateFrom(dbCommand, aliasArticle, "Id=" + SysId.ToString(article.Id));
// ToDo SaxUpdateLogItemMonitor_Article updateLogMonitor = new SaxUpdateLogItemMonitor_Article(SessionContext, CreateArticle(dbArticle), dbUpdateInfo);
// Update item.
PopulateTo(dbArticle, article, dbUpdateInfo);
dbArticle.ExecuteUpdateCommand(dbCommand);
article.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(article).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(article);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool ArticleCanBeDeleted(SaxArticle article)
{
ClearErrorState();
if (!base.ArticleCanBeDeleted(article)) return false;
return true;
}
public override bool DeleteArticle(SaxArticle article, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteArticle";
ClearErrorState();
if (!ArticleCanBeDeleted(article)) return false;
// Articles are logically deleted by changing the status.
article.Status = SaStatus.Deleted;
return UpdateArticle(article, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Article_Db dbArticle = new Article_Db(CoreDbInfo);
dbArticle.PopulateFrom(dbCommand, aliasArticle, "Id=" + article.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Article) + " WHERE Id=" + SysId.ToString(article.Id) + ";";
dbCommand.ExecuteNonQuery();
article.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(article).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Article_Db dbArticle, SaxArticle article, DbUpdateInfo dbUpdateInfo)
{
dbArticle._Id = SysId.ToInt(article.Id);
dbArticle._UserAccountIdAuthor = SysId.ToInt(article.UserAccountIdAuthor);
dbArticle._OrganisationId = SysId.ToInt(article.OrganisationId);
dbArticle._SportIdPrimary = SysId.ToInt(article.SportIdPrimary);
dbArticle._RegionIdPrimary = SysId.ToInt(article.RegionIdPrimary);
dbArticle._Headline = article.Headline;
dbArticle._Summary = article.Summary;
dbArticle._ItemImageIdThumbnail = SysId.ToInt(article.ItemImageIdThumbnail);
dbArticle._BodyData = article.BodyData;
dbArticle._PublishedAt = article.PublishedAt;
dbArticle._Notes = article.Notes;
dbArticle._Status = SacsSystem.GetStatusCode(article.Status);
dbArticle._Flags = (short)article.Flags;
if (!SysId.IsValid(article.Id))
{
dbArticle._CreateOn = DateTime.Now;
dbArticle._CreateBy = dbUpdateInfo.UserId.ToInt();
dbArticle._CreateHost = dbUpdateInfo.Host;
}
dbArticle._UpdateOn = DateTime.Now;
dbArticle._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbArticle._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Article_Db dbArticle, SaxArticle article)
{
//article.Id = new SysId(dbArticle._Id);
//article.UserAccountIdAuthor = new SysId(dbArticle._UserAccountIdAuthor);
//article.OrganisationId = new SysId(dbArticle._OrganisationId);
article.SportIdPrimary = new SysId(dbArticle._SportIdPrimary);
article.RegionIdPrimary = new SysId(dbArticle._RegionIdPrimary);
article.Headline = dbArticle._Headline;
article.Summary = dbArticle._Summary;
article.ItemImageIdThumbnail = new SysId(dbArticle._ItemImageIdThumbnail ?? 0);
article.BodyData = dbArticle._BodyData;
article.PublishedAt = dbArticle._PublishedAt;
article.Notes = dbArticle._Notes;
article.Status = SacsSystem.GetStatusForCode(dbArticle._Status);
article.SetCreateStamp(dbArticle._CreateOn, new SysId(dbArticle._CreateBy), dbArticle._CreateHost);
article.SetUpdateStamp(dbArticle._UpdateOn, new SysId(dbArticle._UpdateBy), dbArticle._UpdateHost);
article.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasArticle = "Art";
private static readonly String aliasArticle_Author = "Art_Auth";
private static readonly String prefixArticle_Author = aliasArticle_Author + "_";
private static readonly String aliasArticle_Organisation = "Art_Org";
private static readonly String prefixArticle_Organisation = aliasArticle_Organisation + "_";
private static readonly String colArticle_OrganisationOwner_LogoCount = "Art_Org_LogoCount";
private static readonly String aliasArticle_Sport = "Art_Spt";
private static readonly String prefixArticle_Sport = aliasArticle_Sport + "_";
private static readonly String aliasArticle_Region = "Art_Rgn";
private static readonly String prefixArticle_Region = aliasArticle_Region + "_";
private static readonly String aliasArticle_Feedback = "Art_Fbk";
private static readonly String prefixArticle_Feedback = aliasArticle_Feedback + "_";
private void SetArticleColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.Article)
alias = aliasArticle;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetArticleColumnDfn(SaxArticle.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxArticle.Column.Pos:
SetArticleColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxArticle.Column.Id:
SetArticleColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.Article_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Organisation.
case SaxArticle.Column.OrganisationId:
SetArticleColDfn(columnDfn, "Organisation Id", 80, SaxDbDfn_Core.ColumnIdx.Article_OrganisationId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Organisation_Name:
SetArticleColDfn(columnDfn, "Organisation", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasArticle_Organisation, prefixArticle_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Organisation_LogoCount:
SetActivityIndexColDfn(columnDfn, "Organisation Logos", 100, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colArticle_OrganisationOwner_LogoCount;
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Author.
case SaxArticle.Column.UserAccountIdAuthor:
SetArticleColDfn(columnDfn, "Author Id", 80, SaxDbDfn_Core.ColumnIdx.Article_UserAccountIdAuthor, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Author_DisplayName:
SetArticleColDfn(columnDfn, "Author", 120, SaxDbDfn_Core.ColumnIdx.Unknown);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Author_Title:
SetArticleColDfn(columnDfn, "Author title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasArticle_Author, prefixArticle_Author);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Author_FirstName:
SetArticleColDfn(columnDfn, "Author first name", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasArticle_Author, prefixArticle_Author);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Author_LastName:
SetArticleColDfn(columnDfn, "Author last name", 100, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasArticle_Author, prefixArticle_Author);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Sport.
case SaxArticle.Column.SportIdPrimary:
SetArticleColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.Article_SportIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Sport_Name:
SetArticleColDfn(columnDfn, "Sport", 100, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasArticle_Sport, prefixArticle_Sport);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Region.
case SaxArticle.Column.RegionIdPrimary:
SetArticleColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.Article_RegionIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Region_Name:
SetArticleColDfn(columnDfn, "Region", 100, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasArticle_Region, prefixArticle_Region);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Article.
case SaxArticle.Column.Headline:
SetArticleColDfn(columnDfn, "Headline", 200, SaxDbDfn_Core.ColumnIdx.Article_Headline);
break;
case SaxArticle.Column.Summary:
SetArticleColDfn(columnDfn, "Summary", 200, SaxDbDfn_Core.ColumnIdx.Article_Summary);
break;
case SaxArticle.Column.ItemImageIdThumbnail:
SetArticleColDfn(columnDfn, "Thumbnail", 80, SaxDbDfn_Core.ColumnIdx.Article_ItemImageIdThumbnail, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxArticle.Column.PublishedAt_Date:
SetArticleColDfn(columnDfn, "Published", 80, SaxDbDfn_Core.ColumnIdx.Article_PublishedAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.PublishedAt_DateTime:
SetArticleColDfn(columnDfn, "Published", 100, SaxDbDfn_Core.ColumnIdx.Article_PublishedAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Feedback.
case SaxArticle.Column.Feedback_ViewCount:
SetArticleColDfn(columnDfn, "Views", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ViewCount, ColumnAlignment.Center, DataValue.DataType.Long, aliasActivityFeedback, prefixArticle_Feedback);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Feedback_FeedbackCount:
SetArticleColDfn(columnDfn, "Feedbacks", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackCount, ColumnAlignment.Center, DataValue.DataType.Long, aliasActivityFeedback, prefixArticle_Feedback);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Feedback_FeedbackTotal:
SetArticleColDfn(columnDfn, "Feedback total", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackTotal, ColumnAlignment.Center, DataValue.DataType.Long, aliasActivityFeedback, prefixArticle_Feedback);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.Feedback_FeedbackAverage:
SetArticleColDfn(columnDfn, "Feedback", 80, SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackAverage, ColumnAlignment.Center, DataValue.DataType.Double, aliasActivityFeedback, prefixArticle_Feedback);
columnDfn.ReadOnly = true;
columnDfn.NumDecimals = 2;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxArticle.Column.Notes:
SetArticleColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.Article_Notes);
break;
case SaxArticle.Column.Flags:
SetArticleColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.Article_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxArticle.Column.Status:
SetArticleColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Article_Status, ColumnAlignment.Center);
break;
case SaxArticle.Column.Status_Desc:
SetArticleColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.Article_Status, ColumnAlignment.Center);
break;
case SaxArticle.Column.Status_Ind:
SetArticleColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Article_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxArticle.Column.CreateOn_Date:
SetArticleColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.Article_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxArticle.Column.UpdateOn_Date:
SetArticleColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.Article_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetArticleQueryFilter(SaxArticle.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Id, aliasArticle) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Id, aliasArticle) + " NOT IN (" + idsExcluded + ")");
// Author User Account.
String userAccountIdsIncluded = prm.UserAccountIdsAuthorIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_UserAccountIdAuthor, aliasArticle) + " IN (" + userAccountIdsIncluded + ")");
// Organisations.
String organisationIdsIncluded = prm.OrganisationIdsIncluded.Concat(",");
if (!organisationIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_OrganisationId, aliasArticle) + " IN (" + organisationIdsIncluded + ")");
else if (prm.ExcludeOrganisationArticles)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_OrganisationId, aliasArticle) + "=0 Or " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_OrganisationId, aliasArticle) + " Is Null");
// Sport Ids.
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_SportIdPrimary, aliasArticle) + " IN (" + sportIdsIncluded + ")");
// Region Ids.
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
if (!regionIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_RegionIdPrimary, aliasArticle) + " IN (" + regionIdsIncluded + ")");
// Headline.
if (!StringUtil.IsEmpty(prm.HeadlinePartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Headline, aliasArticle) + " Like '%" + DbQuery.FormatForLike(prm.HeadlinePartial, true) + "%'");
// Summary.
if (!StringUtil.IsEmpty(prm.SummaryPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Summary, aliasArticle) + " Like '%" + DbQuery.FormatForLike(prm.SummaryPartial, true) + "%'");
// Article.
if (!StringUtil.IsEmpty(prm.ArticleFilter))
{
// Split filter into words.
List<String> filterWords = prm.ArticleFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> articleFilter = new List<String>();
articleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Headline, aliasArticle) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
articleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Summary, aliasArticle) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
filter.Add(articleFilter.Concat(" OR ", "(", ")"));
}
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Notes, aliasArticle) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxArticle.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Status, aliasArticle) + GetArticleStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetArticleStatusCatFilterCondition(SaxArticle.StatusCat statusCat)
{
if (statusCat == SaxArticle.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxArticle.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxArticle.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxArticle.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetArticleSortColumns(SaxArticle.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for Article columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.Article)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasArticle);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Id, aliasArticle) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetArticleCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Article) + " As " + aliasArticle, filter);
}
public override long GetArticleCount(SaxArticle.Params prm)
{
ClearErrorState();
return GetArticleCount(GetArticleQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxArticle> GetArticleList(SaxArticle.Params prm)
{
ClearErrorState();
List<SaxArticle> userActivitys = new List<SaxArticle>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Article), aliasArticle);
Article_Db dbArticle = new Article_Db(CoreDbInfo);
qry.Columns.AddRange(dbArticle.ExistingColumnNames);
qry.Filters.AddRange(GetArticleQueryFilter(prm));
qry.OrderBy.AddRange(GetArticleSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbArticle = new Article_Db(CoreDbInfo);
dbArticle.PopulateFrom(dbDataReader);
userActivitys.Add(CreateArticle(dbArticle));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userActivitys;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteArticleQuery(List<ColumnDfn> columns, SaxArticle.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Article), aliasArticle);
// Add columns as defined in query list.
if (columns.HasId(SaxArticle.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Id, aliasArticle));
bool hasUserAccountCols = (columns.HasId(SaxArticle.Column.Author_DisplayName) || columns.HasId(SaxArticle.Column.Author_Title) || columns.HasId(SaxArticle.Column.Author_FirstName) || columns.HasId(SaxArticle.Column.Author_LastName));
if (columns.HasId(SaxArticle.Column.UserAccountIdAuthor) || hasUserAccountCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_UserAccountIdAuthor, aliasArticle));
bool hasOrganisationCols = (columns.HasId(SaxArticle.Column.Organisation_Name));
if (columns.HasId(SaxArticle.Column.OrganisationId) || hasOrganisationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_OrganisationId, aliasArticle));
bool hasSportCols = (columns.HasId(SaxArticle.Column.Sport_Name));
if (columns.HasId(SaxArticle.Column.SportIdPrimary) || hasSportCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_SportIdPrimary, aliasArticle));
bool hasRegionCols = (columns.HasId(SaxArticle.Column.Region_Name));
if (columns.HasId(SaxArticle.Column.RegionIdPrimary) || hasRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_RegionIdPrimary, aliasArticle));
if (columns.HasId(SaxArticle.Column.Headline))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Headline, aliasArticle));
if (columns.HasId(SaxArticle.Column.Summary))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Summary, aliasArticle));
if (columns.HasId(SaxArticle.Column.ItemImageIdThumbnail))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_ItemImageIdThumbnail, aliasArticle));
if (columns.HasId(SaxArticle.Column.PublishedAt_Date) || columns.HasId(SaxArticle.Column.PublishedAt_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_PublishedAt, aliasArticle));
// Common properties.
if (columns.HasId(SaxArticle.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Notes, aliasArticle));
if (columns.HasId(SaxArticle.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Flags, aliasArticle));
if (columns.HasId(SaxArticle.Column.Status) || columns.HasId(SaxArticle.Column.Status_Desc) || columns.HasId(SaxArticle.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Status, aliasArticle));
if (columns.HasId(SaxArticle.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_CreateOn, aliasArticle));
if (columns.HasId(SaxArticle.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_UpdateOn, aliasArticle));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasArticle_Author);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasArticle_Author) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_UserAccountIdAuthor, aliasArticle));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasArticle_Author), prefixArticle_Author + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Organisation.
if (hasOrganisationCols)
{
DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasArticle_Organisation);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasArticle_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_OrganisationId, aliasArticle));
query.Joins.Add(joinOrganisation);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasArticle_Organisation), prefixArticle_Organisation + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Organisation Logo Image Count.
if (columns.HasId(SaxArticle.Column.Organisation_LogoCount))
{
String aliasLogoCount = "aImg_Logo";
DbQuery queryLogoCount = new DbQuery(CoreDatabase.DbmsType);
queryLogoCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasLogoCount);
queryLogoCount.Columns.Add("Count(*)");
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasLogoCount) + "=" + (int)Sax.DataItemType.Organisation);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasLogoCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_OrganisationId, aliasArticle));
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasLogoCount) + "=" + (int)Sax.ImageType.OrganisationLogo);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasLogoCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Construct sub-query.
query.Columns.Add("(" + queryLogoCount.BuildQuery() + ")", colArticle_OrganisationOwner_LogoCount);
}
//---------------------------------------------------------------------
// Primary Sport.
if (hasSportCols)
{
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasArticle_Sport);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasArticle_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_SportIdPrimary, aliasArticle));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasArticle_Sport), prefixArticle_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Primary Region.
if (hasRegionCols)
{
DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasArticle_Region);
joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasArticle_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_RegionIdPrimary, aliasArticle));
query.Joins.Add(joinRegion);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasArticle_Region), prefixArticle_Region + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Feedback.
if (columns.HasId(SaxArticle.Column.Feedback_ViewCount) || columns.HasId(SaxArticle.Column.Feedback_FeedbackCount) || columns.HasId(SaxArticle.Column.Feedback_FeedbackTotal) || columns.HasId(SaxArticle.Column.Feedback_FeedbackAverage))
{
DbQueryJoin joinFeedback = new DbQueryJoin(DbJoinType.LeftOuter);
joinFeedback.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ActivityFeedback), aliasArticle_Feedback);
joinFeedback.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemType, aliasArticle_Feedback) + "=" + ((int)Sax.DataItemType.Article).ToString());
joinFeedback.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ItemId, aliasArticle_Feedback) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Article_Id, aliasArticle));
query.Joins.Add(joinFeedback);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_ViewCount);
cols.Add(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackCount);
cols.Add(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackTotal);
cols.Add(SaxDbDfn_Core.ColumnIdx.ActivityFeedback_FeedbackAverage);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasArticle_Feedback), prefixArticle_Feedback + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetArticleQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetArticleSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,745 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxActivityMgr_Dbas
{
//*******************************************************************
// Activity Mgr - Organisation Event
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxOrganisationEvent organisationEvent)
{
return new List<StringPair>()
{
new StringPair("Id", SysId.ToString(organisationEvent.Id)),
new StringPair("OrganisationId", SysId.ToString(organisationEvent.OrganisationId)),
new StringPair("Event at", DateUtil.Format(organisationEvent.EventAt, "d-MMM-yyyy HH:mm")),
new StringPair("Event type", EventTypeCodes.GetDescForType(organisationEvent.EventType)),
new StringPair("Status", organisationEvent.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxOrganisationEvent CreateOrganisationEvent(SysId userAccountIdJournalist)
{
ClearErrorState();
return new SaxOrganisationEvent_Dbas(CoreDatabase, null, userAccountIdJournalist, 0);
}
private SaxOrganisationEvent_Dbas CreateOrganisationEvent(OrganisationEvent_Db dbOrganisationEvent)
{
ClearErrorState();
SaxOrganisationEvent_Dbas organisationEvent = new SaxOrganisationEvent_Dbas(CoreDatabase, new SysId(dbOrganisationEvent._Id), new SysId(dbOrganisationEvent._OrganisationId), (UInt16)dbOrganisationEvent._Flags);
PopulateFrom(dbOrganisationEvent, organisationEvent);
return organisationEvent;
}
//-------------------------------------------------------------------
// Get item.
public override SaxOrganisationEvent GetOrganisationEvent(SaxOrganisationEvent.Params prm)
{
ClearErrorState();
return GetOrganisationEvent(GetOrganisationEventQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxOrganisationEvent GetOrganisationEvent(String filter)
{
ClearErrorState();
long count = GetOrganisationEventCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxOrganisationEvent organisationEvent = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
OrganisationEvent_Db dbOrganisationEvent = new OrganisationEvent_Db(CoreDbInfo);
dbOrganisationEvent.PopulateFrom(dbCommand, aliasOrganisationEvent, filter);
organisationEvent = CreateOrganisationEvent(dbOrganisationEvent);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return organisationEvent;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidOrganisationEventData(SaxOrganisationEvent.Data data, SaxOrganisationEvent.ErrField errField)
{
ClearErrorState();
if (!base.IsValidOrganisationEventData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertOrganisationEvent(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertOrganisationEvent";
ClearErrorState();
if (!IsValidOrganisationEvent(organisationEvent)) return false;
if (SysId.IsValid(organisationEvent.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
OrganisationEvent_Db dbOrganisationEvent = new OrganisationEvent_Db(CoreDbInfo);
PopulateTo(dbOrganisationEvent, organisationEvent, dbUpdateInfo);
if (OrganisationEvent_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbOrganisationEvent._Id = CoreDatabase.GetNextIdFromTable("OrganisationEvent");
}
dbOrganisationEvent.ExecuteInsertCommand(dbCommand);
organisationEvent.Id = new SysId(dbOrganisationEvent._Id);
organisationEvent.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(organisationEvent).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateOrganisationEvent(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateOrganisationEvent";
ClearErrorState();
if (!IsValidOrganisationEvent(organisationEvent)) return false;
if (!SysId.IsValid(organisationEvent.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!organisationEvent.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(organisationEvent).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
OrganisationEvent_Db dbOrganisationEvent = new OrganisationEvent_Db(CoreDbInfo);
dbOrganisationEvent.PopulateFrom(dbCommand, aliasOrganisationEvent, "Id=" + SysId.ToString(organisationEvent.Id));
// ToDo SaxUpdateLogItemMonitor_OrganisationEvent updateLogMonitor = new SaxUpdateLogItemMonitor_OrganisationEvent(SessionContext, CreateOrganisationEvent(dbOrganisationEvent), dbUpdateInfo);
// Update item.
PopulateTo(dbOrganisationEvent, organisationEvent, dbUpdateInfo);
dbOrganisationEvent.ExecuteUpdateCommand(dbCommand);
organisationEvent.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(organisationEvent).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(organisationEvent);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool OrganisationEventCanBeDeleted(SaxOrganisationEvent organisationEvent)
{
ClearErrorState();
if (!base.OrganisationEventCanBeDeleted(organisationEvent)) return false;
return true;
}
public override bool DeleteOrganisationEvent(SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteOrganisationEvent";
ClearErrorState();
if (!OrganisationEventCanBeDeleted(organisationEvent)) return false;
// Organisation Events are logically deleted by changing the status.
organisationEvent.Status = SaStatus.Deleted;
return UpdateOrganisationEvent(organisationEvent, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
OrganisationEvent_Db dbOrganisationEvent = new OrganisationEvent_Db(CoreDbInfo);
dbOrganisationEvent.PopulateFrom(dbCommand, aliasOrganisationEvent, "Id=" + organisationEvent.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationEvent) + " WHERE Id=" + SysId.ToString(organisationEvent.Id) + ";";
dbCommand.ExecuteNonQuery();
organisationEvent.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(organisationEvent).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(OrganisationEvent_Db dbOrganisationEvent, SaxOrganisationEvent organisationEvent, DbUpdateInfo dbUpdateInfo)
{
dbOrganisationEvent._Id = SysId.ToInt(organisationEvent.Id);
dbOrganisationEvent._OrganisationId = SysId.ToInt(organisationEvent.OrganisationId);
dbOrganisationEvent._SportIdPrimary = SysId.ToInt(organisationEvent.SportIdPrimary);
dbOrganisationEvent._RegionIdCountry = SysId.ToInt(organisationEvent.RegionIdCountry);
dbOrganisationEvent._EventAt = organisationEvent.EventAt;
dbOrganisationEvent._EventTo = organisationEvent.EventTo;
dbOrganisationEvent._EventTypeCode = EventTypeCodes.GetCodeForType(organisationEvent.EventType);
dbOrganisationEvent._Summary = organisationEvent.Summary;
dbOrganisationEvent._Details = organisationEvent.Details;
dbOrganisationEvent._EventData = organisationEvent.EventData;
dbOrganisationEvent._PublishedAt = organisationEvent.PublishedAt;
dbOrganisationEvent._ExpiresAt = organisationEvent.ExpiresAt;
dbOrganisationEvent._Notes = organisationEvent.Notes;
dbOrganisationEvent._Status = SacsSystem.GetStatusCode(organisationEvent.Status);
dbOrganisationEvent._Flags = (short)organisationEvent.Flags;
if (!SysId.IsValid(organisationEvent.Id))
{
dbOrganisationEvent._CreateOn = DateTime.Now;
dbOrganisationEvent._CreateBy = dbUpdateInfo.UserId.ToInt();
dbOrganisationEvent._CreateHost = dbUpdateInfo.Host;
}
dbOrganisationEvent._UpdateOn = DateTime.Now;
dbOrganisationEvent._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbOrganisationEvent._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(OrganisationEvent_Db dbOrganisationEvent, SaxOrganisationEvent organisationEvent)
{
//organisationEvent.Id = new SysId(dbOrganisationEvent._Id);
//organisationEvent.OrganisationId = new SysId(dbOrganisationEvent._OrganisationId);
organisationEvent.SportIdPrimary = new SysId(dbOrganisationEvent._SportIdPrimary);
organisationEvent.RegionIdCountry = new SysId(dbOrganisationEvent._RegionIdCountry);
organisationEvent.EventAt = dbOrganisationEvent._EventAt;
organisationEvent.EventTo = dbOrganisationEvent._EventTo;
organisationEvent.EventType = (Sax.EventType)EventTypeCodes.GetTypeForCode(dbOrganisationEvent._EventTypeCode);
organisationEvent.Summary = dbOrganisationEvent._Summary;
organisationEvent.Details = dbOrganisationEvent._Details;
organisationEvent.EventData = dbOrganisationEvent._EventData;
organisationEvent.PublishedAt = dbOrganisationEvent._PublishedAt;
organisationEvent.ExpiresAt = dbOrganisationEvent._ExpiresAt;
organisationEvent.Notes = dbOrganisationEvent._Notes;
organisationEvent.Status = SacsSystem.GetStatusForCode(dbOrganisationEvent._Status);
organisationEvent.SetCreateStamp(dbOrganisationEvent._CreateOn, new SysId(dbOrganisationEvent._CreateBy), dbOrganisationEvent._CreateHost);
organisationEvent.SetUpdateStamp(dbOrganisationEvent._UpdateOn, new SysId(dbOrganisationEvent._UpdateBy), dbOrganisationEvent._UpdateHost);
organisationEvent.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasOrganisationEvent = "OrgEvt";
private static readonly String aliasOrganisationEvent_Organisation = "OrgEvt_Org";
private static readonly String prefixOrganisationEvent_Organisation = aliasOrganisationEvent_Organisation + "_";
private static readonly String colOrganisationEvent_OrganisationOwner_LogoCount = "OrgEvt_Org_LogoCount";
private static readonly String aliasOrganisationEvent_Organisation_UserOrganisation = "OrgEvt_Org_UsrOrg";
private static readonly String aliasOrganisationEvent_Sport = "OrgEvt_Spt";
private static readonly String prefixOrganisationEvent_Sport = aliasOrganisationEvent_Sport + "_";
private static readonly String aliasOrganisationEvent_Region = "OrgEvt_Rgn";
private static readonly String prefixOrganisationEvent_Region = aliasOrganisationEvent_Region + "_";
private void SetOrganisationEventColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.OrganisationEvent)
alias = aliasOrganisationEvent;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetOrganisationEventColumnDfn(SaxOrganisationEvent.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxOrganisationEvent.Column.Pos:
SetOrganisationEventColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxOrganisationEvent.Column.Id:
SetOrganisationEventColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Organisation.
case SaxOrganisationEvent.Column.OrganisationId:
SetOrganisationEventColDfn(columnDfn, "Organisation Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.Organisation_Name:
SetOrganisationEventColDfn(columnDfn, "Organisation", 160, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisationEvent_Organisation, prefixOrganisationEvent_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.Organisation_LogoCount:
SetActivityIndexColDfn(columnDfn, "Organisation Logos", 100, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colOrganisationEvent_OrganisationOwner_LogoCount;
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Sport.
case SaxOrganisationEvent.Column.SportIdPrimary:
SetOrganisationEventColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_SportIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.Sport_Name:
SetOrganisationEventColDfn(columnDfn, "Sport", 100, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisationEvent_Sport, prefixOrganisationEvent_Sport);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Region.
case SaxOrganisationEvent.Column.RegionIdCountry:
SetOrganisationEventColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_RegionIdCountry, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.Region_Name:
SetOrganisationEventColDfn(columnDfn, "Region", 100, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisationEvent_Region, prefixOrganisationEvent_Region);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Event.
case SaxOrganisationEvent.Column.EventAt_Date:
SetOrganisationEventColDfn(columnDfn, "Event", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.EventAt_DateTime:
SetOrganisationEventColDfn(columnDfn, "Event", 100, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.EventTo_Date:
SetOrganisationEventColDfn(columnDfn, "Event to", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTo, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.EventTo_DateTime:
SetOrganisationEventColDfn(columnDfn, "Event to", 100, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTo, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.EventTypeCode:
SetOrganisationEventColDfn(columnDfn, "Type", 90, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, ColumnAlignment.Center);
break;
case SaxOrganisationEvent.Column.EventType_Desc:
SetOrganisationEventColDfn(columnDfn, "Type", 120, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, ColumnAlignment.Center);
break;
case SaxOrganisationEvent.Column.Summary:
SetOrganisationEventColDfn(columnDfn, "Summary", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary);
break;
case SaxOrganisationEvent.Column.Details:
SetOrganisationEventColDfn(columnDfn, "Details", 200, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details);
break;
case SaxOrganisationEvent.Column.PublishedAt_Date:
SetOrganisationEventColDfn(columnDfn, "Published", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_PublishedAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.PublishedAt_DateTime:
SetOrganisationEventColDfn(columnDfn, "Published", 100, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_PublishedAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.ExpiresAt_Date:
SetOrganisationEventColDfn(columnDfn, "Expires", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_ExpiresAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.ExpiresAt_DateTime:
SetOrganisationEventColDfn(columnDfn, "Expires", 100, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_ExpiresAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxOrganisationEvent.Column.Notes:
SetOrganisationEventColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Notes);
break;
case SaxOrganisationEvent.Column.Flags:
SetOrganisationEventColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxOrganisationEvent.Column.Status:
SetOrganisationEventColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Status, ColumnAlignment.Center);
break;
case SaxOrganisationEvent.Column.Status_Desc:
SetOrganisationEventColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Status, ColumnAlignment.Center);
break;
case SaxOrganisationEvent.Column.Status_Ind:
SetOrganisationEventColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxOrganisationEvent.Column.CreateOn_Date:
SetOrganisationEventColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationEvent.Column.UpdateOn_Date:
SetOrganisationEventColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.OrganisationEvent_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetOrganisationEventQueryFilter(SaxOrganisationEvent.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String colId = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Id, aliasOrganisationEvent);
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{colId} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{colId} NOT IN ({prm.IdsExcluded.Concat(",")})");
// User Account Ids.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
{
// User Organisation.
if (!StringUtil.IsEmpty(prm.Alias_UserOrganisation))
{
// Filter directly on the joined User Organisation table.
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, prm.Alias_UserOrganisation)} IN ({userAccountIdsIncluded})");
}
else
{
// User Organisation query.
String alias_UserOrganisation = aliasOrganisationEvent_Organisation_UserOrganisation;
DbQuery queryUserOrganisation = new DbQuery(CoreDatabase.DbmsType);
queryUserOrganisation.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), alias_UserOrganisation);
queryUserOrganisation.Filters.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, alias_UserOrganisation)} IN ({userAccountIdsIncluded})");
// Filter Organisation directly against the Organisation Event.
queryUserOrganisation.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, alias_UserOrganisation));
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, aliasOrganisationEvent)} IN ({queryUserOrganisation.BuildQuery()})");
}
}
// Organisation Ids.
String organisationIdsIncluded = prm.OrganisationIdsIncluded.Concat(",");
if (!organisationIdsIncluded.IsEmpty())
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, aliasOrganisationEvent)} IN ({organisationIdsIncluded})");
// Sport Ids.
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_SportIdPrimary, aliasOrganisationEvent)} IN ({sportIdsIncluded})");
// Region Ids.
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
if (!regionIdsIncluded.IsEmpty())
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_RegionIdCountry, aliasOrganisationEvent)} IN ({regionIdsIncluded})");
// Summary.
if (!StringUtil.IsEmpty(prm.SummaryPartial))
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary, aliasOrganisationEvent)} Like '%{DbQuery.FormatForLike(prm.SummaryPartial, true)}%'");
// Event date.
if (DateUtil.IsValid(prm.EventFrom))
{
String dateValue = DbQuery.FormatDateForCondition(prm.EventFrom, true);
String colEventAt = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, aliasOrganisationEvent);
String colEventTo= SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTo, aliasOrganisationEvent);
List<String> eventDateFilter = new List<String>();
eventDateFilter.Add($"{colEventAt}>={dateValue}");
eventDateFilter.Add($"{colEventAt}<{dateValue} And {colEventTo} Is Not Null And {colEventTo}>={dateValue}");
filter.Add(eventDateFilter.Concat(" Or ","(",")"));
}
// Event filter.
if (!StringUtil.IsEmpty(prm.EventFilter))
{
// Split filter into words.
List<String> filterWords = prm.EventFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> articleFilter = new List<String>();
articleFilter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary, aliasOrganisationEvent)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
articleFilter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details, aliasOrganisationEvent)} Like '%{DbQuery.FormatForLike(filterWord, true)}%'");
filter.Add(articleFilter.Concat(" OR ", "(", ")"));
}
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Notes, aliasOrganisationEvent)} LIKE '%{DbQuery.FormatForLike(prm.NotesPartial)}%'");
// Status.
if (prm.StatusCat != SaxOrganisationEvent.StatusCat.Any)
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Status, aliasOrganisationEvent)}{GetOrganisationEventStatusCatFilterCondition(prm.StatusCat)}");
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetOrganisationEventStatusCatFilterCondition(SaxOrganisationEvent.StatusCat statusCat)
{
if (statusCat == SaxOrganisationEvent.StatusCat.ActiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Active)}'";
if (statusCat == SaxOrganisationEvent.StatusCat.InactiveOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Inactive)}'";
if (statusCat == SaxOrganisationEvent.StatusCat.NotDeleted)
return $"!='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
if (statusCat == SaxOrganisationEvent.StatusCat.DeletedOnly)
return $"='{SacsSystem.GetStatusCode(SaStatus.Deleted)}'";
return "";
}
// Item sort columns.
public List<String> GetOrganisationEventSortColumns(SaxOrganisationEvent.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for OrganisationEvent columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.OrganisationEvent)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasOrganisationEvent);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Id, aliasOrganisationEvent) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetOrganisationEventCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationEvent) + " As " + aliasOrganisationEvent, filter);
}
public override long GetOrganisationEventCount(SaxOrganisationEvent.Params prm)
{
ClearErrorState();
return GetOrganisationEventCount(GetOrganisationEventQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxOrganisationEvent> GetOrganisationEventList(SaxOrganisationEvent.Params prm)
{
ClearErrorState();
List<SaxOrganisationEvent> userActivitys = new List<SaxOrganisationEvent>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationEvent), aliasOrganisationEvent);
OrganisationEvent_Db dbOrganisationEvent = new OrganisationEvent_Db(CoreDbInfo);
qry.Columns.AddRange(dbOrganisationEvent.ExistingColumnNames);
qry.Filters.AddRange(GetOrganisationEventQueryFilter(prm));
qry.OrderBy.AddRange(GetOrganisationEventSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbOrganisationEvent = new OrganisationEvent_Db(CoreDbInfo);
dbOrganisationEvent.PopulateFrom(dbDataReader);
userActivitys.Add(CreateOrganisationEvent(dbOrganisationEvent));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userActivitys;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteOrganisationEventQuery(List<ColumnDfn> columns, SaxOrganisationEvent.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationEvent), aliasOrganisationEvent);
// Add columns as defined in query list.
if (columns.HasId(SaxOrganisationEvent.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Id, aliasOrganisationEvent));
bool hasOrganisationCols = (columns.HasId(SaxOrganisationEvent.Column.Organisation_Name));
if (columns.HasId(SaxOrganisationEvent.Column.OrganisationId) || hasOrganisationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, aliasOrganisationEvent));
bool hasSportCols = (columns.HasId(SaxOrganisationEvent.Column.Sport_Name));
if (columns.HasId(SaxOrganisationEvent.Column.SportIdPrimary) || hasSportCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_SportIdPrimary, aliasOrganisationEvent));
bool hasRegionCols = (columns.HasId(SaxOrganisationEvent.Column.Region_Name));
if (columns.HasId(SaxOrganisationEvent.Column.RegionIdCountry) || hasRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_RegionIdCountry, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.EventAt_Date) || columns.HasId(SaxOrganisationEvent.Column.EventAt_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventAt, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.EventTo_Date) || columns.HasId(SaxOrganisationEvent.Column.EventTo_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTo, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.EventTypeCode) || columns.HasId(SaxOrganisationEvent.Column.EventType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_EventTypeCode, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.Summary))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Summary, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.Details))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Details, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.PublishedAt_Date) || columns.HasId(SaxOrganisationEvent.Column.PublishedAt_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_PublishedAt, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.ExpiresAt_Date) || columns.HasId(SaxOrganisationEvent.Column.ExpiresAt_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_ExpiresAt, aliasOrganisationEvent));
// Common properties.
if (columns.HasId(SaxOrganisationEvent.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Notes, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Flags, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.Status) || columns.HasId(SaxOrganisationEvent.Column.Status_Desc) || columns.HasId(SaxOrganisationEvent.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_Status, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_CreateOn, aliasOrganisationEvent));
if (columns.HasId(SaxOrganisationEvent.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_UpdateOn, aliasOrganisationEvent));
//---------------------------------------------------------------------
// Organisation.
if (hasOrganisationCols)
{
DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasOrganisationEvent_Organisation);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisationEvent_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, aliasOrganisationEvent));
query.Joins.Add(joinOrganisation);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisationEvent_Organisation), prefixOrganisationEvent_Organisation + SaxDbDfn_Core.GetColumnName(col, false));
prm.Alias_Organisation = aliasOrganisationEvent_Organisation;
}
//---------------------------------------------------------------------
// Organisation Logo Image Count.
if (columns.HasId(SaxOrganisationEvent.Column.Organisation_LogoCount))
{
String aliasLogoCount = "aImg_Logo";
DbQuery queryLogoCount = new DbQuery(CoreDatabase.DbmsType);
queryLogoCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasLogoCount);
queryLogoCount.Columns.Add("Count(*)");
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasLogoCount) + "=" + (int)Sax.DataItemType.Organisation);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasLogoCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_OrganisationId, aliasOrganisationEvent));
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasLogoCount) + "=" + (int)Sax.ImageType.OrganisationLogo);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasLogoCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Construct sub-query.
query.Columns.Add("(" + queryLogoCount.BuildQuery() + ")", colOrganisationEvent_OrganisationOwner_LogoCount);
}
//---------------------------------------------------------------------
// Primary Sport.
if (hasSportCols)
{
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasOrganisationEvent_Sport);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasOrganisationEvent_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_SportIdPrimary, aliasOrganisationEvent));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisationEvent_Sport), prefixOrganisationEvent_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Primary Region.
if (hasRegionCols)
{
DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasOrganisationEvent_Region);
joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasOrganisationEvent_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationEvent_RegionIdCountry, aliasOrganisationEvent));
query.Joins.Add(joinRegion);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisationEvent_Region), prefixOrganisationEvent_Region + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetOrganisationEventQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetOrganisationEventSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,714 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxActivityMgr_Dbas
{
//*******************************************************************
// Activity Mgr - Organisation Opportunity
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxOrganisationOpportunity organisationOpportunity)
{
return new List<StringPair>()
{
new StringPair("Id", SysId.ToString(organisationOpportunity.Id)),
new StringPair("OrganisationId", SysId.ToString(organisationOpportunity.OrganisationId)),
new StringPair("Opportunity type", OpportunityTypeCodes.GetDescForType(organisationOpportunity.OpportunityType)),
new StringPair("Position", StringUtil.Left(organisationOpportunity.Position,32)),
new StringPair("Status", organisationOpportunity.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxOrganisationOpportunity CreateOrganisationOpportunity(SysId userAccountIdJournalist)
{
ClearErrorState();
return new SaxOrganisationOpportunity_Dbas(CoreDatabase, null, userAccountIdJournalist, 0);
}
private SaxOrganisationOpportunity_Dbas CreateOrganisationOpportunity(OrganisationOpportunity_Db dbOrganisationOpportunity)
{
ClearErrorState();
SaxOrganisationOpportunity_Dbas organisationOpportunity = new SaxOrganisationOpportunity_Dbas(CoreDatabase, new SysId(dbOrganisationOpportunity._Id), new SysId(dbOrganisationOpportunity._OrganisationId), (UInt16)dbOrganisationOpportunity._Flags);
PopulateFrom(dbOrganisationOpportunity, organisationOpportunity);
return organisationOpportunity;
}
//-------------------------------------------------------------------
// Get item.
public override SaxOrganisationOpportunity GetOrganisationOpportunity(SaxOrganisationOpportunity.Params prm)
{
ClearErrorState();
return GetOrganisationOpportunity(GetOrganisationOpportunityQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxOrganisationOpportunity GetOrganisationOpportunity(String filter)
{
ClearErrorState();
long count = GetOrganisationOpportunityCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxOrganisationOpportunity organisationOpportunity = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
OrganisationOpportunity_Db dbOrganisationOpportunity = new OrganisationOpportunity_Db(CoreDbInfo);
dbOrganisationOpportunity.PopulateFrom(dbCommand, aliasOrganisationOpportunity, filter);
organisationOpportunity = CreateOrganisationOpportunity(dbOrganisationOpportunity);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return organisationOpportunity;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidOrganisationOpportunityData(SaxOrganisationOpportunity.Data data, SaxOrganisationOpportunity.ErrField errField)
{
ClearErrorState();
if (!base.IsValidOrganisationOpportunityData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertOrganisationOpportunity(SaxOrganisationOpportunity organisationOpportunity, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".InsertOrganisationOpportunity";
ClearErrorState();
if (!IsValidOrganisationOpportunity(organisationOpportunity)) return false;
if (SysId.IsValid(organisationOpportunity.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
OrganisationOpportunity_Db dbOrganisationOpportunity = new OrganisationOpportunity_Db(CoreDbInfo);
PopulateTo(dbOrganisationOpportunity, organisationOpportunity, dbUpdateInfo);
if (OrganisationOpportunity_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbOrganisationOpportunity._Id = CoreDatabase.GetNextIdFromTable("OrganisationOpportunity");
}
dbOrganisationOpportunity.ExecuteInsertCommand(dbCommand);
organisationOpportunity.Id = new SysId(dbOrganisationOpportunity._Id);
organisationOpportunity.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Inserted. " + GetLogProperties(organisationOpportunity).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateOrganisationOpportunity(SaxOrganisationOpportunity organisationOpportunity, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".UpdateOrganisationOpportunity";
ClearErrorState();
if (!IsValidOrganisationOpportunity(organisationOpportunity)) return false;
if (!SysId.IsValid(organisationOpportunity.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!organisationOpportunity.Changed)
{
if (DebugMode) SaLogger.Debug(fn + " Data not changed. " + GetLogProperties(organisationOpportunity).Concat(": ").Concat("", "\n\t"));
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
OrganisationOpportunity_Db dbOrganisationOpportunity = new OrganisationOpportunity_Db(CoreDbInfo);
dbOrganisationOpportunity.PopulateFrom(dbCommand, aliasOrganisationOpportunity, "Id=" + SysId.ToString(organisationOpportunity.Id));
// ToDo SaxUpdateLogItemMonitor_OrganisationOpportunity updateLogMonitor = new SaxUpdateLogItemMonitor_OrganisationOpportunity(SessionContext, CreateOrganisationOpportunity(dbOrganisationOpportunity), dbUpdateInfo);
// Update item.
PopulateTo(dbOrganisationOpportunity, organisationOpportunity, dbUpdateInfo);
dbOrganisationOpportunity.ExecuteUpdateCommand(dbCommand);
organisationOpportunity.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Updated. " + GetLogProperties(organisationOpportunity).Concat(": ").Concat("", "\n\t"));
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(organisationOpportunity);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool OrganisationOpportunityCanBeDeleted(SaxOrganisationOpportunity organisationOpportunity)
{
ClearErrorState();
if (!base.OrganisationOpportunityCanBeDeleted(organisationOpportunity)) return false;
return true;
}
public override bool DeleteOrganisationOpportunity(SaxOrganisationOpportunity organisationOpportunity, DbUpdateInfo dbUpdateInfo)
{
String fn = GetType().Name + ".DeleteOrganisationOpportunity";
ClearErrorState();
if (!OrganisationOpportunityCanBeDeleted(organisationOpportunity)) return false;
// Organisation Opportunities are logically deleted by changing the status.
organisationOpportunity.Status = SaStatus.Deleted;
return UpdateOrganisationOpportunity(organisationOpportunity, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
OrganisationOpportunity_Db dbOrganisationOpportunity = new OrganisationOpportunity_Db(CoreDbInfo);
dbOrganisationOpportunity.PopulateFrom(dbCommand, aliasOrganisationOpportunity, "Id=" + organisationOpportunity.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity) + " WHERE Id=" + SysId.ToString(organisationOpportunity.Id) + ";";
dbCommand.ExecuteNonQuery();
organisationOpportunity.Changed = false;
if (DebugMode) SaLogger.Debug(fn + " Deleted. " + GetLogProperties(organisationOpportunity).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(OrganisationOpportunity_Db dbOrganisationOpportunity, SaxOrganisationOpportunity organisationOpportunity, DbUpdateInfo dbUpdateInfo)
{
dbOrganisationOpportunity._Id = SysId.ToInt(organisationOpportunity.Id);
dbOrganisationOpportunity._OrganisationId = SysId.ToInt(organisationOpportunity.OrganisationId);
dbOrganisationOpportunity._SportIdPrimary = SysId.ToInt(organisationOpportunity.SportIdPrimary);
dbOrganisationOpportunity._RegionIdPrimary = SysId.ToInt(organisationOpportunity.RegionIdPrimary);
dbOrganisationOpportunity._OpportunityTypeCode = OpportunityTypeCodes.GetCodeForType(organisationOpportunity.OpportunityType);
dbOrganisationOpportunity._Position = organisationOpportunity.Position;
dbOrganisationOpportunity._Outline = organisationOpportunity.Outline;
dbOrganisationOpportunity._OpportunityData = organisationOpportunity.OpportunityData;
dbOrganisationOpportunity._PublishedAt = organisationOpportunity.PublishedAt;
dbOrganisationOpportunity._ExpiresAt = organisationOpportunity.ExpiresAt;
dbOrganisationOpportunity._Notes = organisationOpportunity.Notes;
dbOrganisationOpportunity._Status = SacsSystem.GetStatusCode(organisationOpportunity.Status);
dbOrganisationOpportunity._Flags = (short)organisationOpportunity.Flags;
if (!SysId.IsValid(organisationOpportunity.Id))
{
dbOrganisationOpportunity._CreateOn = DateTime.Now;
dbOrganisationOpportunity._CreateBy = dbUpdateInfo.UserId.ToInt();
dbOrganisationOpportunity._CreateHost = dbUpdateInfo.Host;
}
dbOrganisationOpportunity._UpdateOn = DateTime.Now;
dbOrganisationOpportunity._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbOrganisationOpportunity._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(OrganisationOpportunity_Db dbOrganisationOpportunity, SaxOrganisationOpportunity organisationOpportunity)
{
//organisationOpportunity.Id = new SysId(dbOrganisationOpportunity._Id);
//organisationOpportunity.OrganisationId = new SysId(dbOrganisationOpportunity._OrganisationId);
organisationOpportunity.SportIdPrimary = new SysId(dbOrganisationOpportunity._SportIdPrimary);
organisationOpportunity.RegionIdPrimary = new SysId(dbOrganisationOpportunity._RegionIdPrimary);
organisationOpportunity.OpportunityType = (Sax.OpportunityType)OpportunityTypeCodes.GetTypeForCode(dbOrganisationOpportunity._OpportunityTypeCode);
organisationOpportunity.Position = dbOrganisationOpportunity._Position;
organisationOpportunity.Outline = dbOrganisationOpportunity._Outline;
organisationOpportunity.OpportunityData = dbOrganisationOpportunity._OpportunityData;
organisationOpportunity.PublishedAt = dbOrganisationOpportunity._PublishedAt;
organisationOpportunity.ExpiresAt = dbOrganisationOpportunity._ExpiresAt;
organisationOpportunity.Notes = dbOrganisationOpportunity._Notes;
organisationOpportunity.Status = SacsSystem.GetStatusForCode(dbOrganisationOpportunity._Status);
organisationOpportunity.SetCreateStamp(dbOrganisationOpportunity._CreateOn, new SysId(dbOrganisationOpportunity._CreateBy), dbOrganisationOpportunity._CreateHost);
organisationOpportunity.SetUpdateStamp(dbOrganisationOpportunity._UpdateOn, new SysId(dbOrganisationOpportunity._UpdateBy), dbOrganisationOpportunity._UpdateHost);
organisationOpportunity.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasOrganisationOpportunity = "OrgOpp";
private static readonly String aliasOrganisationOpportunity_Organisation = "OrgOpp_Org";
private static readonly String prefixOrganisationOpportunity_Organisation = aliasOrganisationOpportunity_Organisation + "_";
private static readonly String colOrganisationOpportunity_OrganisationOwner_LogoCount = "OrgOpp_Org_LogoCount";
private static readonly String aliasOrganisationOpportunity_Organisation_UserOrganisation = "OrgOpp_Org_UsrOrg";
private static readonly String aliasOrganisationOpportunity_Sport = "OrgOpp_Spt";
private static readonly String prefixOrganisationOpportunity_Sport = aliasOrganisationOpportunity_Sport + "_";
private static readonly String aliasOrganisationOpportunity_Region = "OrgOpp_Rgn";
private static readonly String prefixOrganisationOpportunity_Region = aliasOrganisationOpportunity_Region + "_";
private void SetOrganisationOpportunityColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.OrganisationOpportunity)
alias = aliasOrganisationOpportunity;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetOrganisationOpportunityColumnDfn(SaxOrganisationOpportunity.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxOrganisationOpportunity.Column.Pos:
SetOrganisationOpportunityColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxOrganisationOpportunity.Column.Id:
SetOrganisationOpportunityColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Organisation.
case SaxOrganisationOpportunity.Column.OrganisationId:
SetOrganisationOpportunityColDfn(columnDfn, "Organisation Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.Organisation_Name:
SetOrganisationOpportunityColDfn(columnDfn, "Organisation", 160, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisationOpportunity_Organisation, prefixOrganisationOpportunity_Organisation);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.Organisation_LogoCount:
SetActivityIndexColDfn(columnDfn, "Organisation Logos", 100, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colOrganisationOpportunity_OrganisationOwner_LogoCount;
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Sport.
case SaxOrganisationOpportunity.Column.SportIdPrimary:
SetOrganisationOpportunityColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_SportIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.Sport_Name:
SetOrganisationOpportunityColDfn(columnDfn, "Sport", 100, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisationOpportunity_Sport, prefixOrganisationOpportunity_Sport);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Region.
case SaxOrganisationOpportunity.Column.RegionIdPrimary:
SetOrganisationOpportunityColDfn(columnDfn, "Region Id", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_RegionIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.Region_Name:
SetOrganisationOpportunityColDfn(columnDfn, "Region", 100, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasOrganisationOpportunity_Region, prefixOrganisationOpportunity_Region);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Opportunity.
case SaxOrganisationOpportunity.Column.OpportunityTypeCode:
SetOrganisationOpportunityColDfn(columnDfn, "Type", 90, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OpportunityTypeCode, ColumnAlignment.Center);
break;
case SaxOrganisationOpportunity.Column.OpportunityType_Desc:
SetOrganisationOpportunityColDfn(columnDfn, "Type", 120, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OpportunityTypeCode, ColumnAlignment.Center);
break;
case SaxOrganisationOpportunity.Column.Position:
SetOrganisationOpportunityColDfn(columnDfn, "Position", 200, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position);
break;
case SaxOrganisationOpportunity.Column.Outline:
SetOrganisationOpportunityColDfn(columnDfn, "Outline", 200, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline);
break;
case SaxOrganisationOpportunity.Column.PublishedAt_Date:
SetOrganisationOpportunityColDfn(columnDfn, "Published", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_PublishedAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.PublishedAt_DateTime:
SetOrganisationOpportunityColDfn(columnDfn, "Published", 100, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_PublishedAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.ExpiresAt_Date:
SetOrganisationOpportunityColDfn(columnDfn, "Expires", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_ExpiresAt, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.ExpiresAt_DateTime:
SetOrganisationOpportunityColDfn(columnDfn, "Expires", 100, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_ExpiresAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxOrganisationOpportunity.Column.Notes:
SetOrganisationOpportunityColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Notes);
break;
case SaxOrganisationOpportunity.Column.Flags:
SetOrganisationOpportunityColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxOrganisationOpportunity.Column.Status:
SetOrganisationOpportunityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Status, ColumnAlignment.Center);
break;
case SaxOrganisationOpportunity.Column.Status_Desc:
SetOrganisationOpportunityColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Status, ColumnAlignment.Center);
break;
case SaxOrganisationOpportunity.Column.Status_Ind:
SetOrganisationOpportunityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxOrganisationOpportunity.Column.CreateOn_Date:
SetOrganisationOpportunityColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxOrganisationOpportunity.Column.UpdateOn_Date:
SetOrganisationOpportunityColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetOrganisationOpportunityQueryFilter(SaxOrganisationOpportunity.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Id, aliasOrganisationOpportunity) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Id, aliasOrganisationOpportunity) + " NOT IN (" + idsExcluded + ")");
// User Account Ids.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
{
// User Organisation.
if (!StringUtil.IsEmpty(prm.Alias_UserOrganisation))
{
// Filter directly on the joined User Organisation table.
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, prm.Alias_UserOrganisation) + " IN (" + userAccountIdsIncluded + ")");
}
else
{
// User Organisation query.
String alias_UserOrganisation = aliasOrganisationOpportunity_Organisation_UserOrganisation;
DbQuery queryUserOrganisation = new DbQuery(CoreDatabase.DbmsType);
queryUserOrganisation.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserOrganisation), alias_UserOrganisation);
queryUserOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_UserAccountId, alias_UserOrganisation) + " IN (" + userAccountIdsIncluded + ")");
// Filter Organisation directly against the Organisation Opportunity.
queryUserOrganisation.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserOrganisation_OrganisationId, alias_UserOrganisation));
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrganisationOpportunity) + " IN (" + queryUserOrganisation.BuildQuery() + ")");
}
}
// Organisation Ids.
String organisationIdsIncluded = prm.OrganisationIdsIncluded.Concat(",");
if (!organisationIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrganisationOpportunity) + " IN (" + organisationIdsIncluded + ")");
// Sport Ids.
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_SportIdPrimary, aliasOrganisationOpportunity) + " IN (" + sportIdsIncluded + ")");
// Region Ids.
String regionIdsIncluded = prm.RegionIdsIncluded.Concat(",");
if (!regionIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_RegionIdPrimary, aliasOrganisationOpportunity) + " IN (" + regionIdsIncluded + ")");
// Position.
if (!StringUtil.IsEmpty(prm.PositionPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position, aliasOrganisationOpportunity) + " Like '%" + DbQuery.FormatForLike(prm.PositionPartial, true) + "%'");
// Outline.
if (!StringUtil.IsEmpty(prm.OutlinePartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline, aliasOrganisationOpportunity) + " Like '%" + DbQuery.FormatForLike(prm.OutlinePartial, true) + "%'");
// Article.
if (!StringUtil.IsEmpty(prm.OpportunityFilter))
{
// Split filter into words.
List<String> filterWords = prm.OpportunityFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> articleFilter = new List<String>();
articleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position, aliasOrganisationOpportunity) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
articleFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline, aliasOrganisationOpportunity) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
filter.Add(articleFilter.Concat(" OR ", "(", ")"));
}
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Notes, aliasOrganisationOpportunity) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxOrganisationOpportunity.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Status, aliasOrganisationOpportunity) + GetOrganisationOpportunityStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetOrganisationOpportunityStatusCatFilterCondition(SaxOrganisationOpportunity.StatusCat statusCat)
{
if (statusCat == SaxOrganisationOpportunity.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxOrganisationOpportunity.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxOrganisationOpportunity.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxOrganisationOpportunity.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetOrganisationOpportunitySortColumns(SaxOrganisationOpportunity.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for OrganisationOpportunity columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.OrganisationOpportunity)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasOrganisationOpportunity);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Id, aliasOrganisationOpportunity) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetOrganisationOpportunityCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity) + " As " + aliasOrganisationOpportunity, filter);
}
public override long GetOrganisationOpportunityCount(SaxOrganisationOpportunity.Params prm)
{
ClearErrorState();
return GetOrganisationOpportunityCount(GetOrganisationOpportunityQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxOrganisationOpportunity> GetOrganisationOpportunityList(SaxOrganisationOpportunity.Params prm)
{
ClearErrorState();
List<SaxOrganisationOpportunity> userActivitys = new List<SaxOrganisationOpportunity>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity), aliasOrganisationOpportunity);
OrganisationOpportunity_Db dbOrganisationOpportunity = new OrganisationOpportunity_Db(CoreDbInfo);
qry.Columns.AddRange(dbOrganisationOpportunity.ExistingColumnNames);
qry.Filters.AddRange(GetOrganisationOpportunityQueryFilter(prm));
qry.OrderBy.AddRange(GetOrganisationOpportunitySortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbOrganisationOpportunity = new OrganisationOpportunity_Db(CoreDbInfo);
dbOrganisationOpportunity.PopulateFrom(dbDataReader);
userActivitys.Add(CreateOrganisationOpportunity(dbOrganisationOpportunity));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userActivitys;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteOrganisationOpportunityQuery(List<ColumnDfn> columns, SaxOrganisationOpportunity.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.OrganisationOpportunity), aliasOrganisationOpportunity);
// Add columns as defined in query list.
if (columns.HasId(SaxOrganisationOpportunity.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Id, aliasOrganisationOpportunity));
bool hasOrganisationCols = (columns.HasId(SaxOrganisationOpportunity.Column.Organisation_Name));
if (columns.HasId(SaxOrganisationOpportunity.Column.OrganisationId) || hasOrganisationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrganisationOpportunity));
bool hasSportCols = (columns.HasId(SaxOrganisationOpportunity.Column.Sport_Name));
if (columns.HasId(SaxOrganisationOpportunity.Column.SportIdPrimary) || hasSportCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_SportIdPrimary, aliasOrganisationOpportunity));
bool hasRegionCols = (columns.HasId(SaxOrganisationOpportunity.Column.Region_Name));
if (columns.HasId(SaxOrganisationOpportunity.Column.RegionIdPrimary) || hasRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_RegionIdPrimary, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.OpportunityTypeCode) || columns.HasId(SaxOrganisationOpportunity.Column.OpportunityType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OpportunityTypeCode, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.Position))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Position, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.Outline))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Outline, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.PublishedAt_Date) || columns.HasId(SaxOrganisationOpportunity.Column.PublishedAt_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_PublishedAt, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.ExpiresAt_Date) || columns.HasId(SaxOrganisationOpportunity.Column.ExpiresAt_DateTime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_ExpiresAt, aliasOrganisationOpportunity));
// Common properties.
if (columns.HasId(SaxOrganisationOpportunity.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Notes, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Flags, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.Status) || columns.HasId(SaxOrganisationOpportunity.Column.Status_Desc) || columns.HasId(SaxOrganisationOpportunity.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_Status, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_CreateOn, aliasOrganisationOpportunity));
if (columns.HasId(SaxOrganisationOpportunity.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_UpdateOn, aliasOrganisationOpportunity));
//---------------------------------------------------------------------
// Organisation.
if (hasOrganisationCols)
{
DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasOrganisationOpportunity_Organisation);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasOrganisationOpportunity_Organisation) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrganisationOpportunity));
query.Joins.Add(joinOrganisation);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisationOpportunity_Organisation), prefixOrganisationOpportunity_Organisation + SaxDbDfn_Core.GetColumnName(col, false));
prm.Alias_Organisation = aliasOrganisationOpportunity_Organisation;
}
//---------------------------------------------------------------------
// Organisation Logo Image Count.
if (columns.HasId(SaxOrganisationOpportunity.Column.Organisation_LogoCount))
{
String aliasLogoCount = "aImg_Logo";
DbQuery queryLogoCount = new DbQuery(CoreDatabase.DbmsType);
queryLogoCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasLogoCount);
queryLogoCount.Columns.Add("Count(*)");
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasLogoCount) + "=" + (int)Sax.DataItemType.Organisation);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasLogoCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_OrganisationId, aliasOrganisationOpportunity));
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasLogoCount) + "=" + (int)Sax.ImageType.OrganisationLogo);
queryLogoCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasLogoCount) + "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'");
// Construct sub-query.
query.Columns.Add("(" + queryLogoCount.BuildQuery() + ")", colOrganisationOpportunity_OrganisationOwner_LogoCount);
}
//---------------------------------------------------------------------
// Primary Sport.
if (hasSportCols)
{
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasOrganisationOpportunity_Sport);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasOrganisationOpportunity_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_SportIdPrimary, aliasOrganisationOpportunity));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisationOpportunity_Sport), prefixOrganisationOpportunity_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Primary Region.
if (hasRegionCols)
{
DbQueryJoin joinRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasOrganisationOpportunity_Region);
joinRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasOrganisationOpportunity_Region) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.OrganisationOpportunity_RegionIdPrimary, aliasOrganisationOpportunity));
query.Joins.Add(joinRegion);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasOrganisationOpportunity_Region), prefixOrganisationOpportunity_Region + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetOrganisationOpportunityQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetOrganisationOpportunitySortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,636 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxActivityMgr_Dbas
{
//*******************************************************************
// Activity Mgr - UserActivity
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserActivity userActivity)
{
return new List<StringPair>()
{
new StringPair("UserAccount",SysId.ToString(userActivity.UserAccountId)),
new StringPair("ItemId",ItemId.ToString(userActivity.ItemId)),
new StringPair("Status",SacsSystem.GetStatusDesc(userActivity.Status)),
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserActivity CreateUserActivity(SysId userAccountId, ItemId itemId)
{
ClearErrorState();
return new SaxUserActivity_Dbas(CoreDatabase, null, userAccountId, itemId, 0);
}
private SaxUserActivity_Dbas CreateUserActivity(UserActivity_Db dbUserActivity)
{
ClearErrorState();
ItemId itemId = new ItemId(dbUserActivity._ItemType, new SysId(dbUserActivity._ItemId));
SaxUserActivity_Dbas userActivity = new SaxUserActivity_Dbas(CoreDatabase, new SysId(dbUserActivity._Id), new SysId(dbUserActivity._UserAccountId), itemId, (UInt16)dbUserActivity._Flags);
PopulateFrom(dbUserActivity, userActivity);
return userActivity;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserActivity GetUserActivity(SaxUserActivity.Params prm)
{
ClearErrorState();
return GetUserActivity(GetUserActivityQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserActivity GetUserActivity(String filter)
{
ClearErrorState();
long count = GetUserActivityCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserActivity userActivity = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo);
dbUserActivity.PopulateFrom(dbCommand, aliasUserActivity, filter);
userActivity = CreateUserActivity(dbUserActivity);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userActivity;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserActivityData(SaxUserActivity.Data data, SaxUserActivity.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserActivityData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidUserActivity(userActivity)) return false;
if (SysId.IsValid(userActivity.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo);
PopulateTo(dbUserActivity, userActivity, dbUpdateInfo);
if (UserActivity_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbUserActivity._Id = CoreDatabase.GetNextIdFromTable("UserActivity");
}
dbUserActivity.ExecuteInsertCommand(dbCommand);
userActivity.Id = new SysId(dbUserActivity._Id);
userActivity.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted. {GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t")}");
UpdateActivityFeedback(userActivity, null, dbUpdateInfo);
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidUserActivity(userActivity)) return false;
if (!SysId.IsValid(userActivity.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userActivity.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed. {GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo);
dbUserActivity.PopulateFrom(dbCommand, aliasUserActivity, $"Id={SysId.ToString(userActivity.Id)}");
// Snapshot item.
SaxUserActivity userActivity_Snapshot = CreateUserActivity(dbUserActivity);
// ToDo SaxUpdateLogItemMonitor_UserActivity updateLogMonitor = new SaxUpdateLogItemMonitor_UserActivity(SessionContext, CreateUserActivity(dbUserActivity), dbUpdateInfo);
// Update item.
PopulateTo(dbUserActivity, userActivity, dbUpdateInfo);
dbUserActivity.ExecuteUpdateCommand(dbCommand);
userActivity.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated. {GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userActivity);
// ToDo updateLogMonitor.LogUpdates();
// Update activity feedback.
UpdateActivityFeedback(userActivity, userActivity_Snapshot, dbUpdateInfo);
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
private bool UpdateActivityFeedback(SaxUserActivity userActivity, SaxUserActivity userActivity_Previous, DbUpdateInfo dbUpdateInfo)
{
// Calculate changes in feedback for this user activity compared to the previous instance.
// User activity status - deleted are ignored.
bool deletedPreviously = userActivity_Previous?.IsStatusDeleted ?? true;
bool deletedCurrently = userActivity.IsStatusDeleted;
// Activity viewing.
bool viewedPreviously = userActivity_Previous?.ViewedAtFirst.IsValid() ?? false && !deletedPreviously;
bool viewedCurrently = userActivity.ViewedAtFirst.IsValid() && !deletedCurrently;
int viewCountIncrement = viewedCurrently == viewedPreviously ? 0 : viewedCurrently ? 1 : -1;
// Activity feaction.
int feedbackPreviously = Math.Max(0, (!deletedPreviously && userActivity_Previous != null) ? (int)userActivity_Previous.Reaction : 0);
int feedbackCurrently = Math.Max(0, !deletedCurrently ? (int)userActivity.Reaction : 0);
bool reactedPreviously = (userActivity_Previous?.ReactedAtFirst.IsValid() ?? false) && (feedbackPreviously > 0) && !deletedPreviously;
bool reactedCurrently = (userActivity.ReactedAtFirst.IsValid() && feedbackCurrently > 0 && !deletedCurrently);
int feedbackCountIncrement = reactedCurrently == reactedPreviously ? 0 : reactedCurrently ? 1 : -1;
int feedbackTotalIncrement = feedbackCurrently - feedbackPreviously;
// Update the Activity feedback.
return ActivityMgr.UpdateActivityFeedback(userActivity.ItemId, viewCountIncrement, feedbackCountIncrement, feedbackTotalIncrement, dbUpdateInfo);
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserActivityCanBeDeleted(SaxUserActivity userActivity)
{
ClearErrorState();
if (!base.UserActivityCanBeDeleted(userActivity)) return false;
return true;
}
public override bool DeleteUserActivity(SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!UserActivityCanBeDeleted(userActivity)) return false;
// User Activities are logically deleted by changing the status.
userActivity.Status = SaStatus.Deleted;
return UpdateUserActivity(userActivity, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo);
dbUserActivity.PopulateFrom(dbCommand, aliasUserActivity, "Id=" + SysId.ToLong(userActivity.Id));
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE " + aliasUserActivity + " FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity) + " As " + aliasUserActivity + " WHERE Id=" + SysId.ToLong(userActivity.Id) + "; ";
dbCommand.ExecuteNonQuery();
userActivity.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(userActivity).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserActivity_Db dbUserActivity, SaxUserActivity userActivity, DbUpdateInfo dbUpdateInfo)
{
dbUserActivity._Id = SysId.ToInt(userActivity.Id);
dbUserActivity._UserAccountId = SysId.ToInt(userActivity.UserAccountId);
dbUserActivity._ItemType = userActivity.ItemId.Type;
dbUserActivity._ItemId = SysId.ToInt(userActivity.ItemId.Id);
dbUserActivity._CurrentlyListed = userActivity.CurrentlyListed;
dbUserActivity._ListedAtFirst = userActivity.ListedAtFirst;
dbUserActivity._ListedAtLast = userActivity.ListedAtLast;
dbUserActivity._ViewedAtFirst = userActivity.ViewedAtFirst;
dbUserActivity._ViewedAtLast = userActivity.ViewedAtLast;
dbUserActivity._Reaction = (short)userActivity.Reaction;
dbUserActivity._ReactedAtFirst = userActivity.ReactedAtFirst;
dbUserActivity._ReactedAtLast = userActivity.ReactedAtLast;
dbUserActivity._UserActivityData = userActivity.UserActivityData;
dbUserActivity._Notes = userActivity.Notes;
dbUserActivity._Status = SacsSystem.GetStatusCode(userActivity.Status);
dbUserActivity._Flags = (short)userActivity.Flags;
if (!DateUtil.IsValid(dbUserActivity._CreateOn))
{
dbUserActivity._CreateOn = DateTime.Now;
dbUserActivity._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserActivity._CreateHost = dbUpdateInfo.Host;
}
dbUserActivity._UpdateOn = DateTime.Now;
dbUserActivity._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserActivity._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserActivity_Db dbUserActivity, SaxUserActivity userActivity)
{
//userActivity.Id = new SysId(dbUserActivity._Id);
//userActivity.UserAccountId = new SysId(dbUserActivity._UserAccountId);
//userActivity.ItemId = new ItemId(dbUserActivity._ItemType, new SysId(dbUserActivity._ItemId);
userActivity.CurrentlyListed = dbUserActivity._CurrentlyListed;
userActivity.ListedAtFirst = dbUserActivity._ListedAtFirst;
userActivity.ListedAtLast = dbUserActivity._ListedAtLast;
userActivity.ViewedAtFirst = dbUserActivity._ViewedAtFirst;
userActivity.ViewedAtLast = dbUserActivity._ViewedAtLast;
userActivity.Reaction = (Sax.ActivityReaction)dbUserActivity._Reaction;
userActivity.ReactedAtFirst = dbUserActivity._ReactedAtFirst;
userActivity.ReactedAtLast = dbUserActivity._ReactedAtLast;
userActivity.UserActivityData = dbUserActivity._UserActivityData;
userActivity.Notes = dbUserActivity._Notes;
userActivity.Status = SacsSystem.GetStatusForCode(dbUserActivity._Status);
userActivity.SetCreateStamp(dbUserActivity._CreateOn, new SysId(dbUserActivity._CreateBy), dbUserActivity._CreateHost);
userActivity.SetUpdateStamp(dbUserActivity._UpdateOn, new SysId(dbUserActivity._UpdateBy), dbUserActivity._UpdateHost);
userActivity.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserActivity = "UsrAct";
private static readonly String aliasUserActivity_UserAccount = "UsrAct_UsrAct";
private static readonly String prefixUserActivity_UserAccount = "UsrAct_UsrAct_";
//private static readonly String aliasUserActivity_Article = "UsrAct_JrnArt";
//private static readonly String prefixUserActivity_Article = "UsrAct_JrnArt_";
//private static readonly String aliasUserActivity_Opportunity = "UsrAct_OrgOpp";
//private static readonly String prefixUserActivity_Opportunity = "UsrAct_OrgOpp_";
private void SetUserActivityColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.UserActivity)
alias = aliasUserActivity;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserActivityColumnDfn(SaxUserActivity.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserActivity.Column.Pos:
SetUserActivityColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserActivity.Column.Id:
SetUserActivityColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// User.
case SaxUserActivity.Column.UserAccountId:
SetUserActivityColDfn(columnDfn, "User Id", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.User_EmailAddress:
SetUserActivityColDfn(columnDfn, "Email address", 160, SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.User_DisplayName:
SetUserActivityColDfn(columnDfn, "User", 160, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.User_Title:
SetUserActivityColDfn(columnDfn, "Title", 80, SaxDbDfn_Core.ColumnIdx.UserAccount_Title, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.User_FirstName:
SetUserActivityColDfn(columnDfn, "First name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.User_LastName:
SetUserActivityColDfn(columnDfn, "Last name", 120, SaxDbDfn_Core.ColumnIdx.UserAccount_LastName, ColumnAlignment.Left, DataValue.DataType.String, aliasUserActivity_UserAccount, prefixUserActivity_UserAccount);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
// Item.
case SaxUserActivity.Column.ItemType:
SetUserActivityColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.ItemType_Code:
SetUserActivityColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.ItemType_Desc:
SetUserActivityColDfn(columnDfn, "Item type", 100, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.ItemId:
SetUserActivityColDfn(columnDfn, "Item #", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Properties.
case SaxUserActivity.Column.FirstListedAt:
SetUserActivityColDfn(columnDfn, "First listed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.LastListedAt:
SetUserActivityColDfn(columnDfn, "Last listed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.FirstViewedAt:
SetUserActivityColDfn(columnDfn, "First viewed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.LastViewedAt:
SetUserActivityColDfn(columnDfn, "Last viewed", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.Reaction:
SetUserActivityColDfn(columnDfn, "Reaction", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserActivity.Column.FirstReactedAt:
SetUserActivityColDfn(columnDfn, "First reacted", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtFirst, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
case SaxUserActivity.Column.LastReactedAt:
SetUserActivityColDfn(columnDfn, "Last reacted", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, ColumnAlignment.Center, DataValue.DataType.DateTime);
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxUserActivity.Column.Notes:
SetUserActivityColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.UserActivity_Notes);
break;
case SaxUserActivity.Column.Flags:
SetUserActivityColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.UserActivity_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserActivity.Column.Status:
SetUserActivityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Status, ColumnAlignment.Center);
break;
case SaxUserActivity.Column.Status_Desc:
SetUserActivityColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.UserActivity_Status, ColumnAlignment.Center);
break;
case SaxUserActivity.Column.Status_Ind:
SetUserActivityColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserActivity.Column.CreateOn_Date:
SetUserActivityColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserActivity.Column.UpdateOn_Date:
SetUserActivityColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.UserActivity_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserActivityQueryFilter(SaxUserActivity.Params prm)
{
List<String> filter = new List<String>();
String aliasUserActivity = StringUtil.OnEmpty(prm.Alias_UserActivity, SaxActivityMgr_Dbas.aliasUserActivity);
// Ids.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserActivity)} IN ({prm.IdsIncluded.Concat(", ")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_Id, aliasUserActivity)} NOT IN ({prm.IdsExcluded.Concat(",")})");
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserSport_UserAccountId, aliasUserActivity)} IN ({userAccountIdsIncluded})");
// Item Ids.
if (!prm.ItemIdsIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
$"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasUserActivity)}={itemId.Type}" +
$" AND {SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasUserActivity)}={SysId.ToInt(itemId.Id)}";
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
// Item sort columns.
public List<String> GetUserActivitySortColumns(SaxUserActivity.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserActivity columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.UserActivity)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasUserActivity);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, aliasUserActivity) + " ASC");
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasUserActivity) + " ASC");
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasUserActivity) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserActivityCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount($"{SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity)} As {aliasUserActivity}", filter);
}
public override long GetUserActivityCount(SaxUserActivity.Params prm)
{
ClearErrorState();
return GetUserActivityCount(GetUserActivityQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserActivity> GetUserActivityList(SaxUserActivity.Params prm)
{
ClearErrorState();
List<SaxUserActivity> userActivitys = new List<SaxUserActivity>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity), aliasUserActivity);
UserActivity_Db dbUserActivity = new UserActivity_Db(CoreDbInfo);
qry.Columns.AddRange(dbUserActivity.ExistingColumnNames);
qry.Filters.AddRange(GetUserActivityQueryFilter(prm));
qry.OrderBy.AddRange(GetUserActivitySortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserActivity = new UserActivity_Db(CoreDbInfo);
dbUserActivity.PopulateFrom(dbDataReader);
userActivitys.Add(CreateUserActivity(dbUserActivity));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userActivitys;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserActivityQuery(List<ColumnDfn> columns, SaxUserActivity.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserActivity), aliasUserActivity);
// Add columns as defined in query list.
if (columns.HasId(SaxUserActivity.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Id, aliasUserActivity));
bool hasUserAccountCols = (columns.HasId(SaxUserActivity.Column.User_EmailAddress) || columns.HasId(SaxUserActivity.Column.User_DisplayName) || columns.HasId(SaxUserActivity.Column.User_Title) || columns.HasId(SaxUserActivity.Column.User_FirstName) || columns.HasId(SaxUserActivity.Column.User_LastName));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, aliasUserActivity));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemType, aliasUserActivity));
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ItemId, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.FirstListedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtFirst, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.LastListedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ListedAtLast, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.FirstViewedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtFirst, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.LastViewedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ViewedAtLast, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.Reaction))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Reaction, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.FirstReactedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtFirst, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.LastReactedAt))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_ReactedAtLast, aliasUserActivity));
// Common properties.
if (columns.HasId(SaxUserActivity.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Notes, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Flags, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.Status) || columns.HasId(SaxUserActivity.Column.Status_Desc) || columns.HasId(SaxUserActivity.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_Status, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_CreateOn, aliasUserActivity));
if (columns.HasId(SaxUserActivity.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UpdateOn, aliasUserActivity));
//---------------------------------------------------------------------
// User Account.
if (hasUserAccountCols)
{
DbQueryJoin joinUserAccount = new DbQueryJoin(DbJoinType.LeftOuter);
joinUserAccount.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.UserAccount), aliasUserActivity_UserAccount);
joinUserAccount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserAccount_Id, aliasUserActivity_UserAccount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.UserActivity_UserAccountId, aliasUserActivity));
query.Joins.Add(joinUserAccount);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_EmailAddress);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_Title);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_FirstName);
cols.Add(SaxDbDfn_Core.ColumnIdx.UserAccount_LastName);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasUserActivity_UserAccount), prefixUserActivity_UserAccount + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserActivityQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserActivitySortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
public partial class SaxActivityMgr_Dbas : SaxActivityMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SaxActivityMgr_Dbas(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,645 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxItemDataMgr_Dbas
{
//*******************************************************************
// Item Data Mgr - Item Address
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxItemAddress itemAddress)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(itemAddress.Id)),
new StringPair("ItemId", (Sax.DataItemType)itemAddress.ItemId.Type + ": " + itemAddress.ItemId.Id),
new StringPair("Town",itemAddress.Town),
new StringPair("PostalCode",itemAddress.PostalCode),
new StringPair("Status",itemAddress.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxItemAddress CreateItemAddress(ItemId itemId, Sax.AddressType addressType)
{
ClearErrorState();
return new SaxItemAddress_Dbas(CoreDatabase, null, itemId, addressType, 0);
}
private SaxItemAddress_Dbas CreateItemAddress(ItemAddress_Db dbItemAddress)
{
ClearErrorState();
ItemId itemId = new ItemId(dbItemAddress._ItemType, new SysId(dbItemAddress._ItemId));
SaxItemAddress_Dbas itemAddress = new SaxItemAddress_Dbas(CoreDatabase, new SysId(dbItemAddress._Id), itemId, (Sax.AddressType)dbItemAddress._AddressType, (ushort)dbItemAddress._Flags);
PopulateFrom(dbItemAddress, itemAddress);
return itemAddress;
}
//-------------------------------------------------------------------
// Get item.
public override SaxItemAddress GetItemAddress(SaxItemAddress.Params prm)
{
ClearErrorState();
return GetItemAddress(GetItemAddressQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxItemAddress GetItemAddress(String filter)
{
ClearErrorState();
long count = GetItemAddressCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxItemAddress itemAddress = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo);
dbItemAddress.PopulateFrom(dbCommand, aliasItemAddress, filter);
itemAddress = CreateItemAddress(dbItemAddress);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemAddress;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidItemAddressData(SaxItemAddress.Data data, SaxItemAddress.ErrField errField)
{
ClearErrorState();
if (!base.IsValidItemAddressData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemAddress(itemAddress)) return false;
if (SysId.IsValid(itemAddress.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo);
PopulateTo(dbItemAddress, itemAddress, dbUpdateInfo);
if (ItemAddress_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbItemAddress._Id = CoreDatabase.GetNextIdFromTable("ItemAddress");
}
dbItemAddress.ExecuteInsertCommand(dbCommand);
itemAddress.Id = new SysId(dbItemAddress._Id);
itemAddress.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemAddress(itemAddress)) return false;
if (!SysId.IsValid(itemAddress.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!itemAddress.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo);
dbItemAddress.PopulateFrom(dbCommand, aliasItemAddress, "Id=" + SysId.ToString(itemAddress.Id));
// ToDo SaxUpdateLogItemMonitor_ItemAddress updateLogMonitor = new SaxUpdateLogItemMonitor_ItemAddress(SessionContext, CreateItemAddress(dbItemAddress), dbUpdateInfo);
// Update item.
PopulateTo(dbItemAddress, itemAddress, dbUpdateInfo);
dbItemAddress.ExecuteUpdateCommand(dbCommand);
itemAddress.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(itemAddress);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool ItemAddressCanBeDeleted(SaxItemAddress itemAddress)
{
ClearErrorState();
if (!base.ItemAddressCanBeDeleted(itemAddress)) return false;
return true;
}
public override bool DeleteItemAddress(SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!ItemAddressCanBeDeleted(itemAddress)) return false;
// Item Addresses are logically deleted by changing the status.
itemAddress.Status = SaStatus.Deleted;
return UpdateItemAddress(itemAddress, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo);
dbItemAddress.PopulateFrom(dbCommand, aliasItemAddress, "Id=" + itemAddress.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress) + " WHERE Id=" + SysId.ToString(itemAddress.Id) + ";";
dbCommand.ExecuteNonQuery();
itemAddress.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted.{GetLogProperties(itemAddress).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(ItemAddress_Db dbItemAddress, SaxItemAddress itemAddress, DbUpdateInfo dbUpdateInfo)
{
dbItemAddress._Id = SysId.ToLong(itemAddress.Id);
dbItemAddress._ItemType = itemAddress.ItemId.Type;
dbItemAddress._ItemId = SysId.ToInt(itemAddress.ItemId.Id);
dbItemAddress._AddressType = (short)itemAddress.AddressType;
dbItemAddress._Caption = StringUtil.EmptyOnNull(itemAddress.Caption);
dbItemAddress._Line1 = StringUtil.EmptyOnNull(itemAddress.Line1);
dbItemAddress._Line2 = StringUtil.EmptyOnNull(itemAddress.Line2);
dbItemAddress._Line3 = StringUtil.EmptyOnNull(itemAddress.Line3);
dbItemAddress._Town = StringUtil.EmptyOnNull(itemAddress.Town);
dbItemAddress._Province = StringUtil.EmptyOnNull(itemAddress.Province);
dbItemAddress._RegionIdProvince = SysId.ToInt(itemAddress.RegionIdProvince);
dbItemAddress._Country = StringUtil.EmptyOnNull(itemAddress.Country);
dbItemAddress._RegionIdCountry = SysId.ToInt(itemAddress.RegionIdCountry);
dbItemAddress._PostalCode = StringUtil.EmptyOnNull(itemAddress.PostalCode);
// Location.
dbItemAddress._LocationSource = StringUtil.EmptyOnNull(itemAddress.LocationSource);
dbItemAddress._LocationStoredAt = itemAddress.LocationStoredAt;
dbItemAddress._LocationUpdateRequired = itemAddress.LocationUpdateRequired;
dbItemAddress._LocationData = StringUtil.EmptyOnNull(itemAddress.LocationData);
dbItemAddress._LocationFormattedAddress = StringUtil.EmptyOnNull(itemAddress.LocationFormattedAddress);
dbItemAddress._LocationLatitude = itemAddress.LocationLatitude;
dbItemAddress._LocationLongitude = itemAddress.LocationLongitude;
dbItemAddress._LocationAltitude = itemAddress.LocationAltitude;
// Common.
dbItemAddress._Notes = StringUtil.EmptyOnNull(itemAddress.Notes);
dbItemAddress._Status = SacsSystem.GetStatusCode(itemAddress.Status);
dbItemAddress._Flags = (short)itemAddress.Flags;
if (!SysId.IsValid(itemAddress.Id))
{
dbItemAddress._CreateOn = DateTime.Now;
dbItemAddress._CreateBy = dbUpdateInfo.UserId.ToInt();
dbItemAddress._CreateHost = dbUpdateInfo.Host;
}
dbItemAddress._UpdateOn = DateTime.Now;
dbItemAddress._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbItemAddress._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(ItemAddress_Db dbItemAddress, SaxItemAddress itemAddress)
{
//itemAddress.Id = new SysId(dbItemAddress._Id);
//itemAddress.ItemId = new ItemId(dbItemAddress._ItemType, new SysId(dbItemAddress._ItemId));
itemAddress.AddressType = (Sax.AddressType)dbItemAddress._AddressType;
itemAddress.Caption = dbItemAddress._Caption;
itemAddress.Line1 = dbItemAddress._Line1;
itemAddress.Line2 = dbItemAddress._Line2;
itemAddress.Line3 = dbItemAddress._Line3;
itemAddress.Town = dbItemAddress._Town;
itemAddress.Province = dbItemAddress._Province;
itemAddress.RegionIdProvince = new SysId(dbItemAddress._RegionIdProvince);
itemAddress.Country = dbItemAddress._Country;
itemAddress.RegionIdCountry = new SysId(dbItemAddress._RegionIdCountry);
itemAddress.PostalCode = dbItemAddress._PostalCode;
// Location.
itemAddress.LocationSource = dbItemAddress._LocationSource;
itemAddress.LocationStoredAt = dbItemAddress._LocationStoredAt;
itemAddress.LocationUpdateRequired = dbItemAddress._LocationUpdateRequired;
itemAddress.LocationData = dbItemAddress._LocationData;
itemAddress.LocationFormattedAddress = dbItemAddress._LocationFormattedAddress;
itemAddress.LocationLatitude = dbItemAddress._LocationLatitude;
itemAddress.LocationLongitude = dbItemAddress._LocationLongitude;
itemAddress.LocationAltitude = dbItemAddress._LocationAltitude;
// Common.
itemAddress.Notes = dbItemAddress._Notes;
itemAddress.Status = SacsSystem.GetStatusForCode(dbItemAddress._Status);
itemAddress.SetCreateStamp(dbItemAddress._CreateOn, new SysId(dbItemAddress._CreateBy), dbItemAddress._CreateHost);
itemAddress.SetUpdateStamp(dbItemAddress._UpdateOn, new SysId(dbItemAddress._UpdateBy), dbItemAddress._UpdateHost);
itemAddress.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasItemAddress = "ItmSpt";
private void SetItemAddressColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.ItemAddress)
alias = aliasItemAddress;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetItemAddressColumnDfn(SaxItemAddress.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxItemAddress.Column.Pos:
SetItemAddressColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxItemAddress.Column.Id:
SetItemAddressColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.ItemType:
SetItemAddressColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.ItemType_Code:
SetItemAddressColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.ItemType_Desc:
SetItemAddressColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.ItemId:
SetItemAddressColDfn(columnDfn, "Item Id", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Address properties.
case SaxItemAddress.Column.Caption:
SetItemAddressColDfn(columnDfn, "Caption", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Caption, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.Line1:
SetItemAddressColDfn(columnDfn, "Line1", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.Line2:
SetItemAddressColDfn(columnDfn, "Line2", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Line2, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.Line3:
SetItemAddressColDfn(columnDfn, "Line3", 120, SaxDbDfn_Core.ColumnIdx.ItemAddress_Line3, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.Town:
SetItemAddressColDfn(columnDfn, "Town", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_Town, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.Province:
SetItemAddressColDfn(columnDfn, "Province", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_Province, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.Country:
SetItemAddressColDfn(columnDfn, "Country", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_Country, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.PostalCode:
SetItemAddressColDfn(columnDfn, "PostalCode", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.PhoneMain:
SetItemAddressColDfn(columnDfn, "PhoneMain", 100, SaxDbDfn_Core.ColumnIdx.ItemAddress_PhoneMain, ColumnAlignment.Left, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Location.
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxItemAddress.Column.Notes:
SetItemAddressColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.ItemAddress_Notes);
break;
case SaxItemAddress.Column.Flags:
SetItemAddressColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.ItemAddress_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxItemAddress.Column.Status:
SetItemAddressColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, ColumnAlignment.Center);
break;
case SaxItemAddress.Column.Status_Desc:
SetItemAddressColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, ColumnAlignment.Center);
break;
case SaxItemAddress.Column.Status_Ind:
SetItemAddressColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxItemAddress.Column.CreateOn_Date:
SetItemAddressColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxItemAddress.Column.UpdateOn_Date:
SetItemAddressColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ItemAddress_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetItemAddressQueryFilter(SaxItemAddress.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress) + " NOT IN (" + idsExcluded + ")");
// Address type.
if (prm.AddressType > 0)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_AddressType, aliasItemAddress) + "=" + ((int)prm.AddressType).ToString());
// Item Ids.
if (!prm.ItemIdsIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, aliasItemAddress) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemId, aliasItemAddress) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
// Address search.
if (!StringUtil.IsEmpty(prm.AddressSearch))
{
// Split filter into words.
List<String> searchFilter = new List<String>();
List<String> filterWords = prm.AddressSearch.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> organisationFilter = new List<String>();
organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'");
organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line2, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'");
organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line3, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'");
organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Town, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'");
organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Province, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'");
organisationFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(filterWord) + "%'");
searchFilter.Add(organisationFilter.Concat(" OR ", "(", ")"));
}
filter.Add(searchFilter.Concat(" AND ", "(", ")"));
}
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Notes, aliasItemAddress) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxItemAddress.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, aliasItemAddress) + GetItemAddressStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetItemAddressStatusCatFilterCondition(SaxItemAddress.StatusCat statusCat)
{
if (statusCat == SaxItemAddress.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxItemAddress.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxItemAddress.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxItemAddress.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetItemAddressSortColumns(SaxItemAddress.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for ItemAddress columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ItemAddress)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasItemAddress);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetItemAddressCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress) + " As " + aliasItemAddress, filter);
}
public override long GetItemAddressCount(SaxItemAddress.Params prm)
{
ClearErrorState();
return GetItemAddressCount(GetItemAddressQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxItemAddress> GetItemAddressList(SaxItemAddress.Params prm)
{
ClearErrorState();
List<SaxItemAddress> itemAddresss = new List<SaxItemAddress>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress), aliasItemAddress);
ItemAddress_Db dbItemAddress = new ItemAddress_Db(CoreDbInfo);
qry.Columns.AddRange(dbItemAddress.ExistingColumnNames);
qry.Filters.AddRange(GetItemAddressQueryFilter(prm));
qry.OrderBy.AddRange(GetItemAddressSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbItemAddress = new ItemAddress_Db(CoreDbInfo);
dbItemAddress.PopulateFrom(dbDataReader);
itemAddresss.Add(CreateItemAddress(dbItemAddress));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemAddresss;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteItemAddressQuery(List<ColumnDfn> columns, SaxItemAddress.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAddress), aliasItemAddress);
// Add columns as defined in query list.
if (columns.HasId(SaxItemAddress.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Id, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.ItemType) || columns.HasId(SaxItemAddress.Column.ItemType_Code) || columns.HasId(SaxItemAddress.Column.ItemType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemType, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.ItemId))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_ItemId, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.AddressType) || columns.HasId(SaxItemAddress.Column.AddressType_Code) || columns.HasId(SaxItemAddress.Column.AddressType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_AddressType, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Caption))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Caption, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Line1))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line1, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Line2))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line2, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Line3))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Line3, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Town))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Town, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Province))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Province, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Country))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Country, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.PostalCode))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_PostalCode, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.PhoneMain))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_PhoneMain, aliasItemAddress));
// ToDo Address Location columns.
// Common properties.
if (columns.HasId(SaxItemAddress.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Notes, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Flags, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.Status) || columns.HasId(SaxItemAddress.Column.Status_Desc) || columns.HasId(SaxItemAddress.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_Status, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_CreateOn, aliasItemAddress));
if (columns.HasId(SaxItemAddress.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAddress_UpdateOn, aliasItemAddress));
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetItemAddressQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetItemAddressSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,667 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxItemDataMgr_Dbas
{
//*******************************************************************
// Item Data Mgr - Item Sport
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxItemAssociation itemAssociation)
{
return new List<StringPair>()
{
new StringPair("ItemIdFrom", (Sax.DataItemType)itemAssociation.ItemIdFrom.Type + ": " + itemAssociation.ItemIdFrom.Id),
new StringPair("ItemIdTo", (Sax.DataItemType)itemAssociation.ItemIdTo.Type + ": " + itemAssociation.ItemIdTo.Id),
new StringPair("AssociationType",itemAssociation.AssociationType.ToString()),
new StringPair("Status",itemAssociation.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxItemAssociation CreateItemAssociation(ItemId itemIdFrom, ItemId itemIdTo, Sax.AssociationType associationType)
{
ClearErrorState();
return new SaxItemAssociation_Dbas(CoreDatabase, null, itemIdFrom, itemIdTo, associationType, 0);
}
private SaxItemAssociation_Dbas CreateItemAssociation(ItemAssociation_Db dbItemAssociation)
{
ClearErrorState();
ItemId itemIdFrom = new ItemId(dbItemAssociation._ItemTypeFrom, new SysId(dbItemAssociation._ItemIdFrom));
ItemId itemIdTo = new ItemId(dbItemAssociation._ItemTypeTo, new SysId(dbItemAssociation._ItemIdTo));
SaxItemAssociation_Dbas itemAssociation = new SaxItemAssociation_Dbas(CoreDatabase, new SysId(dbItemAssociation._Id), itemIdFrom, itemIdTo, (Sax.AssociationType)dbItemAssociation._AssociationType, (ushort)dbItemAssociation._Flags);
PopulateFrom(dbItemAssociation, itemAssociation);
return itemAssociation;
}
//-------------------------------------------------------------------
// Get item.
public override SaxItemAssociation GetItemAssociation(SaxItemAssociation.Params prm)
{
ClearErrorState();
return GetItemAssociation(GetItemAssociationQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxItemAssociation GetItemAssociation(String filter)
{
ClearErrorState();
long count = GetItemAssociationCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxItemAssociation itemAssociation = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemAssociation_Db dbItemAssociation = new ItemAssociation_Db(CoreDbInfo);
dbItemAssociation.PopulateFrom(dbCommand, aliasItemAssociation, filter);
itemAssociation = CreateItemAssociation(dbItemAssociation);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemAssociation;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidItemAssociationData(SaxItemAssociation.Data data, SaxItemAssociation.ErrField errField)
{
ClearErrorState();
if (!base.IsValidItemAssociationData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertItemAssociation(SaxItemAssociation itemAssociation, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemAssociation(itemAssociation)) return false;
if (SysId.IsValid(itemAssociation.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemAssociation_Db dbItemAssociation = new ItemAssociation_Db(CoreDbInfo);
PopulateTo(dbItemAssociation, itemAssociation, dbUpdateInfo);
if (ItemAssociation_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbItemAssociation._Id = CoreDatabase.GetNextIdFromTable("ItemAssociation");
}
dbItemAssociation.ExecuteInsertCommand(dbCommand);
itemAssociation.Id = new SysId(dbItemAssociation._Id);
itemAssociation.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(itemAssociation).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateItemAssociation(SaxItemAssociation itemAssociation, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemAssociation(itemAssociation)) return false;
if (!SysId.IsValid(itemAssociation.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!itemAssociation.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(itemAssociation).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemAssociation_Db dbItemAssociation = new ItemAssociation_Db(CoreDbInfo);
dbItemAssociation.PopulateFrom(dbCommand, aliasItemAssociation, "Id=" + SysId.ToString(itemAssociation.Id));
// ToDo SaxUpdateLogItemMonitor_ItemAssociation updateLogMonitor = new SaxUpdateLogItemMonitor_ItemAssociation(SessionContext, CreateItemAssociation(dbItemAssociation), dbUpdateInfo);
// Update item.
PopulateTo(dbItemAssociation, itemAssociation, dbUpdateInfo);
dbItemAssociation.ExecuteUpdateCommand(dbCommand);
itemAssociation.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(itemAssociation).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(itemAssociation);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool ItemAssociationCanBeDeleted(SaxItemAssociation itemAssociation)
{
ClearErrorState();
if (!base.ItemAssociationCanBeDeleted(itemAssociation)) return false;
return true;
}
public override bool DeleteItemAssociation(SaxItemAssociation itemAssociation, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!ItemAssociationCanBeDeleted(itemAssociation)) return false;
// Item Sports are logically deleted by changing the status.
itemAssociation.Status = SaStatus.Deleted;
return UpdateItemAssociation(itemAssociation, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemAssociation_Db dbItemAssociation = new ItemAssociation_Db(CoreDbInfo);
dbItemAssociation.PopulateFrom(dbCommand, aliasItemAssociation, "Id=" + itemAssociation.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAssociation) + " WHERE Id=" + SysId.ToString(itemAssociation.Id) + ";";
dbCommand.ExecuteNonQuery();
itemAssociation.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted.{GetLogProperties(itemAssociation).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(ItemAssociation_Db dbItemAssociation, SaxItemAssociation itemAssociation, DbUpdateInfo dbUpdateInfo)
{
dbItemAssociation._Id = SysId.ToInt(itemAssociation.Id);
dbItemAssociation._ItemTypeFrom = itemAssociation.ItemIdFrom.Type;
dbItemAssociation._ItemIdFrom = SysId.ToInt(itemAssociation.ItemIdFrom.Id);
dbItemAssociation._ItemTypeTo = itemAssociation.ItemIdTo.Type;
dbItemAssociation._ItemIdTo = SysId.ToInt(itemAssociation.ItemIdTo.Id);
dbItemAssociation._AssociationType = (short)itemAssociation.AssociationType;
// Common.
dbItemAssociation._Notes = itemAssociation.Notes;
dbItemAssociation._Status = SacsSystem.GetStatusCode(itemAssociation.Status);
dbItemAssociation._Flags = (short)itemAssociation.Flags;
if (!SysId.IsValid(itemAssociation.Id))
{
dbItemAssociation._CreateOn = DateTime.Now;
dbItemAssociation._CreateBy = dbUpdateInfo.UserId.ToInt();
dbItemAssociation._CreateHost = dbUpdateInfo.Host;
}
dbItemAssociation._UpdateOn = DateTime.Now;
dbItemAssociation._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbItemAssociation._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(ItemAssociation_Db dbItemAssociation, SaxItemAssociation itemAssociation)
{
//itemAssociation.Id = new SysId(dbItemAssociation._Id);
//itemAssociation.ItemIdFrom = new ItemId(dbItemAssociation._ItemTypeFrom, new SysId(dbItemAssociation._ItemIdFrom);
//itemAssociation.ItemIdTo = new ItemId(dbItemAssociation._ItemTypeTo, new SysId(dbItemAssociation._ItemIdTo);
//itemAssociation.AssociationType = (Sax.AssociationType)dbItemAssociation._AssociationType;
// Common.
itemAssociation.Notes = dbItemAssociation._Notes;
itemAssociation.Status = SacsSystem.GetStatusForCode(dbItemAssociation._Status);
itemAssociation.SetCreateStamp(dbItemAssociation._CreateOn, new SysId(dbItemAssociation._CreateBy), dbItemAssociation._CreateHost);
itemAssociation.SetUpdateStamp(dbItemAssociation._UpdateOn, new SysId(dbItemAssociation._UpdateBy), dbItemAssociation._UpdateHost);
itemAssociation.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasItemAssociation = "ItmAss";
private static readonly String aliasItemAssociation_OrganisationFrom = "ItmAss_OrgFr";
private static readonly String prefixItemAssociation_OrganisationFrom = aliasItemAssociation_OrganisationFrom + "_";
private static readonly String aliasItemAssociation_OrganisationTo = "ItmAss_OrgTo";
private static readonly String prefixItemAssociation_OrganisationTo = aliasItemAssociation_OrganisationTo + "_";
private void SetItemAssociationColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.ItemAssociation)
alias = aliasItemAssociation;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetItemAssociationColumnDfn(SaxItemAssociation.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxItemAssociation.Column.Pos:
SetItemAssociationColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxItemAssociation.Column.Id:
SetItemAssociationColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// 'From' Item Id.
case SaxItemAssociation.Column.ItemTypeFrom:
SetItemAssociationColDfn(columnDfn, "From item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeFrom, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.ItemTypeFrom_Code:
SetItemAssociationColDfn(columnDfn, "From item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeFrom, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.ItemTypeFrom_Desc:
SetItemAssociationColDfn(columnDfn, "From item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeFrom, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.ItemIdFrom:
SetItemAssociationColDfn(columnDfn, "From item Id", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdFrom, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// 'To' Item Id.
case SaxItemAssociation.Column.ItemTypeTo:
SetItemAssociationColDfn(columnDfn, "To item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeTo, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.ItemTypeTo_Code:
SetItemAssociationColDfn(columnDfn, "To item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeTo, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.ItemTypeTo_Desc:
SetItemAssociationColDfn(columnDfn, "To item type", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeTo, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.ItemIdTo:
SetItemAssociationColDfn(columnDfn, "To item Id", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdTo, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Specific item properties.
case SaxItemAssociation.Column.OrganisationFrom_Name:
SetItemAssociationColDfn(columnDfn, "From organisation", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasItemAssociation_OrganisationFrom, prefixItemAssociation_OrganisationFrom);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.OrganisationFrom_SportIdPrimary:
SetItemAssociationColDfn(columnDfn, "From org sport #", 80, SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasItemAssociation_OrganisationFrom, prefixItemAssociation_OrganisationFrom);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.OrganisationFrom_RegionIdPrimary:
SetItemAssociationColDfn(columnDfn, "From org region #", 80, SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasItemAssociation_OrganisationFrom, prefixItemAssociation_OrganisationFrom);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.OrganisationTo_Name:
SetItemAssociationColDfn(columnDfn, "To organisation", 120, SaxDbDfn_Core.ColumnIdx.Organisation_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasItemAssociation_OrganisationTo, prefixItemAssociation_OrganisationTo);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.OrganisationTo_SportIdPrimary:
SetItemAssociationColDfn(columnDfn, "To org sport #", 80, SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasItemAssociation_OrganisationTo, prefixItemAssociation_OrganisationTo);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.OrganisationTo_RegionIdPrimary:
SetItemAssociationColDfn(columnDfn, "To org region #", 80, SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary, ColumnAlignment.Right, DataValue.DataType.Long, aliasItemAssociation_OrganisationTo, prefixItemAssociation_OrganisationTo);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Association type.
case SaxItemAssociation.Column.AssociationType:
SetItemAssociationColDfn(columnDfn, "Type", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_AssociationType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.AssociationType_Code:
SetItemAssociationColDfn(columnDfn, "Type", 100, SaxDbDfn_Core.ColumnIdx.ItemAssociation_AssociationType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.AssociationType_Desc:
SetItemAssociationColDfn(columnDfn, "Type", 120, SaxDbDfn_Core.ColumnIdx.ItemAssociation_AssociationType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxItemAssociation.Column.Notes:
SetItemAssociationColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.ItemAssociation_Notes);
break;
case SaxItemAssociation.Column.Flags:
SetItemAssociationColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.ItemAssociation_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxItemAssociation.Column.Status:
SetItemAssociationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_Status, ColumnAlignment.Center);
break;
case SaxItemAssociation.Column.Status_Desc:
SetItemAssociationColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.ItemAssociation_Status, ColumnAlignment.Center);
break;
case SaxItemAssociation.Column.Status_Ind:
SetItemAssociationColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxItemAssociation.Column.CreateOn_Date:
SetItemAssociationColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxItemAssociation.Column.UpdateOn_Date:
SetItemAssociationColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ItemAssociation_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetItemAssociationQueryFilter(SaxItemAssociation.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Id, aliasItemAssociation) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Id, aliasItemAssociation) + " NOT IN (" + idsExcluded + ")");
// Item Ids - can be either 'From' or 'To'.
if (!prm.ItemIdsIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeFrom, aliasItemAssociation) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdFrom, aliasItemAssociation) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeTo, aliasItemAssociation) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdTo, aliasItemAssociation) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
// 'From' Item Ids.
if (!prm.ItemIdsFromIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsFromIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeFrom, aliasItemAssociation) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdFrom, aliasItemAssociation) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
// 'To' Item Ids.
if (!prm.ItemIdsToIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsToIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeTo, aliasItemAssociation) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdTo, aliasItemAssociation) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
// Association types.
if (!prm.AssociationTypesIncluded.IsEmpty())
{
String associationTypes = prm.AssociationTypesIncluded.Select(ItemAddressCanBeDeleted => ((int)ItemAddressCanBeDeleted).ToString()).ToList().Concat(",");
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_AssociationType, aliasItemAssociation) + " IN (" + associationTypes + ")");
}
// Status.
if (prm.StatusCat != SaxItemAssociation.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Status, aliasItemAssociation) + GetItemAssociationStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetItemAssociationStatusCatFilterCondition(SaxItemAssociation.StatusCat statusCat)
{
if (statusCat == SaxItemAssociation.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxItemAssociation.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxItemAssociation.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxItemAssociation.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetItemAssociationSortColumns(SaxItemAssociation.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for ItemAssociation columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ItemAssociation)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasItemAssociation);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Id, aliasItemAssociation) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetItemAssociationCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAssociation) + " As " + aliasItemAssociation, filter);
}
public override long GetItemAssociationCount(SaxItemAssociation.Params prm)
{
ClearErrorState();
return GetItemAssociationCount(GetItemAssociationQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxItemAssociation> GetItemAssociationList(SaxItemAssociation.Params prm)
{
ClearErrorState();
List<SaxItemAssociation> itemAssociations = new List<SaxItemAssociation>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAssociation), aliasItemAssociation);
ItemAssociation_Db dbItemAssociation = new ItemAssociation_Db(CoreDbInfo);
qry.Columns.AddRange(dbItemAssociation.ExistingColumnNames);
qry.Filters.AddRange(GetItemAssociationQueryFilter(prm));
qry.OrderBy.AddRange(GetItemAssociationSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbItemAssociation = new ItemAssociation_Db(CoreDbInfo);
dbItemAssociation.PopulateFrom(dbDataReader);
itemAssociations.Add(CreateItemAssociation(dbItemAssociation));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemAssociations;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteItemAssociationQuery(List<ColumnDfn> columns, SaxItemAssociation.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemAssociation), aliasItemAssociation);
// Add columns as defined in query list.
if (columns.HasId(SaxItemAssociation.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Id, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.ItemTypeFrom) || columns.HasId(SaxItemAssociation.Column.ItemTypeFrom_Code) || columns.HasId(SaxItemAssociation.Column.ItemTypeFrom_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeFrom, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.ItemIdFrom))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdFrom, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.ItemTypeTo) || columns.HasId(SaxItemAssociation.Column.ItemTypeTo_Code) || columns.HasId(SaxItemAssociation.Column.ItemTypeTo_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeTo, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.ItemIdTo))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdTo, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.AssociationType) || columns.HasId(SaxItemAssociation.Column.AssociationType_Code) || columns.HasId(SaxItemAssociation.Column.AssociationType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_AssociationType, aliasItemAssociation));
// Common properties.
if (columns.HasId(SaxItemAssociation.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Notes, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Flags, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.Status) || columns.HasId(SaxItemAssociation.Column.Status_Desc) || columns.HasId(SaxItemAssociation.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_Status, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_CreateOn, aliasItemAssociation));
if (columns.HasId(SaxItemAssociation.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_UpdateOn, aliasItemAssociation));
//---------------------------------------------------------------------
//
if (columns.HasId(SaxItemAssociation.Column.OrganisationFrom_Name))
{
// Organisation join.
DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasItemAssociation_OrganisationFrom);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeFrom, aliasItemAssociation) + "=" + (int)Sax.DataItemType.Organisation);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasItemAssociation_OrganisationFrom) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdFrom, aliasItemAssociation));
query.Joins.Add(joinOrganisation);
List<SaxDbDfn_Core.ColumnIdx> OrganisationCols = new List<SaxDbDfn_Core.ColumnIdx>();
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary);
foreach (var col in OrganisationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasItemAssociation_OrganisationFrom), prefixItemAssociation_OrganisationFrom + SaxDbDfn_Core.GetColumnName(col, false));
}
if (columns.HasId(SaxItemAssociation.Column.OrganisationTo_Name))
{
// Organisation join.
DbQueryJoin joinOrganisation = new DbQueryJoin(DbJoinType.LeftOuter);
joinOrganisation.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Organisation), aliasItemAssociation_OrganisationTo);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemTypeTo, aliasItemAssociation) + "=" + (int)Sax.DataItemType.Organisation);
joinOrganisation.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Organisation_Id, aliasItemAssociation_OrganisationTo) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemAssociation_ItemIdTo, aliasItemAssociation));
query.Joins.Add(joinOrganisation);
List<SaxDbDfn_Core.ColumnIdx> OrganisationCols = new List<SaxDbDfn_Core.ColumnIdx>();
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_Name);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_RegionIdPrimary);
OrganisationCols.Add(SaxDbDfn_Core.ColumnIdx.Organisation_SportIdPrimary);
foreach (var col in OrganisationCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasItemAssociation_OrganisationTo), prefixItemAssociation_OrganisationTo + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetItemAssociationQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetItemAssociationSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,590 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxItemDataMgr_Dbas
{
//*******************************************************************
// Item Data Mgr - Item Image
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxItemImage itemImage)
{
return new List<StringPair>()
{
new StringPair("Id", SysId.ToString(itemImage.Id)),
new StringPair("ItemId", (Sax.DataItemType)itemImage.ItemId.Type + ": " + itemImage.ItemId.Id),
new StringPair("ImageType", itemImage.ImageType.ToString()),
new StringPair("Status", itemImage.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxItemImage CreateItemImage(ItemId itemId, Sax.ImageType imageType)
{
ClearErrorState();
return new SaxItemImage_Dbas(CoreDatabase, null, itemId, imageType, 0);
}
private SaxItemImage_Dbas CreateItemImage(ItemImage_Db dbItemImage)
{
ClearErrorState();
ItemId itemId = new ItemId(dbItemImage._ItemType, new SysId(dbItemImage._ItemId));
SaxItemImage_Dbas itemImage = new SaxItemImage_Dbas(CoreDatabase, new SysId(dbItemImage._Id), itemId, (Sax.ImageType)dbItemImage._ImageType, (ushort)dbItemImage._Flags);
PopulateFrom(dbItemImage, itemImage);
return itemImage;
}
//-------------------------------------------------------------------
// Get item.
public override SaxItemImage GetItemImage(SaxItemImage.Params prm)
{
ClearErrorState();
return GetItemImage(GetItemImageQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxItemImage GetItemImage(String filter)
{
ClearErrorState();
long count = GetItemImageCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxItemImage itemImage = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemImage_Db dbItemImage = new ItemImage_Db(CoreDbInfo);
dbItemImage.PopulateFrom(dbCommand, aliasItemImage, filter);
itemImage = CreateItemImage(dbItemImage);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemImage;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidItemImageData(SaxItemImage.Data data, SaxItemImage.ErrField errField)
{
ClearErrorState();
if (!base.IsValidItemImageData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertItemImage(SaxItemImage itemImage, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemImage(itemImage)) return false;
if (SysId.IsValid(itemImage.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemImage_Db dbItemImage = new ItemImage_Db(CoreDbInfo);
PopulateTo(dbItemImage, itemImage, dbUpdateInfo);
if (ItemImage_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbItemImage._Id = CoreDatabase.GetNextIdFromTable("ItemImage");
}
dbItemImage.ExecuteInsertCommand(dbCommand);
itemImage.Id = new SysId(dbItemImage._Id);
itemImage.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(itemImage).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateItemImage(SaxItemImage itemImage, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemImage(itemImage)) return false;
if (!SysId.IsValid(itemImage.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!itemImage.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(itemImage).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemImage_Db dbItemImage = new ItemImage_Db(CoreDbInfo);
dbItemImage.PopulateFrom(dbCommand, aliasItemImage, "Id=" + SysId.ToString(itemImage.Id));
// ToDo SaxUpdateLogItemMonitor_ItemImage updateLogMonitor = new SaxUpdateLogItemMonitor_ItemImage(SessionContext, CreateItemImage(dbItemImage), dbUpdateInfo);
// Update item.
PopulateTo(dbItemImage, itemImage, dbUpdateInfo);
dbItemImage.ExecuteUpdateCommand(dbCommand);
itemImage.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(itemImage).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(itemImage);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool ItemImageCanBeDeleted(SaxItemImage itemImage)
{
ClearErrorState();
if (!base.ItemImageCanBeDeleted(itemImage)) return false;
return true;
}
public override bool DeleteItemImage(SaxItemImage itemImage, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!ItemImageCanBeDeleted(itemImage)) return false;
bool logicalDelete = true;
if (logicalDelete)
{
// Logical deletion.
itemImage.Status = SaStatus.Deleted;
return UpdateItemImage(itemImage, dbUpdateInfo);
}
else
{
// Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemImage_Db dbItemImage = new ItemImage_Db(CoreDbInfo);
dbItemImage.PopulateFrom(dbCommand, aliasItemImage, "Id=" + itemImage.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage) + " WHERE Id=" + SysId.ToString(itemImage.Id) + ";";
dbCommand.ExecuteNonQuery();
itemImage.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted.{GetLogProperties(itemImage).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(ItemImage_Db dbItemImage, SaxItemImage itemImage, DbUpdateInfo dbUpdateInfo)
{
dbItemImage._Id = SysId.ToInt(itemImage.Id);
dbItemImage._ItemType = itemImage.ItemId.Type;
dbItemImage._ItemId = SysId.ToInt(itemImage.ItemId.Id);
dbItemImage._ImageType = (short)itemImage.ImageType;
dbItemImage._ImageSeq = itemImage.ImageSeq;
dbItemImage._SessionUid = itemImage.SessionUid;
dbItemImage._ImageUid = itemImage.ImageUid;
dbItemImage._Filename = itemImage.Filename;
dbItemImage._Mime = itemImage.Mime;
dbItemImage._ContentType = itemImage.ContentType;
dbItemImage._Width = itemImage.Width;
dbItemImage._Height = itemImage.Height;
dbItemImage._ImageData = itemImage.ImageData;
// Common.
dbItemImage._Notes = itemImage.Notes;
dbItemImage._Status = SacsSystem.GetStatusCode(itemImage.Status);
dbItemImage._Flags = (short)itemImage.Flags;
if (!SysId.IsValid(itemImage.Id))
{
dbItemImage._CreateOn = DateTime.Now;
dbItemImage._CreateBy = dbUpdateInfo.UserId.ToInt();
dbItemImage._CreateHost = dbUpdateInfo.Host;
}
dbItemImage._UpdateOn = DateTime.Now;
dbItemImage._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbItemImage._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(ItemImage_Db dbItemImage, SaxItemImage itemImage)
{
itemImage.Id = new SysId(dbItemImage._Id);
//itemImage.ItemId = new ItemId(dbItemImage._ItemType, new SysId(dbItemImage._ItemId);
//itemImage.ImageType = (Sax.ImageType)dbItemImage._ImageType;
itemImage.ImageSeq = dbItemImage._ImageSeq;
itemImage.SessionUid = dbItemImage._SessionUid;
itemImage.ImageUid = dbItemImage._ImageUid;
itemImage.Filename = dbItemImage._Filename;
itemImage.Mime = dbItemImage._Mime;
itemImage.ContentType = dbItemImage._ContentType;
itemImage.Width = dbItemImage._Width;
itemImage.Height = dbItemImage._Height;
itemImage.ImageData = dbItemImage._ImageData;
// Common.
itemImage.Notes = dbItemImage._Notes;
itemImage.Status = SacsSystem.GetStatusForCode(dbItemImage._Status);
itemImage.SetCreateStamp(dbItemImage._CreateOn, new SysId(dbItemImage._CreateBy), dbItemImage._CreateHost);
itemImage.SetUpdateStamp(dbItemImage._UpdateOn, new SysId(dbItemImage._UpdateBy), dbItemImage._UpdateHost);
itemImage.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasItemImage = "ItmSpt";
private void SetItemImageColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.ItemImage)
alias = aliasItemImage;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetItemImageColumnDfn(SaxItemImage.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxItemImage.Column.Pos:
SetItemImageColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxItemImage.Column.Id:
SetItemImageColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.ItemType:
SetItemImageColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.ItemType_Code:
SetItemImageColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.ItemType_Desc:
SetItemImageColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.ItemId:
SetItemImageColDfn(columnDfn, "Item Id", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
// Image type.
case SaxItemImage.Column.ImageType:
SetItemImageColDfn(columnDfn, "Image type", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.ImageType_Code:
SetItemImageColDfn(columnDfn, "Image type", 100, SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.ImageType_Desc:
SetItemImageColDfn(columnDfn, "Image type", 120, SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, ColumnAlignment.Center, DataValue.DataType.String);
columnDfn.ReadOnly = true;
break;
// Image properties.
case SaxItemImage.Column.ImageSeq:
SetItemImageColDfn(columnDfn, "Seq", 60, SaxDbDfn_Core.ColumnIdx.ItemImage_ImageSeq, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.Filename:
SetItemImageColDfn(columnDfn, "Filename", 160, SaxDbDfn_Core.ColumnIdx.ItemImage_Filename);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.Mime:
SetItemImageColDfn(columnDfn, "Mime", 100, SaxDbDfn_Core.ColumnIdx.ItemImage_Mime);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.ContentType:
SetItemImageColDfn(columnDfn, "Content Type", 120, SaxDbDfn_Core.ColumnIdx.ItemImage_ContentType);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxItemImage.Column.Notes:
SetItemImageColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.ItemImage_Notes);
break;
case SaxItemImage.Column.Flags:
SetItemImageColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.ItemImage_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxItemImage.Column.Status:
SetItemImageColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_Status, ColumnAlignment.Center);
break;
case SaxItemImage.Column.Status_Desc:
SetItemImageColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.ItemImage_Status, ColumnAlignment.Center);
break;
case SaxItemImage.Column.Status_Ind:
SetItemImageColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxItemImage.Column.CreateOn_Date:
SetItemImageColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxItemImage.Column.UpdateOn_Date:
SetItemImageColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ItemImage_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetItemImageQueryFilter(SaxItemImage.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Id, aliasItemImage) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Id, aliasItemImage) + " NOT IN (" + idsExcluded + ")");
// Item Ids.
if (!prm.ItemIdsIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasItemImage) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasItemImage) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
// Image Type.
if (!prm.ImageTypesIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasItemImage) + " IN (" + prm.ImageTypesIncluded.Select(item => ((int)item).ToString()).Concat(",") + ")");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Notes, aliasItemImage) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxItemImage.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasItemImage) + GetItemImageStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetItemImageStatusCatFilterCondition(SaxItemImage.StatusCat statusCat)
{
if (statusCat == SaxItemImage.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxItemImage.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxItemImage.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxItemImage.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetItemImageSortColumns(SaxItemImage.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for ItemImage columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ItemImage)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasItemImage);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasItemImage) + " ASC");
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasItemImage) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetItemImageCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage) + " As " + aliasItemImage, filter);
}
public override long GetItemImageCount(SaxItemImage.Params prm)
{
ClearErrorState();
return GetItemImageCount(GetItemImageQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxItemImage> GetItemImageList(SaxItemImage.Params prm)
{
ClearErrorState();
List<SaxItemImage> itemImages = new List<SaxItemImage>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasItemImage);
ItemImage_Db dbItemImage = new ItemImage_Db(CoreDbInfo);
qry.Columns.AddRange(dbItemImage.ExistingColumnNames);
qry.Filters.AddRange(GetItemImageQueryFilter(prm));
qry.OrderBy.AddRange(GetItemImageSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbItemImage = new ItemImage_Db(CoreDbInfo);
dbItemImage.PopulateFrom(dbDataReader);
itemImages.Add(CreateItemImage(dbItemImage));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemImages;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteItemImageQuery(List<ColumnDfn> columns, SaxItemImage.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemImage), aliasItemImage);
// Add columns as defined in query list.
if (columns.HasId(SaxItemImage.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Id, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.ItemType) || columns.HasId(SaxItemImage.Column.ItemType_Code) || columns.HasId(SaxItemImage.Column.ItemType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemType, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.ItemId))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ItemId, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.ImageType))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageType, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.ImageSeq))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ImageSeq, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.Filename))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Filename, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.Mime))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Mime, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.ContentType))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_ContentType, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.Width))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Width, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.Height))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Height, aliasItemImage));
// Common properties.
if (columns.HasId(SaxItemImage.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Notes, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Flags, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.Status) || columns.HasId(SaxItemImage.Column.Status_Desc) || columns.HasId(SaxItemImage.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_Status, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_CreateOn, aliasItemImage));
if (columns.HasId(SaxItemImage.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemImage_UpdateOn, aliasItemImage));
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetItemImageQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetItemImageSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,553 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxItemDataMgr_Dbas
{
//*******************************************************************
// Item Data Mgr - Item Sport
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxItemProcess itemSport)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(itemSport.Id)),
new StringPair("ItemId", (Sax.DataItemType)itemSport.ItemId.Type + ": " + itemSport.ItemId.Id),
new StringPair("Sport",SysId.ToString(itemSport.SportId)),
new StringPair("Status",itemSport.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxItemProcess CreateItemSport()
{
ClearErrorState();
return new SaxItemSport_Dbas(CoreDatabase, null, null, null, 0);
}
private SaxItemSport_Dbas CreateItemSport(ItemSport_Db dbItemSport)
{
ClearErrorState();
ItemId itemId = new ItemId(dbItemSport._ItemType, new SysId(dbItemSport._ItemId));
SaxItemSport_Dbas itemSport = new SaxItemSport_Dbas(CoreDatabase, new SysId(dbItemSport._Id), itemId, new SysId(dbItemSport._SportId), (ushort)dbItemSport._Flags);
PopulateFrom(dbItemSport, itemSport);
return itemSport;
}
//-------------------------------------------------------------------
// Get item.
public override SaxItemProcess GetItemSport(SaxItemProcess.Params prm)
{
ClearErrorState();
return GetItemSport(GetItemSportQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxItemProcess GetItemSport(String filter)
{
ClearErrorState();
long count = GetItemSportCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxItemProcess itemSport = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemSport_Db dbItemSport = new ItemSport_Db(CoreDbInfo);
dbItemSport.PopulateFrom(dbCommand, aliasItemSport, filter);
itemSport = CreateItemSport(dbItemSport);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemSport;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidItemSportData(SaxItemProcess.Data data, SaxItemProcess.ErrField errField)
{
ClearErrorState();
if (!base.IsValidItemSportData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertItemSport(SaxItemProcess itemSport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemSport(itemSport)) return false;
if (SysId.IsValid(itemSport.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
ItemSport_Db dbItemSport = new ItemSport_Db(CoreDbInfo);
PopulateTo(dbItemSport, itemSport, dbUpdateInfo);
if (ItemSport_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbItemSport._Id = CoreDatabase.GetNextIdFromTable("ItemSport");
}
dbItemSport.ExecuteInsertCommand(dbCommand);
itemSport.Id = new SysId(dbItemSport._Id);
itemSport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(itemSport).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateItemSport(SaxItemProcess itemSport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidItemSport(itemSport)) return false;
if (!SysId.IsValid(itemSport.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!itemSport.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(itemSport).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemSport_Db dbItemSport = new ItemSport_Db(CoreDbInfo);
dbItemSport.PopulateFrom(dbCommand, aliasItemSport, "Id=" + SysId.ToString(itemSport.Id));
// ToDo SaxUpdateLogItemMonitor_ItemSport updateLogMonitor = new SaxUpdateLogItemMonitor_ItemSport(SessionContext, CreateItemSport(dbItemSport), dbUpdateInfo);
// Update item.
PopulateTo(dbItemSport, itemSport, dbUpdateInfo);
dbItemSport.ExecuteUpdateCommand(dbCommand);
itemSport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(itemSport).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(itemSport);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool ItemSportCanBeDeleted(SaxItemProcess itemSport)
{
ClearErrorState();
if (!base.ItemSportCanBeDeleted(itemSport)) return false;
return true;
}
public override bool DeleteItemSport(SaxItemProcess itemSport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!ItemSportCanBeDeleted(itemSport)) return false;
// Item Sports are logically deleted by changing the status.
itemSport.Status = SaStatus.Deleted;
return UpdateItemSport(itemSport, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
ItemSport_Db dbItemSport = new ItemSport_Db(CoreDbInfo);
dbItemSport.PopulateFrom(dbCommand, aliasItemSport, "Id=" + itemSport.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemSport) + " WHERE Id=" + SysId.ToString(itemSport.Id) + ";";
dbCommand.ExecuteNonQuery();
itemSport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(itemSport).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(ItemSport_Db dbItemSport, SaxItemProcess itemSport, DbUpdateInfo dbUpdateInfo)
{
dbItemSport._Id = SysId.ToInt(itemSport.Id);
dbItemSport._ItemType = itemSport.ItemId.Type;
dbItemSport._ItemId = SysId.ToInt(itemSport.ItemId.Id);
dbItemSport._SportId = SysId.ToInt(itemSport.SportId);
dbItemSport._ItemSportData = itemSport.ItemSportData;
// Common.
dbItemSport._Notes = itemSport.Notes;
dbItemSport._Status = SacsSystem.GetStatusCode(itemSport.Status);
dbItemSport._Flags = (short)itemSport.Flags;
if (!SysId.IsValid(itemSport.Id))
{
dbItemSport._CreateOn = DateTime.Now;
dbItemSport._CreateBy = dbUpdateInfo.UserId.ToInt();
dbItemSport._CreateHost = dbUpdateInfo.Host;
}
dbItemSport._UpdateOn = DateTime.Now;
dbItemSport._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbItemSport._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(ItemSport_Db dbItemSport, SaxItemProcess itemSport)
{
//itemSport.Id = new SysId(dbItemSport._Id);
//itemSport.ItemId = new ItemId(dbItemSport._ItemType, new SysId(dbItemSport._ItemId);
//itemSport.SportId = new SysId(dbItemSport._SportId);
itemSport.ItemSportData = dbItemSport._ItemSportData;
// Common.
itemSport.Notes = dbItemSport._Notes;
itemSport.Status = SacsSystem.GetStatusForCode(dbItemSport._Status);
itemSport.SetCreateStamp(dbItemSport._CreateOn, new SysId(dbItemSport._CreateBy), dbItemSport._CreateHost);
itemSport.SetUpdateStamp(dbItemSport._UpdateOn, new SysId(dbItemSport._UpdateBy), dbItemSport._UpdateHost);
itemSport.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasItemSport = "ItmSpt";
private static readonly String aliasItemSport_Sport = "ItmSpt_Spt";
private static readonly String prefixItemSport_Sport = "ItmSpt_Spt_";
private void SetItemSportColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.ItemSport)
alias = aliasItemSport;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetItemSportColumnDfn(SaxItemProcess.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxItemProcess.Column.Pos:
SetItemSportColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxItemProcess.Column.Id:
SetItemSportColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemProcess.Column.ItemType:
SetItemSportColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_ItemType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemProcess.Column.ItemType_Code:
SetItemSportColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_ItemType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemProcess.Column.ItemType_Desc:
SetItemSportColDfn(columnDfn, "Item type", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_ItemType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxItemProcess.Column.ItemId:
SetItemSportColDfn(columnDfn, "Item Id", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_ItemId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxItemProcess.Column.SportId:
SetItemSportColDfn(columnDfn, "Sport Id", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_SportId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Sport properties.
case SaxItemProcess.Column.Sport_Name:
SetItemSportColDfn(columnDfn, "Sport", 120, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasItemSport_Sport, prefixItemSport_Sport);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxItemProcess.Column.Notes:
SetItemSportColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.ItemSport_Notes);
break;
case SaxItemProcess.Column.Flags:
SetItemSportColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.ItemSport_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxItemProcess.Column.Status:
SetItemSportColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_Status, ColumnAlignment.Center);
break;
case SaxItemProcess.Column.Status_Desc:
SetItemSportColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.ItemSport_Status, ColumnAlignment.Center);
break;
case SaxItemProcess.Column.Status_Ind:
SetItemSportColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxItemProcess.Column.CreateOn_Date:
SetItemSportColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxItemProcess.Column.UpdateOn_Date:
SetItemSportColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.ItemSport_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetItemSportQueryFilter(SaxItemProcess.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Id, aliasItemSport) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Id, aliasItemSport) + " NOT IN (" + idsExcluded + ")");
// Item Ids.
if (!prm.ItemIdsIncluded.IsEmpty())
{
List<String> itemIdFilters = new List<string>();
foreach (ItemId itemId in prm.ItemIdsIncluded)
{
if (!ItemId.IsValid(itemId)) continue;
String itemIdFilter =
SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_ItemType, aliasItemSport) + "=" + itemId.Type +
" AND " + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_ItemId, aliasItemSport) + "=" + SysId.ToInt(itemId.Id);
itemIdFilters.Add(itemIdFilter);
}
if (!itemIdFilters.IsEmpty())
filter.Add(itemIdFilters.Concat(" OR ", "(", ")"));
}
// Sport Ids.
String sportIdsIncluded = prm.SportIdsIncluded.Concat(",");
if (!sportIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_SportId, aliasItemSport) + " IN (" + sportIdsIncluded + ")");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Notes, aliasItemSport) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxItemProcess.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Status, aliasItemSport) + GetItemSportStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetItemSportStatusCatFilterCondition(SaxItemProcess.StatusCat statusCat)
{
if (statusCat == SaxItemProcess.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxItemProcess.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxItemProcess.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxItemProcess.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetItemSportSortColumns(SaxItemProcess.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for ItemSport columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.ItemSport)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasItemSport);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Id, aliasItemSport) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetItemSportCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemSport) + " As " + aliasItemSport, filter);
}
public override long GetItemSportCount(SaxItemProcess.Params prm)
{
ClearErrorState();
return GetItemSportCount(GetItemSportQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxItemProcess> GetItemSportList(SaxItemProcess.Params prm)
{
ClearErrorState();
List<SaxItemProcess> itemSports = new List<SaxItemProcess>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemSport), aliasItemSport);
ItemSport_Db dbItemSport = new ItemSport_Db(CoreDbInfo);
qry.Columns.AddRange(dbItemSport.ExistingColumnNames);
qry.Filters.AddRange(GetItemSportQueryFilter(prm));
qry.OrderBy.AddRange(GetItemSportSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbItemSport = new ItemSport_Db(CoreDbInfo);
dbItemSport.PopulateFrom(dbDataReader);
itemSports.Add(CreateItemSport(dbItemSport));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return itemSports;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteItemSportQuery(List<ColumnDfn> columns, SaxItemProcess.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.ItemSport), aliasItemSport);
// Add columns as defined in query list.
if (columns.HasId(SaxItemProcess.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Id, aliasItemSport));
if (columns.HasId(SaxItemProcess.Column.ItemType) || columns.HasId(SaxItemProcess.Column.ItemType_Code) || columns.HasId(SaxItemProcess.Column.ItemType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_ItemType, aliasItemSport));
if (columns.HasId(SaxItemProcess.Column.ItemId))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_ItemId, aliasItemSport));
bool hasSportCols = (columns.HasId(SaxItemProcess.Column.Sport_Name));
if (columns.HasId(SaxItemProcess.Column.SportId) || hasSportCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_SportId, aliasItemSport));
// Common properties.
if (columns.HasId(SaxItemProcess.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Notes, aliasItemSport));
if (columns.HasId(SaxItemProcess.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Flags, aliasItemSport));
if (columns.HasId(SaxItemProcess.Column.Status) || columns.HasId(SaxItemProcess.Column.Status_Desc) || columns.HasId(SaxItemProcess.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_Status, aliasItemSport));
if (columns.HasId(SaxItemProcess.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_CreateOn, aliasItemSport));
if (columns.HasId(SaxItemProcess.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_UpdateOn, aliasItemSport));
//---------------------------------------------------------------------
// Sport.
if (hasSportCols)
{
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasItemSport_Sport);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasItemSport_Sport) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.ItemSport_SportId, aliasItemSport));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasItemSport_Sport), prefixItemSport_Sport + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetItemSportQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetItemSportSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,28 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
public partial class SaxItemDataMgr_Dbas : SaxItemDataMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SaxItemDataMgr_Dbas(SaxSessionContext sessionContext, SaxInternals internals) :
base(sessionContext, internals)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,596 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxReferenceMgr_Dbas
{
//*******************************************************************
// Reference Mgr - Region
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxRegion region)
{
return new List<StringPair>()
{
new StringPair("Id", SysId.ToString(region.Id)),
new StringPair("ISO2", region.CountryIso2Code),
new StringPair("Name", region.Name),
new StringPair("Status", region.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxRegion CreateRegion()
{
ClearErrorState();
return new SaxRegion_Dbas(CoreDatabase, null, 0);
}
private SaxRegion_Dbas CreateRegion(Region_Db dbRegion)
{
ClearErrorState();
SaxRegion_Dbas region = new SaxRegion_Dbas(CoreDatabase, new SysId(dbRegion._Id), (UInt16)dbRegion._Flags);
PopulateFrom(dbRegion, region);
return region;
}
//-------------------------------------------------------------------
// Get item.
public override SaxRegion GetRegion(SaxRegion.Params prm)
{
ClearErrorState();
return GetRegion(GetRegionQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxRegion GetRegion(String filter)
{
ClearErrorState();
long count = GetRegionCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxRegion region = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Region_Db dbRegion = new Region_Db(CoreDbInfo);
dbRegion.PopulateFrom(dbCommand, aliasRegion, filter);
region = CreateRegion(dbRegion);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return region;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidRegionData(SaxRegion.Data data, SaxRegion.ErrField errField)
{
ClearErrorState();
if (!base.IsValidRegionData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertRegion(SaxRegion region, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidRegion(region)) return false;
if (SysId.IsValid(region.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Region_Db dbRegion = new Region_Db(CoreDbInfo);
PopulateTo(dbRegion, region, dbUpdateInfo);
if (Region_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbRegion._Id = CoreDatabase.GetNextIdFromTable("Region");
}
dbRegion.ExecuteInsertCommand(dbCommand);
region.Id = new SysId(dbRegion._Id);
region.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(region).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateRegion(SaxRegion region, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidRegion(region)) return false;
if (!SysId.IsValid(region.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!region.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(region).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Region_Db dbRegion = new Region_Db(CoreDbInfo);
dbRegion.PopulateFrom(dbCommand, aliasRegion, "Id=" + SysId.ToString(region.Id));
// ToDo SaxUpdateLogItemMonitor_Region updateLogMonitor = new SaxUpdateLogItemMonitor_Region(SessionContext, CreateRegion(dbRegion), dbUpdateInfo);
// Update item.
PopulateTo(dbRegion, region, dbUpdateInfo);
dbRegion.ExecuteUpdateCommand(dbCommand);
region.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(region).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(region);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool RegionCanBeDeleted(SaxRegion region)
{
ClearErrorState();
if (!base.RegionCanBeDeleted(region)) return false;
return true;
}
public override bool DeleteRegion(SaxRegion region, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!RegionCanBeDeleted(region)) return false;
// Regions are logically deleted by changing the status.
region.Status = SaStatus.Deleted;
return UpdateRegion(region, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Region_Db dbRegion = new Region_Db(CoreDbInfo);
dbRegion.PopulateFrom(dbCommand, aliasRegion, "Id=" + region.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region) + " WHERE Id=" + SysId.ToString(region.Id) + ";";
dbCommand.ExecuteNonQuery();
region.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(region).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Region_Db dbRegion, SaxRegion region, DbUpdateInfo dbUpdateInfo)
{
dbRegion._Id = SysId.ToInt(region.Id);
dbRegion._RegionType = (short)region.RegionType;
dbRegion._CountryIso2Code = region.CountryIso2Code;
dbRegion._Name = region.Name;
dbRegion._Latitude = region.Latitude;
dbRegion._Longitude = region.Longitude;
dbRegion._RegionIdParent = SysId.ToInt(region.RegionIdParent);
dbRegion._Notes = region.Notes;
dbRegion._Status = SacsSystem.GetStatusCode(region.Status);
dbRegion._Flags = (short)region.Flags;
if (!SysId.IsValid(region.Id))
{
dbRegion._CreateOn = DateTime.Now;
dbRegion._CreateBy = dbUpdateInfo.UserId.ToInt();
dbRegion._CreateHost = dbUpdateInfo.Host;
}
dbRegion._UpdateOn = DateTime.Now;
dbRegion._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbRegion._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Region_Db dbRegion, SaxRegion region)
{
//region.Id = new SysId(dbRegion._Id);
region.RegionType = (Sax.RegionType)dbRegion._RegionType;
region.CountryIso2Code = dbRegion._CountryIso2Code;
region.Name = dbRegion._Name;
region.Latitude = dbRegion._Latitude;
region.Longitude = dbRegion._Longitude;
region.RegionIdParent = new SysId(dbRegion._RegionIdParent);
region.Notes = dbRegion._Notes;
region.Status = SacsSystem.GetStatusForCode(dbRegion._Status);
region.SetCreateStamp(dbRegion._CreateOn, new SysId(dbRegion._CreateBy), dbRegion._CreateHost);
region.SetUpdateStamp(dbRegion._UpdateOn, new SysId(dbRegion._UpdateBy), dbRegion._UpdateHost);
region.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasRegion = "Rgn";
private static readonly String aliasRegion_Parent = "PrtRgn";
private static readonly String prefixRegion_Parent = "PrtRgn_";
private static readonly String colRegion_ChildRegion_Count = "Rgn_ChildRegionCount";
private void SetRegionColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.Region)
alias = aliasRegion;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetRegionColumnDfn(SaxRegion.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxRegion.Column.Pos:
SetRegionColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxRegion.Column.Id:
SetRegionColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.Region_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxRegion.Column.RegionType:
SetRegionColDfn(columnDfn, "Type", 80, SaxDbDfn_Core.ColumnIdx.Region_RegionType, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxRegion.Column.RegionType_Desc:
SetRegionColDfn(columnDfn, "Type", 100, SaxDbDfn_Core.ColumnIdx.Region_RegionType, ColumnAlignment.Center, DataValue.DataType.String);
break;
case SaxRegion.Column.CountryIso2Code:
SetRegionColDfn(columnDfn, "ISO2", 60, SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code, ColumnAlignment.Center);
break;
case SaxRegion.Column.Name:
SetRegionColDfn(columnDfn, "Name", 120, SaxDbDfn_Core.ColumnIdx.Region_Name);
break;
//-----------------------------------------------------------
// Parent Region.
case SaxRegion.Column.RegionIdParent:
SetRegionColDfn(columnDfn, "Parent Id", 80, SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, ColumnAlignment.Right, DataValue.DataType.Long);
break;
case SaxRegion.Column.Parent_RegionType:
SetRegionColDfn(columnDfn, "Parent type", 80, SaxDbDfn_Core.ColumnIdx.Region_RegionType, ColumnAlignment.Center, DataValue.DataType.Long, aliasRegion_Parent, prefixRegion_Parent);
columnDfn.ReadOnly = true;
break;
case SaxRegion.Column.Parent_RegionType_Desc:
SetRegionColDfn(columnDfn, "Parent type", 100, SaxDbDfn_Core.ColumnIdx.Region_RegionType, ColumnAlignment.Center, DataValue.DataType.String, aliasRegion_Parent, prefixRegion_Parent);
columnDfn.ReadOnly = true;
break;
case SaxRegion.Column.Parent_Name:
SetRegionColDfn(columnDfn, "Parent", 120, SaxDbDfn_Core.ColumnIdx.Region_Name, ColumnAlignment.Left, DataValue.DataType.String, aliasRegion_Parent, prefixRegion_Parent);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
case SaxRegion.Column.ChildRegionCount:
SetRegionColDfn(columnDfn, "Sub regions", 90, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.DataName = colRegion_ChildRegion_Count;
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Common properties.
case SaxRegion.Column.Notes:
SetRegionColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.Region_Notes);
break;
case SaxRegion.Column.Flags:
SetRegionColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.Region_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxRegion.Column.Status:
SetRegionColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Region_Status, ColumnAlignment.Center);
break;
case SaxRegion.Column.Status_Desc:
SetRegionColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.Region_Status, ColumnAlignment.Center);
break;
case SaxRegion.Column.Status_Ind:
SetRegionColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Region_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxRegion.Column.CreateOn_Date:
SetRegionColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.Region_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxRegion.Column.UpdateOn_Date:
SetRegionColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.Region_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetRegionQueryFilter(SaxRegion.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasRegion) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasRegion) + " NOT IN (" + idsExcluded + ")");
// Parent Region Ids.
String includedParentRegionIds = prm.ParentRegionIdsIncluded.Concat(",");
if (!includedParentRegionIds.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion) + " IN (" + includedParentRegionIds + ")");
// Region type.
if ((int)prm.RegionType > 0)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionType, aliasRegion) + "=" + (int)prm.RegionType);
// ISO 2 codes.
if (!prm.CountryIso2CodesIncluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code, aliasRegion) + " IN (" + DbQuery.FormatForIn(prm.CountryIso2CodesIncluded, true, false) + ")");
if (!prm.CountryIso2CodesExcluded.IsEmpty())
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code, aliasRegion) + " NOT IN (" + DbQuery.FormatForIn(prm.CountryIso2CodesExcluded, true, false) + ")");
// Generic filter.
if (!StringUtil.IsEmpty(prm.RegionFilter))
{
// Split filter into words.
List<String> filterWords = prm.RegionFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> regionFilter = new List<String>();
regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code, aliasRegion) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
regionFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Name, aliasRegion) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
filter.Add(regionFilter.Concat(" OR ", "(", ")"));
}
}
// Name.
if (!StringUtil.IsEmpty(prm.NameFull))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Name, aliasRegion) + "='" + DbQuery.FormatForCondition(prm.NameFull) + "'");
if (!StringUtil.IsEmpty(prm.NamePartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Name, aliasRegion) + " Like '%" + DbQuery.FormatForLike(prm.NamePartial, true) + "%'");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Notes, aliasRegion) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxRegion.StatusCat.Any)
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Status, aliasRegion) + GetRegionStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetRegionStatusCatFilterCondition(SaxRegion.StatusCat statusCat)
{
if (statusCat == SaxRegion.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxRegion.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxRegion.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxRegion.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetRegionSortColumns(SaxRegion.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for Region columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.Region)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasRegion);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasRegion) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetRegionCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region) + " As " + aliasRegion, filter);
}
public override long GetRegionCount(SaxRegion.Params prm)
{
ClearErrorState();
return GetRegionCount(GetRegionQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxRegion> GetRegionList(SaxRegion.Params prm)
{
ClearErrorState();
List<SaxRegion> userReferences = new List<SaxRegion>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasRegion);
Region_Db dbRegion = new Region_Db(CoreDbInfo);
qry.Columns.AddRange(dbRegion.ExistingColumnNames);
qry.Filters.AddRange(GetRegionQueryFilter(prm));
qry.OrderBy.AddRange(GetRegionSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbRegion = new Region_Db(CoreDbInfo);
dbRegion.PopulateFrom(dbDataReader);
userReferences.Add(CreateRegion(dbRegion));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userReferences;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteRegionQuery(List<ColumnDfn> columns, SaxRegion.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasRegion);
// Add columns as defined in query list.
if (columns.HasId(SaxRegion.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasRegion));
if (columns.HasId(SaxRegion.Column.RegionType) || columns.HasId(SaxRegion.Column.RegionType_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionType, aliasRegion));
if (columns.HasId(SaxRegion.Column.CountryIso2Code))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code, aliasRegion));
if (columns.HasId(SaxRegion.Column.Name))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Name, aliasRegion));
bool hasParentRegionCols = columns.HasId(SaxRegion.Column.Parent_RegionType) || columns.HasId(SaxRegion.Column.Parent_RegionType_Desc) || columns.HasId(SaxRegion.Column.Parent_Name);
if (columns.HasId(SaxRegion.Column.RegionIdParent) || hasParentRegionCols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion));
// Common properties.
if (columns.HasId(SaxRegion.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Notes, aliasRegion));
if (columns.HasId(SaxRegion.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Flags, aliasRegion));
if (columns.HasId(SaxRegion.Column.Status) || columns.HasId(SaxRegion.Column.Status_Desc) || columns.HasId(SaxRegion.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Status, aliasRegion));
if (columns.HasId(SaxRegion.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_CreateOn, aliasRegion));
if (columns.HasId(SaxRegion.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_UpdateOn, aliasRegion));
//---------------------------------------------------------------------
// Parent Region.
if (hasParentRegionCols)
{
DbQueryJoin joinParentRegion = new DbQueryJoin(DbJoinType.LeftOuter);
joinParentRegion.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasRegion_Parent);
joinParentRegion.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasRegion_Parent) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasRegion));
query.Joins.Add(joinParentRegion);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_RegionType);
cols.Add(SaxDbDfn_Core.ColumnIdx.Region_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasRegion_Parent), prefixRegion_Parent + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Child Region count.
if (columns.HasId(SaxRegion.Column.ChildRegionCount))
{
String aliasCount = "aChildRgn";
DbQuery queryCount = new DbQuery(CoreDatabase.DbmsType);
queryCount.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Region), aliasCount);
queryCount.Columns.Add("Count(*)");
queryCount.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_RegionIdParent, aliasCount) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Region_Id, aliasRegion));
query.Columns.Add("(" + queryCount.BuildQuery() + ")", colRegion_ChildRegion_Count);
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetRegionQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetRegionSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,574 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using Saxonite.Net.Standard.Dbas.Bus;
using Saxonite.Net.Standard.Dbas.Internal;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Sarand.Net.Standard.Base.Utils;
using System.Linq;
using Saxonite.Net.Standard.Dbas.Internal.Core;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
partial class SaxReferenceMgr_Dbas
{
//*******************************************************************
// Reference Mgr - Sport
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxSport sport)
{
return new List<StringPair>()
{
new StringPair("Id", SysId.ToString(sport.Id)),
new StringPair("Name", sport.Name),
new StringPair("Status", sport.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxSport CreateSport()
{
ClearErrorState();
return new SaxSport_Dbas(CoreDatabase, null, 0);
}
private SaxSport_Dbas CreateSport(Sport_Db dbSport)
{
ClearErrorState();
SaxSport_Dbas sport = new SaxSport_Dbas(CoreDatabase, new SysId(dbSport._Id), (UInt16)dbSport._Flags);
PopulateFrom(dbSport, sport);
return sport;
}
//-------------------------------------------------------------------
// Get item.
public override SaxSport GetSport(SaxSport.Params prm)
{
ClearErrorState();
return GetSport(GetSportQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxSport GetSport(String filter)
{
ClearErrorState();
long count = GetSportCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxSport sport = null;
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Sport_Db dbSport = new Sport_Db(CoreDbInfo);
dbSport.PopulateFrom(dbCommand, aliasSport, filter);
sport = CreateSport(dbSport);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return sport;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidSportData(SaxSport.Data data, SaxSport.ErrField errField)
{
ClearErrorState();
if (!base.IsValidSportData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertSport(SaxSport sport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidSport(sport)) return false;
if (SysId.IsValid(sport.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
Sport_Db dbSport = new Sport_Db(CoreDbInfo);
PopulateTo(dbSport, sport, dbUpdateInfo);
if (Sport_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
// ToDo dbSport._Id = CoreDatabase.GetNextIdFromTable("Sport");
}
dbSport.ExecuteInsertCommand(dbCommand);
sport.Id = new SysId(dbSport._Id);
sport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(sport).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateSport(SaxSport sport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidSport(sport)) return false;
if (!SysId.IsValid(sport.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!sport.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(sport).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Sport_Db dbSport = new Sport_Db(CoreDbInfo);
dbSport.PopulateFrom(dbCommand, aliasSport, "Id=" + SysId.ToString(sport.Id));
// ToDo SaxUpdateLogItemMonitor_Sport updateLogMonitor = new SaxUpdateLogItemMonitor_Sport(SessionContext, CreateSport(dbSport), dbUpdateInfo);
// Update item.
PopulateTo(dbSport, sport, dbUpdateInfo);
dbSport.ExecuteUpdateCommand(dbCommand);
sport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(sport).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(sport);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool SportCanBeDeleted(SaxSport sport)
{
ClearErrorState();
if (!base.SportCanBeDeleted(sport)) return false;
return true;
}
public override bool DeleteSport(SaxSport sport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!SportCanBeDeleted(sport)) return false;
// Sports are logically deleted by changing the status.
sport.Status = SaStatus.Deleted;
return UpdateSport(sport, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
Sport_Db dbSport = new Sport_Db(CoreDbInfo);
dbSport.PopulateFrom(dbCommand, aliasSport, "Id=" + sport.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport) + " WHERE Id=" + SysId.ToString(sport.Id) + ";";
dbCommand.ExecuteNonQuery();
sport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(sport).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(Sport_Db dbSport, SaxSport sport, DbUpdateInfo dbUpdateInfo)
{
dbSport._Id = SysId.ToInt(sport.Id);
dbSport._Grouping = (short)sport.Grouping;
dbSport._SportIdParent = SysId.ToInt(sport.SportIdParent);
dbSport._Name = sport.Name;
dbSport._SpecialityLabel = (short)sport.SpecialityLabel;
// Common properties.
dbSport._Notes = sport.Notes;
dbSport._Status = SacsSystem.GetStatusCode(sport.Status);
dbSport._Flags = (short)sport.Flags;
if (!SysId.IsValid(sport.Id))
{
dbSport._CreateOn = DateTime.Now;
dbSport._CreateBy = dbUpdateInfo.UserId.ToInt();
dbSport._CreateHost = dbUpdateInfo.Host;
}
dbSport._UpdateOn = DateTime.Now;
dbSport._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbSport._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(Sport_Db dbSport, SaxSport sport)
{
//sport.Id = new SysId(dbSport._Id);
sport.Grouping = (Sax.SportGrouping)(dbSport._Grouping ?? (int)Sax.SportGrouping.Specific);
sport.SportIdParent = new SysId(dbSport._SportIdParent ?? 0);
sport.Name = dbSport._Name;
sport.SpecialityLabel = (Sax.SportSpecialityLabel)(dbSport._SpecialityLabel ?? 0);
// Common properties.
sport.Notes = dbSport._Notes;
sport.Status = SacsSystem.GetStatusForCode(dbSport._Status);
sport.SetCreateStamp(dbSport._CreateOn, new SysId(dbSport._CreateBy), dbSport._CreateHost);
sport.SetUpdateStamp(dbSport._UpdateOn, new SysId(dbSport._UpdateBy), dbSport._UpdateHost);
sport.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasSport = "Spt";
private static readonly String aliasSport_Parent = "Spt_Prt";
private static readonly String prefixSport_Parent = aliasSport_Parent + "_";
//private static readonly String colSport_AssociatedData_Count = "UsrAct_AD_Count";
private void SetSportColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Core.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Core.GetTableForColumn(dbCol) == SaxDbDfn_Core.TableIdx.Sport)
alias = aliasSport;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Core.GetColumnName(dbCol, false), SaxDbDfn_Core.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Core.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Core.GetColTextLen(dbCol);
}
public override ColumnDfn GetSportColumnDfn(SaxSport.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
// Identification.
case SaxSport.Column.Pos:
SetSportColDfn(columnDfn, "Pos", 60, SaxDbDfn_Core.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxSport.Column.Id:
SetSportColDfn(columnDfn, "Id", 80, SaxDbDfn_Core.ColumnIdx.Sport_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Properties.
case SaxSport.Column.Grouping:
SetSportColDfn(columnDfn, "Grouping", 80, SaxDbDfn_Core.ColumnIdx.Sport_Grouping, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxSport.Column.Grouping_Desc:
SetSportColDfn(columnDfn, "Grouping", 100, SaxDbDfn_Core.ColumnIdx.Sport_Grouping, ColumnAlignment.Center);
break;
case SaxSport.Column.SportIdParent:
SetSportColDfn(columnDfn, "Parent #", 60, SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxSport.Column.ParentSport_Name:
SetSportColDfn(columnDfn, "Parent", 120, SaxDbDfn_Core.ColumnIdx.Sport_Name, ColumnAlignment.Center, DataValue.DataType.String, aliasSport_Parent, prefixSport_Parent);
columnDfn.ReadOnly = true;
break;
case SaxSport.Column.Name:
SetSportColDfn(columnDfn, "Name", 120, SaxDbDfn_Core.ColumnIdx.Sport_Name);
break;
case SaxSport.Column.SpecialityLabel:
SetSportColDfn(columnDfn, "Speciality label", 80, SaxDbDfn_Core.ColumnIdx.Sport_SpecialityLabel, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxSport.Column.SpecialityLabel_Desc:
SetSportColDfn(columnDfn, "Speciality label", 100, SaxDbDfn_Core.ColumnIdx.Sport_SpecialityLabel, ColumnAlignment.Center);
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxSport.Column.Notes:
SetSportColDfn(columnDfn, "Notes", 240, SaxDbDfn_Core.ColumnIdx.Sport_Notes);
break;
case SaxSport.Column.Flags:
SetSportColDfn(columnDfn, "Flags", 60, SaxDbDfn_Core.ColumnIdx.Sport_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxSport.Column.Status:
SetSportColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Sport_Status, ColumnAlignment.Center);
break;
case SaxSport.Column.Status_Desc:
SetSportColDfn(columnDfn, "Status", 90, SaxDbDfn_Core.ColumnIdx.Sport_Status, ColumnAlignment.Center);
break;
case SaxSport.Column.Status_Ind:
SetSportColDfn(columnDfn, "Status", 80, SaxDbDfn_Core.ColumnIdx.Sport_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxSport.Column.CreateOn_Date:
SetSportColDfn(columnDfn, "Created", 80, SaxDbDfn_Core.ColumnIdx.Sport_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxSport.Column.UpdateOn_Date:
SetSportColDfn(columnDfn, "Updated", 80, SaxDbDfn_Core.ColumnIdx.Sport_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetSportQueryFilter(SaxSport.Params prm)
{
List<String> filter = new List<String>();
String colId = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasSport);
// Item Ids.
if (prm.IdsIncluded.HasValidIds())
filter.Add($"{colId} IN ({prm.IdsIncluded.Concat(",")})");
if (prm.IdsExcluded.HasValidIds())
filter.Add($"{colId} NOT IN ({prm.IdsExcluded.Concat(",")})");
// Grouping.
if (prm.SportGroupingCat != SaxSport.SportGroupingCat.Any)
{
String colGrouping = SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Grouping, aliasSport);
String isNullGrouping = $"IsNull({colGrouping},{(int)Sax.SportGrouping.Specific})";
if (prm.SportGroupingCat == SaxSport.SportGroupingCat.Specific)
filter.Add($"{isNullGrouping} IN ({(int)Sax.SportGrouping.Specific})");
else if (prm.SportGroupingCat == SaxSport.SportGroupingCat.Banner)
filter.Add($"{isNullGrouping} IN ({(int)Sax.SportGrouping.Banner})");
else if (prm.SportGroupingCat == SaxSport.SportGroupingCat.BannerOrSpecific)
filter.Add($"{isNullGrouping} IN ({(int)Sax.SportGrouping.Specific},{(int)Sax.SportGrouping.Banner})");
else if (prm.SportGroupingCat == SaxSport.SportGroupingCat.Group)
filter.Add($"{isNullGrouping} IN ({(int)Sax.SportGrouping.Group})");
}
// Parent Sport.
if (SysId.IsValid(prm.SportIdParent))
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport)}={prm.SportIdParent.ToLong()}");
// Generic filter.
if (!StringUtil.IsEmpty(prm.SportFilter))
{
// Split filter into words.
List<String> filterWords = prm.SportFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> sportFilter = new List<String>();
sportFilter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Name, aliasSport) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
filter.Add(sportFilter.Concat(" OR ", "(", ")"));
}
}
// Name.
if (!StringUtil.IsEmpty(prm.NameFull))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Name, aliasSport) + "='" + DbQuery.FormatForCondition(prm.NameFull) + "'");
if (!StringUtil.IsEmpty(prm.NamePartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Name, aliasSport) + " Like '%" + DbQuery.FormatForLike(prm.NamePartial, true) + "%'");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Notes, aliasSport) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxSport.StatusCat.Any)
filter.Add($"{SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Status, aliasSport)} {GetSportStatusCatFilterCondition(prm.StatusCat)}");
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetSportStatusCatFilterCondition(SaxSport.StatusCat statusCat)
{
if (statusCat == SaxSport.StatusCat.ActiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Active) + "'";
if (statusCat == SaxSport.StatusCat.InactiveOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Inactive) + "'";
if (statusCat == SaxSport.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxSport.StatusCat.DeletedOnly)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetSportSortColumns(SaxSport.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for Sport columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Core.GetTableForColumn((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Core.TableIdx.Sport)
{
sortCol = SaxDbDfn_Core.GetColumnNameQual((SaxDbDfn_Core.ColumnIdx)columnDfn.DbColumn, aliasSport);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasSport) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetSportCount(String filter)
{
ClearErrorState();
return CoreDatabase.GetRowCount(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport) + " As " + aliasSport, filter);
}
public override long GetSportCount(SaxSport.Params prm)
{
ClearErrorState();
return GetSportCount(GetSportQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxSport> GetSportList(SaxSport.Params prm)
{
ClearErrorState();
List<SaxSport> userReferences = new List<SaxSport>();
DbQuery qry = new DbQuery(CoreDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasSport);
Sport_Db dbSport = new Sport_Db(CoreDbInfo);
qry.Columns.AddRange(dbSport.ExistingColumnNames);
qry.Filters.AddRange(GetSportQueryFilter(prm));
qry.OrderBy.AddRange(GetSportSortColumns(prm));
// Query data.
using (var dbConnection = CoreDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbSport = new Sport_Db(CoreDbInfo);
dbSport.PopulateFrom(dbDataReader);
userReferences.Add(CreateSport(dbSport));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userReferences;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteSportQuery(List<ColumnDfn> columns, SaxSport.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(CoreDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasSport);
// Add columns as defined in query list.
if (columns.HasId(SaxSport.Column.Id))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasSport));
if (columns.HasId(SaxSport.Column.Grouping) || columns.HasId(SaxSport.Column.Grouping_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Grouping, aliasSport));
if (columns.HasId(SaxSport.Column.SportIdParent))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport));
if (columns.HasId(SaxSport.Column.Name))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Name, aliasSport));
if (columns.HasId(SaxSport.Column.SpecialityLabel) || columns.HasId(SaxSport.Column.SpecialityLabel_Desc))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SpecialityLabel, aliasSport));
// Common properties.
if (columns.HasId(SaxSport.Column.Notes))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Notes, aliasSport));
if (columns.HasId(SaxSport.Column.Flags))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Flags, aliasSport));
if (columns.HasId(SaxSport.Column.Status) || columns.HasId(SaxSport.Column.Status_Desc) || columns.HasId(SaxSport.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Status, aliasSport));
if (columns.HasId(SaxSport.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_CreateOn, aliasSport));
if (columns.HasId(SaxSport.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_UpdateOn, aliasSport));
//---------------------------------------------------------------------
// Parent Sport.
if (columns.HasId(SaxSport.Column.ParentSport_Name))
{
DbQueryJoin joinSport = new DbQueryJoin(DbJoinType.LeftOuter);
joinSport.Table = new StringPair(SaxDbDfn_Core.GetTableName(SaxDbDfn_Core.TableIdx.Sport), aliasSport_Parent);
joinSport.Filters.Add(SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_Id, aliasSport_Parent) + "=" + SaxDbDfn_Core.GetColumnNameQual(SaxDbDfn_Core.ColumnIdx.Sport_SportIdParent, aliasSport));
query.Joins.Add(joinSport);
List<SaxDbDfn_Core.ColumnIdx> cols = new List<SaxDbDfn_Core.ColumnIdx>();
cols.Add(SaxDbDfn_Core.ColumnIdx.Sport_Name);
foreach (var col in cols)
query.Columns.Add(SaxDbDfn_Core.GetColumnNameQual(col, aliasSport_Parent), prefixSport_Parent + SaxDbDfn_Core.GetColumnName(col, false));
}
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetSportQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetSportSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(CoreDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Saxonite.Net.Standard.Dbas.Mgr
{
//=======================================================================
public partial class SaxReferenceMgr_Dbas : SaxReferenceMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SaxReferenceMgr_Dbas(SaxSessionContext sessionContext, SaxInternals internals) :
base (sessionContext, internals)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,562 @@
using Sarand.Net.Standard.Dbas.Data;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Saxonite.Base.App;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using Saxonite.Net.Standard.Base.App;
using System.Linq;
using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Standard.Dbas.Internal.Core;
using Saxonite.Net.Standard.Base.Bus.Support;
using Saxonite.Net.Standard.Dbas.Bus.Support;
using Saxonite.Net.Standard.Dbas.Internal.Support;
namespace Saxonite.Net.Standard.Dbas.Mgr.Support
{
//=======================================================================
partial class SaxSupportMgr_Dbas
{
//*******************************************************************
// Support Mgr - User Report
//*******************************************************************
// Utilities.
private List<StringPair> GetLogProperties(SaxUserReport userReport)
{
return new List<StringPair>()
{
new StringPair("Id",SysId.ToString(userReport.Id)),
new StringPair("UserAccountId",SysId.ToString(userReport.UserAccountId)),
new StringPair("ReportType",userReport.ReportType.ToString()),
new StringPair("Status",userReport.StatusCode)
};
}
//-------------------------------------------------------------------
// Create item.
public override SaxUserReport CreateUserReport(SysId userAccountId)
{
ClearErrorState();
return new SaxUserReport_Dbas(SupportDatabase, null, userAccountId, 0);
}
private SaxUserReport_Dbas CreateUserReport(UserReport_Db dbUserReport)
{
ClearErrorState();
SaxUserReport_Dbas userReport = new SaxUserReport_Dbas(SupportDatabase, new SysId(dbUserReport._Id), new SysId(dbUserReport._UserAccountId), (ushort)dbUserReport._Flags);
PopulateFrom(dbUserReport, userReport);
return userReport;
}
//-------------------------------------------------------------------
// Get item.
public override SaxUserReport GetUserReport(SaxUserReport.Params prm)
{
ClearErrorState();
return GetUserReport(GetUserReportQueryFilter(prm).Concat(" And ", "(", ")"));
}
private SaxUserReport GetUserReport(String filter)
{
ClearErrorState();
long count = GetUserReportCount(filter);
if (count == 0) return null;
if (count != 1)
{
SetErrorState("Multiple items found");
return null;
}
SaxUserReport userReport = null;
// Query data.
using (var dbConnection = SupportDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserReport_Db dbUserReport = new UserReport_Db(SupportDbInfo);
dbUserReport.PopulateFrom(dbCommand, aliasUserReport, filter);
userReport = CreateUserReport(dbUserReport);
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userReport;
}
//-------------------------------------------------------------------
// Validate item.
public override bool IsValidUserReportData(SaxUserReport.Data data, SaxUserReport.ErrField errField)
{
ClearErrorState();
if (!base.IsValidUserReportData(data, errField)) return false;
return true;
}
//-------------------------------------------------------------------
// Insert item.
public override bool InsertUserReport(SaxUserReport userReport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidUserReport(userReport)) return false;
if (SysId.IsValid(userReport.Id)) return SetErrorState(ErrorMessage.ValidItemId);
using (var dbConnection = SupportDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
UserReport_Db dbUserReport = new UserReport_Db(SupportDbInfo);
PopulateTo(dbUserReport, userReport, dbUpdateInfo);
if (UserReport_Db.FieldsNonId.Contains("Id"))
{
// Generate next Id.
dbUserReport._Id = SupportDatabase.GetNextIdFromTable("UserReport");
}
dbUserReport.ExecuteInsertCommand(dbCommand);
userReport.Id = new SysId(dbUserReport._Id);
userReport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Inserted.{GetLogProperties(userReport).Concat(": ").Concat("", "\n\t")}");
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Update item.
public override bool UpdateUserReport(SaxUserReport userReport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!IsValidUserReport(userReport)) return false;
if (!SysId.IsValid(userReport.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
if (!userReport.Changed)
{
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Data not changed.{GetLogProperties(userReport).Concat(": ").Concat("", "\n\t")}");
return true;
}
using (var dbConnection = SupportDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserReport_Db dbUserReport = new UserReport_Db(SupportDbInfo);
dbUserReport.PopulateFrom(dbCommand, aliasUserReport, "Id=" + SysId.ToString(userReport.Id));
// ToDo SaxUpdateLogItemMonitor_UserReport updateLogMonitor = new SaxUpdateLogItemMonitor_UserReport(SessionContext, CreateUserReport(dbUserReport), dbUpdateInfo);
// Update item.
PopulateTo(dbUserReport, userReport, dbUpdateInfo);
dbUserReport.ExecuteUpdateCommand(dbCommand);
userReport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Updated.{GetLogProperties(userReport).Concat(": ").Concat("", "\n\t")}");
// Record updates.
// ToDo updateLogMonitor.RecordUpdatedValues(userReport);
// ToDo updateLogMonitor.LogUpdates();
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
}
//-------------------------------------------------------------------
// Delete item.
public override bool UserReportCanBeDeleted(SaxUserReport userReport)
{
ClearErrorState();
if (!base.UserReportCanBeDeleted(userReport)) return false;
return true;
}
public override bool DeleteUserReport(SaxUserReport userReport, DbUpdateInfo dbUpdateInfo)
{
ClearErrorState();
if (!UserReportCanBeDeleted(userReport)) return false;
// User Roles are logically deleted by changing the status.
userReport.Status = SaStatus.Deleted;
return UpdateUserReport(userReport, dbUpdateInfo);
/*
* Physical deletion.
using (var dbConnection = SupportDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
// Retrieve item.
dbConnection.Open();
UserReport_Db dbUserReport = new UserReport_Db(SupportDbInfo);
dbUserReport.PopulateFrom(dbCommand, aliasUserReport, "Id=" + userReport.Id.ToString());
// Delete item.
dbCommand.CommandType = System.Data.CommandType.Text;
dbCommand.CommandText = "DELETE FROM " + SaxDbDfn_Support.GetTableName(SaxDbDfn_Support.TableIdx.UserReport) + " WHERE Id=" + SysId.ToString(userReport.Id) + ";";
dbCommand.ExecuteNonQuery();
userReport.Changed = false;
if (DebugMode) SaLogger.Debug($"{SysUtil.Fn} Deleted. " + GetLogProperties(userReport).Concat(": ").Concat("", "\n\t"));
}
catch (Exception exc) { SetErrorState(exc.Message); }
}
return !HasErrorState();
*/
}
//-------------------------------------------------------------------
// Copy data properties to and from database.
private void PopulateTo(UserReport_Db dbUserReport, SaxUserReport userReport, DbUpdateInfo dbUpdateInfo)
{
dbUserReport._Id = SysId.ToLong(userReport.Id);
dbUserReport._UserAccountId = SysId.ToInt(userReport.UserAccountId);
dbUserReport._ReportType = (short)userReport.ReportType;
dbUserReport._Title = userReport.Title;
dbUserReport._Report = userReport.Report;
dbUserReport._ReportData = userReport.ReportData;
dbUserReport._RecordedOn = userReport.RecordedOn;
// Common.
dbUserReport._Notes = userReport.Notes;
dbUserReport._Status = SacsSystem.GetStatusCode(userReport.Status);
dbUserReport._Flags = (short)userReport.Flags;
if (!SysId.IsValid(userReport.Id))
{
dbUserReport._CreateOn = DateTime.Now;
dbUserReport._CreateBy = dbUpdateInfo.UserId.ToInt();
dbUserReport._CreateHost = dbUpdateInfo.Host;
}
dbUserReport._UpdateOn = DateTime.Now;
dbUserReport._UpdateBy = dbUpdateInfo.UserId.ToInt();
dbUserReport._UpdateHost = dbUpdateInfo.Host;
}
private void PopulateFrom(UserReport_Db dbUserReport, SaxUserReport userReport)
{
//userReport.Id = new SysId(dbUserReport._Id);
//userReport.UserAccountId = new SysId(dbUserReport._UserAccountId);
userReport.ReportType = (Sax.UserReportType)dbUserReport._ReportType;
userReport.Title = dbUserReport._Title;
userReport.Report = dbUserReport._Report;
userReport.ReportData = dbUserReport._ReportData;
userReport.RecordedOn = dbUserReport._RecordedOn;
// Common.
userReport.Notes = dbUserReport._Notes;
userReport.Status = SacsSystem.GetStatusForCode(dbUserReport._Status);
userReport.SetCreateStamp(dbUserReport._CreateOn, new SysId(dbUserReport._CreateBy), dbUserReport._CreateHost);
userReport.SetUpdateStamp(dbUserReport._UpdateOn, new SysId(dbUserReport._UpdateBy), dbUserReport._UpdateHost);
userReport.AcceptChanges();
}
//-------------------------------------------------------------------
// Item column definitions.
private static readonly String aliasUserReport = "UsrRpt";
private static readonly String aliasUserReport_UserAccount = "UsrRpt_Usr";
private static readonly String prefixUserReport_UserAccount = aliasUserReport_UserAccount + "_";
private void SetUserReportColDfn
(ColumnDfn col, String caption, int width, SaxDbDfn_Support.ColumnIdx dbCol,
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
String alias = "", String prefix = "")
{
if (String.IsNullOrEmpty(alias) && SaxDbDfn_Support.GetTableForColumn(dbCol) == SaxDbDfn_Support.TableIdx.UserReport)
alias = aliasUserReport;
col.Set(caption, width, (int)dbCol, prefix + SaxDbDfn_Support.GetColumnName(dbCol, false), SaxDbDfn_Support.GetColumnNameQual(dbCol, alias), dataType, align);
if (dataType == DataValue.DataType.String && dbCol != SaxDbDfn_Support.ColumnIdx.Unknown)
col.MaxLength = (int)SaxDbDfn_Support.GetColTextLen(dbCol);
}
public override ColumnDfn GetUserReportColumnDfn(SaxUserReport.Column columnId, string caption = "", int width = 0)
{
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
switch (columnId)
{
//-----------------------------------------------------------
case SaxUserReport.Column.Pos:
SetUserReportColDfn(columnDfn, "Pos", 60, SaxDbDfn_Support.ColumnIdx.Unknown, ColumnAlignment.Right);
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
columnDfn.ReadOnly = true;
columnDfn.Resizable = false;
break;
case SaxUserReport.Column.UserAccountId:
SetUserReportColDfn(columnDfn, "User Id", 80, SaxDbDfn_Support.ColumnIdx.UserReport_UserAccountId, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserReport.Column.Id:
SetUserReportColDfn(columnDfn, "Id", 80, SaxDbDfn_Support.ColumnIdx.UserReport_Id, ColumnAlignment.Right, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
//-------------------------------------------------------
case SaxUserReport.Column.ReportType:
SetUserReportColDfn(columnDfn, "Type", 80, SaxDbDfn_Support.ColumnIdx.UserReport_ReportType, ColumnAlignment.Center, DataValue.DataType.Long);
columnDfn.ReadOnly = true;
break;
case SaxUserReport.Column.ReportType_Desc:
SetUserReportColDfn(columnDfn, "Type", 120, SaxDbDfn_Support.ColumnIdx.UserReport_ReportType, ColumnAlignment.Center);
columnDfn.ReadOnly = true;
break;
case SaxUserReport.Column.Title:
SetUserReportColDfn(columnDfn, "Title", 120, SaxDbDfn_Support.ColumnIdx.UserReport_Title);
break;
case SaxUserReport.Column.Report:
SetUserReportColDfn(columnDfn, "Report", 120, SaxDbDfn_Support.ColumnIdx.UserReport_Report);
break;
case SaxUserReport.Column.RecordedOn:
SetUserReportColDfn(columnDfn, "Recorded", 100, SaxDbDfn_Support.ColumnIdx.UserReport_RecordedOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
// Derived properties.
//-----------------------------------------------------------
// Common properties.
case SaxUserReport.Column.Notes:
SetUserReportColDfn(columnDfn, "Notes", 240, SaxDbDfn_Support.ColumnIdx.UserReport_Notes);
break;
case SaxUserReport.Column.Flags:
SetUserReportColDfn(columnDfn, "Flags", 60, SaxDbDfn_Support.ColumnIdx.UserReport_Flags, ColumnAlignment.Center, DataValue.DataType.Long);
break;
case SaxUserReport.Column.Status:
SetUserReportColDfn(columnDfn, "Status", 80, SaxDbDfn_Support.ColumnIdx.UserReport_Status, ColumnAlignment.Center);
break;
case SaxUserReport.Column.Status_Desc:
SetUserReportColDfn(columnDfn, "Status", 90, SaxDbDfn_Support.ColumnIdx.UserReport_Status, ColumnAlignment.Center);
break;
case SaxUserReport.Column.Status_Ind:
SetUserReportColDfn(columnDfn, "Status", 80, SaxDbDfn_Support.ColumnIdx.UserReport_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
break;
case SaxUserReport.Column.CreateOn_Date:
SetUserReportColDfn(columnDfn, "Created", 80, SaxDbDfn_Support.ColumnIdx.UserReport_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
case SaxUserReport.Column.UpdateOn_Date:
SetUserReportColDfn(columnDfn, "Updated", 80, SaxDbDfn_Support.ColumnIdx.UserReport_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
columnDfn.ReadOnly = true;
break;
//-----------------------------------------------------------
}
if (!String.IsNullOrEmpty(caption))
columnDfn.Caption = caption;
if (width > 0)
columnDfn.Width = width;
return columnDfn;
}
//-------------------------------------------------------------------
// Item query filter.
public override List<string> GetUserReportQueryFilter(SaxUserReport.Params prm)
{
List<String> filter = new List<String>();
// Item Ids.
String idsIncluded = prm.IdsIncluded.Concat(",");
if (!idsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Id, aliasUserReport) + " IN (" + idsIncluded + ")");
String idsExcluded = prm.IdsExcluded.Concat(",");
if (!idsExcluded.IsEmpty())
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Id, aliasUserReport) + " NOT IN (" + idsExcluded + ")");
// User accounts.
String userAccountIdsIncluded = prm.UserAccountIdsIncluded.Concat(",");
if (!userAccountIdsIncluded.IsEmpty())
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_UserAccountId, aliasUserReport) + " IN (" + userAccountIdsIncluded + ")");
// Report Types.
String reportTypes = prm.ReportTypesIncluded.Select(item => ((int)item).ToString()).Concat(",", "'", "'", true, true);
if (!reportTypes.IsEmpty())
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_ReportType, aliasUserReport) + " IN (" + reportTypes + ")");
if (!StringUtil.IsBlank(prm.UserReportFilter))
{
// Split filter into words.
List<String> filterWords = prm.UserReportFilter.Split((char[])null).ToList();
filterWords.RemoveDuplicatesCI();
filterWords.RemoveBlanks();
foreach (String filterWord in filterWords)
{
List<String> articleFilter = new List<String>();
articleFilter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Title, aliasUserReport) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
articleFilter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Report, aliasUserReport) + " Like '%" + DbQuery.FormatForLike(filterWord, true) + "%'");
filter.Add(articleFilter.Concat(" OR ", "(", ")"));
}
}
// Title.
if (!StringUtil.IsEmpty(prm.TitlePartial))
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Title, aliasUserReport) + " LIKE '%" + DbQuery.FormatForLike(prm.TitlePartial) + "%'");
// Report.
if (!StringUtil.IsEmpty(prm.ReportPartial))
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Report, aliasUserReport) + " LIKE '%" + DbQuery.FormatForLike(prm.ReportPartial) + "%'");
// Notes.
if (!StringUtil.IsEmpty(prm.NotesPartial))
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Notes, aliasUserReport) + " LIKE '%" + DbQuery.FormatForLike(prm.NotesPartial) + "%'");
// Status.
if (prm.StatusCat != SaxUserReport.StatusCat.Any)
filter.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Status, aliasUserReport) + GetUserReportStatusCatFilterCondition(prm.StatusCat));
if (filter.Count < 1) filter.Add("1=1");
return filter;
}
internal static String GetUserReportStatusCatFilterCondition(SaxUserReport.StatusCat statusCat)
{
if (statusCat == SaxUserReport.StatusCat.Preparation)
return "='" + SacsSystem.GetStatusCode(SaStatus.Preparation) + "'";
if (statusCat == SaxUserReport.StatusCat.Open)
return "='" + SacsSystem.GetStatusCode(SaStatus.InProgress) + "'";
if (statusCat == SaxUserReport.StatusCat.Completed)
return "='" + SacsSystem.GetStatusCode(SaStatus.Completed) + "'";
if (statusCat == SaxUserReport.StatusCat.Cancelled)
return "='" + SacsSystem.GetStatusCode(SaStatus.Cancelled) + "'";
if (statusCat == SaxUserReport.StatusCat.Closed)
return " IN ('" + SacsSystem.GetStatusCode(SaStatus.Completed) + "','" + SacsSystem.GetStatusCode(SaStatus.Cancelled) + "')";
if (statusCat == SaxUserReport.StatusCat.NotDeleted)
return "!='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
if (statusCat == SaxUserReport.StatusCat.Deleted)
return "='" + SacsSystem.GetStatusCode(SaStatus.Deleted) + "'";
return "";
}
// Item sort columns.
public List<String> GetUserReportSortColumns(SaxUserReport.Params prm)
{
// Sort sequence:
List<String> sortColumnNames = new List<String>();
foreach (var columnDfn in prm.SortColumns)
{
// Need to ensure correct alias used for UserReport columns in case of conflict.
String sortCol = String.Empty;
if (SaxDbDfn_Support.GetTableForColumn((SaxDbDfn_Support.ColumnIdx)columnDfn.DbColumn) == SaxDbDfn_Support.TableIdx.UserReport)
{
sortCol = SaxDbDfn_Support.GetColumnNameQual((SaxDbDfn_Support.ColumnIdx)columnDfn.DbColumn, aliasUserReport);
}
else
{
sortCol = columnDfn.DataName;
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
sortCol = columnDfn.SortDataName;
}
if (!sortCol.IsEmpty())
{
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
}
}
sortColumnNames.RemoveBlanks();
if (sortColumnNames.IsEmpty())
{
// Default sort columns.
sortColumnNames.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Id, aliasUserReport) + " ASC");
}
return sortColumnNames;
}
//-------------------------------------------------------------------
// Item count.
private long GetUserReportCount(String filter)
{
ClearErrorState();
return SupportDatabase.GetRowCount(SaxDbDfn_Support.GetTableName(SaxDbDfn_Support.TableIdx.UserReport) + " As " + aliasUserReport, filter);
}
public override long GetUserReportCount(SaxUserReport.Params prm)
{
ClearErrorState();
return GetUserReportCount(GetUserReportQueryFilter(prm).Concat(" AND ", "(", ")"));
}
//-------------------------------------------------------------------
// Item list.
public override List<SaxUserReport> GetUserReportList(SaxUserReport.Params prm)
{
ClearErrorState();
List<SaxUserReport> userRoles = new List<SaxUserReport>();
DbQuery qry = new DbQuery(SupportDatabase.DbmsType);
qry.Tables.Add(SaxDbDfn_Support.GetTableName(SaxDbDfn_Support.TableIdx.UserReport), aliasUserReport);
UserReport_Db dbUserReport = new UserReport_Db(SupportDbInfo);
qry.Columns.AddRange(dbUserReport.ExistingColumnNames);
qry.Filters.AddRange(GetUserReportQueryFilter(prm));
qry.OrderBy.AddRange(GetUserReportSortColumns(prm));
// Query data.
using (var dbConnection = SupportDatabase.CreateConnection())
using (var dbCommand = dbConnection.CreateCommand())
{
try
{
dbConnection.Open();
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
{
while (dbDataReader.Read())
{
dbUserReport = new UserReport_Db(SupportDbInfo);
dbUserReport.PopulateFrom(dbDataReader);
userRoles.Add(CreateUserReport(dbUserReport));
}
}
}
catch (Exception exc)
{
SetErrorState("Database query exception");
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
}
}
return userRoles;
}
//-------------------------------------------------------------------
// Item query execution.
public override DbResultSet ExecuteUserReportQuery(List<ColumnDfn> columns, SaxUserReport.Params prm)
{
ClearErrorState();
//---------------------------------------------------------------------
// Construct query.
DbQuery query = new DbQuery(SupportDatabase.DbmsType);
query.Tables.Add(SaxDbDfn_Support.GetTableName(SaxDbDfn_Support.TableIdx.UserReport), aliasUserReport);
// Add columns as defined in query list.
if (columns.HasId(SaxUserReport.Column.Id))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Id, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.UserAccountId))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_UserAccountId, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.ReportType) || columns.HasId(SaxUserReport.Column.ReportType_Desc))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_ReportType, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.Title))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Title, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.Report))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Report, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.RecordedOn))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_RecordedOn, aliasUserReport));
// Common properties.
if (columns.HasId(SaxUserReport.Column.Notes))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Notes, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.Flags))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Flags, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.Status) || columns.HasId(SaxUserReport.Column.Status_Desc) || columns.HasId(SaxUserReport.Column.Status_Ind))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_Status, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.CreateOn_Date))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_CreateOn, aliasUserReport));
if (columns.HasId(SaxUserReport.Column.UpdateOn_Date))
query.Columns.Add(SaxDbDfn_Support.GetColumnNameQual(SaxDbDfn_Support.ColumnIdx.UserReport_UpdateOn, aliasUserReport));
//---------------------------------------------------------------------
// Populate filter.
query.Filters.AddRange(GetUserReportQueryFilter(prm));
if (prm.IdsIncluded.Count != 1)
{
// Configure sort sequence.
foreach (String sortColumn in GetUserReportSortColumns(prm))
query.OrderBy.Add(sortColumn);
}
//---------------------------------------------------------------------
//return new DbResultSet_DataTableReader(db, query.BuildQuery(prm.ResultsPaging));
return DbResultSet_DataReader.ExecuteQuery(SupportDatabase, query.BuildQuery(prm.ResultsPaging));
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -0,0 +1,30 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr.Support;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Saxonite.Net.Standard.Dbas.Mgr.Support
{
//=======================================================================
public partial class SaxSupportMgr_Dbas : SaxSupportMgr
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
// Construction.
public SaxSupportMgr_Dbas(SaxSessionContext sessionContext, SaxInternals internals) :
base (sessionContext, internals)
{
}
//-------------------------------------------------------------------
// Properties.
//-------------------------------------------------------------------
}
//=======================================================================
}