RED-7856: Sort dossier states stats by rank

This commit is contained in:
Adina Țeudan 2023-11-01 01:33:36 +02:00
parent 946bc87198
commit 19a47bccec
4 changed files with 47 additions and 19 deletions

View File

@ -1,8 +1,8 @@
<a <a
*ngIf="stats as dossierTemplate" *ngIf="stats as dossierTemplate"
[attr.help-mode-key]="!dossierTemplate.isEmpty ? 'open_dossier_template' : null"
[class.empty]="dossierTemplate.isEmpty" [class.empty]="dossierTemplate.isEmpty"
[routerLink]="dossierTemplate.isEmpty ? null : ['..', dossierTemplate.dossierTemplateId, 'dossiers']" [routerLink]="dossierTemplate.isEmpty ? null : ['..', dossierTemplate.dossierTemplateId, 'dossiers']"
[attr.help-mode-key]="!dossierTemplate.isEmpty ? 'open_dossier_template' : null"
class="dialog" class="dialog"
> >
<ng-container *ngIf="!dossierTemplate.isEmpty; else empty"> <ng-container *ngIf="!dossierTemplate.isEmpty; else empty">
@ -39,7 +39,7 @@
</div> </div>
<div class="flex-3"> <div class="flex-3">
<redaction-donut-chart <redaction-donut-chart
[config]="translateChartService.translateDossierStates(dossierTemplate.dossiersChartConfig, dossierTemplate.id)" [config]="translateChartService.translateAndSortDossierStates(dossierTemplate.dossiersChartConfig, dossierTemplate.id)"
[radius]="63" [radius]="63"
[strokeWidth]="15" [strokeWidth]="15"
[subtitles]="['dossier-template-stats.active-dossiers' | translate: { count: dossierTemplate.numberOfActiveDossiers }]" [subtitles]="['dossier-template-stats.active-dossiers' | translate: { count: dossierTemplate.numberOfActiveDossiers }]"
@ -72,9 +72,9 @@
<iqser-icon-button <iqser-icon-button
(action)="newDossier()" (action)="newDossier()"
*ngIf="permissionsService.canCreateDossier(dossierTemplate)" *ngIf="permissionsService.canCreateDossier(dossierTemplate)"
[attr.help-mode-key]="'new_dossier'"
[label]="'dashboard.empty-template.new-dossier' | translate" [label]="'dashboard.empty-template.new-dossier' | translate"
[type]="iconButtonTypes.primary" [type]="iconButtonTypes.primary"
[attr.help-mode-key]="'new_dossier'"
icon="iqser:plus" icon="iqser:plus"
></iqser-icon-button> ></iqser-icon-button>
</ng-template> </ng-template>

View File

@ -17,13 +17,16 @@ export class DossiersListingDetailsComponent {
readonly documentsChartConfig$: Observable<DonutChartConfig[]>; readonly documentsChartConfig$: Observable<DonutChartConfig[]>;
readonly dossiersChartConfig$: Observable<DonutChartConfig[]>; readonly dossiersChartConfig$: Observable<DonutChartConfig[]>;
constructor(dashboardStatsService: DashboardStatsService, private readonly _translateChartService: TranslateChartService) { constructor(
dashboardStatsService: DashboardStatsService,
private readonly _translateChartService: TranslateChartService,
) {
const dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID); const dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID);
this.stats$ = dashboardStatsService.getEntityChanged$(dossierTemplateId); this.stats$ = dashboardStatsService.getEntityChanged$(dossierTemplateId);
this.dossiersChartConfig$ = this.stats$.pipe( this.dossiersChartConfig$ = this.stats$.pipe(
map(stats => stats.dossiersChartConfig), map(stats => stats.dossiersChartConfig),
map(data => _translateChartService.translateDossierStates(data, dossierTemplateId)), map(data => _translateChartService.translateAndSortDossierStates(data, dossierTemplateId)),
); );
this.documentsChartConfig$ = this.stats$.pipe( this.documentsChartConfig$ = this.stats$.pipe(
map(stats => stats.documentsChartConfig), map(stats => stats.documentsChartConfig),

View File

@ -5,28 +5,53 @@ import { rolesTranslations } from '@translations/roles-translations';
import { workflowFileStatusTranslations } from '@translations/file-status-translations'; import { workflowFileStatusTranslations } from '@translations/file-status-translations';
import { DossierStatesMapService } from './entity-services/dossier-states-map.service'; import { DossierStatesMapService } from './entity-services/dossier-states-map.service';
function sortStatesByRank(
a: DonutChartConfig,
b: DonutChartConfig,
dossierTemplateId: string,
dossierStatesMapService: DossierStatesMapService,
): number {
if (a.key === 'undefined') {
return 1;
}
if (b.key === 'undefined') {
return -1;
}
const aState = dossierStatesMapService.get(dossierTemplateId, a.key);
const bState = dossierStatesMapService.get(dossierTemplateId, b.key);
return aState.rank - bState.rank;
}
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class TranslateChartService { export class TranslateChartService {
constructor(private readonly _translateService: TranslateService, private readonly _dossierStatesMapService: DossierStatesMapService) {} constructor(
private readonly _translateService: TranslateService,
private readonly _dossierStatesMapService: DossierStatesMapService,
) {}
translateLabels(config: DonutChartConfig[]): DonutChartConfig[] { translateLabels(config: DonutChartConfig[]): DonutChartConfig[] {
return config.map(val => ({ ...val, label: this._translateService.instant(val.label) })); return config.map(val => ({ ...val, label: this._translateService.instant(val.label) }));
} }
translateDossierStates(config: DonutChartConfig[], dossierTemplateId: string): DonutChartConfig[] { translateAndSortDossierStates(config: DonutChartConfig[], dossierTemplateId: string): DonutChartConfig[] {
return config.map(val => { return config
.map(val => {
if (val.key === 'undefined') { if (val.key === 'undefined') {
return { ...val, label: this._translateService.instant(val.label) }; return { ...val, label: this._translateService.instant(val.label) };
} }
const dossierState = this._dossierStatesMapService.get(dossierTemplateId, val.key); const dossierState = this._dossierStatesMapService.get(dossierTemplateId, val.key);
return { ...val, label: dossierState.name, color: dossierState.color }; return { ...val, label: dossierState.name, color: dossierState.color };
}); })
.sort((a: DonutChartConfig, b: DonutChartConfig) => sortStatesByRank(a, b, dossierTemplateId, this._dossierStatesMapService));
} }
translateWorkflowStatus(config: DonutChartConfig[]): DonutChartConfig[] { translateWorkflowStatus(config: DonutChartConfig[]): DonutChartConfig[] {
return config.map(val => ({ ...val, label: this._translateService.instant(workflowFileStatusTranslations[val.label] as string) })); return config.map(val => ({
...val,
label: this._translateService.instant(workflowFileStatusTranslations[val.label] as string),
}));
} }
translateRoles(config: DonutChartConfig[]): DonutChartConfig[] { translateRoles(config: DonutChartConfig[]): DonutChartConfig[] {

View File

@ -3763,10 +3763,10 @@
node-addon-api "^3.2.1" node-addon-api "^3.2.1"
node-gyp-build "^4.3.0" node-gyp-build "^4.3.0"
"@pdftron/webviewer@10.4.0": "@pdftron/webviewer@10.5.0":
version "10.4.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@pdftron/webviewer/-/webviewer-10.4.0.tgz#9f59c38f0ec1b7cc08d446ca1a9abc94aa549c41" resolved "https://registry.yarnpkg.com/@pdftron/webviewer/-/webviewer-10.5.0.tgz#d65ee2b7b10858596dadb7764c477f090039e27b"
integrity sha512-aJOuAYEnkxn/tCaB1m548VfxILbBesLB7Fd1S15/KvjklM9nCQjwJv4+R99zL+WaxvVet9kem5LVPoiGXDHXmg== integrity sha512-lgNQyMGVj38E5RlzTAhlfXSbODBNFSOS5H47URfhthcV9No1ErMb342TniXTa77XLClddvfrPkvXg3PM6gJgEA==
"@phenomnomnominal/tsquery@^4.1.1": "@phenomnomnominal/tsquery@^4.1.1":
version "4.2.0" version "4.2.0"