Skip to content
Snippets Groups Projects
process.component.ts 8.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Component, OnInit, ViewChild, ViewContainerRef } from '@angular/core';
    import { HttpClient } from '@angular/common/http';
    import { LANG } from '../translate.component';
    import { NotificationService } from '../notification.service';
    import { MatDialog } from '@angular/material/dialog';
    import { MatSidenav } from '@angular/material/sidenav';
    
    import { ActivatedRoute, Router } from '@angular/router';
    import { HeaderService } from '../../service/header.service';
    import { FiltersListService } from '../../service/filtersList.service';
    
    import { Overlay } from '@angular/cdk/overlay';
    import { AppService } from '../../service/app.service';
    import { ActionsService } from '../actions/actions.service';
    import { tap, finalize, catchError, map } from 'rxjs/operators';
    import { of } from 'rxjs';
    import { DocumentViewerComponent } from '../viewer/document-viewer.component';
    
    @Component({
        templateUrl: "process.component.html",
        styleUrls: [
            'process.component.scss',
    
            '../indexation/indexing-form/indexing-form.component.scss'
    
        ],
        providers: [NotificationService, AppService, ActionsService],
    })
    export class ProcessComponent implements OnInit {
    
        lang: any = LANG;
    
        loading: boolean = false;
    
    
        currentResourceLock: any = null;
    
    
        actionsList: any[] = [];
        currentUserId: number = null;
        currentBasketId: number = null;
        currentGroupId: number = null;
    
        selectedAction: any = {
            id: 0,
            label: '',
            component: '',
            default: false,
            categoryUse: []
        };
    
        currentResourceInformations: any = {
    
        }
    
        processTool: any[] = [
            {
                id: 'dashboard',
    
                icon: 'fas fa-columns',
                label: this.lang.dashboard,
    
            },
            {
                id: 'history',
    
                icon: 'fas fa-history',
    
                label: this.lang.history,
            },
            {
                id: 'notes',
    
                icon: 'fas fa-pen-square',
                label: this.lang.notes,
    
            },
            {
                id: 'attachments',
    
                icon: 'fas fa-paperclip',
                label: this.lang.attachments,
    
                icon: 'fas fa-link',
                label: this.lang.links,
    
            },
            {
                id: 'diffusionList',
    
                icon: 'fas fa-share-alt',
                label: this.lang.diffusionList,
    
                icon: 'fas fa-envelope',
                label: this.lang.mailsSent,
    
                icon: 'fas fa-list-ol',
                label: this.lang.visaWorkflow,
    
                icon: 'fas fa-comment-alt',
                label: this.lang.avis,
    
                icon: 'fas fa-info-circle',
                label: this.lang.informations,
    
        modalModule: any[] = [];
    
    
        currentTool: string = 'dashboard';
    
    
        @ViewChild('snav', { static: true }) sidenavLeft: MatSidenav;
        @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav;
    
        @ViewChild('appDocumentViewer', { static: true }) appDocumentViewer: DocumentViewerComponent;
    
        constructor(
            private route: ActivatedRoute,
            private _activatedRoute: ActivatedRoute,
            public http: HttpClient,
            public dialog: MatDialog,
            private headerService: HeaderService,
            public filtersListService: FiltersListService,
            private notify: NotificationService,
            public overlay: Overlay,
            public viewContainerRef: ViewContainerRef,
            public appService: AppService,
            public actionService: ActionsService,
            private router: Router
        ) {
        }
    
        ngOnInit(): void {
    
            this.loading = true;
    
    
            this.headerService.setHeader("Traitement d'un courrier");
    
            this.route.params.subscribe(params => {
                this.currentUserId = params['userSerialId'];
                this.currentGroupId = params['groupSerialId'];
                this.currentBasketId = params['basketId'];
    
                this.currentResourceInformations = {
                    resId: params['resId'],
                    category: 'outgoing',
                    mailtracking: false
                }
    
    
                this.lockResource();
    
    
                this.loading = false;
    
    
                this.loadResource();
    
    
                this.http.get(`../../rest/resourcesList/users/${this.currentUserId}/groups/${this.currentGroupId}/baskets/${this.currentBasketId}/actions?resId=${this.currentResourceInformations.resId}`).pipe(
    
                    map((data: any) => {
                        data.actions = data.actions.map((action: any, index: number) => {
                            return {
                                id: action.id,
                                label: action.label,
                                component: action.component,
                                enabled: action.enabled,
                                default: index === 0 ? true : false,
    
                                categoryUse: action.categories
    
                            }
                        });
                        return data;
                    }),
                    tap((data: any) => {
                        this.selectedAction = data.actions[0];
                        this.actionsList = data.actions;
                    }),
                    finalize(() => this.loading = false),
                    catchError((err: any) => {
                        this.notify.handleErrors(err);
                        return of(false);
                    })
                ).subscribe();
    
                this.appDocumentViewer.loadRessource(this.currentResourceInformations.resId);
    
    
            },
                (err: any) => {
                    this.notify.handleErrors(err);
                });
        }
    
    
        loadResource() {
            this.http.get(`../../rest/resources/${this.currentResourceInformations.resId}`).pipe(
                tap((data: any) => {
                    this.currentResourceInformations = data;
                }),
                catchError((err: any) => {
                    this.notify.handleErrors(err);
                    return of(false);
                })
            ).subscribe();
        }
    
    
        lockResource() {
            this.currentResourceLock = setInterval(() => {
                this.http.put(`../../rest/resourcesList/users/${this.currentUserId}/groups/${this.currentGroupId}/baskets/${this.currentBasketId}/lock`, { resources: [this.currentResourceInformations.resId] }).pipe(
                    catchError((err: any) => {
                        this.notify.handleErrors(err);
                        return of(false);
                    })
                ).subscribe();
            }, 50000);
        }
    
        unlockResource() {
            clearInterval(this.currentResourceLock);
    
            this.http.put(`../../rest/resourcesList/users/${this.currentUserId}/groups/${this.currentGroupId}/baskets/${this.currentBasketId}/unlock`, { resources: [this.currentResourceInformations.resId] }).pipe(
                catchError((err: any) => {
                    this.notify.handleErrors(err);
                    return of(false);
                })
            ).subscribe();
        }
    
    
        onSubmit() {
    
            this.actionService.launchAction(this.selectedAction, this.currentUserId, this.currentGroupId, this.currentBasketId, this.currentResourceInformations.resId, this.currentResourceInformations);
    
        }
    
        showActionInCurrentCategory(action: any) {
    
            if (this.selectedAction.categoryUse.indexOf(this.currentResourceInformations.category) === -1) {
                const newAction = this.actionsList.filter(action => action.categoryUse.indexOf(this.currentResourceInformations.category) > -1)[0];
                if (newAction !== undefined) {
                    this.selectedAction = this.actionsList.filter(action => action.categoryUse.indexOf(this.currentResourceInformations.category) > -1)[0];
                } else {
                    this.selectedAction = {
                        id: 0,
                        label: '',
                        component: '',
                        default: false,
                        categoryUse: []
                    };
                }
            }
            if (action.categoryUse.indexOf(this.currentResourceInformations.category) > -1) {
                return true;
            } else {
                return false;
            }
        }
    
    
        createModal() {
            this.modalModule.push(this.processTool.filter(module => module.id === this.currentTool)[0]);
        }
    
        removeModal(index: number) {
            this.modalModule.splice(index, 1);
        }
    
    
        isModalOpen() {
            if (this.modalModule.map(module => module.id).indexOf(this.currentTool) > -1) {
                return true;
            } else {
                return false;
            }
        }