Ejemplo n.º 1
0
        private static void Iniciar()
        {
            try
            {
                decimal valorTotal            = ObterDecimalValido("valor total");
                decimal valorEfetivamentePago = ObterDecimalValido("efetivamente pago");

                var pagamento = new Pagamento(Guid.NewGuid(), valorTotal, valorEfetivamentePago);
                var troco     = new Troco(pagamento);

                Console.WriteLine();

                var trocoFormatado = troco.Montante.ValorTotal.ToString().Replace('.', ',');
                Console.WriteLine($"O troco tem o valor de R$ {trocoFormatado}");

                Console.WriteLine();
                Console.WriteLine("O montante a ser devolvido deve ser o seguinte:");
                foreach (var dinheiro in troco.Montante.Dinheiros)
                {
                    Console.WriteLine(dinheiro.ToString());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Ejemplo n.º 2
0
 private void txt_ValorPago_Leave(object sender, EventArgs e)
 {
     try
     {
         if (txt_ValorPago.Text != "")
         {
             ValorPago = decimal.Parse(txt_ValorPago.Text);
             if (ValorPago >= ValorConta)
             {
                 Troco          = ValorPago - ValorConta;
                 txt_Troco.Text = "R$ " + Troco.ToString();
             }
             else
             {
                 txt_Troco.Clear();
             }
             txt_ValorPago.Text = Convert.ToDecimal(txt_ValorPago.Text.Trim()).ToString("0.00");
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Caixa Fácil", MessageBoxButtons.OK, MessageBoxIcon.Error);
         txt_ValorPago.Clear();
     }
 }
Ejemplo n.º 3
0
 private void txtValorPago_TextChanged(object sender, EventArgs e)
 {
     try
     {
         if (cbbTipoDePagamento.Text == EnumTipoPagamento.Dinheiro.ToString())
         {
             decimal valorPago      = ValorPago.ValorPagoPeloCliente(txtValorPago);
             decimal valorDaComanda = GetValorNaComanda();
             if (ltvProdutos.Items.Count > 0 && valorPago >= valorDaComanda)
             {
                 txtTroco.Text = Troco.GerarTroco(valorPago, valorDaComanda);
                 EsconderOuMostrarButtonVenda(Mostrar);
             }
             else
             {
                 LimparTxt(new List <TextBox>()
                 {
                     txtTroco
                 });
                 EsconderOuMostrarButtonVenda(Esconder);
             }
         }
     }
     catch (CustomException erro)
     {
         DialogMessage.MessageFullComButtonOkIconeDeInformacao(erro.Message, "Aviso");
     }
     catch (Exception erro)
     {
         DialogMessage.MessageComButtonOkIconeErro(erro.Message, "Erro");
     }
 }
 private void ValidarVenda()
 {
     try
     {
         decimal valorPago = ValorPago.ValorPagoPeloCliente(txtValorPago);
         if (valorPago >= GetValorPorParcela())
         {
             txtTroco.Text = Troco.GerarTroco(valorPago, GetValorPorParcela());
             MostrarBotao();
         }
         else
         {
             LimparTxt(new List <TextBox>()
             {
                 txtTroco
             });
             EsconderBotao();
         }
     }
     catch (CustomException erro)
     {
         DialogMessage.MessageFullComButtonOkIconeDeInformacao(erro.Message, "Aviso");
     }
     catch (Exception erro)
     {
         SaveErroInTxt.RecordInTxt(erro, this.GetType().Name);
         DialogMessage.MessageComButtonOkIconeErro(erro.Message, "Erro");
     }
 }
Ejemplo n.º 5
0
        private void btnFinalizar_Click(object sender, EventArgs e)
        {
            if (Convert.ToDouble(txtValorPago.Text) < Convert.ToDouble(txtValorTotal.Text))
            {
                MessageBox.Show("Pagamento insuficiente, faltam R$" + (Convert.ToDouble(txtValorTotal.Text) - Convert.ToDouble(txtValorPago.Text)), "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return;
            }

            try
            {
                Troco troco = new Troco();
                troco.ValorTotal    = Convert.ToDouble(txtValorTotal.Text);
                troco.ValorPago     = Convert.ToDouble(txtValorPago.Text);
                troco.ValorRecebido = Convert.ToDouble(txtTroco.Text);
                troco.Notas         = lblResultado.Text;

                ISession session = NHibernateHelper.GetSession();
                session.Save(troco);
                session.Flush();
                session.Close();

                MessageBox.Show("Dados gravados com sucesso.", "informação", MessageBoxButtons.OK, MessageBoxIcon.Information);

                txtValorTotal.Clear();
                txtValorPago.Clear();
                txtTroco.Clear();
                lblResultado.Text = "";
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro: " + ex.Message);
            }
        }
Ejemplo n.º 6
0
        public void Deve_retornar_troco_de_50_reais_com_pagamento_de_50_reais_e_valor_de_100_reais()
        {
            var pagamento = new Pagamento(_pagamentoId, 50M, 100M);
            var troco     = new Troco(pagamento);

            troco.Montante.Dinheiros.Count().Should().Be(1);
            troco.Montante.Dinheiros.ElementAt(0).Should().BeOfType <CinquentaReais>();
        }
Ejemplo n.º 7
0
        public ActionResult Abastece()
        {
            Troco          troco   = new Troco();
            MaquinaDeTroco maquina = MaquinaDeTroco.getMaquinaDeTroco();

            troco.Moedas = maquina.Moedas;
            return(View(troco));
        }
Ejemplo n.º 8
0
        public void Deve_retornar_troco_de_50_centavos_com_pagamento_de_1_real_e_valor_de_50_centavos()
        {
            var pagamento = new Pagamento(_pagamentoId, 0.5M, 1M);
            var troco     = new Troco(pagamento);

            troco.Montante.Dinheiros.Count().Should().Be(1);
            troco.Montante.Dinheiros.ElementAt(0).Should().BeOfType <CinquentaCentavos>();
        }
Ejemplo n.º 9
0
        public void Deve_retornar_troco_de_40_centavos_com_pagamento_de_50_centavos_e_valor_de_10_centavos()
        {
            var pagamento = new Pagamento(_pagamentoId, 0.10M, 0.5M);
            var troco     = new Troco(pagamento);

            troco.Montante.Dinheiros.Count().Should().Be(4);
            troco.Montante.Dinheiros.ElementAt(0).Should().BeOfType <DezCentavos>();
            troco.Montante.Dinheiros.ElementAt(1).Should().BeOfType <DezCentavos>();
            troco.Montante.Dinheiros.ElementAt(2).Should().BeOfType <DezCentavos>();
            troco.Montante.Dinheiros.ElementAt(3).Should().BeOfType <DezCentavos>();
        }
Ejemplo n.º 10
0
        public void Deve_retornar_troco_de_4_reais_com_pagamento_de_5_reais_e_valor_de_1_real()
        {
            var pagamento = new Pagamento(_pagamentoId, 1M, 5M);
            var troco     = new Troco(pagamento);

            troco.Montante.Dinheiros.Count().Should().Be(4);
            troco.Montante.Dinheiros.ElementAt(0).Should().BeOfType <UmReal>();
            troco.Montante.Dinheiros.ElementAt(1).Should().BeOfType <UmReal>();
            troco.Montante.Dinheiros.ElementAt(2).Should().BeOfType <UmReal>();
            troco.Montante.Dinheiros.ElementAt(3).Should().BeOfType <UmReal>();
        }
Ejemplo n.º 11
0
        public void Deve_retornar_troco_de_quatro_centavos_com_pagamento_de_cincos_centavos_e_valor_de_um_centavo()
        {
            var pagamento = new Pagamento(_pagamentoId, 0.01M, 0.05M);
            var troco     = new Troco(pagamento);

            troco.Montante.Dinheiros.Count().Should().Be(4);
            troco.Montante.Dinheiros.ElementAt(0).Should().BeOfType <UmCentavo>();
            troco.Montante.Dinheiros.ElementAt(1).Should().BeOfType <UmCentavo>();
            troco.Montante.Dinheiros.ElementAt(2).Should().BeOfType <UmCentavo>();
            troco.Montante.Dinheiros.ElementAt(3).Should().BeOfType <UmCentavo>();
        }
Ejemplo n.º 12
0
        public static TrocoResponse ToResponse(this Troco model)
        {
            if (model == null)
            {
                return(null);
            }

            return(new TrocoResponse
            {
                Quantidade = model.Quantidade,
                Dinheiro = model.Dinheiro.ToResponse()
            });
        }
Ejemplo n.º 13
0
        public ActionResult Adicionar(Troco troco)
        {
            MaquinaDeTroco maquina  = MaquinaDeTroco.getMaquinaDeTroco();
            string         sucesso  = "S";
            string         mensagem = "Máquina Abastecida!";
            JsonResult     retorno;

            SerializeObject(maquina);
            try
            {
                for (int i = 0; i < maquina.Moedas.Count; i++)
                {
                    maquina.Moedas[i].Quantidade += troco.NovasMoedas[i].Quantidade;
                }
                //maquina tem o valor em centavos
                maquina.atualizaTotal();
                Troco t = new Troco();
                t.Moedas = maquina.Moedas;

                List <string> quantidades = new List <string>();
                foreach (var moeda in maquina.Moedas)
                {
                    quantidades.Add(moeda.Quantidade.ToString());
                }
                retorno = Json(new
                {
                    Sucesso  = sucesso,
                    Mensagem = mensagem,
                    Valores  = quantidades
                },
                               JsonRequestBehavior.AllowGet);
                return(retorno);
            }
            catch (Exception ex)
            {
                maquina = DeSerializeObject <MaquinaDeTroco>();
                sucesso = "N";
                retorno = Json(new
                {
                    Sucesso  = sucesso,
                    Mensagem = ex.Message,
                },
                               JsonRequestBehavior.AllowGet);
                return(retorno);
            }
        }
Ejemplo n.º 14
0
 public void AtualizaLabelsValores()
 {
     labelTotalVenda.Text    = TotalVenda.ToString("###,###,##0.00");
     labelAcrescimo.Text     = Acrescimo.ToString("###,###,##0.00");
     labelDesconto.Text      = Desconto.ToString("###,###,##0.00");
     labelTotalReceber.Text  = TotalReceber.ToString("###,###,##0.00");
     labelTotalRecebido.Text = TotalRecebido.ToString("###,###,##0.00");
     if (SaldoRestante > 0)
     {
         labelAindaFalta.Text = SaldoRestante.ToString("###,###,##0.00");
     }
     else
     {
         labelAindaFalta.Text = "0.00";
     }
     labelTroco.Text = Troco.ToString("###,###,##0.00");
 }
 private void txtValorPago_TextChanged(object sender, EventArgs e)
 {
     try
     {
         if (cbbTipoDePagamento.Text == EnumTipoPagamento.Dinheiro.ToString())
         {
             if (txtValorPago.Text.Length > 0)
             {
                 decimal valorPago  = Decimal.Parse((sender as TextBox).Text);
                 decimal ValorTotal = _fiado.Valor;
                 MostrarBotao();
                 if (valorPago >= ValorTotal)
                 {
                     txtTroco.Text = Troco.GerarTroco(valorPago, ValorTotal);
                     MostrarBotao();
                 }
                 else
                 {
                     LimparTxt(new List <TextBox> {
                         txtTroco
                     });
                 }
             }
             else
             {
                 EsconderBotao();
                 LimparTxt(new List <TextBox> {
                     txtTroco
                 });
             }
         }
     }
     catch (CustomException erro)
     {
         DialogMessage.MessageFullComButtonOkIconeDeInformacao(erro.Message, "Aviso");
         txtValorPago.LimparTxtNoEventoChanged(txtValorPago_TextChanged);
         return;
     }
     catch (Exception erro)
     {
         SaveErroInTxt.RecordInTxt(erro, this.GetType().Name);
         DialogMessage.MessageComButtonOkIconeErro(erro.Message, "Erro");
     }
 }
Ejemplo n.º 16
0
        public Troco CalculaTroco(double vlrCompra, double vlrPago)
        {
            Troco result = new Troco();

            var resultadoValidador = _validator.Validar(vlrCompra, vlrPago);

            // Verifica se os valores enviados representam um cenário real
            if (resultadoValidador.Ok == false)
            {
                result.VlrCompra = vlrCompra;
                result.VlrPago   = vlrPago;
                result.Mensagem  = resultadoValidador.Mensagem;
                return(result);
            }

            // Calcula o valor do troco a ser pago
            double vlrTroco = vlrPago - vlrCompra;

            int numero;

            result.ItensTroco = new List <ItemTroco>();

            result.VlrCompra = vlrCompra;
            result.VlrPago   = vlrPago;
            result.VlrTroco  = vlrTroco;

            // Obtem apenas o número inteiro do troco
            numero = (int)vlrTroco;
            result.ItensTroco.AddRange(CompoeTroco(numero, 'C'));

            // Obtem apenas o número decimal do troco
            numero = (int)Math.Round((vlrTroco - (int)vlrTroco) * 100);
            result.ItensTroco.AddRange(CompoeTroco(numero, 'M'));

            result.Mensagem = "";

            return(result);
        }
Ejemplo n.º 17
0
        public IActionResult Post([FromBody] Troco troco)
        {
            try
            {
                int t100, t50, t20, t10, m50, m10, m05, m1;

                t100 = 0;
                t50  = 0;
                t20  = 0;
                t10  = 0;
                m50  = 0;
                m10  = 0;
                m05  = 0;
                m1   = 0;

                decimal valorTroco = troco.ValorPago - troco.PrecoProduto;
                troco.ValorTroco = valorTroco;

                while (valorTroco >= 100)
                {
                    valorTroco -= 100;
                    t100++;
                }

                while (valorTroco >= 50)
                {
                    valorTroco -= 50;
                    t50++;
                }

                while (valorTroco >= 20)
                {
                    valorTroco -= 20;
                    t20++;
                }

                while (valorTroco >= 10)
                {
                    valorTroco -= 10;
                    t10++;
                }

                while (valorTroco >= Convert.ToDecimal(0.50))
                {
                    valorTroco -= Convert.ToDecimal(0.50);
                    m50++;
                }

                while (valorTroco >= Convert.ToDecimal(0.10))
                {
                    valorTroco -= Convert.ToDecimal(0.10);
                    m10++;
                }

                while (valorTroco >= Convert.ToDecimal(0.05))
                {
                    valorTroco -= Convert.ToDecimal(0.05);
                    m05++;
                }


                while (valorTroco >= Convert.ToDecimal(0.01))
                {
                    valorTroco -= Convert.ToDecimal(0.01);
                    m1++;
                }

                if (t100 > 0)
                {
                    troco.Nota100 = t100;
                }

                if (t50 > 0)
                {
                    troco.Nota50 = t50;
                }

                if (t20 > 0)
                {
                    troco.Nota20 = t20;
                }

                if (t10 > 0)
                {
                    troco.Nota10 = t10;
                }

                if (m50 > 0)
                {
                    troco.Moeda050 = m50;
                }

                if (m10 > 0)
                {
                    troco.Moeda010 = m10;
                }

                if (m05 > 0)
                {
                    troco.Moeda005 = m05;
                }

                if (m1 > 0)
                {
                    troco.Moeda001 = m1;
                }



                _trocoRepository.Adicionar(troco);
                return(Created("api/troco", troco));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.ToString()));
            }
        }
Ejemplo n.º 18
0
        public string ToNFCeIni()
        {
            var vendaIni = new ACBrIniFile();

            // InfNFe
            vendaIni["infNFe"]["versao"] = "4.0";

            //Identificação
            vendaIni["Identificacao"]["natOp"]      = "Venda de Mercadoria";
            vendaIni["Identificacao"]["indPag"]     = "0";
            vendaIni["Identificacao"]["mod"]        = "65";
            vendaIni["Identificacao"]["serie"]      = Serie.ToString();
            vendaIni["Identificacao"]["nNF"]        = Numero.ToString();
            vendaIni["Identificacao"]["dEmi"]       = Data.ToString("dd/MM/yyyy HH:mm:ss");
            vendaIni["Identificacao"]["tpNF"]       = "1";
            vendaIni["Identificacao"]["Finalidade"] = "0";
            vendaIni["Identificacao"]["idDest"]     = "1";
            vendaIni["Identificacao"]["indFinal"]   = "1";
            vendaIni["Identificacao"]["indPres"]    = "1";
            vendaIni["Identificacao"]["tpimp"]      = "4";
            vendaIni["Identificacao"]["tpAmb"]      = "2";

            //Emitente
            vendaIni["Emitente"]["CRT"]         = ((int)Configuracao.Instance.Emitente.CRT).ToString();
            vendaIni["Emitente"]["CNPJ"]        = Configuracao.Instance.Emitente.CNPJ.OnlyNumbers();
            vendaIni["Emitente"]["IE"]          = Configuracao.Instance.Emitente.IE.OnlyNumbers();
            vendaIni["Emitente"]["Razao"]       = Configuracao.Instance.Emitente.Razao;
            vendaIni["Emitente"]["Fantasia"]    = Configuracao.Instance.Emitente.Fantasia;
            vendaIni["Emitente"]["Fone"]        = Configuracao.Instance.Emitente.Fone;
            vendaIni["Emitente"]["CEP"]         = Configuracao.Instance.Emitente.CEP;
            vendaIni["Emitente"]["Logradouro"]  = Configuracao.Instance.Emitente.Logradouro;
            vendaIni["Emitente"]["Numero"]      = Configuracao.Instance.Emitente.Numero;
            vendaIni["Emitente"]["Complemento"] = Configuracao.Instance.Emitente.Complemento;
            vendaIni["Emitente"]["Bairro"]      = Configuracao.Instance.Emitente.Bairro;
            vendaIni["Emitente"]["CidadeCod"]   = Configuracao.Instance.Emitente.CidadeCod;
            vendaIni["Emitente"]["Cidade"]      = Configuracao.Instance.Emitente.Cidade;
            vendaIni["Emitente"]["UF"]          = Configuracao.Instance.Emitente.UF;

            //Destinatario
            vendaIni["Destinatario"]["indIEDest"] = "9";
            if (!string.IsNullOrEmpty(Cliente.Documento))
            {
                vendaIni["Destinatario"]["CNPJCPF"] = Cliente.Documento;
            }
            if (!string.IsNullOrEmpty(Cliente.Nome))
            {
                vendaIni["Destinatario"]["xNome"] = Cliente.Nome;
            }

            for (var i = 0; i < Items.Count; i++)
            {
                var item = Items[i];
                if (item.Cancelado)
                {
                    continue;
                }
                var sessaoProduto = $"Produto{i + 1:000}";
                var sessaoICMS    = $"ICMS{i + 1:000}";
                var sessaoPIS     = $"PIS{i + 1:000}";
                var sessaoCOFINS  = $"COFINS{i + 1:000}";
                var sessaoIPI     = $"IPI{i + 1:000}";

                vendaIni[sessaoProduto]["CFOP"]          = "5.102";
                vendaIni[sessaoProduto]["Codigo"]        = item.Produto.Codigo;
                vendaIni[sessaoProduto]["cEAN"]          = "SEM GTIN";
                vendaIni[sessaoProduto]["Descricao"]     = item.Produto.Descricao;
                vendaIni[sessaoProduto]["NCM"]           = "84719012";
                vendaIni[sessaoProduto]["Unidade"]       = item.Produto.Unidade;
                vendaIni[sessaoProduto]["Quantidade"]    = item.Quantidade.ToString("N4");
                vendaIni[sessaoProduto]["ValorUnitario"] = item.Produto.Valor.ToString("N10");
                vendaIni[sessaoProduto]["ValorTotal"]    = item.ValorTotal.ToString("N2");
                vendaIni[sessaoProduto]["ValorDesconto"] = "0,00";
                vendaIni[sessaoProduto]["vFrete"]        = "0,00";
                vendaIni[sessaoProduto]["vSeg"]          = "0,00";
                vendaIni[sessaoProduto]["vOutro"]        = "0,00";
                vendaIni[sessaoProduto]["indEscala"]     = "N";
                vendaIni[sessaoProduto]["CNPJFab"]       = "05481336000137";
                vendaIni[sessaoProduto]["uTrib"]         = item.Produto.Unidade;
                vendaIni[sessaoProduto]["cEANTrib"]      = "SEM GTIN";

                vendaIni[sessaoICMS]["CSOSN"]             = "900";
                vendaIni[sessaoICMS]["Origem"]            = "0";
                vendaIni[sessaoICMS]["ValorBase"]         = "100";
                vendaIni[sessaoICMS]["Aliquota"]          = "10";
                vendaIni[sessaoICMS]["Valor"]             = "10";
                vendaIni[sessaoICMS]["pCredSN"]           = "0,00";
                vendaIni[sessaoICMS]["vCredICMSSN"]       = "0,00";
                vendaIni[sessaoICMS]["ModalidadeST"]      = "4";
                vendaIni[sessaoICMS]["ValorBaseST"]       = "0,00";
                vendaIni[sessaoICMS]["AliquotaST"]        = "0,00";
                vendaIni[sessaoICMS]["ValorST"]           = "0,00";
                vendaIni[sessaoICMS]["PercentualReducao"] = "0,00";
                vendaIni[sessaoICMS]["vBCFCP"]            = "0";
                vendaIni[sessaoICMS]["pFCP"] = "0";
                vendaIni[sessaoICMS]["vFCP"] = "0";

                vendaIni[sessaoPIS]["CST"]       = "01";
                vendaIni[sessaoPIS]["ValorBase"] = "0,00";
                vendaIni[sessaoPIS]["Aliquota"]  = "0,00";
                vendaIni[sessaoPIS]["Valor"]     = "0,00";

                vendaIni[sessaoCOFINS]["CST"]       = "01";
                vendaIni[sessaoCOFINS]["ValorBase"] = "0,00";
                vendaIni[sessaoCOFINS]["Aliquota"]  = "0,00";
                vendaIni[sessaoCOFINS]["Valor"]     = "0,00";

                vendaIni[sessaoIPI]["CST"]       = "53";
                vendaIni[sessaoIPI]["ValorBase"] = "0,00";
                vendaIni[sessaoIPI]["Aliquota"]  = "0,00";
                vendaIni[sessaoIPI]["Valor"]     = "0,00";
            }

            vendaIni["Total"]["BaseICMS"]              = (100 * Items.Count).ToString("N2");
            vendaIni["Total"]["ValorICMS"]             = (10 * Items.Count).ToString("N2");
            vendaIni["Total"]["vICMSDeson"]            = "0,00";
            vendaIni["Total"]["BaseICMSSubstituicao"]  = "0,00";
            vendaIni["Total"]["ValorICMSSubstituicao"] = "0,00";
            vendaIni["Total"]["ValorProduto"]          = Items.Sum(x => x.ValorTotal).RoundABNT().ToString("N2");
            vendaIni["Total"]["ValorFrete"]            = "0,00";
            vendaIni["Total"]["ValorSeguro"]           = "0,00";
            vendaIni["Total"]["ValorDesconto"]         = "0,00";
            vendaIni["Total"]["ValorIPI"]              = "0,00";
            vendaIni["Total"]["ValorPIS"]              = "0,00";
            vendaIni["Total"]["ValorCOFINS"]           = "0,00";
            vendaIni["Total"]["ValorOutrasDespesas"]   = "0,00";
            vendaIni["Total"]["ValorNota"]             = Items.Sum(x => x.ValorTotal).RoundABNT().ToString("N2");
            vendaIni["Total"]["vFCP"] = "0";

            vendaIni["DadosAdicionais"]["Complemento"] = "";

            vendaIni["Transportador"]["modFrete"] = "9";

            for (var i = 0; i < Pagamentos.Count; i++)
            {
                var item            = Pagamentos[i];
                var sessaoPagamento = $"pag{i + 1:000}";

                vendaIni[sessaoPagamento]["tPag"] = item.TipoNFe.ToString("00");
                vendaIni[sessaoPagamento]["vPag"] = item.Valor.ToString("N2");
                if (i == 0 && Troco > 0)
                {
                    vendaIni[sessaoPagamento]["vTroco"] = Troco.ToString("N2");
                }
            }

            return(vendaIni.ToString());
        }
Ejemplo n.º 19
0
 public Troco Adicionar(Troco troco)
 {
     return(troco);
 }
Ejemplo n.º 20
0
        public ActionResult CalcularTroco(Troco troco)
        {
            string     sucesso  = "";
            string     mensagem = "";
            double     valor    = troco.Total * 100;
            JsonResult retorno;

            MaquinaDeTroco maquina = MaquinaDeTroco.getMaquinaDeTroco();

            if (maquina.Total < valor) //troco maior do que máquina possui
            {
                mensagem = "Máquina com valor insuficiente";
                sucesso  = "N";
            }
            else //Tem o valor na máquina
            {
                Troco  resposta = new Troco();
                double restante = valor;
                SerializeObject(maquina);
                for (int i = resposta.NovasMoedas.Count - 1; i >= 0; i--)
                {
                    if (maquina.Moedas[i].Quantidade > 0)                    // tem moedas desse valor na maquina?
                    {
                        if ((restante / resposta.NovasMoedas[i].Valor) >= 1) // preciso dessa moeda?
                        {
                            double moedasNecessarias = Math.Floor(restante / resposta.NovasMoedas[i].Valor);
                            int    moedasInt         = Convert.ToInt32(moedasNecessarias);
                            if (moedasNecessarias <= maquina.Moedas[i].Quantidade) //tenho a qntd dessa moeda que preciso na maquina?
                            {
                                resposta.NovasMoedas[i].Quantidade = moedasInt;
                                maquina.Moedas[i].Quantidade      -= moedasInt;
                                restante = restante % resposta.NovasMoedas[i].Valor;
                            }
                            else //tenho menos do que a quantidade necessária
                            {
                                restante -= maquina.Moedas[i].Quantidade * maquina.Moedas[i].Valor;
                                resposta.NovasMoedas[i].Quantidade = maquina.Moedas[i].Quantidade;
                                maquina.Moedas[i].Quantidade       = 0;
                            }
                        }
                    }
                }
                maquina.atualizaTotal();
                if (restante > 0)
                {
                    sucesso  = "N";
                    mensagem = "Não há moedas o suficiente para dar o troco exato";
                    maquina  = DeSerializeObject <MaquinaDeTroco>();
                }
                else
                {
                    sucesso  = "S";
                    mensagem = "Troco liberado com sucesso. Confira as moedas utilizadas.";
                    List <string> quantidades = new List <string>();
                    SerializeObject(maquina);
                    foreach (var moeda in resposta.NovasMoedas)
                    {
                        quantidades.Add(moeda.Quantidade.ToString());
                    }
                    retorno = Json(new
                    {
                        Sucesso  = sucesso,
                        Mensagem = mensagem,
                        Valores  = quantidades
                    },
                                   JsonRequestBehavior.AllowGet);
                    return(retorno);
                }
            }
            retorno = Json(new
            {
                Sucesso  = sucesso,
                Mensagem = mensagem
            },
                           JsonRequestBehavior.AllowGet);
            return(retorno);
        }
Ejemplo n.º 21
0
        static void Main(string[] args)
        {
            //Dados básicos de saída e introdução a varíaveis e vetor

            int N;

            double[] vetor;
            Console.WriteLine("Seja bem-vindo ao BurguerShop!");
            Console.WriteLine();
            Console.WriteLine("1 - HAMBURGUER DE FRANGO R$ 4.45");
            Console.WriteLine("2 - HAMBURGUER DE CARNE BOVINA R$5.00");
            Console.WriteLine("3 - REFRIGERANTE PEPSI 300ml R$3.30 ");
            Console.WriteLine("4 - SUCO NATURAL 500ml (QUALQUER SABOR) R$ 3.00");
            Console.WriteLine();
            Console.Write("Quantidade de produtos: ");

            //Sistema utilizando o 'for' para guardar os códigos de produtos escritos na mesma linha (separados por espaço)

            N     = int.Parse(Console.ReadLine());
            vetor = new double[N];

            double soma = 0.0;

            Console.Write("Produtos: ");
            string[] v = Console.ReadLine().Split(' ');
            for (int i = 0; i < N; i++)
            {
                vetor[i] = int.Parse(v[i]);

                while (vetor[i] < 1 || vetor[i] > 4)
                {
                    Console.WriteLine("Produto invalido");
                    Console.Write("Produto faltante: ");
                    v[i]     = Console.ReadLine();
                    vetor[i] = double.Parse(v[i]);
                }

                if (vetor[i] == 1)
                {
                }
                else if (vetor[i] == 2)
                {
                    soma += 5.00;
                }
                else if (vetor[i] == 3)
                {
                    soma += 3.30;
                }
                else
                {
                    soma += 3.00;
                }
            }

            //Saída informando a soma dos valores de cada produto

            Console.WriteLine($"TOTAL: R$ {soma.ToString("F2", CultureInfo.InvariantCulture)}");

            Console.WriteLine();

            //Parte inicial do sistema para

            double Valorpago, Troco;

            Console.Write("Total pago pelo cliente: R$");
            Valorpago = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);
            Console.WriteLine();
            Troco = Valorpago - soma;
            Console.WriteLine($"Troco do cliente: {Troco.ToString("F2", CultureInfo.InvariantCulture)}");

            Console.WriteLine();
            Console.WriteLine("NOTAS");
            Console.WriteLine();

            double nota, resto;
            int    operacao;

            nota     = 100.0;
            operacao = (int)(Troco / nota);
            Console.WriteLine($"Moedas de R${nota.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = Troco % nota;

            nota     = 50.0;
            operacao = (int)(resto / nota);
            Console.WriteLine($"Moedas de R${nota.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % nota;

            nota     = 20.0;
            operacao = (int)(resto / nota);
            Console.WriteLine($"Moedas de R${nota.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % nota;

            nota     = 10.0;
            operacao = (int)(resto / nota);
            Console.WriteLine($"Moedas de R${nota.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % nota;

            nota     = 5.0;
            operacao = (int)(resto / nota);
            Console.WriteLine($"Moedas de R${nota.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % nota;

            nota     = 2.0;
            operacao = (int)(resto / nota);
            Console.WriteLine($"Moedas de R${nota.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % nota;

            Console.WriteLine();
            Console.WriteLine("MOEDAS");
            Console.WriteLine();

            double moeda;

            moeda    = 1.0;
            operacao = (int)(resto / moeda);
            Console.WriteLine($"Moedas de R${moeda.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % moeda;

            moeda    = 0.50;
            operacao = (int)(resto / moeda);
            Console.WriteLine($"Moedas de R${moeda.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % moeda;

            moeda    = 0.25;
            operacao = (int)(resto / moeda);
            Console.WriteLine($"Moedas de R${moeda.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % moeda;

            moeda    = 0.10;
            operacao = (int)(resto / moeda);
            Console.WriteLine($"Moedas de R${moeda.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");
            resto = resto % moeda;

            moeda    = 0.5;
            operacao = (int)(resto / moeda);
            Console.WriteLine($"Moedas de R${moeda.ToString("F2", CultureInfo.InvariantCulture)}: {operacao}");

            Console.ReadLine();
        }