public void AtualizarEntregavel(EntregavelDTO entregavel_)
        {
            ContratoEntregavel entregavel = db.ContratoEntregavel.Where(_ => _.IdContratoEntregavel == entregavel_.Id)?.FirstOrDefault();

            if (entregavel != null)
            {
                entregavel.DsProduto = entregavel_.Nome;
                entregavel.DtProduto = entregavel_.DataPrevista;
                entregavel.IdFrente  = entregavel_.Frente.Id;

                if (entregavel_.Situacao.Id == 89 || entregavel_.Situacao.Id == 90 || entregavel_.Situacao.Id == 91)
                {
                    entregavel.IdSituacao = entregavel_.Situacao.Id;
                    entregavel.IcAtraso   = false;
                }
                else
                {
                    if (entregavel_.DataPrevista != null)
                    {
                        if (entregavel_.DataPrevista.Value.Date < DateTime.Now.Date)
                        {
                            entregavel.IdSituacao = 68;
                            entregavel.IcAtraso   = true;
                        }
                        else
                        {
                            if (entregavel_.Situacao.Id == 68 || entregavel_.Situacao.Id == 97)
                            {
                                entregavel.IdSituacao = 56;
                                entregavel.IcAtraso   = false;
                            }
                            else
                            {
                                entregavel.IdSituacao = entregavel_.Situacao.Id;
                                entregavel.IcAtraso   = false;
                            }
                        }
                    }
                    else
                    {
                        entregavel.IdSituacao = entregavel_.Situacao.Id;
                        entregavel.IcAtraso   = false;
                    }
                }
                entregavel.VlOrdem           = entregavel_.Numero;
                entregavel.IdContratoCliente = entregavel_.Cliente.Id;

                db.SaveChanges();
            }
        }
        public void ExcluirEntregavel(int idEntregavel_)
        {
            ContratoEntregavel entregavel = db.ContratoEntregavel.Where(_ => _.IdContratoEntregavel == idEntregavel_)?.FirstOrDefault();

            if (entregavel != null)
            {
                var colParcelaEntregavel = db.ContratoParcelaEntregavel.Where(_ => _.IdEntregavel == entregavel.IdContratoEntregavel)?.ToList();

                if (colParcelaEntregavel != null)
                {
                    colParcelaEntregavel.ForEach(_ => db.ContratoParcelaEntregavel.Remove(_));
                }

                db.ContratoEntregavel.Remove(entregavel);
                db.SaveChanges();
            }
        }
        public void AplicarAditivo(InputAplicarAditivo inputAplicarAditivo)
        {
            var aditivo  = db.ContratoAditivo.FirstOrDefault(_ => _.IdContratoAditivo == inputAplicarAditivo.IdAditivo);
            var contrato = db.Contrato.FirstOrDefault(_ => _.IdContrato == aditivo.IdContrato);

            if (aditivo.IcAditivoData != null)
            {
                contrato.DtFim = aditivo.DtFimAditivada;
            }
            if (aditivo.IcAditivoValor != null)
            {
                contrato.VlContrato = aditivo.VlContratoAditivado.GetValueOrDefault();
            }

            aditivo.DtAplicacao          = DateTime.Now;
            aditivo.IdUsuarioAplicacao   = AppSettings.constGlobalUserID;
            aditivo.DtIniExecucaoAditivo = DateTime.Now;
            aditivo.IdSituacao           = 101;

            var lstContratoCronogramaFinanceiroAntigos = db.ContratoCronogramaFinanceiro.Where(w => w.IdContrato == contrato.IdContrato).ToList();
            var lstContratoEntregaveisAntigos          = db.ContratoEntregavel.Where(w => w.IdContrato == contrato.IdContrato).ToList();

            var lstContratoCronogramaFinanceiroTemporaria = db.ContratoCronogramaFinanceiroTemporaria.Where(w => w.IdContrato == contrato.IdContrato).ToList();
            var lstEntregaveisTemporaria = db.ContratoEntregavelTemporaria.Where(w => w.IdContrato == contrato.IdContrato).ToList();

            foreach (var entregavelTemp in lstEntregaveisTemporaria)
            {
                var contratoEntregavel = new ContratoEntregavel();
                contratoEntregavel.IdContrato        = entregavelTemp.IdContrato;
                contratoEntregavel.DsProduto         = entregavelTemp.DsProduto;
                contratoEntregavel.DtProduto         = entregavelTemp.DtProduto;
                contratoEntregavel.IdContratoCliente = entregavelTemp.IdContratoCliente.Value;
                contratoEntregavel.IdFrente          = entregavelTemp.IdFrente;
                contratoEntregavel.IdSituacao        = entregavelTemp.IdSituacao;
                contratoEntregavel.VlOrdem           = entregavelTemp.VlOrdem;

                db.ContratoEntregavel.Add(contratoEntregavel);
                db.SaveChanges();

                entregavelTemp.IdEntregavel = contratoEntregavel.IdContratoEntregavel;
            }

            foreach (var parcelaTemp in lstContratoCronogramaFinanceiroTemporaria)
            {
                var contratoCronogramaFinanceiro = new ContratoCronogramaFinanceiro();
                contratoCronogramaFinanceiro.CdIss = parcelaTemp.CdIss;
                // Retorna somente os dois ultimos caracteres do Código da Parcela
                string codigoReajusteParcela = parcelaTemp.CdParcela.Substring(parcelaTemp.CdParcela.Length - 2, 2);
                // Remove os dois ultimos caracteres do Código da Parcela
                parcelaTemp.CdParcela = parcelaTemp.CdParcela.Remove(parcelaTemp.CdParcela.Length - 2, 2);
                // Soma 1 nos dois ultimos caracteres do Código da Parcela
                int novoCdReajusteParcela = Convert.ToInt32(codigoReajusteParcela) + 1;
                codigoReajusteParcela  = novoCdReajusteParcela.ToString().Length > 1 ? novoCdReajusteParcela.ToString() : "0" + novoCdReajusteParcela.ToString();
                parcelaTemp.CdParcela += codigoReajusteParcela;
                contratoCronogramaFinanceiro.CdParcela         = parcelaTemp.CdParcela;
                contratoCronogramaFinanceiro.DsTextoCorpoNf    = parcelaTemp.DsTextoCorpoNf;
                contratoCronogramaFinanceiro.DtFaturamento     = parcelaTemp.DtFaturamento;
                contratoCronogramaFinanceiro.DtNotaFiscal      = parcelaTemp.DtNotaFiscal;
                contratoCronogramaFinanceiro.IdContratoCliente = parcelaTemp.IdContratoCliente;
                contratoCronogramaFinanceiro.IdSituacao        = parcelaTemp.IdSituacao;
                contratoCronogramaFinanceiro.NuNotaFiscal      = parcelaTemp.NuNotaFiscal;
                contratoCronogramaFinanceiro.NuParcela         = parcelaTemp.NuParcela;
                contratoCronogramaFinanceiro.VlParcela         = parcelaTemp.VlParcela;
                contratoCronogramaFinanceiro.IcAtraso          = parcelaTemp.IcAtraso;
                contratoCronogramaFinanceiro.IdContrato        = parcelaTemp.IdContrato;
                contratoCronogramaFinanceiro.IdFrente          = parcelaTemp.IdFrente;

                db.ContratoCronogramaFinanceiro.Add(contratoCronogramaFinanceiro);
                db.SaveChanges();

                // Busca os Registros na Tabela ContratoParcelaEntregavelTemporaria para verificar se a Parcela estava ligada com Entregaveis
                var lstContratoParcelaEntregavelTemp = db.ContratoParcelaEntregavelTemporaria.Where(w => w.IdParcela == parcelaTemp.IdContratoCronFinanceiro).ToList();
                if (lstContratoParcelaEntregavelTemp.Count > 0)
                {
                    foreach (var contratoParcEntreTemp in lstContratoParcelaEntregavelTemp)
                    {
                        // Busca o registro na tabela ContratoEntregavelTemporaria
                        var contratoEntregavelTemp = lstEntregaveisTemporaria.Where(w => w.IdContratoEntregavel == contratoParcEntreTemp.IdEntregavel).FirstOrDefault();
                        if (contratoEntregavelTemp != null)
                        {
                            // Com o ContratoEntregavel e a Parcela , cria um novo registro na tabela ContratoEntregavelParcela
                            var contratoParcelaEntregavel = new ContratoParcelaEntregavel();
                            contratoParcelaEntregavel.IdEntregavel = contratoEntregavelTemp.IdEntregavel.Value;
                            contratoParcelaEntregavel.IdParcela    = contratoCronogramaFinanceiro.IdContratoCronFinanceiro;

                            db.ContratoParcelaEntregavel.Add(contratoParcelaEntregavel);
                            db.SaveChanges();
                        }

                        // Após copiar o relacionamento entre Parcela e Entregavel remove o registro
                        db.ContratoParcelaEntregavelTemporaria.Remove(contratoParcEntreTemp);
                        db.SaveChanges();
                    }
                }

                // Após copiar a Parcela , exclui da tabela Temporaria
                db.ContratoCronogramaFinanceiroTemporaria.Remove(parcelaTemp);
                db.SaveChanges();
            }

            // Remove todos os registros de EntregaveisTemporaria do devido Contrato
            db.ContratoEntregavelTemporaria.RemoveRange(lstEntregaveisTemporaria);
            db.SaveChanges();

            // Busca todas as relações antigas entre Parcela e Entregavel e exclui
            foreach (var entregavelAntigo in lstContratoEntregaveisAntigos)
            {
                var lstParcelaEntregavelAntigo = db.ContratoParcelaEntregavel.Where(w => w.IdEntregavel == entregavelAntigo.IdContratoEntregavel).ToList();
                if (lstParcelaEntregavelAntigo.Count > 0)
                {
                    db.ContratoParcelaEntregavel.RemoveRange(lstParcelaEntregavelAntigo);
                    db.SaveChanges();
                }
            }

            // Remove todos Registros de Entregaveis e Parcelas antigos (salvos no histórico)
            db.ContratoEntregavel.RemoveRange(lstContratoEntregaveisAntigos);
            db.ContratoCronogramaFinanceiro.RemoveRange(lstContratoCronogramaFinanceiroAntigos);

            db.SaveChanges();
        }