private void TrataEstoque(Carrinho carrinho) { var estoque = new EstoqueService(); //Com essa variável consigo até especificar qual produto do carrinho não foi entregue. int produtosNaoEntregues = 0; foreach (var produto in carrinho.Produtos) { if (estoque.SolicitarProduto(produto)) { estoque.BaixarEstoque(produto); } else { produtosNaoEntregues++; } } carrinho.FoiEntregue |= produtosNaoEntregues == 0; if (carrinho.FoiEntregue) { throw new ExternalException("Os produtos não foram entregues."); } }
public void EfetuarPedido(Carrinho carrinho, DetalhePagamento detalhePagamento, bool notificarClienteEmail, bool notificarClienteSms) { foreach (var produto in carrinho.Produtos) { if (produto.TipoProduto == TipoProduto.Alimentos) { produto.ValorImposto = produto.Valor * 0.05M; carrinho.ValorTotalPedido += (produto.Valor + produto.ValorImposto) * produto.Quantidade; } else { if (produto.TipoProduto == TipoProduto.Eletronico) { produto.ValorImposto = produto.Valor * 0.15M; carrinho.ValorTotalPedido += (produto.Valor + produto.ValorImposto) * produto.Quantidade; } else { if (produto.TipoProduto == TipoProduto.Superfulos) { produto.ValorImposto = produto.Valor * 0.20M; carrinho.ValorTotalPedido += (produto.Valor + produto.ValorImposto) * produto.Quantidade; } else { throw new ArgumentException("O tipo de produto informado não está disponível."); } } } } if (detalhePagamento.FormaPagamento.Equals(FormaPagamento.CartaoCredito) || detalhePagamento.FormaPagamento.Equals(FormaPagamento.CartaoDebito)) { using (var gatewayPatamento = new GatewayPagamentoService()) { gatewayPatamento.Login = "******"; gatewayPatamento.Senha = "senha"; gatewayPatamento.FormaPagamentoCartao = (FormaPagamentoCartao)detalhePagamento.FormaPagamento; gatewayPatamento.NomeImpresso = detalhePagamento.NomeImpressoCartao; gatewayPatamento.AnoExpiracao = detalhePagamento.AnoExpiracao; gatewayPatamento.MesExpiracao = detalhePagamento.MesExpiracao; gatewayPatamento.Valor = carrinho.ValorTotalPedido; gatewayPatamento.EfetuarPagamento(); } InformarPagamento(carrinho); } if (detalhePagamento.FormaPagamento.Equals(FormaPagamento.Dinheiro)) { InformarPagamento(carrinho); } var estoque = new EstoqueService(); if (carrinho.FoiPago) { foreach (var produto in carrinho.Produtos) { estoque.SolicitarProduto(produto); } EntregarProdutos(carrinho); } else { throw new ExternalException("O pagamento não foi efetuado."); } if (carrinho.FoiEntregue) { foreach (var produto in carrinho.Produtos) { estoque.BaixarEstoque(produto); } } else { throw new ExternalException("Os produtos não foram entregues."); } if (notificarClienteEmail) { if (!string.IsNullOrWhiteSpace(carrinho.Cliente.Email)) { using (var msg = new MailMessage("*****@*****.**", carrinho.Cliente.Email)) using (var smtp = new SmtpClient("servidor.smtp")) { msg.Subject = "Dados da sua compra"; msg.Body = $"Obrigado por efetuar sua compra conosco."; smtp.Send(msg); } } } if (notificarClienteSms) { if (!string.IsNullOrWhiteSpace(carrinho.Cliente.Celular)) { var smsService = new SmsService(); smsService.Mensagem = "Obrigado por sua compra"; smsService.Celular = carrinho.Cliente.Celular; smsService.EnviarSms(); } } }