Skip to content
Snippets Groups Projects
indexing-fields.service.ts 17.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Injectable } from '@angular/core';
    import { TranslateService } from '@ngx-translate/core';
    import { HttpClient } from '@angular/common/http';
    import { FunctionsService } from './functions.service';
    import { NotificationService } from './notification/notification.service';
    
    import { of } from 'rxjs';
    import { catchError, finalize, tap } from 'rxjs/operators';
    
    
    @Injectable({
        providedIn: 'root',
    })
    export class IndexingFieldsService {
    
        coreFields: any[] = [
            {
                identifier: 'doctype',
                label: this.translate.instant('lang.doctype'),
    
                unit: 'mail',
                type: 'select',
                system: true,
                mandatory: true,
                enabled: true,
                default_value: '',
                values: []
            },
            {
                identifier: 'subject',
                label: this.translate.instant('lang.subject'),
    
                unit: 'mail',
                type: 'string',
                system: true,
                mandatory: true,
                enabled: true,
                default_value: '',
                values: []
            },
        ];
    
        fields: any[] = [
    
            {
                identifier: 'resId',
                label: this.translate.instant('lang.getResId'),
                icon: 'fa-envelope',
                type: 'integer',
                default_value: [],
                values: [],
                enabled: true,
            },
    
            {
                identifier: 'chrono',
                label: this.translate.instant('lang.chrono'),
                icon: 'fa-compass',
                type: 'string',
                default_value: [],
                values: [],
                enabled: true,
    
                indexingHide: true
            },
            {
                identifier: 'status',
                label: this.translate.instant('lang.status'),
                icon: 'fa-mail-bulk',
                type: 'select',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
            },
            {
                identifier: 'category',
                label: this.translate.instant('lang.category_id'),
                icon: 'fa-map-signs',
                type: 'select',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
    
            },
            {
                identifier: 'creationDate',
                label: this.translate.instant('lang.creationDate'),
                icon: 'fa-calendar-day',
                type: 'date',
                default_value: [],
                values: [],
                enabled: true,
    
            {
                identifier: 'recipients',
                label: this.translate.instant('lang.getRecipients'),
    
                type: 'autocomplete',
                default_value: [],
                values: [],
                enabled: true,
            },
            {
                identifier: 'priority',
                label: this.translate.instant('lang.priority'),
    
                type: 'select',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'confidentiality',
                label: this.translate.instant('lang.confidential'),
    
                icon: 'fa-user-secret',
    
                type: 'radio',
                default_value: null,
                values: [{ 'id': true, 'label': this.translate.instant('lang.yes') }, { 'id': false, 'label': this.translate.instant('lang.no') }],
                enabled: true,
            },
            {
                identifier: 'initiator',
                label: this.translate.instant('lang.initiatorEntityAlt'),
    
                icon: 'fa-user',
    
                type: 'select',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'departureDate',
                label: this.translate.instant('lang.departureDate'),
    
                icon: 'fa-calendar-check',
    
                type: 'date',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'processLimitDate',
                label: this.translate.instant('lang.processLimitDate'),
    
                icon: 'fa-stopwatch',
    
                type: 'date',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'tags',
                label: this.translate.instant('lang.tags'),
    
                icon: 'fa-tags',
    
                type: 'autocomplete',
                default_value: [],
                values: ['/rest/autocomplete/tags', '/rest/tags'],
                enabled: true,
            },
            {
                identifier: 'senders',
                label: this.translate.instant('lang.getSenders'),
    
                icon: 'fa-address-book',
    
                type: 'autocomplete',
                default_value: [],
                values: ['/rest/autocomplete/correspondents'],
                enabled: true,
            },
            {
                identifier: 'destination',
                label: this.translate.instant('lang.destination'),
    
                icon: 'fa-sitemap',
    
                type: 'select',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'folders',
                label: this.translate.instant('lang.folders'),
    
                icon: 'fa-folder',
    
                type: 'autocomplete',
                default_value: [],
                values: ['/rest/autocomplete/folders', '/rest/folders'],
                enabled: true,
            },
            {
                identifier: 'documentDate',
                label: this.translate.instant('lang.docDate'),
    
                icon: 'fa-calendar-day',
    
                unit: 'mail',
                type: 'date',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'arrivalDate',
                label: this.translate.instant('lang.arrivalDate'),
    
                icon: 'fa-calendar',
    
                unit: 'mail',
                type: 'date',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'registeredMail_type',
                label: this.translate.instant('lang.registeredMailType'),
    
                icon: 'fa-file',
    
                type: 'select',
                default_value: null,
                values: [{ 'id': '2D', 'label': this.translate.instant('lang.registeredMail_2D') }, { 'id': '2C', 'label': this.translate.instant('lang.registeredMail_2C') }, { 'id': 'RW', 'label': this.translate.instant('lang.registeredMail_RW') }],
                enabled: true,
    
                searchHide: true
    
            },
            {
                identifier: 'registeredMail_issuingSite',
                label: this.translate.instant('lang.issuingSite'),
    
                icon: 'fa-warehouse',
    
                type: 'issuingSite',
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'registeredMail_number',
                label: this.translate.instant('lang.registeredMailNumber'),
    
                icon: 'fa-barcode',
    
                type: 'string',
                default_value: null,
                values: [],
                enabled: false,
    
                searchHide: true
    
            },
            {
                identifier: 'registeredMail_warranty',
                label: this.translate.instant('lang.warrantyLevel'),
    
                icon: 'fa-shield-alt',
    
                type: 'radio',
                default_value: null,
                values: [{ 'id': 'R1', 'label': 'R1' }, { 'id': 'R2', 'label': 'R2' }, { 'id': 'R3', 'label': 'R3' }],
                enabled: true,
    
                searchHide: true
    
            },
            {
                identifier: 'registeredMail_letter',
                label: this.translate.instant('lang.letter'),
    
                icon: 'fa-envelope',
    
                type: 'radio',
                default_value: null,
                values: [{ 'id': true, 'label': this.translate.instant('lang.yes') }, { 'id': false, 'label': this.translate.instant('lang.no') }],
                enabled: true,
    
                searchHide: true
    
            },
            {
                identifier: 'registeredMail_recipient',
                label: this.translate.instant('lang.registeredMailRecipient'),
    
                icon: 'fa-address-book',
    
                default_value: null,
                values: [],
                enabled: true,
            },
            {
                identifier: 'registeredMail_reference',
                label: this.translate.instant('lang.registeredMailReference'),
    
                icon: 'fa-dolly-flatbed',
    
                type: 'string',
                default_value: null,
                values: [],
                enabled: true,
            },
    
            {
                identifier: 'registeredMail_receivedDate',
                label: this.translate.instant('lang.registeredMailReceivedDate'),
                icon: 'fa-calendar-check',
                type: 'date',
                default_value: null,
                values: [],
                enabled: true,
            },
    
            {
                identifier: 'fulltext',
                label: this.translate.instant('lang.fulltext'),
                icon: 'fa-file-alt',
                type: 'string',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
    
            },
            {
                identifier: 'closingDate',
                label: this.translate.instant('lang.closingDate'),
                icon: 'fa-stopwatch',
                type: 'date',
                default_value: [],
                values: [],
                enabled: true
            },
            {
                identifier: 'notes',
                label: this.translate.instant('lang.note'),
                icon: 'fa-comments',
                type: 'string',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
            },
            {
                identifier: 'barcode',
                label: this.translate.instant('lang.barcode'),
                icon: 'fa-barcode',
                type: 'string',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
            },
            {
                identifier: 'attachment_type',
                label: this.translate.instant('lang.attachmentType'),
                icon: 'fa-paperclip',
                type: 'select',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
            },
            {
    
                identifier: 'attachment_creationDate',
    
                label: `${this.translate.instant('lang.creationDate')} (${this.translate.instant('lang.attachmentShort')})`,
    
                icon: 'fa-calendar-day',
    
                type: 'date',
    
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
            },
            {
                identifier: 'groupSign',
                label: this.translate.instant('lang.groupSign'),
                icon: 'fa-user-friends',
                type: 'select',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
            },
    
                identifier: 'senderDepartment',
                label: this.translate.instant('lang.sendersDepartment'),
    
                icon: 'fa-map',
                type: 'select',
                default_value: [],
                values: [],
                enabled: true,
                indexingHide: true
            },
    
            {
                identifier: 'retentionFrozen',
                label: this.translate.instant('lang.retentionRuleFrozen'),
                icon: 'fa-snowflake',
                type: 'select',
                default_value: [],
                values: [{ 'id': true, 'label': this.translate.instant('lang.yes') }, { 'id': false, 'label': this.translate.instant('lang.no') }],
                enabled: true,
                indexingHide: true
            },
            {
                identifier: 'binding',
                label: this.translate.instant('lang.bindingMail'),
                icon: 'fa-exclamation',
                type: 'select',
                default_value: [],
                values: [{ 'id': true, 'label': this.translate.instant('lang.yes') }, { 'id': false, 'label': this.translate.instant('lang.no') }],
                enabled: true,
                indexingHide: true
            }
    
        roleFields: any[] = [];
    
    
        // TODO : UNIFY IDENTIFIER
        mappingdata: any = {
            getPriority: 'priority',
            getCategory: 'category',
            getDoctype: 'doctype',
            getRecipients: 'recipients',
            getSenders: 'senders',
            getSignatories: 'role_sign',
            getModificationDate: 'modificationDate',
            getOpinionLimitDate: 'role_visa',
            getFolders: 'folders',
            getResId: 'resId',
            getBarcode: 'barcode',
            getRegisteredMailRecipient: 'registeredMail_recipient',
            getRegisteredMailReference: 'registeredMail_reference',
            getRegisteredMailIssuingSite: 'registeredMail_issuingSite',
            chronoNumberShort: 'chrono'
        };
    
    
        constructor(
            public http: HttpClient,
            public translate: TranslateService,
            private notify: NotificationService,
            public functions: FunctionsService) { }
    
    
        getCoreFields(exclude: string = '') {
    
            const coreFields = JSON.parse(JSON.stringify(this.coreFields));
            return exclude === '' ? coreFields : coreFields.filter((field: any) => !field[exclude]);
    
        getFields(exclude: string = '') {
    
            const fields = JSON.parse(JSON.stringify(this.fields));
            return exclude === '' ? fields : fields.filter((field: any) => !field[exclude]);
    
        }
    
        getCustomFields() {
            return new Promise((resolve, reject) => {
    
                this.http.get('../rest/customFields').pipe(
                    tap((data: any) => {
                        this.customFields = data.customFields.map((info: any) => {
                            info.identifier = 'indexingCustomField_' + info.id;
                            info.icon = 'fa-hashtag';
                            info.system = false;
                            info.enabled = true;
                            info.SQLMode = info.SQLMode;
                            if (['integer', 'string', 'date'].indexOf(info.type) > -1 && !this.functions.empty(info.values)) {
                                info.default_value = info.values[0].key;
                            } else {
                                info.default_value = info.type === 'banAutocomplete' ? [] : null;
                            }
                            info.values = info.values.length > 0 ? info.values.map((custVal: any) => {
                                return {
                                    id: custVal.key,
                                    label: custVal.label
                                };
                            }) : info.values;
                            return info;
                        });
                    }),
                    finalize(() => resolve(this.customFields)),
                    catchError((err: any) => {
                        this.notify.handleSoftErrors(err);
                        return of(false);
                    })
                ).subscribe();
    
        getField(identifier: string) {
            let mergedFields = this.getCoreFields().concat(this.getFields());
            mergedFields = mergedFields.concat(this.customFields);
    
            mergedFields = mergedFields.concat(this.roleFields);
    
    
            return mergedFields.filter(field => field.identifier === identifier)[0];
        }
    
    
        async getAllFields() {
            const customFields = await this.getCustomFields();
    
            const roleFields = await this.getRolesFields();
    
    
            let mergedFields = this.getCoreFields().concat(this.getFields());
            mergedFields = mergedFields.concat(customFields);
    
            mergedFields = mergedFields.concat(roleFields);
    
        async getAllSearchFields() {
            const customFields = await this.getCustomFields();
            const roleFields = await this.getRolesFields();
    
            let mergedFields = this.getCoreFields('searchHide').concat(this.getFields('searchHide'));
            mergedFields = mergedFields.concat(customFields);
            mergedFields = mergedFields.concat(roleFields);
    
            return mergedFields;
        }
    
    
        getRolesFields() {
            return new Promise((resolve, reject) => {
                this.http.get(`../rest/roles`).pipe(
                    tap((data: any) => {
                        const fields: any[] = [];
                        data.roles.forEach((role: any) => {
                            fields.push({
                                identifier: `role_${role.id}`,
                                label: role.label,
                                icon: role.id === 'dest' ? 'fa-user-edit' : 'fa-users',
                                type: 'select',
                                default_value: null,
                                values: [],
                                enabled: true,
                            });
                        });
    
                        fields.push({
                            identifier: `role_visa`,
                            label: this.translate.instant('lang.visaUser'),
                            icon: 'fa-user-check',
                            type: 'select',
                            default_value: null,
                            values: [],
                            enabled: true,
                        });
                        fields.push({
                            identifier: `role_sign`,
                            label: this.translate.instant('lang.signUser'),
                            icon: 'fa-user-tie',
                            type: 'select',
                            default_value: null,
                            values: [],
                            enabled: true,
                        });
    
                        this.roleFields = fields;
                    }),
                    finalize(() => resolve(this.roleFields)),
                    catchError((err: any) => {
                        this.notify.handleSoftErrors(err);
                        return of(false);
                    })
                ).subscribe();
            });
        }