diff --git a/applications/Unity.AutoUI/cypress/selectors/registry.json b/applications/Unity.AutoUI/cypress/selectors/registry.json index 58622e5e28..e5b7a6290a 100644 --- a/applications/Unity.AutoUI/cypress/selectors/registry.json +++ b/applications/Unity.AutoUI/cypress/selectors/registry.json @@ -1,7 +1,7 @@ { "schemaVersion": 2, "mode": "report-only", - "generatedAt": "2026-10-08T20:47:48.557Z", + "generatedAt": "2026-10-16T22:08:25.092Z", "summary": { "total": 364, "matched": 150, @@ -1789,11 +1789,11 @@ "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260902202447_AddEmailAddressDefault.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260917183045_AddTemplateTypes.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260928201123_LimitEmailTemplateNameLength.Designer.cs", + "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20261015221241_AddScheduledNotificationTemplateConstraint.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/GrantTenantDbContextModelSnapshot.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details.cshtml", "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Details.js", - "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentResultAttachments/AssessmentResultAttachments.js", - "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentScoresWidget/Default.cshtml" + "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentResultAttachments/AssessmentResultAttachments.js" ] }, { @@ -1852,6 +1852,7 @@ "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260902202447_AddEmailAddressDefault.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260917183045_AddTemplateTypes.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260928201123_LimitEmailTemplateNameLength.Designer.cs", + "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20261015221241_AddScheduledNotificationTemplateConstraint.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/GrantTenantDbContextModelSnapshot.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/AssigneeSelection/AssigneeSelectionModal.cshtml" ] @@ -3256,11 +3257,11 @@ "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260902202447_AddEmailAddressDefault.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260917183045_AddTemplateTypes.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260928201123_LimitEmailTemplateNameLength.Designer.cs", + "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20261015221241_AddScheduledNotificationTemplateConstraint.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/GrantTenantDbContextModelSnapshot.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/ApplicantHistory/ReportsHistoryModalViewModel.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/ApplicantHistory/Default.js", - "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/CustomFields/Default.js", - "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/PaymentConfiguration/Default.js" + "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/CustomFields/Default.js" ] }, { @@ -3539,10 +3540,10 @@ "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260902202447_AddEmailAddressDefault.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260917183045_AddTemplateTypes.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260928201123_LimitEmailTemplateNameLength.Designer.cs", + "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20261015221241_AddScheduledNotificationTemplateConstraint.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/GrantTenantDbContextModelSnapshot.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Pages/GrantApplications/Index.js", - "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/ApplicantSubmissions/Default.js", - "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/AssessmentResults/Default.js" + "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/ApplicantSubmissions/Default.js" ] }, { @@ -3872,6 +3873,7 @@ "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260902202447_AddEmailAddressDefault.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260917183045_AddTemplateTypes.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20260928201123_LimitEmailTemplateNameLength.Designer.cs", + "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/20261015221241_AddScheduledNotificationTemplateConstraint.Designer.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.EntityFrameworkCore/Migrations/TenantMigrations/GrantTenantDbContextModelSnapshot.cs", "applications/Unity.GrantManager/src/Unity.GrantManager.Web/Views/Shared/Components/ApplicantInfo/Default.js" ] diff --git a/applications/Unity.GrantManager/common.props b/applications/Unity.GrantManager/common.props index 85e7cf2d80..f461c7ac7d 100644 --- a/applications/Unity.GrantManager/common.props +++ b/applications/Unity.GrantManager/common.props @@ -9,6 +9,7 @@ $(NoWarn);0436 + $(NoWarn);NU1510 @@ -24,7 +25,7 @@ - + \ No newline at end of file diff --git a/applications/Unity.GrantManager/global.json b/applications/Unity.GrantManager/global.json new file mode 100644 index 0000000000..bc8f2009c3 --- /dev/null +++ b/applications/Unity.GrantManager/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "10.0.303", + "rollForward": "latestFeature", + "allowPrerelease": false + } +} diff --git a/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Unity.AI.Application.csproj b/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Unity.AI.Application.csproj index 157e19c3fa..f90beeb2af 100644 --- a/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Unity.AI.Application.csproj +++ b/applications/Unity.GrantManager/modules/Unity.AI/src/Unity.AI.Application/Unity.AI.Application.csproj @@ -1,17 +1,17 @@ - + net10.0 enable Unity.AI + true - - - + + diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Pages/Components/DataGrid/DataGridWriteService.cs b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Pages/Components/DataGrid/DataGridWriteService.cs index 7489f231e2..8144f245e5 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Pages/Components/DataGrid/DataGridWriteService.cs +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Pages/Components/DataGrid/DataGridWriteService.cs @@ -279,7 +279,7 @@ internal async Task UpdateRowAsync(RowInputData rowInputDa }; } - internal async Task DeleteRowAsync(Guid valueId, uint row, Guid worksheetInstanceId) + public async Task DeleteRowAsync(Guid valueId, uint row, Guid worksheetInstanceId) { var currentValue = await customFieldValueAppService.GetAsync(valueId); var dataGridValue = DataGridServiceUtils.DeserializeDataGridValue(currentValue.CurrentValue); diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxGroupWidget/Default.cshtml b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxGroupWidget/Default.cshtml index b29b275ac2..0b56e84b0a 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxGroupWidget/Default.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxGroupWidget/Default.cshtml @@ -24,7 +24,9 @@ } else @@ -32,11 +34,13 @@ + data-worksheet-name="@Model.Name" + data-ui-anchor="@Model.Field?.UiAnchor" + onchange="notifyFieldChange(this.dataset.worksheetName, this.dataset.uiAnchor, this)" /> } } } -} \ No newline at end of file +} diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxWidget/Default.cshtml b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxWidget/Default.cshtml index fbc2b5f70a..a998afa576 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxWidget/Default.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CheckboxWidget/Default.cshtml @@ -17,7 +17,9 @@ } else @@ -25,8 +27,10 @@ + data-worksheet-name="@Model.Name" + data-ui-anchor="@Model.Field?.UiAnchor" + onchange="notifyFieldChange(this.dataset.worksheetName, this.dataset.uiAnchor, this)" /> } -} \ No newline at end of file +} diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CurrencyWidget/Default.cshtml b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CurrencyWidget/Default.cshtml index 810d8b832a..daf717c150 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CurrencyWidget/Default.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/CurrencyWidget/Default.cshtml @@ -22,7 +22,9 @@ placeholder="@Model.Field.Definition?.ConvertDefinition(Model.Field.Type)?.Placeholder" id="@fieldId" name="@fieldId" - onchange="@($"notifyFieldChange('{Model.Name}', '{Model.Field?.UiAnchor}', this)")"/> + data-worksheet-name="@Model.Name" + data-ui-anchor="@Model.Field?.UiAnchor" + onchange="notifyFieldChange(this.dataset.worksheetName, this.dataset.uiAnchor, this)"/> -} \ No newline at end of file +} diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DataGridWidget/DataGridWidget.cs b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DataGridWidget/DataGridWidget.cs index fd735cc689..dc7b0e6295 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DataGridWidget/DataGridWidget.cs +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DataGridWidget/DataGridWidget.cs @@ -117,7 +117,7 @@ private IViewComponentResult GenerateGridView(WorksheetFieldViewModel fieldModel Rows = [.. dataRows], AllowEdit = true, SummaryOption = ConvertSummaryOption(dataGridDefinition), - Summary = GenerateSummary([.. dataColumns], [.. dataRows], presentationSetttings), + Summary = GenerateSummary([.. dataColumns], dataGridRowsValue?.Rows ?? [], presentationSetttings), TableOptions = GenerateAvailableTableOptions(!dataGridDefinition.Dynamic), WorksheetId = worksheetId, WorksheetInstanceId = worksheetInstanceId, @@ -367,7 +367,7 @@ private static List GenerateDynamicPlaceholderColumn() } private static DataGridViewSummary GenerateSummary(DataGridColumn[]? dataColumns, - DataGridViewModelRow[] rows, + List rows, PresentationSettings presentationSettings) { var summary = new DataGridViewSummary(); @@ -386,10 +386,11 @@ private static DataGridViewSummary GenerateSummary(DataGridColumn[]? dataColumns return summary; } - private static string SumCells(string? key, DataGridViewModelRow[] rows) + // Sum the raw stored values - presentation-formatted values (e.g. "CA$ 567.00") do not parse back to decimals + private static string SumCells(string? key, List rows) { decimal sum = 0; - var cells = rows.Select(row => row.Cells.Find(x => x.Key == key)).Where(cell => cell != null); + var cells = rows.Select(row => row.Cells.Find(x => x.Key == key)).Where(cell => cell?.Value != null); foreach (var cell in cells) { var preparse = cell!.Value.Replace("$", "").Replace(",", ""); diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DateWidget/Default.cshtml b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DateWidget/Default.cshtml index c069444095..c31ac0a2f5 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DateWidget/Default.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DateWidget/Default.cshtml @@ -19,6 +19,8 @@ label="@Model.Field.Label" id="@fieldId" name="@fieldId" - onchange="@($"notifyFieldChange('{Model.Name}', '{Model.Field?.UiAnchor}', this)")" /> + data-worksheet-name="@Model.Name" + data-ui-anchor="@Model.Field?.UiAnchor" + onchange="notifyFieldChange(this.dataset.worksheetName, this.dataset.uiAnchor, this)" /> -} \ No newline at end of file +} diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DefaultFieldWidget/Default.cshtml b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DefaultFieldWidget/Default.cshtml index 926c9b6a5b..08c9b9582c 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DefaultFieldWidget/Default.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/DefaultFieldWidget/Default.cshtml @@ -22,5 +22,7 @@ placeholder="@fieldDef?.Placeholder" id="@fieldId" name="@fieldId" - onchange="@($"notifyFieldChange('{Model.Name}', '{Model.Field.UiAnchor}', this)")" /> + data-worksheet-name="@Model.Name" + data-ui-anchor="@Model.Field.UiAnchor" + onchange="notifyFieldChange(this.dataset.worksheetName, this.dataset.uiAnchor, this)" /> } diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/QuestionSelectListWidget/QuestionSelectListViewModel.cs b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/QuestionSelectListWidget/QuestionSelectListViewModel.cs index b61da02057..0f46f4f783 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/QuestionSelectListWidget/QuestionSelectListViewModel.cs +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/QuestionSelectListWidget/QuestionSelectListViewModel.cs @@ -7,7 +7,7 @@ public class QuestionSelectListViewModel : RequiredFieldViewModel public Guid QuestionId { get; set; } public bool IsDisabled { get; set; } public string Answer { get; set; } = string.Empty; - public string Definition { get; set; } = "{}"; + public new string Definition { get; set; } = "{}"; public bool IsHumanConfirmed { get; set; } = true; public string? AICitation { get; set; } public int? AIConfidence { get; set; } diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/RadioWidget/Default.cshtml b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/RadioWidget/Default.cshtml index 59d3a1ccaf..2a43ed4d8a 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/RadioWidget/Default.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/RadioWidget/Default.cshtml @@ -28,7 +28,9 @@ id="@optionId" name="@fieldBaseName" value="@($"{option.Value}")" - onchange="@($"notifyFieldChange('{Model.Name}', '{Model.Field?.UiAnchor}', this)")" + data-worksheet-name="@Model.Name" + data-ui-anchor="@Model.Field?.UiAnchor" + onchange="notifyFieldChange(this.dataset.worksheetName, this.dataset.uiAnchor, this)" checked /> } else @@ -37,11 +39,13 @@ id="@optionId" name="@fieldBaseName" value="@($"{option.Value}")" - onchange="@($"notifyFieldChange('{Model.Name}', '{Model.Field?.UiAnchor}', this)")" /> + data-worksheet-name="@Model.Name" + data-ui-anchor="@Model.Field?.UiAnchor" + onchange="notifyFieldChange(this.dataset.worksheetName, this.dataset.uiAnchor, this)" /> } } } -} \ No newline at end of file +} diff --git a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/Scoresheet/Default.cshtml b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/Scoresheet/Default.cshtml index 6396a537ba..1ece49d1e1 100644 --- a/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/Scoresheet/Default.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Flex/src/Unity.Flex.Web/Views/Shared/Components/Scoresheet/Default.cshtml @@ -62,7 +62,12 @@ @L["Scoresheet:Configuration:PublishScoresheetButtonText"].Value } -