Esempio n. 1
0
        public ActionResult Salva()
        {
            List <Dominio.PedidoItemFornecedor> pi = new List <Dominio.PedidoItemFornecedor>();

            // Recebe os parâmetros do formulário e trata
            var form = Request.Form.AllKeys;

            string field = "", value = "", produto = "", qtde = "";
            var    prod = new Dominio.Produto();
            var    forn = new Dominio.Fornecedor();
            List <Infraestrutura.FornecedorServiceRef.RetornoRequisicao> erros =
                new List <Infraestrutura.FornecedorServiceRef.RetornoRequisicao>();

            foreach (string key in form)
            {
                // Campo name do form
                field = key;

                // Valor do form
                value = Request.Form[field];

                // Limita a busca para fornecedores
                if (field.IndexOf("forn_") == 0)
                {
                    // Caso esteja populado:
                    if (value != "")
                    {
                        // produto
                        produto = field.Replace("forn_", "");
                        qtde    = Request.Form["qtde_" + produto];
                        prod    = pc.BuscarPeloId(long.Parse(produto));
                        forn    = fc.BuscarPeloId(long.Parse(value));

                        var servicoFornecedor = new Infraestrutura.FornecedorServiceRef.ServiceFornecedorClient();
                        var retornoServico    = servicoFornecedor.ObterDisponibilidadeProduto(
                            new Infraestrutura.FornecedorServiceRef.ProdutoConsultado()
                        {
                            QuantidadeRequerida = int.Parse(qtde),
                            Referencia          = prod.Referencia
                        });

                        if (retornoServico.DataEnvio.HasValue)
                        {
                            pi.Add(new Dominio.PedidoItemFornecedor
                            {
                                //Fornecedor = forn,
                                IdFornecedor = forn.IdFornecedor,
                                //Produto = prod,
                                IdProduto    = prod.IdProduto,
                                Quantidade   = int.Parse(qtde),
                                DataPrevista = retornoServico.DataEnvio.Value
                            });
                        }
                        else
                        {
                            // Exibe mensagem retornada pelo serviço caso ocorra erro
                            erros.Add(retornoServico);
                        }
                    }
                }
            }

            if (erros.Count == 0)
            {
                Dominio.Compra c =
                    new Dominio.Compra
                {
                    Pedidos  = pi,
                    NumeroNF = new Random().Next(1, 1000000 + 1),
                    Data     = DateTime.Now,
                    Status   = Dominio.Enums.StatusCompra.AguardandoRecebimento   // Vem do serviço
                };
                cc.Adicionar(c);
                var json = JsonConvert.SerializeObject(c, Formatting.Indented,
                                                       new JsonSerializerSettings
                {
                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                });
                return(Content(json, "application/json"));
            }
            else
            {
                var json = JsonConvert.SerializeObject(erros, Formatting.Indented,
                                                       new JsonSerializerSettings
                {
                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                });
                return(Content(json, "application/json"));
            }
        }