public async Task <List <DTOPedidosResultado> > ListarTodos()
        {
            var lstRetorno = new List <DTOPedidosResultado>();
            var lstPedidos = await _pedidos.CarregarTodosCompleto();

            foreach (var item in lstPedidos)
            {
                var tamanho = new DetalhesTamanho
                {
                    Id           = item.Tamanhos.Id,
                    Descricao    = item.Tamanhos.Descricao,
                    TempoPreparo = item.TempoTamanho,
                    Valor        = item.ValorTamanho
                };
                var sabor = new DetalhesSabor
                {
                    Id           = item.Sabores.Id,
                    Descricao    = item.Sabores.Descricao,
                    TempoPreparo = item.TempoSabor,
                    Valor        = item.ValorSabor
                };
                var personalizacoes      = item.PedidosPersonalizacoes?.ToList();
                var listaPersonalizacoes = new List <DetalhesPersonalizacao>();
                if (personalizacoes.Count > 0)
                {
                    foreach (var itemPersonalizado in personalizacoes)
                    {
                        var personalizacao = new DetalhesPersonalizacao
                        {
                            Id           = itemPersonalizado.Id,
                            Descricao    = itemPersonalizado.Personalizacoes.Descricao,
                            TempoPreparo = itemPersonalizado.TempoPersonalizacao,
                            Valor        = itemPersonalizado.ValorPersonalizacao
                        };
                        listaPersonalizacoes.Add(personalizacao);
                    }
                }
                var resultado = GerarResultado(tamanho, sabor, listaPersonalizacoes);
                resultado.Id = item.Id;
                lstRetorno.Add(resultado);
            }
            return(lstRetorno);
        }
        private DTOPedidosResultado GerarResultado(DetalhesTamanho tamanho, DetalhesSabor sabor, List <DetalhesPersonalizacao> detalhesPersonalizacao = null)
        {
            decimal valorTotal      = 0;
            int     tempoPreparacao = 0;

            //Soma Valor e tempo
            valorTotal      += tamanho.Valor;
            valorTotal      += sabor.Valor;
            tempoPreparacao += tamanho.TempoPreparo;
            tempoPreparacao += sabor.TempoPreparo;
            if (detalhesPersonalizacao != null)
            {
                foreach (var item in detalhesPersonalizacao)
                {
                    valorTotal      += item.Valor;
                    tempoPreparacao += item.TempoPreparo;
                }
            }

            var resumo = new ResumoAcai
            {
                ValorTotal   = valorTotal,
                TempoPreparo = new TimeSpan(0, tempoPreparacao, 0)
            };

            return(new DTOPedidosResultado
            {
                Detalhes = new DetalhesAcai
                {
                    Tamanho = tamanho,
                    Sabor = sabor,
                    ListaPersonalizacoes = detalhesPersonalizacao
                },
                Resumo = resumo
            });
        }
        public async Task <DTOPedidosResultado> Adicionar(DTOPedidos pedido)
        {
            //Objeto tamanho
            var tamanho = await _tamanhos.ObterPorId(pedido.Tamanho);

            //Objeto sabores
            var sabor = await _sabores.ObterPorId(pedido.Sabor);

            if (tamanho == null)
            {
                Notificar($"Tamanho {pedido.Tamanho} não localizado.");
            }
            if (sabor == null)
            {
                Notificar($"Sabor {pedido.Sabor} não localizado.");
            }

            if (_notificador.TemNotificacao())
            {
                return(null);
            }
            //Objeto pedido
            var objPedido = new Pedidos
            {
                Cliente      = string.Empty,
                DtPedido     = DateTime.Now,
                SaboresId    = sabor.Id,
                TempoSabor   = sabor.TempoPreparo,
                ValorSabor   = sabor.Valor,
                TamanhosId   = tamanho.Id,
                TempoTamanho = tamanho.TempoPreparo,
                ValorTamanho = tamanho.Valor
            };
            var add = await _pedidos.Adicionar(objPedido);

            pedido.Id = add.Id;

            var personalizacoes = new List <DetalhesPersonalizacao>();

            //Adicionar personalizacao
            if (pedido.Personalizacoes.Count > 0)
            {
                personalizacoes = await AdicionarPersonalizacoes(pedido);
            }

            var tam = new DetalhesTamanho
            {
                Descricao    = tamanho.Descricao,
                Id           = add.Tamanhos.Id,
                TempoPreparo = add.TempoTamanho,
                Valor        = add.ValorTamanho
            };
            var sab = new DetalhesSabor
            {
                Descricao    = sabor.Descricao,
                Id           = add.Sabores.Id,
                TempoPreparo = add.TempoSabor,
                Valor        = add.ValorSabor
            };

            var resultado = GerarResultado(tam, sab, personalizacoes);

            resultado.Id = pedido.Id;
            return(resultado);
        }