Merge branch 'develop' into feature/SUPPORT-9276_blocked_filter

This commit is contained in:
gulnaz 2025-07-24 14:57:09 +03:00
commit bb87bf48ee
6 changed files with 65 additions and 26 deletions

View file

@ -16,6 +16,7 @@ import ru.micord.ervu.account_applications.component.model.Account;
import ru.micord.ervu.account_applications.component.model.Person; import ru.micord.ervu.account_applications.component.model.Person;
import ru.micord.ervu.account_applications.component.model.dto.SearchRequest; import ru.micord.ervu.account_applications.component.model.dto.SearchRequest;
import ru.micord.ervu.account_applications.component.model.dto.SearchResponse; import ru.micord.ervu.account_applications.component.model.dto.SearchResponse;
import ru.micord.ervu.account_applications.dao.RecruitmentDao;
import ru.micord.ervu.account_applications.security.context.SecurityContext; import ru.micord.ervu.account_applications.security.context.SecurityContext;
import ru.micord.ervu.account_applications.security.model.jwt.UserSession; import ru.micord.ervu.account_applications.security.model.jwt.UserSession;
import ru.micord.ervu.account_applications.security.model.role.ErvuRoleAuthority; import ru.micord.ervu.account_applications.security.model.role.ErvuRoleAuthority;
@ -30,15 +31,20 @@ import ru.cg.webbpm.modules.webkit.beans.Behavior;
*/ */
@Service @Service
public class AccountGridLoadService extends Behavior implements GridService { public class AccountGridLoadService extends Behavior implements GridService {
private static final String DOMAIN_IDS = "domainIds";
private static final String DOMAIN_ID = "domainId";
private final SecurityContext securityContext; private final SecurityContext securityContext;
private final AccountFetchService accountService; private final AccountFetchService accountService;
@Value("${ervu.role.admin:#{null}}") private final RecruitmentDao recruitmentDao;
private String ervuAdminRole; @Value("${ervu.security.role:#{null}}")
private String ervuSecurityRole;
public AccountGridLoadService(SecurityContext securityContext, public AccountGridLoadService(SecurityContext securityContext,
AccountFetchService accountService) { AccountFetchService accountService,
RecruitmentDao recruitmentDao) {
this.securityContext = securityContext; this.securityContext = securityContext;
this.accountService = accountService; this.accountService = accountService;
this.recruitmentDao = recruitmentDao;
} }
@Override @Override
@ -105,16 +111,30 @@ public class AccountGridLoadService extends Behavior implements GridService {
Map<String, Object> filterMap = new HashMap<>(); Map<String, Object> filterMap = new HashMap<>();
UserSession userSession = securityContext.getUserSession(); UserSession userSession = securityContext.getUserSession();
Set<ErvuRoleAuthority> roles = userSession.roles(); Set<ErvuRoleAuthority> roles = userSession.roles();
if (ervuAdminRole == null if (ervuSecurityRole == null
|| roles.stream().noneMatch(role -> role.getAuthority().equals(ervuAdminRole))) { || roles.stream().noneMatch(role -> role.getAuthority().equals(ervuSecurityRole))) {
filterMap.put("domainId", securityContext.getDomainId()); List<String> domainIds = recruitmentDao.getRecruitmentIdsWithParentByDomainId(securityContext.getDomainId());
filterMap.put(DOMAIN_IDS, domainIds.toArray());
} }
if (filters != null && filters.length > 0) { if (filters != null && filters.length > 0) {
filterMap.putAll(Arrays.stream(filters) filterMap.putAll(Arrays.stream(filters)
.filter(filter -> filter.getFilterModels() != null && filter.getFilterModels().length > 0) .filter(filter -> filter.getFilterModels() != null && filter.getFilterModels().length > 0)
.collect(Collectors.toMap( .collect(Collectors.toMap(
filter -> getScriptInObject(filter.componentGuid, StaticFilterComponent.class).name, filter -> {
filter -> filter.getFilterModels()[0].value, String filterName = getScriptInObject(filter.componentGuid, StaticFilterComponent.class).name;
if (DOMAIN_ID.equals(filterName)) {
return DOMAIN_IDS;
}
return filterName;
},
filter -> {
String filterName = getScriptInObject(filter.componentGuid, StaticFilterComponent.class).name;
Object filterValue = filter.getFilterModels()[0].value;
if (DOMAIN_ID.equals(filterName)) {
return recruitmentDao.getRecruitmentIdsWithParentByDomainId(filterValue.toString()).toArray();
}
return filterValue;
},
(existing, replacement) -> replacement (existing, replacement) -> replacement
)) ))
); );

View file

@ -39,8 +39,8 @@ public class RecruitmentGridService extends GridV2ServiceImpl {
@LocalGraphSource(sourceFieldName = "loadDao") @LocalGraphSource(sourceFieldName = "loadDao")
@NotNull @NotNull
public EntityColumn recruitmentColumn; public EntityColumn recruitmentColumn;
@Value("${ervu.role.admin:security_administrator}") @Value("${ervu.security.role:security_administrator}")
private String ervuAdminRole; private String ervuSecurityRole;
public RecruitmentGridService(RecruitmentDao recruitmentDao, SecurityContext securityContext) { public RecruitmentGridService(RecruitmentDao recruitmentDao, SecurityContext securityContext) {
this.recruitmentDao = recruitmentDao; this.recruitmentDao = recruitmentDao;
@ -54,8 +54,8 @@ public class RecruitmentGridService extends GridV2ServiceImpl {
List<String> recruitmentIds; List<String> recruitmentIds;
List<Filter> updatedFilters = new ArrayList<>(Arrays.asList(filters)); List<Filter> updatedFilters = new ArrayList<>(Arrays.asList(filters));
Optional<Filter> recruitmentFilterOpt = findRecruitmentFilter(updatedFilters); Optional<Filter> recruitmentFilterOpt = findRecruitmentFilter(updatedFilters);
if (ervuAdminRole != null && roles.stream().anyMatch(role -> role.getAuthority().equals( if (ervuSecurityRole != null && roles.stream().anyMatch(role -> role.getAuthority().equals(
ervuAdminRole))) { ervuSecurityRole))) {
recruitmentIds = recruitmentFilterOpt.map( recruitmentIds = recruitmentFilterOpt.map(
filter -> getChildRecruitmentIds(updatedFilters, filter)) filter -> getChildRecruitmentIds(updatedFilters, filter))
.orElseGet(this::getAllRecruitmentIds); .orElseGet(this::getAllRecruitmentIds);

View file

@ -47,8 +47,8 @@ public class TreeItemService {
public EntityColumn businessIdColumn; public EntityColumn businessIdColumn;
@GraphSource(value = TreeItemRpcService.class, scanMode = GraphSource.ScanMode.SELF) @GraphSource(value = TreeItemRpcService.class, scanMode = GraphSource.ScanMode.SELF)
public EntityColumn domainIdColumn; public EntityColumn domainIdColumn;
@Value("${ervu.role.admin:security_administrator}") @Value("${ervu.security.role:security_administrator}")
private String ervuAdminRole; private String ervuSecurityRole;
public TreeItemService(SecurityContext securityContext) { public TreeItemService(SecurityContext securityContext) {
this.securityContext = securityContext; this.securityContext = securityContext;
@ -59,8 +59,8 @@ public class TreeItemService {
UserSession userSession = securityContext.getUserSession(); UserSession userSession = securityContext.getUserSession();
Set<ErvuRoleAuthority> roles = userSession.roles(); Set<ErvuRoleAuthority> roles = userSession.roles();
List<TreeItemDto> filteredTreeItems = loadTreeItems(); List<TreeItemDto> filteredTreeItems = loadTreeItems();
if (ervuAdminRole == null || roles.stream().noneMatch(role -> role.getAuthority().equals( if (ervuSecurityRole == null || roles.stream().noneMatch(role -> role.getAuthority().equals(
ervuAdminRole))) { ervuSecurityRole))) {
filteredTreeItems = filteredTreeItems.stream() filteredTreeItems = filteredTreeItems.stream()
.filter(item -> item.domainId.equalsIgnoreCase(domainId)) .filter(item -> item.domainId.equalsIgnoreCase(domainId))
.toList(); .toList();

View file

@ -445,6 +445,11 @@
.webbpm.account-applications grid-v2 { .webbpm.account-applications grid-v2 {
flex: 1; flex: 1;
} }
.webbpm.account-applications grid-v2 {
flex: 1 1 auto;
}
.webbpm.account-applications * + grid-v2, .webbpm.account-applications * + grid-v2,
.webbpm.account-applications grid-v2 ~ *:not([hidden]) { .webbpm.account-applications grid-v2 ~ *:not([hidden]) {
margin-top: var(--indent-small); margin-top: var(--indent-small);
@ -461,13 +466,12 @@
.webbpm.account-applications ag-grid-angular .ag-filter .ag-filter-condition ~ * { .webbpm.account-applications ag-grid-angular .ag-filter .ag-filter-condition ~ * {
display: none !important; display: none !important;
} }
.webbpm.account-applications ag-grid-angular .ag-root-wrapper { .webbpm.account-applications ag-grid-angular :is(.ag-root-wrapper, .ag-header-viewport, .ag-header-container, .ag-header) {
background-color: transparent; background-color: transparent;
} }
.webbpm.account-applications ag-grid-angular .ag-header { .webbpm.account-applications ag-grid-angular .ag-header {
border-top: 1px solid var(--btn-border); border-top: 1px solid var(--btn-border);
border-radius: 0; border-radius: 0;
background-color: transparent;
} }
.webbpm.account-applications ag-grid-angular .ag-header-row { .webbpm.account-applications ag-grid-angular .ag-header-row {
color: var(--color-text-mute); color: var(--color-text-mute);

View file

@ -75,6 +75,9 @@ body.webbpm.account-applications {
--w-screen: min(calc(2*var(--w-content)), 2.5rem); /*40*/ --w-screen: min(calc(2*var(--w-content)), 2.5rem); /*40*/
--h-header: 60px; --h-header: 60px;
} }
.webbpm.account-applications [class*="ag-theme-"] {
--ag-modal-overlay-background-color: transparent !important;
}
.webbpm.account-applications a { .webbpm.account-applications a {
color: var(--color-link); color: var(--color-link);

View file

@ -875,7 +875,6 @@
<componentRootId>a2091daf-e287-4f38-a35f-46bde202f639</componentRootId> <componentRootId>a2091daf-e287-4f38-a35f-46bde202f639</componentRootId>
<name>Collapsible panel</name> <name>Collapsible panel</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="65283686-768f-44f9-9621-0c8327d90f11"> <scripts id="65283686-768f-44f9-9621-0c8327d90f11">
<properties> <properties>
@ -902,7 +901,6 @@
<componentRootId>ca69506d-fd9f-43b7-8d18-d03c3b5fa756</componentRootId> <componentRootId>ca69506d-fd9f-43b7-8d18-d03c3b5fa756</componentRootId>
<name>Filter group</name> <name>Filter group</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="3f5f352c-1a86-4702-a914-6c163c903157"> <scripts id="3f5f352c-1a86-4702-a914-6c163c903157">
<properties> <properties>
@ -924,6 +922,12 @@
<simple>true</simple> <simple>true</simple>
</value> </value>
</entry> </entry>
<entry>
<key>skipInitialLoading</key>
<value>
<simple>false</simple>
</value>
</entry>
</properties> </properties>
</scripts> </scripts>
<scripts id="b5dcccfd-643a-4c8c-aa3b-a44da851a86a"> <scripts id="b5dcccfd-643a-4c8c-aa3b-a44da851a86a">
@ -1032,6 +1036,12 @@
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="d524f4d7-efdc-45ac-a9a5-a160e241b871"> <scripts id="d524f4d7-efdc-45ac-a9a5-a160e241b871">
<properties> <properties>
<entry>
<key>collectible</key>
<value>
<simple>false</simple>
</value>
</entry>
<entry> <entry>
<key>label</key> <key>label</key>
<value> <value>
@ -1049,6 +1059,12 @@
<value> <value>
<simple>true</simple> <simple>true</simple>
</value> </value>
</entry>
<entry>
<key>treeValuesCacheStrategy</key>
<value>
<simple>"BY_PAGE_OBJECT_ID"</simple>
</value>
</entry> </entry>
</properties> </properties>
</scripts> </scripts>
@ -1154,7 +1170,6 @@
<componentRootId>55ffb039-3d8b-4e49-a0fa-e15b703f578e</componentRootId> <componentRootId>55ffb039-3d8b-4e49-a0fa-e15b703f578e</componentRootId>
<name>Vbox_current_user</name> <name>Vbox_current_user</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f"> <scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties> <properties>
@ -1978,7 +1993,6 @@
<componentRootId>cd396279-39e3-459f-a8b6-af9894753da7</componentRootId> <componentRootId>cd396279-39e3-459f-a8b6-af9894753da7</componentRootId>
<name>Vbox</name> <name>Vbox</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f"> <scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties> <properties>
@ -2651,7 +2665,6 @@
<componentRootId>03d3b749-1cc7-4f37-a8c1-701ffb00762e</componentRootId> <componentRootId>03d3b749-1cc7-4f37-a8c1-701ffb00762e</componentRootId>
<name>Hbox</name> <name>Hbox</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f"> <scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
<properties> <properties>
@ -4462,7 +4475,6 @@
<componentRootId>df951b69-a0bb-422e-b3ef-f5976671dba1</componentRootId> <componentRootId>df951b69-a0bb-422e-b3ef-f5976671dba1</componentRootId>
<name>Grid</name> <name>Grid</name>
<container>true</container> <container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered> <childrenReordered>false</childrenReordered>
<scripts id="07201df9-ff33-4c71-9aae-a2cfdd028234"> <scripts id="07201df9-ff33-4c71-9aae-a2cfdd028234">
<properties> <properties>