private void ConfiguraEmail_Load(object sender, EventArgs e)
        {
            SqlConnection conn = new ConnectionFactory().getConnection();

            try
            {
                SqlCommand carregaDados = new SqlCommand(
                    @"SELECT
                  NOMEPARAMETRO
                 ,VALOR
                  FROM PARAMETROS
                  WHERE NOMEPARAMETRO IN ('HOST', 'SSL', 'EMAIL', 'USUARIO', 'SENHA')", conn);

                SqlDataReader rdParametros = carregaDados.ExecuteReader();

                while (rdParametros.Read())
                {
                    if (rdParametros["NOMEPARAMETRO"].ToString().Equals("HOST"))
                    {
                        hostTextBox.Text = rdParametros["VALOR"].ToString();
                    }

                    if (rdParametros["NOMEPARAMETRO"].ToString().Equals("SSL"))
                    {
                        if (rdParametros["VALOR"].ToString().Equals("S"))
                        {
                            sslComboBox.SelectedItem = "SIM";
                        }
                        else
                        {
                            sslComboBox.SelectedItem = "NAO";
                        }
                    }

                    if (rdParametros["NOMEPARAMETRO"].ToString().Equals("EMAIL"))
                    {
                        EmailTextBox.Text = rdParametros["VALOR"].ToString();
                    }

                    if (rdParametros["NOMEPARAMETRO"].ToString().Equals("USUARIO"))
                    {
                        usuarioTextBox.Text = rdParametros["VALOR"].ToString();
                    }

                    if (rdParametros["NOMEPARAMETRO"].ToString().Equals("SENHA"))
                    {
                        senhaTextBox.Text = rdParametros["VALOR"].ToString();
                    }
                }

            }
            catch (SqlException exc)
            {
                MessageBox.Show("Erro ao buscar dados cadastrados"+ exc);
            }
            finally
            {
                conn.Close();
            }
        }
        public ReportDocument carregarRelatorio(String query, String pathLayout)
        {
            ReportDocument rpDocument = null;

            try
            {
                SqlConnection conn = new ConnectionFactory().getConnection();

                SqlDataAdapter adaptador = new SqlDataAdapter(query, conn);

                DataTable tabela = new DataTable();

                adaptador.Fill(tabela);

                rpDocument = new ReportDocument();
                String pathReport = pathLayout;
                rpDocument.Load(pathReport);

                rpDocument.SetDataSource(tabela);
            }
            catch (SqlException exc)
            {
                System.Windows.Forms.MessageBox.Show("Erro ao buscar dados do relatório.\n"+ exc);
            }
            catch (Exception exc)
            {
                System.Windows.Forms.MessageBox.Show("Algum erro ocorreu na busca do relatório.\n"+ exc);
            }

            return rpDocument;
        }
        public CadastraDigitalForm()
        {
            InitializeComponent();

            //Inicializa leitor e ja pega uma conexão com o banco
            m_NBioAPI = new NBioAPI();
            m_OpenedDeviceID = NBioAPI.Type.DEVICE_ID.NONE;
            m_IndexSearch = new NBioAPI.IndexSearch(m_NBioAPI);
            SqlConnection conn = new ConnectionFactory().getConnection();

            //Inicializa o módulo para captura da Digital
            defineDispositivo();
            fechaDispositivo();
            abreDispositivo();
            cadastraDigital();
        }
        private void devPesquisarButton_Click(object sender, EventArgs e)
        {
            //Limpa o form
            resetFormDefault();

            //Verifica se o botao gravar está habilitado, se sim, desabilita.
            if (devGravarButton.Enabled == true)
                devGravarButton.Enabled = false;
            //Verifica se está na página de pesquisa, se não, direciona o usuário para ela.
            if (tabControl1.SelectedTab != tabPage1)
            {
                tabControl1.SelectedTab = tabPage1;
            }
            //Solicita conexão com o banco de dados.
            SqlConnection conn = new ConnectionFactory().getConnection();

            //Busca promotores cadastrados
            sbQueryPesquisa = new StringBuilder();
            sbQueryPesquisa.Clear();

            sbQueryPesquisa.Append(@"SELECT
                               CODPROMOTOR
                               ,NOME
                               ,CODFORNEC
                               ,FORNECEDOR
                               ,CPF
                               ,EMAIL
                               ,EMAILSUPERVISOR
                               ,TELEFONE
                               ,CONTATOSUPERVISOR
                               ,CARGAHORARIA
                               ,DTNASCIMENTO
                               ,ENDERECO
                               FROM PROMOTORES
                               WHERE 0 = 0");

            if (!String.IsNullOrEmpty(pg01txCodpromotor.Text))
            {
                sbQueryPesquisa.Append(" AND CODPROMOTOR = "+ pg01txCodpromotor.Text);
            }

            if (!String.IsNullOrEmpty(pg01txEmail.Text))
            {
                sbQueryPesquisa.Append(" AND EMAIL LIKE '%"+ pg01txEmail + "%'");
            }

            if (!String.IsNullOrEmpty(pg01txFornecedor.Text))
            {
                sbQueryPesquisa.Append(" AND FORNECEDOR LIKE '%"+ pg01txFornecedor.Text.ToUpper() + "%'");
            }

            if (!String.IsNullOrEmpty(pg01txNome.Text))
            {
                sbQueryPesquisa.Append(" AND NOME LIKE '%"+ pg01txNome.Text.ToUpper() + "%'");
            }

            if (pg01IncompletoCheckBox.Checked == true)
            {
                sbQueryPesquisa.Append(" AND EMAILSUPERVISOR = '' OR EMAIL = ''");
            }

            sbQueryPesquisa.Append(" ORDER BY NOME");

            //Preenche o DataAdapter com os dados provenientes do resultado da consulta no banco.
            SqlDataAdapter adaptador = new SqlDataAdapter(sbQueryPesquisa.ToString(), conn);
            //Instancia um novo DataTable
            dados = new DataTable();

            //Verifica se a conexão está aberta, se sim, Fecha a conexão.
            if (conn != null)
            {
                conn.Close();
            }

            //Preenche o DataTable com os dados obtidos do DataAdapter
            adaptador.Fill(dados);
            //Preenche o dataGrid, com os dados do DataTable
            promotoresGrid.DataSource = dados;
        }
        private void devGravarButton_Click(object sender, EventArgs e)
        {
            //Validações na hora do cadastro.
            if ((String.IsNullOrEmpty(emailSupervisorTextBox.Text)) || (emailSupervisorTextBox.Text.Length < 9)){
                MessageBox.Show("È obrigatório informar o email do supervisor antes de continuar!");
                return;
            }

            if (String.IsNullOrEmpty(fotoTextBox.Text))
            {
                MessageBox.Show("É obrigatório cadastrar uma foto para o promotor!");
                return;
            }

            if (String.IsNullOrEmpty(digitalTextBox.Text))
            {
                MessageBox.Show("È obrigatório cadastrar a biometria para o usuário.");
                return;
            }

            if (String.IsNullOrEmpty(CodFornecTextBox.Text))
            {
                MessageBox.Show("É obrigatório informar um fornecedor para o promotor!");
                return;
            }

            if(String.IsNullOrEmpty(nomeTextBox.Text))
            {
                MessageBox.Show("É obrigatório informar o nome do promotor!");
                return;
            }

            //Variavel pra indicar se há erro
            bool erro = false;

            //Comando sql
            SqlCommand command;
            //Variavel de mensagem de retorno ao usuário
            String mensagemRetorno = "Promotor cadastrado com sucesso.";

            //Pega conexão no banco de dados
            SqlConnection conn = new ConnectionFactory().getConnection();

            //Cria comando do insert no banco.
            if (editar == false)
            {
                command = new SqlCommand(@"INSERT INTO PROMOTORES
                                          (nome,
                                          endereco,
                                          impressaoDigital,
                                          celular,
                                          telefone,
                                          dtnascimento,
                                          email,
                                          emailSupervisor,
                                          contatoSupervisor,
                                          cpf,
                                          foto,
                                          fotopromotor,
                                          cargaHoraria,
                                          enviaRelatorio,
                                          codfornec,
                                          fornecedor,
                                          emailcomprador,
                                          emailadicional)

                                          VALUES(@NOME
                                                ,@ENDERECO
                                                ,@IMPRESSAODIGITAL
                                                ,@CELULAR
                                                ,@TELEFONE
                                                ,@DTNASCIMENTO
                                                ,@EMAIL
                                                ,@EMAILSUPERVISOR
                                                ,@CONTATOSUPERVISOR
                                                ,@CPF
                                                ,@FOTO
                                                ,@fotopromotor
                                                ,@CARGAHORARIA
                                                ,@ENVIARELATORIO
                                                ,@CODFORNEC
                                                ,@FORNECEDOR
                                                ,@emailcomprador
                                                ,@emailadicional)", conn);

                command.Parameters.AddWithValue("@NOME", nomeTextBox.Text);
                command.Parameters.AddWithValue("@ENDERECO", EnderecoTextBox.Text);
                command.Parameters.AddWithValue("@IMPRESSAODIGITAL", digitalTextBox.Text);
                command.Parameters.AddWithValue("@CELULAR", CelularTextBox.Text);
                command.Parameters.AddWithValue("@TELEFONE", telefoneTextBox.Text);
                command.Parameters.AddWithValue("@DTNASCIMENTO", Convert.ToDateTime(dtNascimentoPicker.Text).ToString("yyyy/MM/dd"));
                command.Parameters.AddWithValue("@EMAIL", emailTextBox.Text);
                command.Parameters.AddWithValue("@EMAILSUPERVISOR", emailSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CONTATOSUPERVISOR", contatoSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CPF", cpfTextBox.Text);
                command.Parameters.AddWithValue("@FOTO", fotoTextBox.Text);
                command.Parameters.AddWithValue("@fotopromotor", gravaArrayFoto());
                command.Parameters.AddWithValue("@CARGAHORARIA", cargaHorariaTextBox.Text);
                if (enviaRelatorioCheckBox.Checked == true)
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'S');
                else
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'N');
                command.Parameters.AddWithValue("@CODFORNEC", CodFornecTextBox.Text);
                command.Parameters.AddWithValue("@FORNECEDOR", FornecedorTextBox.Text);
                command.Parameters.AddWithValue("@emailcomprador", pg02txEmailComprador.Text);
                command.Parameters.AddWithValue("@emailadicional", pg02txEmailAdicional.Text);

            }
            else
            {
                command = new SqlCommand(@"update promotores set nome = @NOME,
                                          endereco = @ENDERECO, codfornec = @CODFORNEC,
                                          impressaodigital = @IMPRESSAODIGITAL, celular = @CELULAR,
                                          telefone = @TELEFONE, email = @EMAIL, emailsupervisor = @EMAILSUPERVISOR,
                                          contatosupervisor = @CONTATOSUPERVISOR, cpf = @CPF, foto = @FOTO, fotopromotor = @fotopromotor,
                                          cargaHoraria = @CARGAHORARIA, enviaRelatorio = @ENVIARELATORIO,
                                          fornecedor = @FORNECEDOR, dtnascimento = @DTNASCIMENTO,
                                          emailcomprador = @EMAILCOMPRADOR, emailadicional = @EMAILADICIONAL
                                          where codpromotor = @CODPROMOTOR", conn);

                command.Parameters.AddWithValue("@NOME", nomeTextBox.Text);
                command.Parameters.AddWithValue("@ENDERECO", EnderecoTextBox.Text);
                command.Parameters.AddWithValue("@CODFORNEC", CodFornecTextBox.Text);
                command.Parameters.AddWithValue("@IMPRESSAODIGITAL", digitalTextBox.Text);
                command.Parameters.AddWithValue("@CELULAR", CelularTextBox.Text);
                command.Parameters.AddWithValue("@TELEFONE", telefoneTextBox.Text);
                command.Parameters.AddWithValue("@EMAIL", emailTextBox.Text);
                command.Parameters.AddWithValue("@EMAILSUPERVISOR", emailSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CONTATOSUPERVISOR", contatoSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CPF", cpfTextBox.Text);
                command.Parameters.AddWithValue("@FOTO", fotoTextBox.Text);
                command.Parameters.AddWithValue("@fotopromotor", gravaArrayFoto());
                command.Parameters.AddWithValue("@CARGAHORARIA", cargaHorariaTextBox.Text);
                if (enviaRelatorioCheckBox.Checked == true)
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'S');
                else
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'N');
                command.Parameters.AddWithValue("@FORNECEDOR", FornecedorTextBox.Text);
                command.Parameters.AddWithValue("@DTNASCIMENTO", Convert.ToDateTime(dtNascimentoPicker.Text).ToString("yyyy/MM/dd"));
                command.Parameters.AddWithValue("@EMAILCOMPRADOR", pg02txEmailComprador.Text);
                command.Parameters.AddWithValue("@EMAILADICIONAL", pg02txEmailAdicional.Text);
                command.Parameters.AddWithValue("@CODPROMOTOR", selecao.ToString());
            }

            try
            {
                command.ExecuteNonQuery();

                tabControl1.SelectedTab = tabPage1;
            }
            catch (SqlException exc)
            {
                if (editar == false)
                {
                    erro = true;
                    mensagemRetorno = "Erro ao cadastrar Promotor, verifique se todos os campos foram preenchidos!\n" + exc;
                }
                else
                {
                    erro = true;
                    mensagemRetorno = "Erro ao atualizar dados do promotor, favor verifique as informações inseridas.\n" + exc;
                }
            }
            finally
            {
                //Verifica se a conexão está fechada, se false, fecha a conexão
                if (conn != null && conn.State == ConnectionState.Open)
                    conn.Close();

                //Zera o command.
                command = null;
            }

            if (erro == false)
            {
                MessageBox.Show(mensagemRetorno);
                //Reseta todo o fomulario e fecha o calendário caso esteja aberto.
                resetFormDefault();
                selecao = 0;
                linha = -1;
                editar = false;

            }
            else
            {
                MessageBox.Show(mensagemRetorno);
            }
        }
        private void devEditarButton_Click(object sender, EventArgs e)
        {
            if (linha == -1)
            {
                MessageBox.Show("Favor selecionar um promotor para editar !");
            }
            else
            {
                //Define que será atualização de cadastro e não inserção
                editar = true;

                SqlConnection conn = new ConnectionFactory().getConnection();

                try
                {
                    SqlCommand cmdSelectDadosEdicao = new SqlCommand(@"SELECT * FROM PROMOTORES
                                                  WHERE CODPROMOTOR = @CODPROMOTOR", conn);

                    cmdSelectDadosEdicao.Parameters.AddWithValue("@CODPROMOTOR", Convert.ToInt32(promotoresGrid.CurrentRow.Cells[0].Value));

                    SqlDataReader rdSelectDadosEdicao = cmdSelectDadosEdicao.ExecuteReader();

                    while (rdSelectDadosEdicao.Read())
                    {
                        nomeTextBox.Text = rdSelectDadosEdicao["NOME"].ToString();
                        cpfTextBox.Text = rdSelectDadosEdicao["CPF"].ToString();
                        EnderecoTextBox.Text = rdSelectDadosEdicao["ENDERECO"].ToString();
                        CodFornecTextBox.Text = rdSelectDadosEdicao["CODFORNEC"].ToString();
                        FornecedorTextBox.Text = rdSelectDadosEdicao["FORNECEDOR"].ToString();
                        CelularTextBox.Text = rdSelectDadosEdicao["CELULAR"].ToString();
                        emailTextBox.Text = rdSelectDadosEdicao["EMAIL"].ToString();
                        telefoneTextBox.Text = rdSelectDadosEdicao["TELEFONE"].ToString();
                        fotoTextBox.Text = rdSelectDadosEdicao["FOTO"].ToString();
                        fotoPictureBox.ImageLocation = fotoTextBox.Text;
                        dtNascimentoPicker.Value = Convert.ToDateTime(rdSelectDadosEdicao["DTNASCIMENTO"]);
                        digitalTextBox.Text = rdSelectDadosEdicao["IMPRESSAODIGITAL"].ToString();
                        contatoSupervisorTextBox.Text = rdSelectDadosEdicao["CONTATOSUPERVISOR"].ToString();
                        emailSupervisorTextBox.Text = rdSelectDadosEdicao["EMAILSUPERVISOR"].ToString();
                        cargaHorariaTextBox.Text = rdSelectDadosEdicao["CARGAHORARIA"].ToString();
                        if (rdSelectDadosEdicao["ENVIARELATORIO"].Equals("S"))
                            enviaRelatorioCheckBox.Checked = true;
                        else
                            enviaRelatorioCheckBox.Checked = false;
                        pg02txEmailAdicional.Text = rdSelectDadosEdicao["EMAILADICIONAL"].ToString();
                        pg02txEmailComprador.Text = rdSelectDadosEdicao["EMAILCOMPRADOR"].ToString();
                    }

                    rdSelectDadosEdicao.Close();

                }
                catch (SqlException exc)
                {
                    MessageBox.Show("Erro ao carregar dados do promotor"+exc);
                }
                finally
                {
                    conn.Close();
                }

                //Muda para página de edição do formulario
                tabControl1.SelectedTab = tabPage2;

                //Habilita a gravação do promotor.
                devGravarButton.Enabled = true;
            }
        }
        public void carregaFIRCadastrada()
        {
            //Variável que vai receber o template da digital capturada pelo leitor
            string template;
            //Variável que vai receber o id do usuário, caso ele esteja cadastrado no banco
            uint codpromotor = 0;

            //Variável que vai receber o FIR em texto, do banco de dados
            NBioAPI.Type.FIR_TEXTENCODE templatefromDB = new NBioAPI.Type.FIR_TEXTENCODE();

            //Informações da Fingerprint
            NBioAPI.IndexSearch.FP_INFO[] fpInfo;

            //Solicita conexão com o banco
            SqlConnection conn = new ConnectionFactory().getConnection();

            //Comando sql para buscar cadastro do banco
            String command = "select codpromotor, impressaodigital from promotores";

            //Prepara o comando e a conexão para ser executado no banco.
            SqlCommand query = new SqlCommand(command, conn);

            //Cria um reader para ler os dados encontrados.
            SqlDataReader reader = query.ExecuteReader();

            try
            {
                while (reader.Read())
                {

                    //Pega código do promotor da consulta
                    codpromotor = Convert.ToUInt32(reader["codpromotor"].ToString(), 10);

                    //Pega a string correspondente da digital do banco
                    template = reader["impressaodigital"].ToString();

                    //Guarda na memória a impressao digital pegada do banco
                    templatefromDB.TextFIR = template;

                    //Adiciona as digitais encontradas na memória.
                    m_IndexSearch.AddFIR(templatefromDB, codpromotor, out fpInfo);
                }
            }
            catch (SqlException exc)
            {
                MessageBox.Show("Erro ao carregar dados do banco.\n" + exc);
            }
            finally
            {
                conn.Close();
                reader.Close();
            }
        }
        private void devGravarButton_Click(object sender, EventArgs e)
        {
            //Validações na hora do cadastro.
            if ((String.IsNullOrEmpty(emailSupervisorTextBox.Text)) || (emailSupervisorTextBox.Text.Length < 9))
            {
                MessageBox.Show("È obrigatório informar o email do supervisor antes de continuar!");
                return;
            }

            if (String.IsNullOrEmpty(fotoTextBox.Text))
            {
                MessageBox.Show("É obrigatório cadastrar uma foto para o promotor!");
                return;
            }

            if (String.IsNullOrEmpty(digitalTextBox.Text))
            {
                MessageBox.Show("È obrigatório cadastrar a biometria para o usuário.");
                return;
            }

            if (String.IsNullOrEmpty(CodFornecTextBox.Text))
            {
                MessageBox.Show("É obrigatório informar um fornecedor para o promotor!");
                return;
            }

            if (String.IsNullOrEmpty(nomeTextBox.Text))
            {
                MessageBox.Show("É obrigatório informar o nome do promotor!");
                return;
            }


            //Variavel pra indicar se há erro
            bool erro = false;

            //Comando sql
            SqlCommand command;
            //Variavel de mensagem de retorno ao usuário
            String mensagemRetorno = "Promotor cadastrado com sucesso.";

            //Pega conexão no banco de dados
            SqlConnection conn = new ConnectionFactory().getConnection();

            //Cria comando do insert no banco.
            if (editar == false)
            {
                command = new SqlCommand(@"INSERT INTO PROMOTORES
                                          (nome,
                                          endereco,
                                          impressaoDigital,
                                          celular,
                                          telefone,
                                          dtnascimento,
                                          email,
                                          emailSupervisor,
                                          contatoSupervisor,
                                          cpf,
                                          foto,
                                          fotopromotor,
                                          cargaHoraria,
                                          enviaRelatorio,
                                          codfornec,
                                          fornecedor,
                                          emailcomprador,
                                          emailadicional)
                
                                          VALUES(@NOME
                                                ,@ENDERECO
                                                ,@IMPRESSAODIGITAL
                                                ,@CELULAR
                                                ,@TELEFONE
                                                ,@DTNASCIMENTO
                                                ,@EMAIL
                                                ,@EMAILSUPERVISOR
                                                ,@CONTATOSUPERVISOR
                                                ,@CPF
                                                ,@FOTO
                                                ,@fotopromotor
                                                ,@CARGAHORARIA
                                                ,@ENVIARELATORIO
                                                ,@CODFORNEC
                                                ,@FORNECEDOR
                                                ,@emailcomprador
                                                ,@emailadicional)", conn);


                command.Parameters.AddWithValue("@NOME", nomeTextBox.Text);
                command.Parameters.AddWithValue("@ENDERECO", EnderecoTextBox.Text);
                command.Parameters.AddWithValue("@IMPRESSAODIGITAL", digitalTextBox.Text);
                command.Parameters.AddWithValue("@CELULAR", CelularTextBox.Text);
                command.Parameters.AddWithValue("@TELEFONE", telefoneTextBox.Text);
                command.Parameters.AddWithValue("@DTNASCIMENTO", Convert.ToDateTime(dtNascimentoPicker.Text).ToString("yyyy/MM/dd"));
                command.Parameters.AddWithValue("@EMAIL", emailTextBox.Text);
                command.Parameters.AddWithValue("@EMAILSUPERVISOR", emailSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CONTATOSUPERVISOR", contatoSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CPF", cpfTextBox.Text);
                command.Parameters.AddWithValue("@FOTO", fotoTextBox.Text);
                command.Parameters.AddWithValue("@fotopromotor", gravaArrayFoto());
                command.Parameters.AddWithValue("@CARGAHORARIA", cargaHorariaTextBox.Text);
                if (enviaRelatorioCheckBox.Checked == true)
                {
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'S');
                }
                else
                {
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'N');
                }
                command.Parameters.AddWithValue("@CODFORNEC", CodFornecTextBox.Text);
                command.Parameters.AddWithValue("@FORNECEDOR", FornecedorTextBox.Text);
                command.Parameters.AddWithValue("@emailcomprador", pg02txEmailComprador.Text);
                command.Parameters.AddWithValue("@emailadicional", pg02txEmailAdicional.Text);
            }
            else
            {
                command = new SqlCommand(@"update promotores set nome = @NOME,
                                          endereco = @ENDERECO, codfornec = @CODFORNEC,
                                          impressaodigital = @IMPRESSAODIGITAL, celular = @CELULAR,
                                          telefone = @TELEFONE, email = @EMAIL, emailsupervisor = @EMAILSUPERVISOR,
                                          contatosupervisor = @CONTATOSUPERVISOR, cpf = @CPF, foto = @FOTO, fotopromotor = @fotopromotor,
                                          cargaHoraria = @CARGAHORARIA, enviaRelatorio = @ENVIARELATORIO,
                                          fornecedor = @FORNECEDOR, dtnascimento = @DTNASCIMENTO,
                                          emailcomprador = @EMAILCOMPRADOR, emailadicional = @EMAILADICIONAL 
                                          where codpromotor = @CODPROMOTOR", conn);

                command.Parameters.AddWithValue("@NOME", nomeTextBox.Text);
                command.Parameters.AddWithValue("@ENDERECO", EnderecoTextBox.Text);
                command.Parameters.AddWithValue("@CODFORNEC", CodFornecTextBox.Text);
                command.Parameters.AddWithValue("@IMPRESSAODIGITAL", digitalTextBox.Text);
                command.Parameters.AddWithValue("@CELULAR", CelularTextBox.Text);
                command.Parameters.AddWithValue("@TELEFONE", telefoneTextBox.Text);
                command.Parameters.AddWithValue("@EMAIL", emailTextBox.Text);
                command.Parameters.AddWithValue("@EMAILSUPERVISOR", emailSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CONTATOSUPERVISOR", contatoSupervisorTextBox.Text);
                command.Parameters.AddWithValue("@CPF", cpfTextBox.Text);
                command.Parameters.AddWithValue("@FOTO", fotoTextBox.Text);
                command.Parameters.AddWithValue("@fotopromotor", gravaArrayFoto());
                command.Parameters.AddWithValue("@CARGAHORARIA", cargaHorariaTextBox.Text);
                if (enviaRelatorioCheckBox.Checked == true)
                {
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'S');
                }
                else
                {
                    command.Parameters.AddWithValue("@ENVIARELATORIO", 'N');
                }
                command.Parameters.AddWithValue("@FORNECEDOR", FornecedorTextBox.Text);
                command.Parameters.AddWithValue("@DTNASCIMENTO", Convert.ToDateTime(dtNascimentoPicker.Text).ToString("yyyy/MM/dd"));
                command.Parameters.AddWithValue("@EMAILCOMPRADOR", pg02txEmailComprador.Text);
                command.Parameters.AddWithValue("@EMAILADICIONAL", pg02txEmailAdicional.Text);
                command.Parameters.AddWithValue("@CODPROMOTOR", selecao.ToString());
            }

            try
            {
                command.ExecuteNonQuery();

                tabControl1.SelectedTab = tabPage1;
            }
            catch (SqlException exc)
            {
                if (editar == false)
                {
                    erro            = true;
                    mensagemRetorno = "Erro ao cadastrar Promotor, verifique se todos os campos foram preenchidos!\n" + exc;
                }
                else
                {
                    erro            = true;
                    mensagemRetorno = "Erro ao atualizar dados do promotor, favor verifique as informações inseridas.\n" + exc;
                }
            }
            finally
            {
                //Verifica se a conexão está fechada, se false, fecha a conexão
                if (conn != null && conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }

                //Zera o command.
                command = null;
            }

            if (erro == false)
            {
                MessageBox.Show(mensagemRetorno);
                //Reseta todo o fomulario e fecha o calendário caso esteja aberto.
                resetFormDefault();
                selecao = 0;
                linha   = -1;
                editar  = false;
            }
            else
            {
                MessageBox.Show(mensagemRetorno);
            }
        }
        private void devEditarButton_Click(object sender, EventArgs e)
        {
            if (linha == -1)
            {
                MessageBox.Show("Favor selecionar um promotor para editar !");
            }
            else
            {
                //Define que será atualização de cadastro e não inserção
                editar = true;

                SqlConnection conn = new ConnectionFactory().getConnection();

                try
                {
                    SqlCommand cmdSelectDadosEdicao = new SqlCommand(@"SELECT * FROM PROMOTORES
                                                  WHERE CODPROMOTOR = @CODPROMOTOR", conn);

                    cmdSelectDadosEdicao.Parameters.AddWithValue("@CODPROMOTOR", Convert.ToInt32(promotoresGrid.CurrentRow.Cells[0].Value));

                    SqlDataReader rdSelectDadosEdicao = cmdSelectDadosEdicao.ExecuteReader();

                    while (rdSelectDadosEdicao.Read())
                    {
                        nomeTextBox.Text              = rdSelectDadosEdicao["NOME"].ToString();
                        cpfTextBox.Text               = rdSelectDadosEdicao["CPF"].ToString();
                        EnderecoTextBox.Text          = rdSelectDadosEdicao["ENDERECO"].ToString();
                        CodFornecTextBox.Text         = rdSelectDadosEdicao["CODFORNEC"].ToString();
                        FornecedorTextBox.Text        = rdSelectDadosEdicao["FORNECEDOR"].ToString();
                        CelularTextBox.Text           = rdSelectDadosEdicao["CELULAR"].ToString();
                        emailTextBox.Text             = rdSelectDadosEdicao["EMAIL"].ToString();
                        telefoneTextBox.Text          = rdSelectDadosEdicao["TELEFONE"].ToString();
                        fotoTextBox.Text              = rdSelectDadosEdicao["FOTO"].ToString();
                        fotoPictureBox.ImageLocation  = fotoTextBox.Text;
                        dtNascimentoPicker.Value      = Convert.ToDateTime(rdSelectDadosEdicao["DTNASCIMENTO"]);
                        digitalTextBox.Text           = rdSelectDadosEdicao["IMPRESSAODIGITAL"].ToString();
                        contatoSupervisorTextBox.Text = rdSelectDadosEdicao["CONTATOSUPERVISOR"].ToString();
                        emailSupervisorTextBox.Text   = rdSelectDadosEdicao["EMAILSUPERVISOR"].ToString();
                        cargaHorariaTextBox.Text      = rdSelectDadosEdicao["CARGAHORARIA"].ToString();
                        if (rdSelectDadosEdicao["ENVIARELATORIO"].Equals("S"))
                        {
                            enviaRelatorioCheckBox.Checked = true;
                        }
                        else
                        {
                            enviaRelatorioCheckBox.Checked = false;
                        }
                        pg02txEmailAdicional.Text = rdSelectDadosEdicao["EMAILADICIONAL"].ToString();
                        pg02txEmailComprador.Text = rdSelectDadosEdicao["EMAILCOMPRADOR"].ToString();
                    }

                    rdSelectDadosEdicao.Close();
                }
                catch (SqlException exc)
                {
                    MessageBox.Show("Erro ao carregar dados do promotor" + exc);
                }
                finally
                {
                    conn.Close();
                }

                //Muda para página de edição do formulario
                tabControl1.SelectedTab = tabPage2;

                //Habilita a gravação do promotor.
                devGravarButton.Enabled = true;
            }
        }
        private void devPesquisarButton_Click(object sender, EventArgs e)
        {
            //Limpa o form
            resetFormDefault();

            //Verifica se o botao gravar está habilitado, se sim, desabilita.
            if (devGravarButton.Enabled == true)
            {
                devGravarButton.Enabled = false;
            }
            //Verifica se está na página de pesquisa, se não, direciona o usuário para ela.
            if (tabControl1.SelectedTab != tabPage1)
            {
                tabControl1.SelectedTab = tabPage1;
            }
            //Solicita conexão com o banco de dados.
            SqlConnection conn = new ConnectionFactory().getConnection();

            //Busca promotores cadastrados
            sbQueryPesquisa = new StringBuilder();
            sbQueryPesquisa.Clear();

            sbQueryPesquisa.Append(@"SELECT
                               CODPROMOTOR
                               ,NOME
                               ,CODFORNEC
                               ,FORNECEDOR
                               ,CPF
                               ,EMAIL
                               ,EMAILSUPERVISOR
                               ,TELEFONE
                               ,CONTATOSUPERVISOR
                               ,CARGAHORARIA
                               ,DTNASCIMENTO
                               ,ENDERECO
                               FROM PROMOTORES
                               WHERE 0 = 0");

            if (!String.IsNullOrEmpty(pg01txCodpromotor.Text))
            {
                sbQueryPesquisa.Append(" AND CODPROMOTOR = " + pg01txCodpromotor.Text);
            }

            if (!String.IsNullOrEmpty(pg01txEmail.Text))
            {
                sbQueryPesquisa.Append(" AND EMAIL LIKE '%" + pg01txEmail + "%'");
            }

            if (!String.IsNullOrEmpty(pg01txFornecedor.Text))
            {
                sbQueryPesquisa.Append(" AND FORNECEDOR LIKE '%" + pg01txFornecedor.Text.ToUpper() + "%'");
            }

            if (!String.IsNullOrEmpty(pg01txNome.Text))
            {
                sbQueryPesquisa.Append(" AND NOME LIKE '%" + pg01txNome.Text.ToUpper() + "%'");
            }

            if (pg01IncompletoCheckBox.Checked == true)
            {
                sbQueryPesquisa.Append(" AND EMAILSUPERVISOR = '' OR EMAIL = ''");
            }

            sbQueryPesquisa.Append(" ORDER BY NOME");

            //Preenche o DataAdapter com os dados provenientes do resultado da consulta no banco.
            SqlDataAdapter adaptador = new SqlDataAdapter(sbQueryPesquisa.ToString(), conn);

            //Instancia um novo DataTable
            dados = new DataTable();

            //Verifica se a conexão está aberta, se sim, Fecha a conexão.
            if (conn != null)
            {
                conn.Close();
            }

            //Preenche o DataTable com os dados obtidos do DataAdapter
            adaptador.Fill(dados);
            //Preenche o dataGrid, com os dados do DataTable
            promotoresGrid.DataSource = dados;
        }
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();

            //Alimenta a variável das datas
            dataInicio = dateTimePickerInicio.Value.ToString("dd-MM-yyyy");
            dataFinal = dateTimePickerFinal.Value.ToString("dd-MM-yyyy");

            SqlConnection conn = new ConnectionFactory().getConnection();

            SqlCommand cmd = new SqlCommand(@"select distinct(codpromotor) as codpromotor from movpromotores
                                              where data between @dataini and @datafim", conn);

            cmd.Parameters.AddWithValue("@dataini", dateTimePickerInicio.Value);
            cmd.Parameters.AddWithValue("@datafim", dateTimePickerFinal.Value);

            try
            {
                cxTotal.Text = getQuantidade().ToString();

                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    ReportDocument rpDocument =
                            new CarregaRelatorio().carregarRelatorio(montaQuery(reader["codpromotor"].ToString()), "T:\\rel\\relatorioDisparo.rpt");

                   //Cria um stream do pdf
                   System.IO.Stream st =
                       rpDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

                    //Faz a leitura do stream para byte
                   System.IO.BinaryReader br = new System.IO.BinaryReader(st);

                   byte[] pdfByte = new byte[st.Length];

                   for (int i = 0; i < st.Length; ++i)
                   {
                       pdfByte[i] = br.ReadByte();
                   }

                    //Fecha o stream e o byte reader
                   st.Close();
                   br.Close();

                   //Grava o email na fila de envio
                   if (gravaLogEMail(reader["codpromotor"].ToString(), pdfByte))
                   {
                       listBox1.Items.Add("Promotor "+ reader["codpromotor"].ToString() + " -> Gerou com sucesso!");
                   }
                   else
                   {
                       listBox1.Items.Add("Promotor " + reader["codpromotor"].ToString() + " -> Falha ao gerar");
                   }

                   listBox1.SelectedIndex = listBox1.Items.Count-1;

                   quantidade.Text = (listBox1.Items.Count).ToString();

                   if (listBox1.Items.Count == Convert.ToInt64(cxTotal.Text))
                       MessageBox.Show("O processo foi finalizado com sucesso!");

                   rpDocument.Close();

                    Application.DoEvents();

                }

                reader.Close();
            }catch(Exception exc)
            {
                MessageBox.Show("Erro ao gerar relatório\n"+ exc);
            }
            finally
            {
                conn.Close();
            }
        }
        private bool gravaLogEMail(String codpromotor, byte[] bytesPdf)
        {
            String[] destinatarios = new String[5];
            String nome = "";

            SqlConnection connDados = new ConnectionFactory().getConnection();

            //Busca dados do promotor
            SqlCommand cmdbuscaDados = new SqlCommand(@"SELECT * FROM PROMOTORES WHERE CODPROMOTOR = @CODPROMOTOR", connDados);
            cmdbuscaDados.Parameters.AddWithValue("CODPROMOTOR", codpromotor);

            try
            {
                SqlDataReader reader = cmdbuscaDados.ExecuteReader();

                while (reader.Read())
                {
                    destinatarios[0] = reader["emailsupervisor"].ToString();

                    if (reader["emailcomprador"] != DBNull.Value)
                        destinatarios[1] = reader["emailcomprador"].ToString();

                    if (reader["emailadicional"] != DBNull.Value)
                        destinatarios[2] = reader["emailadicional"].ToString();

                    nome = reader["nome"].ToString();
                }

                reader.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Erro ao buscar dados do promotor!\n" + exc);
            }
            finally
            {
                connDados.Close();
            }

            if (String.IsNullOrEmpty(destinatarios[0]))
            {
                return false;
            }

            //Grava dados na tabela de email para ser enviado
            SqlConnection conn = new ConnectionFactory().getConnection();

            SqlCommand cmd = new SqlCommand(
                               @"INSERT INTO EMAILS
                                 (DESTINATARIO, ASSUNTO, MENSAGEM, EMAILCOMPRADOR, EMAILADICIONAL,
                                  STATUS, ANEXO, NOMEDESTINATARIO, TEMANEXO)
                                  VALUES(@DESTINATARIO, @ASSUNTO, @MENSAGEM, @EMAILCOMPRADOR, @EMAILADICIONAL,
                                  'N', @ANEXO, @NOMEDESTINATARIO, @TEMANEXO)", conn);

            cmd.Parameters.AddWithValue("@DESTINATARIO", destinatarios[0]);
            cmd.Parameters.AddWithValue("ASSUNTO", "Relatório Semanal de Frequência de promotor: " +
                                      dateTimePickerInicio.Value.ToString("dd/MM/yyyy") + " À " +
                                      dateTimePickerFinal.Value.ToString("dd/MM/yyyy"));

            cmd.Parameters.AddWithValue("@MENSAGEM", @"Segue em anexo, relatório de frequência do(a) promtor(a) " + nome +
                            " <br><br><br> Att, <br><br><br> Atacadão dia a dia / Pravocê supermercados <br><br><br>" +
                            "<br><br> OBS: Por favor, não responda esse email!");

            if (destinatarios[1] == null)
                cmd.Parameters.AddWithValue("@EMAILCOMPRADOR", DBNull.Value);
            else
                cmd.Parameters.AddWithValue("@EMAILCOMPRADOR", destinatarios[1]);

            if (destinatarios[2] == null)
                cmd.Parameters.AddWithValue("@EMAILADICIONAL", DBNull.Value);
            else
                cmd.Parameters.AddWithValue("@EMAILADICIONAL", destinatarios[2]);

            cmd.Parameters.AddWithValue("@ANEXO", bytesPdf);
            cmd.Parameters.AddWithValue("@NOMEDESTINATARIO", nome);
            cmd.Parameters.AddWithValue("@TEMANEXO", 'S');

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Erro ao gravar log do email." + exc);
                return false;
            }
            finally
            {
                conn.Close();
            }

            return true;
        }
        private long getQuantidade()
        {
            long quantidade = 0;

            SqlConnection conn = new ConnectionFactory().getConnection();

            SqlCommand cmd = new SqlCommand(@"select distinct(codpromotor) as codpromotor from movpromotores
                                              where data between @dataini and @datafim", conn);

            cmd.Parameters.AddWithValue("@dataini", dateTimePickerInicio.Value);
            cmd.Parameters.AddWithValue("@datafim", dateTimePickerFinal.Value);

            try
            {
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    quantidade++;
                }

                reader.Close();
            }
            catch (Exception)
            {
            }
            finally
            {
                conn.Close();
            }

            return quantidade;
        }
        private void devGravarButton_Click(object sender, EventArgs e)
        {
            atualizaConfigEmail = true;
            //Valida se tem algum campo em branco para não gravar nenhuma informação incorreta.
            if (hostTextBox.Text.Equals("") || (EmailTextBox.Text.Equals("") || (usuarioTextBox.Text.Equals("")
                || senhaTextBox.Text.Equals(""))))
            {
                MessageBox.Show("Favor preencher todos os campos!");
            }
            else
            {
                SqlConnection conn = new ConnectionFactory().getConnection();

                try
                {
                    SqlCommand qrAtualizaHost = new SqlCommand(
                    @"UPDATE PARAMETROS
                  SET VALOR = @HOST
                  WHERE NOMEPARAMETRO = 'HOST'", conn);

                    qrAtualizaHost.Parameters.AddWithValue("@HOST", hostTextBox.Text);

                    SqlCommand qrAtualizaEmail = new SqlCommand(
            @"UPDATE PARAMETROS
                  SET VALOR = @EMAIL
                  WHERE NOMEPARAMETRO = 'EMAIL'", conn);

                    qrAtualizaEmail.Parameters.AddWithValue("@EMAIL", EmailTextBox.Text);

                    SqlCommand qrAtualizaUsuario = new SqlCommand(
            @"UPDATE PARAMETROS
                  SET VALOR = @USUARIO
                  WHERE NOMEPARAMETRO = 'USUARIO'", conn);

                    qrAtualizaUsuario.Parameters.AddWithValue("@USUARIO", usuarioTextBox.Text);

                    SqlCommand qrAtualizaSenha = new SqlCommand(
            @"UPDATE PARAMETROS
                  SET VALOR = @SENHA
                  WHERE NOMEPARAMETRO = 'SENHA'", conn);

                    qrAtualizaSenha.Parameters.AddWithValue("@SENHA", senhaTextBox.Text);

                    SqlCommand qrAtualizaSSL = new SqlCommand(
            @"UPDATE PARAMETROS
                  SET VALOR = @SSL
                  WHERE NOMEPARAMETRO = 'SSL'", conn);
                    if (sslComboBox.SelectedItem.ToString().Equals("SIM"))
                    {
                        qrAtualizaSSL.Parameters.AddWithValue("@SSL", 'S');
                    }
                    else
                    {
                        qrAtualizaSSL.Parameters.AddWithValue("@SSL", 'N');
                    }

                    //Executa todas as atualizações necessárias.
                    qrAtualizaEmail.ExecuteNonQuery();
                    qrAtualizaHost.ExecuteNonQuery();
                    qrAtualizaSenha.ExecuteNonQuery();
                    qrAtualizaSSL.ExecuteNonQuery();
                    qrAtualizaUsuario.ExecuteNonQuery();
                }
                catch (SqlException exc)
                {
                    atualizaConfigEmail = false;
                    MessageBox.Show("Erro ao atualizar dados !" + exc);
                }
                finally
                {
                    conn.Close();
                }

                if (atualizaConfigEmail == true)
                {
                    MessageBox.Show("Dados atualizados com sucesso !");
                }
                else
                {
                    MessageBox.Show("Erro ao atualizar os dados do email !");
                }
            }
        }
        private void PesquisarButton_Click_1(object sender, EventArgs e)
        {
            SqlConnection conn = new ConnectionFactory().getConnection();

            SqlCommand command = new SqlCommand();

            ImprimirButton.Enabled = true;

            //String que conterá o select responsável por buscar os promotores.
            selectPromotores = new StringBuilder();

            // Monta o select e adiciona os filtros caso necessário.
            selectPromotores.Append(
             @"select ENTRADAS.data
              ,ENTRADAS.codpromotor
              ,ENTRADAS.CODFILIAL
              ,ENTRADAS.nome
              ,ENTRADAS.FORNECEDOR
              ,ENTRADAS.horasContratuais
              ,ENTRADAS.entrada1
              ,ENTRADAS.saida1
              ,ENTRADAS.entrada2
              ,ENTRADAS.saida2
              , dbo.func_cargaHoraria(entradas.saida2,entradas.entrada2,entradas.saida1,entradas.entrada1) as CARGAHORARIA
              , dbo.func_CalculaMinutosDiarios(entradas.saida2,entradas.entrada2,entradas.saida1,entradas.entrada1) as MINUTOSDIARIOS

             from
            (select convert(char,m.data,106) as data
              , m.codpromotor
              , M.CODFILIAL
              , p.nome
              , p.FORNECEDOR
              , p.cargaHoraria as horasContratuais
              ,(select max(x.hora) from  movpromotores x where x.codpromotor=m.codpromotor and x.data=m.data and x.registro=1) entrada1
              ,(select max(x.hora) from  movpromotores x where x.codpromotor=m.codpromotor and x.data=m.data and x.registro=2) saida1
              ,(select max(x.hora) from  movpromotores x where x.codpromotor=m.codpromotor and x.data=m.data and x.registro=3) entrada2
              ,(select max(x.hora) from  movpromotores x where x.codpromotor=m.codpromotor and x.data=m.data and x.registro=4) saida2
            from
              movpromotores m, promotores p
            where m.registro is not null
            and p.codpromotor = m.codpromotor
            and m.data BETWEEN '" + dtPickerInicio.Value.ToString("yyyy/MM/dd") + "' AND '" +
                                       dtPickerFim.Value.ToString("yyyy/MM/dd") + "'");

            //Adiciona os filtros caso necessário

            if (!TextBoxCodigo.Text.Equals(""))
            {
                selectPromotores.Append(" AND M.CODPROMOTOR = " + TextBoxCodigo.Text);
            }
            if (!TextBoxNome.Text.Equals(""))
            {
                selectPromotores.Append(" AND P.NOME LIKE '%" + TextBoxNome.Text + "%'");
            }
            if (!CodFornecTextBox.Text.Equals(""))
            {
                selectPromotores.Append(" AND P.CODFORNEC = " + Convert.ToInt32(CodFornecTextBox.Text) + " ");
            }
            if (FilialComboBox.SelectedItem != null)
            {
                selectPromotores.Append(" AND M.CODFILIAL = "+ Convert.ToInt32(FilialComboBox.SelectedItem.ToString().Substring(0, FilialComboBox.SelectedItem.ToString().IndexOf("-")-1))+ " ");
            }

            //Termina de montar o select após os filtros.
            selectPromotores.Append(") ENTRADAS ");
            selectPromotores.Append(
             @"group by  entradas.codpromotor
                 ,ENTRADAS.CODFILIAL
                 ,entradas.nome
                 ,entradas.FORNECEDOR
                 ,entradas.horasContratuais
                 ,ENTRADAS.data
                 ,ENTRADAS.entrada1
                 ,ENTRADAS.entrada2
                 ,ENTRADAS.saida1
                 ,ENTRADAS.saida2

                 order by ENTRADAS.data desc, ENTRADAS.FORNECEDOR, ENTRADAS.nome");

            //Define o comando do select que será executado após ser montado.
            command.CommandText = selectPromotores.ToString();

            //Conexão que será usada no select.
            command.Connection = conn;

            try
            {
                //Adaptador que irá buscar os dados no banco
                SqlDataAdapter adaptador = new SqlDataAdapter(command);

                DataTable movpromotores = new DataTable();

                adaptador.Fill(movpromotores);

                //Popula o Data Grid
                entradasGrid.DataSource = movpromotores;

                qtRegistrosTextBox.Text = entradasGrid.Rows.Count.ToString();

                //Atuliza o dataGrid
                entradasGrid.Refresh();
            }
            catch (SqlException exc)
            {
                MessageBox.Show("Erro ao buscar os dados! \n"+ exc);
            }
            finally
            {
                conn.Close();
            }
        }
        private void populaFiliais()
        {
            OracleConnection conn = new ConnectionFactory().getConnectionOracle();

            OracleCommand cmdSelectFiliais = new OracleCommand(@"SELECT CODIGO, FANTASIA FROM PCFILIAL
                                                                 WHERE CODIGO NOT IN (2, 5, 7, 6, 3, 99)
                                                                 ORDER BY CODIGO", conn);

            try
            {
                OracleDataReader rdSelectFiliais = cmdSelectFiliais.ExecuteReader();

                while (rdSelectFiliais.Read())
                {
                    FilialComboBox.Items.Add(rdSelectFiliais["CODIGO"].ToString()+
                                             " - "+ rdSelectFiliais["FANTASIA"].ToString());
                }

                rdSelectFiliais.Close();
            }
            catch (OracleException exc)
            {
                MessageBox.Show("Erro ao buscar filiais!"+ exc);
            }
            finally
            {
                conn.Close();
            }
        }