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,69 @@
@model Model_Region
@inject SaxLocaliser Localiser
@{
/* Regions - Index */
ViewData["Title"] = "Regions";
}
<div class="sax-panel Regions">
<div class="sax-panel-filter">
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRegionFilter", @class = "sax-form", @onSubmit = "return false;" }))
{
<div class="sax-header row">
<div class="col"><div class="sax-caption">@Localiser["region.caption.regions"]</div></div>
<div class="fixed row">
<div>
<partial name="~/Views/Common/ResultsPaging.cshtml" />
</div>
<div class="sax-action sax-results-refresh"><img src="~/img/action/refresh24.png" alt="@(Localiser["label.refresh"])" title="@(Localiser["label.refresh"])" /></div>
<div class="sax-action sax-item-create"><img src="~/img/action/add24.png" alt="@(Localiser["label.create"])" title="@(Localiser["label.create"])" /></div>
</div>
</div>
<div class="sax-content">
<div class="row">
<div class="col-sm-6 row">
<div class="col-sm-5 sax-label text-left text-sm-right">@Localiser["label.type"]</div>
<div class="col-sm-7">@Html.DropDownListFor(model => model.Filter.RegionTypeCode, Model.RegionTypesForSelect, "", new { @id = "cbFilterRegionType", @class = "FilterRegionType" })</div>
</div>
<div class="col-sm-6 row">
<div class="col-sm-5 sax-label text-left text-sm-right">@Localiser["label.search"]</div>
<div class="col-sm-7">@Html.TextBoxFor(model => model.Filter.Region, new { @id = "ifFilterRegion", @class = "FilterRegion", @autocomplete = "off", @maxlength = "32" })</div>
</div>
</div>
</div>
}
</div>
<div class="sax-panel-results">
<div class="sax-panel-messages"></div>
<div class="sax-panel-item-list"></div>
<div class="sax-panel-item-template">
<div class="sax-panel-item Region">
<div class="sax-header row">
<div class="col">
<div class="sax-caption"><div class="sax-action"><span class="RegionName"></span> <span class="RegionCountryIso2Code"></span></div></div>
</div>
<div class="fixed sax-actions">
<div class="sax-action sax-item-update"><img src="~/img/action/edit24.png" alt="@(Localiser["label.update"])" title="@(Localiser["label.update"])" /></div>
</div>
</div>
<div class="sax-content">
<div class="row">
<div class="col-sm-4"><div class="RegionTypeDesc"></div></div>
<div class="col-sm-4"><div class="RegionParentName"></div></div>
<div class="col-sm-4 right"><div class="sax-note RegionStatusDesc"></div></div>
</div>
<div class="row">
<div class="col-sm-4"></div>
<div class="col-sm-4"><div class=""></div></div>
</div>
</div>
</div>
</div>
</div>
</div>
<partial name="Panel-RegionDialog.cshtml" />
@@ -0,0 +1,82 @@
@model Model_Region
@inject SaxLocaliser Localiser
@{
/* Region form dialog panel */
}
<script type="text/javascript">
sax.dlg.title.createRegion = '@Localiser.GetJavascriptText("region.caption.region.create")';
sax.dlg.title.updateRegion = '@Localiser.GetJavascriptText("region.caption.region.update")';
</script>
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRegionId", @class = "sax-form" }))
{
@Html.HiddenFor(model => model.RegionId, new { @id = "", @class = "RegionId" })
}
<div id="dlgRegion" class="sax-dialog" title="">
@using (@Html.BeginForm(FormMethod.Post, new { @id = "frmRegion", @class = "sax-form", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.RegionId, new { @id = "", @class = "RegionId" })
@* Region type *@
<div class="sax-form-control RegionTypeCode">
<div class="sax-label">
<label for="cbRegionType"><span><span class="required">*</span> @Localiser["label.type"]</span></label>
</div>
<div class="sax-control">
@Html.DropDownListFor(model => model.RegionTypeCode, Model.RegionTypesForSelect, Localiser["label.select"], new { @id = "cbRegionType", @class = "RegionType sax-select" })
</div>
<div class="sax-message"></div>
</div>
@* Country ISO2 code *@
<div class="sax-form-control RegionIso2Code">
<div class="sax-label">
<label for="ifRegionIso2Code"><span><span class="required">*</span> @Localiser["label.iso2.code"]</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.RegionCountryIso2Code, new { @id = "ifRegionCountryIso2Code", @class = "RegionCountryIso2Code sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Region_CountryIso2Code) })
</div>
<div class="sax-message"></div>
</div>
@* Region name *@
<div class="sax-form-control RegionName">
<div class="sax-label">
<label for="ifRegionName"><span><span class="required">*</span> @Localiser["label.name"]</span></label>
</div>
<div class="sax-control">
@Html.TextBoxFor(model => model.RegionName, new { @id = "ifRegionName", @class = "RegionName sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Core.ColumnIdx.Region_Name) })
</div>
<div class="sax-message"></div>
</div>
@* Parent Region *@
<div class="sax-form-control RegionIdParent">
<div class="sax-label">
<label for="ifParentRegion"><span><span class="required">*</span> @Localiser["label.parent"]</span></label>
</div>
<div class="sax-control row">
@Html.HiddenFor(model => model.RegionIdParent, new { @id = "ifRegionIdParent", @class = "RegionIdParent" })
<div class="col"><input type="text" id="ifParentRegion" class="ParentRegion sax-input" readonly="readonly" ondblclick="sax.selectParentRegion()" /> </div>
<div class="fixed"><button id="pbSelectParentRegion" class="sax-button" style="min-width:auto;margin-left:4px;padding:4px 6px" onclick="sax.selectParentRegion()">@Localiser["label.select"]</button></div>
</div>
<div class="sax-message"></div>
</div>
@* Region status *@
<div class="sax-form-control RegionStatus">
<div class="sax-label">
<label for="cbRegionStatus"><span><span class="required">*</span> @Localiser["label.status"]</span></label>
</div>
<div class="sax-control">
<select id="cbRegionStatus" class="sax-select RegionStatus" name="RegionStatusCode"></select>
</div>
<div class="sax-message"></div>
</div>
}
</div>
<partial name="~/Views/Common/SelectItem.cshtml" />