コード例 #1
0
        public PedidoViewModel Add(PedidoViewModel pedidoViewModel)
        {
            //string pedidoViewModel = "Manhã, 1, 2, 3, 3, 3";
            if (string.IsNullOrEmpty(pedidoViewModel.Entrada))
            {
                pedidoViewModel.Saida = "erro";
                pedidoViewModel.Errors.Add(new PedidoErrorViewModel()
                {
                    Message = "Pedido não pode ser vazio ", Name = "Entrada"
                });
                pedidoViewModel.HistoricoPedidos = _pedidoRepository.GetAll();
                return(pedidoViewModel);
            }
            var order = pedidoViewModel.Entrada.Split(",");

            //verificar se período existe;
            var entradaPeriodoDescricao = order[0].ToLower();
            //buscando o periodo igual ao informado
            var periodo = _periodoRepository.GetAll().FirstOrDefault(x => x.Descricao.ToLower() == entradaPeriodoDescricao);

            if (periodo == null)
            {
                pedidoViewModel.Saida = "erro";
                pedidoViewModel.Errors.Add(new PedidoErrorViewModel()
                {
                    Message = "Perido Invalido", Name = "Entrada"
                });
                pedidoViewModel.HistoricoPedidos = _pedidoRepository.GetAll();
                return(pedidoViewModel);
            }

            //var digitos = string.Join("", order.Skip(1)).ToCharArray();
            //if (!digitos.All(x=> char.IsDigit(x)))
            //{
            //    pedidoViewModel.Saida = "erro";
            //    pedidoViewModel.Errors.Add(new PedidoErrorViewModel() { Message = "Perido Invalido", Name = "Entrada" });
            //    pedidoViewModel.HistoricoPedidos = _pedidoRepository.GetAll();
            //    return pedidoViewModel;
            //}
            var itens = order.Skip(1).Select(x => Convert.ToInt32(x));

            if (!itens.Any())
            {
                pedidoViewModel.Saida = "erro";
                pedidoViewModel.Errors.Add(new PedidoErrorViewModel()
                {
                    Message = "Adicione ao menos um item", Name = "Entrada"
                });
                pedidoViewModel.HistoricoPedidos = _pedidoRepository.GetAll();
                return(pedidoViewModel);
            }

            var itensCadastrados = _itemPratoRepository.GetAll();

            int itemNaoEncontrado = itens.FirstOrDefault(x => !itensCadastrados.Any(y => y.Id == x));

            if (itemNaoEncontrado > 0)
            {
                pedidoViewModel.Saida = "erro";
                pedidoViewModel.Errors.Add(new PedidoErrorViewModel()
                {
                    Message = $"Item {itemNaoEncontrado} não encontrado.", Name = "Entrada"
                });
                pedidoViewModel.HistoricoPedidos = _pedidoRepository.GetAll();
                return(pedidoViewModel);
            }

            var(success, saida) = GetSaidaPedido(periodo, itens);

            pedidoViewModel.Saida = saida;

            if (success)
            {
                _pedidoRepository.Add(new Pedido
                {
                    DataPedido = DateTime.Now,
                    Entrada    = pedidoViewModel.Entrada,
                    Saida      = pedidoViewModel.Saida
                });
            }
            else
            {
                pedidoViewModel.Errors.Add(new PedidoErrorViewModel()
                {
                    Name    = "Entrada",
                    Message = "Itens não atende os requisitos"
                });
            }

            pedidoViewModel.HistoricoPedidos = _pedidoRepository.GetAll();

            return(pedidoViewModel);
        }