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

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

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

Application version: 1.3.0

Reviewed-on: #1
Co-authored-by: andy <andy@sarand.com>
This commit was merged in pull request #1.
This commit is contained in:
2026-10-16 18:24:16 +01:00
committed by andy
parent 2c3fb146ab
commit 9f22b522df
1996 changed files with 1992 additions and 1179 deletions
+14 -1
View File
@@ -360,4 +360,17 @@ MigrationBackup/
.ionide/
# 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.Core;
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.Hosting;
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.Collections.Generic;
using System.Text;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Localization;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
@@ -1,4 +1,4 @@
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.App;
using System;
using System.Collections.Generic;
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 System;
using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
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.Base.App;
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.Core;
using Sarand.Net.Standard.Base.Dbas;
@@ -35,14 +35,6 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
base(sessionContext)
{
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
}
base.Dispose(disposing);
}
//-------------------------------------------------------------------
// 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.Collections.Generic;
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.Bus;
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.Collections.Generic;
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.Core;
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 System;
using System.Collections.Generic;
@@ -21,14 +21,6 @@ namespace Saxonite.Net.Core.Web.Base.Consoles
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 Sarand.Net.Standard.Base.App;
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 Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
@@ -108,13 +108,10 @@ namespace Saxonite.Net.Core.Web.Base.Controllers
//-------------------------------------------------------------------
// 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.
// 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);
//private static String Base64IV_RequestPassword_Generated_Online { get; } = SacsEncryptionHelper.InitSymmetricEncryptionIV(Base64Key_RequestPassword_Online);
protected static String Base64IV_RequestPassword_Online { get; } = "1VAWYTW6d72n/6HDNhbqow==";
protected const String Purpose_RequestPassword_Online = "Saxonite.Online.RequestPassword";
//-------------------------------------------------------------------
// Session.
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration;
using Sarand.Net.Standard.Base.Core;
using Saxonite.Net.Standard.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.Email;
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 System;
using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using System;
using System.Collections.Generic;
using System.Text;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Binders;
using Sarand.Net.Standard.Base.App;
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 System;
using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
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.Rendering;
using Sacs.Web.Components;
@@ -44,6 +44,13 @@ namespace Saxonite.Net.Core.Web.Base.Models
protected SaxSystem_Web System { get { return App.System_Web; } }
public String SessionCookieName { get { return App.SessionCookieName; } }
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.
public SaxSessionData SessionData { get; set; }
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 System;
using System.Collections.Generic;
@@ -1,4 +1,4 @@
using DocumentFormat.OpenXml.Drawing.Diagrams;
using DocumentFormat.OpenXml.Drawing.Diagrams;
using DocumentFormat.OpenXml.Office2016.Excel;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -37,7 +37,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
{
SaLogger.Debug($"{SysUtil.Fn}");
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
SaxInternals internals = new SaxInternals(sessionContext);
disposableItems.Add(internals);
@@ -1,4 +1,4 @@
using DocumentFormat.OpenXml.InkML;
using DocumentFormat.OpenXml.InkML;
using HtmlAgilityPack;
using MailKit;
using Microsoft.Net.Http.Headers;
@@ -357,7 +357,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
UsgaRequestData usgaRequestData = GetUsgaRequestData();
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
// Retrieve and validate country.
SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params();
@@ -470,7 +470,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
UsgaRequestData usgaRequestData = GetUsgaRequestData();
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
// Retrieve and validate country.
SaxGolfUsgaCountry.Params prmCountry = new SaxGolfUsgaCountry.Params();
@@ -756,7 +756,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
int courseCaptionsCorrected = 0;
// 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.
void CompareCourse()
@@ -777,7 +777,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
disposables.Add(province);
// 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.
@@ -874,7 +874,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
if (!SysId.IsValid(usgaCourseId)) return markersData.Markers;
MarkerColumnData markerColumns = new MarkerColumnData();
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
// Retrieve and validate course.
SaxGolfUsgaCourse.Params prmCourse = new SaxGolfUsgaCourse.Params();
@@ -1157,7 +1157,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
//int maxMarkers = 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.
void CleanseMarkers()
@@ -1178,7 +1178,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
disposables.Add(province);
// 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.
@@ -1,4 +1,4 @@
using DocumentFormat.OpenXml.InkML;
using DocumentFormat.OpenXml.InkML;
using HtmlAgilityPack;
using MailKit;
using Microsoft.Net.Http.Headers;
@@ -96,7 +96,7 @@ namespace Saxonite.Net.Core.Web.Base.Procs
{
if (!OK) return false;
using (DisposableCollection<SacsDisposable> disposableItems = new DisposableCollection<SacsDisposable>())
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
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 Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Procs;
@@ -1,14 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>Saxonite.Net.Core.Web</RootNamespace>
</PropertyGroup>
<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="..\..\..\..\Common-VS\Workspace\SacsCoreWeb\SacsCoreWeb.csproj" />
<ProjectReference Include="..\..\..\..\Common-VS\Workspace\SacsStandardBase\SacsStandardBase.csproj" />
<ProjectReference Include="..\..\..\..\Common-VS\Workspace\SacsStandardDbas\SacsStandardDbas.csproj" />
<ProjectReference Include="..\SaxoniteStandardBase\SaxoniteStandardBase.csproj" />
<ProjectReference Include="..\SaxoniteStandardDbas\SaxoniteStandardDbas.csproj" />
</ItemGroup>
@@ -23,8 +23,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.71" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.31" />
<PackageReference Include="HtmlAgilityPack" Version="1.13.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.13" />
</ItemGroup>
<ItemGroup>
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
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 System;
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.Helpers;
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();
//-------------------------------------------------------------------
// 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 Saxonite.Net.Core.Web.Base.Consoles;
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.Base.Consoles;
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.Core;
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.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 Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -45,18 +45,18 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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))
return Json(responseData.SetMessage(messageTitle, "Root online URL not specified."));
return Json(responseData.SetPopupMessage(messageTitle, "Root online URL not specified."));
// Identify item.
SysId organisationId = SysId.ToSysId(model.OrganisationId);
if (!SysId.IsValid(organisationId))
{
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.
@@ -65,7 +65,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -114,7 +114,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
@@ -124,7 +124,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -143,17 +143,17 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationMember.UserOrganisation == null)
{
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)
{
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)
{
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.
bool activateUser = false;
@@ -177,7 +177,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (AccountMgr.GetOrganisationMemberCount(organisation.Id) < 1)
{
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))
{
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.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -164,7 +164,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId))
{
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.
@@ -192,7 +192,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
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.
using (DisposableCollection<SacsHierarchyItem> disposableItems = new DisposableCollection<SacsHierarchyItem>())
using (DisposableCollection<IDisposable> disposableItems = new DisposableCollection<IDisposable>())
{
// Item filter.
@@ -312,13 +312,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
SysId itemAssociationId = SysId.ToSysId(model.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.
SaxItemAssociation itemAssociation = ItemDataMgr.GetItemAssociationById(itemAssociationId);
@@ -326,7 +326,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (itemAssociation == null)
{
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.
@@ -335,19 +335,19 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId))
{
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.
if (itemAssociation.ItemIdFrom.Type != (int)Sax.DataItemType.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)
{
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.
@@ -359,7 +359,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
else
{
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.
@@ -368,7 +368,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -377,7 +377,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationAssoc == null)
{
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.
@@ -408,7 +408,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData);
// 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.
@@ -418,7 +418,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -428,12 +428,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationAssoc == null)
{
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))
{
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.
@@ -441,18 +441,18 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if ((int)associationType < 1)
{
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();
if ((int)associationTypeOption < 1)
{
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))
{
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.
@@ -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.
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);
if (itemAssociation == null && StringUtil.ToBool(model.NewItem))
@@ -495,7 +495,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (itemAssociation == null && SysId.IsValid(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)
@@ -514,12 +514,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
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)}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
}
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)}");
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
}
}
else
@@ -549,7 +549,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ItemDataMgr.InsertItemAssociation(itemAssociation, DbUpdateInfo))
{
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
@@ -557,7 +557,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ItemDataMgr.UpdateItemAssociation(itemAssociation, DbUpdateInfo))
{
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);
// 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.
@@ -594,7 +594,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -604,12 +604,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisationAssoc == null)
{
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))
{
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.
@@ -619,19 +619,19 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (itemAssociation == null)
{
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.
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");
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))
{
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.
@@ -639,7 +639,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ItemDataMgr.UpdateItemAssociation(itemAssociation, DbUpdateInfo))
{
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.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -58,7 +58,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
@@ -67,7 +67,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Identify item.
SysId organisationId = SysId.ToSysId(model.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.
SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId);
@@ -75,7 +75,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -119,18 +119,18 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model);
// 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.
SysId organisationId = SysId.ToSysId(model.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);
disposableItems.Add(organisation);
if (organisation == null)
{
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.
@@ -218,7 +218,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
}
// Complete response.
responseData.SetNotification(messageTitle, "Image uploaded.");
responseData.SetNotifyMessage(messageTitle, "Image uploaded.");
responseData.Success = true;
return Json(responseData);
}
@@ -238,7 +238,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
@@ -253,7 +253,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -103,7 +103,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId))
{
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.
@@ -210,13 +210,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
SysId userOrganisationId = SysId.ToSysId(model.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.
SaxUserOrganisation userOrganisation = AccountMgr.GetUserOrganisationById(userOrganisationId);
@@ -224,7 +224,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userOrganisation == null)
{
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.
@@ -233,7 +233,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null)
{
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.
@@ -242,7 +242,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -273,7 +273,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData);
// 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.
@@ -288,7 +288,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(userAccountId))
{
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.
@@ -297,7 +297,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!SysId.IsValid(organisationId))
{
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.
@@ -307,13 +307,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userOrganisation == null && SysId.IsValid(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)))
{
// 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}.");
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.
@@ -359,7 +359,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertUserOrganisation(userOrganisation, DbUpdateInfo))
{
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
@@ -367,7 +367,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateUserOrganisation(userOrganisation, DbUpdateInfo))
{
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);
// 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.
@@ -403,7 +403,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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);
@@ -414,12 +414,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userOrganisation == null)
{
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))
{
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.
@@ -428,7 +428,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null)
{
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.
@@ -440,7 +440,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertUserOrganisation(userOrganisation, DbUpdateInfo))
{
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
@@ -448,7 +448,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateUserOrganisation(userOrganisation, DbUpdateInfo))
{
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -47,26 +47,26 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext);
if (processConsole == null)
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
try
{
// Check whether upload is in progress.
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)
{
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);
// 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.
@@ -108,14 +108,14 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Process console.
SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext);
if (processConsole == null)
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
try
{
// Check whether upload is in progress.
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.
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)
{
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -281,13 +281,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
SysId organisationId = SysId.ToSysId(model.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.
SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationId);
@@ -295,7 +295,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null)
{
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.
@@ -327,7 +327,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
@@ -342,7 +342,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (organisation == null && SysId.IsValid(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.
@@ -385,7 +385,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertOrganisation(organisation, DbUpdateInfo))
{
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
@@ -393,7 +393,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateOrganisation(organisation, DbUpdateInfo))
{
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -43,7 +43,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Unauthorized();
// 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.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Utils;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models;
using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models.Reference;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using Sarand.Net.Standard.Base.App;
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.Utils;
using Saxonite.Net.Core.Web.Admin.Models;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -447,20 +447,20 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Reference
return GetAjaxResult_InvalidSession(responseData);
// 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.
SaxProcessConsole_Admin processConsole = GetProcessConsole_Admin(SessionContext);
if (processConsole == null)
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.system"]));
return Json(responseData.SetPopupMessage(messageTitle, Localiser["msg.error.system"]));
try
{
// Check whether process is in progress.
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.
SaxGolfUsgaDataLookup.Config processConfig = new SaxGolfUsgaDataLookup.Config(SessionContext, DbUpdateInfo);
@@ -475,12 +475,12 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Reference
catch (Exception exc)
{
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.
Json(responseData.SetMessage(messageTitle, "Course caption cleansing is underway."));
Json(responseData.SetPopupMessage(messageTitle, "Course caption cleansing is underway."));
responseData.Success = true;
return Json(responseData);
}
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models.Reference;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -167,13 +167,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
SysId regionId = SysId.ToSysId(model.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.
SaxRegion region = ReferenceMgr.GetRegionById(regionId);
@@ -181,7 +181,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (region == null)
{
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.
@@ -210,7 +210,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
@@ -225,7 +225,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (region == null && SysId.IsValid(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.
@@ -253,7 +253,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.InsertRegion(region, DbUpdateInfo))
{
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
@@ -261,7 +261,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.UpdateRegion(region, DbUpdateInfo))
{
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 Saxonite.Net.Core.Web.Admin.Models;
using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -65,7 +65,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
String fn = GetType().Name + ".SignUserIn";
// 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);
disposableItems.AddRange(userRoles);
@@ -210,8 +210,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{
public static String CookieName = "SXKLI";
public static String Base64Key = SacsEncryptionHelper.EncodePlainKey("<=Saxonite^{kEEp+1Ogg3d-IN}~32*>", SacsEncryptionHelper.KeyLength);
public static String Base64IV = "YOX10FIPp1zM1pg5U6fW7A==";
private static String Base64IV_Generated = SacsEncryptionHelper.InitSymmetricEncryptionIV(KeepLoggedIn.Base64Key);
public const String Purpose = "Saxonite.Admin.KeepLoggedIn";
}
//-------------------------------------------------------------------
@@ -221,7 +220,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
{
NameValueCollection keepLoggedInParams = new NameValueCollection();
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();
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)));
}
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.
//-------------------------------------------------------------------
// Encryption key is the same for all users each time the application is started,
// but a different IV value is generated for each session so that the links/parameters cannot be shared.
// Purpose-bound AES-GCM envelopes use a fresh nonce for every encrypted value.
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)
{
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)
{
@@ -280,7 +279,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
}
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -46,7 +46,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData);
// 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.
@@ -106,7 +106,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
SaxUserAccount userAccount = null;
// 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.
@@ -182,7 +182,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData.SetSessionExpired(messageTitle, Localiser["security.msg.warn.sessionExpired"]));
// 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.
@@ -191,7 +191,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null)
{
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.
@@ -248,7 +248,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
String messageTitle = Localiser["security.caption.change.password"];
// 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,
@@ -324,7 +324,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Construct response.
responseData.Success = true;
if (validRequestPasswordParams)
responseData.SetMessage(messageTitle, Localiser["security.msg.request.password.saved"]);
responseData.SetPopupMessage(messageTitle, Localiser["security.msg.request.password.saved"]);
}
return Json(responseData);
@@ -355,7 +355,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData);
// 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.
@@ -412,11 +412,8 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
private static String ParamName_EmailAddress { get; } = "ema";
private static String ParamName_ExpiresAt { get; } = "exp";
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 Base64IV_RequestPassword_Generated { get; } = SacsEncryptionHelper.InitSymmetricEncryptionIV(Base64Key_RequestPassword);
private static String Base64IV_RequestPassword_Admin { get; } = "1VAWYTW6d72n/6HDNhbqow==";
private const String Purpose_RequestPassword_Admin = "Saxonite.Admin.RequestPassword";
/// <summary>
/// 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>
@@ -426,7 +423,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Base URL.
String baseUrl = onlineContext ? controller.AppConfig.URL.Online.Root : controller.GetRedirectLocation(RedirectLocation.WebAppBase);
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();
parameters.Add(ParamName_UserAccountId, SysId.ToString(userAccountId));
@@ -435,7 +432,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
parameters.Add(ParamName_Token, requestPasswordToken);
String link =
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;
}
internal static int GetRequestPasswordEmailLinkExpiresMinutes(SaxController_Admin controller)
@@ -488,7 +485,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RequestPasswordParams requestPasswordParams = new RequestPasswordParams();
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.EmailAddress = linkParams.Get(ParamName_EmailAddress);
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.Extensions.Logging;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -164,13 +164,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
SysId sportId = SysId.ToSysId(model.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.
SaxSport sport = ReferenceMgr.GetSportById(sportId);
@@ -178,7 +178,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (sport == null)
{
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.
@@ -211,7 +211,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return GetAjaxResult_InvalidSession(responseData);
// 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.
@@ -226,7 +226,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (sport == null && SysId.IsValid(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.
@@ -254,7 +254,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.InsertSport(sport, DbUpdateInfo))
{
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
@@ -262,7 +262,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!ReferenceMgr.UpdateSport(sport, DbUpdateInfo))
{
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 Saxonite.Net.Core.Web.Admin.Models;
using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -220,13 +220,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
return GetAjaxResult_InvalidSession(responseData);
// 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.
SysId userReportId = SysId.ToSysId(model.UserReport.Id);
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.
SaxUserReport userReport = SupportMgr.GetUserReportById(userReportId);
@@ -234,7 +234,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (userReport == null)
{
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.
@@ -267,7 +267,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
return GetAjaxResult_InvalidSession(responseData);
// 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.
@@ -280,19 +280,19 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (StringUtil.ToBool(model.UserReport.Exists) && !SysId.IsValid(userReportId))
{
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))
{
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);
disposableItems.Add(userReport);
if (userReport == null && SysId.IsValid(userReportId))
{
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.
@@ -319,7 +319,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (!SupportMgr.InsertUserReport(userReport, DbUpdateInfo))
{
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
@@ -327,7 +327,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.Support
if (!SupportMgr.UpdateUserReport(userReport, DbUpdateInfo))
{
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 Saxonite.Net.Core.Web.Admin.Models.Support;
using Saxonite.Net.Core.Web.Base.App;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Saxonite.Net.Core.Web.Admin.Models.Support;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -61,7 +61,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.System
return GetAjaxResult_InvalidSession(responseData);
// 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.
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);
// 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.
Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseFilter.Instance), Sax.Database.Unknown);
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();
// Database connection.
ISacsDatabase db = App.GetDatabase(SessionContext, databaseInstance);
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.
var assembly = typeof(SaxSystem_Dbas).GetTypeInfo().Assembly;
String xmlSchema = SacsResourceHelper.GetManifestResourceAsText(assembly, "", "SaxDbDfn_" + databaseInstance.ToString() + ".xml");
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.
SaDbProcess_ConvertDbSchema.Config cfgSchemaConvert = new SaDbProcess_ConvertDbSchema.Config();
SaDbProcess_ConvertDbSchema procSchemaConvert = new SaDbProcess_ConvertDbSchema(cfgSchemaConvert);
List<DbDfnTable> tables = procSchemaConvert.ConvertXmlToTables(xmlSchema);
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);
cfgSchemaCompare.HideIdenticalObjects = true;
@@ -342,17 +342,17 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.System
return GetAjaxResult_InvalidSession(responseData);
// 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.
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.
Sax.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseTable.Instance), Sax.Database.Unknown);
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.
ISacsDatabase db = App.GetDatabase(SessionContext, databaseInstance);
@@ -360,7 +360,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers.System
// Table definition.
DbDfnTable tableDfn = db.GetTableDfn(model.DatabaseTable.Name, true);
if (tableDfn == null)
return Json(responseData.SetMessage(messageTitle, "Invalid Table name supplied."));
return Json(responseData.SetPopupMessage(messageTitle, "Invalid Table name supplied."));
// Populate table response.
responseData.Table = new AjaxResponseData_Table(tableDfn);
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.App;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -264,13 +264,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model);
// 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.
SysId userAccountId = SysId.ToSysId(model.UserId);
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.
SaxUserAccount user = AccountMgr.GetUserAccountById(userAccountId);
@@ -278,7 +278,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (user == null)
{
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.
@@ -314,7 +314,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model);
// 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.
@@ -371,7 +371,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
return Json(responseData);
// 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.
@@ -381,7 +381,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (user == null && SysId.IsValid(userAccountId))
{
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.
@@ -439,7 +439,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.InsertUserAccount(user, DbUpdateInfo))
{
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
@@ -447,7 +447,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (!AccountMgr.UpdateUserAccount(user, DbUpdateInfo))
{
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);
// 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.
@@ -511,7 +511,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (userAccount == null)
{
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.
@@ -524,28 +524,28 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
bool sendRequestPasswordOnline = StringUtil.ToBool(model.UserEmailRequestPasswordOnline);
bool sendRequestPasswordAdmin = StringUtil.ToBool(model.UserEmailRequestPasswordAdmin);
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)
return Json(responseData.SetMessage(messageTitle, Localiser["user.msg.not.system.admin"]));
return Json(responseData.SetPopupMessage(messageTitle, Localiser["user.msg.not.system.admin"]));
// Send emails.
int emailsSentCount = 0;
if (sendAcountActivationOnline)
{
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++;
}
if (sendRequestPasswordOnline)
{
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++;
}
if (sendRequestPasswordAdmin)
{
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++;
}
@@ -555,7 +555,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
// Construct response.
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;
}
return Json(responseData);
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.Utils;
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.Bus;
using Sarand.Net.Standard.Base.Core;
@@ -156,13 +156,13 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
RefreshModel(model);
// 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.
SysId userAccountId = SysId.ToSysId(model.UserId);
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.
SaxUserAccount user = AccountMgr.GetUserAccountById(userAccountId);
@@ -170,7 +170,7 @@ namespace Saxonite.Net.Core.Web.Admin.Controllers
if (user == null)
{
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.
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Sarand.Net.Standard.Base.Utils;
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.Bus;
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.Core;
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 System;
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 System;
using System.Collections.Generic;
@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Rendering;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
@@ -211,7 +211,7 @@ namespace Saxonite.Net.Core.Web.Admin.Models
if (ContactData.Methods.Count != ContactMethods.ToInt())
{
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.Core;
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.Core;
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.Bus;
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.Core;
using Sarand.Net.Standard.Base.Utils;

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