Example #1
0
 public EOuput PresupuestoCredito([System.Xml.Serialization.XmlElementAttribute("ZfmWsCredito")] ZfmWsCredito consulta)
 {
     try
     {
         return(_sources.PresupuestoCredito(consulta, unknownHeaders, UsuarioSession));
     }
     catch (Exception ex)
     {
         throw _sources.HandleError(ex);
     }
 }
Example #2
0
        public EOuput PresupuestoCredito(ZfmWsCredito consulta, SoapUnknownHeader[] unknownHeaders, User UsuarioSession)
        {
            #region Configuracion del envio de Mail
            string mailDestinatarios = ConfigurationManager.AppSettings["Emails"];
            string mailMensaje       = string.Empty;
            bool   mailError         = false;
            #endregion

            bool   requestError = false;
            string request      = string.Empty;
            string requestXml   = string.Empty;

            log.Debug("Entra " + ServiceLogName);

            try
            {
                #region Request to XML
                if (consulta != null)
                {
                    try
                    {
                        request    = ((XmlDocument)Functions.GenericToXmlDocument(consulta)).InnerXml;
                        requestXml = Functions.TransforXml(request);
                    }
                    catch (Exception ex)
                    {
                        log.Error("Error transformando request Xml: " + ex.Message);
                    }
                }
                else
                {
                    mailError    = true;
                    mailMensaje += "\n La solicitud recibida desde Economía se encuentra vacia, lo cual puede darse por las siguientes razones:" + "  " +
                                   "<br/> \n * No se ha enviado el objeto en el Body" +
                                   "<br/> \n * No se ha respetado la estructura del objeto" +
                                   "<br/> \n * No se ha enviado el objeto con el Namespace correspondiente" +
                                   "<br/> \n * No se han enviado los objetos con los prefijos correspondientes a causa de envio incorrecto o no envio del Namespace" +
                                   "<br/> \n";
                }
                #endregion

                #region Director Credenciales
                try
                {
                    if (!UsuarioSession.HasToken)
                    {
                        UsuarioSession = new UserLogged().GetTokenFromHeader(unknownHeaders, "token");
                    }

                    if (UsuarioSession != null &&
                        !string.IsNullOrEmpty(UsuarioSession.Entity) && UsuarioSession.Entity.Length > 0 &&
                        !string.IsNullOrEmpty(UsuarioSession.IP) && UsuarioSession.IP.Length > 0)
                    {
                        log.Info(ServiceLogName + " - Usuario CUIT: " + UsuarioSession.Entity + " IP: " + UsuarioSession.IP);
                    }
                    else
                    {
                        throw new Exception("Ocurrio un error al obtener las credenciales");
                    }
                }
                catch (Exception ex)
                {
                    log.Error("Error Director: " + ex.Message);
                }
                #endregion

                service.ZfmWsCredito ocredito = new service.ZfmWsCredito();

                //Asignacion CUIL e IP
                ocredito.ICuilUser = UsuarioSession.Entity;
                ocredito.IIpUser   = UsuarioSession.IP;

                #region Validacion Cabecera
                if (consulta != null && consulta.ICabecera != null)
                {
                    var validadorCabecera = new validadorLongitud <CreditoCabecera>();

                    var erroresCreditoCabecera = validadorCabecera.validarLongitud(consulta.ICabecera);

                    log.Debug("Invoco --> validar longuitud ICabecera: " + consulta.ICabecera.ToString());

                    if (erroresCreditoCabecera.Count > 0)
                    {
                        mailError    = true;
                        mailMensaje += "\n Se produjo un error al recibir información desde Economía:" + "  ";
                        foreach (var item in erroresCreditoCabecera)
                        {
                            mailMensaje += "<br/> \n Se ha registrado un error en la longuitud del objeto Cabecera en el campo " +
                                           item.Nombre + " donde su longuitud es " + item.Longitud + " y tendria que ser: " + item.LongitudEsperada;
                        }

                        log.ErrorFormat("Errores: " + mailMensaje);
                    }
                    else
                    {
                        ocredito.ICabecera                       = new service.ZdsCreditoCabecera();
                        ocredito.ICabecera.Fechaenvio            = consulta.ICabecera.Fechaenvio;
                        ocredito.ICabecera.Tipocomprobante       = consulta.ICabecera.Tipocomprobante;
                        ocredito.ICabecera.Ejercicio             = consulta.ICabecera.Ejercicio;
                        ocredito.ICabecera.Numerocomprobante     = consulta.ICabecera.Numerocomprobante;
                        ocredito.ICabecera.Entidademisora        = consulta.ICabecera.Entidademisora;
                        ocredito.ICabecera.Entidadproceso        = consulta.ICabecera.Entidadproceso;
                        ocredito.ICabecera.Estado                = consulta.ICabecera.Estado;
                        ocredito.ICabecera.Fechaaplicacion       = consulta.ICabecera.Fechaaplicacion;
                        ocredito.ICabecera.Ejercicioactoadm      = consulta.ICabecera.Ejercicioactoadm;
                        ocredito.ICabecera.Numeroactoadm         = consulta.ICabecera.Numeroactoadm;
                        ocredito.ICabecera.Tipoactoadm           = consulta.ICabecera.Tipoactoadm;
                        ocredito.ICabecera.Fechaactoadm          = consulta.ICabecera.Fechaactoadm;
                        ocredito.ICabecera.Codigoconcepto        = consulta.ICabecera.Codigoconcepto;
                        ocredito.ICabecera.Descripcionconcepto   = consulta.ICabecera.Descripcionconcepto;
                        ocredito.ICabecera.Identificaciontramite = consulta.ICabecera.Identificaciontramite;
                    }
                }
                else
                {
                    mailError    = true;
                    mailMensaje += " <br/> \n  No se ha enviado el objeto ICabecera \n ";
                }

                #endregion

                #region Validacion Entradas Credito

                if (consulta != null && consulta.ItEntradaCredito != null && consulta.ItEntradaCredito.Any())
                {
                    log.Debug("Invoco --> validar longuitud ITEntradaCredito: " + consulta.ItEntradaCredito.Count() + " Items");

                    var validadorEntraCredito = new validadorLongitud <EntradasCredito>();

                    List <service.ZdsEntradasCredito> EntradasCredito = new List <service.ZdsEntradasCredito>();

                    foreach (var item in consulta.ItEntradaCredito)
                    {
                        var erroresEntradaCredito = validadorEntraCredito.validarLongitud(item);

                        //log.Debug("Invoco --> validar longuitud ITEntradaCredito: " + consulta.ItEntradaCredito.ToString());

                        if (erroresEntradaCredito.Count > 0)
                        {
                            mailError = true;
                            foreach (var item2 in erroresEntradaCredito)
                            {
                                mailMensaje += "<br/> \n Se ha registrado un error en la longuitud del objeto entrada credito en el campo " +
                                               item2.Nombre + " donde su longuitud es " + item2.Longitud + " y tendria que ser: " + item2.LongitudEsperada;
                            }

                            log.ErrorFormat("Errores: " + mailMensaje);
                        }
                        else
                        {
                            var itemCredito = new service.ZdsEntradasCredito();
                            itemCredito.Sector                       = item.Sector;
                            itemCredito.Subsector                    = item.Subsector;
                            itemCredito.Caracter                     = item.Caracter;
                            itemCredito.Jurisdiccion                 = item.Jurisdiccion;
                            itemCredito.Subjurisdiccion              = item.Subjurisdiccion;
                            itemCredito.Entidad                      = item.Entidad;
                            itemCredito.Saf                          = item.Saf;
                            itemCredito.Programa                     = item.Programa;
                            itemCredito.Subprograma                  = item.Subprograma;
                            itemCredito.Proyecto                     = item.Proyecto;
                            itemCredito.Actividad                    = item.Actividad;
                            itemCredito.Obra                         = item.Obra;
                            itemCredito.Ubicaciongeografica          = item.Ubicaciongeografica;
                            itemCredito.Inciso                       = item.Inciso;
                            itemCredito.Principal                    = item.Principal;
                            itemCredito.Parcial                      = item.Parcial;
                            itemCredito.Subparcial                   = item.Subparcial;
                            itemCredito.Procedencia                  = item.Procedencia;
                            itemCredito.Fuente                       = item.Fuente;
                            itemCredito.Moneda                       = item.Moneda;
                            itemCredito.Entidadorigendestino         = item.Entidadorigendestino;
                            itemCredito.Prestamoexterno              = item.Prestamoexterno;
                            itemCredito.Clasificadoreconomicocredito = item.Clasificadoreconomicocredito;
                            itemCredito.Finalidad                    = item.Finalidad;
                            itemCredito.Funcion                      = item.Funcion;
                            itemCredito.Bapin                        = item.Bapin;
                            itemCredito.Creditoinicial               = item.Creditoinicial;
                            itemCredito.Creditovigente               = item.Creditovigente;
                            itemCredito.Creditorestringido           = item.Creditorestringido;
                            itemCredito.Importecomprobantecredito    = item.Importecomprobantecredito;

                            EntradasCredito.Add(itemCredito);
                        }

                        if (!string.IsNullOrEmpty(item.Creditoinicial) && item.Creditoinicial.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada credito en el campo " + " " +
                                           "Creditoinicial" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }

                        if (!string.IsNullOrEmpty(item.Creditovigente) && item.Creditovigente.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada credito en el campo " + " " +
                                           "Creditovigente" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }

                        if (!string.IsNullOrEmpty(item.Creditorestringido) && item.Creditorestringido.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada credito en el campo " + " " +
                                           "Creditorestringido" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }

                        if (!string.IsNullOrEmpty(item.Importecomprobantecredito) && item.Importecomprobantecredito.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada credito en el campo " + " " +
                                           "Importecomprobantecredito" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }
                    }

                    if (EntradasCredito != null && EntradasCredito.Count > 0)
                    {
                        ocredito.ItEntradaCredito = EntradasCredito.ToArray();
                    }
                }
                else
                {
                    //mailError = true;
                    //mailMensaje += " <br/> \n  No se ha enviado el objeto ITEntradaCredito \n ";
                }

                #endregion

                #region Validacion Entradas Recursos

                if (consulta != null && consulta.ItEntradaRecurso != null && consulta.ItEntradaRecurso.Any())
                {
                    log.Debug("Invoco --> validar longuitud ITEntradaRecurso: " + consulta.ItEntradaRecurso.Count() + " Items");

                    var validadorEntraRecurso = new validadorLongitud <EntradasRecurso>();

                    List <service.ZdsEntradasRecurso> EntradasRecurso = new List <service.ZdsEntradasRecurso>();

                    foreach (var item in consulta.ItEntradaRecurso)
                    {
                        var erroresEntradaRecurso = validadorEntraRecurso.validarLongitud(item);

                        //log.Debug("Invoco --> validar longuitud ITEntradaRecurso: " + consulta.ItEntradaRecurso.ToString());

                        if (erroresEntradaRecurso.Count > 0)
                        {
                            mailError = true;
                            foreach (var item2 in erroresEntradaRecurso)
                            {
                                mailMensaje += "<br/> \n Se ha registrado un error en la longuitud del objeto entrada recurso en el campo " +
                                               item2.Nombre + " donde su longuitud es " + item2.Longitud + " y tendria que ser: " + item2.LongitudEsperada;
                            }

                            log.ErrorFormat("Errores: " + mailMensaje);
                        }
                        else
                        {
                            var itemRecurso = new service.ZdsEntradasRecurso();
                            itemRecurso.Sector                       = item.Sector;
                            itemRecurso.Subsector                    = item.Subsector;
                            itemRecurso.Caracter                     = item.Caracter;
                            itemRecurso.Jurisdiccion                 = item.Jurisdiccion;
                            itemRecurso.Subjurisdiccion              = item.Subjurisdiccion;
                            itemRecurso.Entidad                      = item.Entidad;
                            itemRecurso.Saf                          = item.Saf;
                            itemRecurso.Tipo                         = item.Tipo;
                            itemRecurso.Clase                        = item.Clase;
                            itemRecurso.Concepto                     = item.Concepto;
                            itemRecurso.Subconcepto                  = item.Subconcepto;
                            itemRecurso.Procedencia                  = item.Procedencia;
                            itemRecurso.Fuente                       = item.Fuente;
                            itemRecurso.Moneda                       = item.Moneda;
                            itemRecurso.Entidadorigendestino         = item.Entidadorigendestino;
                            itemRecurso.Prestamoexterno              = item.Prestamoexterno;
                            itemRecurso.Clasificadoreconomicorecurso = item.Clasificadoreconomicorecurso;
                            itemRecurso.Recursoinicial               = item.Recursoinicial;
                            itemRecurso.Recursorestringido           = item.Recursorestringido;
                            itemRecurso.Recursovigente               = item.Recursovigente;
                            itemRecurso.Importecomprobanterecurso    = item.Importecomprobanterecurso;

                            EntradasRecurso.Add(itemRecurso);
                        }


                        if (!string.IsNullOrEmpty(item.Recursoinicial) && item.Recursoinicial.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada recurso en el campo " + " " +
                                           "Recursoinicial" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }

                        if (!string.IsNullOrEmpty(item.Recursovigente) && item.Recursovigente.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada recurso en el campo " + " " +
                                           "Recursovigente" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }

                        if (!string.IsNullOrEmpty(item.Recursorestringido) && item.Recursorestringido.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada recurso en el campo " + " " +
                                           "Recursorestringido" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }

                        if (!string.IsNullOrEmpty(item.Importecomprobanterecurso) && item.Importecomprobanterecurso.Contains(","))
                        {
                            mailError    = true;
                            mailMensaje += "<br/> \n Se ha registrado un error en el objeto entrada recurso en el campo " + " " +
                                           "Importecomprobanterecurso" + " contiene " + " " + "coma(,)" + " " + " en lugar de " + "punto(.)";
                        }
                    }

                    if (EntradasRecurso != null && EntradasRecurso.Count > 0)
                    {
                        ocredito.ItEntradaRecurso = EntradasRecurso.ToArray();
                    }
                }
                else
                {
                    //mailError = true;
                    //mailMensaje += " <br/> \n  No se ha enviado el objeto ITEntradaRecurso \n ";
                }

                #endregion

                #region Envio mail con errores o hago la llamada a SAP
                //Envio de mail de errores
                if (mailError)
                {
                    throw new Exception(mailMensaje);
                }
                else
                {
                    using (var scope = new OperationContextScope(_service.InnerChannel))
                    {
                        //var section = (ClientSection)ConfigurationManager.GetSection("system.serviceModel/client");
                        string headerLanguage = ConfigurationManager.AppSettings["ZWS_CREDITOLanguage"];

                        if (!string.IsNullOrEmpty(headerLanguage))
                        {
                            HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty();
                            requestMessage.Headers["Accept-Language"] = headerLanguage;
                            OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage;
                        }

                        //sobreescribimos la URL
                        _service.Endpoint.Address = new EndpointAddress(ConfigurationManager.AppSettings["ZWS_CREDITOService"]);

                        service.ZfmWsCreditoResponse oRespuesta = new service.ZfmWsCreditoResponse();

                        try
                        {
                            oRespuesta = _service.ZfmWsCredito(ocredito);

                            if (!oRespuesta.EOutput.Message.Equals("OK", StringComparison.InvariantCultureIgnoreCase))
                            {
                                throw new Exception("Error intente nuevamente invocar al servicio");
                            }
                        }
                        catch (Exception ex)
                        {
                            mailError    = true;
                            mailMensaje += ex.Message;
                            requestError = true;
                        }

                        log.Debug("Invoco --> Envio: ICabecera " + (ocredito.ICabecera != null ? ocredito.ICabecera.ToString() : "No enviado"));
                        log.Debug("Invoco --> Envio: ItEntradaCredito " + (ocredito.ItEntradaCredito != null && ocredito.ItEntradaCredito.Any() ? (ocredito.ItEntradaCredito.Count() + " Items") : "No enviado"));
                        log.Debug("Invoco --> Envio: ItEntradaRecurso " + (ocredito.ItEntradaRecurso != null && ocredito.ItEntradaRecurso.Any() ? (ocredito.ItEntradaRecurso.Count() + " Items") : "No enviado"));
                        //log.Debug("Request  :" + ((XmlDocument)Functions.GenericToXmlDocument(ocredito)).InnerXml);//ASOSA REQUEST OBJECT LOG

                        //log.Debug("Response :" + ((XmlDocument)Functions.GenericToXmlDocument(oRespuesta)).InnerXml);//ASOSA RESPONSE OBJECT LOG
                        log.Debug("PresupuestoCredito ok");
                    }
                }
                #endregion

                if (mailError)
                {
                    throw new Exception(mailMensaje);
                }
            }
            catch (Exception err)
            {
                log.Error("Error al invocar el servicio SAP: Presupuesto Credito " + Environment.NewLine + err.Message + Environment.NewLine + err.StackTrace.ToString());

                #region Armado y envio del mail
                mailMensaje = "<br/> \n "
                              + "<br/> \n Error al invocar el servicio SAP: Presupuesto Credito"
                              + "<br/> \n"
                              + err.Message
                              + "<br/> \n"
                              + "<br/> \n Datos del solicitante de Economia: "
                              + "<br/> \n CUIT: " + (UsuarioSession.Entity ?? "No Identificado") + " - IP: " + (UsuarioSession.IP ?? "No Identificado")
                              + "<br/> \n "
                              + "<br/> \n Datos enviados por Economia  :"
                              + "<br/> \n "
                              + "<br/><div style='width:400px'><textarea rows='20' cols='40' style='border:none;'>" + requestXml + "</textarea></div>";


                enviarMail(mailMensaje, mailDestinatarios, "Error Servicio SAP-ESIDIF: Presupuesto Credito");
                #endregion
            }

            if (requestError)
            {
                throw new Exception("Error intente nuevamente");
            }

            return(respuesta);
        }