// Alterar widget de aplicativo
        public void Alterar(Aplicativos_Widgets rs, Aplicativos_Widgets temp)
        {
            try
            {
                string qry = "";
                qry += "UPDATE Aplicativos_Widgets ";
                qry += "SET idwidget = " + rs.idwidget.value + ", nrxpos = " + rs.nrxpos.value + ", nrypos = " + rs.nrypos.value + ", ";
                qry += "txaction = '" + rs.txaction.value + "', txcontroller = '" + rs.txcontroller.value + "', idcodigoidioma = " + rs.idcodigoidioma.value + ", ";
                qry += "txappaction = '" + rs.txappaction.value + "', txclass = '" + rs.txclass.value + "', txmethod = '" + rs.txmethod.value + "' ";
                qry += "WHERE idaplicativo = " + rs.idaplicativo.value + " AND idaplicativo_widget = " + rs.idaplicativo_widget.value;

                Connection session = new Connection();
                Query      query   = session.CreateQuery(qry);
                query.ExecuteUpdate();

                // Auditoria
                Audit.Check("Aplicativos_Widgets", "U", rs.idaplicativo_widget.value, rs, temp);

                session.Close();
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }
        // Gravar novo widget de aplicativo
        public int Gravar(Aplicativos_Widgets rs)
        {
            try
            {
                int idaplicativo_widget = 0;

                string qry = "";
                qry += "INSERT INTO Aplicativos_Widgets (idaplicativo, idwidget, nrxpos, nrypos, txaction, txcontroller, idcodigoidioma, txappaction, txclass, txmethod) ";
                qry += "VALUES (" + rs.idaplicativo.value + ", " + rs.idwidget.value + ", " + rs.nrxpos.value + ", " + rs.nrypos.value + ", ";
                qry += "'" + rs.txaction.value + "', '" + rs.txcontroller.value + "', " + rs.idcodigoidioma.value + ", '" + rs.txappaction.value + "', ";
                qry += "'" + rs.txclass.value + "', '" + rs.txmethod.value + "')";

                Connection session = new Connection();
                Query      query   = session.CreateQuery(qry);

                // Retorna o identificador
                idaplicativo_widget = query.ExecuteScalar();

                // Atualizar registro para registro de auditoria
                rs.idaplicativo_widget.value = idaplicativo_widget;

                session.Close();

                // Auditoria
                Audit.Check("Aplicativos_Widgets", "I", idaplicativo_widget, rs);

                return(idaplicativo_widget);
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }
        // Pega as configurações do widget do aplicativo da do usuário
        public List <Aplicativos_Widgets> BuscarPorAplicativo(int idusuario, int idaplicativo)
        {
            try
            {
                List <Aplicativos_Widgets> widgets = new List <Aplicativos_Widgets>();

                Connection  session = new Connection();
                Query       query   = session.CreateQuery(@"SELECT uw.idusuario_widget, aw.idcodigoidioma 
                    FROM Usuarios_Widgets uw 
                    inner join Aplicativos_Widgets aw on aw.idaplicativo_widget = uw.idaplicativo_widget
                    WHERE uw.idusuario = " + idusuario + " AND aw.idaplicativo = " + +idaplicativo + " and uw.flremove = 1");
                IDataReader reader  = query.ExecuteQuery();

                while (reader.Read())
                {
                    {
                        Aplicativos_Widgets temp = new Aplicativos_Widgets();
                        temp.idusuario_widget.value = Convert.ToInt32(reader["idusuario_widget"]);
                        temp.idcodigoidioma.value   = Convert.ToInt32(reader["idcodigoidioma"]);
                        widgets.Add(temp);
                    }
                }
                reader.Close();
                session.Close();

                return(widgets);
            }
            catch (Exception error)
            {
                throw error;
            }
        }
        // Excluir widget
        public void Excluir(Aplicativos_Widgets rs)
        {
            try
            {
                string qry = "";
                qry += "DELETE FROM Aplicativos_Widgets ";
                qry += "WHERE idaplicativo_widget = " + rs.idaplicativo_widget.value;

                Connection session = new Connection();
                Query      query   = session.CreateQuery(qry);
                query.ExecuteUpdate();

                // Auditoria
                Audit.Check("Aplicativos_Widgets", "D", rs.idaplicativo_widget.value, rs);

                session.Close();
            }
            catch (Exception erro)
            {
                throw erro;
            }
        }
        // Busca pelo aplicativo e widget
        public Aplicativos_Widgets Buscar(int idaplicativo = 0, int idwidget = 0)
        {
            try
            {
                Aplicativos_Widgets widgets = new Aplicativos_Widgets();

                string qry = "";
                qry += "SELECT aw.*, w.txwidget FROM Aplicativos_Widgets aw INNER JOIN Widgets w ON w.idwidget = aw.idwidget ";
                qry += "WHERE aw.idaplicativo = " + idaplicativo + " AND aw.idwidget = " + idwidget;

                Connection session = new Connection();
                Query      query   = session.CreateQuery(qry);

                IDataReader reader = query.ExecuteQuery();
                if (reader.Read())
                {
                    widgets.idaplicativo_widget.value = Convert.ToInt32(reader["idaplicativo_widget"]);
                    widgets.idaplicativo.value        = Convert.ToInt32(reader["idaplicativo"]);
                    widgets.idwidget.value            = Convert.ToInt32(reader["idwidget"]);
                    widgets.nrxpos.value         = Convert.ToInt32(reader["nrxpos"]);
                    widgets.nrypos.value         = Convert.ToInt32(reader["nrypos"]);
                    widgets.txaction.value       = Convert.ToString(reader["txaction"]);
                    widgets.txcontroller.value   = Convert.ToString(reader["txcontroller"]);
                    widgets.idcodigoidioma.value = Convert.ToInt32(reader["idcodigoidioma"]);
                    widgets.txappaction.value    = Convert.ToString(reader["txappaction"]);
                    widgets.txclass.value        = Convert.ToString(reader["txclass"]);
                    widgets.txmethod.value       = Convert.ToString(reader["txmethod"]);
                    widgets.txwidget.value       = Convert.ToString(reader["txwidget"]);
                }
                reader.Close();
                session.Close();

                return(widgets);
            }
            catch (Exception error)
            {
                throw error;
            }
        }
        // Listagem Widget
        public (List <Aplicativos_Widgets>, WidgetsListConfig) ListarWidget(FormCollection form = null)
        {
            try
            {
                List <Aplicativos_Widgets> list    = new List <Aplicativos_Widgets>();
                WidgetsListConfig          control = new WidgetsListConfig();
                string filter = "";

                // Parametros de pesquisa
                int    page      = 1;
                int    registers = 10;
                string order     = "w.txwidget";
                string direction = "asc";

                // Filtra somente os widgets do aplicativo
                filter += "AND aw.idaplicativo = " + Convert.ToInt32(form["widget_temp_main_id"]) + "";

                // Filtro de resultados
                if (form != null)
                {
                    // Aplicativo
                    if (form.AllKeys.Contains("filter_txaplicativo"))
                    {
                        string filter_txaplicativo = Utils.ClearText(form["filter_txaplicativo"], 20);
                        if (filter_txaplicativo.Length > 0)
                        {
                            filter += "AND a.txaplicativo LIKE '%" + filter_txaplicativo.Replace(" ", "%") + "%' ";
                        }
                    }

                    // Action
                    if (form.AllKeys.Contains("filter_txwidget"))
                    {
                        string filter_txaction = Utils.ClearText(form["filter_txwidget"], 20);
                        if (filter_txaction.Length > 0)
                        {
                            filter += "AND w.txwidget LIKE '%" + filter_txaction.Replace(" ", "%") + "%' ";
                        }
                    }

                    // Variáveis de controle
                    if (form.AllKeys.Contains("widget_temp_page"))
                    {
                        page = Convert.ToInt32(form["widget_temp_page"]);
                    }
                    if (form.AllKeys.Contains("widget_temp_registers"))
                    {
                        registers = Convert.ToInt32(form["widget_temp_registers"]);
                    }
                    if (form.AllKeys.Contains("widget_temp_order"))
                    {
                        order = form["widget_temp_order"];
                    }
                    if (form.AllKeys.Contains("widget_temp_direction"))
                    {
                        direction = form["widget_temp_direction"];
                    }
                }

                // Controle de widget
                control.count     = 0;
                control.registers = registers;
                control.page      = page;
                control.order     = order;
                control.direction = direction;
                control.columns   = new int[13] {
                    0, 0, 16, 0, 16, 8, 8, 8, 8, 8, 12, 8, 8
                };
                control.show = new int[13] {
                    0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0
                };
                control.headers = new string[13] {
                    "289", "229", "230", "265", "267", "262", "263", "231", "232", "294", "291", "292", "293"
                };
                control.orderfields = new string[13] {
                    "aw.idaplicativo_widget", "aw.idaplicativo", "a.txaplicativo", "aw.idwidget", "w.txwidget", "aw.nrxpos", "aw.nrypos", "aw.txaction", "aw.txcontroller", "aw.idcodigoidioma", "aw.txappaction", "aw.txclass", "aw.txmethod"
                };
                control.fields = new string[13] {
                    "idaplicativo_widget", "idaplicativo", "txaplicativo", "idwidget", "txwidget", "nrxpos", "nrypos", "txaction", "txcontroller", "idcodigoidioma", "txappaction", "txclass", "txmethod"
                };
                control.formatFields = new string[13] {
                    "master", "", "", "", "", "", "", "", "", "language", "", "", ""
                };

                // Query
                string qry = "";
                qry += "SELECT COUNT (*) OVER () AS ROW_COUNT, aw.idaplicativo_widget, aw.idaplicativo, a.txaplicativo, aw.idwidget, w.txwidget, aw.nrxpos, aw.nrypos, ";
                qry += "aw.txaction, aw.txcontroller, aw.idcodigoidioma, aw.txappaction, aw.txclass, aw.txmethod ";
                qry += "FROM Aplicativos_Widgets aw ";
                qry += "INNER JOIN Aplicativos a ON a.idaplicativo = aw.idaplicativo ";
                qry += "INNER JOIN Widgets w ON w.idwidget = aw.idwidget ";
                qry += "WHERE 1=1 " + filter;
                qry += "ORDER BY " + Utils.Null(order, "w.txwidget") + " " + direction + " ";
                qry += "OFFSET " + ((page - 1) * registers) + " ROWS FETCH NEXT " + registers + " ROWS ONLY";

                Connection  session = new Connection();
                Query       query   = session.CreateQuery(qry);
                IDataReader reader  = query.ExecuteQuery();

                while (reader.Read())
                {
                    control.count = Convert.ToInt32(reader["ROW_COUNT"]);

                    Aplicativos_Widgets temp = new Aplicativos_Widgets();
                    temp.idaplicativo_widget.value = Convert.ToInt32(reader["idaplicativo_widget"]);
                    temp.idaplicativo.value        = Convert.ToInt32(reader["idaplicativo"]);
                    temp.idwidget.value            = Convert.ToInt32(reader["idwidget"]);
                    temp.nrxpos.value         = Convert.ToInt32(reader["nrxpos"]);
                    temp.nrypos.value         = Convert.ToInt32(reader["nrypos"]);
                    temp.txaction.value       = Convert.ToString(reader["txaction"]);
                    temp.txcontroller.value   = Convert.ToString(reader["txcontroller"]);
                    temp.idcodigoidioma.value = Convert.ToInt32(reader["idcodigoidioma"]);
                    temp.txappaction.value    = Convert.ToString(reader["txappaction"]);
                    temp.txclass.value        = Convert.ToString(reader["txclass"]);
                    temp.txmethod.value       = Convert.ToString(reader["txmethod"]);
                    temp.txwidget.value       = Convert.ToString(reader["txwidget"]);
                    temp.txaplicativo.value   = Convert.ToString(reader["txaplicativo"]);
                    list.Add(temp);
                }

                reader.Close();
                session.Close();

                return(list, control);
            }
            catch (Exception error)
            {
                throw error;
            }
        }
        // Listar widgets do aplicativo
        public List <Aplicativos_Widgets> ListarWidgetsAplicativo(int idaplicativo = 0)
        {
            try
            {
                List <Aplicativos_Widgets> widgets = new List <Aplicativos_Widgets>();

                string  qry = "";
                Boolean show;
                qry += "SELECT aw.*, a.txaplicativo, w.txwidget ";
                qry += "FROM Aplicativos_Widgets aw ";
                qry += "INNER JOIN Aplicativos a ON a.idaplicativo = aw.idaplicativo ";
                qry += "INNER JOIN Widgets w ON w.idwidget = aw.idwidget ";
                qry += "WHERE aw.idaplicativo = " + idaplicativo;

                Connection  session = new Connection();
                Query       query   = session.CreateQuery(qry);
                IDataReader reader  = query.ExecuteQuery();

                while (reader.Read())
                {
                    show = true;

                    Aplicativos_Widgets temp = new Aplicativos_Widgets();
                    temp.idaplicativo_widget.value = Convert.ToInt32(reader["idaplicativo_widget"]);
                    temp.idaplicativo.value        = Convert.ToInt32(reader["idaplicativo"]);
                    temp.idwidget.value            = Convert.ToInt32(reader["idwidget"]);
                    temp.widget = new WidgetsDB().Buscar(Convert.ToInt32(reader["idwidget"]));

                    // Pega as configurações do widget do usuário
                    Usuarios_Widgets uw = new Usuarios_WidgetsDB().Buscar(session_usuario, Convert.ToInt32(reader["idaplicativo_widget"]));

                    if (uw == null)
                    {
                        temp.nrxpos.value = Convert.ToInt32(reader["nrxpos"]);
                        temp.nrypos.value = Convert.ToInt32(reader["nrypos"]);
                    }
                    else
                    {
                        temp.nrxpos.value = uw.nrxpos.value;
                        temp.nrypos.value = uw.nrypos.value;

                        // Verificae se pode retirar !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        temp.widget.txcolor.value       = uw.txcolor.value;
                        temp.widget.flminimize.value    = uw.flminimize.value;
                        temp.widget.nrrefreshtime.value = uw.nrrefreshtime.value;
                        temp.widget.fldashboard.value   = uw.fldashboard.value;
                        temp.widget.nrwidth.value       = uw.nrwidth.value;

                        // Se estiver com opção remover habilitada, não exibe na dashboard
                        if (uw.flremove.value == 1)
                        {
                            show = false;
                        }

                        // Se estiver com a opção minimizado selecionada, seta as alturas e remove a opção de redimensionar
                        if (uw.flminimize.value == 1)
                        {
                            temp.widget.nrheight.value    = 1;
                            temp.widget.nrminheight.value = 1;
                            temp.widget.flresize.value    = 0;
                        }
                    }

                    temp.txaction.value       = Convert.ToString(reader["txaction"]);
                    temp.txcontroller.value   = Convert.ToString(reader["txcontroller"]);
                    temp.txwidget.value       = Convert.ToString(reader["txwidget"]);
                    temp.idcodigoidioma.value = Convert.ToInt32(reader["idcodigoidioma"]);
                    temp.txappaction.value    = Convert.ToString(reader["txappaction"]);
                    temp.txclass.value        = Convert.ToString(reader["txclass"]);
                    temp.txmethod.value       = Convert.ToString(reader["txmethod"]);
                    temp.aplicativo           = new AplicativosDB().Buscar(Convert.ToInt32(reader["idaplicativo"]));

                    // Adiciona o widget
                    if (show)
                    {
                        widgets.Add(temp);
                    }
                }
                reader.Close();
                session.Close();

                return(widgets);
            }
            catch (Exception error)
            {
                throw error;
            }
        }