Пример #1
0
        private IHttpActionResult ValidarExportacaoPedido(GDASession sessao, PedidosExportarDto exportacao)
        {
            if (!Config.PossuiPermissao(Config.FuncaoMenuPedido.ExportarImportarPedido))
            {
                return(this.ErroValidacao("Exportação desativada no sistema."));
            }

            foreach (var pedido in exportacao.Pedidos)
            {
                if (pedido.IdPedido.GetValueOrDefault() > 0)
                {
                    var situacao = PedidoExportacaoDAO.Instance.GetSituacaoExportacao(sessao, (uint)pedido.IdPedido);

                    if (situacao == PedidoExportacao.SituacaoExportacaoEnum.Exportando)
                    {
                        return(this.ErroValidacao($"O pedido num.: {pedido.IdPedido} está com situacao Exportando, consulte a situação do pedido."));
                    }
                }
            }

            var validacao = this.ValidarExistenciaIdsFornecedoresPedidosEProdutosPedidoExportacao(sessao, exportacao.Pedidos);

            return(validacao);
        }
        public IHttpActionResult ExportarPedidos(PedidosExportarDto dados)
        {
            using (var sessao = new GDATransaction())
            {
                try
                {
                    sessao.BeginTransaction();

                    var validacao = this.ValidarExportacaoPedido(sessao, dados);

                    if (validacao != null)
                    {
                        return(validacao);
                    }

                    var fornecedor = FornecedorDAO.Instance.GetElement(sessao, (uint)(dados.IdFornecedor ?? 0));
                    var loja       = LojaDAO.Instance.GetElement(sessao, UserInfo.GetUserInfo.IdLoja);

                    Dictionary <uint, bool>         idsPedidosComOuSemBeneficiamentos = new Dictionary <uint, bool>();
                    Dictionary <uint, List <uint> > idsPedidosProdutosPedido          = new Dictionary <uint, List <uint> >();
                    List <uint> idsProdutosPedidos = new List <uint>();
                    List <uint> idsProdutosPedido  = new List <uint>();

                    foreach (var pedido in dados.Pedidos)
                    {
                        idsPedidosComOuSemBeneficiamentos.Add(
                            (uint)(pedido.IdPedido ?? 0),
                            pedido.ExportarBeneficiamento.GetValueOrDefault(false));

                        idsProdutosPedido = pedido.IdsProdutoPedido.Select(idpp => (uint)idpp).ToList();

                        idsPedidosProdutosPedido.Add((uint)(pedido.IdPedido ?? 0), idsProdutosPedido);

                        idsProdutosPedidos.AddRange(idsProdutosPedido);
                    }

                    uint[] listaIdsPedidos = new uint[idsPedidosComOuSemBeneficiamentos.Count];
                    idsPedidosComOuSemBeneficiamentos.Keys.CopyTo(listaIdsPedidos, 0);

                    byte[] buffer = UtilsExportacaoPedido.ConfigurarExportacao(idsPedidosComOuSemBeneficiamentos, idsProdutosPedidos.ToArray());

                    UtilsExportacaoPedido.CriarExportacao((uint)fornecedor.IdFornec, listaIdsPedidos, idsPedidosProdutosPedido);

                    var urlFornecedor = $"{fornecedor.UrlSistema.ToLower().Substring(0, fornecedor.UrlSistema.ToLower().LastIndexOf("/webglass")).TrimEnd('/')}/service/wsexportacaopedido.asmx";

                    object[] parametros        = new object[] { loja.Cnpj, 1, buffer };
                    var      retornoWebService = WebService.ChamarWebService(urlFornecedor, "SyncService", "EnviarPedidosFornecedor", parametros);

                    string[] dadosRetorno = retornoWebService as string[];

                    UtilsExportacaoPedido.ProcessarDadosExportacao(sessao, dadosRetorno, idsPedidosComOuSemBeneficiamentos);

                    sessao.Commit();
                    sessao.Close();

                    return(this.Ok(dadosRetorno[1]));
                }
                catch (Exception e)
                {
                    sessao.Rollback();
                    sessao.Close();
                    return(this.ErroValidacao("Erro ao exportar pedidos.", e));
                }
            }
        }