private RespostaConsultaNL ReturnMessageForQueryNumberNL(XmlDocument document, string tipoDocumento, string nrReducao, string nrSuplementacao) { RespostaConsultaNL resultado = null; var status = Convert.ToBoolean(document.GetElementsByTagName("StatusOperacao").Item(0)?.InnerText); var message = document.GetElementsByTagName("MsgErro").Item(0)?.InnerText; if (string.IsNullOrEmpty(message)) { message = document.GetElementsByTagName("MsgRetorno").Item(0)?.InnerText; } if (!status || !string.IsNullOrWhiteSpace(message)) { throw new SidsException("SIAFEM - " + message); } var dict = new StringDictionary(); dict.Add("Item", "Codigo"); var doc = document.GetElementsByTagName("documento"); XmlNode doc2 = doc.Count > 1 ? doc.Item(1).ParentNode : doc.Item(0).ParentNode; var xml = doc2.OuterXml.ToXml("SIAFEM"); var docFixed = xml.RepairRepeatedTagWithNumbers("ItensLiquidados", dict); var documentos = docFixed.GetElementsByTagName("documento"); foreach (XmlNode node in documentos) { var parent = node.ParentNode.ParentNode.ParentNode; var type = node.ParentNode.ParentNode.NodeType; if (parent == null || parent.Name == "Doc_Retorno") { var child = node.OuterXml.ToXml("SIAFEM"); resultado = child.Deserialize <RespostaConsultaNL>(); } } ListaEventosNL lista = new ListaEventosNL(); XmlNode root = documentos.Item(0); int contador = 1; if (root.HasChildNodes) { for (int i = 0; i < root.ChildNodes.Count; i++) { if (root.ChildNodes[i].Name == "Classificacao" + contador) { lista.Classificacao = root.ChildNodes[i].InnerText; } if (root.ChildNodes[i].Name == "Evento" + contador) { lista.Evento = root.ChildNodes[i].InnerText; } if (root.ChildNodes[i].Name == "Fonte" + contador) { lista.Fonte = root.ChildNodes[i].InnerText; } if (root.ChildNodes[i].Name == "RecDesp" + contador) { lista.RecDesp = root.ChildNodes[i].InnerText; } if (root.ChildNodes[i].Name == "InscEvento" + contador) { lista.InscEvento = root.ChildNodes[i].InnerText; } if (root.ChildNodes[i].Name == "Valor" + contador) { lista.Valor = root.ChildNodes[i].InnerText; contador++; resultado.ListaEventosNL.Add(lista); lista = new ListaEventosNL(); } } } if (resultado != null) { resultado.NumeroReducao = nrReducao; resultado.NumeroSuplementacao = nrSuplementacao; resultado.TipoDocumento = tipoDocumento; } return(resultado); }
public ActionResult ImprimirMov(int id, int idMovimentacao, string tipoDocumento, int numSequencia, int numAgrupamento, string numDocumento, int opcaoImpressao, int opcaoAgrupamento) { try { var listaNL = new List <RespostaConsultaNL>(); var listaNC = new List <RespostaConsultaNC>(); var usuario = App.AutenticacaoService.GetUsuarioLogado(); var movimentacao = App.MovimentacaoService.Selecionar(idMovimentacao); string nrReducao, nrSuplementacao, unidadeGestoraEmitenteNotaCredito = "", gestaoEmitenteNotaCredito = ""; int numSeqReducao = numSequencia, numSeqSuplementacao = numSequencia; // Na NC o valor da variável numSequencia deverá ser sempre 1, quando variar o tipo de movimentação orçamentária (Transferência ou Estorno) // Tratamento para UG Emitente quando for estorno if (tipoDocumento == "Nota de Crédito") { var unidadeGestoraEmitenteNC = movimentacao.Cancelamento.Where(a => a.NrSequencia == numSequencia).Select(b => b.UnidadeGestoraFavorecida)?.FirstOrDefault(); var gestaoEmitenteNC = movimentacao.Cancelamento.Where(a => a.NrSequencia == numSequencia).Select(b => b.GestaoFavorecida)?.FirstOrDefault(); numSeqReducao = movimentacao.IdTipoMovimentacao == 1 ? 1 : numSequencia; numSeqSuplementacao = movimentacao.IdTipoMovimentacao == 2 ? 1 : numSequencia; unidadeGestoraEmitenteNotaCredito = movimentacao.IdTipoMovimentacao == 2 ? unidadeGestoraEmitenteNC : movimentacao.UnidadeGestoraEmitente; gestaoEmitenteNotaCredito = movimentacao.IdTipoMovimentacao == 2 ? gestaoEmitenteNC : movimentacao.GestaoEmitente; } nrReducao = movimentacao.ReducaoSuplementacao .Where(a => a.RedSup == "R" && a.NrSequencia == numSeqReducao).Select(x => x.NrSuplementacaoReducao)?.FirstOrDefault(); nrSuplementacao = movimentacao.ReducaoSuplementacao .Where(a => a.RedSup == "S" && a.NrSequencia == numSeqSuplementacao).Select(x => x.NrSuplementacaoReducao)?.FirstOrDefault(); // Lista Nº de Notas por agrupamento var listaNotaCancelamentoAgrup = movimentacao.Cancelamento.Where(a => a.NrAgrupamento == numAgrupamento).Select(b => new { b.NumeroSiafem, b.Id, b.NrSequencia }).ToList(); var listaNotaDistribucaoAgrup = movimentacao.Distribuicao.Where(a => a.NrAgrupamento == numAgrupamento).Select(b => new { b.NumeroSiafem, b.Id, b.NrSequencia }).ToList(); var listaNotaCreditoAgrup = movimentacao.NotasCreditos.Where(a => a.NrAgrupamento == numAgrupamento).Select(b => new { b.NumeroSiafem, b.Id, b.NrSequencia }).ToList(); if (numDocumento == "" || movimentacao.UnidadeGestoraEmitente == "" || movimentacao.GestaoEmitente == "") { throw new Exception(" SIAFEM:<br> - Nº Documento inválido<br> ou Unidade Gestora Emitente inválido<br> ou Gestão Emitente inválido"); } // NL if ((tipoDocumento == "Cancelamento" || tipoDocumento == "Distribuição") && opcaoImpressao == 1) { var nrReducaoSuplementacao = tipoDocumento == "Cancelamento" ? nrReducao : nrSuplementacao; var consultaNL = new RespostaConsultaNL(); consultaNL = App.MovimentacaoService.ConsultaNL(usuario, movimentacao.UnidadeGestoraEmitente, movimentacao.GestaoEmitente, numDocumento, tipoDocumento, nrReducao, nrSuplementacao); Session[App.BaseService.GetCurrentIp()] = HelperReport.GerarPdfMovimentacaoOrcamentariaNL(consultaNL, nrReducaoSuplementacao, tipoDocumento); } // NC else if (tipoDocumento == "Nota de Crédito" && opcaoImpressao == 1) { var consultaNC = App.MovimentacaoService.ConsultaNC(usuario, unidadeGestoraEmitenteNotaCredito, gestaoEmitenteNotaCredito, numDocumento, tipoDocumento, nrReducao, nrSuplementacao); Session[App.BaseService.GetCurrentIp()] = HelperReport.GerarPdfMovimentacaoOrcamentariaNC(consultaNC, nrReducao, nrSuplementacao, tipoDocumento, movimentacao.GestaoEmitente); } else // Agrupamento { if (opcaoAgrupamento == 1 || opcaoAgrupamento == 3) // NL Cancelamento / Distribuição / TODOS { // Cancelamento foreach (var item in listaNotaCancelamentoAgrup) { nrReducao = movimentacao.ReducaoSuplementacao .Where(a => a.RedSup == "R" && a.NrSequencia == item.NrSequencia) .Select(x => x.NrSuplementacaoReducao)?.FirstOrDefault(); if (string.IsNullOrWhiteSpace(item.NumeroSiafem)) { throw new Exception(" SIAFEM:<br> - Nº Documento inválido<br> ou Unidade Gestora Emitente inválido<br> ou Gestão Emitente inválido"); } var consultaCancNL = App.MovimentacaoService.ConsultaNL(usuario, movimentacao.UnidadeGestoraEmitente, movimentacao.GestaoEmitente, item.NumeroSiafem, "Cancelamento", nrReducao, ""); listaNL.Add(consultaCancNL); } // Distribuição foreach (var item in listaNotaDistribucaoAgrup) { nrSuplementacao = movimentacao.ReducaoSuplementacao .Where(a => a.RedSup == "S" && a.NrSequencia == item.NrSequencia) .Select(x => x.NrSuplementacaoReducao)?.FirstOrDefault(); if (string.IsNullOrWhiteSpace(item.NumeroSiafem)) { throw new Exception(" SIAFEM:<br> - Nº Documento inválido<br> ou Unidade Gestora Emitente inválido<br> ou Gestão Emitente inválido"); } var consultaDistribuicaoNL = App.MovimentacaoService.ConsultaNL(usuario, movimentacao.UnidadeGestoraEmitente, movimentacao.GestaoEmitente, item.NumeroSiafem, "Distribuição", "", nrSuplementacao); listaNL.Add(consultaDistribuicaoNL); } } if (opcaoAgrupamento == 2 || opcaoAgrupamento == 3) // NC / TODOS { // Nota de Crédito foreach (var item in listaNotaCreditoAgrup) { // Na NC o valor da variável numSequencia deverá ser sempre 1, quando variar o tipo de movimentação orçamentária (Transferência ou Estorno) numSeqReducao = movimentacao.IdTipoMovimentacao == 1 ? 1 : item.NrSequencia; numSeqSuplementacao = movimentacao.IdTipoMovimentacao == 2 ? 1 : item.NrSequencia; nrReducao = movimentacao.ReducaoSuplementacao .Where(a => a.RedSup == "R" && a.NrSequencia == numSeqReducao) .Select(x => x.NrSuplementacaoReducao)?.FirstOrDefault(); nrSuplementacao = movimentacao.ReducaoSuplementacao .Where(a => a.RedSup == "S" && a.NrSequencia == numSeqSuplementacao) .Select(x => x.NrSuplementacaoReducao)?.FirstOrDefault(); var unidadeGestoraEmitenteNC = movimentacao.Cancelamento.Where(a => a.NrSequencia == item.NrSequencia).Select(b => b.UnidadeGestoraFavorecida)?.FirstOrDefault(); var gestaoEmitenteNC = movimentacao.Cancelamento.Where(a => a.NrSequencia == item.NrSequencia).Select(b => b.GestaoFavorecida)?.FirstOrDefault(); unidadeGestoraEmitenteNotaCredito = movimentacao.IdTipoMovimentacao == 2 ? unidadeGestoraEmitenteNC : movimentacao.UnidadeGestoraEmitente; gestaoEmitenteNotaCredito = movimentacao.IdTipoMovimentacao == 2 ? gestaoEmitenteNC : movimentacao.GestaoEmitente; if (string.IsNullOrWhiteSpace(item.NumeroSiafem)) { throw new Exception(" SIAFEM:<br> - Nº Documento inválido<br> ou Unidade Gestora Emitente inválido<br> ou Gestão Emitente inválido"); } var consultaCreditoNC = App.MovimentacaoService.ConsultaNC(usuario, unidadeGestoraEmitenteNotaCredito, gestaoEmitenteNotaCredito, item.NumeroSiafem, "Nota de Crédito", nrReducao, nrSuplementacao); listaNC.Add(consultaCreditoNC); } } Session[App.BaseService.GetCurrentIp()] = HelperReport.GerarPdfMovimentacaoAgrupamento(listaNL, listaNC, movimentacao.GestaoEmitente, numAgrupamento); } return(Json(new { Status = "Sucesso" })); } catch (Exception ex) { return(new HttpStatusCodeResult(500, ex.Message)); } }