diff --git a/SaxoniteCoreUnitTests/SaxoniteCoreUnitTests.csproj b/SaxoniteCoreUnitTests/SaxoniteCoreUnitTests.csproj index 7b35dbf..3f560a3 100644 --- a/SaxoniteCoreUnitTests/SaxoniteCoreUnitTests.csproj +++ b/SaxoniteCoreUnitTests/SaxoniteCoreUnitTests.csproj @@ -9,10 +9,10 @@ - + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/SaxoniteCoreUnitTestsOnline/SaxoniteCoreUnitTestsOnline.csproj b/SaxoniteCoreUnitTestsOnline/SaxoniteCoreUnitTestsOnline.csproj index 8ced539..50d8f90 100644 --- a/SaxoniteCoreUnitTestsOnline/SaxoniteCoreUnitTestsOnline.csproj +++ b/SaxoniteCoreUnitTestsOnline/SaxoniteCoreUnitTestsOnline.csproj @@ -9,10 +9,10 @@ - + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/SaxoniteCoreWeb/Base/Procs/SaxGolfUsgaDataLookup-ScheduledUsgaDataLookup.cs b/SaxoniteCoreWeb/Base/Procs/SaxGolfUsgaDataLookup-ScheduledUsgaDataLookup.cs index 755e191..b955645 100644 --- a/SaxoniteCoreWeb/Base/Procs/SaxGolfUsgaDataLookup-ScheduledUsgaDataLookup.cs +++ b/SaxoniteCoreWeb/Base/Procs/SaxGolfUsgaDataLookup-ScheduledUsgaDataLookup.cs @@ -79,6 +79,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs prmCountry.PriorityFlagState = SacsHierarchyItem.Params.FlagState.True; prmCountry.HasProvinces = SacsHierarchyItem.Params.BoolState.False; prmCountry.StatusCat = SaxGolfUsgaCountry.StatusCat.ActiveOnly; + prmCountry.ResultsPaging.Set(1, 4); + prmCountry.RandomOrder = true; List countriesNoProvinces = internals.ReferenceGolfMgr.GetUsgaCountryList(prmCountry).Randomise(); disposableItems.AddRange(countriesNoProvinces); if (countriesNoProvinces.Any()) @@ -100,6 +102,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs prmCountry.PriorityFlagState = SacsHierarchyItem.Params.FlagState.True; prmCountry.HasProvinces = SacsHierarchyItem.Params.BoolState.True; prmCountry.StatusCat = SaxGolfUsgaCountry.StatusCat.ActiveOnly; + prmCountry.ResultsPaging.Set(1, 4); + prmCountry.RandomOrder = true; List countriesWithProvinces = internals.ReferenceGolfMgr.GetUsgaCountryList(prmCountry).Randomise(); disposableItems.AddRange(countriesWithProvinces); if (countriesWithProvinces.Any()) @@ -125,6 +129,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs prmProvince.PriorityFlagState = SacsHierarchyItem.Params.FlagState.True; prmProvince.HasFacilities = SacsHierarchyItem.Params.BoolState.False; prmProvince.StatusCat = SaxGolfUsgaProvince.StatusCat.ActiveOnly; + prmProvince.ResultsPaging.Set(1, 4); + prmProvince.RandomOrder = true; List provincesNoFacilities = internals.ReferenceGolfMgr.GetUsgaProvinceList(prmProvince).Randomise(); disposableItems.AddRange(provincesNoFacilities); if (provincesNoFacilities.Any()) @@ -146,6 +152,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs prmProvince.PriorityFlagState = SacsHierarchyItem.Params.FlagState.True; prmProvince.HasFacilities = SacsHierarchyItem.Params.BoolState.True; prmProvince.StatusCat = SaxGolfUsgaProvince.StatusCat.ActiveOnly; + prmProvince.ResultsPaging.Set(1, 4); + prmProvince.RandomOrder = true; List provincesWithFacilities = internals.ReferenceGolfMgr.GetUsgaProvinceList(prmProvince).Randomise(); disposableItems.AddRange(provincesWithFacilities); if (provincesWithFacilities.Any()) @@ -169,6 +177,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs prmCourse.PriorityFlagState = SacsHierarchyItem.Params.FlagState.True; prmCourse.HasMarkers = SacsHierarchyItem.Params.BoolState.False; prmCourse.StatusCat = SaxGolfUsgaCourse.StatusCat.ActiveOnly; + prmCourse.ResultsPaging.Set(1, 4); + prmCourse.RandomOrder = true; List coursesNoMarkers = internals.ReferenceGolfMgr.GetUsgaCourseList(prmCourse).Randomise(); disposableItems.AddRange(coursesNoMarkers); if (coursesNoMarkers.Any()) @@ -190,6 +200,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs prmCourse.PriorityFlagState = SacsHierarchyItem.Params.FlagState.True; prmCourse.HasMarkers = SacsHierarchyItem.Params.BoolState.True; prmCourse.StatusCat = SaxGolfUsgaCourse.StatusCat.ActiveOnly; + prmCourse.ResultsPaging.Set(1, 4); + prmCourse.RandomOrder = true; List coursesWithMarkers = internals.ReferenceGolfMgr.GetUsgaCourseList(prmCourse).Randomise(); disposableItems.AddRange(coursesWithMarkers); if (coursesWithMarkers.Any()) @@ -213,6 +225,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params(); prmCountry.HasProvinces = SacsHierarchyItem.Params.BoolState.False; prmCountry.StatusCat = SaxGolfUsgaCountry.StatusCat.ActiveOnly; + prmCountry.ResultsPaging.Set(1,4); + prmCountry.RandomOrder = true; List countriesNoProvinces = internals.ReferenceGolfMgr.GetUsgaCountryList(prmCountry).Randomise(); disposableItems.AddRange(countriesNoProvinces); if (countriesNoProvinces.Any()) @@ -234,6 +248,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs SaxGolfUsgaProvince.Params prmProvince = new SaxGolfUsgaProvince.Params(); prmProvince.HasFacilities = SacsHierarchyItem.Params.BoolState.False; prmProvince.StatusCat = SaxGolfUsgaProvince.StatusCat.ActiveOnly; + prmProvince.ResultsPaging.Set(1, 4); + prmProvince.RandomOrder = true; List provincesNoFacilities = internals.ReferenceGolfMgr.GetUsgaProvinceList(prmProvince).Randomise(); disposableItems.AddRange(provincesNoFacilities); if (provincesNoFacilities.Any()) @@ -254,6 +270,8 @@ namespace Saxonite.Net.Core.Web.Base.Procs SaxGolfUsgaCourse.Params prmCourse = new SaxGolfUsgaCourse.Params(); prmCourse.HasMarkers = SacsHierarchyItem.Params.BoolState.False; prmCourse.StatusCat = SaxGolfUsgaCourse.StatusCat.ActiveOnly; + prmCourse.ResultsPaging.Set(1, 4); + prmCourse.RandomOrder = true; List coursesNoMarkers = internals.ReferenceGolfMgr.GetUsgaCourseList(prmCourse).Randomise(); disposableItems.AddRange(coursesNoMarkers); if (coursesNoMarkers.Any()) diff --git a/SaxoniteCoreWeb/Base/Procs/SaxOrganisationEventsLookup.cs b/SaxoniteCoreWeb/Base/Procs/SaxOrganisationEventsLookup.cs new file mode 100644 index 0000000..935a5f0 --- /dev/null +++ b/SaxoniteCoreWeb/Base/Procs/SaxOrganisationEventsLookup.cs @@ -0,0 +1,178 @@ +using DocumentFormat.OpenXml.InkML; +using HtmlAgilityPack; +using MailKit; +using Microsoft.Net.Http.Headers; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +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.Helpers; +using Sarand.Net.Standard.Base.Net; +using Sarand.Net.Standard.Base.Utils; +using Saxonite.Net.Core.Web.Base.Controllers; +using Saxonite.Net.Standard.Base.App; +using Saxonite.Net.Standard.Base.Bus; +using Saxonite.Net.Standard.Base.Bus.Reference; +using Saxonite.Net.Standard.Base.Mgr.Reference; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading; + +namespace Saxonite.Net.Core.Web.Base.Procs +{ + //====================================================================== + public partial class SaxOrganisationEventsLookup : SaxProcess_Web + { + //------------------------------------------------------------------- + // Definitions. + public enum Task + { + LookupEvents + } + + public new class Config : SaxProcess_Web.Config + { + public Config(SaxSessionContext sessionContext, DbUpdateInfo dbUpdateInfo) : base(sessionContext, dbUpdateInfo) + { } + /// Organisations. + public HashSet OrganisationIdsIncluded { get; } = new HashSet(); + /// Tasks to be run under this instance of the USGA Data Lookup process. + public HashSet Tasks { get; } = new HashSet(); + } + + private class EventData + { + public DateTime EventAt { get; set; } + public String Caption { get; set; } + } + + //------------------------------------------------------------------- + // Data members. + private Config config; + + //------------------------------------------------------------------- + // Construction. + public SaxOrganisationEventsLookup(Config config) : base(config) + { + this.config = config; + } + + //------------------------------------------------------------------- + // Properties. + + public override string ProcessDescription => "Organisation Events Lookup"; + + //------------------------------------------------------------------- + // Run the process. + protected override bool Run() + { + // Execute selected tasks. + foreach (Task task in config.Tasks) + { + switch (task) + { + case Task.LookupEvents: + LookupEventsForOrganisations(); + break; + } + if (!OK) break; + } + + return OK; + } + + //------------------------------------------------------------------ + // Event lookup. + //------------------------------------------------------------------ + + /// + /// Organisation event lookup. + /// + private bool LookupEventsForOrganisations() + { + if (!OK) return false; + + using (DisposableCollection disposableItems = new DisposableCollection()) + { + foreach (SysId organisationId in config.OrganisationIdsIncluded) + { + SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId); + if (organisation == null) + { + AddWarningMessage($"Organisation not found for Id: {organisationId}."); + continue; + } + LookupOrganisationEvents(organisation); + } + } + + return OK; + } + + /// + /// Organisation event lookup. + /// + private bool LookupOrganisationEvents(SaxOrganisation organisation) + { + List eventsData = new List(); + + try + { + + + // Query Countries on USGA website. + CancellationToken cancelToken = new CancellationToken(); + SacsHttpRequestData request = new SacsHttpRequestData(cancelToken) { Url = "https://ncrdb.usga.org/" }; + SacsHttpResponseData response = SacsHttpClient.DoRequest(request).Result; + String data = response.Data; + + if (!StringUtil.IsBlank(response.Data)) + { + // Parse HTML. + HtmlDocument htmlDoc = new HtmlDocument(); + htmlDoc.LoadHtml(response.Data); + + // Identify type of event schedule on page. + HtmlNode mobiscrollEventCalendarNode = htmlDoc.GetElementbyId("mobiscroll-event-calendar"); + if (mobiscrollEventCalendarNode != null) + { + + } + } + + if (eventsData.Any()) + { + + } + + } + catch (Exception exc) + { + SaLogger.Warn($"{SysUtil.Fn} {ExceptionUtil.GetLogMessage(exc, "querying organisation events", 8)}"); + } + + return OK; + } + + /// + /// Organisation event lookup by MobiScroll calendar. + /// + private bool LookupOrganisationEvents_MobiScrollCalendar(SaxOrganisation organisation, List eventsData, HtmlNode calendarNode) + { + + HtmlNode headerNode = calendarNode.Descendants("div").First(node => node.HasClass("mbsc-calendar-header")); + if (headerNode != null) + { + } + + return OK; + } + + //------------------------------------------------------------------ + } + //====================================================================== +} diff --git a/SaxoniteCoreWeb/SaxoniteCoreWeb.csproj b/SaxoniteCoreWeb/SaxoniteCoreWeb.csproj index 26de12f..a054e39 100644 --- a/SaxoniteCoreWeb/SaxoniteCoreWeb.csproj +++ b/SaxoniteCoreWeb/SaxoniteCoreWeb.csproj @@ -23,7 +23,7 @@ - + diff --git a/SaxoniteCoreWebAdmin/SaxoniteCoreWebAdmin.csproj b/SaxoniteCoreWebAdmin/SaxoniteCoreWebAdmin.csproj index 8a66a10..41d91db 100644 --- a/SaxoniteCoreWebAdmin/SaxoniteCoreWebAdmin.csproj +++ b/SaxoniteCoreWebAdmin/SaxoniteCoreWebAdmin.csproj @@ -9,7 +9,7 @@ - + diff --git a/SaxoniteCoreWebAdmin/Views/System/Logs.cshtml b/SaxoniteCoreWebAdmin/Views/System/Logs.cshtml index 915175a..e482934 100644 --- a/SaxoniteCoreWebAdmin/Views/System/Logs.cshtml +++ b/SaxoniteCoreWebAdmin/Views/System/Logs.cshtml @@ -55,8 +55,8 @@
-
@Localiser["label.root.folder"]
-
@(Model.LoggingRootFolder)
+
@Localiser["label.root.folder"]
+
@(Model.LoggingRootFolder)
@Localiser["label.folder"]
diff --git a/SaxoniteCoreWebAdmin/wwwroot/css/sax-form.css b/SaxoniteCoreWebAdmin/wwwroot/css/sax-form.css index e58b2da..50f07f6 100644 --- a/SaxoniteCoreWebAdmin/wwwroot/css/sax-form.css +++ b/SaxoniteCoreWebAdmin/wwwroot/css/sax-form.css @@ -6,7 +6,7 @@ .sax-panel-info, .sax-panel-form { - max-width: 720px; + max-width: 800px; margin: 16px auto; padding: 0; background-color: #fff; diff --git a/SaxoniteCoreWebAdmin/wwwroot/js/sax-main.js b/SaxoniteCoreWebAdmin/wwwroot/js/sax-main.js index 77a5713..6d8d0e3 100644 --- a/SaxoniteCoreWebAdmin/wwwroot/js/sax-main.js +++ b/SaxoniteCoreWebAdmin/wwwroot/js/sax-main.js @@ -196,8 +196,8 @@ { $dlg.dialog( { - minWidth: null, maxWidth: null, width: Math.min(width || 400, $(win).width() * .95), - minHeight: null, maxHeight: null, height: Math.min(height || 320, $(win).innerHeight() * .95) + minWidth: null, maxWidth: null, width: Math.min(width || 400, $(win).width() * .98), + minHeight: null, maxHeight: null, height: Math.min(height || 320, $(win).innerHeight() * .98) }).dialog('open'); return $dlg; } diff --git a/SaxoniteCoreWebAdmin/wwwroot/js/sax-sys-logs.js b/SaxoniteCoreWebAdmin/wwwroot/js/sax-sys-logs.js index c68ceb6..429b4e0 100644 --- a/SaxoniteCoreWebAdmin/wwwroot/js/sax-sys-logs.js +++ b/SaxoniteCoreWebAdmin/wwwroot/js/sax-sys-logs.js @@ -176,7 +176,7 @@ if (!sl.data.awaitingGetFileResponse) { sl.setFileData($('
' + sax.msg.dataQuerying + '
')); - sax.openDialog($dlg.file, $(win).width(), $(win).height()); + sl.openFileDlg(); } sax.ajax.getFile = sax.ajax.getFile || { url: sax.url.base + 'System/Ajax/Logs/GetFile', formId: sl.$frm.filter.prop('id'), callbackFn: sl.onShowFile }; sax.doAjaxRequest(sax.ajax.getFile, delay || 50); @@ -199,6 +199,10 @@ sl.setFileTitle(filename || response.popupTitle); $('.LogFilename', $dlg.file).val(filename); sl.setFileData(response.file.html); + sl.openFileDlg(); + } + sl.openFileDlg = function () + { sax.openDialog($dlg.file, $(win).width(), $(win).height()); } sl.setFileTitle = function (filename) diff --git a/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj b/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj index 48123d9..f73e688 100644 --- a/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj +++ b/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj @@ -9,7 +9,7 @@ - + diff --git a/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css b/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css index 0a6dc92..c5105ba 100644 --- a/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css +++ b/SaxoniteCoreWebOnline/wwwroot/css/sax-form.css @@ -6,7 +6,7 @@ .sax-panel-info, .sax-panel-form { - max-width: 720px; + max-width: 800px; margin: 16px auto; padding: 0; background-color: #f8f8f8; diff --git a/SaxoniteStandardBase/Base/App/Sax-Version.cs b/SaxoniteStandardBase/Base/App/Sax-Version.cs index 7e36c76..5bd3b26 100644 --- a/SaxoniteStandardBase/Base/App/Sax-Version.cs +++ b/SaxoniteStandardBase/Base/App/Sax-Version.cs @@ -18,7 +18,7 @@ namespace Saxonite.Net.Standard.Base.App //------------------------------------------------------------------- public static class Version { - private static String version { get; } = "1.2.11.13"; + private static String version { get; } = "1.2.11.14"; // Retrieve version. public static String GetFullVersion () { return version; } public static String GetAppVersion () diff --git a/SaxoniteStandardBase/Base/App/SaxDbDfn_Reference.cs b/SaxoniteStandardBase/Base/App/SaxDbDfn_Reference.cs index 6cebcb9..d1674ae 100644 --- a/SaxoniteStandardBase/Base/App/SaxDbDfn_Reference.cs +++ b/SaxoniteStandardBase/Base/App/SaxDbDfn_Reference.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17 +// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31 //--------------------------------------------------------------------------- namespace Saxonite.Base.App { diff --git a/SaxoniteStandardDbas/Dbas/App/SaxDbDfnGenerator.cs b/SaxoniteStandardDbas/Dbas/App/SaxDbDfnGenerator.cs index 07a9255..7252d87 100644 --- a/SaxoniteStandardDbas/Dbas/App/SaxDbDfnGenerator.cs +++ b/SaxoniteStandardDbas/Dbas/App/SaxDbDfnGenerator.cs @@ -65,17 +65,16 @@ namespace Saxonite.Net.Standard.Dbas.App config.Schema.InsertOnlyColumns.Add(".*", "CreateOn,CreateBy,CreateHost"); config.Schema.InsertOnlyColumns.Add("SomeOldTable", "Code"); // Database definition class. - config.DefinitionClass.Usings.Clear(); config.DefinitionClass.Usings.Add("Sarand.Net.Standard.Base.Core"); - config.DefinitionClass.Usings.Add("Sarand.Net.Standard.Base.Utils"); 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.Clear(); + 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.Utils"); 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"; diff --git a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCountry_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCountry_Db.cs index 64196b2..8dbec01 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCountry_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCountry_Db.cs @@ -1,4 +1,5 @@ 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; @@ -9,7 +10,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17 +// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal.Reference { @@ -107,6 +108,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference // Existing columns - confirmed on database if table exists. public List ExistingColumnNames { get { return GetExistingColumnNames(Fields); } } public List ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } } + public List UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } } //------------------------------------------------------------------- // Population. @@ -187,12 +189,17 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference //------------------------------------------------------------------- // Update command. - public override bool ExecuteUpdateCommand (DbCommand dbCommand) + public override bool ExecuteUpdateCommand (DbCommand dbCommand, List 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 columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); + List 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) diff --git a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCourse_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCourse_Db.cs index 7829ba6..4f1e284 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCourse_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaCourse_Db.cs @@ -1,4 +1,5 @@ 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; @@ -9,7 +10,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17 +// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal.Reference { @@ -144,6 +145,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference // Existing columns - confirmed on database if table exists. public List ExistingColumnNames { get { return GetExistingColumnNames(Fields); } } public List ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } } + public List UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } } //------------------------------------------------------------------- // Population. @@ -248,12 +250,17 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference //------------------------------------------------------------------- // Update command. - public override bool ExecuteUpdateCommand (DbCommand dbCommand) + public override bool ExecuteUpdateCommand (DbCommand dbCommand, List 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 columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); + List 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) diff --git a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaFacility_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaFacility_Db.cs index fbf180f..2e3ec4c 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaFacility_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaFacility_Db.cs @@ -1,4 +1,5 @@ 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; @@ -9,7 +10,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17 +// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal.Reference { @@ -128,6 +129,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference // Existing columns - confirmed on database if table exists. public List ExistingColumnNames { get { return GetExistingColumnNames(Fields); } } public List ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } } + public List UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } } //------------------------------------------------------------------- // Population. @@ -222,12 +224,17 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference //------------------------------------------------------------------- // Update command. - public override bool ExecuteUpdateCommand (DbCommand dbCommand) + public override bool ExecuteUpdateCommand (DbCommand dbCommand, List 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 columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); + List 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) diff --git a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaMarker_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaMarker_Db.cs index 5e9287f..3c1be0f 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaMarker_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaMarker_Db.cs @@ -1,4 +1,5 @@ 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; @@ -9,7 +10,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17 +// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal.Reference { @@ -129,6 +130,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference // Existing columns - confirmed on database if table exists. public List ExistingColumnNames { get { return GetExistingColumnNames(Fields); } } public List ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } } + public List UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } } //------------------------------------------------------------------- // Population. @@ -225,12 +227,17 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference //------------------------------------------------------------------- // Update command. - public override bool ExecuteUpdateCommand (DbCommand dbCommand) + public override bool ExecuteUpdateCommand (DbCommand dbCommand, List 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 columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); + List 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) diff --git a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaProvince_Db.cs b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaProvince_Db.cs index 809a2d9..c9ef2e6 100644 --- a/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaProvince_Db.cs +++ b/SaxoniteStandardDbas/Dbas/Internal/Reference/Golf_UsgaProvince_Db.cs @@ -1,4 +1,5 @@ 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; @@ -9,7 +10,7 @@ using System.Data.Common; using System.Linq; //--------------------------------------------------------------------------- -// Code generated by Sarand Database Utilities Thu 22-Aug-2024 18:00:17 +// Code generated by Sarand Database Utilities Tue 27-Aug-2024 19:41:31 //--------------------------------------------------------------------------- namespace Saxonite.Net.Standard.Dbas.Internal.Reference { @@ -109,6 +110,7 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference // Existing columns - confirmed on database if table exists. public List ExistingColumnNames { get { return GetExistingColumnNames(Fields); } } public List ExistingColumnNamesNonId { get { return GetExistingColumnNames(FieldsNonId); } } + public List UpdatableColumns { get { return ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); } } //------------------------------------------------------------------- // Population. @@ -191,12 +193,17 @@ namespace Saxonite.Net.Standard.Dbas.Internal.Reference //------------------------------------------------------------------- // Update command. - public override bool ExecuteUpdateCommand (DbCommand dbCommand) + public override bool ExecuteUpdateCommand (DbCommand dbCommand, List 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 columnNames = ExistingColumnNamesNonId.Where(item => !fieldsPrimary.ContainsCI(item) && !fieldsIgnoreOnUpdate.ContainsCI(item)).ToList(); + List 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) diff --git a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCountry.cs b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCountry.cs index 30c3dd2..0064eb8 100644 --- a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCountry.cs +++ b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCountry.cs @@ -525,6 +525,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference } } sortColumnNames.RemoveBlanks(); + AddRandomSortColumn(prm, sortColumnNames); if (sortColumnNames.IsEmpty()) { // Default sort columns. diff --git a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCourse.cs b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCourse.cs index beeefb0..6228b66 100644 --- a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCourse.cs +++ b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaCourse.cs @@ -611,10 +611,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference return ""; } // Item sort columns. - public List GetUsgaCourseSortColumns(SaxGolfUsgaCourse.Params prm) + public HashSet GetUsgaCourseSortColumns(SaxGolfUsgaCourse.Params prm) { // Sort sequence: - List sortColumnNames = new List(); + HashSet sortColumnNames = new HashSet(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UsgaCourse columns in case of conflict. @@ -636,6 +636,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference } } sortColumnNames.RemoveBlanks(); + AddRandomSortColumn(prm, sortColumnNames); if (sortColumnNames.IsEmpty()) { // Default sort columns. diff --git a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaFacility.cs b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaFacility.cs index b7f5416..9d9ced3 100644 --- a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaFacility.cs +++ b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaFacility.cs @@ -511,10 +511,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference return ""; } // Item sort columns. - public List GetUsgaFacilitySortColumns(SaxGolfUsgaFacility.Params prm) + public HashSet GetUsgaFacilitySortColumns(SaxGolfUsgaFacility.Params prm) { // Sort sequence: - List sortColumnNames = new List(); + HashSet sortColumnNames = new HashSet(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UsgaFacility columns in case of conflict. @@ -536,6 +536,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference } } sortColumnNames.RemoveBlanks(); + AddRandomSortColumn(prm, sortColumnNames); if (sortColumnNames.IsEmpty()) { // Default sort columns. diff --git a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaMarker.cs b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaMarker.cs index 8cc72a1..33e349f 100644 --- a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaMarker.cs +++ b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaMarker.cs @@ -556,10 +556,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference return ""; } // Item sort columns. - public List GetUsgaMarkerSortColumns(SaxGolfUsgaMarker.Params prm) + public HashSet GetUsgaMarkerSortColumns(SaxGolfUsgaMarker.Params prm) { // Sort sequence: - List sortColumnNames = new List(); + HashSet sortColumnNames = new HashSet(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UsgaMarker columns in case of conflict. @@ -581,6 +581,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference } } sortColumnNames.RemoveBlanks(); + AddRandomSortColumn(prm, sortColumnNames); if (sortColumnNames.IsEmpty()) { // Default sort columns. diff --git a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaProvince.cs b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaProvince.cs index 5f19259..3781ba3 100644 --- a/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaProvince.cs +++ b/SaxoniteStandardDbas/Dbas/Mgr/Reference/SaxReferenceGolfMgr_Dbas-UsgaProvince.cs @@ -522,10 +522,10 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference return ""; } // Item sort columns. - public List GetUsgaProvinceSortColumns(SaxGolfUsgaProvince.Params prm) + public HashSet GetUsgaProvinceSortColumns(SaxGolfUsgaProvince.Params prm) { // Sort sequence: - List sortColumnNames = new List(); + HashSet sortColumnNames = new HashSet(); foreach (var columnDfn in prm.SortColumns) { // Need to ensure correct alias used for UsgaProvince columns in case of conflict. @@ -547,6 +547,7 @@ namespace Saxonite.Net.Standard.Dbas.Mgr.Reference } } sortColumnNames.RemoveBlanks(); + AddRandomSortColumn(prm, sortColumnNames); if (sortColumnNames.IsEmpty()) { // Default sort columns. diff --git a/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Reference.xml b/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Reference.xml index 096c213..5ebf2ce 100644 --- a/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Reference.xml +++ b/SaxoniteStandardDbas/Resources/Database/SaxDbDfn_Reference.xml @@ -746,8 +746,8 @@ false false false - 69 - 687 + 74 + 851 false @@ -1172,8 +1172,8 @@ false false false - 14 - 603 + 16 + 748 false @@ -1615,8 +1615,8 @@ false false false - 19 - 924 + 21 + 1014 false diff --git a/SaxoniteWebApi/Api/App/SaxApplication_Api.cs b/SaxoniteWebApi/Api/App/SaxApplication_Api.cs index cf92353..2e442d9 100644 --- a/SaxoniteWebApi/Api/App/SaxApplication_Api.cs +++ b/SaxoniteWebApi/Api/App/SaxApplication_Api.cs @@ -210,7 +210,7 @@ namespace Saxonite.Web.Api.App // USGA Courses. SaxGolfUsgaDataLookup.Config courseLookupConfig = new SaxGolfUsgaDataLookup.Config(SessionContext, dbUpdateInfo); SaxGolfUsgaDataLookup courseLookup = new SaxGolfUsgaDataLookup(courseLookupConfig); - List courses = courseLookup.LookupUsgaCoursesForCountryAndProvince("AUS", "AU-TAS"); + List courses = courseLookup.LookupUsgaCoursesForCountryAndProvince("AUS", "AU-VIC"); SaLogger.Warn($"{SysUtil.Fn} Course lookup - found: {courses.Count}"); if (courseLookup.HasErrorMessage()) SaLogger.Warn($"{SysUtil.Fn} Course lookup error: {courseLookup.GetErrorMessage()}"); @@ -219,12 +219,12 @@ namespace Saxonite.Web.Api.App } } - if (true) + if (false) { // USGA Markers. SaxGolfUsgaDataLookup.Config courseLookupConfig = new SaxGolfUsgaDataLookup.Config(SessionContext, dbUpdateInfo); SaxGolfUsgaDataLookup courseLookup = new SaxGolfUsgaDataLookup(courseLookupConfig); - List markers = courseLookup.LookupUsgaMarkersForCourse(new SysId(24579)); + List markers = courseLookup.LookupUsgaMarkersForCourse(new SysId(18226)); SaLogger.Warn($"{SysUtil.Fn} Marker lookup - found: {markers.Count}"); if (courseLookup.HasErrorMessage()) SaLogger.Warn($"{SysUtil.Fn} Marker lookup error: {courseLookup.GetErrorMessage()}"); diff --git a/SaxoniteWebApi/SaxoniteWebApi.csproj b/SaxoniteWebApi/SaxoniteWebApi.csproj index 5ffff9f..2b468d3 100644 --- a/SaxoniteWebApi/SaxoniteWebApi.csproj +++ b/SaxoniteWebApi/SaxoniteWebApi.csproj @@ -9,7 +9,7 @@ - +