Skip to content

Commit

Permalink
Sync repo from v92 to v92 20241008054030 (#192)
Browse files Browse the repository at this point in the history
* Automated sync from source branch v92

* Readme updated and unchanged files reset

* Update README.md

---------

Co-authored-by: imx-sync-bot <imx-sync-bot@oneidentity>
Co-authored-by: Martina Graeber (mgraeber) <[email protected]>
Co-authored-by: Hanno Bunjes <[email protected]>
  • Loading branch information
4 people authored Oct 8, 2024
1 parent 416cb44 commit 0ebeb21
Show file tree
Hide file tree
Showing 70 changed files with 1,787 additions and 1,291 deletions.
2 changes: 1 addition & 1 deletion .commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
c2f226527c85033e5dd81f1ba2d4d90a4ced7e8b
93cd074f727575c0538b48b2cc9a89350235f847
1 change: 0 additions & 1 deletion .sync-history
Original file line number Diff line number Diff line change
@@ -1 +0,0 @@
31a43b96f 2024-08-23 Merged PR 70361: 271561-cdr-editor-for-bitmask-properties
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@

## Change log

### October 8, 2024
- 465213: Fixes an infinite loop if the an invalid value is set on a basic CDR.
- 466404: Fixes an issue with setting today's date as the start date of a delegation.
- 464909: Fixes an issue with the removal of IT shop assignments from newly created applications.
- 466217: Fixes timing issues that could cause the search result to become out of sync with the search term entered by the user.

### September 9, 2024
- 463113: Fixes an issue, regarding the "Unsubscribed as from" property, that doesn't work as expected.
- 462249: Fixes the "Property not found: UID_UNSRoot" error, when switching to tab "Child System Entitlements" on the Data Explorer's system Entitlements page.
Expand Down
Binary file modified imxweb/imx-modules/imx-api-qbm.tgz
Binary file not shown.
Binary file modified imxweb/imx-modules/imx-api-rms.tgz
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import { PortalApplication, PortalApplicationNew } from 'imx-api-aob';
import { CollectionLoadParameters, TypedEntityCollectionData, TypedEntity } from 'imx-qbm-dbts';
import { BusyService, ClassloggerService, DataSourceToolbarSettings, DataTileBadge, DataTilesComponent, SettingsService } from 'qbm';
import { ApplicationsService } from '../applications.service';
import { UserModelService } from 'qer';
import { AobPermissionsService } from '../../permissions/aob-permissions.service';


Expand Down Expand Up @@ -90,7 +89,6 @@ export class ApplicationNavigationComponent implements OnInit {
private logger: ClassloggerService,
private readonly appService: ApplicationsService,
private readonly settingsService: SettingsService,
private readonly userService: UserModelService,
private readonly route: ActivatedRoute,
private readonly applicationsProvider: ApplicationsService,
private readonly aobPermissionsService: AobPermissionsService,
Expand Down Expand Up @@ -178,6 +176,8 @@ export class ApplicationNavigationComponent implements OnInit {

public async onSearch(keywords: string): Promise<void> {
this.logger.debug(this, `Searching for: ${keywords}`);

this.appService.abortCall();

this.navigationState.StartIndex = 0;
if (keywords == null || keywords.length === 0) {
Expand Down
11 changes: 10 additions & 1 deletion imxweb/projects/aob/src/lib/applications/applications.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ export class ApplicationsService {
public readonly onApplicationDeleted = new Subject<string>();
public applicationRefresh: BehaviorSubject<Boolean> = new BehaviorSubject<Boolean>(false);

public abortController = new AbortController();

private badgePublished: DataTileBadge;
private badgeKpiErrors: DataTileBadge;
private badgeNew: DataTileBadge;
Expand Down Expand Up @@ -93,7 +95,9 @@ export class ApplicationsService {
if (this.aobClient.typedClient == null) {
return new Promise<TypedEntityCollectionData<PortalApplication>>((resolve) => resolve(null));
}
return this.apiProvider.request(() => this.aobClient.typedClient.PortalApplication.Get(parameters));
return this.apiProvider.request(() =>
this.aobClient.typedClient.PortalApplication.Get(parameters, { signal: this.abortController.signal })
);
}

public async reload(uidApplication: string): Promise<PortalApplicationInteractive> {
Expand Down Expand Up @@ -220,6 +224,11 @@ export class ApplicationsService {

this.onApplicationDeleted.next(uid);
}

public abortCall(): void {
this.abortController.abort();
this.abortController = new AbortController();
}

private isPublished(application: PortalApplication): boolean {
if (application.IsInActive == null) {
Expand Down
2 changes: 1 addition & 1 deletion imxweb/projects/aob/src/lib/shops/shops.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export class ShopsService {
await this.apiProvider.request(async () => {
for (const shop of shops) {
await this.aobClient.client
.portal_applicationinshop_delete(application.UID_AOBApplication.value, shop.UID_ITShopOrg.value, undefined);
.portal_applicationinshop_delete(application.UID_AOBApplication.value, shop.UID_ITShopOrg.value,'');
count++;
}
});
Expand Down
21 changes: 12 additions & 9 deletions imxweb/projects/apc/src/lib/software/software.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export class SoftwareComponent implements OnInit, SideNavigationComponent {
private readonly metadata: MetadataService,
private readonly sidesheet: EuiSidesheetService,
private readonly ldsReplace: LdsReplacePipe,
private readonly translate: TranslateService,
private readonly translate: TranslateService
) {}

public async ngOnInit(): Promise<void> {
Expand Down Expand Up @@ -122,14 +122,17 @@ export class SoftwareComponent implements OnInit, SideNavigationComponent {
private async navigate(): Promise<void> {
const isBusy = this.busyService.beginBusy();
try {
this.dstSettings = {
dataSource: await this.resourceProvider.get(this.navigationState),
entitySchema: this.entitySchema,
navigationState: this.navigationState,
displayedColumns: this.displayColumns,
filters: this.dataModel.Filters,
dataModel: this.dataModel,
};
const dataSource = await this.resourceProvider.get(this.navigationState);
if (dataSource) {
this.dstSettings = {
dataSource: dataSource,
entitySchema: this.entitySchema,
navigationState: this.navigationState,
displayedColumns: this.displayColumns,
filters: this.dataModel.Filters,
dataModel: this.dataModel,
};
}
} finally {
isBusy.endBusy();
}
Expand Down
16 changes: 15 additions & 1 deletion imxweb/projects/apc/src/lib/software/software.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ export class SoftwareService {

protected config: QerProjectConfig & ProjectConfig;

private abortController = new AbortController();

constructor(
protected readonly project: ProjectConfigurationService,
private readonly api: ApcApiService,
Expand All @@ -65,7 +67,13 @@ export class SoftwareService {
accProduct: this.api.typedClient.PortalResourcesApplicationServiceitem,
resp: {
type: PortalRespApplication,
get: async (parameter: any) => this.api.client.portal_resp_application_get(parameter),
get: async (parameter: any) => {
if (parameter?.search !== undefined) {
// abort the request only while searching
this.abortCall();
}
return this.api.client.portal_resp_application_get(parameter, { signal: this.abortController.signal });
},
schema: this.api.typedClient.PortalRespApplication.GetSchema(),
dataModel: async (filter?: FilterData[]) => this.api.client.portal_resp_application_datamodel_get({ filter }),
interactive: this.api.typedClient.PortalRespApplicationInteractive,
Expand Down Expand Up @@ -138,4 +146,10 @@ export class SoftwareService {
public async unsubscribeMembership(item: TypedEntity): Promise<void> {
await this.qerClient.client.portal_itshop_unsubscribe_post({ UidPwo: [item.GetEntity().GetColumn('UID_PersonWantsOrg').GetValue()] });
}


private abortCall(): void {
this.abortController.abort();
this.abortController = new AbortController();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export class AttestationHistoryComponent implements OnInit, OnDestroy {
@Input() public parameters: { objecttable: string; objectuid: string; filter?: FilterData[] };
@Input() public itemStatus: DataSourceItemStatus = { enabled: (__) => true };
@Input() public withAssignmentAnalysis: boolean = false;
@Input() public selectable : boolean = true;
@Input() public selectable: boolean = true;

@ViewChild('attestorFilter', { static: false }) public attestorFilter: AttestationHistoryFilterComponent;

Expand Down Expand Up @@ -197,6 +197,7 @@ export class AttestationHistoryComponent implements OnInit, OnDestroy {
}

public async onSearch(search: string): Promise<void> {
this.historyService.abortCall();
return this.getData({ search });
}

Expand Down Expand Up @@ -251,8 +252,6 @@ export class AttestationHistoryComponent implements OnInit, OnDestroy {
viewConfig: this.viewConfig,
exportMethod,
};
} else {
this.dstSettings = undefined;
}
} finally {
isBusy.endBusy();
Expand Down Expand Up @@ -314,10 +313,8 @@ export class AttestationHistoryComponent implements OnInit, OnDestroy {
}

public async viewAssignmentAnalysis(event: Event, attestationCase: AttestationHistoryCase): Promise<void> {

event.stopPropagation();
const uidPerson = attestationCase.UID_Person.value;

const objectKey = DbObjectKey.FromXml(attestationCase.ObjectKeyBase.value);

const data: SourceDetectiveSidesheetData = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,28 +48,33 @@ import { DataSourceToolbarExportMethod } from 'qbm';
providedIn: 'root',
})
export class AttestationHistoryService {
public abortController = new AbortController();

constructor(private readonly attClient: ApiService, private readonly parameterDataService: ParameterDataService) {}

public async get(
parameters: AttestationCaseLoadParameters
): Promise<ExtendedTypedEntityCollection<PortalAttestationCase, AttCaseDataRead>> {
return this.attClient.typedClient.PortalAttestationCase.Get(parameters);
return this.attClient.typedClient.PortalAttestationCase.Get(parameters, { signal: this.abortController.signal });
}

public async getAttestations(loadParameters?: AttestationCaseLoadParameters): Promise<TypedEntityCollectionData<AttestationHistoryCase>> {
public async getAttestations(loadParameters?: AttestationCaseLoadParameters): Promise<TypedEntityCollectionData<AttestationHistoryCase> | undefined> {
const collection = await this.get(loadParameters);
if (!collection) {
return undefined;
}
return {
tableName: collection.tableName,
totalCount: collection.totalCount,
Data: collection.Data.map((item: PortalAttestationCase, index: number) => {
tableName: collection?.tableName,
totalCount: collection?.totalCount,
Data: collection?.Data.map((item: PortalAttestationCase, index: number) => {
const parameterDataContainer = this.parameterDataService.createContainer(
item.GetEntity(),
{ ...collection.extendedData, ...{ index } },
{ ...collection?.extendedData, ...{ index } },
(parameters) => this.getParameterCandidates(parameters),
(treefilterparameter) => this.getFilterTree(treefilterparameter)
);

return new AttestationHistoryCase(item, parameterDataContainer, { ...collection.extendedData, ...{ index } });
return new AttestationHistoryCase(item, parameterDataContainer, { ...collection?.extendedData, ...{ index } });
}),
};
}
Expand All @@ -80,13 +85,13 @@ export class AttestationHistoryService {
getMethod: (withProperties: string, PageSize?: number) => {
let method: MethodDescriptor<EntityCollectionData>;
if (PageSize) {
method = factory.portal_attestation_case_get({...loadParameters, withProperties, PageSize, StartIndex: 0})
method = factory.portal_attestation_case_get({ ...loadParameters, withProperties, PageSize, StartIndex: 0 });
} else {
method = factory.portal_attestation_case_get({...loadParameters, withProperties})
method = factory.portal_attestation_case_get({ ...loadParameters, withProperties });
}
return new MethodDefinition(method);
}
}
},
};
}

public async getDataModel(objecttable?: string, objectuid?: string, groupFilter?: FilterData[]): Promise<DataModel> {
Expand All @@ -99,13 +104,18 @@ export class AttestationHistoryService {

public getGroupInfo(parameters: AttestationCaseLoadParameters = {}): Promise<GroupInfoData> {
// remove groupFilter from parameters
const {withProperties, groupFilter, search, OrderBy, ...paramsWithoutGroupFilter } = parameters;
const { withProperties, groupFilter, search, OrderBy, ...paramsWithoutGroupFilter } = parameters;
return this.attClient.client.portal_attestation_case_group_get({
...paramsWithoutGroupFilter,
...{ withcount: true, filter: parameters.groupFilter },
});
}

public abortCall(): void {
this.abortController.abort();
this.abortController = new AbortController();
}

private async getParameterCandidates(parameters: ParameterDataLoadParameters): Promise<EntityCollectionData> {
return this.attClient.client.portal_attestation_case_parameter_candidates_post(
parameters.columnName,
Expand Down
43 changes: 30 additions & 13 deletions imxweb/projects/att/src/lib/decision/attestation-cases.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ import { AttestationCaseLoadParameters } from '../attestation-history/attestatio
})
export class AttestationCasesService {
public isChiefApproval: boolean;
public abortController = new AbortController();

private readonly historyBuilder = new TypedEntityBuilder(PortalAttestationCaseHistory);
private readonly apiClientMethodFactory = new ApiClientMethodFactory();

Expand All @@ -86,23 +88,33 @@ export class AttestationCasesService {
return this.attClient.typedClient.PortalAttestationCase.GetSchema();
}

public async get(attDecisionParameters?: AttestationDecisionLoadParameters, isUserEscalationApprover= false): Promise<TypedEntityCollectionData<AttestationCase>> {
public async get(
attDecisionParameters?: AttestationDecisionLoadParameters,
isUserEscalationApprover = false
): Promise<TypedEntityCollectionData<AttestationCase> | undefined> {
const navigationState = {
...attDecisionParameters,
Escalation: (attDecisionParameters.uid_attestationcase !== '' && isUserEscalationApprover) || attDecisionParameters.Escalation,
};

const navigationState = { ...attDecisionParameters, Escalation: (attDecisionParameters.uid_attestationcase !== '' && isUserEscalationApprover) || attDecisionParameters.Escalation };

const collection = await this.attClient.typedClient.PortalAttestationApprove.Get(navigationState);
const collection = await this.attClient.typedClient.PortalAttestationApprove.Get(navigationState, {
signal: this.abortController.signal,
});
if (!collection) {
return undefined;
}
return {
tableName: collection.tableName,
totalCount: collection.totalCount,
Data: collection.Data.map((item: PortalAttestationApprove, index: number) => {
tableName: collection?.tableName,
totalCount: collection?.totalCount,
Data: collection?.Data.map((item: PortalAttestationApprove, index: number) => {
const parameterDataContainer = this.parameterDataService.createContainer(
item.GetEntity(),
{ ...collection.extendedData, ...{ index } },
{ ...collection?.extendedData, ...{ index } },
(parameters) => this.getParameterCandidates(parameters),
(treefilterparameter) => this.getFilterTree(treefilterparameter)
);

return new AttestationCase(item, this.isChiefApproval, parameterDataContainer, { ...collection.extendedData, ...{ index } });
return new AttestationCase(item, this.isChiefApproval, parameterDataContainer, { ...collection?.extendedData, ...{ index } });
}),
};
}
Expand All @@ -113,13 +125,13 @@ export class AttestationCasesService {
getMethod: (withProperties: string, PageSize?: number) => {
let method: MethodDescriptor<EntityCollectionData>;
if (PageSize) {
method = factory.portal_attestation_approve_get({...attDecisionParameters, withProperties, PageSize, StartIndex: 0})
method = factory.portal_attestation_approve_get({ ...attDecisionParameters, withProperties, PageSize, StartIndex: 0 });
} else {
method = factory.portal_attestation_approve_get({...attDecisionParameters, withProperties})
method = factory.portal_attestation_approve_get({ ...attDecisionParameters, withProperties });
}
return new MethodDefinition(method);
}
}
},
};
}

public async getNumberOfPending(parameters: AttestationCaseLoadParameters): Promise<number> {
Expand Down Expand Up @@ -279,6 +291,11 @@ export class AttestationCasesService {
return this.attClient.client.portal_attestation_denydecision_post(this.getKey(attestationCase), input);
}

public abortCall(): void {
this.abortController.abort();
this.abortController = new AbortController();
}

private getKey(attestationCase: TypedEntity): string {
return attestationCase.GetEntity().GetKeys()[0];
}
Expand Down
Loading

0 comments on commit 0ebeb21

Please sign in to comment.