public void AddPedidoComUmItem() { var pedidoService = new PedidoService(new PedidoRepositoryMok(), new NotificationContext(), new PedidoNotificationMessages()); var pedidoItem = new PedidoItem(); pedidoItem.Descricao = "Item 4"; pedidoItem.PedidoId = 0; pedidoItem.PrecoUnitario = 12; pedidoItem.Quantidade = 3; var pedido = new Pedido(0, 8547, new List <PedidoItem>() { pedidoItem }); var result = pedidoService.AddAsync(pedido).Result; Assert.Equal(1, result.Id); Assert.Equal(1, pedido.PedidoItems.FirstOrDefault().Id); }
public string Inserir(PedidoItem pedidoItem) { try { acessoDados.LimparParametros(); acessoDados.AdicionarParametros("@IdPedido", pedidoItem.Pedido.IdPedido); acessoDados.AdicionarParametros("@IdProduto", pedidoItem.Produto.IdProduto); acessoDados.AdicionarParametros("@Quantidade", pedidoItem.Quantidade); acessoDados.AdicionarParametros("@ValorUnitario", pedidoItem.ValorUnitario); acessoDados.AdicionarParametros("@PercentualDesconto", pedidoItem.PercentualDesconto); acessoDados.AdicionarParametros("@ValorDesconto", pedidoItem.ValorDesconto); acessoDados.AdicionarParametros("@ValorTotal", pedidoItem.ValorTotal); string idProduto = acessoDados.ExecutarManipulacao(CommandType.StoredProcedure, "uspPedidoItemInserir").ToString(); return(idProduto); } catch (Exception e) { return(e.Message); } }
public void AtualizarItemPedido_PedidoComValorDiferente_DeveAtualizarValorTotal() { //Arrange var pedido = Pedido.PedidoFactory.NovoPedidoRascunho(Guid.NewGuid()); var itemId = Guid.NewGuid(); var itemPedido1 = new PedidoItem(Guid.NewGuid(), "Caderno", 2, 20); var itemPedido2 = new PedidoItem(itemId, "Mochila", 3, 50); pedido.AdicionarItem(itemPedido1); pedido.AdicionarItem(itemPedido2); var itemPedidoAtualizar = new PedidoItem(itemId, "Mochila", 3, 100); var novoValorTotal = itemPedidoAtualizar.ValorUnitario * itemPedidoAtualizar.Quantidade + itemPedido1.ValorUnitario * itemPedido1.Quantidade; //Act pedido.AtualizarItem(itemPedidoAtualizar); //Assert Assert.Equal(novoValorTotal, pedido.ValorTotal); }
private void ValidarCadastro(PedidoItem item) { if (item.idProduto <= 0) { _response.Status = Utils.Enums.StatusResponse.Warning; _response.ErrorMessage.Add("Produto Deve ser infromado."); } if (item.Quantidade <= 0) { _response.Status = Utils.Enums.StatusResponse.Warning; _response.ErrorMessage.Add("Quantidade informada é invalida."); } if (item.ValorUnitario <= 0) { _response.Status = Utils.Enums.StatusResponse.Warning; _response.ErrorMessage.Add("Valor unitário informada é invalida."); } }
public async Task AdicionarItem_ItemExistenteAoPedidoRascunho_DeveExecutarComSucesso() { // Arrange var pedidoItemExistente = new PedidoItem(_produtoId, "Produto Xpto", 2, 100); _pedido.AdicionarItem(pedidoItemExistente); var pedidoCommand = new AdicionaItemPedidoCommand(_clienteId, _produtoId, "Produto Xpto", 2, 100); _mocker.GetMock <IPedidoRepository>().Setup(r => r.UnitOfWork.Commit()).Returns(Task.FromResult(true)); _mocker.GetMock <IPedidoRepository>().Setup(r => r.ObterPedidoRascunhoPorCliente(_clienteId)).Returns(Task.FromResult(_pedido)); // Act var result = await _pedidoHandle.Handle(pedidoCommand, CancellationToken.None); // Assert Assert.True(result); _mocker.GetMock <IPedidoRepository>().Verify(x => x.AtualizarItem(It.IsAny <PedidoItem>()), Times.Once); _mocker.GetMock <IPedidoRepository>().Verify(x => x.Atualizar(It.IsAny <Pedido>()), Times.Once); _mocker.GetMock <IPedidoRepository>().Verify(x => x.UnitOfWork.Commit(), Times.Once); }
public void AtualizarItemPedido_PedidoComProdutosDiferentes_DeveAtualizarValorTotal() { // Arrange var produto1Id = Guid.NewGuid(); var pedidoItem1 = new PedidoItem(produto1Id, "Produto Teste", 2, 100); var pedidoItem2 = new PedidoItem(Guid.NewGuid(), "Produto Teste 2 ", 4, 100); _pedido.AdicionarItem(pedidoItem1); _pedido.AdicionarItem(pedidoItem2); var pedidoItem1Atualizado = new PedidoItem(produto1Id, "Produto Teste", 5, 100); var totalPedido = (pedidoItem2.Quantidade * pedidoItem2.ValorUnitario) + (pedidoItem1Atualizado.Quantidade * pedidoItem1Atualizado.ValorUnitario); //Act _pedido.AtualizarItem(pedidoItem1Atualizado); // Act - Aseert Assert.Equal(totalPedido, _pedido.ValorTotal); }
public void Atualizar_AtualizarQuantidadeItems_DeveAtualizarQuantidadeItems() { //Arrange var produtoId = Guid.NewGuid(); var pedido = Pedido.PedidoFactory.NovoPedidoRascunho(Guid.NewGuid()); var pedidoItem = new PedidoItem(produtoId, "Serra", 1, 100); pedido.AdicionarPedido(pedidoItem); var pedidoItemAtualizado = new PedidoItem(produtoId, "Serra", 2, 100); pedido.AdicionarPedido(pedidoItemAtualizado); var novaQuantidade = pedidoItemAtualizado.Quantidade; //Act pedido.AtualizarItem(pedidoItemAtualizado); //Assert Assert.Equal(novaQuantidade, pedido.PedidoItems. FirstOrDefault(i => i.ProdutoId == produtoId) .Quantidade); }
public void TesteRealizaICMSQuandoEstadosDiferentesECfopDiferenteDe6009() { NotaFiscalItem notaFiscalItem = new NotaFiscalItem(); PedidoItem pedidoItem = new PedidoItem(); Pedido pedido = new Pedido(); pedido.EstadoOrigem = "SP"; pedido.EstadoDestino = "MG"; pedidoItem.ValorItemPedido = 1000.00; notaFiscalItem.Cfop = CFOP.Realiza("SP", "MG"); ICMS.Calcula(pedidoItem, pedido, notaFiscalItem); Assert.Equal("10", notaFiscalItem.TipoIcms); Assert.Equal(0.17, notaFiscalItem.AliquotaIcms); Assert.Equal(1000.00, notaFiscalItem.BaseIcms); Assert.Equal(170, notaFiscalItem.ValorIcms); }
public void AdicionarItemPedido_ItemExistente_DeveIncrementarUnidadesSomarValores() { // Arrange var pedido = Pedido.PedidoFactory.NovoPedidoRascunho(Guid.NewGuid()); var produtoId = Guid.NewGuid(); var pedidoItem = new PedidoItem(produtoId, "Produto Teste", 2, 100); pedido.AdicionarItem(pedidoItem); var pedidoItem2 = new PedidoItem(produtoId, "Produto Teste", 1, 100); // Act pedido.AdicionarItem(pedidoItem2); // Assert Assert.Equal(300, pedido.ValorTotal); Assert.Equal(1, pedido.PedidoItems.Count); Assert.Equal(3, pedido.PedidoItems.FirstOrDefault(p => p.ProdutoId == produtoId).Quantidade); }
public void AtualizarItemPedido_PedidoComProdutosDiferentes_DeveAtualizarValorTotal() { // Arrange var pedido = Pedido.PedidoFactory.NovoPedidoRascunho(Guid.NewGuid()); var produtoId = Guid.NewGuid(); var pedidoItemExistente1 = new PedidoItem(Guid.NewGuid(), "Produto Teste", 2, 100); var pedidoItemExistente2 = new PedidoItem(produtoId, "Produto Teste", 3, 15); pedido.AdicionarItem(pedidoItemExistente1); pedido.AdicionarItem(pedidoItemExistente2); var pedidoItemAtualizado = new PedidoItem(produtoId, "Produto Teste", 5, 100); var totalPedido = (pedidoItemExistente1.Quantidade * pedidoItemExistente1.ValorUnitario) + (pedidoItemAtualizado.Quantidade * pedidoItemAtualizado.ValorUnitario); // Act pedido.AtualizarItem(pedidoItemAtualizado); // Assert Assert.Equal(totalPedido, pedido.ValorTotal); }
public async Task <bool> Handle(AdicionarItemPedidoCommand message, CancellationToken cancellationToken) { if (!ValidarComando(message)) { return(false); } var pedido = await _pedidoRepository.ObterPedidoRascunhoPorClienteId(message.ClienteId); var pedidoItem = new PedidoItem(message.ProdutoId, message.Nome, message.Quantidade, message.ValorUnitario); if (pedido == null) { pedido = Pedido.PedidoFactory.NovoPedidoRascunho(message.ClienteId); pedido.AdicionarItem(pedidoItem); _pedidoRepository.Adicionar(pedido); pedido.AdicionarEvento(new PedidoRascunhoIniciadoEvent(pedido.ClienteId, pedido.Id)); } else { var pedidoItemExistente = pedido.PedidoItemExistente(pedidoItem); pedido.AdicionarItem(pedidoItem); if (pedidoItemExistente) { _pedidoRepository.AtualizarItem(pedido.PedidoItens.FirstOrDefault(p => p.ProdutoId == pedidoItem.ProdutoId)); } else { _pedidoRepository.AdicionarItem(pedidoItem); } _pedidoRepository.Atualizar(pedido); } pedido.AdicionarEvento(new PedidoItemAdicionadoEvent(pedido.ClienteId, pedido.Id, message.ProdutoId, message.Nome, message.ValorUnitario, message.Quantidade)); return(await _pedidoRepository.UnitOfWork.Commit()); }
private void btnAdd_Click(object sender, System.EventArgs e) { try { if (CheckDuplicates()) { int quantity = Convert.ToInt32(txtQuantity.Text); _lineValue = _item.PrecoVenda * quantity; txtNoDiscountValue.Text = SumValue(_item.PrecoVenda); _order = new Pedido(_company, _company.Id, dtpOrder.Value, dtpDelivery.Value, Convert.ToDecimal(txtNoDiscountValue.Text), _orderItems); _orderItem = new PedidoItem(_item.Id, quantity, _lineValue, _item, _order.Id); _orderItems.Add(_orderItem); if (txtDescription.Text != String.Empty) { dgvItemList.Rows.Add(_item.Id, _item.Descricao, quantity, _lineValue); btnRemove.Enabled = true; btnCancel.Enabled = true; btnMakeOrder.Enabled = true; btnAdd.Enabled = false; } else { throw new Exception("Quantidade de itens deve ser maior que 0"); } } else { throw new Exception("Este item já foi adicionado."); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro inesperado", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public string Inserir(PedidoItem pedidoItem) { try { acessoDadosSqlServer.LimparParametros(); acessoDadosSqlServer.AdicionarParametros("@IdPedido", pedidoItem.Pedido.IdPedido); acessoDadosSqlServer.AdicionarParametros("@IdProduto", pedidoItem.Produto.IdProduto); acessoDadosSqlServer.AdicionarParametros("@QtdProduto", pedidoItem.QtdProduto); acessoDadosSqlServer.AdicionarParametros("@ValorUn", pedidoItem.ValorUn); acessoDadosSqlServer.AdicionarParametros("@PorcentualDesconto", pedidoItem.PorcentualDesconto); acessoDadosSqlServer.AdicionarParametros("@ValorDesconto", pedidoItem.ValorDesconto); acessoDadosSqlServer.AdicionarParametros("@ValorTotal", pedidoItem.ValorTotal); string idProduto = acessoDadosSqlServer.ExecutarManipulacao(CommandType.StoredProcedure, "uspPedidoItemInserir").ToString(); return(idProduto); } catch (Exception exception) { return(exception.Message); } }
public void DeveFazerAlgumaCoisa() { // Arrange var pedido = new Pedido(Guid.NewGuid()); var produtoId = Guid.NewGuid(); var pedidoItem = new PedidoItem(produtoId, "teste", 3, 100); pedido.AdicionarItem(pedidoItem); var pedidoAtualizado = new PedidoItem(produtoId, "teste", 2, 100); // Act pedido.AtualizarItem(pedidoAtualizado); // Assert pedido.Itens.First(x => x.ProdutoId == produtoId) .Quantidade .Should() .Be(pedidoAtualizado.Quantidade, "deve atualizar o item baseado no novo item passado"); }
public void AdicionarItemPedido_ItemExistente_DeveIncrementarItem() { //arrange var produtoId = Guid.NewGuid(); var pedido = new Pedido(); var pedidoItem = new PedidoItem(produtoId, "Produto teste", 2, 150); pedido.AdicionarItem(pedidoItem); var pedidoItem2 = new PedidoItem(produtoId, "Produto teste 2", 2, 150); //act pedido.AdicionarItem(pedidoItem2); //assert Assert.Equal(600, pedido.ValorTotal); Assert.Equal(1, pedido.PedidoItems.Count); Assert.Equal(600, pedido.PedidoItems.First().ValorUnitario *pedido.PedidoItems.First().Quantidade); }
public void AplicarVoucher_VoucherTipoValorDesconto_DeveDescontarDoValorTotal() { // Arrange var pedido = Pedido.PedidoFactory.NovoPedidoRascunho(Guid.NewGuid()); var pedidoItem1 = new PedidoItem(Guid.NewGuid(), "Produto Xpto", 2, 100); var pedidoItem2 = new PedidoItem(Guid.NewGuid(), "Produto Teste", 3, 15); pedido.AdicionarItem(pedidoItem1); pedido.AdicionarItem(pedidoItem2); var voucher = new Voucher("PROMO-15-REAIS", null, 15, 1, TipoDescontoVoucher.Valor, DateTime.Now.AddDays(15), true, false); var valorComDesconto = pedido.ValorTotal - voucher.ValorDesconto; // Act pedido.AplicarVoucher(voucher); // Assert Assert.Equal(valorComDesconto, pedido.ValorTotal); }
public async Task AdicionarPedido_ClienteCadastrado_DeveAdicionarComSucesso() { //Arrange var listPedidoItens = new List <PedidoItem>(); var clienteId = 1; var prod4Valor = await _repositoryProduto.FindById(4); var pedidoItem = new PedidoItem(0, 1, false, 0, prod4Valor.Valor); listPedidoItens.Add(pedidoItem); var pedido = new Domain.Entities.AgregacaoPedido.Pedido(clienteId, 0, listPedidoItens); //Act var result = await _repository.SaveAsync(pedido); //Assert Assert.True(result.Id > 0); }
private ICollection <PedidoItem> ObterPedidoItemSet(PedidoDTO pedidoDto) { var pedidoItemSet = new List <PedidoItem>(); foreach (var itemPedidoDto in pedidoDto.ItensPedido) { var produtoFornecedor = ObterProdutoFornecedor(itemPedidoDto); var itemPedido = new PedidoItem { DataCriacao = DateTime.Now, CodigoFornecedor = produtoFornecedor.CodigoFornecedor, CodigoProduto = produtoFornecedor.CodigoProduto, Quantidade = itemPedidoDto.Quantidade, PrecoCliente = produtoFornecedor.PrecoVenda, PrecoFornecedor = produtoFornecedor.PrecoFornecedor }; pedidoItemSet.Add(itemPedido); } return(pedidoItemSet); }
public void TesteRealizaICMSQuandoCFOPIgualA6009ComBrindOuMesmoEstado() { NotaFiscalItem notaFiscalItem = new NotaFiscalItem(); PedidoItem pedidoItem = new PedidoItem(); Pedido pedido = new Pedido(); pedido.EstadoOrigem = "MG"; pedido.EstadoDestino = "SP"; pedidoItem.ValorItemPedido = 1000.00; pedidoItem.Brinde = true; notaFiscalItem.Cfop = CFOP.Realiza("MG", "SP"); ICMS.Calcula(pedidoItem, pedido, notaFiscalItem); Assert.Equal("60", notaFiscalItem.TipoIcms); Assert.Equal(0.18, notaFiscalItem.AliquotaIcms); Assert.Equal(900, notaFiscalItem.BaseIcms); Assert.Equal(162, notaFiscalItem.ValorIcms); }
public void AdicionarItemNoCarrinhoCompra(int produtoId, int quantidade) { Produto produto = UnitOfWork.ProdutoRepository.GetById(produtoId); PedidoItem pedidoItem = new PedidoItem(Pedido.PedidoId, Pedido, produtoId, produto, quantidade); if (pedidoItem != null) { if (produto.QuantidadeEmEstoque > quantidade) { Pedido.AdicionarItem(pedidoItem); } else { throw new Exception("O número de produto é menor que o estoque"); } } else { throw new Exception("Não foi possível inserir item no carrinho!"); } }
public void Add(string discos) { Pedido pedido = new Pedido(); List <string> lstDiscos = discos.Split(';').ToList(); List <PedidoItem> lstPedidoItem = new List <PedidoItem>(); Db.Set <Pedido>().Add(pedido); Db.SaveChanges(); int idPedido = pedido.Id; double t = 0; double tc = 0; foreach (string id in lstDiscos) { Disco di = Db.Set <Disco>().Find(id); PedidoItem pedidoItem = new PedidoItem(); pedidoItem.Valor = CashBack.Preco(di.Genero); pedidoItem.CashBack = CashBack.Calcular(di.Genero); pedidoItem.IdDisco = di.Id; pedidoItem.IdPedido = idPedido; t += di.Preco; tc += pedidoItem.CashBack; lstPedidoItem.Add(pedidoItem); } pedido.Total = t; pedido.TotalCashBack = tc; pedido.DataPedido = DateTime.Now; Db.Entry(pedido).State = Microsoft.EntityFrameworkCore.EntityState.Modified; Db.SaveChanges(); Db.Set <PedidoItem>().AddRange(lstPedidoItem); Db.SaveChanges(); }
private PedidoItem CarregarItem(DataRow item) { VMDataRow dtRow = new VMDataRow(item); PedidoItem pedidoItem = new PedidoItem(); pedidoItem.Produto = new Produto { IDProduto = dtRow.GetInt("IDProduto"), Descricao = dtRow.GetStr("Descricao"), Ativo = dtRow.GetBoo("Ativo"), Cubagem = dtRow.GetDec("Cubagem"), Altura = dtRow.GetDec("Altura"), Profundidade = dtRow.GetDec("Profudidade"), QuantidadeMinina = dtRow.GetDec("QuanitadeMinima"), Largura = dtRow.GetDec("Largura"), Preco = dtRow.GetDec("Preco") }; pedidoItem.Quantidade = dtRow.GetDec("Quantidade"); return(pedidoItem); }
public void AplicarVoucher_DescontoExcedeValorTotalPedido_PedidoDeveTerValorZero() { //Arrange var pedido = Pedido.PedidoFactory.NovoPedidoRascunho(Guid.NewGuid()); var pedidoItemExistente1 = new PedidoItem(Guid.NewGuid(), "Produto XPTO", 2, 100); var pedidoItemExistente2 = new PedidoItem(Guid.NewGuid(), "Produto Teste", 3, 15); pedido.AdicionarItem(pedidoItemExistente1); pedido.AdicionarItem(pedidoItemExistente2); var voucher = new Voucher("PROMO-15-REAIS", null, 300, 1, TipoDescontoVoucher.Valor, DateTime.Now.AddDays(15), true, false); //Act pedido.AplicarVoucher(voucher); //Assert Assert.Equal(0, pedido.ValorTotal); }
private void FormulaDesconto(string total, int idItem) { _mPedido = _mPedido.Query().Where("id", idPedido).FirstOrDefault <Model.Pedido>(); _mPedidoItens = _mPedidoItens.Query().Where("id", idItem).First <PedidoItem>(); //decimal argument = (decimal)_mPedido.Total; //int qtdDecimal = BitConverter.GetBytes(decimal.GetBits(argument)[3])[2]; var qtdDecimall = Validation.GetNumberOfDigits((decimal)_mPedido.Total); var qtdD = qtdDecimall + 1; qtdD = 2; var soma1 = Validation.Round(_mPedidoItens.Total * 100 / _mPedido.Total, qtdD); var soma2 = Validation.Round(soma1 / 100, qtdD); if (soma2 == 0) { soma2 = Validation.Round(soma1 / 100, 3); } if (soma2 == 0) { soma2 = Validation.Round(soma1 / 100, 4); } if (soma2 == 0) { soma2 = Validation.Round(soma1 / 100, 5); } var soma3 = Validation.Round(Validation.ConvertToDouble(total) * soma2, qtdD); _mPedidoItens.Id = idItem; _mPedidoItens.Tipo = "Produtos"; _mPedidoItens.DescontoPedido = Validation.ConvertToDouble(soma3); _mPedidoItens.SomarDescontoTotal(); _mPedidoItens.SomarTotal(); _mPedidoItens.Save(_mPedidoItens); }
public void Editar(PedidoItem item) { try { PedidoItem itemTemp = BuscarPorID(item.Id); if (item == null) { throw new Exception("Produto não encontrado."); } itemTemp.Quantidade = item.Quantidade; _ctx.PedidoItens.Update(itemTemp); _ctx.SaveChanges(); } catch (Exception ex) { throw new Exception(ex.Message); } }
public void Save(PedidoItem entidade) { try { if (entidade.id > 0) { Database.GetConnection().Update(entidade); } else { Database.GetConnection().Insert(entidade); } var pedidorepo = new PedidoRepository(); var pedido = pedidorepo.Get(entidade.id_pedido); pedidorepo.Save(pedido); //atualizar o total do item... } catch (Exception e) { Mensage = $"Falha ao Inserir a entidade {entidade.GetType()}. Erro: {e.Message}"; } }
public string Inserir(PedidoItem pedidoItem) { try { acessoDados.limparParametros(); acessoDados.addParametros("@idPedido_PI", pedidoItem.Pedido.idPedido); acessoDados.addParametros("@idItem_PI", pedidoItem.Item.idItem); acessoDados.addParametros("@quantidade_PI", pedidoItem.Quantidade); acessoDados.addParametros("@valorUnitario_PI", pedidoItem.valorUnitario); acessoDados.addParametros("@percentualDesconto_PI", pedidoItem.percentualDesconto); acessoDados.addParametros("@valorDesconto_PI", pedidoItem.valorUnitario); acessoDados.addParametros("@valorTotal_PI", pedidoItem.valorTotal); string idItem = acessoDados.executarAlteracao(CommandType.StoredProcedure, "InserirItemPedido").ToString(); return(idItem); } catch (Exception ex) { return(ex.Message); } }
public async Task <IActionResult> Create([Bind("Id,Data,UsuarioId")] Pedido pedido) { if (ModelState.IsValid) { _context.Add(pedido); await _context.SaveChangesAsync(); foreach (var pi in listaDeProdutos) { var pedidoItem = new PedidoItem { PedidoId = pedido.Id, ProdutoId = pi.Id }; _context.PedidosItens.Add(pedidoItem); _context.SaveChanges(); } return(RedirectToAction(nameof(Index))); } ViewData["UsuarioId"] = new SelectList(_context.Usuarios, "Id", "Id", pedido.UsuarioId); return(View(pedido)); }
public void DeveFazerCalcularCorrentamenteDoisItensUmAtualizado() { // Arrange var pedido = new Pedido(Guid.NewGuid()); var pedidoId = Guid.NewGuid(); var teclado = new PedidoItem(Guid.NewGuid(), "Teclado Adamantium RGB", 1, 400); var mouse = new PedidoItem(pedidoId, "Mouse Adamantium RGB", 1, 100); pedido.AdicionarItem(teclado); pedido.AdicionarItem(mouse); var mouseAtualizado = new PedidoItem(pedidoId, "Mouse Adamantium RGB", 2, 100); var total = teclado.SubTotal + mouseAtualizado.SubTotal; // Act pedido.AtualizarItem(mouseAtualizado); // Assert total.Should() .Be(pedido.ValorTotal); }
private void BtnSalvarOutroPedItem_Click(object sender, EventArgs e) { if (!ValidateViews()) { return; } try { Save(); ped_item = null; Toast.MakeText(this, $"Item {txtIdProduto.Text} adicionado ao pedido com sucesso!", ToastLength.Long).Show(); Intent intent = new Intent(); SetResult(Result.Ok, intent); } catch (Exception ex) { Toast.MakeText(this, ex.ToString(), ToastLength.Short).Show(); } Clean(); }
public ActionResult finalizarPedido() { try { var sessaoCarrinho = Session["carrinho"] as SessionCarrinho; var sessaoPessoa = Session["autenticacao"] as SessionAutenticacaoClient; Pessoa pessoa = null; if (sessaoPessoa.AutenticacaoTipo == Utils.AutenticacaoTipo.Facebook) { pessoa = context.Pessoa.Where(x => x.FacebookId == sessaoPessoa.Id.ToString()).FirstOrDefault(); } else if (sessaoPessoa.AutenticacaoTipo == Utils.AutenticacaoTipo.Google) { pessoa = context.Pessoa.Where(x => x.GoogleId == sessaoPessoa.Id.ToString()).FirstOrDefault(); } else if (sessaoPessoa.AutenticacaoTipo == Utils.AutenticacaoTipo.Sistema) { pessoa = context.Pessoa.Find(Int32.Parse(sessaoPessoa.Id)); } db.Entry(pessoa).State = System.Data.Entity.EntityState.Modified; pessoa.EmailAutenticacao = pessoa.Email; pessoa.ConfirmarSenha = pessoa.Senha; var endereco = db.PessoaEndereco.Where(x => x.Id == sessaoCarrinho.Endereco.Id).FirstOrDefault(); var pedido = new Pedido(); pedido.PessoaEndereco = endereco; pedido.Pessoa = pessoa; pedido.Data = DateTime.Now; pedido.Status = PedidoStatusEnum.WaitingPayment; pedido.Valor = sessaoCarrinho.TotalGeral; pedido.Frete = sessaoCarrinho.Frete; pedido.isNovo = true; db.Pedido.Add(pedido); db.SaveChanges(); var pedidoItems = new List<PedidoItem>(); foreach (var sessionCar in sessaoCarrinho.ProdutosCarrinho) { var pedidoItem = new PedidoItem(); pedidoItem.Produto = db.Produto.Where(x => x.Id == sessionCar.Produto.Id).FirstOrDefault(); pedidoItem.Produto.Imagens = db.ProdutoImagem.Where(x => x.cProduto == sessionCar.Produto.Id).ToList(); pedidoItem.Pedido = pedido; pedidoItem.Quantidade = sessionCar.Quantidade; pedidoItems.Add(pedidoItem); db.PedidoItem.Add(pedidoItem); db.SaveChanges(); } ViewBag.Menus = db.Menu.ToList(); ViewBag.Pedido = pedido; ViewBag.pedidoItens = pedidoItems; return View("PedidoConcluido"); } catch (DbEntityValidationException ex) { // Retrieve the error messages as a list of strings. var errorMessages = ex.EntityValidationErrors .SelectMany(x => x.ValidationErrors) .Select(x => x.ErrorMessage); // Join the list to a single string. var fullErrorMessage = string.Join("; ", errorMessages); // Combine the original exception message with the new one. var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); // Throw a new DbEntityValidationException with the improved exception message. throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors); } }