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'), icon: 'fa-suitcase', unit: 'mail', type: 'select', system: true, mandatory: true, enabled: true, default_value: '', values: [] }, { identifier: 'subject', label: this.translate.instant('lang.subject'), icon: 'fa-quote-left', 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, indexingHide: true }, { identifier: 'recipients', label: this.translate.instant('lang.getRecipients'), icon: 'fa-user', type: 'autocomplete', default_value: [], values: [], enabled: true, }, { identifier: 'priority', label: this.translate.instant('lang.priority'), icon: 'fa-traffic-light', 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', type: 'contact', 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 } ]; customFields: any[] = []; 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); return mergedFields; } 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(); }); } formatData() { } }