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

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

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

Application version: 1.3.0

Reviewed-on: #1
Co-authored-by: andy <andy@sarand.com>
This commit was merged in pull request #1.
This commit is contained in:
2026-10-16 18:24:16 +01:00
committed by andy
parent 2c3fb146ab
commit 9f22b522df
1996 changed files with 1992 additions and 1179 deletions
@@ -0,0 +1,117 @@
@model Model_OrganisationMembers
@inject SaxLocaliser Localiser
@{
/* Organisation Members - Index */
ViewData["Title"] = "Organisation Members";
}
<div class="sax-panel OrganisationMembers">
<script type="text/javascript">
sax.lbl.refresh = '@(Localiser.GetJavascriptText("label.refresh"))';
sax.lbl.add = '@(Localiser.GetJavascriptText("label.add"))';
sax.lbl.create = '@(Localiser.GetJavascriptText("label.create"))';
sax.lbl.edit = '@(Localiser.GetJavascriptText("label.edit"))';
sax.lbl.remove = '@(Localiser.GetJavascriptText("label.remove"))';
</script>
@* Filter Panel *@
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmMemberFilter", @class = "sax-form", @onSubmit = "return false;" }))
{
<div class="sax-panel-filter">
@* Header - Page caption, paging controls, actions. *@
<div class="sax-header row">
<div class="col"><div class="sax-caption">@Localiser["caption.organisation.members"]</div></div>
<div class="fixed row">
<div>
<partial name="~/Views/Common/ResultsPaging.cshtml" />
</div>
<div class="fixed">
@* Burger menu *@
<ul class="nav navbar-nav navbar-dark navbar-right sax-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sax-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="sax-content">
@* Organisation Member filter - Organisation etc. *@
<div class="row">
<div class="col-sm-3 sax-label text-left text-sm-right">@Localiser["caption.organisation"]</div>
<div class="col-sm-9">
<div class="row">
<div class="col">
@Html.HiddenFor(model => model.Filter.OrganisationId, new { @id = "ifFilterOrganisationId" })
<input type="text" id="ifFilterOrganisation" class="sax-input" readonly="readonly" value="@(Model.Filter.OrganisationName)" />
</div>
<div class="fixed"><button id="pbFilterOrganisationSelect" class="sax-button">@Localiser["label.select"]</button></div>
</div>
</div>
</div>
</div>
@* Filter element templates *@
<div class="sax-panel-item-template">
@* Burger dropdown item template - ul is ignored *@
<ul class="sax-dropdown-menu MemberFilter">
<li class="sax-dropdown-item sax-action"><div class="sax-label">XXX</div></li>
</ul>
</div>
</div>
}
@* Results Panel *@
<div class="sax-panel-results">
<div class="sax-panel-messages"></div>
<div class="sax-panel-item-list"></div>
@* element templates *@
<div class="sax-panel-item-template">
@* Organisation Member item template *@
<div class="sax-panel-item Member">
<div class="sax-header row">
<div class="col">
@* User name *@
<div class="sax-caption sax-action"><div class="UserDisplayName"></div></div>
</div>
<div class="fixed sax-actions">
@* Burger menu *@
<ul class="nav navbar-nav navbar-light navbar-right sax-burger">
<li class="dropdown-toggle caret-off">
<a href="#" class="dropdown" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="navbar-toggler-icon"></span></a>
<ul class="dropdown-menu dropdown-menu-right sax-dropdown-menu">@* Menu items will be inserted here. *@</ul>
</li>
</ul>
</div>
</div>
<div class="sax-content">
<div class="row">
@* User email address and status (if not active) *@
<div class="col-sm-6"><span class="UserEmailAddress"></span><span class="UserStatus" style="color:#a0a0a0;">&nbsp;[<span class="UserStatusDesc"></span>]</span></div>
@* Role count *@
<div class="col-sm-6 right"><div class="MemberRoleCount">@Localiser["label.roles"]:&nbsp;<span class="RoleCount"></span></div></div>
</div>
<div class="row">
<div class="col-sm-4"></div>
<div class="col-sm-4"><div class=""></div></div>
@* Member status *@
<div class="col-sm-4 sax-note right"><span class="StatusDesc"></span></div>
</div>
</div>
</div>
@* Burger dropdown item template - ul is ignored *@
<ul class="sax-dropdown-menu Member">
<li class="sax-dropdown-item sax-action"><div class="sax-label">...</div></li>
</ul>
</div>
</div>
</div>
<partial name="Panel-Organisation-Member.cshtml" />
<partial name="~/Views/Common/SelectOrganisation.cshtml" />