private void mnuImagemVisualizar_Click(object sender, EventArgs e)
        {
            //--- check selected item
            if (dgvListagem.SelectedRows.Count == 0)
            {
                AbrirDialog("Favor selecionar um registro para Visualizar Imagem...",
                            "Selecionar Registro", DialogType.OK, DialogIcon.Information);
                return;
            }

            //--- get Selected item
            objDespesaCartao item = (objDespesaCartao)dgvListagem.SelectedRows[0].DataBoundItem;

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;
                ImagemUtil.ImagemVisualizar(item.Imagem);
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao Visualizar a imagem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        private void mnuImagemRemover_Click(object sender, EventArgs e)
        {
            //--- check selected item
            if (dgvListagem.SelectedRows.Count == 0)
            {
                AbrirDialog("Favor selecionar um registro para Visualizar Imagem...",
                            "Selecionar Registro", DialogType.OK, DialogIcon.Information);
                return;
            }

            //--- get Selected item
            objAPagar item = (objAPagar)dgvListagem.SelectedRows[0].DataBoundItem;

            if (item.IDAPagar == null)
            {
                AbrirDialog("Não é possível REMOVER imagem de uma Parcela de APagar numa Despesa que ainda não foi salva..." +
                            "\nSalvar a Despesa antes de REMOVER a imagem.",
                            "Inserir Imagem", DialogType.OK, DialogIcon.Exclamation);
                return;
            }

            DialogResult resp;

            resp = AbrirDialog("Deseja realmente REMOVER ou DESASSOCIAR a imagem da despesa selecionada?" +
                               "\nA imagem não será excluída mas movida para pasta de Imagens Removidas...",
                               "Remover Imagem", DialogType.SIM_NAO, DialogIcon.Question, DialogDefaultButton.Second);

            if (resp != DialogResult.Yes)
            {
                return;
            }

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;

                //_despesa.Imagem.ReferenceDate = _despesa.DespesaData;
                item.Imagem = ImagemUtil.ImagemRemover(item.Imagem);

                AbrirDialog("Imagem desassociada com sucesso!" +
                            "\nPor segurança a imagem foi guardada na pasta de Imagens Removidas.",
                            "Imagem Removida", DialogType.OK, DialogIcon.Information);
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao Remover a imagem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        public void Atualizar()
        {
            try
            {
                endereco.Atualizar();

                var cmd = @"UPDATE clinica SET
								id_endereco		= @id_endereco,
								razao_social	= @razao_social,
								nome_fantasia	= @nome_fantasia,
								cnpj			= @cnpj,
								ie				= @ie,
								ddd_tel			= @ddd_tel,
								telefone		= @telefone,
								ddd_cel			= @ddd_cel,
								celular			= @celular,
								email			= @email,
								logo_clinica	= @logo_clinica,
								site			= @site"                                        ;

                Conexao.AbrirConexao();
                Conexao.Cmd = new SqlCommand(cmd, Conexao.ConexaoSQL);

                Conexao.Cmd.Parameters.AddWithValue("id_endereco", endereco.id);
                Conexao.Cmd.Parameters.AddWithValue("razao_social", razaoSocial);
                Conexao.Cmd.Parameters.AddWithValue("nome_fantasia", nomeFantasia);
                Conexao.Cmd.Parameters.AddWithValue("cnpj", cnpj);
                Conexao.Cmd.Parameters.AddWithValue("ie", ie);

                Conexao.Cmd.Parameters.AddWithValue("ddd_tel", dddTel);
                Conexao.Cmd.Parameters.AddWithValue("telefone", telefone);
                Conexao.Cmd.Parameters.AddWithValue("ddd_cel", dddCel);
                Conexao.Cmd.Parameters.AddWithValue("celular", celular);
                Conexao.Cmd.Parameters.AddWithValue("email", email);
                Conexao.Cmd.Parameters.AddWithValue("site", site);

                Conexao.Cmd.Parameters.AddWithValue("logo_clinica", logo != null ? ImagemUtil.ImageParaByte(logo) : SqlBinary.Null);

                Conexao.Cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Excecao.Mostrar(ex);
            }
            finally
            {
                Conexao.FecharConexao();
            }
        }
        private void btnRemoverImagem_Click(object sender, EventArgs e)
        {
            DialogResult resp;

            if (_despesa.Imagem == null || string.IsNullOrEmpty(_despesa.Imagem.ImagemFileName))
            {
                AbrirDialog("Ainda não existe nenhuma imagem associada a essa Despesa para que seja removida...",
                            "Não há Imagem", DialogType.OK, DialogIcon.Warning);
                return;
            }

            resp = AbrirDialog("Deseja realmente REMOVER ou DESASSOCIAR a imagem da despesa atual?" +
                               "\nA imagem não será excluída mas movida para pasta de Imagens Removidas...",
                               "Remover Imagem", DialogType.SIM_NAO, DialogIcon.Question, DialogDefaultButton.Second);

            if (resp != DialogResult.Yes)
            {
                return;
            }

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;

                //_despesa.Imagem.ReferenceDate = _despesa.DespesaData;
                _despesa.Imagem = ImagemUtil.ImagemRemover(_despesa.Imagem);

                AbrirDialog("Imagem desassociada com sucesso!" +
                            "\nPor segurança a imagem foi guardada na pasta de Imagens Removidas.",
                            "Imagem Removida", DialogType.OK, DialogIcon.Information);
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao Remover a imagem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        private void btnVerImagem_Click(object sender, EventArgs e)
        {
            if (_despesa.IDDespesa == null)
            {
                AbrirDialog("Ainda não existe nenhuma imagem associada a essa Despesa..." +
                            "\nÉ necessário salvar a despesa para anexar uma imagem...",
                            "Necessário Salvar", DialogType.OK, DialogIcon.Warning);
                return;
            }

            if (_despesa.Imagem == null || string.IsNullOrEmpty(_despesa.Imagem.ImagemFileName))
            {
                var resp = AbrirDialog("Ainda não existe nenhuma imagem associada a essa Despesa..." +
                                       "\nDeseja INSERIR uma nova imagem à despesa?",
                                       "Não há Imagem", DialogType.SIM_NAO, DialogIcon.Question);

                if (resp == DialogResult.Yes)
                {
                    btnInserirImagem_Click(sender, e);
                }

                return;
            }

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;
                ImagemUtil.ImagemVisualizar(_despesa.Imagem);
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao Visualizar a imagem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        private void mnuImagemVisualizar_Click(object sender, EventArgs e)
        {
            //--- check selected item
            if (dgvListagem.SelectedRows.Count == 0)
            {
                AbrirDialog("Favor selecionar um registro para Visualizar Imagem...",
                            "Selecionar Registro", DialogType.OK, DialogIcon.Information);
                return;
            }

            //--- get Selected item
            objAPagar item = (objAPagar)dgvListagem.SelectedRows[0].DataBoundItem;

            if (item.IDAPagar == null)
            {
                AbrirDialog("Não é possível visualizar imagem de uma Parcela de APagar numa Despesa que ainda não foi salva..." +
                            "\nSalvar a Despesa antes de Visualizar a imagem.",
                            "Inserir Imagem", DialogType.OK, DialogIcon.Exclamation);
                return;
            }

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;
                ImagemUtil.ImagemVisualizar(item.Imagem);
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao Visualizar a imagem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        // INSERT IMAGE
        //------------------------------------------------------------------------------------------------------------
        private void mnuImagemInserir_Click(object sender, EventArgs e)
        {
            //--- check selected item
            if (dgvListagem.SelectedRows.Count == 0)
            {
                AbrirDialog("Favor selecionar um registro para Inserir Imagem...",
                            "Selecionar Registro", DialogType.OK, DialogIcon.Information);
                return;
            }

            //--- get Selected item
            objDespesaCartao item = (objDespesaCartao)dgvListagem.SelectedRows[0].DataBoundItem;

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;

                objImagem imagem = new objImagem()
                {
                    IDOrigem       = (long)item.IDDespesa,
                    Origem         = EnumImagemOrigem.Despesa,
                    ImagemFileName = item.Imagem == null ? string.Empty : item.Imagem.ImagemFileName,
                    ImagemPath     = item.Imagem == null ? string.Empty : item.Imagem.ImagemPath,
                    ReferenceDate  = item.DespesaData,
                };

                // open form to edit or save image
                bool IsNew = item.Imagem == null || string.IsNullOrEmpty(item.Imagem.ImagemPath);
                imagem = ImagemUtil.ImagemGetFileAndSave(imagem, this);

                // check if isUpdated
                bool IsUpdated = false;
                if (item.Imagem != null && imagem != null)
                {
                    IsUpdated = (item.Imagem.ImagemFileName != imagem.ImagemFileName) || (item.Imagem.ImagemPath != imagem.ImagemPath);
                }

                // update imagem object
                item.Imagem = imagem;

                // emit message
                if (IsNew && imagem != null)
                {
                    AbrirDialog("Imagem associada e salva com sucesso!" +
                                "\nPor segurança a imagem foi transferida para a pasta padrão.",
                                "Imagem Salva", DialogType.OK, DialogIcon.Information);
                }
                else if (IsUpdated)
                {
                    AbrirDialog("Imagem alterada com sucesso!" +
                                "\nPor segurança a imagem anterior foi transferida para a pasta de imagens removidas.",
                                "Imagem Alterada", DialogType.OK, DialogIcon.Information);
                }
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao obter a imagem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        private void btnInserirImagem_Click(object sender, EventArgs e)
        {
            if (_despesa.IDDespesa == null)
            {
                AbrirDialog("É necessário salvar a despesa para anexar uma imagem...",
                            "Necessário Salvar", DialogType.OK, DialogIcon.Warning);
                return;
            }

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;

                objImagem imagem = new objImagem()
                {
                    IDOrigem       = (long)_despesa.IDDespesa,
                    Origem         = EnumImagemOrigem.Despesa,
                    ImagemFileName = _despesa.Imagem == null ? string.Empty : _despesa.Imagem.ImagemFileName,
                    ImagemPath     = _despesa.Imagem == null ? string.Empty : _despesa.Imagem.ImagemPath,
                    ReferenceDate  = _despesa.DespesaData,
                };

                // open form to edit or save image
                bool IsNew = _despesa.Imagem == null || string.IsNullOrEmpty(_despesa.Imagem.ImagemPath);
                imagem = ImagemUtil.ImagemGetFileAndSave(imagem, this);

                // check if isUpdated
                bool IsUpdated = false;
                if (_despesa.Imagem != null && imagem != null)
                {
                    IsUpdated = (_despesa.Imagem.ImagemFileName != imagem.ImagemFileName) || (_despesa.Imagem.ImagemPath != imagem.ImagemPath);
                }

                // update imagem object
                _despesa.Imagem = imagem;

                // emit message
                if (IsNew && imagem != null)
                {
                    AbrirDialog("Imagem associada e salva com sucesso!" +
                                "\nPor segurança a imagem foi transferida para a pasta padrão.",
                                "Imagem Salva", DialogType.OK, DialogIcon.Information);
                }
                else if (IsUpdated)
                {
                    AbrirDialog("Imagem alterada com sucesso!" +
                                "\nPor segurança a imagem anterior foi transferida para a pasta de imagens removidas.",
                                "Imagem Alterada", DialogType.OK, DialogIcon.Information);
                }
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao obter a imagem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        public void Cadastrar()
        {
            try
            {
                endereco.Cadastrar();

                var cmd = @"INSERT INTO clinica
	                               (id_endereco,
                                    razao_social,
	                                nome_fantasia,
	                                cnpj,
	                                ie,
	                                ddd_tel,
	                                telefone,
	                                ddd_cel,
	                                celular,
	                                email,
	                                logo_clinica,
	                                site)
                           OUTPUT inserted.id_clinica
                           VALUES
	                               (@id_endereco,
                                    @razao_social,
	                                @nome_fantasia,
	                                @cnpj,
	                                @ie,
	                                @ddd_tel,
	                                @telefone,
	                                @ddd_cel,
	                                @celular,
	                                @email,
	                                @logo_clinica,
	                                @site)"    ;

                Conexao.AbrirConexao();
                Conexao.Cmd = new SqlCommand(cmd, Conexao.ConexaoSQL);

                Conexao.Cmd.Parameters.AddWithValue("id_endereco", endereco.id);
                Conexao.Cmd.Parameters.AddWithValue("razao_social", razaoSocial);
                Conexao.Cmd.Parameters.AddWithValue("nome_fantasia", nomeFantasia);
                Conexao.Cmd.Parameters.AddWithValue("cnpj", cnpj);
                Conexao.Cmd.Parameters.AddWithValue("ie", ie);

                Conexao.Cmd.Parameters.AddWithValue("ddd_tel", dddTel);
                Conexao.Cmd.Parameters.AddWithValue("telefone", telefone);
                Conexao.Cmd.Parameters.AddWithValue("ddd_cel", dddCel);
                Conexao.Cmd.Parameters.AddWithValue("celular", celular);
                Conexao.Cmd.Parameters.AddWithValue("email", email);
                Conexao.Cmd.Parameters.AddWithValue("site", site);

                Conexao.Cmd.Parameters.AddWithValue("logo_clinica", logo != null ? ImagemUtil.ImageParaByte(logo) : SqlBinary.Null);

                id = (int)Conexao.Cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                Excecao.Mostrar(ex);
            }
            finally
            {
                Conexao.FecharConexao();
            }
        }
        public void Carregar()
        {
            try
            {
                var cmd = @"SELECT TOP 1
								id_clinica,
								id_endereco,
								razao_social,
								nome_fantasia,
								cnpj,
								ie,
								ddd_tel,
								telefone,
								ddd_cel,
								celular,
								email,
								logo_clinica,
								site
							FROM
								clinica"                                ;

                Conexao.AbrirConexao();
                Conexao.Cmd = new SqlCommand(cmd, Conexao.ConexaoSQL);
                Conexao.Cmd.Parameters.AddWithValue("id", id);

                Conexao.Leitor = Conexao.Cmd.ExecuteReader();

                if (Conexao.Leitor.Read())
                {
                    id           = int.Parse(Conexao.Leitor["id_clinica"].ToString());
                    razaoSocial  = Conexao.Leitor["razao_social"].ToString();
                    nomeFantasia = Conexao.Leitor["nome_fantasia"].ToString();
                    cnpj         = Conexao.Leitor["cnpj"].ToString();
                    ie           = Conexao.Leitor["ie"].ToString();

                    dddTel   = Conexao.Leitor["ddd_tel"].ToString();
                    telefone = Conexao.Leitor["telefone"].ToString();
                    dddCel   = Conexao.Leitor["ddd_cel"].ToString();
                    celular  = Conexao.Leitor["celular"].ToString();
                    email    = Conexao.Leitor["email"].ToString();
                    site     = Conexao.Leitor["site"].ToString();

                    endereco = new EnderecoModel
                    {
                        id = int.Parse(Conexao.Leitor["id_endereco"].ToString())
                    };

                    if (Conexao.Leitor["logo_clinica"] != DBNull.Value)
                    {
                        logo = ImagemUtil.ByteParaImage(Conexao.Leitor["logo_clinica"]);
                    }
                }
            }
            catch (Exception ex)
            {
                Excecao.Mostrar(ex);
            }
            finally
            {
                Conexao.FecharConexao();
            }

            endereco.Carregar();
        }