Skip to content
Merged

Dev #2629

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
f9f5188
AB#33333 tenant creation improvements
AndreGAot Jun 4, 2026
b3f182d
Merge remote-tracking branch 'origin/dev' into feature/AB#33333-tenan…
AndreGAot Jun 5, 2026
90f6eba
AB#333333 encrypted tenant connection strings
AndreGAot Jun 5, 2026
98bbc4c
Merge branch 'feature/AB#33333-tenant-creation-updates' into feature/…
AndreGAot Jun 5, 2026
b2b688d
AB#33309 onboarding WIP
AndreGAot Jun 12, 2026
147c143
AB#33309 further enhancements for filtering and validations
AndreGAot Jun 18, 2026
52fe3d0
AB#33309 update unit tests
AndreGAot Jun 19, 2026
d1ae2c5
Merge remote-tracking branch 'origin/dev' into feature/AB#33309-onboa…
AndreGAot Jun 19, 2026
543e49e
AB#33309 more improvements to onboarding
AndreGAot Jun 19, 2026
f0cc6b1
AB#33309 multiversion dynamic columns
AndreGAot Jun 22, 2026
0931a3d
Merge remote-tracking branch 'origin/dev' into feature/AB#33309-onboa…
AndreGAot Jun 22, 2026
f74ed2f
Potential fix for pull request finding 'CodeQL / DOM text reinterpret…
AndreGAot Jun 22, 2026
9775623
AB#33309 address sonarqube feedback
AndreGAot Jun 22, 2026
7cef12d
Merge branch 'feature/AB#33309-onboarding-requests' of https://github…
AndreGAot Jun 22, 2026
d45ebef
AB#33309 address more sonarqube feedback
AndreGAot Jun 22, 2026
8420f07
AB#33309 more SQ feedback
AndreGAot Jun 22, 2026
f0bf0fc
AB#33309 migrator fix and code review fixes
AndreGAot Jun 22, 2026
45ce4d5
AB#33309 more sonarqube
AndreGAot Jun 23, 2026
53395cf
AB#33309 adjust scroll and layout of tenants list
AndreGAot Jun 23, 2026
f7fc950
AB#33309 sonarqube fix
AndreGAot Jun 23, 2026
a48910b
AB#33309 more sonarQube
AndreGAot Jun 23, 2026
e6b7546
AB#33309 fix reload call
AndreGAot Jun 23, 2026
620bff0
AB#33309 make sure pattern matching used for plain connection string …
AndreGAot Jun 24, 2026
6d700d5
AB#29743: Upgrade ECharts Library
aurelio-aot Jun 25, 2026
7d0f154
feature/AB#24674-FixBundleCall-MissingJs
JamesPasta Jun 25, 2026
d4428f1
AB#29743: Add Select/Deselect All Buttons in Dashboard dropdowns
aurelio-aot Jun 25, 2026
033d13a
Merge pull request #2602 from bcgov/feature/AB#24674-ScheduledEmails
JamesPasta Jun 25, 2026
7bbadd4
AB#29743: Improve Styling of Select/Deselect buttons
aurelio-aot Jun 25, 2026
d1dc45e
AB#33396 update fallback for missing FormSchema on submission
AndreGAot Jun 25, 2026
d8d254e
Merge pull request #2604 from bcgov/bugfix/AB#33396-report-config-ver…
AndreGAot Jun 25, 2026
cac4971
AB#32598 initial commit, still WIP
AndreGAot Jun 25, 2026
59e3da1
AB#33509 - Labeled scheduled emails on Notification List
hasanpour Jun 25, 2026
b336add
AB#33509 - Removed dead draft method and isDraft from date job and ev…
hasanpour Jun 26, 2026
71cb6b0
AB#33509 - Fixed issues raised by Copilot.
hasanpour Jun 26, 2026
8b5fdaa
AB#33641 task to update Unity.NginxData configuration
DarylTodosichuk Jun 26, 2026
eeec644
Merge pull request #2607 from bcgov/feature/AB#33641-Remove-UAP-Stati…
DarylTodosichuk Jun 26, 2026
4e0ca16
AB#33459 Draft application external dependency documents
DarylTodosichuk Jun 26, 2026
cbaa53f
AB#33641 bugfix missing BCSans fonts add favicon.ico
DarylTodosichuk Jun 26, 2026
39eb6c4
Merge pull request #2609 from bcgov/feature/AB#33641-Remove-UAP-Stati…
DarylTodosichuk Jun 26, 2026
2ce6700
AB#32598 worksheet datagrid row delete for non-dynamic
AndreGAot Jun 26, 2026
524cbbc
AB#33632: Bugfix - Error On Resync of Submission Attachments
aurelio-aot Jun 26, 2026
1c218f5
AB#28586 - Payment List Save View and Performance
DavidBrightBcGov Jun 26, 2026
17e7e73
AB#32921 update scripts for configuration management page
AndreGAot Jun 26, 2026
208a49e
Merge pull request #2614 from bcgov/bugfix/AB#32921-account-codings
JamesPasta Jun 26, 2026
02222b7
Merge pull request #2610 from bcgov/bugfix/AB#33632-Attachment-Re-Syn…
JamesPasta Jun 26, 2026
bacef9b
Merge pull request #2605 from bcgov/feature/AB#33509-Populate-Recipie…
JamesPasta Jun 26, 2026
ee4306f
Merge pull request #2603 from bcgov/feature/AB#29743-Dashboard-Select…
JamesPasta Jun 26, 2026
7745101
Merge pull request #2583 from bcgov/feature/AB#33309-onboarding-requests
JamesPasta Jun 26, 2026
4c2c94f
Merge pull request #2608 from bcgov/feature/AB#33459-Unity-applicatio…
JamesPasta Jun 26, 2026
737d2a6
AB#32598 code cleanup
AndreGAot Jun 26, 2026
1dc9c44
AB#33641 Remove server type from Nginx error page contents
DarylTodosichuk Jun 26, 2026
9938c04
Merge pull request #2617 from bcgov/feature/AB#33641-Remove-UAP-Stati…
DarylTodosichuk Jun 26, 2026
1d735bd
AB#28586 - Payment List Save View and Performance
DavidBrightBcGov Jun 26, 2026
a117316
AB#33309 add '-' to regex
AndreGAot Jun 26, 2026
d49be74
Merge pull request #2618 from bcgov/feature/AB#33309-extend-db-naming…
AndreGAot Jun 26, 2026
7068a7e
AB#32598 sonarqube fixes
AndreGAot Jun 26, 2026
7051a17
feature/AB#24674-FixBundleCall-MissingJs
JamesPasta Jun 26, 2026
c03d91c
AB#28586 - Fix for missing the select checbox column as per default view
DavidBrightBcGov Jun 26, 2026
ebf344f
Merge pull request #2619 from bcgov/feature/AB#24674-ScheduledEmails
JamesPasta Jun 26, 2026
e4c4c16
Merge branch 'dev' into feature/AB#28586-payment-list-save-view-perfo…
DavidBrightBcGov Jun 27, 2026
70da588
AB#28586 / AB#33087 compatability merge for payment save view / new c…
DavidBrightBcGov Jun 27, 2026
e4159a7
AB#28586 refactored MapToDtoAndLoadDetailsAsync to simplify for cogni…
DavidBrightBcGov Jun 29, 2026
741f49d
AB#28589 - Adding category to dynamic loading of data
DavidBrightBcGov Jun 29, 2026
7d15374
AB#28586 - Missed category refresh of data column
DavidBrightBcGov Jun 29, 2026
812379d
Merge pull request #2621 from bcgov/feature/AB#28586-payment-list-sav…
DavidBrightBcGov Jun 29, 2026
ce64fdf
AB#33505: Bugfix: Submission # Hyperlink Is Tied to Applicant Permission
aurelio-aot Jun 29, 2026
5badab4
AB#33228: Cancel Payment Transaction - Initial Draft
aurelio-aot Jun 30, 2026
e123036
Merge pull request #2623 from bcgov/bugfix/AB#33505-Missing-Submissio…
JamesPasta Jul 2, 2026
3213338
Merge pull request #2615 from bcgov/feature/AB#32598-worksheetdatagri…
JamesPasta Jul 2, 2026
3a73129
features/AB#33374-NotificationsRolePermissions
JamesPasta Jul 2, 2026
b9eb89c
Merge pull request #2625 from bcgov/features/AB#33374-NotificationsRo…
JamesPasta Jul 2, 2026
07b51db
#AB33663 - Removed category as a default column
DavidBrightBcGov Jul 2, 2026
a39db23
Merge pull request #2626 from bcgov/bugfix/AB#33663-payment-list-cate…
DavidBrightBcGov Jul 2, 2026
c0cdd7f
features/AB#33374-NotificationsRolePermissions
JamesPasta Jul 2, 2026
e3e436e
Merge pull request #2628 from bcgov/features/AB#33374-NotificationsRo…
JamesPasta Jul 2, 2026
693a4a1
AB#33228: Fix sonarqube issues
aurelio-aot Jul 2, 2026
f35968e
Merge pull request #2627 from bcgov/feature/AB#33228-Cancel-Payment-T…
JamesPasta Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using Unity.AI.Localization;
using Unity.AI.Permissions;
using Unity.Modules.Shared.Specializations;
using Unity.Modules.Shared.Permissions;
using Volo.Abp.Features;
using Volo.Abp.UI.Navigation;
Expand All @@ -23,14 +24,18 @@ private static async Task ConfigureMainMenuAsync(MenuConfigurationContext contex
var l = context.GetLocalizer<AIResource>();
var featureChecker = context.ServiceProvider.GetRequiredService<IFeatureChecker>();

context.Menu.AddItem(new ApplicationMenuItem(
name: AIMenus.Prompts,
displayName: "AI Prompts",
url: "~/Prompts",
icon: "fl fl-ai-prompts",
order: 900,
requiredPermissionName: IdentityConsts.ITOperationsPermissionName
));
var specializationChecker = context.ServiceProvider.GetRequiredService<ISpecializationChecker>();
if (!await specializationChecker.IsEnabledAsync(SpecializationConsts.Onboarding))
{
context.Menu.AddItem(new ApplicationMenuItem(
name: AIMenus.Prompts,
displayName: "AI Prompts",
url: "~/Prompts",
icon: "fl fl-ai-prompts",
order: 900,
requiredPermissionName: IdentityConsts.ITOperationsPermissionName
));
}

if (await featureChecker.IsEnabledAsync("Unity.AIReporting"))
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System.Threading.Tasks;
using System;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;

namespace Unity.Flex.WorksheetInstances
Expand All @@ -9,5 +11,10 @@ public interface IWorksheetInstanceAppService : IApplicationService
Task<WorksheetInstanceDto> GetByCorrelationAnchorAsync(Guid correlationId, string correlationProvider, Guid worksheetId, string uiAnchor);
Task<WorksheetInstanceDto> CreateAsync(CreateWorksheetInstanceDto dto);
Task UpdateAsync(PersistWorksheetIntanceValuesDto dto);
Task<List<WorksheetInstanceDataDto>> GetListByCorrelationIdsAsync(List<Guid> correlationIds, string correlationProvider);
Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationProviderAsync(string correlationProvider);
Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationIdsAsync(List<Guid> correlationIds, string correlationProvider);
Task<PagedResultDto<WorksheetInstanceDataDto>> GetPagedListByCorrelationProviderAsync(string correlationProvider, int skipCount, int maxResultCount);
Task<WorksheetInstanceDataDto?> GetDataByIdAsync(Guid id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;

namespace Unity.Flex.WorksheetInstances
{
public class WorksheetInstanceDataDto
{
public Guid Id { get; set; }
public Guid CorrelationId { get; set; }
public Guid WorksheetId { get; set; }
public string CurrentValue { get; set; } = "{}";
public DateTime CreationTime { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,10 @@ public interface IWorksheetInstanceRepository : IBasicRepository<WorksheetInstan
Task<WorksheetInstance?> GetWithValuesAsync(Guid worksheetInstanceId);
Task<bool> ExistsAsync(Guid worksheetId, Guid instanceCorrelationId, string instanceCorrelationProvider, Guid sheetCorrelationId, string sheetCorrelationProvider, string? uiAnchor);
Task<bool> AnyByWorksheetAndFormVersionAsync(Guid worksheetId, Guid formVersionId);
Task<List<WorksheetInstance>> GetByCorrelationIdsAsync(IEnumerable<Guid> correlationIds, string correlationProvider);
Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationProviderAsync(string correlationProvider);
Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationIdsAsync(IEnumerable<Guid> correlationIds, string correlationProvider);
Task<List<WorksheetInstance>> GetPagedListByCorrelationProviderAsync(string correlationProvider, int skipCount, int maxResultCount);
Task<int> GetCountByCorrelationProviderAsync(string correlationProvider);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,5 +76,52 @@ public async Task<bool> AnyByWorksheetAndFormVersionAsync(Guid worksheetId, Guid
&& s.WorksheetCorrelationId == formVersionId
&& s.WorksheetCorrelationProvider == CorrelationConsts.FormVersion);
}

public async Task<List<WorksheetInstance>> GetByCorrelationIdsAsync(IEnumerable<Guid> correlationIds, string correlationProvider)
{
var dbSet = await GetDbSetAsync();
var ids = correlationIds.ToList();
return await dbSet
.Where(wi => ids.Contains(wi.CorrelationId) && wi.CorrelationProvider == correlationProvider)
.ToListAsync();
}

public async Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationProviderAsync(string correlationProvider)
{
var dbSet = await GetDbSetAsync();
return await dbSet
.Where(wi => wi.CorrelationProvider == correlationProvider)
.Select(wi => wi.WorksheetId)
.Distinct()
.ToListAsync();
}

public async Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationIdsAsync(IEnumerable<Guid> correlationIds, string correlationProvider)
{
var dbSet = await GetDbSetAsync();
var ids = correlationIds.ToList();
return await dbSet
.Where(wi => ids.Contains(wi.CorrelationId) && wi.CorrelationProvider == correlationProvider)
.Select(wi => wi.WorksheetId)
.Distinct()
.ToListAsync();
}

public async Task<List<WorksheetInstance>> GetPagedListByCorrelationProviderAsync(string correlationProvider, int skipCount, int maxResultCount)
{
var dbSet = await GetDbSetAsync();
return await dbSet
.Where(wi => wi.CorrelationProvider == correlationProvider)
.OrderByDescending(wi => wi.CreationTime)
.Skip(skipCount)
.Take(maxResultCount)
.ToListAsync();
}

public async Task<int> GetCountByCorrelationProviderAsync(string correlationProvider)
{
var dbSet = await GetDbSetAsync();
return await dbSet.CountAsync(wi => wi.CorrelationProvider == correlationProvider);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
using System.Threading.Tasks;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Unity.Flex.Domain.WorksheetInstances;
using Unity.Flex.Domain.Services;
using Volo.Abp;
using Volo.Abp.Application.Dtos;

namespace Unity.Flex.WorksheetInstances
{
Expand All @@ -29,5 +33,60 @@ public virtual async Task UpdateAsync(PersistWorksheetIntanceValuesDto dto)
{
await worksheetsManager.PersistWorksheetData(ObjectMapper.Map<PersistWorksheetIntanceValuesDto, PersistWorksheetIntanceValuesEto>(dto));
}

[RemoteService(false)]
public virtual async Task<List<WorksheetInstanceDataDto>> GetListByCorrelationIdsAsync(List<Guid> correlationIds, string correlationProvider)
{
var instances = await worksheetInstanceRepository.GetByCorrelationIdsAsync(correlationIds, correlationProvider);
return instances.Select(wi => new WorksheetInstanceDataDto
{
CorrelationId = wi.CorrelationId,
WorksheetId = wi.WorksheetId,
CurrentValue = wi.CurrentValue
}).ToList();
}

[RemoteService(false)]
public virtual async Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationProviderAsync(string correlationProvider)
{
return await worksheetInstanceRepository.GetDistinctWorksheetIdsByCorrelationProviderAsync(correlationProvider);
}

[RemoteService(false)]
public virtual async Task<List<Guid>> GetDistinctWorksheetIdsByCorrelationIdsAsync(List<Guid> correlationIds, string correlationProvider)
{
return await worksheetInstanceRepository.GetDistinctWorksheetIdsByCorrelationIdsAsync(correlationIds, correlationProvider);
}

[RemoteService(false)]
public virtual async Task<PagedResultDto<WorksheetInstanceDataDto>> GetPagedListByCorrelationProviderAsync(string correlationProvider, int skipCount, int maxResultCount)
{
var totalCount = await worksheetInstanceRepository.GetCountByCorrelationProviderAsync(correlationProvider);
var instances = await worksheetInstanceRepository.GetPagedListByCorrelationProviderAsync(correlationProvider, skipCount, maxResultCount);
var items = instances.Select(wi => new WorksheetInstanceDataDto
{
Id = wi.Id,
CorrelationId = wi.CorrelationId,
WorksheetId = wi.WorksheetId,
CurrentValue = wi.CurrentValue,
CreationTime = wi.CreationTime
}).ToList();
return new PagedResultDto<WorksheetInstanceDataDto>(totalCount, items);
}

[RemoteService(false)]
public virtual async Task<WorksheetInstanceDataDto?> GetDataByIdAsync(Guid id)
{
var wi = await worksheetInstanceRepository.FindAsync(id);
if (wi == null) return null;
return new WorksheetInstanceDataDto
{
Id = wi.Id,
CorrelationId = wi.CorrelationId,
WorksheetId = wi.WorksheetId,
CurrentValue = wi.CurrentValue,
CreationTime = wi.CreationTime
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,22 @@ internal async Task<WriteDataRowResponse> UpdateRowAsync(RowInputData rowInputDa
};
}

internal async Task DeleteRowAsync(Guid valueId, uint row, Guid worksheetInstanceId)
{
var currentValue = await customFieldValueAppService.GetAsync(valueId);
var dataGridValue = DataGridServiceUtils.DeserializeDataGridValue(currentValue.CurrentValue);
if (dataGridValue == null) return;

var dataGridRowsValue = DataGridServiceUtils.DeserializeDataGridRowsValue(dataGridValue.Value?.ToString());
if (dataGridRowsValue == null || row >= (uint)dataGridRowsValue.Rows.Count) return;

dataGridRowsValue.Rows.RemoveAt((int)row);
dataGridValue.Value = dataGridRowsValue;

await customFieldValueAppService.ExplicitSetAsync(valueId, JsonSerializer.Serialize(dataGridValue));
await customFieldValueAppService.SyncWorksheetInstanceValueAsync(worksheetInstanceId);
}

internal async Task<List<Tuple<string, string, CustomFieldType>>> GenerateKeyValueTypesAsync(Guid customFieldId, Dictionary<string, string>? keyValuePairs)
{
var result = new List<Tuple<string, string, CustomFieldType>>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@
<ProjectReference Include="..\Unity.Flex.Application.Contracts\Unity.Flex.Application.Contracts.csproj" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="Unity.Flex.Application.Tests" />
</ItemGroup>

<ItemGroup>
<Content Update="Views\Shared\Components\RadioDefinitionWidget\Default.cshtml">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Unity.Flex.Web.Pages.Flex;
using Unity.Flex.Web.Views.Shared.Components.WorksheetInstanceWidget.ViewModels;
using Unity.Flex.Worksheets;
using Unity.Flex.WorksheetInstances;
using Volo.Abp.AspNetCore.Mvc;

namespace Unity.Flex.Web.Views.Shared.Components.DataGridWidget
{
[ApiExplorerSettings(IgnoreApi = true)]
[Route("Flex/Widgets/DataGrid")]
public class DataGridWidgetController : AbpController
public class DataGridWidgetController(
ICustomFieldAppService customFieldAppService,
ICustomFieldValueAppService customFieldValueAppService,
DataGridWriteService dataGridWriteService) : AbpController
{
[HttpGet]
[Route("Refresh")]
Expand All @@ -33,5 +41,54 @@ public IActionResult Refresh(WorksheetFieldViewModel? fieldModel,
worksheetInstanceId
});
}

[Authorize]
[HttpPost]
[Route("DeleteRow")]
public async Task<IActionResult> DeleteRow(
Guid valueId,
uint row,
Guid worksheetInstanceId)
{
await dataGridWriteService.DeleteRowAsync(valueId, row, worksheetInstanceId);
return new OkObjectResult(new { row, worksheetInstanceId });
}

[Authorize]
[HttpGet]
[Route("RefreshByField")]
public async Task<IActionResult> RefreshByField(
Guid valueId,
Guid fieldId,
string modelName,
Guid worksheetId,
Guid worksheetInstanceId,
string uiAnchor)
{
var field = await customFieldAppService.GetAsync(fieldId);
var value = await customFieldValueAppService.GetAsync(valueId);

var fieldModel = new WorksheetFieldViewModel
{
Id = field.Id,
Name = field.Name,
Label = field.Label,
Type = field.Type,
Order = field.Order,
Enabled = field.Enabled,
Definition = field.Definition,
CurrentValue = value.CurrentValue,
CurrentValueId = valueId,
UiAnchor = uiAnchor
};

return ViewComponent(typeof(DataGridWidget), new
{
fieldModel,
modelName,
worksheetId,
worksheetInstanceId
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,17 @@
.custom-grid-container {
display: flex;
flex-direction: column;
position: relative;
}

.grid-loading-overlay {
position: absolute;
inset: 0;
background: rgba(255, 255, 255, 0.75);
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
}

.grid-position {
Expand Down Expand Up @@ -61,4 +72,31 @@
color: #8a8886;
margin-left: 4px;
vertical-align: middle;
}

.custom-dynamic-table .dropdown {
display: inline-block;
}

.custom-dynamic-table .dropdown-content {
display: none;
position: fixed;
right: auto;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1039;
--bs-btn-active-color: var(--bc-colors-white-primary-500);
--bs-btn-active-bg: var(--bc-colors-blue-primary-500);
}

.custom-dynamic-table .dropdown:hover .dropdown-content {
display: block;
}

.custom-dynamic-table .dropdown-content .btn.fullWidth {
width: calc(100% - 16px);
display: block;
text-align: left;
margin: 10px 8px;
}
Loading
Loading