function CadastroModeloRDPerspectiva(vm) {
    var mSelf = this;
    mSelf.UsuarioLogado = ko.observable("");
    mSelf.EmpresaUsuarioLogado = ko.observable("");
    mSelf.Titulo = "Cadastro Modelo Relatórios Diários";


    /* 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/CarregarModuloCadastroModeloRD", data: {} },
    ]);

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

    mSelf.Init = function () {        

        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");
        });

        var cls = "user-menu-active-btn";

        $(".user-menu, .user-menu > ul").on("click", (e) => e.stopPropagation());

        $(".user-menu").on("click", () => {
            if ($(".user-menu > ul").is(":hidden")) {
                $(".user-menu > button").addClass(cls);
                $(".user-menu > ul").fadeIn("fast");
                $(".user-menu .user-data .user-name").removeClass("open-user-menu").addClass("close-user-menu");
            } else {
                $(".user-menu > button").removeClass(cls);
                $(".user-menu > ul").fadeOut("fast");
                $(".user-menu .user-data .user-name").removeClass("close-user-menu").addClass("open-user-menu");
            }
        });

        $("body").on("click", () => {
            $(".user-menu > button").removeClass(cls);
            $(".user-menu > ul").fadeOut("fast");
            $(".user-menu .user-data .user-name").removeClass("close-user-menu").addClass("open-user-menu");
        });
    };


    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 = () => { };
}