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

Merged
andy merged 2 commits from saxonite-repository-layout-net10 into master 2026-10-16 18:24:34 +01:00
1996 changed files with 1992 additions and 1179 deletions
+13
View File
@@ -361,3 +361,16 @@ MigrationBackup/
# Fody - auto-generated XML schema # Fody - auto-generated XML schema
FodyWeavers.xsd FodyWeavers.xsd
# Generated deployment archives and shortcuts
/Deploy/Generated/
# Generated database source snapshots
/Database/Generated/
# NuGet cache metadata and local source shortcuts
**/.nupkg.metadata
**/.signature.p7s
**/*.nupkg.sha512
**/*.lnk
**/*.url
+42
View File
@@ -0,0 +1,42 @@
# Repository Guidelines
## Project Structure
`Workspace/Saxonite.sln` contains the Saxonite applications, libraries, and tests. `Assets` and other repository-level materials are outside `Workspace`. The solution consumes projects from the sibling `../../Common-VS/Workspace`; preserve this relative layout and read Common's repository guidance when changing shared dependencies or APIs. The parent workspace map at `../../AGENTS.md` is informational; repository instructions and trackers govern this repository.
## Build and Validation
Run commands from `Workspace`:
```powershell
dotnet restore Saxonite.sln
dotnet build Saxonite.sln --configuration Debug
dotnet test Saxonite.sln --configuration Debug
```
For Common API, framework, package, or shared-behavior changes, validate Common first, then Saxonite. Coordinate framework upgrades across the dependency boundary. Report any unavailable platform, database, or machine configuration separately from source failures.
## Coding and File Conventions
Follow the existing C# style and this repository's `.gitattributes`. Follow shared file-editing guidance at `../../Common-VS/Workspace/docs/instructions/file-editing-conventions.md`. Do not edit generated files or build output under `bin`, `obj`, or `TestResults`. Keep machine-specific configuration and credentials out of source control.
## Conversation Tracking
Read `docs/README.md`, `docs/topics.md`, and `docs/component-reviews.md` before repository review or follow-up work. Update the trackers when work is identified, started, completed, or a component is reviewed. Use ISO `YYYY-MM-DD` dates and repository-relative links.
## Branches and Pull Requests
- Use short-lived feature branches targeting `master`. Do not create or maintain a shared `develop` branch. Push feature branches and use pull requests; do not push directly to `master`, force-push, or rewrite its history.
- Before creating a pull request, prepare a concise proposed title and description and ask the user to confirm both. The description starts with a 2–3 sentence summary, followed by short bullets for significant files, file groups, or folders. Omit minor cleanup and cosmetic changes.
- For functional pull requests, propose incrementing Saxonite's application patch version and obtain the user's confirmation before applying it. The application version is the first three components of `Sax.Version` in `Workspace/SaxoniteStandardBase/Base/App/Sax-Version.cs`; synchronize that value and add the release entry to `Workspace/SaxoniteStandardBase/Resources/Data/Application/VersionHistory.json`. Prefix the confirmed title with `vX.Y.Z ` and end the description with `Application version: X.Y.Z`. Documentation/process-only pull requests do not need a version prefix and use `—` as the tracker version.
- Do not merge a pull request unless the user asks. After merge, remove its local feature branch; remove the remote branch if the hosting service has not already done so.
- Before completing or merging a pull request, move its active topic to Completed Topics and record the PR number, confirmed application version (or `—`), and the actual date the work became ready for PR completion. Show the proposed tracker change and wait for review before committing it. After approval, commit and push the tracker update separately, verify it is present, and only then proceed with PR completion.
- Do not require branch protection checks until CI is available and the relevant check has been verified.
## Security Changes
For encryption changes, follow Common's `../../Common-VS/Workspace/.agents/skills/common-security-change/SKILL.md` and `../../Common-VS/Workspace/docs/authenticated-encryption-migration.md`. Preserve fail-closed behavior, purpose separation, expiry checks, and the documented clean-break compatibility consequences.
## Change Discipline
Check Git status before editing and preserve unrelated work. Treat Common and Saxonite as independent repositories. Do not change Common as part of a Saxonite task unless the user explicitly requests it.
-102
View File
@@ -1,102 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34202.233
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreWebAdmin", "SaxoniteCoreWebAdmin\SaxoniteCoreWebAdmin.csproj", "{F646283D-F7C2-42DD-AB1E-E741455664BD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteStandardDbas", "SaxoniteStandardDbas\SaxoniteStandardDbas.csproj", "{DA383586-69E3-40EB-A20D-AC1AD24E336C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteStandardBase", "SaxoniteStandardBase\SaxoniteStandardBase.csproj", "{38FBE932-C1D0-4A28-9172-1466347FD62B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardBase", "..\..\Common-VS\Workspace\SacsStandardBase\SacsStandardBase.csproj", "{9C5309DA-3205-4423-BE13-923EE61370A6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardDbas", "..\..\Common-VS\Workspace\SacsStandardDbas\SacsStandardDbas.csproj", "{E211FE36-108E-4D07-BD30-799A156DDDBB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteStandardMob", "SaxoniteStandardMob\SaxoniteStandardMob.csproj", "{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreWeb", "SaxoniteCoreWeb\SaxoniteCoreWeb.csproj", "{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreWebOnline", "SaxoniteCoreWebOnline\SaxoniteCoreWebOnline.csproj", "{C1A3E949-B5EA-4A77-9411-5D8B350056D6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsCoreWeb", "..\..\Common-VS\Workspace\SacsCoreWeb\SacsCoreWeb.csproj", "{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreUnitTests", "SaxoniteCoreUnitTests\SaxoniteCoreUnitTests.csproj", "{CA680625-E334-4F76-881B-1327A2F9FE86}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution files", "Solution files", "{BD66A338-2D41-4B64-86B0-670F4F42A489}"
ProjectSection(SolutionItems) = preProject
ReadMe.md = ReadMe.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreUnitTestsOnline", "SaxoniteCoreUnitTestsOnline\SaxoniteCoreUnitTestsOnline.csproj", "{303BA8E9-1B95-41AD-9F51-32037A22C908}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardProc", "..\..\Common-VS\Workspace\SacsStandardProc\SacsStandardProc.csproj", "{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteWebApi", "SaxoniteWebApi\SaxoniteWebApi.csproj", "{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|Any CPU.Build.0 = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|Any CPU.Build.0 = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|Any CPU.Build.0 = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|Any CPU.Build.0 = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|Any CPU.Build.0 = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|Any CPU.Build.0 = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|Any CPU.Build.0 = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|Any CPU.Build.0 = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|Any CPU.Build.0 = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|Any CPU.Build.0 = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|Any CPU.Build.0 = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|Any CPU.ActiveCfg = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|Any CPU.Build.0 = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|Any CPU.Build.0 = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0DFC2321-53B9-493B-83D3-2ACD1C47C732}
EndGlobalSection
EndGlobal
@@ -1,32 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
<RootNamespace>Saxonite.Net.Core</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="MSTest.TestAdapter" Version="3.6.4" />
<PackageReference Include="MSTest.TestFramework" Version="3.6.4" />
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsCoreWeb\SacsCoreWeb.csproj" />
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsStandardBase\SacsStandardBase.csproj" />
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsStandardDbas\SacsStandardDbas.csproj" />
<ProjectReference Include="..\SaxoniteCoreWebAdmin\SaxoniteCoreWebAdmin.csproj" />
<ProjectReference Include="..\SaxoniteCoreWeb\SaxoniteCoreWeb.csproj" />
<ProjectReference Include="..\SaxoniteStandardBase\SaxoniteStandardBase.csproj" />
<ProjectReference Include="..\SaxoniteStandardDbas\SaxoniteStandardDbas.csproj" />
</ItemGroup>
</Project>
@@ -1,14 +0,0 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Text;
namespace Saxonite.Net.Core.UnitTests.Data.Population
{
//=======================================================================
[TestClass]
public class SaxoniteRegionPopulation_Tester
{
}
//=======================================================================
}
@@ -1,32 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
<RootNamespace>Saxonite.Net.Core</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="MSTest.TestAdapter" Version="3.6.4" />
<PackageReference Include="MSTest.TestFramework" Version="3.6.4" />
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsCoreWeb\SacsCoreWeb.csproj" />
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsStandardBase\SacsStandardBase.csproj" />
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsStandardDbas\SacsStandardDbas.csproj" />
<ProjectReference Include="..\SaxoniteCoreWebOnline\SaxoniteCoreWebOnline.csproj" />
<ProjectReference Include="..\SaxoniteCoreWeb\SaxoniteCoreWeb.csproj" />
<ProjectReference Include="..\SaxoniteStandardBase\SaxoniteStandardBase.csproj" />
<ProjectReference Include="..\SaxoniteStandardDbas\SaxoniteStandardDbas.csproj" />
</ItemGroup>
</Project>
@@ -1 +0,0 @@
<div>Google Analytics</div>
@@ -1,4 +0,0 @@
@inject Saxonite.Net.Core.Web.Base.App.SaxLocaliser Localiser
@{
Layout = "_Layout";
}
@@ -1 +0,0 @@
<div>Google Analytics</div>
@@ -1,4 +0,0 @@
@inject Saxonite.Net.Core.Web.Base.App.SaxLocaliser Localiser
@{
Layout = "_Layout";
}
@@ -1,13 +0,0 @@
{
"Versions": [
{
"On": "2021-05-03",
"Version": "1.0.0",
"Topics": [
"Admin/Online security.",
"Admin Users, Organisations, Regions, Sports",
"Online Journalist Articles (header)."
]
}
]
}
+238
View File
@@ -0,0 +1,238 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34202.233
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreWebAdmin", "SaxoniteCoreWebAdmin\SaxoniteCoreWebAdmin.csproj", "{F646283D-F7C2-42DD-AB1E-E741455664BD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteStandardDbas", "SaxoniteStandardDbas\SaxoniteStandardDbas.csproj", "{DA383586-69E3-40EB-A20D-AC1AD24E336C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteStandardBase", "SaxoniteStandardBase\SaxoniteStandardBase.csproj", "{38FBE932-C1D0-4A28-9172-1466347FD62B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardBase", "..\..\..\Common-VS\Workspace\SacsStandardBase\SacsStandardBase.csproj", "{9C5309DA-3205-4423-BE13-923EE61370A6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardDbas", "..\..\..\Common-VS\Workspace\SacsStandardDbas\SacsStandardDbas.csproj", "{E211FE36-108E-4D07-BD30-799A156DDDBB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteStandardMob", "SaxoniteStandardMob\SaxoniteStandardMob.csproj", "{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreWeb", "SaxoniteCoreWeb\SaxoniteCoreWeb.csproj", "{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteCoreWebOnline", "SaxoniteCoreWebOnline\SaxoniteCoreWebOnline.csproj", "{C1A3E949-B5EA-4A77-9411-5D8B350056D6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsCoreWeb", "..\..\..\Common-VS\Workspace\SacsCoreWeb\SacsCoreWeb.csproj", "{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteUnitTestsAdmin", "SaxoniteUnitTestsAdmin\SaxoniteUnitTestsAdmin.csproj", "{CA680625-E334-4F76-881B-1327A2F9FE86}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution files", "Solution files", "{BD66A338-2D41-4B64-86B0-670F4F42A489}"
ProjectSection(SolutionItems) = preProject
ReadMe.md = ReadMe.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteUnitTestsOnline", "SaxoniteUnitTestsOnline\SaxoniteUnitTestsOnline.csproj", "{303BA8E9-1B95-41AD-9F51-32037A22C908}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SacsStandardProc", "..\..\..\Common-VS\Workspace\SacsStandardProc\SacsStandardProc.csproj", "{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaxoniteWebApi", "SaxoniteWebApi\SaxoniteWebApi.csproj", "{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SacsBusinessBase", "..\..\..\Common-VS\Workspace\SacsBusinessBase\SacsBusinessBase.csproj", "{3D3F98C7-F165-45E1-A2B2-773CB0296962}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaxoniteUnitTestsShared", "SaxoniteUnitTestsShared\SaxoniteUnitTestsShared.csproj", "{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|x64.ActiveCfg = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|x64.Build.0 = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|x86.ActiveCfg = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Debug|x86.Build.0 = Debug|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|Any CPU.Build.0 = Release|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|x64.ActiveCfg = Release|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|x64.Build.0 = Release|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|x86.ActiveCfg = Release|Any CPU
{F646283D-F7C2-42DD-AB1E-E741455664BD}.Release|x86.Build.0 = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|x64.ActiveCfg = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|x64.Build.0 = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|x86.ActiveCfg = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Debug|x86.Build.0 = Debug|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|Any CPU.Build.0 = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|x64.ActiveCfg = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|x64.Build.0 = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|x86.ActiveCfg = Release|Any CPU
{DA383586-69E3-40EB-A20D-AC1AD24E336C}.Release|x86.Build.0 = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|x64.ActiveCfg = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|x64.Build.0 = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|x86.ActiveCfg = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Debug|x86.Build.0 = Debug|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|Any CPU.Build.0 = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|x64.ActiveCfg = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|x64.Build.0 = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|x86.ActiveCfg = Release|Any CPU
{38FBE932-C1D0-4A28-9172-1466347FD62B}.Release|x86.Build.0 = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|x64.ActiveCfg = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|x64.Build.0 = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|x86.ActiveCfg = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Debug|x86.Build.0 = Debug|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|Any CPU.Build.0 = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|x64.ActiveCfg = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|x64.Build.0 = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|x86.ActiveCfg = Release|Any CPU
{9C5309DA-3205-4423-BE13-923EE61370A6}.Release|x86.Build.0 = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|x64.ActiveCfg = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|x64.Build.0 = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|x86.ActiveCfg = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Debug|x86.Build.0 = Debug|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|Any CPU.Build.0 = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|x64.ActiveCfg = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|x64.Build.0 = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|x86.ActiveCfg = Release|Any CPU
{E211FE36-108E-4D07-BD30-799A156DDDBB}.Release|x86.Build.0 = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|x64.ActiveCfg = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|x64.Build.0 = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|x86.ActiveCfg = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Debug|x86.Build.0 = Debug|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|Any CPU.Build.0 = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|x64.ActiveCfg = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|x64.Build.0 = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|x86.ActiveCfg = Release|Any CPU
{89CFDAA1-15C9-45CF-8FBF-88E36E0E32CF}.Release|x86.Build.0 = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|x64.ActiveCfg = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|x64.Build.0 = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|x86.ActiveCfg = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Debug|x86.Build.0 = Debug|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|Any CPU.Build.0 = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|x64.ActiveCfg = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|x64.Build.0 = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|x86.ActiveCfg = Release|Any CPU
{CFF91B48-04B7-4075-A5B2-FF3FC0B22BC1}.Release|x86.Build.0 = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|x64.ActiveCfg = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|x64.Build.0 = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|x86.ActiveCfg = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Debug|x86.Build.0 = Debug|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|Any CPU.Build.0 = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|x64.ActiveCfg = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|x64.Build.0 = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|x86.ActiveCfg = Release|Any CPU
{C1A3E949-B5EA-4A77-9411-5D8B350056D6}.Release|x86.Build.0 = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|x64.ActiveCfg = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|x64.Build.0 = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|x86.ActiveCfg = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Debug|x86.Build.0 = Debug|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|Any CPU.Build.0 = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|x64.ActiveCfg = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|x64.Build.0 = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|x86.ActiveCfg = Release|Any CPU
{BBEEBD5B-7D00-4024-9626-D8B2FBF248A4}.Release|x86.Build.0 = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|x64.ActiveCfg = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|x64.Build.0 = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|x86.ActiveCfg = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Debug|x86.Build.0 = Debug|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|Any CPU.Build.0 = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|x64.ActiveCfg = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|x64.Build.0 = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|x86.ActiveCfg = Release|Any CPU
{CA680625-E334-4F76-881B-1327A2F9FE86}.Release|x86.Build.0 = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|Any CPU.Build.0 = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|x64.ActiveCfg = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|x64.Build.0 = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|x86.ActiveCfg = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Debug|x86.Build.0 = Debug|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|Any CPU.ActiveCfg = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|Any CPU.Build.0 = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|x64.ActiveCfg = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|x64.Build.0 = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|x86.ActiveCfg = Release|Any CPU
{303BA8E9-1B95-41AD-9F51-32037A22C908}.Release|x86.Build.0 = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|x64.ActiveCfg = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|x64.Build.0 = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|x86.ActiveCfg = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Debug|x86.Build.0 = Debug|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|Any CPU.Build.0 = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|x64.ActiveCfg = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|x64.Build.0 = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|x86.ActiveCfg = Release|Any CPU
{E012B3D3-CF4D-4C2E-ABC6-9E3A3DAE03C5}.Release|x86.Build.0 = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|x64.ActiveCfg = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|x64.Build.0 = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|x86.ActiveCfg = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Debug|x86.Build.0 = Debug|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|Any CPU.Build.0 = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|x64.ActiveCfg = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|x64.Build.0 = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|x86.ActiveCfg = Release|Any CPU
{3E1C2BE2-46C8-4D1D-A1C2-806BB1AD8A7E}.Release|x86.Build.0 = Release|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Debug|x64.ActiveCfg = Debug|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Debug|x64.Build.0 = Debug|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Debug|x86.ActiveCfg = Debug|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Debug|x86.Build.0 = Debug|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Release|Any CPU.Build.0 = Release|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Release|x64.ActiveCfg = Release|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Release|x64.Build.0 = Release|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Release|x86.ActiveCfg = Release|Any CPU
{3D3F98C7-F165-45E1-A2B2-773CB0296962}.Release|x86.Build.0 = Release|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Debug|x64.ActiveCfg = Debug|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Debug|x64.Build.0 = Debug|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Debug|x86.ActiveCfg = Debug|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Debug|x86.Build.0 = Debug|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Release|Any CPU.Build.0 = Release|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Release|x64.ActiveCfg = Release|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Release|x64.Build.0 = Release|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Release|x86.ActiveCfg = Release|Any CPU
{EF62BB9D-8FBC-4B83-BC59-CD123A27BB8E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0DFC2321-53B9-493B-83D3-2ACD1C47C732}
EndGlobalSection
EndGlobal
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
@@ -1,4 +1,4 @@
using Saxonite.Net.Standard.Base.Consoles; using Saxonite.Net.Standard.Base.Consoles;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Localization; using Microsoft.AspNetCore.Mvc.Localization;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@@ -1,4 +1,4 @@
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -1,4 +1,4 @@
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus; using Saxonite.Net.Standard.Base.Bus;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Saxonite.Net.Standard.Dbas.App; using Saxonite.Net.Standard.Dbas.App;
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Mgr; using Saxonite.Net.Standard.Base.Mgr;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Dbas;
@@ -35,14 +35,6 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
base(sessionContext) base(sessionContext)
{ {
} }
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Query Activity Index Entries for User Context. // Query Activity Index Entries for User Context.
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -1,4 +1,4 @@
using Saxonite.Net.Standard.Base.Consoles; using Saxonite.Net.Standard.Base.Consoles;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@@ -1,4 +1,4 @@
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
@@ -1,4 +1,4 @@
using Saxonite.Net.Standard.Base.Consoles; using Saxonite.Net.Standard.Base.Consoles;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Tasks; using Sarand.Net.Standard.Base.Tasks;
@@ -1,4 +1,4 @@
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Consoles; using Saxonite.Net.Standard.Base.Consoles;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -21,14 +21,6 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
base(sessionContext) base(sessionContext)
{ {
} }
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//------------------------------------------------------------------- //-------------------------------------------------------------------
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sacs.Web.Components; using Sacs.Web.Components;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Serialization; using Newtonsoft.Json.Serialization;
@@ -108,13 +108,10 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Online encryption parameters. // Online encryption parameters.
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Online Request Password encryption parameters (key & IV) are defined in // Online Request Password encryption parameters are defined in
// the base Controller so that they can be shared with the Admin application. // the base Controller so that they can be shared with the Admin application.
// NB IV value is generated from the key and fixed so that it doesn't change when the application restarts.
// IV Must be regenerated if key is changed.
protected static String Base64Key_RequestPassword_Online { get; } = SacsEncryptionHelper.EncodePlainKey("{~Saxonite@@Request^Password=}", SacsEncryptionHelper.KeyLength); protected static String Base64Key_RequestPassword_Online { get; } = SacsEncryptionHelper.EncodePlainKey("{~Saxonite@@Request^Password=}", SacsEncryptionHelper.KeyLength);
//private static String Base64IV_RequestPassword_Generated_Online { get; } = SacsEncryptionHelper.InitSymmetricEncryptionIV(Base64Key_RequestPassword_Online); protected const String Purpose_RequestPassword_Online = "Saxonite.Online.RequestPassword";
protected static String Base64IV_RequestPassword_Online { get; } = "1VAWYTW6d72n/6HDNhbqow==";
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Session. // Session.
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Email; using Sarand.Net.Standard.Base.Email;
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.Helpers; using Sarand.Net.Standard.Base.Helpers;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata; using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; using Microsoft.AspNetCore.Mvc.ModelBinding.Binders;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Rendering;
using Sacs.Web.Components; using Sacs.Web.Components;
@@ -44,6 +44,13 @@ namespace Saxonite.Net.Core.Web.Base.Models
protected SaxSystem_Web System { get { return App.System_Web; } } protected SaxSystem_Web System { get { return App.System_Web; } }
public String SessionCookieName { get { return App.SessionCookieName; } } public String SessionCookieName { get { return App.SessionCookieName; } }
public SaxLocaliser Localiser { get; } public SaxLocaliser Localiser { get; }
public override String GetText(String textKey, String defaultText)
{
String text = Localiser[textKey];
if (StringUtil.IsBlank(text) || text.EqualsCI(textKey))
return defaultText;
return text;
}
// Session properties. // Session properties.
public SaxSessionData SessionData { get; set; } public SaxSessionData SessionData { get; set; }
public SaxSessionContext SessionContext { get { return SessionData?.SessionContext ?? App.SessionContext; } } public SaxSessionContext SessionContext { get { return SessionData?.SessionContext ?? App.SessionContext; } }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -1,4 +1,4 @@
using DocumentFormat.OpenXml.Drawing.Diagrams; using DocumentFormat.OpenXml.Drawing.Diagrams;
using DocumentFormat.OpenXml.Office2016.Excel; using DocumentFormat.OpenXml.Office2016.Excel;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -37,7 +37,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
{ {
SaLogger.Debug($"{SysUtil.Fn}"); SaLogger.Debug($"{SysUtil.Fn}");
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
SaxInternals internals = new SaxInternals(sessionContext); SaxInternals internals = new SaxInternals(sessionContext);
disposableItems.Add(internals); disposableItems.Add(internals);
@@ -1,4 +1,4 @@
using DocumentFormat.OpenXml.InkML; using DocumentFormat.OpenXml.InkML;
using HtmlAgilityPack; using HtmlAgilityPack;
using MailKit; using MailKit;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
@@ -357,7 +357,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
UsgaRequestData usgaRequestData = GetUsgaRequestData(); UsgaRequestData usgaRequestData = GetUsgaRequestData();
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve and validate country. // Retrieve and validate country.
SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params(); SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params();
@@ -470,7 +470,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
UsgaRequestData usgaRequestData = GetUsgaRequestData(); UsgaRequestData usgaRequestData = GetUsgaRequestData();
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve and validate country. // Retrieve and validate country.
SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params(); SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params();
@@ -756,7 +756,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
int courseCaptionsCorrected = 0; int courseCaptionsCorrected = 0;
// Verify Course captions. // Verify Course captions.
using (DisposableCollection<SacsDisposable> disposables = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposables = new DisposableCollection<IDisposable>())
{ {
// Local function to allow break/return from within nested loop. // Local function to allow break/return from within nested loop.
void CompareCourse() void CompareCourse()
@@ -777,7 +777,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
disposables.Add(province); disposables.Add(province);
// Separate disposables for each province to restrict volume handled on each disposal. // Separate disposables for each province to restrict volume handled on each disposal.
using (DisposableCollection<SacsDisposable> disposablesProvince = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposablesProvince = new DisposableCollection<IDisposable>())
{ {
// Facilities. // Facilities.
@@ -874,7 +874,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
if (!SysId.IsValid(usgaCourseId)) return markersData.Markers; if (!SysId.IsValid(usgaCourseId)) return markersData.Markers;
MarkerColumnData markerColumns = new MarkerColumnData(); MarkerColumnData markerColumns = new MarkerColumnData();
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve and validate course. // Retrieve and validate course.
SaxGolfUsgaCourse.Params prmCourse = new SaxGolfUsgaCourse.Params(); SaxGolfUsgaCourse.Params prmCourse = new SaxGolfUsgaCourse.Params();
@@ -1157,7 +1157,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
//int maxMarkers = 0; //int maxMarkers = 0;
int markersCorrected = 0; int markersCorrected = 0;
using (DisposableCollection<SacsDisposable> disposables = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposables = new DisposableCollection<IDisposable>())
{ {
// Local function to allow break/return from within nested loop. // Local function to allow break/return from within nested loop.
void CleanseMarkers() void CleanseMarkers()
@@ -1178,7 +1178,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
disposables.Add(province); disposables.Add(province);
// Separate disposables for each province to restrict volume handled on each disposal. // Separate disposables for each province to restrict volume handled on each disposal.
using (DisposableCollection<SacsDisposable> disposablesProvince = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposablesProvince = new DisposableCollection<IDisposable>())
{ {
// Facilities. // Facilities.
@@ -1,4 +1,4 @@
using DocumentFormat.OpenXml.InkML; using DocumentFormat.OpenXml.InkML;
using HtmlAgilityPack; using HtmlAgilityPack;
using MailKit; using MailKit;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
@@ -96,7 +96,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
{ {
if (!OK) return false; if (!OK) return false;
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
foreach (SysId organisationId in config.OrganisationIdsIncluded) foreach (SysId organisationId in config.OrganisationIdsIncluded)
{ {
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Proc.Excel; using Sarand.Net.Standard.Proc.Excel;
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Procs; using Saxonite.Net.Standard.Base.Procs;
@@ -1,14 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<RootNamespace>Saxonite.Net.Core.Web</RootNamespace> <RootNamespace>Saxonite.Net.Core.Web</RootNamespace>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsCoreWeb\SacsCoreWeb.csproj" /> <ProjectReference Include="..\..\..\..\Common-VS\Workspace\SacsCoreWeb\SacsCoreWeb.csproj" />
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsStandardBase\SacsStandardBase.csproj" /> <ProjectReference Include="..\..\..\..\Common-VS\Workspace\SacsStandardBase\SacsStandardBase.csproj" />
<ProjectReference Include="..\..\..\Common-VS\Workspace\SacsStandardDbas\SacsStandardDbas.csproj" /> <ProjectReference Include="..\..\..\..\Common-VS\Workspace\SacsStandardDbas\SacsStandardDbas.csproj" />
<ProjectReference Include="..\SaxoniteStandardBase\SaxoniteStandardBase.csproj" /> <ProjectReference Include="..\SaxoniteStandardBase\SaxoniteStandardBase.csproj" />
<ProjectReference Include="..\SaxoniteStandardDbas\SaxoniteStandardDbas.csproj" /> <ProjectReference Include="..\SaxoniteStandardDbas\SaxoniteStandardDbas.csproj" />
</ItemGroup> </ItemGroup>
@@ -23,8 +23,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.71" /> <PackageReference Include="HtmlAgilityPack" Version="1.13.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.31" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.13" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Helpers; using Sarand.Net.Standard.Base.Helpers;
using Saxonite.Net.Core.Web.Admin.Controllers; using Saxonite.Net.Core.Web.Admin.Controllers;
@@ -85,9 +85,6 @@ namespace Saxonite.Net.Core.Web.Admin.App
public SystemData System { get; private set; } = new SystemData(); public SystemData System { get; private set; } = new SystemData();
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Online application encryption IV value - for consistent encryption during session.
public String Base64IV_AdminApp { get; private set; } = SacsEncryptionHelper.InitSymmetricEncryptionIV(SaxController_Admin.Base64Key_AdminApp);
//------------------------------------------------------------------- //-------------------------------------------------------------------
} }
//======================================================================= //=======================================================================
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Core.Web.Base.Consoles; using Saxonite.Net.Core.Web.Base.Consoles;
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Core.Web.Admin.App; using Saxonite.Net.Core.Web.Admin.App;
using Saxonite.Net.Core.Web.Base.Consoles; using Saxonite.Net.Core.Web.Base.Consoles;
using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.App;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Dbas;
@@ -1,4 +1,4 @@
using MimeKit; using MimeKit;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Procs; using Sarand.Net.Standard.Base.Procs;
using Saxonite.Net.Core.Web.Admin.Procs; using Saxonite.Net.Core.Web.Admin.Procs;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -45,18 +45,18 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
if (StringUtil.IsEmpty(AppConfig.URL.Online.Root)) if (StringUtil.IsEmpty(AppConfig.URL.Online.Root))
return Json(responseData.SetMessage(messageTitle, "Root online URL not specified.")); return Json(responseData.SetPopupMessage(messageTitle, "Root online URL not specified."));
// Identify item. // Identify item.
SysId organisationId = SysId.ToSysId(model.OrganisationId); SysId organisationId = SysId.ToSysId(model.OrganisationId);
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Request to get activation info without valid organisation Id."); SaLogger.Warn($"{SysUtil.Fn} Request to get activation info without valid organisation Id.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
} }
// Retrieve item. // Retrieve item.
@@ -65,7 +65,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation. Id: '{model.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation. Id: '{model.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Organisation address. // Organisation address.
@@ -114,7 +114,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve existing item. // Retrieve existing item.
@@ -124,7 +124,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation. Id: '{model.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation. Id: '{model.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Organisation address. // Organisation address.
@@ -143,17 +143,17 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationMember.UserOrganisation == null) if (organisationMember.UserOrganisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user organisation. Id: '{userOrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user organisation. Id: '{userOrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
if (organisationMember.UserAccount == null) if (organisationMember.UserAccount == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user account . Id: '{organisationMember.UserOrganisation.UserAccountId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user account . Id: '{organisationMember.UserOrganisation.UserAccountId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
if (organisationMember.UserAccount.Status != SaStatus.Awaiting) if (organisationMember.UserAccount.Status != SaStatus.Awaiting)
{ {
SaLogger.Warn($"{SysUtil.Fn} User organisation is not awaiting. Id: '{userOrganisationId}'. Status: {organisationMember.UserAccount.StatusDesc}"); SaLogger.Warn($"{SysUtil.Fn} User organisation is not awaiting. Id: '{userOrganisationId}'. Status: {organisationMember.UserAccount.StatusDesc}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
// Check if this user is to be activated. // Check if this user is to be activated.
bool activateUser = false; bool activateUser = false;
@@ -177,7 +177,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (AccountMgr.GetOrganisationMemberCount(organisation.Id) < 1) if (AccountMgr.GetOrganisationMemberCount(organisation.Id) < 1)
{ {
SaLogger.Warn($"{SysUtil.Fn} Unable to activate Organisation - no active members. Id: '{SysId.ToString(organisationId)}"); SaLogger.Warn($"{SysUtil.Fn} Unable to activate Organisation - no active members. Id: '{SysId.ToString(organisationId)}");
return Json(responseData.SetMessage(messageTitle, Localiser["organisation.activate.msg.no.active.members"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["organisation.activate.msg.no.active.members"]));
} }
} }
@@ -186,7 +186,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateOrganisation(organisation, DbUpdateInfo)) if (!AccountMgr.UpdateOrganisation(organisation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to update organisation [Id:{SysId.ToString(organisation.Id)}]: {AccountMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to update organisation [Id:{SysId.ToString(organisation.Id)}]: {AccountMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
// Activate awaiting members and send welcome email to each. // Activate awaiting members and send welcome email to each.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -164,7 +164,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Request to retrieve associations without valid organisation Id."); SaLogger.Warn($"{SysUtil.Fn} Request to retrieve associations without valid organisation Id.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
} }
// Reference data - association types. // Reference data - association types.
@@ -192,7 +192,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
private void GetOrganisationAssociations(SaxModel_Admin model, SysId organisationId, List<AssociationListData> associations) private void GetOrganisationAssociations(SaxModel_Admin model, SysId organisationId, List<AssociationListData> associations)
{ {
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Item filter. // Item filter.
@@ -312,13 +312,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId itemAssociationId = SysId.ToSysId(model.ItemAssociationId); SysId itemAssociationId = SysId.ToSysId(model.ItemAssociationId);
if (!SysId.IsValid(itemAssociationId)) if (!SysId.IsValid(itemAssociationId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve association. // Retrieve association.
SaxItemAssociation itemAssociation = ItemDataMgr.GetItemAssociationById(itemAssociationId); SaxItemAssociation itemAssociation = ItemDataMgr.GetItemAssociationById(itemAssociationId);
@@ -326,7 +326,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (itemAssociation == null) if (itemAssociation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Item Association for Id: '{model.ItemAssociationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Item Association for Id: '{model.ItemAssociationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Identify organisations. // Identify organisations.
@@ -335,19 +335,19 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Organisation Id must be supplied."); SaLogger.Warn($"{SysUtil.Fn} Organisation Id must be supplied.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
// Validate the association. // Validate the association.
if (itemAssociation.ItemIdFrom.Type != (int)Sax.DataItemType.Organisation) if (itemAssociation.ItemIdFrom.Type != (int)Sax.DataItemType.Organisation)
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent association 'From' item type: {AssociationTypeCodes.GetCodeForType(itemAssociation.ItemIdFrom.Type)}. Expected: Organisation."); SaLogger.Warn($"{SysUtil.Fn} Inconsistent association 'From' item type: {AssociationTypeCodes.GetCodeForType(itemAssociation.ItemIdFrom.Type)}. Expected: Organisation.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
if (itemAssociation.ItemIdTo.Type != (int)Sax.DataItemType.Organisation) if (itemAssociation.ItemIdTo.Type != (int)Sax.DataItemType.Organisation)
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent association 'To' item type: {AssociationTypeCodes.GetCodeForType(itemAssociation.ItemIdTo.Type)}. Expected: Organisation."); SaLogger.Warn($"{SysUtil.Fn} Inconsistent association 'To' item type: {AssociationTypeCodes.GetCodeForType(itemAssociation.ItemIdTo.Type)}. Expected: Organisation.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
// Identify organisations from association items. // Identify organisations from association items.
@@ -359,7 +359,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
else else
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent association - Specified organisation is neither item."); SaLogger.Warn($"{SysUtil.Fn} Inconsistent association - Specified organisation is neither item.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
// Retrieve Organisation. // Retrieve Organisation.
@@ -368,7 +368,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: '{organisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: '{organisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
// Retrieve associated Organisation. // Retrieve associated Organisation.
@@ -377,7 +377,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationAssoc == null) if (organisationAssoc == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve associated Organisation for Id: '{organisationIdAssoc}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve associated Organisation for Id: '{organisationIdAssoc}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
// Construct response. // Construct response.
@@ -408,7 +408,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData); return Json(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Organisation. // Organisation.
@@ -418,7 +418,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: {model.OrganisationId}"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: {model.OrganisationId}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
// Associated Organisation. // Associated Organisation.
@@ -428,12 +428,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationAssoc == null) if (organisationAssoc == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve associated Organisation for Id: {model.OrganisationIdAssoc}"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve associated Organisation for Id: {model.OrganisationIdAssoc}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
if (organisationIdAssoc.Equals(organisationId)) if (organisationIdAssoc.Equals(organisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Associated organisation must not be the same as the organisation."); SaLogger.Warn($"{SysUtil.Fn} Associated organisation must not be the same as the organisation.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
// Association type. // Association type.
@@ -441,18 +441,18 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if ((int)associationType < 1) if ((int)associationType < 1)
{ {
SaLogger.Warn($"{SysUtil.Fn} Association Type must be specified."); SaLogger.Warn($"{SysUtil.Fn} Association Type must be specified.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
Sax.AssociationTypeOption associationTypeOption = model.Association.GetAssociationTypeOption(); Sax.AssociationTypeOption associationTypeOption = model.Association.GetAssociationTypeOption();
if ((int)associationTypeOption < 1) if ((int)associationTypeOption < 1)
{ {
SaLogger.Warn($"{SysUtil.Fn} Association Type Option must be specified."); SaLogger.Warn($"{SysUtil.Fn} Association Type Option must be specified.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
if (!model.IsConsistentWith(associationTypeOption, associationType)) if (!model.IsConsistentWith(associationTypeOption, associationType))
{ {
SaLogger.Warn($"{SysUtil.Fn} Association Type Option ({associationTypeOption}) is inconsistent with Association Type ({associationType})."); SaLogger.Warn($"{SysUtil.Fn} Association Type Option ({associationTypeOption}) is inconsistent with Association Type ({associationType}).");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
// Identify From/To items. // Identify From/To items.
@@ -470,7 +470,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{ {
// Inconsistentcy between the 'Existing' flag and whether the Item Association Id has been specified. // Inconsistentcy between the 'Existing' flag and whether the Item Association Id has been specified.
SaLogger.Warn($"{SysUtil.Fn} Item Association Id " + (StringUtil.ToBool(model.NewItem) ? "specified for new item" : "not specified for existing item") + "."); SaLogger.Warn($"{SysUtil.Fn} Item Association Id " + (StringUtil.ToBool(model.NewItem) ? "specified for new item" : "not specified for existing item") + ".");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
SaxItemAssociation itemAssociation = ItemDataMgr.GetItemAssociationById(itemAssociationId); SaxItemAssociation itemAssociation = ItemDataMgr.GetItemAssociationById(itemAssociationId);
if (itemAssociation == null && StringUtil.ToBool(model.NewItem)) if (itemAssociation == null && StringUtil.ToBool(model.NewItem))
@@ -495,7 +495,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (itemAssociation == null && SysId.IsValid(itemAssociationId)) if (itemAssociation == null && SysId.IsValid(itemAssociationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve item association for Id: '{itemAssociationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve item association for Id: '{itemAssociationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
if (itemAssociation != null) if (itemAssociation != null)
@@ -514,12 +514,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!itemAssociation.ItemIdFrom.Equals(itemIdFrom)) if (!itemAssociation.ItemIdFrom.Equals(itemIdFrom))
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent association - expected 'From' Item Id: {SysId.ToString(itemIdFrom.Id)}. Found: {SysId.ToString(itemAssociation.ItemIdFrom.Id)}"); SaLogger.Warn($"{SysUtil.Fn} Inconsistent association - expected 'From' Item Id: {SysId.ToString(itemIdFrom.Id)}. Found: {SysId.ToString(itemAssociation.ItemIdFrom.Id)}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
if (!itemAssociation.ItemIdTo.Equals(itemIdTo)) if (!itemAssociation.ItemIdTo.Equals(itemIdTo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent association - expected 'To' Item Id: {SysId.ToString(itemIdTo.Id)}. Found: {SysId.ToString(itemAssociation.ItemIdTo.Id)}"); SaLogger.Warn($"{SysUtil.Fn} Inconsistent association - expected 'To' Item Id: {SysId.ToString(itemIdTo.Id)}. Found: {SysId.ToString(itemAssociation.ItemIdTo.Id)}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
} }
else else
@@ -549,7 +549,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ItemDataMgr.InsertItemAssociation(itemAssociation, DbUpdateInfo)) if (!ItemDataMgr.InsertItemAssociation(itemAssociation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to insert item association: {ItemDataMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to insert item association: {ItemDataMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ItemDataMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ItemDataMgr.ErrorStateMessage));
} }
} }
else else
@@ -557,7 +557,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ItemDataMgr.UpdateItemAssociation(itemAssociation, DbUpdateInfo)) if (!ItemDataMgr.UpdateItemAssociation(itemAssociation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to update item association [Id:{SysId.ToString(itemAssociation.Id)}]: {ItemDataMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to update item association [Id:{SysId.ToString(itemAssociation.Id)}]: {ItemDataMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ItemDataMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ItemDataMgr.ErrorStateMessage));
} }
} }
@@ -584,7 +584,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Organisation. // Organisation.
@@ -594,7 +594,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: '{model.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: '{model.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
// Association Organisation. // Association Organisation.
@@ -604,12 +604,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationAssoc == null) if (organisationAssoc == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve associated Organisation for Id: '{model.OrganisationIdAssoc}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve associated Organisation for Id: '{model.OrganisationIdAssoc}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
if (organisationIdAssoc.Equals(organisationId)) if (organisationIdAssoc.Equals(organisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Associated organisation must not be the same as the organisation."); SaLogger.Warn($"{SysUtil.Fn} Associated organisation must not be the same as the organisation.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
// Item Association. // Item Association.
@@ -619,19 +619,19 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (itemAssociation == null) if (itemAssociation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Item Association for Id: '{itemAssociationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Item Association for Id: '{itemAssociationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Validate association Item Ids. // Validate association Item Ids.
if (!itemAssociation.ItemIdFrom.Id.Equals(organisation.Id) && !itemAssociation.ItemIdTo.Id.Equals(organisation.Id)) if (!itemAssociation.ItemIdFrom.Id.Equals(organisation.Id) && !itemAssociation.ItemIdTo.Id.Equals(organisation.Id))
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent item association properties. Organisation must be 'From' or 'To' item"); SaLogger.Warn($"{SysUtil.Fn} Inconsistent item association properties. Organisation must be 'From' or 'To' item");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
if (!itemAssociation.ItemIdFrom.Id.Equals(organisationAssoc.Id) && !itemAssociation.ItemIdTo.Id.Equals(organisationAssoc.Id)) if (!itemAssociation.ItemIdFrom.Id.Equals(organisationAssoc.Id) && !itemAssociation.ItemIdTo.Id.Equals(organisationAssoc.Id))
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent item association properties. Associated Organisation must be 'From' or 'To' item"); SaLogger.Warn($"{SysUtil.Fn} Inconsistent item association properties. Associated Organisation must be 'From' or 'To' item");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
// Logically delete item. // Logically delete item.
@@ -639,7 +639,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ItemDataMgr.UpdateItemAssociation(itemAssociation, DbUpdateInfo)) if (!ItemDataMgr.UpdateItemAssociation(itemAssociation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to update Item Association [Id:{SysId.ToString(itemAssociation.Id)}]: {ItemDataMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to update Item Association [Id:{SysId.ToString(itemAssociation.Id)}]: {ItemDataMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ItemDataMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ItemDataMgr.ErrorStateMessage));
} }
// Construct response. // Construct response.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -58,7 +58,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Reference data - Image content types. // Reference data - Image content types.
@@ -67,7 +67,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Identify item. // Identify item.
SysId organisationId = SysId.ToSysId(model.OrganisationId); SysId organisationId = SysId.ToSysId(model.OrganisationId);
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId); SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId);
@@ -75,7 +75,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{model.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{model.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Organisation address. // Organisation address.
@@ -119,18 +119,18 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model); RefreshModel(model);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve organisation. // Retrieve organisation.
SysId organisationId = SysId.ToSysId(model.OrganisationId); SysId organisationId = SysId.ToSysId(model.OrganisationId);
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId); SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId);
disposableItems.Add(organisation); disposableItems.Add(organisation);
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{model.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{model.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Validate number of images. // Validate number of images.
@@ -218,7 +218,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
} }
// Complete response. // Complete response.
responseData.SetNotification(messageTitle, "Image uploaded."); responseData.SetNotifyMessage(messageTitle, "Image uploaded.");
responseData.Success = true; responseData.Success = true;
return Json(responseData); return Json(responseData);
} }
@@ -238,7 +238,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Validate item properties. // Validate item properties.
@@ -253,7 +253,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{model.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{model.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Organisation address. // Organisation address.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -103,7 +103,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Request to retrieve members without valid organisation Id."); SaLogger.Warn($"{SysUtil.Fn} Request to retrieve members without valid organisation Id.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
} }
// Reference data - organisation roles. // Reference data - organisation roles.
@@ -210,13 +210,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId userOrganisationId = SysId.ToSysId(model.UserOrganisationId); SysId userOrganisationId = SysId.ToSysId(model.UserOrganisationId);
if (!SysId.IsValid(userOrganisationId)) if (!SysId.IsValid(userOrganisationId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxUserOrganisation userOrganisation = AccountMgr.GetUserOrganisationById(userOrganisationId); SaxUserOrganisation userOrganisation = AccountMgr.GetUserOrganisationById(userOrganisationId);
@@ -224,7 +224,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userOrganisation == null) if (userOrganisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve User Organisation for Id: '{model.UserOrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve User Organisation for Id: '{model.UserOrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Retrieve User Account. // Retrieve User Account.
@@ -233,7 +233,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null) if (userAccount == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user account for Id: '{userOrganisation.UserAccountId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user account for Id: '{userOrganisation.UserAccountId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Retrieve Organisation. // Retrieve Organisation.
@@ -242,7 +242,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{userOrganisation.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve organisation for Id: '{userOrganisation.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Construct response. // Construct response.
@@ -273,7 +273,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData); return Json(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// User account. // User account.
@@ -288,7 +288,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(userAccountId)) if (!SysId.IsValid(userAccountId))
{ {
SaLogger.Warn($"{SysUtil.Fn} User Account must be identified"); SaLogger.Warn($"{SysUtil.Fn} User Account must be identified");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
// Organisation. // Organisation.
@@ -297,7 +297,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Organisation Id must be specified"); SaLogger.Warn($"{SysUtil.Fn} Organisation Id must be specified");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
// Retrieve existing item. // Retrieve existing item.
@@ -307,13 +307,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userOrganisation == null && SysId.IsValid(userOrganisationId)) if (userOrganisation == null && SysId.IsValid(userOrganisationId))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user organisation for Id: '{userOrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user organisation for Id: '{userOrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
if (userOrganisation != null && (!userOrganisation.UserAccountId.Equals(userAccountId) || !userOrganisation.OrganisationId.Equals(organisationId))) if (userOrganisation != null && (!userOrganisation.UserAccountId.Equals(userAccountId) || !userOrganisation.OrganisationId.Equals(organisationId)))
{ {
// Either User Account and/or Organisation Ids don't match. // Either User Account and/or Organisation Ids don't match.
SaLogger.Warn($"{SysUtil.Fn} Inconsistent user organisation properties. UserAccountId: {userOrganisation.UserAccountId} vs {userAccountId}. OrganisationId: {userOrganisation.OrganisationId} vs {organisationId}."); SaLogger.Warn($"{SysUtil.Fn} Inconsistent user organisation properties. UserAccountId: {userOrganisation.UserAccountId} vs {userAccountId}. OrganisationId: {userOrganisation.OrganisationId} vs {organisationId}.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// User Organisation not identified. // User Organisation not identified.
@@ -359,7 +359,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertUserOrganisation(userOrganisation, DbUpdateInfo)) if (!AccountMgr.InsertUserOrganisation(userOrganisation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to insert user organisation: {AccountMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to insert user organisation: {AccountMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
else else
@@ -367,7 +367,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateUserOrganisation(userOrganisation, DbUpdateInfo)) if (!AccountMgr.UpdateUserOrganisation(userOrganisation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to update user organisation [Id:{SysId.ToString(userOrganisation.Id)}]: {AccountMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to update user organisation [Id:{SysId.ToString(userOrganisation.Id)}]: {AccountMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
@@ -394,7 +394,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Organisation. // Organisation.
@@ -403,7 +403,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: '{model.OrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve Organisation for Id: '{model.OrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.incomplete"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.incomplete"]));
} }
disposableItems.Add(organisation); disposableItems.Add(organisation);
@@ -414,12 +414,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userOrganisation == null) if (userOrganisation == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user organisation for Id: '{userOrganisationId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user organisation for Id: '{userOrganisationId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
if (!userOrganisation.OrganisationId.Equals(organisation.Id)) if (!userOrganisation.OrganisationId.Equals(organisation.Id))
{ {
SaLogger.Warn($"{SysUtil.Fn} Inconsistent user organisation properties. OrganisationId: {userOrganisation.OrganisationId} vs {organisation.Id}."); SaLogger.Warn($"{SysUtil.Fn} Inconsistent user organisation properties. OrganisationId: {userOrganisation.OrganisationId} vs {organisation.Id}.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.data.inconsistent"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.data.inconsistent"]));
} }
// User Account. // User Account.
@@ -428,7 +428,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null) if (userAccount == null)
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user account for Id: '{userOrganisation.UserAccountId}'"); SaLogger.Warn($"{SysUtil.Fn} Failed to retrieve user account for Id: '{userOrganisation.UserAccountId}'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
// Remove all roles and store. // Remove all roles and store.
@@ -440,7 +440,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertUserOrganisation(userOrganisation, DbUpdateInfo)) if (!AccountMgr.InsertUserOrganisation(userOrganisation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to insert user organisation: {AccountMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to insert user organisation: {AccountMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
else else
@@ -448,7 +448,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateUserOrganisation(userOrganisation, DbUpdateInfo)) if (!AccountMgr.UpdateUserOrganisation(userOrganisation, DbUpdateInfo))
{ {
SaLogger.Warn($"{SysUtil.Fn} Failed to update user organisation [Id:{SysId.ToString(userOrganisation.Id)}]: {AccountMgr.ErrorStateMessage}"); SaLogger.Warn($"{SysUtil.Fn} Failed to update user organisation [Id:{SysId.ToString(userOrganisation.Id)}]: {AccountMgr.ErrorStateMessage}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -47,26 +47,26 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Process console. // Process console.
SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext); SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext);
if (processConsole == null) if (processConsole == null)
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
try try
{ {
// Check whether upload is in progress. // Check whether upload is in progress.
if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.OrganisationUpload)) if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.OrganisationUpload))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.process.in.progress"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.process.in.progress"]));
} }
catch (Exception exc) catch (Exception exc)
{ {
SaLogger.Warn(fn + " " + exc.GetType().Name + " initialising organisation uploader."); SaLogger.Warn(fn + " " + exc.GetType().Name + " initialising organisation uploader.");
return Json(responseData.SetMessage(messageTitle, exc.GetType().Name + " initialising organisation uploader.")); return Json(responseData.SetPopupMessage(messageTitle, exc.GetType().Name + " initialising organisation uploader."));
} }
} }
@@ -98,7 +98,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Validate supplied data properties. // Validate supplied data properties.
@@ -108,14 +108,14 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Process console. // Process console.
SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext); SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext);
if (processConsole == null) if (processConsole == null)
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
try try
{ {
// Check whether upload is in progress. // Check whether upload is in progress.
if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.OrganisationUpload)) if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.OrganisationUpload))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.process.in.progress"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.process.in.progress"]));
// Create the upload process. // Create the upload process.
SaxOrganisationUploader.Config processConfig = new SaxOrganisationUploader.Config(SessionContext, DbUpdateInfo, model.OrganisationDataFile[0]); SaxOrganisationUploader.Config processConfig = new SaxOrganisationUploader.Config(SessionContext, DbUpdateInfo, model.OrganisationDataFile[0]);
@@ -132,7 +132,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
catch (Exception exc) catch (Exception exc)
{ {
SaLogger.Warn(fn + " " + exc.GetType().Name + " initialising organisation uploader."); SaLogger.Warn(fn + " " + exc.GetType().Name + " initialising organisation uploader.");
return Json(responseData.SetMessage(messageTitle, exc.GetType().Name + " initialising organisation uploader.")); return Json(responseData.SetPopupMessage(messageTitle, exc.GetType().Name + " initialising organisation uploader."));
} }
} }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -281,13 +281,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId organisationId = SysId.ToSysId(model.OrganisationId); SysId organisationId = SysId.ToSysId(model.OrganisationId);
if (!SysId.IsValid(organisationId)) if (!SysId.IsValid(organisationId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId); SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId);
@@ -295,7 +295,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null) if (organisation == null)
{ {
SaLogger.Warn(fn + " Failed to retrieve organisation for Id: '" + model.OrganisationId + "'"); SaLogger.Warn(fn + " Failed to retrieve organisation for Id: '" + model.OrganisationId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Organisation address. // Organisation address.
@@ -327,7 +327,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Validate item properties. // Validate item properties.
@@ -342,7 +342,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null && SysId.IsValid(organisationId)) if (organisation == null && SysId.IsValid(organisationId))
{ {
SaLogger.Warn(fn + " Failed to retrieve organisation for Id: '" + model.OrganisationId + "'"); SaLogger.Warn(fn + " Failed to retrieve organisation for Id: '" + model.OrganisationId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Create new item if required. // Create new item if required.
@@ -385,7 +385,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertOrganisation(organisation, DbUpdateInfo)) if (!AccountMgr.InsertOrganisation(organisation, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to insert organisation: " + AccountMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to insert organisation: " + AccountMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
else else
@@ -393,7 +393,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateOrganisation(organisation, DbUpdateInfo)) if (!AccountMgr.UpdateOrganisation(organisation, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to update organisation [Id:" + SysId.ToString(organisation.Id) + "]: " + AccountMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to update organisation [Id:" + SysId.ToString(organisation.Id) + "]: " + AccountMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -43,7 +43,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Unauthorized(); return Unauthorized();
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Validate supplied data properties. // Validate supplied data properties.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models; using Saxonite.Net.Core.Web.Admin.Models;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models.Reference; using Saxonite.Net.Core.Web.Admin.Models.Reference;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions; using NPOI.SS.Formula.Functions;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Core.Web.Admin.Models; using Saxonite.Net.Core.Web.Admin.Models;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions; using NPOI.SS.Formula.Functions;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -447,20 +447,20 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Reference
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Process console. // Process console.
SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext); SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext);
if (processConsole == null) if (processConsole == null)
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
try try
{ {
// Check whether process is in progress. // Check whether process is in progress.
if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.GolfUsgaDataLookup)) if (processConsole.IsProcessing(SaxProcessConsole_Admin.ProcessType.GolfUsgaDataLookup))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.process.in.progress"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.process.in.progress"]));
// Configure the process. // Configure the process.
SaxGolfUsgaDataLookup.Config processConfig = new SaxGolfUsgaDataLookup.Config(SessionContext, DbUpdateInfo); SaxGolfUsgaDataLookup.Config processConfig = new SaxGolfUsgaDataLookup.Config(SessionContext, DbUpdateInfo);
@@ -475,12 +475,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Reference
catch (Exception exc) catch (Exception exc)
{ {
SaLogger.Warn($"{SysUtil.Fn} {exc.GetType().Name} initialising organisation uploader."); SaLogger.Warn($"{SysUtil.Fn} {exc.GetType().Name} initialising organisation uploader.");
return Json(responseData.SetMessage(messageTitle, exc.GetType().Name + " initialising USGA Golf Data Loader.")); return Json(responseData.SetPopupMessage(messageTitle, exc.GetType().Name + " initialising USGA Golf Data Loader."));
} }
} }
// Complete response. // Complete response.
Json(responseData.SetMessage(messageTitle, "Course caption cleansing is underway.")); Json(responseData.SetPopupMessage(messageTitle, "Course caption cleansing is underway."));
responseData.Success = true; responseData.Success = true;
return Json(responseData); return Json(responseData);
} }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models.Reference; using Saxonite.Net.Core.Web.Admin.Models.Reference;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -167,13 +167,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId regionId = SysId.ToSysId(model.RegionId); SysId regionId = SysId.ToSysId(model.RegionId);
if (!SysId.IsValid(regionId)) if (!SysId.IsValid(regionId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxRegion region = ReferenceMgr.GetRegionById(regionId); SaxRegion region = ReferenceMgr.GetRegionById(regionId);
@@ -181,7 +181,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (region == null) if (region == null)
{ {
SaLogger.Warn(fn + " Failed to retrieve region for Id: '" + model.RegionId + "'"); SaLogger.Warn(fn + " Failed to retrieve region for Id: '" + model.RegionId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Construct response. // Construct response.
@@ -210,7 +210,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Validate item properties. // Validate item properties.
@@ -225,7 +225,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (region == null && SysId.IsValid(regionId)) if (region == null && SysId.IsValid(regionId))
{ {
SaLogger.Warn(fn + " Failed to retrieve region for Id: '" + model.RegionId + "'"); SaLogger.Warn(fn + " Failed to retrieve region for Id: '" + model.RegionId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Create new item if required. // Create new item if required.
@@ -253,7 +253,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.InsertRegion(region, DbUpdateInfo)) if (!ReferenceMgr.InsertRegion(region, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to insert region: " + ReferenceMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to insert region: " + ReferenceMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage));
} }
} }
else else
@@ -261,7 +261,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.UpdateRegion(region, DbUpdateInfo)) if (!ReferenceMgr.UpdateRegion(region, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to update region [Id:" + SysId.ToString(region.Id) + "]: " + ReferenceMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to update region [Id:" + SysId.ToString(region.Id) + "]: " + ReferenceMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage));
} }
} }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models; using Saxonite.Net.Core.Web.Admin.Models;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -65,7 +65,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
String fn = GetType().Name + ".SignUserIn"; String fn = GetType().Name + ".SignUserIn";
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
List<SaxUserRole> userRoles = AccountMgr.GetRolesForUser(userAccount.Id); List<SaxUserRole> userRoles = AccountMgr.GetRolesForUser(userAccount.Id);
disposableItems.AddRange(userRoles); disposableItems.AddRange(userRoles);
@@ -210,8 +210,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{ {
public static String CookieName = "SXKLI"; public static String CookieName = "SXKLI";
public static String Base64Key = SacsEncryptionHelper.EncodePlainKey("<=Saxonite^{kEEp+1Ogg3d-IN}~32*>", SacsEncryptionHelper.KeyLength); public static String Base64Key = SacsEncryptionHelper.EncodePlainKey("<=Saxonite^{kEEp+1Ogg3d-IN}~32*>", SacsEncryptionHelper.KeyLength);
public static String Base64IV = "YOX10FIPp1zM1pg5U6fW7A=="; public const String Purpose = "Saxonite.Admin.KeepLoggedIn";
private static String Base64IV_Generated = SacsEncryptionHelper.InitSymmetricEncryptionIV(KeepLoggedIn.Base64Key);
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -221,7 +220,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{ {
NameValueCollection keepLoggedInParams = new NameValueCollection(); NameValueCollection keepLoggedInParams = new NameValueCollection();
keepLoggedInParams.Add(ParamName_KeepLoggedIn_UserAccountId, SysId.ToString(SessionData_Admin.User.UserAccountId)); keepLoggedInParams.Add(ParamName_KeepLoggedIn_UserAccountId, SysId.ToString(SessionData_Admin.User.UserAccountId));
return EncryptParameters(keepLoggedInParams, KeepLoggedIn.Base64IV, KeepLoggedIn.Base64Key); return EncryptParameters(keepLoggedInParams, KeepLoggedIn.Base64Key, KeepLoggedIn.Purpose);
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -242,7 +241,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
KeepLoggedInParams keepLoggedInParams = new KeepLoggedInParams(); KeepLoggedInParams keepLoggedInParams = new KeepLoggedInParams();
if (!StringUtil.IsEmpty(encryptedParams)) if (!StringUtil.IsEmpty(encryptedParams))
{ {
NameValueCollection linkParams = DecryptParameters(encryptedParams, KeepLoggedIn.Base64IV, KeepLoggedIn.Base64Key); NameValueCollection linkParams = DecryptParameters(encryptedParams, KeepLoggedIn.Base64Key, KeepLoggedIn.Purpose);
keepLoggedInParams.UserAccountId = new SysId(StringUtil.ToInt(linkParams.Get(ParamName_KeepLoggedIn_UserAccountId))); keepLoggedInParams.UserAccountId = new SysId(StringUtil.ToInt(linkParams.Get(ParamName_KeepLoggedIn_UserAccountId)));
} }
if (DebugMode) SaLogger.Info($"{SysUtil.Fn} UserAccountId: " + SysId.ToString(keepLoggedInParams.UserAccountId)); if (DebugMode) SaLogger.Info($"{SysUtil.Fn} UserAccountId: " + SysId.ToString(keepLoggedInParams.UserAccountId));
@@ -267,12 +266,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Parameter encryption, eg. for images. // Parameter encryption, eg. for images.
//------------------------------------------------------------------- //-------------------------------------------------------------------
// Encryption key is the same for all users each time the application is started, // Purpose-bound AES-GCM envelopes use a fresh nonce for every encrypted value.
// but a different IV value is generated for each session so that the links/parameters cannot be shared.
public static String Base64Key_AdminApp { get; } = SacsEncryptionHelper.EncodePlainKey("Saxonite&Admin#Encryption-" + DateTime.Today.Format("ddMMyy"), SacsEncryptionHelper.KeyLength); public static String Base64Key_AdminApp { get; } = SacsEncryptionHelper.EncodePlainKey("Saxonite&Admin#Encryption-" + DateTime.Today.Format("ddMMyy"), SacsEncryptionHelper.KeyLength);
private const String Purpose_AdminApp = "Saxonite.Admin.Parameters";
protected String EncryptSessionParams(NameValueCollection parameters) protected String EncryptSessionParams(NameValueCollection parameters)
{ {
return HttpUtility.UrlEncode(EncryptParameters(parameters, SessionData_Admin.Base64IV_AdminApp, Base64Key_AdminApp)); return HttpUtility.UrlEncode(EncryptParameters(parameters, Base64Key_AdminApp, Purpose_AdminApp));
} }
public static String EncryptSessionParams(SaxController_Admin controller, NameValueCollection parameters) public static String EncryptSessionParams(SaxController_Admin controller, NameValueCollection parameters)
{ {
@@ -280,7 +279,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
} }
protected NameValueCollection ExtractSessionParams(String encryptedParams) protected NameValueCollection ExtractSessionParams(String encryptedParams)
{ {
return DecryptParameters(encryptedParams, SessionData_Admin.Base64IV_AdminApp, Base64Key_AdminApp); return DecryptParameters(encryptedParams, Base64Key_AdminApp, Purpose_AdminApp);
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -46,7 +46,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData); return Json(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Get user account. // Get user account.
@@ -106,7 +106,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
SaxUserAccount userAccount = null; SaxUserAccount userAccount = null;
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify user account. // Identify user account.
@@ -182,7 +182,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData.SetSessionExpired(messageTitle, Localiser["security.msg.warn.sessionExpired"])); return Json(responseData.SetSessionExpired(messageTitle, Localiser["security.msg.warn.sessionExpired"]));
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve user account - in case sign-out needs to be recorded. // Retrieve user account - in case sign-out needs to be recorded.
@@ -191,7 +191,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null) if (userAccount == null)
{ {
SaLogger.Warn(fn + " System error on sign-out - failed to retrieve account details. Id: " + SysId.ToInt(SessionData_Admin.User.UserAccountId)); SaLogger.Warn(fn + " System error on sign-out - failed to retrieve account details. Id: " + SysId.ToInt(SessionData_Admin.User.UserAccountId));
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
// Clear user session. // Clear user session.
@@ -248,7 +248,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
String messageTitle = Localiser["security.caption.change.password"]; String messageTitle = Localiser["security.caption.change.password"];
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// If 'Request Password' encrypted params (from email link) are present, // If 'Request Password' encrypted params (from email link) are present,
@@ -324,7 +324,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Construct response. // Construct response.
responseData.Success = true; responseData.Success = true;
if (validRequestPasswordParams) if (validRequestPasswordParams)
responseData.SetMessage(messageTitle, Localiser["security.msg.request.password.saved"]); responseData.SetPopupMessage(messageTitle, Localiser["security.msg.request.password.saved"]);
} }
return Json(responseData); return Json(responseData);
@@ -355,7 +355,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData); return Json(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve user account. // Retrieve user account.
@@ -412,11 +412,8 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
private static String ParamName_EmailAddress { get; } = "ema"; private static String ParamName_EmailAddress { get; } = "ema";
private static String ParamName_ExpiresAt { get; } = "exp"; private static String ParamName_ExpiresAt { get; } = "exp";
private static String ParamName_Token { get; } = "tok"; private static String ParamName_Token { get; } = "tok";
// NB IV value is generated from the key and fixed so that it doesn't change when the application restarts.
// IV Must be regenerated if key is changed.
private static String Base64Key_RequestPassword_Admin { get; } = SacsEncryptionHelper.EncodePlainKey("{~Saxonite@@Request^Password=}", SacsEncryptionHelper.KeyLength); private static String Base64Key_RequestPassword_Admin { get; } = SacsEncryptionHelper.EncodePlainKey("{~Saxonite@@Request^Password=}", SacsEncryptionHelper.KeyLength);
//private static String Base64IV_RequestPassword_Generated { get; } = SacsEncryptionHelper.InitSymmetricEncryptionIV(Base64Key_RequestPassword); private const String Purpose_RequestPassword_Admin = "Saxonite.Admin.RequestPassword";
private static String Base64IV_RequestPassword_Admin { get; } = "1VAWYTW6d72n/6HDNhbqow==";
/// <summary> /// <summary>
/// Generate Request Password link. /// Generate Request Password link.
/// <para>NB For an Online application request (from teh ASdmin system), must ensure that the URL and encryption parameters are switched.</para> /// <para>NB For an Online application request (from teh ASdmin system), must ensure that the URL and encryption parameters are switched.</para>
@@ -426,7 +423,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Base URL. // Base URL.
String baseUrl = onlineContext ? controller.AppConfig.URL.Online.Root : controller.GetRedirectLocation(RedirectLocation.WebAppBase); String baseUrl = onlineContext ? controller.AppConfig.URL.Online.Root : controller.GetRedirectLocation(RedirectLocation.WebAppBase);
String requestPassword_Base64Key = onlineContext ? Base64Key_RequestPassword_Online : Base64Key_RequestPassword_Admin; String requestPassword_Base64Key = onlineContext ? Base64Key_RequestPassword_Online : Base64Key_RequestPassword_Admin;
String requestPassword_ase64IV = onlineContext ? Base64IV_RequestPassword_Online : Base64IV_RequestPassword_Admin; String requestPassword_Purpose = onlineContext ? Purpose_RequestPassword_Online : Purpose_RequestPassword_Admin;
NameValueCollection parameters = new NameValueCollection(); NameValueCollection parameters = new NameValueCollection();
parameters.Add(ParamName_UserAccountId, SysId.ToString(userAccountId)); parameters.Add(ParamName_UserAccountId, SysId.ToString(userAccountId));
@@ -435,7 +432,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
parameters.Add(ParamName_Token, requestPasswordToken); parameters.Add(ParamName_Token, requestPasswordToken);
String link = String link =
baseUrl + "Security/ChangePassword?" + baseUrl + "Security/ChangePassword?" +
ParamName_RequestPasswordEncrypted + "=" + HttpUtility.UrlEncode(EncryptParameters(parameters, requestPassword_ase64IV, requestPassword_Base64Key)); ParamName_RequestPasswordEncrypted + "=" + HttpUtility.UrlEncode(EncryptParameters(parameters, requestPassword_Base64Key, requestPassword_Purpose));
return link; return link;
} }
internal static int GetRequestPasswordEmailLinkExpiresMinutes(SaxController_Admin controller) internal static int GetRequestPasswordEmailLinkExpiresMinutes(SaxController_Admin controller)
@@ -488,7 +485,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RequestPasswordParams requestPasswordParams = new RequestPasswordParams(); RequestPasswordParams requestPasswordParams = new RequestPasswordParams();
if (!StringUtil.IsEmpty(encryptedParams)) if (!StringUtil.IsEmpty(encryptedParams))
{ {
NameValueCollection linkParams = DecryptParameters(encryptedParams, Base64IV_RequestPassword_Admin, Base64Key_RequestPassword_Admin); NameValueCollection linkParams = DecryptParameters(encryptedParams, Base64Key_RequestPassword_Admin, Purpose_RequestPassword_Admin);
requestPasswordParams.UserAccountId = new SysId(StringUtil.ToInt(linkParams.Get(ParamName_UserAccountId))); requestPasswordParams.UserAccountId = new SysId(StringUtil.ToInt(linkParams.Get(ParamName_UserAccountId)));
requestPasswordParams.EmailAddress = linkParams.Get(ParamName_EmailAddress); requestPasswordParams.EmailAddress = linkParams.Get(ParamName_EmailAddress);
requestPasswordParams.ExpiresAt = DateUtil.ParseXmlDateTime(linkParams.Get(ParamName_ExpiresAt)); requestPasswordParams.ExpiresAt = DateUtil.ParseXmlDateTime(linkParams.Get(ParamName_ExpiresAt));
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Primitives; using Microsoft.Extensions.Primitives;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -164,13 +164,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId sportId = SysId.ToSysId(model.SportId); SysId sportId = SysId.ToSysId(model.SportId);
if (!SysId.IsValid(sportId)) if (!SysId.IsValid(sportId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxSport sport = ReferenceMgr.GetSportById(sportId); SaxSport sport = ReferenceMgr.GetSportById(sportId);
@@ -178,7 +178,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (sport == null) if (sport == null)
{ {
SaLogger.Warn(fn + " Failed to retrieve sport for Id: '" + model.SportId + "'"); SaLogger.Warn(fn + " Failed to retrieve sport for Id: '" + model.SportId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Parent sport. // Parent sport.
@@ -211,7 +211,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Validate item properties. // Validate item properties.
@@ -226,7 +226,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (sport == null && SysId.IsValid(sportId)) if (sport == null && SysId.IsValid(sportId))
{ {
SaLogger.Warn(fn + " Failed to retrieve sport for Id: '" + model.SportId + "'"); SaLogger.Warn(fn + " Failed to retrieve sport for Id: '" + model.SportId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Create new item if required. // Create new item if required.
@@ -254,7 +254,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.InsertSport(sport, DbUpdateInfo)) if (!ReferenceMgr.InsertSport(sport, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to insert sport: " + ReferenceMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to insert sport: " + ReferenceMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage));
} }
} }
else else
@@ -262,7 +262,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.UpdateSport(sport, DbUpdateInfo)) if (!ReferenceMgr.UpdateSport(sport, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to update sport [Id:" + SysId.ToString(sport.Id) + "]: " + ReferenceMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to update sport [Id:" + SysId.ToString(sport.Id) + "]: " + ReferenceMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + ReferenceMgr.ErrorStateMessage));
} }
} }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models; using Saxonite.Net.Core.Web.Admin.Models;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -220,13 +220,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId userReportId = SysId.ToSysId(model.UserReport.Id); SysId userReportId = SysId.ToSysId(model.UserReport.Id);
if (!SysId.IsValid(userReportId)) if (!SysId.IsValid(userReportId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxUserReport userReport = SupportMgr.GetUserReportById(userReportId); SaxUserReport userReport = SupportMgr.GetUserReportById(userReportId);
@@ -234,7 +234,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (userReport == null) if (userReport == null)
{ {
SaLogger.Warn(fn + " Failed to retrieve userReport for Id: '" + model.UserReport.Id + "'"); SaLogger.Warn(fn + " Failed to retrieve userReport for Id: '" + model.UserReport.Id + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Retrieve user. // Retrieve user.
@@ -267,7 +267,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Validate item properties. // Validate item properties.
@@ -280,19 +280,19 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (StringUtil.ToBool(model.UserReport.Exists) && !SysId.IsValid(userReportId)) if (StringUtil.ToBool(model.UserReport.Exists) && !SysId.IsValid(userReportId))
{ {
SaLogger.Warn(fn + " Item Id not supplied for existing item."); SaLogger.Warn(fn + " Item Id not supplied for existing item.");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
if (!StringUtil.ToBool(model.UserReport.Exists) && SysId.IsValid(userReportId)) if (!StringUtil.ToBool(model.UserReport.Exists) && SysId.IsValid(userReportId))
{ {
SaLogger.Warn(fn + " Item Id supplied for new item: '" + model.UserReport.Id + "'"); SaLogger.Warn(fn + " Item Id supplied for new item: '" + model.UserReport.Id + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
} }
SaxUserReport userReport = SupportMgr.GetUserReportById(userReportId); SaxUserReport userReport = SupportMgr.GetUserReportById(userReportId);
disposableItems.Add(userReport); disposableItems.Add(userReport);
if (userReport == null && SysId.IsValid(userReportId)) if (userReport == null && SysId.IsValid(userReportId))
{ {
SaLogger.Warn(fn + " Failed to retrieve userReport for Id: '" + model.UserReport.Id + "'"); SaLogger.Warn(fn + " Failed to retrieve userReport for Id: '" + model.UserReport.Id + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// Create new item if required. // Create new item if required.
@@ -319,7 +319,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (!SupportMgr.InsertUserReport(userReport, DbUpdateInfo)) if (!SupportMgr.InsertUserReport(userReport, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to insert userReport: " + SupportMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to insert userReport: " + SupportMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + SupportMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + SupportMgr.ErrorStateMessage));
} }
} }
else else
@@ -327,7 +327,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (!SupportMgr.UpdateUserReport(userReport, DbUpdateInfo)) if (!SupportMgr.UpdateUserReport(userReport, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to update userReport [Id:" + SysId.ToString(userReport.Id) + "]: " + SupportMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to update userReport [Id:" + SysId.ToString(userReport.Id) + "]: " + SupportMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + SupportMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + SupportMgr.ErrorStateMessage));
} }
} }
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models.Support; using Saxonite.Net.Core.Web.Admin.Models.Support;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models.Support; using Saxonite.Net.Core.Web.Admin.Models.Support;
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -61,7 +61,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.System
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Database connection. // Database connection.
Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseFilter.Instance), Sax.Database.Core); Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseFilter.Instance), Sax.Database.Core);
@@ -146,32 +146,32 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.System
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Database instance. // Database instance.
Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseFilter.Instance), Sax.Database.Unknown); Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseFilter.Instance), Sax.Database.Unknown);
if (databaseInstance <= 0) if (databaseInstance <= 0)
return Json(responseData.SetMessage(messageTitle, "Database instance must be specified")); return Json(responseData.SetPopupMessage(messageTitle, "Database instance must be specified"));
responseData.Instance = databaseInstance.ToString(); responseData.Instance = databaseInstance.ToString();
// Database connection. // Database connection.
ISacsDatabase db = App.GetDatabase(SessionContext, databaseInstance); ISacsDatabase db = App.GetDatabase(SessionContext, databaseInstance);
if (db == null) if (db == null)
return Json(responseData.SetMessage(messageTitle, "Unrecognised database instance specified: " + model.DatabaseFilter.Instance)); return Json(responseData.SetPopupMessage(messageTitle, "Unrecognised database instance specified: " + model.DatabaseFilter.Instance));
// Retrieve XML database schema definition. // Retrieve XML database schema definition.
var assembly = typeof(SaxSystem_Dbas).GetTypeInfo().Assembly; var assembly = typeof(SaxSystem_Dbas).GetTypeInfo().Assembly;
String xmlSchema = SacsResourceHelper.GetManifestResourceAsText(assembly, "", "SaxDbDfn_" + databaseInstance.ToString() + ".xml"); String xmlSchema = SacsResourceHelper.GetManifestResourceAsText(assembly, "", "SaxDbDfn_" + databaseInstance.ToString() + ".xml");
if (StringUtil.IsEmpty(xmlSchema)) if (StringUtil.IsEmpty(xmlSchema))
return Json(responseData.SetMessage(messageTitle, "Failed to extract XML schema definition.")); return Json(responseData.SetPopupMessage(messageTitle, "Failed to extract XML schema definition."));
// Extract schema from XML definition. // Extract schema from XML definition.
SaDbProcess_ConvertDbSchema.Config cfgSchemaConvert = new SaDbProcess_ConvertDbSchema.Config(); SaDbProcess_ConvertDbSchema.Config cfgSchemaConvert = new SaDbProcess_ConvertDbSchema.Config();
SaDbProcess_ConvertDbSchema procSchemaConvert = new SaDbProcess_ConvertDbSchema(cfgSchemaConvert); SaDbProcess_ConvertDbSchema procSchemaConvert = new SaDbProcess_ConvertDbSchema(cfgSchemaConvert);
List<DbDfnTable> tables = procSchemaConvert.ConvertXmlToTables(xmlSchema); List<DbDfnTable> tables = procSchemaConvert.ConvertXmlToTables(xmlSchema);
if (procSchemaConvert.HasErrorMessage()) if (procSchemaConvert.HasErrorMessage())
return Json(responseData.SetMessage(messageTitle, "Failed to convert XML schema: " + procSchemaConvert.GetErrorMessage())); return Json(responseData.SetPopupMessage(messageTitle, "Failed to convert XML schema: " + procSchemaConvert.GetErrorMessage()));
SaDbProcess_CompareDatabaseSchemas.Config cfgSchemaCompare = new SaDbProcess_CompareDatabaseSchemas.Config(tables, db); SaDbProcess_CompareDatabaseSchemas.Config cfgSchemaCompare = new SaDbProcess_CompareDatabaseSchemas.Config(tables, db);
cfgSchemaCompare.HideIdenticalObjects = true; cfgSchemaCompare.HideIdenticalObjects = true;
@@ -342,17 +342,17 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.System
return GetAjaxResult_InvalidSession(responseData); return GetAjaxResult_InvalidSession(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Parameters. // Parameters.
if (StringUtil.IsEmpty(model.DatabaseTable.Name)) if (StringUtil.IsEmpty(model.DatabaseTable.Name))
return Json(responseData.SetMessage(messageTitle, "Table name must be supplied.")); return Json(responseData.SetPopupMessage(messageTitle, "Table name must be supplied."));
// Database instance. // Database instance.
Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseTable.Instance), Sax.Database.Unknown); Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseTable.Instance), Sax.Database.Unknown);
if (databaseInstance <= 0) if (databaseInstance <= 0)
return Json(responseData.SetMessage(messageTitle, "Database instance must be specified")); return Json(responseData.SetPopupMessage(messageTitle, "Database instance must be specified"));
// Database connection. // Database connection.
ISacsDatabase db = App.GetDatabase(SessionContext, databaseInstance); ISacsDatabase db = App.GetDatabase(SessionContext, databaseInstance);
@@ -360,7 +360,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.System
// Table definition. // Table definition.
DbDfnTable tableDfn = db.GetTableDfn(model.DatabaseTable.Name, true); DbDfnTable tableDfn = db.GetTableDfn(model.DatabaseTable.Name, true);
if (tableDfn == null) if (tableDfn == null)
return Json(responseData.SetMessage(messageTitle, "Invalid Table name supplied.")); return Json(responseData.SetPopupMessage(messageTitle, "Invalid Table name supplied."));
// Populate table response. // Populate table response.
responseData.Table = new AjaxResponseData_Table(tableDfn); responseData.Table = new AjaxResponseData_Table(tableDfn);
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -264,13 +264,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model); RefreshModel(model);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId userAccountId = SysId.ToSysId(model.UserId); SysId userAccountId = SysId.ToSysId(model.UserId);
if (!SysId.IsValid(userAccountId)) if (!SysId.IsValid(userAccountId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxUserAccount user = AccountMgr.GetUserAccountById(userAccountId); SaxUserAccount user = AccountMgr.GetUserAccountById(userAccountId);
@@ -278,7 +278,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (user == null) if (user == null)
{ {
SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + userAccountId + "'"); SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + userAccountId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// User Sports. // User Sports.
@@ -314,7 +314,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model); RefreshModel(model);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify user. // Identify user.
@@ -371,7 +371,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData); return Json(responseData);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve existing item. // Retrieve existing item.
@@ -381,7 +381,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (user == null && SysId.IsValid(userAccountId)) if (user == null && SysId.IsValid(userAccountId))
{ {
SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + model.UserId + "'"); SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + model.UserId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// User roles, including deleted in case of reassignment. // User roles, including deleted in case of reassignment.
@@ -439,7 +439,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertUserAccount(user, DbUpdateInfo)) if (!AccountMgr.InsertUserAccount(user, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to insert user: " + AccountMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to insert user: " + AccountMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
else else
@@ -447,7 +447,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateUserAccount(user, DbUpdateInfo)) if (!AccountMgr.UpdateUserAccount(user, DbUpdateInfo))
{ {
SaLogger.Warn(fn + " Failed to update user [Id:" + SysId.ToString(user.Id) + "]: " + AccountMgr.ErrorStateMessage); SaLogger.Warn(fn + " Failed to update user [Id:" + SysId.ToString(user.Id) + "]: " + AccountMgr.ErrorStateMessage);
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage)); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
} }
} }
@@ -501,7 +501,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model); RefreshModel(model);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Retrieve user. // Retrieve user.
@@ -511,7 +511,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null) if (userAccount == null)
{ {
SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + model.UserId + "'"); SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + model.UserId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// User roles. // User roles.
@@ -524,28 +524,28 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
bool sendRequestPasswordOnline = StringUtil.ToBool(model.UserEmailRequestPasswordOnline); bool sendRequestPasswordOnline = StringUtil.ToBool(model.UserEmailRequestPasswordOnline);
bool sendRequestPasswordAdmin = StringUtil.ToBool(model.UserEmailRequestPasswordAdmin); bool sendRequestPasswordAdmin = StringUtil.ToBool(model.UserEmailRequestPasswordAdmin);
if (!sendAcountActivationOnline && !sendRequestPasswordOnline && !sendRequestPasswordAdmin) if (!sendAcountActivationOnline && !sendRequestPasswordOnline && !sendRequestPasswordAdmin)
return Json(responseData.SetMessage(messageTitle, Localiser["msg.validation.select.option"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.validation.select.option"]));
if (sendRequestPasswordAdmin && !systemAdmin) if (sendRequestPasswordAdmin && !systemAdmin)
return Json(responseData.SetMessage(messageTitle, Localiser["user.msg.not.system.admin"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["user.msg.not.system.admin"]));
// Send emails. // Send emails.
int emailsSentCount = 0; int emailsSentCount = 0;
if (sendAcountActivationOnline) if (sendAcountActivationOnline)
{ {
if (!OrganisationController.SendAccountActivatedEmail(this, userAccount)) if (!OrganisationController.SendAccountActivatedEmail(this, userAccount))
return Json(responseData.SetMessage(messageTitle, "Failed to send Online Account Activation email.")); return Json(responseData.SetPopupMessage(messageTitle, "Failed to send Online Account Activation email."));
emailsSentCount++; emailsSentCount++;
} }
if (sendRequestPasswordOnline) if (sendRequestPasswordOnline)
{ {
if (!SecurityController.SendRequestPasswordEmail(this, userAccount, true)) if (!SecurityController.SendRequestPasswordEmail(this, userAccount, true))
return Json(responseData.SetMessage(messageTitle, "Failed to send Online Request Password email.")); return Json(responseData.SetPopupMessage(messageTitle, "Failed to send Online Request Password email."));
emailsSentCount++; emailsSentCount++;
} }
if (sendRequestPasswordAdmin) if (sendRequestPasswordAdmin)
{ {
if (!SecurityController.SendRequestPasswordEmail(this, userAccount, false)) if (!SecurityController.SendRequestPasswordEmail(this, userAccount, false))
return Json(responseData.SetMessage(messageTitle, "Failed to send Admin Request Password email.")); return Json(responseData.SetPopupMessage(messageTitle, "Failed to send Admin Request Password email."));
emailsSentCount++; emailsSentCount++;
} }
@@ -555,7 +555,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Construct response. // Construct response.
PopulateUserResponseItemData(model, responseData.user, userAccount, userSports, userRoles.GetUserRolesByStatus(SaStatus.Active)); PopulateUserResponseItemData(model, responseData.user, userAccount, userSports, userRoles.GetUserRolesByStatus(SaStatus.Active));
responseData.SetNotification(messageTitle, "Emails sent: " + emailsSentCount); responseData.SetNotifyMessage(messageTitle, "Emails sent: " + emailsSentCount);
responseData.Success = true; responseData.Success = true;
} }
return Json(responseData); return Json(responseData);
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Core.Web.Admin.Models; using Saxonite.Net.Core.Web.Admin.Models;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -156,13 +156,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model); RefreshModel(model);
// Record disposable items as they are created so all can be disposed when needed. // Record disposable items as they are created so all can be disposed when needed.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>()) using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{ {
// Identify item. // Identify item.
SysId userAccountId = SysId.ToSysId(model.UserId); SysId userAccountId = SysId.ToSysId(model.UserId);
if (!SysId.IsValid(userAccountId)) if (!SysId.IsValid(userAccountId))
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
// Retrieve item. // Retrieve item.
SaxUserAccount user = AccountMgr.GetUserAccountById(userAccountId); SaxUserAccount user = AccountMgr.GetUserAccountById(userAccountId);
@@ -170,7 +170,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (user == null) if (user == null)
{ {
SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + userAccountId + "'"); SaLogger.Warn(fn + " Failed to retrieve user for Id: '" + userAccountId + "'");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"])); return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
} }
// User Online. // User Online.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
using Saxonite.Net.Core.Web.Admin.Models; using Saxonite.Net.Core.Web.Admin.Models;
@@ -1,4 +1,4 @@
using Sacs.Web.Components; using Sacs.Web.Components;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Helpers; using Sarand.Net.Standard.Base.Helpers;
@@ -1,4 +1,4 @@
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
using Saxonite.Net.Core.Web.Base.Models; using Saxonite.Net.Core.Web.Base.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.App;
using Saxonite.Net.Core.Web.Base.Models; using Saxonite.Net.Core.Web.Base.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Rendering;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
@@ -211,7 +211,7 @@ namespace Saxonite.Net.Core.Web.Admin.Models
if (ContactData.Methods.Count != ContactMethods.ToInt()) if (ContactData.Methods.Count != ContactMethods.ToInt())
{ {
SaLogger.Warn(fn + " Inconsistent Contact Methods received. Expected: " + ContactMethods + ". Received: " + ContactData.Methods.Count); SaLogger.Warn(fn + " Inconsistent Contact Methods received. Expected: " + ContactMethods + ". Received: " + ContactData.Methods.Count);
responseData.SetMessage(Localiser["caption.contact.method"], "System error"); responseData.SetPopupMessage(Localiser["caption.contact.method"], "System error");
} }
} }
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Utils; using Sarand.Net.Standard.Base.Utils;

Some files were not shown because too many files have changed in this diff Show More