/// <summary>
        /// Metodo responsavel por consultar uma Parcela.
        /// </summary>
        /// <param name="id">Id a ser consultado.</param>
        /// <returns>retorna um HistoricoParcela com o Id informado.</returns>
        public HistoricoParcela Consultar(int id)
        {
            UtilBD           banco            = new UtilBD();
            SqlConnection    conexao          = banco.ObterConexao();
            HistoricoParcela historicoParcela = null;

            try
            {
                SqlCommand    comando = new SqlCommand(QUERY_SELECT_ID, conexao);
                SqlDataReader resultado;
                comando.Parameters.AddWithValue("@Id", id);
                conexao.Open();

                resultado = comando.ExecuteReader();
                resultado.Read();
                if (resultado.HasRows)
                {
                    historicoParcela = this.CriarHistoricoParcela(resultado);
                }

                resultado.Close();
            }

            catch (SqlException e)
            {
                throw new ErroBanco(e.Message);
            }
            finally
            {
                banco.FecharConexao(conexao);
            }

            return(historicoParcela);
        }
        /// <summary>
        /// Metodo para montar uma Parcela recebendo um SqlDataReader como parametro.
        /// </summary>
        /// <param name="resultado">SqlDataReader</param>
        /// <returns>Retorna um HistoricoParcela</returns>
        private HistoricoParcela CriarHistoricoParcela(SqlDataReader resultado)
        {
            HistoricoParcela historicoParcela = new HistoricoParcela();

            if (resultado["Id"] != DBNull.Value)
            {
                historicoParcela.ParcelaHistorico.Id = Convert.ToInt32(resultado["Id"]);
            }
            if (resultado["DataPagamento"] != DBNull.Value)
            {
                historicoParcela.ParcelaHistorico.DataPagamento = Convert.ToDateTime(resultado["DataPagamento"]);
            }
            if (resultado["DataVencimento"] != DBNull.Value)
            {
                historicoParcela.ParcelaHistorico.DataVencimento = Convert.ToDateTime(resultado["DataVencimento"]);
            }
            if (resultado["Valor"] != DBNull.Value)
            {
                historicoParcela.ParcelaHistorico.Valor = Convert.ToDecimal(resultado["Valor"]);
            }
            if (resultado["NumeroParcela"] != DBNull.Value)
            {
                historicoParcela.ParcelaHistorico.NumeroParcela = Convert.ToInt32(resultado["NumeroParcela"]);
            }
            if (resultado["Status"] != DBNull.Value)
            {
                historicoParcela.ParcelaHistorico.Status = (StatusControle)Convert.ToInt32(resultado["Status"]);
            }
            if (resultado["Status"] != DBNull.Value)
            {
                historicoParcela.ParcelaHistorico.Status = (StatusControle)Convert.ToInt32(resultado["Status"]);
            }

            if (resultado["ParcelaId"] != DBNull.Value)
            {
                historicoParcela.Parcela.Id = Convert.ToInt32(resultado["ParcelaId"]);
            }
            if (resultado["DataAlteracao"] != DBNull.Value)
            {
                historicoParcela.DataAlteracao = Convert.ToDateTime(resultado["DataAlteracao"]);
            }
            if (resultado["UsuarioId"] != DBNull.Value)
            {
                historicoParcela.Usuario.Id = Convert.ToInt32(resultado["UsuarioId"]);
            }
            if (resultado["Descricao"] != DBNull.Value)
            {
                historicoParcela.Descricao = Convert.ToString(resultado["Descricao"]);
            }
            if (resultado["ContratoId"] != DBNull.Value)
            {
                historicoParcela.Parcela.ContratoId = Convert.ToInt32(resultado["ContratoId"]);
            }


            return(historicoParcela);
        }
        /// <summary>
        /// Metodo responsavel por alterar uma Parcela.
        /// </summary>
        /// <param name="plano">Objeto do tipo Parcela a ser alterado</param>
        /// <param name="ContratoId">Id do Contrato da Parcela.</param>
        /// <exception cref="ExecaoNegocio">Lançara a ExecaoNegocio caso o objeto seja nulo ou a Parcela não seja encontrada.</exception>
        public void Alterar(Parcela parcela, Usuario usuario)
        {
            Parcela parcelaAntiga = this.Consultar(parcela.Id);

            if (parcelaAntiga != null && parcela != null)
            {
                this.repParcela.Alterar(parcela);
            }
            else
            {
                throw new ExcecaoNegocio("Parcela não existente.");
            }

            HistoricoParcela hp = new HistoricoParcela();

            hp.DataAlteracao = new DateTime();

            string descricao = "Alterado\n";

            if (parcelaAntiga.Valor != parcela.Valor)
            {
                descricao += "Valor\n";
            }
            if (parcelaAntiga.Status != parcela.Status)
            {
                descricao += "Status\n";
            }
            if (parcelaAntiga.NumeroParcela != parcela.NumeroParcela)
            {
                descricao += "Numero da Parcela\n";
            }
            if (parcelaAntiga.DataVencimento != parcela.DataVencimento)
            {
                descricao += "Data de Vencimento\n";
            }
            if (parcelaAntiga.DataPagamento != parcela.DataPagamento)
            {
                descricao += "Data de Pagamento\n";
            }
            hp.DataAlteracao    = DateTime.Now;
            hp.Usuario          = usuario;
            hp.Descricao        = descricao;
            hp.ParcelaHistorico = parcela;
            hp.Parcela          = parcela;

            this.InserirHistorico(hp);
        }
        /// <summary>
        /// Metodo responsavel por inserir uma Parcela.
        /// </summary>
        /// <param name="parcela">Objeto do tipo Parcela a ser inserido</param>
        /// <param name="ContratoId">Id do Contrato da Parcela.</param>
        /// <param name="usuario">Usuario que inserio a Parcela.</param>
        /// <exception cref="ExecaoNegocio">Lançara a ExecaoNegocio caso o objeto seja nulo.</exception>
        /// <returns>retorna o Parcela inserido.</returns>
        public Parcela Inserir(Parcela parcela, Usuario usuario)
        {
            if (parcela == null)
            {
                throw new ExcecaoNegocio("Valor Inválido.");
            }
            Parcela p = this.repParcela.Inserir(parcela);

            HistoricoParcela hp = new HistoricoParcela();

            hp.DataAlteracao    = new DateTime();
            hp.DataAlteracao    = DateTime.Now;
            hp.Usuario          = usuario;
            hp.Descricao        = "Inserido";
            hp.ParcelaHistorico = p;
            hp.Parcela          = p;

            this.InserirHistorico(hp);
            return(p);
        }
        /// <summary>
        /// Metodo responsavel por inserir um Historico da Parcela.
        /// </summary>
        /// <param name="historicoParcela">Objeto do tipo HistoricoParcela a ser inserido</param>
        /// <param name="ContratoId">Id do Contrato do Historico da Parcela.</param>
        /// <returns>retorna o HistoricoParcela inserido.</returns>
        public HistoricoParcela Inserir(HistoricoParcela historicoParcela)
        {
            UtilBD        banco   = new UtilBD();
            SqlConnection conexao = banco.ObterConexao();

            try
            {
                SqlCommand comando;
                if (historicoParcela.ParcelaHistorico.DataPagamento != null)
                {
                    comando = new SqlCommand(QUERY_INSERT_1, conexao);
                    comando.Parameters.AddWithValue("@DataPagamento", historicoParcela.ParcelaHistorico.DataPagamento);
                }
                else
                {
                    comando = new SqlCommand(QUERY_INSERT_2, conexao);
                }
                comando.Parameters.AddWithValue("@DataVencimento", historicoParcela.ParcelaHistorico.DataVencimento);
                comando.Parameters.AddWithValue("@Valor", historicoParcela.ParcelaHistorico.Valor);
                comando.Parameters.AddWithValue("@NumeroParcela", historicoParcela.ParcelaHistorico.NumeroParcela);
                comando.Parameters.AddWithValue("@Status", (int)historicoParcela.ParcelaHistorico.Status);
                comando.Parameters.AddWithValue("@ContratoId", historicoParcela.ParcelaHistorico.ContratoId);
                comando.Parameters.AddWithValue("@ParcelaId", historicoParcela.Parcela.Id);
                comando.Parameters.AddWithValue("@DataAlteracao", historicoParcela.DataAlteracao);
                comando.Parameters.AddWithValue("@UsuarioId", historicoParcela.Usuario.Id);
                comando.Parameters.AddWithValue("@Descricao", historicoParcela.Descricao);
                conexao.Open();
                int regitrosAfetados = comando.ExecuteNonQuery();
                //historicoParcela.ParcelaHistorico.Id = this.ObterMaximoId();
            }
            catch (SqlException e)
            {
                throw new ErroBanco(e.Message);
            }
            finally
            {
                banco.FecharConexao(conexao);
            }
            return(historicoParcela);
        }
 /// <summary>
 /// Metodo responsavel por montar um HistoricoParcela.
 /// </summary>
 /// <param name="historicoTitular">HistoricoParcela a ser montado.</param>
 /// <returns>HistoricoParcela.</returns>
 private HistoricoParcela MontarHistoricoParcela(HistoricoParcela historicoParcela)
 {
     historicoParcela.Parcela = this.Consultar(historicoParcela.Parcela.Id);
     return(historicoParcela);
 }
 /// <summary>
 /// Metodo responsavel por inserir um Historico da Parcela.
 /// </summary>
 /// <param name="historicoParcela">Objeto do tipo HistoricoParcela a ser inserido</param>
 /// <param name="ContratoId">Id do Contrato do Historico da Parcela.</param>
 /// <returns>retorna o HistoricoParcela inserido.</returns>
 private HistoricoParcela InserirHistorico(HistoricoParcela historicoParcela)
 {
     return(this.repHistoricoParcela.Inserir(historicoParcela));
 }