public void Add(Orcamento orcamento) { // Iniciando Transação var connection = ((IObjectContextAdapter)context).ObjectContext.Connection; connection.Open(); using (System.Data.Common.DbTransaction transaction = connection.BeginTransaction()) { try { // Ajustando timezone das datas orcamento.AjusteDatas(); // Verificando se é um pedido com orçamento importado bool orcamentoImportado = orcamento.Id != 0 && orcamento.TipoPedido == "Pedido"; if (!orcamentoImportado) { orcamento.Id = rep.GetMaxId(x => x.Id); } List <Venda> vendas = new List <Venda>(); if (orcamento.TipoPedido == "Pedido") { int vendaId = orcamento.Id; int vendaGrupo = 0; foreach (var item in orcamento.Venda) { for (int i = 1; i <= item.Plano; i++) { Venda vendaItem = new Venda { Id = vendaId, Grupo = vendaGrupo, Parcela = i, ValorPago = 0, ValorParcela = item.ValorParcela }; vendaItem.DataRecebimento = DateTime.Now.AddDays(item.Natureza.NaturezaParcelas.Where(x => x.Parcela == vendaItem.Parcela).First().DiasVencimento); vendaItem.DataPagamento = DateTime.Now; vendaItem.NaturezaId = item.NaturezaId; vendaItem.Natureza = null; vendaItem.Plano = item.Plano; vendaItem.ValorPago = vendaItem.ValorParcela; vendas.Add(vendaItem); } vendaGrupo++; } orcamento.Venda = vendas; orcamento.Entrega.Id = repEntrega.GetMaxId(x => x.Id); orcamento.DataPedido = DateTime.Now; AtualizandoEstoque(orcamento); ValidarOrcamento(orcamento); } else { orcamento.Entrega = null; ValidarOrcamento(orcamento); // orcamento.DataEvento = DateTime.Now; } orcamento.DataDevolvido = null; orcamento.Cliente = null; orcamento.TipoEntrega = null; orcamento.DataCadastro = DateTime.Now; foreach (var item in orcamento.OrcamentoProduto) { item.Id = orcamento.Id; } if (orcamentoImportado) { repVenda.AddRange(orcamento.Venda); rep.Update(orcamento); } else { rep.Add(orcamento); } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); throw ex; } } }