function FiltroFerramentaViewModel(data) {

    var mSelf = this;

    mSelf.Data = ko.observable(new ConfiguracoesFiltro(data.Data));

    mSelf.FerramentaId = data.FerramentaId;

    mSelf.Template = data.Template;

    mSelf.Nome = data.Nome;

    mSelf.Titulo = data.Titulo;

    mSelf.Ordem = 3;

    mSelf.Icone = data.Icone;

    mSelf.Visivel = ko.observable(true);

    mSelf.ModuloGrid = null;

    mSelf.Destroy = function () {

    };

    mSelf.Init = function () {

    };
}

function ConfiguracoesFiltro(data) {

    var mSelf = this;

    mSelf.Data = data;

    mSelf.ListaEntidades = ko.observableArray(vm.Perspectiva.ListaEntidades());

    mSelf.EntidadeSelecionada = ko.observable("Tipo de entidade");

    mSelf.Entidade = ko.observable();

    mSelf.SelecionaEntidade = function (entidade) {
        mSelf.EntidadeSelecionada(entidade.Descricao());
        mSelf.Entidade(entidade);
    };

    mSelf.FiltroCodigoDescricao = ko.observable("");

    mSelf.ReferenciaDefinida = ko.observable(false);

    mSelf.FormaDefinida = ko.observable(false);

    mSelf.LimparFiltros = function (data, evt) {

        mSelf.Entidade(null);
        mSelf.EntidadeSelecionada("Tipo de entidade");
        mSelf.FiltroCodigoDescricao("");
        mSelf.ReferenciaDefinida(false);
        mSelf.FormaDefinida(false);

        var modulo = vm.GetModulo("GridFormas");
        modulo.Data().LimparForma();
        modulo.Data().ControleMapa.map.setZoom(4);

        mSelf.Filtrar(null, null);
    };

    mSelf.Filtrar = function (data, evt) {

        $(".loading-inlog").fadeIn();

        var param = {
            'descricao': mSelf.FiltroCodigoDescricao(),
            'entidade': mSelf.Entidade() ? mSelf.Entidade().Codigo() : 0,
            'referenciaDefinida': mSelf.ReferenciaDefinida(),
            'formaDefinida': mSelf.FormaDefinida()
        };

        $.ajax({
            url: urlGlobal + "GestaoFormas/ConsultarFormasFiltro",
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            type: "GET",
            data: param,
            success: function (ret) {
                var moculoGrid = vm.GetModulo("GridFormas");
                moculoGrid.Data().AtulizarGridListaFormas(ret);
            },
            complete: function () {
                $(".loading-inlog").fadeOut();
            }
        });

    };

    mSelf.FiltrarAposSalvar = function (linha, args) {

        var param = {
            'descricao': mSelf.FiltroCodigoDescricao(),
            'entidade': mSelf.Entidade() ? mSelf.Entidade().Codigo() : 0,
            'referenciaDefinida': mSelf.ReferenciaDefinida(),
            'formaDefinida': mSelf.FormaDefinida()
        };

        $.ajax({
            url: urlGlobal + "GestaoFormas/ConsultarFormasFiltro",
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            type: "GET",
            data: param,
            success: function (ret) {
                var moduloGrid = vm.GetModulo("GridFormas");
                moduloGrid.Data().AtulizarGridListaFormas(ret);

                if (linha) {
                    moduloGrid.Data().SelecionarLinha(linha);
                }

                if (args) {
                    $(".slick-row").removeClass("ui-state-active");
                    $(".ordem-html-" + args.row).parent().parent().addClass("ui-state-active");
                }
            },
            complete: function () {

                $(".loading-inlog").fadeOut();
            }
        });
    };
};