Skip to content
Snippets Groups Projects
signature-book.component.ts 21.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Pipe, PipeTransform, Component, OnInit, NgZone } from '@angular/core';
    
    Damien's avatar
    Damien committed
    import { Http } from '@angular/http';
    import { DomSanitizer } from '@angular/platform-browser';
    import { Router, ActivatedRoute } from '@angular/router';
    import 'rxjs/add/operator/map';
    
    declare function lockDocument(resId: number) : void;
    declare function unlockDocument(resId: number) : void;
    declare function valid_action_form(a1: string, a2: string, a3: string, a4: number, a5: string, a6: string, a7: string, a8: string, a9: boolean, a10: any) : void;
    declare function $j(selector: string) : any;
    
    Damien's avatar
    Damien committed
    declare function successNotification(message: string) : void;
    declare function errorNotification(message: string) : void;
    
    declare function showAttachmentsForm(path: string) : void;
    declare function modifyAttachmentsForm(path: string, width: string, height: string) : void;
    
    Damien's avatar
    Damien committed
    
    
    @Pipe({ name: 'safeUrl' })
    export class SafeUrlPipe implements PipeTransform {
        constructor(private sanitizer: DomSanitizer) {}
        transform(url: string) {
            return this.sanitizer.bypassSecurityTrustResourceUrl(url);
        }
    }
    
    @Component({
    
      templateUrl: angularGlobals["signature-bookView"],
    
    Damien's avatar
    Damien committed
    })
    export class SignatureBookComponent implements OnInit {
    
    Damien's avatar
    Damien committed
        coreUrl                     : string;
        resId                       : number;
        basketId                    : string;
    
        signatureBook: any = {
            currentAction           : {},
            consigne                : "",
            documents               : [],
    
            attachments             : [],
    
            resList                 : [],
    
            lang                    : {}
    
    Damien's avatar
    Damien committed
        };
    
        rightSelectedThumbnail      : number    = 0;
        leftSelectedThumbnail       : number    = 0;
        rightViewerLink             : string    = "";
        leftViewerLink              : string    = "";
        headerTab                   : number    = 1;
        showTopRightPanel           : boolean   = false;
        showTopLeftPanel            : boolean   = false;
        showResLeftPanel            : boolean   = true;
        showLeftPanel               : boolean   = true;
    
        showRightPanel              : boolean   = true;
    
        showAttachmentPanel         : boolean   = false;
    
        showSignaturesPanel         : boolean   = false;
    
        loading                     : boolean   = false;
    
    Damien's avatar
    Damien committed
    
    
        leftContentWidth            : string    = "44%";
        rightContentWidth           : string    = "44%";
    
        notesViewerLink             : string    = "";
        visaViewerLink              : string    = "";
        histViewerLink              : string    = "";
    
        linksViewerLink             : string    = "";
    
        attachmentsViewerLink       : string    = "";
    
        constructor(public http: Http, private route: ActivatedRoute, private router: Router, private zone: NgZone) {
    
            window['angularSignatureBookComponent'] = {
    
                componentAfterAttach: (value: string) => this.processAfterAttach(value),
    
                componentAfterAction: () => this.processAfterAction(),
                componentAfterNotes: () => this.processAfterNotes()
    
    Damien's avatar
    Damien committed
        }
    
    
        prepareSignatureBook() {
            $j('#inner_content').remove();
            $j('#header').remove();
            $j('#viewBasketsTitle').remove();
            $j('#homePageWelcomeTitle').remove();
            $j('#footer').remove();
    
    Damien's avatar
    Damien committed
            $j('#container').width("99%");
    
    Damien's avatar
    Damien committed
            this.prepareSignatureBook();
    
    Damien's avatar
    Damien committed
            this.route.params.subscribe(params => {
                this.resId      = +params['resId'];
                this.basketId   = params['basketId'];
    
    
                this.signatureBook.resList = []; // This line is added because of manage action behaviour (processAfterAction is called twice)
    
    Damien's avatar
    Damien committed
                lockDocument(this.resId);
    
                setInterval(() => {lockDocument(this.resId)}, 50000);
    
                this.http.get(this.coreUrl + 'rest/' + this.basketId + '/signatureBook/' + this.resId)
    
                    .map(res => res.json())
    
    Damien's avatar
    Damien committed
                    .subscribe((data) => {
    
                        if (data.error) {
                            location.hash = "";
                            location.search = "";
                            return;
                        }
                        this.signatureBook = data;
    
                        this.headerTab              = 1;
                        this.leftSelectedThumbnail  = 0;
                        this.rightSelectedThumbnail = 0;
                        this.leftViewerLink         = "";
                        this.rightViewerLink        = "";
                        this.showLeftPanel          = true;
                        this.showRightPanel         = true;
                        this.showResLeftPanel       = true;
                        this.showTopLeftPanel       = false;
                        this.showTopRightPanel      = false;
                        this.showAttachmentPanel    = false;
                        this.notesViewerLink = "index.php?display=true&module=notes&page=notes&identifier=" + this.resId + "&origin=document&coll_id=letterbox_coll&load&size=full";
                        this.visaViewerLink  = "index.php?display=true&page=show_visa_tab&module=visa&resId=" + this.resId + "&collId=letterbox_coll&visaStep=true";
                        this.histViewerLink  = "index.php?display=true&page=show_history_tab&resId=" + this.resId + "&collId=letterbox_coll";
                        this.linksViewerLink = "index.php?display=true&page=show_links_tab&id=" + this.resId;
                        this.attachmentsViewerLink = "index.php?display=true&module=attachments&page=frame_list_attachments&resId=" + this.resId + "&noModification=true&template_selected=documents_list_attachments_simple&load&attach_type_exclude=converted_pdf,print_folder";
    
                        this.leftContentWidth  = "44%";
                        this.rightContentWidth = "44%";
                        if (this.signatureBook.documents[0]) {
                            this.leftViewerLink = this.signatureBook.documents[0].viewerLink;
                            if (this.signatureBook.documents[0].category_id == "outgoing") {
                                this.headerTab = 3;
                            }
                        }
                        if (this.signatureBook.attachments[0]) {
                            this.rightViewerLink = this.signatureBook.attachments[0].viewerLink;
                        }
    
                        this.displayPanel("RESLEFT");
                        this.loading = false;
    
                        setTimeout(() => {
                            $j("#rightPanelContent").niceScroll({touchbehavior:false, cursorcolor:"#666", cursoropacitymax:0.6, cursorwidth:4});
    
                            if ($j(".tooltipstered").length == 0) {
                                $j("#obsVersion").tooltipster({
                                    interactive: true
                                });
                            }
    
    Damien's avatar
    Damien committed
                    }, (err) => {
                        errorNotification(JSON.parse(err._body).errors);
                        setTimeout(() => {
                            this.backToBasket();
                        }, 2000);
    
    
    Damien's avatar
    Damien committed
                    });
            });
        }
    
    
        ngOnDestroy() : void {
            delete window['angularSignatureBookComponent'];
        }
    
        processAfterAttach(mode: string) {
            this.zone.run(() => this.refreshAttachments(mode));
        }
    
    
        processAfterNotes() {
    
    Damien's avatar
    Damien committed
            this.zone.run(() => this.refreshNotes());
    
        processAfterAction() {
            var idToGo = -1;
            var c = this.signatureBook.resList.length;
    
            for (let i = 0; i < c; i++) {
                if (this.signatureBook.resList[i].res_id == this.resId) {
                    if (this.signatureBook.resList[i + 1]) {
                        idToGo = this.signatureBook.resList[i + 1].res_id;
                    } else if (i > 0) {
                        idToGo = this.signatureBook.resList[i - 1].res_id;
                    }
                }
            }
    
    
            if (c > 0) { // This (if)line is added because of manage action behaviour (processAfterAction is called twice)
                unlockDocument(this.resId);
                if (idToGo >= 0) {
                    $j("#send").removeAttr("disabled");
                    $j("#send").css("opacity", "1");
                    this.zone.run(() => this.changeLocation(idToGo, "action"));
                } else {
                    this.zone.run(() => this.backToBasket());
                }
    
    Damien's avatar
    Damien committed
        }
    
        changeSignatureBookLeftContent(id: number) {
            this.headerTab = id;
            this.showTopLeftPanel = false;
        }
    
        changeRightViewer(index: number) {
    
            this.showAttachmentPanel = false;
    
            if (this.signatureBook.attachments[index]) {
                this.rightViewerLink = this.signatureBook.attachments[index].viewerLink;
            } else {
                this.rightViewerLink = "";
            }
    
    Damien's avatar
    Damien committed
            this.rightSelectedThumbnail = index;
        }
    
        changeLeftViewer(index: number) {
            this.leftViewerLink = this.signatureBook.documents[index].viewerLink;
            this.leftSelectedThumbnail = index;
        }
    
        displayPanel(panel: string) {
            if (panel == "TOPRIGHT") {
                this.showTopRightPanel = !this.showTopRightPanel;
            } else if (panel == "TOPLEFT") {
                this.showTopLeftPanel = !this.showTopLeftPanel;
            } else if (panel == "LEFT") {
                this.showLeftPanel = !this.showLeftPanel;
                this.showResLeftPanel = false;
    
                if (!this.showLeftPanel) {
    
    Damien's avatar
    Damien committed
                    this.rightContentWidth = "96%";
    
                    $j("#hideLeftContent").css('background', 'none');
    
                } else {
    
                    this.rightContentWidth = "48%";
                    this.leftContentWidth = "48%";
                    $j("#hideLeftContent").css('background', '#CEE9F1');
    
    Damien's avatar
    Damien committed
            } else if (panel == "RESLEFT") {
                this.showResLeftPanel = !this.showResLeftPanel;
    
                if (!this.showResLeftPanel) {
    
                    this.rightContentWidth = "48%";
                    this.leftContentWidth = "48%";
    
                } else {
    
                    this.rightContentWidth = "44%";
                    this.leftContentWidth = "44%";
    
                    if (this.signatureBook.resList.length == 0 || this.signatureBook.resList[0].allSigned == null) {
    
                        this.http.get(this.coreUrl + 'rest/' + this.basketId + '/signatureBook/resList/details')
    
                            .map(res => res.json())
                            .subscribe((data) => {
                                this.signatureBook.resList = data.resList;
                                this.signatureBook.resList.forEach((value: any, index: number) => {
                                    if (value.res_id == this.resId) {
                                        this.signatureBook.resListIndex = index;
                                    }
                                });
                                setTimeout(() => {
                                    $j("#resListContent").niceScroll({touchbehavior:false, cursorcolor:"#666", cursoropacitymax:0.6, cursorwidth:4});
                                    $j("#resListContent").scrollTop(0);
                                    $j("#resListContent").scrollTop($j(".resListContentFrameSelected").offset().top - 42);
                                }, 0);
                            });
                    }
    
                }
            } else if (panel == "MIDDLE") {
                this.showRightPanel = !this.showRightPanel;
                this.showResLeftPanel = false;
                if (!this.showRightPanel) {
                    this.leftContentWidth = "96%";
                    $j("#contentLeft").css('border-right', 'none');
                } else {
                    this.rightContentWidth = "48%";
                    this.leftContentWidth = "48%";
                    $j("#contentLeft").css('border-right', 'solid 1px');
    
        displayAttachmentPanel() {
            this.showAttachmentPanel = !this.showAttachmentPanel;
            this.rightSelectedThumbnail = 0;
            if (this.signatureBook.attachments[0]) {
                this.rightViewerLink = this.signatureBook.attachments[0].viewerLink;
            }
        }
    
    
        refreshAttachments(mode: string) {
    
            if (mode == "rightContent") {
                this.http.get(this.coreUrl + 'rest/signatureBook/' + this.resId + '/incomingMailAttachments')
                    .map(res => res.json())
                    .subscribe((data) => {
                        this.signatureBook.documents = data;
                    });
    
            } else {
                this.http.get(this.coreUrl + 'rest/signatureBook/' + this.resId + '/attachments')
                    .map(res => res.json())
                    .subscribe((data) => {
                        var i = 0;
                        if (mode == "add") {
                            var found = false;
                            data.forEach((elem: any, index: number) => {
                                if (!found && (!this.signatureBook.attachments[index] || elem.res_id != this.signatureBook.attachments[index].res_id)) {
                                    i = index;
                                    found = true;
                                }
                            });
                        } else if (mode == "edit") {
                            var id = this.signatureBook.attachments[this.rightSelectedThumbnail].res_id;
                            data.forEach((elem: any, index: number) => {
                                if (elem.res_id == id) {
                                    i = index;
                                }
                            });
                        }
    
                        this.signatureBook.attachments = data;
    
                        if (mode == "add" || mode == "edit") {
                            this.changeRightViewer(i);
                        } else if (mode == "del") {
                            this.changeRightViewer(0);
                        }
                    });
            }
    
        }
    
        addAttachmentIframe() {
            showAttachmentsForm('index.php?display=true&module=attachments&page=attachments_content&docId=' + this.resId);
        }
    
        editAttachmentIframe(attachment: any) {
    
            if (attachment.canModify && attachment.status != "SIGN") {
    
                var resId: number;
                if (attachment.res_id == 0) {
                    resId = attachment.res_id_version;
                } else if (attachment.res_id_version == 0) {
                    resId = attachment.res_id;
                }
    
    
                modifyAttachmentsForm('index.php?display=true&module=attachments&page=attachments_content&id=' + resId + '&relation=' + attachment.relation + '&docId=' + this.resId, '98%', 'auto');
            }
        }
    
        delAttachment(attachment: any) {
            if (attachment.canDelete) {
    
                if (this.signatureBook.attachments.length <= 1) {
                    var r = confirm('Attention, ceci est votre dernière pièce jointe pour ce courrier, voulez-vous vraiment la supprimer ?');
                } else {
                    var r = confirm('Voulez-vous vraiment supprimer la pièce jointe ?');
                }
    
                if (r) {
                    var resId: number;
                    if (attachment.res_id == 0) {
                        resId = attachment.res_id_version;
                    } else if (attachment.res_id_version == 0) {
                        resId = attachment.res_id;
                    }
    
                    this.http.get('index.php?display=true&module=attachments&page=del_attachment&id=' + resId + '&relation=' + attachment.relation + '&rest=true')
                        .subscribe(() => {
                            this.refreshAttachments('del');
                        });
                }
    
    Damien's avatar
    Damien committed
        refreshNotes() {
            this.http.get(this.coreUrl + 'rest/res/' + this.resId + '/notes/count')
                .map(res => res.json())
                .subscribe((data) => {
                    this.signatureBook.nbNotes = data;
                });
        }
    
    
        signFile(attachment: any, signature: any) {
    
            if (!this.loadingSign && this.signatureBook.canSign) {
    
                this.loadingSign = true;
                var path = "index.php?display=true&module=visa&page=sign_file&collId=letterbox_coll&resIdMaster=" + this.resId + "&signatureId=" + signature.id;
    
    
                if (attachment.res_id == 0) {
    
                    if (attachment.attachment_type == "outgoing_mail" && this.signatureBook.documents[0].category_id == "outgoing") {
    
                        path += "&isVersion&isOutgoing&id=" + attachment.res_id_version;
    
                        path += "&isVersion&id=" + attachment.res_id_version;
    
                } else if (attachment.res_id_version == 0) {
    
                    if (attachment.attachment_type == "outgoing_mail" && this.signatureBook.documents[0].category_id == "outgoing") {
    
                        path += "&isOutgoing&id=" + attachment.res_id;
    
                        path += "&id=" + attachment.res_id;
    
                this.http.get(path, signature)
                    .map(res => res.json())
                    .subscribe((data) => {
                        if (data.status == 0) {
    
                            this.rightViewerLink = "index.php?display=true&module=attachments&page=view_attachment&res_id_master=" + this.resId + "&id=" + data.new_id + "&isVersion=false";
    
                            this.signatureBook.attachments[this.rightSelectedThumbnail].viewerLink = this.rightViewerLink;
                            this.signatureBook.attachments[this.rightSelectedThumbnail].status = 'SIGN';
                            this.signatureBook.attachments[this.rightSelectedThumbnail].idToDl = data.new_id;
                            var allSigned = true;
                            this.signatureBook.attachments.forEach((value: any) => {
                                if (value.sign && value.status != 'SIGN') {
                                    allSigned = false;
                                }
                            });
    
                            if (this.signatureBook.resList.length > 0) {
                                this.signatureBook.resList[this.signatureBook.resListIndex].allSigned = allSigned;
                            }
    
    Damien's avatar
    Damien committed
    
    
    Damien's avatar
    Damien committed
                        this.showSignaturesPanel = false;
    
    Damien's avatar
    Damien committed
        }
    
        unsignFile(attachment: any) {
            var collId: string;
            var resId: number;
    
            var isVersion: string;
    
    Damien's avatar
    Damien committed
    
            if (attachment.res_id == 0) {
                resId = attachment.res_id_version;
                collId = "res_version_attachments";
    
                isVersion = "true";
    
    Damien's avatar
    Damien committed
            } else if (attachment.res_id_version == 0) {
                resId = attachment.res_id;
                collId = "res_attachments";
    
                isVersion = "false";
    
    Damien's avatar
    Damien committed
            }
    
    
    Damien's avatar
    Damien committed
            this.http.put(this.coreUrl + 'rest/' + collId + '/' + resId + '/unsign', {})
    
    Damien's avatar
    Damien committed
                .map(res => res.json())
    
    Damien's avatar
    Damien committed
                .subscribe(() => {
                    this.rightViewerLink = "index.php?display=true&module=attachments&page=view_attachment&res_id_master=" + this.resId + "&id=" + attachment.viewerNoSignId + "&isVersion=" + isVersion;
                    this.signatureBook.attachments[this.rightSelectedThumbnail].viewerLink = this.rightViewerLink;
                    this.signatureBook.attachments[this.rightSelectedThumbnail].status = 'A_TRA';
                    this.signatureBook.attachments[this.rightSelectedThumbnail].idToDl = resId;
                    if (this.signatureBook.resList.length > 0) {
                        this.signatureBook.resList[this.signatureBook.resListIndex].allSigned = false;
    
    Damien's avatar
    Damien committed
                    }
                });
    
        }
    
        backToBasket() {
    
    Damien's avatar
    Damien committed
            location.hash = "";
            location.reload();
        }
    
    
            location.hash = "";
            location.search = "?page=details&dir=indexing_searching&id=" + this.resId;
        }
    
    
        changeLocation(resId: number, origin: string) {
            this.http.get(this.coreUrl + 'rest/res/' + resId + '/lock')
                .map(res => res.json())
                .subscribe((data) => {
    
                        let path = "/" + this.basketId + "/signatureBook/" + resId;
                        this.router.navigate([path]);
                    } else {
                        if (origin == "view") {
    
                            alert("Courrier verrouillé par " + data.lockBy);
    
                        } else if (origin == "action") {
    
                            alert("Courrier suivant verrouillé par " + data.lockBy);
    
                            this.backToBasket();
                        }
                    }
                });
    
    Damien's avatar
    Damien committed
        }
    
        validForm() {
            if ($j("#signatureBookActions option:selected")[0].value != "") {
                unlockDocument(this.resId);
    
    
                if (this.signatureBook.resList.length == 0) {
                    this.http.get(this.coreUrl + 'rest/' + this.basketId + '/signatureBook/resList')
                        .map(res => res.json())
                        .subscribe((data) => {
                            this.signatureBook.resList = data.resList;
    
                            valid_action_form(
                                'empty',
                                'index.php?display=true&page=manage_action&module=core',
                                this.signatureBook.currentAction.id,
                                this.resId,
                                'res_letterbox',
                                'null',
                                'letterbox_coll',
                                'page',
                                false,
                                [$j("#signatureBookActions option:selected")[0].value]
                            );
                        });
    
                } else {
                    valid_action_form(
                        'empty',
                        'index.php?display=true&page=manage_action&module=core',
                        this.signatureBook.currentAction.id,
                        this.resId,
                        'res_letterbox',
                        'null',
                        'letterbox_coll',
                        'page',
                        false,
                        [$j("#signatureBookActions option:selected")[0].value]
                    );
    
            } else {
                alert("Aucune action choisie");
    
    Damien's avatar
    Damien committed
            }
        }
    }