public override async Task Transmitir() { Progresso progresso = null; progresso = new Progresso(async() => { var retTransmissao = await ConsultarRespostaInicial(true); await progresso.Update(1); var status = retTransmissao.StatusResposta; if (status == 103 || status == 104) { if (status == 103) { var tempoResposta = retTransmissao.DadosRecibo.TempoMedioResposta; await Task.Delay(TimeSpan.FromSeconds(tempoResposta + 5)); } await progresso.Update(2); bool homologacao; try { homologacao = ((NFe)ItemCompleto).AmbienteTestes; } catch (Exception e) { throw new AnaliseErro("Erro durante a obtenção do ambiente de testes.", e); } var resultadoResposta = await ConsultarRespostaFinal(retTransmissao, homologacao); await progresso.Update(3); var protocoloResposta = resultadoResposta.Protocolo?.InfProt; if (protocoloResposta?.cStat == 100) { var nfe = (NFe)ItemCompleto; ItemCompleto = new ProcessoNFe() { NFe = nfe, ProtNFe = resultadoResposta.Protocolo }; ItemBanco.Status = (int)StatusNota.Emitida; AtualizarDI(ItemCompleto); OnStatusChanged(StatusNota.Emitida); await progresso.Update(4); using (var opEx = new BaseGeral.Repositorio.OperacoesExtras()) { var rvVinculado = opEx.GetRVVinculado(nfe.Informacoes.Id); if (rvVinculado != null) { if (rvVinculado.Cancelado) { var dialog = new MessageDialog("Um registro de venda já cancelado está vinculado a esta nota fiscal, você ainda deseja aplicar as alterações no estoque?", "Aviso"); dialog.Commands.Add(new UICommand("Sim", x => AtualizarEstoques())); dialog.Commands.Add(new UICommand("Não")); await dialog.ShowAsync(); } else { var dialog = new MessageDialog("Um registro de venda válido está vinculado a esta nota fiscal, você ainda deseja aplicar as alterações no estoque?", "Aviso"); dialog.Commands.Add(new UICommand("Sim", x => AtualizarEstoques())); dialog.Commands.Add(new UICommand("Não")); await dialog.ShowAsync(); } } else { AtualizarEstoques(); } } void AtualizarEstoques() { var tpOp = nfe.Informacoes.identificacao.TipoOperacao; if (tpOp == 1 && DefinicoesPermanentes.ConfiguracoesEstoque.NFeS) { using (var leit = new BaseGeral.Repositorio.Leitura()) using (var escr = new BaseGeral.Repositorio.Escrita()) { escr.AtualizarEstoques(DefinicoesTemporarias.DateTimeNow, (from prod in nfe.Informacoes.produtos let orig = leit.ObterProduto(prod.Produto.CodigoProduto) where orig != null select(orig.Id, prod.Produto.QuantidadeComercializada * -1)).ToArray()); } } else if (tpOp == 0 && DefinicoesPermanentes.ConfiguracoesEstoque.NFeE) { using (var leit = new BaseGeral.Repositorio.Leitura()) using (var escr = new BaseGeral.Repositorio.Escrita()) { escr.AtualizarEstoques(DefinicoesTemporarias.DateTimeNow, (from prod in nfe.Informacoes.produtos let orig = leit.ObterProduto(prod.Produto.CodigoProduto) where orig != null select(orig.Id, prod.Produto.QuantidadeComercializada)).ToArray()); } } } return(true, protocoloResposta.xMotivo); } else if (protocoloResposta != null) { return(false, $"{protocoloResposta.cStat}: {protocoloResposta.xMotivo}"); } else { return(false, $"{resultadoResposta.StatusResposta}: {resultadoResposta.DescricaoResposta}"); } } else { return(false, $"{retTransmissao.StatusResposta}: {retTransmissao.DescricaoResposta}"); } }, "Processar e enviar requisição inicial", "Aguardar tempo médio de resposta", "Processar e enviar requisição final", "Processar e analisar resposta final"); progresso.Start(); await progresso.ShowAsync(); }