Compare commits

...

5 Commits

Author SHA1 Message Date
Valentin Mihai
f6242136b7 RED-10556 - changed 'label' with 'csvColumnHeader' 2024-12-05 15:07:22 +02:00
Valentin Mihai
84cdb2f567 RED-10557 - updated logic for file attributes mapping 2024-12-05 15:05:00 +02:00
Valentin Mihai
8505d500d3 Merge branch 'master' into VM/RED-10557 2024-12-05 12:56:51 +02:00
Valentin Mihai
402be3dadf Merge branch 'master' into VM/RED-10557 2024-12-05 12:42:04 +02:00
Valentin Mihai
4b5f3ab969 WIP on master
RED-10557 - included file attributes in CSV export + setting
2024-11-28 11:26:04 +02:00
11 changed files with 50 additions and 0 deletions

View File

@ -77,6 +77,14 @@
</mat-checkbox>
</div>
</div>
<div class="options-wrapper">
<div class="iqser-input-group mt-0">
<mat-checkbox color="primary" formControlName="includeInCsvExport" name="includeInCsvExport">
{{ 'add-edit-file-attribute.form.includeInCsvExport' | translate }}
</mat-checkbox>
</div>
</div>
</div>
<div class="dialog-actions">
<iqser-icon-button

View File

@ -80,6 +80,7 @@ export class AddEditFileAttributeDialogComponent extends BaseDialogComponent {
primaryAttribute: [fileAttribute?.primaryAttribute],
filterable: { value: fileAttribute?.filterable, disabled: !this.canSetFilterable },
displayedInFileList: { value: fileAttribute?.displayedInFileList, disabled: !this.canSetDisplayed },
includeInCsvExport: [fileAttribute?.includeInCsvExport],
});
}
}

View File

@ -104,6 +104,10 @@
<iqser-round-checkbox *ngIf="attribute.primaryAttribute" [size]="18" active></iqser-round-checkbox>
</div>
<div class="center cell">
<iqser-round-checkbox *ngIf="attribute.includeInCsvExport" [size]="18" active></iqser-round-checkbox>
</div>
<div class="cell">
<div *allow="roles.fileAttributes.writeConfig; if: currentUser.isAdmin" class="action-buttons">
<div [attr.help-mode-key]="'edit_delete_file_attribute'">

View File

@ -83,6 +83,7 @@ export default class FileAttributesListingScreenComponent extends ListingCompone
rightIcon: 'red:status-info',
rightIconTooltip: _('file-attributes-listing.table-col-names.primary-info-tooltip'),
},
{ label: _('file-attributes-listing.table-col-names.include-in-csv-export'), class: 'flex-center' },
];
readonly roles = Roles;

View File

@ -105,12 +105,19 @@ export class DossierOverviewScreenHeaderComponent {
const displayedEntities = await firstValueFrom(this.listingService.displayed$);
const entities = this.sortingService.defaultSort(displayedEntities);
const fileName = this.dossier().dossierName + '.export.csv';
const configNames = this._fileAttributesService
.getFileAttributeConfig(this.dossier().dossierTemplateId)
.fileAttributeConfigs.filter(a => a.includeInCsvExport)
.map(c => ({ csvColumnHeader: c.csvColumnHeader, id: c.id }));
const mapper = (file?: File) => ({
...file,
hasAnnotations: file.hasRedactions,
assignee: this._userService.getName(file.assignee) || '-',
primaryAttribute: this._primaryFileAttributeService.getPrimaryFileAttributeValue(file, this.dossier().dossierTemplateId),
...this.#mapFileAttributes(file, displayedEntities, configNames),
});
const documineOnlyFields = ['hasAnnotations'];
const redactionOnlyFields = ['hasHints', 'hasImages', 'hasUpdates', 'hasRedactions'];
const fileFields = [
@ -127,7 +134,25 @@ export class DossierOverviewScreenHeaderComponent {
'lastProcessed',
...(this.isDocumine ? documineOnlyFields : redactionOnlyFields),
'excluded',
...configNames.map(c => c.csvColumnHeader),
];
saveAsCSV(fileName, entities, fileFields, mapper);
}
#mapFileAttributes(file: File, displayedEntities: File[], configNames: { csvColumnHeader: string; id: string }[]) {
const entity = displayedEntities.find(e => e.id === file.id);
if (!entity) return {};
return Object.keys(entity.fileAttributes.attributeIdToValue).reduce(
(result, key) => {
const match = configNames.find(item => item.id === key);
if (match) {
result[match.csvColumnHeader] = entity.fileAttributes.attributeIdToValue[key];
}
return result;
},
{} as Record<string, any>,
);
}
}

View File

@ -173,6 +173,7 @@
"displayedInFileList": "Wird in der Dokumentenliste angezeigt",
"filterable": "Filterbar",
"filterable-disabled": "Die maximale Anzahl filterbarer Attribute ({maxNumber}) wurde erreicht.",
"includeInCsvExport": "",
"name": "Name des Attributs",
"name-placeholder": "Namen eingeben",
"primary": "Zum Primärattribut machen",
@ -1521,6 +1522,7 @@
"csv-column": "CSV-Spalte",
"displayed-in-file-list": "In Dokumentenliste anzeigen",
"filterable": "Filterbar",
"include-in-csv-export": "",
"name": "Name",
"primary": "Primärattribut",
"primary-info-tooltip": "Der Wert des Primärattributs steht in der Dokumentenliste unter dem Dateinamen.",

View File

@ -173,6 +173,7 @@
"displayedInFileList": "Displayed in file list",
"filterable": "Filterable",
"filterable-disabled": "The maximum number of filterable attributes ({maxNumber}) has been reached.",
"includeInCsvExport": "Include in CSV export",
"name": "Attribute name",
"name-placeholder": "Enter name",
"primary": "Primary attribute",
@ -1521,6 +1522,7 @@
"csv-column": "CSV column",
"displayed-in-file-list": "Displayed in file list",
"filterable": "Filterable",
"include-in-csv-export": "Include in CSV export",
"name": "Name",
"primary": "Primary",
"primary-info-tooltip": "The value of the attribute set as primary is diplayed below the file name in the document list.",

View File

@ -173,6 +173,7 @@
"displayedInFileList": "Wird in der Dokumentenliste angezeigt",
"filterable": "Filterbar",
"filterable-disabled": "Die maximale Anzahl filterbarer Attribute ({maxNumber}) wurde erreicht.",
"includeInCsvExport": "",
"name": "Name des Attributs",
"name-placeholder": "Namen eingeben",
"primary": "Zum Primärattribut machen",
@ -1521,6 +1522,7 @@
"csv-column": "CSV-Spalte",
"displayed-in-file-list": "In Dokumentenliste anzeigen",
"filterable": "Filterbar",
"include-in-csv-export": "",
"name": "Name",
"primary": "Primärattribut",
"primary-info-tooltip": "Der Wert des Primärattributs steht in der Dokumentenliste unter dem Dateinamen.",

View File

@ -173,6 +173,7 @@
"displayedInFileList": "Displayed in file list",
"filterable": "Filterable",
"filterable-disabled": "The maximum number of filterable attributes ({maxNumber}) has been reached.",
"includeInCsvExport": "Include in CSV export",
"name": "Attribute name",
"name-placeholder": "Enter name",
"primary": "Set as primary",
@ -1521,6 +1522,7 @@
"csv-column": "CSV column",
"displayed-in-file-list": "Displayed in file list",
"filterable": "Filterable",
"include-in-csv-export": "Include in CSV export",
"name": "Name",
"primary": "Primary",
"primary-info-tooltip": "The value of the attribute set as primary is diplayed below the file name in the document list.",

View File

@ -11,6 +11,7 @@ export class FileAttributeConfig implements IFileAttributeConfig, IListable {
readonly displayedInFileList?: boolean;
readonly filterable?: boolean;
readonly type?: FileAttributeConfigType;
readonly includeInCsvExport?: boolean;
constructor(fileAttributeConfig: IFileAttributeConfig) {
this.id = fileAttributeConfig.id;
@ -22,6 +23,7 @@ export class FileAttributeConfig implements IFileAttributeConfig, IListable {
this.displayedInFileList = fileAttributeConfig.displayedInFileList;
this.filterable = !!fileAttributeConfig.filterable;
this.type = fileAttributeConfig.type;
this.includeInCsvExport = fileAttributeConfig.includeInCsvExport;
}
get searchKey(): string {

View File

@ -9,6 +9,7 @@ export interface IFileAttributeConfig {
readonly placeholder?: string;
readonly primaryAttribute?: boolean;
readonly type?: FileAttributeConfigType;
readonly includeInCsvExport?: boolean;
}
export const FileAttributeConfigTypes = {