public ActionResult RelatorioDeConsultaDeHorasConsumidas()
        {
            try
            {
                Conexao.Ativar(true);
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];
                OrdemServicoBUS umaOrdemServicoBUS = new OrdemServicoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);
                string query = "SELECT PROJETOS.DESCRICAO AS NOMEPROJETO, CLIENTES.NOME AS NOMECLIENTE, PROJETOS.HORASGERENTE, " +
                                "PROJETOS.HORASCOORDENADOR, PROJETOS.HORASCONSULTOR, ORDEM_SERVICO.INICIO, ORDEM_SERVICO.FIM, ORDEM_SERVICO.TRANSLADO, " +
                                "SUM( ( CAST(ORDEM_SERVICO.FIM AS INTEGER) - CAST(ORDEM_SERVICO.INICIO AS INTEGER) ) + ORDEM_SERVICO.TRANSLADO) AS HORASCONSUMIDAS,  " +
                                "TIPOHORAS.DESCRICAO AS TIPOHORA, FUNCIONARIOS.NOME AS NOMEFUNCIONARIO " +
                                "FROM PROJETOS INNER JOIN ORDEM_SERVICO ON ORDEM_SERVICO.PROJETO = PROJETOS.CODIGO " +
                                "INNER JOIN TIPOHORAS ON ORDEM_SERVICO.TIPOHORA = TIPOHORAS.CODIGO " +
                                "INNER JOIN CLIENTES ON ORDEM_SERVICO.CLIENTE = CLIENTES.CODIGO " +
                                "INNER JOIN FUNCIONARIOS ON ORDEM_SERVICO.FUNCIONARIO = FUNCIONARIOS.CODIGO " +
                                "GROUP BY PROJETOS.CODIGO, PROJETOS.DESCRICAO, CLIENTES.NOME, " +
                                "PROJETOS.HORASGERENTE, PROJETOS.HORASCOORDENADOR, PROJETOS.HORASCONSULTOR, " +
                                "ORDEM_SERVICO.INICIO, ORDEM_SERVICO.FIM, ORDEM_SERVICO.TRANSLADO,TIPOHORAS.DESCRICAO, FUNCIONARIOS.NOME " +
                                "ORDER BY CLIENTES.NOME ASCENDING";

                FbParameter[] parametros = new FbParameter[1];
                DataTable dtRelatorio = umaOrdemServicoBUS.GerarRelatorio(query, parametros);

                ViewBag.Title = "Relatório de Consulta de Horas Consumidas - Ordens de Serviço";

                if (dtRelatorio.Rows.Count != 0)
                {
                    WebReport relatorio = Relatorio.GerarRelatorioConsultaDeHorasConsumidasOS(this.Server.MapPath("~/Relatorios/ConsultaDeHorasGastas.frx"), dtRelatorio);
                    relatorio.Width = 800;
                    relatorio.Height = 1200;
                    ViewBag.Relatorio = relatorio;
                }
                else
                {
                   ViewBag.Relatorio = null;
                }
                return View();
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                Conexao.Ativar(false);
            }
        }
        private void GerarRelatorioOS(int id, OrdemServicoBUS umOrdemServicoBUS, string query, string pathRelatorio, FbParameter[] parametros)
        {
            parametros[0].Value = id;

            DataTable dtRelatorio = umOrdemServicoBUS.GerarRelatorio(query, parametros);

            WebReport relatorio = new WebReport();
            relatorio = Relatorio.GerarRelatorioOS(id, this.Server.MapPath(pathRelatorio), dtRelatorio);
            relatorio.Width = 800;
            relatorio.Height = 1200;
            ViewBag.Title = "Relatório Ordem de Serviço";
            ViewBag.Id = id;
            ViewBag.Relatorio = relatorio;
        }
        public ActionResult RelatorioListagemOS()
        {
            try
            {
                Usuario umUsuario = (Usuario)Session["UsuarioLogado"];

                if (umUsuario.IsAdministrador)
                {
                    Conexao.Ativar(true);
                    OrdemServicoBUS umaOrdemServicoBUS = new OrdemServicoBUS(Conexao.Instacia, umUsuario.Funcionario.Empresa, umUsuario.Funcionario.Filial);

                    OrdemServico os = (OrdemServico)Session["FiltroOS"];

                    string query = "SELECT ORDEM_SERVICO.CODIGO, ORDEM_SERVICO.DATA, ORDEM_SERVICO.INICIO, "+
                                        "ORDEM_SERVICO.OBSERVACAO, ORDEM_SERVICO_REMOTO.INICIO AS DATADE, ORDEM_SERVICO_REMOTO.FIM AS DATAATE, "+
                                        "ORDEM_SERVICO_REMOTO.TOTAL, "+
                                        "ORDEM_SERVICO.FIM, ORDEM_SERVICO.TRANSLADO, ORDEM_SERVICO.ATIVIDADE, ORDEM_SERVICO.FATURADO, "+
                                        "SYS_COMPANY.EMPRESA AS CODEMPRESA, SYS_COMPANY.NOME AS NOMEEMPRESA, "+
                                        "SYS_BRANCH.FILIAL AS CODFILIAL, SYS_BRANCH.NOME AS NOMEFILIAL, "+
                                        "CLIENTES.CODIGO AS CODCLIENTE, CLIENTES.REDUZIDO AS NOMECLIENTE, "+
                                        "FUNCIONARIOS.CODIGO AS CODFUNCIONARIO, FUNCIONARIOS.NOME AS NOMEFUNCIONARIO, "+
                                        "SITUACAO_OS.CODIGO AS CODSITUACAO, SITUACAO_OS.DESCRICAO AS NOMESITUACAO "+
                                        "FROM ORDEM_SERVICO INNER JOIN CLIENTES ON CLIENTES.CODIGO = ORDEM_SERVICO.CLIENTE "+
                                        "INNER JOIN FUNCIONARIOS ON FUNCIONARIOS.CODIGO = ORDEM_SERVICO.FUNCIONARIO "+
                                        "INNER JOIN SITUACAO_OS ON SITUACAO_OS.CODIGO = ORDEM_SERVICO.STATUS "+
                                        "LEFT JOIN ORDEM_SERVICO_REMOTO ON ORDEM_SERVICO_REMOTO.ORDEMSERVICO = ORDEM_SERVICO.CODIGO "+
                                        "LEFT JOIN SYS_COMPANY ON SYS_COMPANY.EMPRESA = ORDEM_SERVICO.EMPRESA "+
                                        "LEFT JOIN SYS_BRANCH ON SYS_BRANCH.FILIAL = ORDEM_SERVICO.FILIAL "+
                                        "WHERE ((ORDEM_SERVICO.EMPRESA = @EMPRESA) OR (ORDEM_SERVICO.EMPRESA = '**')) " +
                                        "AND ((ORDEM_SERVICO.FILIAL = @FILIAL) OR (ORDEM_SERVICO.FILIAL = '**')) " +
                                        "AND (ORDEM_SERVICO.DATA >= @DATADE AND ORDEM_SERVICO.DATA <= @DATAATE)";

                    FbParameter[] parametros = new FbParameter[6];
                    parametros[0] = new FbParameter();
                    parametros[0].ParameterName = "@EMPRESA";
                    parametros[0].Value = umUsuario.Funcionario.Empresa.Codigo;
                    parametros[1] = new FbParameter();
                    parametros[1].ParameterName = "@FILIAL";
                    parametros[1].Value = umUsuario.Funcionario.Filial.Codigo;
                    parametros[2] = new FbParameter();
                    parametros[2].ParameterName = "@DATADE";
                    parametros[2].Value = Convert.ToDateTime(os.DataDe);
                    parametros[3] = new FbParameter();
                    parametros[3].ParameterName = "@DATAATE";
                    parametros[3].Value = Convert.ToDateTime(os.DataAte);

                    if (os.Cliente.Codigo != 0)
                    {
                        parametros[4] = new FbParameter();
                        parametros[4].ParameterName = "@CLIENTE";
                        parametros[4].Value = os.Cliente.Codigo;
                        query += "AND ORDEM_SERVICO.CLIENTE = @CLIENTE ";
                    }

                    if (os.Funcionario.Codigo != 0)
                    {
                        parametros[5] = new FbParameter();
                        parametros[5].ParameterName = "@FUNCIONARIO";
                        parametros[5].Value = os.Funcionario.Codigo;
                        query += "AND ORDEM_SERVICO.FUNCIONARIO = @FUNCIONARIO ";
                    }

                    query += "ORDER BY ORDEM_SERVICO.DATA ASC ";

                    DataTable dtRelatorio = umaOrdemServicoBUS.GerarRelatorio(query, parametros);

                    ViewBag.Title = "Consulta Ordens de Serviço - Ordens de Serviço";

                    if (dtRelatorio.Rows.Count != 0)
                    {
                        WebReport relatorio = Relatorio.GerarRelatorioListagemOS(this.Server.MapPath("~/Relatorios/ListagemOS.frx"), dtRelatorio, parametros);
                        relatorio.Width = 800;
                        relatorio.Height = 1200;
                        ViewBag.Relatorio = relatorio;
                    }
                    else
                    {
                        ViewBag.Relatorio = null;
                    }
                    return View();
                }
                else
                {
                    return RedirectToAction("Index", new { st = "er" });
                }
            }
            catch (Exception ex)
            {
                return RedirectToAction("Index", new { st = "er" });
            }
            finally
            {
                if (Conexao.Instacia.State == ConnectionState.Open)
                {
                    Conexao.Ativar(false);
                }
            }
        }