Esempio n. 1
0
        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));
            }
        }