function ListagemModeloRDPerspectiva(vm) {
    var mSelf = this;
    mSelf.UsuarioLogado = ko.observable("");
    mSelf.EmpresaUsuarioLogado = ko.observable("");
    mSelf.Titulo = "Listagem de Modelos de Relatórios Diários";

    mSelf.PaginaNovoModeloRd = () => window.open(urlGlobal + "EditorRD/EditorRD/CadastroModeloRD", '_self', false);


    /* Para handler da modal de confirmação possuindo a mensagem, a função a ser
    executada ao confirmar e o valor a ser passado como parâmetro */
    mSelf.Confirmacao = ko.observable("");
    mSelf.HandlerConfirmacao = null;
    mSelf.DataConfirmacao = null;
    mSelf.BotaoVisivel = ko.observable(false);
    mSelf.NomeBotao = ko.observable("Confirmar");

    mSelf.FuncaoConfirmacao = () => {
        if (mSelf.HandlerConfirmacao) {
            mSelf.HandlerConfirmacao(mSelf.DataConfirmacao);
            $(".mask-modal, .mask-modal .modal-alert-confirm").fadeOut();
        }
    };

    mSelf.AbrirConfirmacao = function (mensagem, funcao, data, nomeBotao, nVisivel) {
        vm.Perspectiva.Confirmacao(mensagem);
        vm.Perspectiva.HandlerConfirmacao = funcao;
        vm.Perspectiva.DataConfirmacao = data;

        mSelf.NomeBotao(nomeBotao || "Confirmar");
        mSelf.BotaoVisivel(!nVisivel);
        $(".mask-modal, .mask-modal .modal-alert-confirm").fadeIn();
    };
    /* Fim handler modal de confirmação */

    mSelf.PermissoesUsuario = null;

    mSelf.ListaModulosCarregar = ko.observableArray([
        { url: urlGlobal + "EditorRD/EditorRD/CarregarGridModelos", data: { take: 10, skip: 0, useTakeSkip: true } },
    ]);

    mSelf.ListaFerramentasCarregar = ko.observableArray([]);

    mSelf.Init = function () {
        $(".loading-div").show();

        mSelf.CarregarModulos();

        $(".close-btn").on("click", function () {
            $(this).parent().fadeOut("fast");
            $(".sidebar-btn").next().fadeOut("fast");
            $(".sidebar-btn").removeClass("sidebar-btn-active");
            $(".mask-modal").fadeOut("fast");
        });
    };

    mSelf.CarregarModulos = function () {
        vm.CarregarFuncionalidades(mSelf.ListaModulosCarregar, (data) => {
            if (data) {
                var kojs = ko.mapping.fromJS(data);
                // Iniciar VIEWMODEL Knockout js pelo JSon;                
                var vmInit = new window[kojs.ViewModelKnockout()](kojs, mSelf.Data);
                vm.Modulos.push(vmInit);
                vmInit.Init();
                mSelf.CarregarFerramentas();
            }
        });
    };

    mSelf.CarregarFerramentas = function () {
        var countFerramentas = 0;
        vm.CarregarFuncionalidades(mSelf.ListaFerramentasCarregar, (data) => {
            if (data) {
                var kojs = ko.mapping.fromJS(data);
                // Iniciar VIEWMODEL Knockout js pelo JSon;
                var vmInit = new window[kojs.ViewModelKnockout()](kojs);
                vm.Ferramentas.push(vmInit);

                if (countFerramentas == mSelf.ListaFerramentasCarregar().length - 1) {
                    HabilitaFuncoesSetores();
                    $(".loading-div").hide();
                }

                countFerramentas++;
                vmInit.Init();
                mSelf.ReconfigurarFerramentas(vmInit.FerramentaId());
            }
        });
        if (mSelf.ListaFerramentasCarregar().length == 0) {
            $(".loading-div").hide();
        }
    };

    mSelf.ReconfigurarFerramentas = () => { };

    mSelf.VoltarPaginaInicial = () => window.open(`${urlGlobal}EditorRD`, '_self', false);
}