using System; using System.Collections.Generic; using System.Data.Entity.Validation; using System.Linq; using System.Web; using System.Web.Services; using ULA.Cathay.CreditoModel.Credito; using ULA.Cathay.CreditoModel.DAL.CorporativoDatosRecientes; using ULA.Cathay.CreditoModel.DAL.Credito; using ULA.Cathay.CreditoModel.Entidades; using Ultimus.Interfaces; using Ultimus.Interfaces.UltimusIntegration; using Ultimus.Utilitarios; using System.Data.Entity; using Ultimus.Interfaces.UltimusForm; using ULA.Cathay.WCFMetodosCathay.Library; using ULA.Cathay.WCFMetodosCathay.App_Code; namespace ULA.Cathay.WCFMetodosCathay { /// /// Summary description for MetodosCathay /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class MetodosCathay : System.Web.Services.WebService { UltimusLogs log = new UltimusLogs("MetodosCathay"); [WebMethod] public BaseJson Remueve_IncidentesActivos(string NumeroIndentificacion, int Incidente) { IncidentesActivosClienteDAL mIncidentesActivosClienteDAL = new IncidentesActivosClienteDAL(); return mIncidentesActivosClienteDAL.Remover(NumeroIndentificacion, Incidente); } [WebMethod] public BaseJson GeneraIncidentes_Formalizacion(int IncidenteCredito) { UltimusIntegrationAPIController UltimusIntgration = new UltimusIntegrationAPIController(); BaseJson resp = new BaseJson(); string TaskID = null; int NumIncidente = 0; ProcesosDAL ProcesoDal = new ProcesosDAL(); SolicitudDAL SolicitudDal = new SolicitudDAL(); OfertaDAL OfertaDal = new OfertaDAL(); DatosGeneralesFormalizacionDAL DatosGeneralesFormalizacionDal = new DatosGeneralesFormalizacionDAL(); List Variables = new List(); EtapasDAL EtapasDal = new EtapasDAL(); DatosEntradaCondiciones DatosEntradaRecipientes = new DatosEntradaCondiciones(); EstructuraOrgChartDAL EstructuraOrgChartDal = new EstructuraOrgChartDAL(); EjecutivoDAL EjecutivoDal = new EjecutivoDAL(); DatosAsignacionRecipientes RepAsignacion = new DatosAsignacionRecipientes(); Oferta oferta; ObtieneParametros ultParametros = new ObtieneParametros(); string UsuarioIniciador = ""; string NombreProcesoCredito = "Credito"; string NombreProcesoFormalizacion = "Formalizacion"; string EtapaInicio = EnumEtapas.FR_Inicio_Formalizacion; string Etapa_Devuelto_Formalizacion = EnumEtapas.AP_Proceso_Credito; string summary = ""; string UsuarioAsignado = ""; int CodigoSolicitud = 0; List ListaProcesos; List EtapasFormalizacion; Solicitud solicitud; ClienteDAL ClienteDal = new ClienteDAL(); Cliente ClientePrincipal; Ejecutivo FormalizadorUEN; CaratulaCredito Caratula; List FacilidadesLinea; List FacilidadesEspecifico; List TramitesFormalizacionActuales; DatosGeneralesFormalizacion TramiteActualDevolver; FormalizacionDocumentosLegalesDAL FormalizacionDocumentosLegalesDal = new FormalizacionDocumentosLegalesDAL(); int? IdCategoria = 0; List EjecutivoAsistenteServicioRegulatorio = new List(); var modeloGetNodeValueEsquema = new UltimusValoresEsquema(); var nombreVariableEsquema = string.Empty; try { UsuarioIniciador = ultParametros.GetValueKeyRegedit("UsuarioProcesoUltimus", false); ListaProcesos = ProcesoDal.Obtener(); NombreProcesoCredito = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Credito).FirstOrDefault().NombreProceso; NombreProcesoFormalizacion = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Formalizacion).FirstOrDefault().NombreProceso; EtapasFormalizacion = EtapasDal.Obtener(null, EnumProcesos.Formalizacion); DatosEntradaRecipientes.CodigoProceso = EnumProcesos.Formalizacion; DatosEntradaRecipientes.CodEvaluacion = 1; #region OBTIENE TASKID ETAPA INICIO using (UltimusIntegrationClient UltimusClient = new UltimusIntegrationClient(UltimusIntgration.wSHttpBinding, UltimusIntgration.endpointAddress)) { string error= string.Empty; UltimusIncident DataTask = new UltimusIncident(); if (!UltimusClient.GetTaskByFilters(UsuarioIniciador, NombreProcesoFormalizacion, EtapaInicio, 0, out DataTask, out error) || !string.IsNullOrWhiteSpace(error)) throw new Exception("GetTaskByFilters: no se pudo obtener el taskid para generar los incidentes de formalizacion. " + error); TaskID = DataTask.TaskId; } #endregion solicitud = SolicitudDal.Obtener(IncidenteCredito, NombreProcesoCredito); if (solicitud == null) { resp.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString(); resp.DescripcionRespuesta = "No se encontró la solicitud"; return resp; } CodigoSolicitud = solicitud.IdSolicitud; ClientePrincipal = ClienteDal.ObtenerPrincipal(CodigoSolicitud); FormalizadorUEN = ClientePrincipal == null ? null : EjecutivoDal.ObtenerEjecutivo(ClientePrincipal.IdEjecutivo); oferta = OfertaDal.ObtenerOfertaSolicitud(new Oferta { IdSolicitud = CodigoSolicitud }); if (oferta == null || oferta.OfertaFacilidades == null || oferta.OfertaFacilidades.Count == 0) { resp.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString(); resp.DescripcionRespuesta = "No se encontró la oferta y sus facilidades para esta solicitud: " + CodigoSolicitud; return resp; } FacilidadesLinea = oferta.OfertaFacilidades.Where(c => c.Eslinea == true && c.Secuencia != 0).ToList(); FacilidadesEspecifico = oferta.OfertaFacilidades.Where(c => c.EsEspecifico == true && c.Secuencia != 0).ToList(); TramitesFormalizacionActuales = DatosGeneralesFormalizacionDal.Obtener_TramitesFormalizacion(CodigoSolicitud); IdCategoria = oferta.IdTipoCategoria; Caratula = new CaratulaCreditoDAL().ObtenerCaratula(CodigoSolicitud); #region SUMMARY Y VARIABLES Variables.Add(new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalIdSolicitud, NodeValue = solicitud.IdSolicitud }); Variables.Add(new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionIncidenteCredito, NodeValue = IncidenteCredito }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalCodigoTipoTramite, NodeValue = ClientePrincipal.IdTipoTramite }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalCodigoCategoria, NodeValue = oferta.IdTipoCategoria }); Variables.Add(new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnLinea, NodeValue = false }); Variables.Add(new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnEspecifico, NodeValue = false }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = null }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignadoUEN, NodeValue = false }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoRecipienteAsignado, NodeValue = null }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionEsGarantiaReal, NodeValue = false }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionIdFacilidad, NodeValue = null }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado, NodeValue = null }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevDocRecipienteAsignado, NodeValue = null }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoDesembolso, NodeValue = null }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRequiereEvaluacionCoordinador, NodeValue = false }); EjecutivoAsistenteServicioRegulatorio.Add(string.Format(EnumOC.UsuarioActiveDirectory, FormalizadorUEN.UserId)); EjecutivoAsistenteServicioRegulatorio.Add(EnumOC.AsistenteServicios); EjecutivoAsistenteServicioRegulatorio.Add(EnumOC.AsistenteRegulatorio); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalEjecutivoAsistenteServicioRegulatorio, NodeValues = EjecutivoAsistenteServicioRegulatorio }); #endregion #region Registra ParametrosReglas DatosEntradaRecipientes.ListaParametros.Clear(); DatosEntradaRecipientes.ListaParametros.Add(new ParametrosCondiciones { NombreParametro = "IdEtapa", Valor = null }); DatosEntradaRecipientes.ListaParametros.Add(new ParametrosCondiciones { NombreParametro = "EsLinea", Valor = null }); DatosEntradaRecipientes.ListaParametros.Add(new ParametrosCondiciones { NombreParametro = "TipoCategoria", Valor = oferta.IdTipoCategoria.ToString() }); DatosEntradaRecipientes.ListaParametros.Add(new ParametrosCondiciones { NombreParametro = "TipoFacilidad", Valor = null }); DatosEntradaRecipientes.ListaParametros.Add(new ParametrosCondiciones { NombreParametro = "EsGarantiaReal", Valor = null }); #endregion #region VALIDA TRAMITES EXISTENTES EN DEVOLUCION var TramiteActual = TramitesFormalizacionActuales != null && TramitesFormalizacionActuales.Count > 0 ? TramitesFormalizacionActuales.Where(c => c.ActivoDevolucionAprobacion == true && c.IncidenteCompletado != true).FirstOrDefault() : null; if (TramiteActual != null) { bool? EsGarantiaReal = false; var FacilidadFormalizacion = TramiteActual.FormalizacionTipoFacilidades.Where(x => x.Incident == TramiteActual.Incident).FirstOrDefault(); using (UltimusIntegrationClient UltimusClient = new UltimusIntegrationClient(UltimusIntgration.wSHttpBinding, UltimusIntgration.endpointAddress)) { UltimusIncident DataTask = new UltimusIncident(); //------------------------------------------------------------------------------------------------------------ #region FACILIDADES EN LINEA if (FacilidadesLinea != null && FacilidadesLinea.Count > 0) { EsGarantiaReal = FacilidadesLinea.Any(c => c.OfertaFacilidadesGarantias.Any(g => g.TipoGarantia == 2) == true); bool? EsFactoreo = FacilidadesLinea.Any(c => c.IdTipoFacilidad.In(5, 6, 7, 8, 9, 10)); Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnLinea).First().NodeValue = true; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnEspecifico).First().NodeValue = false; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsGarantiaReal).First().NodeValue = EsGarantiaReal; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionIdFacilidad).First().NodeValue = null; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsLinea").First().Valor = "1"; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "TipoFacilidad").First().Valor = null; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsGarantiaReal").First().Valor = EsGarantiaReal.Value ? "1" : "0"; RepAsignacion = AsignarRecipientesFormalizacion(solicitud.IdSolicitud, ClientePrincipal, Variables, DatosEntradaRecipientes); log.Trace("Metodo: AsignarRecipientes Idsolicitud: " + solicitud.IdSolicitud != null ? solicitud.IdSolicitud.ToString() : "" + " IdCategoria: " + IdCategoria != null ? IdCategoria.ToString() : "" + " IdFacilidad: null EsLinea: true EsGaratiaReal: " + EsGarantiaReal != null ? EsGarantiaReal.ToString() : "" + " Formalizador: " + FormalizadorUEN.FormalizadorAsignado_UserID != null ? FormalizadorUEN.FormalizadorAsignado_UserID : ""); bool FormalizadorOperacionesCredito=false; AsignarRecipientes(Variables, IdCategoria, null, true, EsGarantiaReal.Value, FormalizadorUEN.FormalizadorAsignado_UserID, EtapasFormalizacion, ClientePrincipal,out FormalizadorOperacionesCredito, solicitud.IdSolicitud, Caratula.IdTipoCambioCondiciones, EsFactoreo); Variables = RepAsignacion.Variables; DatosGeneralesFormalizacion Formalizacion = new DatosGeneralesFormalizacion { IdSolicitud = CodigoSolicitud, Incident = TramiteActual.Incident, IdProceso = EnumProcesos.Formalizacion, FechaCreacionIncidente = DateTime.Now, Process = NombreProcesoFormalizacion, EsEspecifico = false, EsGarantiaReal = EsGarantiaReal, IncidenteCompletado = false, AsigCaso_JobFunctionAsignado = RepAsignacion.AsigCaso_JobFunctionAsignado, FormalizadorOperacionesCredito= FormalizadorOperacionesCredito }; DatosGeneralesFormalizacionDal.InsertarActualizar(Formalizacion); foreach (var facilidad in FacilidadesLinea) { UsuarioAsignado = UsuarioIniciador; DatosGeneralesFormalizacionDal.InsertarActualizar_Facilidad(new FormalizacionTipoFacilidades { IdSolicitud = CodigoSolicitud, IdTipoFacilidad = facilidad.IdTipoFacilidad, IdSecuenciaFacilidad = facilidad.Secuencia, IdProceso = EnumProcesos.Formalizacion, Incident = TramiteActual.Incident, UsuarioAsignado = UsuarioAsignado }); } } #endregion #region FACILIDADES EN ESPECIFICO if (FacilidadesEspecifico != null && FacilidadesEspecifico.Count > 0) { var IinfoFacilidadOfertaCredito = FacilidadesEspecifico.Where(x => x.IdSolicitud == TramiteActual.IdSolicitud && x.IdTipoFacilidad == FacilidadFormalizacion.IdTipoFacilidad && x.Secuencia == FacilidadFormalizacion.IdSecuenciaFacilidad).FirstOrDefault(); if (IinfoFacilidadOfertaCredito != null) { Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnLinea).First().NodeValue = false; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnEspecifico).First().NodeValue = true; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsLinea").First().Valor = "0"; EsGarantiaReal = IinfoFacilidadOfertaCredito.OfertaFacilidadesGarantias.Any(g => g.TipoGarantia == 2); Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsGarantiaReal).First().NodeValue = EsGarantiaReal; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionIdFacilidad).First().NodeValue = IinfoFacilidadOfertaCredito.IdTipoFacilidad; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "TipoFacilidad").First().Valor = IinfoFacilidadOfertaCredito.IdTipoFacilidad.ToString(); DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsGarantiaReal").First().Valor = EsGarantiaReal.Value ? "1" : "0"; RepAsignacion = AsignarRecipientesFormalizacion(solicitud.IdSolicitud, ClientePrincipal, Variables, DatosEntradaRecipientes); log.Trace("Metodo: AsignarRecipientes Idsolicitud: " + solicitud.IdSolicitud != null ? solicitud.IdSolicitud.ToString() : "" + " IdCategoria: " + IdCategoria != null ? IdCategoria.ToString() : "" + " IdFacilidad: " + IinfoFacilidadOfertaCredito.IdTipoFacilidad != null ? IinfoFacilidadOfertaCredito.IdTipoFacilidad.ToString() : "" + " EsLinea: False EsGaratiaReal: " + EsGarantiaReal != null ? EsGarantiaReal.ToString() : "" + " Formalizador: " + FormalizadorUEN.FormalizadorAsignado_UserID != null ? FormalizadorUEN.FormalizadorAsignado_UserID : ""); bool FormalizadorOperacionesCredito = false; AsignarRecipientes(Variables, IdCategoria, IinfoFacilidadOfertaCredito.IdTipoFacilidad, false, EsGarantiaReal.Value, FormalizadorUEN.FormalizadorAsignado_UserID, EtapasFormalizacion, ClientePrincipal, out FormalizadorOperacionesCredito, solicitud.IdSolicitud); Variables = RepAsignacion.Variables; DatosGeneralesFormalizacion Formalizacion = new DatosGeneralesFormalizacion { IdSolicitud = CodigoSolicitud, Incident = TramiteActual.Incident, IdProceso = EnumProcesos.Formalizacion, FechaCreacionIncidente = DateTime.Now, Process = NombreProcesoFormalizacion, IncidenteCompletado = false, EsEspecifico = true, EsGarantiaReal = EsGarantiaReal, AsigCaso_JobFunctionAsignado = RepAsignacion.AsigCaso_JobFunctionAsignado, FormalizadorOperacionesCredito =FormalizadorOperacionesCredito }; DatosGeneralesFormalizacionDal.InsertarActualizar(Formalizacion); UsuarioAsignado = UsuarioIniciador; DatosGeneralesFormalizacionDal.InsertarActualizar_Facilidad(new FormalizacionTipoFacilidades { IdSolicitud = CodigoSolicitud, IdTipoFacilidad = IinfoFacilidadOfertaCredito.IdTipoFacilidad, IdSecuenciaFacilidad = IinfoFacilidadOfertaCredito.Secuencia, IdProceso = EnumProcesos.Formalizacion, Incident = TramiteActual.Incident, UsuarioAsignado = UsuarioAsignado }); } } #endregion //------------------------------------------------------------------------------------------------------------ string error = string.Empty; if (!UltimusClient.GetTaskByFilters(null, NombreProcesoFormalizacion, Etapa_Devuelto_Formalizacion, TramiteActual.Incident, out DataTask, out error) || !string.IsNullOrEmpty(error)) throw new Exception("GetTaskByFilters: no se pudo obtener el taskid para activar el incidente de Formalizacion. " + error); //activa el inciente de formalizacion UltimusIntgration.CompleteTask(DataTask.User, DataTask.TaskId, null, DataTask.Summary, Variables); DatosGeneralesFormalizacion Formalizaciondatos = new DatosGeneralesFormalizacion(); Formalizaciondatos = DatosGeneralesFormalizacionDal.Obtener(TramiteActual.IdSolicitud, TramiteActual.Incident); //genera los documentos legales FormalizacionDocumentosLegalesDal.EliminarDoclegales(TramiteActual.IdSolicitud, TramiteActual.Incident); FormalizacionDocumentosLegalesDal.GenerarDocumentos(Formalizaciondatos, EnumEtapas.FR_Gen_Doc_Legales); } TramiteActual.ActivoDevolucionAprobacion = false; TramiteActual.EnColaDevolucion = false; DatosGeneralesFormalizacionDal.InsertarActualizar(TramiteActual); #region VERIFICA SI HAY EN COLA UN TRAMITE TramitesFormalizacionActuales = DatosGeneralesFormalizacionDal.Obtener_TramitesFormalizacion(CodigoSolicitud); TramiteActualDevolver = TramitesFormalizacionActuales != null && TramitesFormalizacionActuales.Count > 0 ? TramitesFormalizacionActuales.Where(c => c.EnColaDevolucion == true).OrderByDescending(c => c.FechaDevolucion).FirstOrDefault() : null; if (TramiteActualDevolver != null) DevuelveIncidente_Formalizacion(IncidenteCredito, TramiteActualDevolver.Incident); #endregion resp.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); return resp; } if (TramitesFormalizacionActuales != null && TramitesFormalizacionActuales.Count > 0) { resp.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString(); resp.DescripcionRespuesta = "Ya existen incidentes creados en el proceso de formalización"; return resp; } #endregion #region SUMMARY #region ARMA SUMMARY string sNombreCliente = string.Empty; if (ClientePrincipal != null) switch (ClientePrincipal.IdTipoCliente) { case EnumTipoCliente.Fisico: sNombreCliente = string.Format("{0} {1}", ClientePrincipal.PrimerNombre.Trim(), ClientePrincipal.PrimerApellido.Trim()); break; case EnumTipoCliente.Juridico: sNombreCliente = ClientePrincipal.RazonSocial.Trim(); break; } summary = string.Format("{0} | {1} | Sol. #{2} | Ejecutivo: {3} | Categoría: {4}", ClientePrincipal.NumeroIdentificacion.Trim(), sNombreCliente, solicitud.IdSolicitud, FormalizadorUEN == null ? string.Empty : FormalizadorUEN.Nombre, oferta.TipoCategoria == null ? string.Empty : oferta.TipoCategoria.Descripcion); #endregion #endregion #region FACILIDADES EN LINEA if (FacilidadesLinea != null && FacilidadesLinea.Count > 0) { var EsGarantiaReal = FacilidadesLinea.Any(c => c.OfertaFacilidadesGarantias.Any(g => g.TipoGarantia == 2) == true); bool? EsFactoreo = FacilidadesLinea.Any(c => c.IdTipoFacilidad.In(5, 6, 7, 8, 9, 10)); Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnLinea).First().NodeValue = true; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnEspecifico).First().NodeValue = false; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsGarantiaReal).First().NodeValue = EsGarantiaReal; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionIdFacilidad).First().NodeValue = null; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsLinea").First().Valor = "1"; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "TipoFacilidad").First().Valor = null; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsGarantiaReal").First().Valor = EsGarantiaReal ? "1" : "0"; RepAsignacion = AsignarRecipientesFormalizacion(solicitud.IdSolicitud, ClientePrincipal, Variables, DatosEntradaRecipientes); log.Trace("Metodo: AsignarRecipientes Idsolicitud: " + solicitud.IdSolicitud != null ? solicitud.IdSolicitud.ToString() : "" + " IdCategoria: " + IdCategoria != null ? IdCategoria.ToString() : "" + " IdFacilidad: null EsLinea: true EsGaratiaReal: " + EsGarantiaReal != null ? EsGarantiaReal.ToString() : "" + " Formalizador: " + FormalizadorUEN.FormalizadorAsignado_UserID != null ? FormalizadorUEN.FormalizadorAsignado_UserID : ""); bool FormalizadorOperacionesCredito= false; AsignarRecipientes(Variables, IdCategoria, null, true, EsGarantiaReal, FormalizadorUEN.FormalizadorAsignado_UserID, EtapasFormalizacion, ClientePrincipal, out FormalizadorOperacionesCredito, solicitud.IdSolicitud, Caratula.IdTipoCambioCondiciones, EsFactoreo); Variables = RepAsignacion.Variables; NumIncidente = UltimusIntgration.CompleteTask(UsuarioIniciador, TaskID, null, string.Format("{0} | {1} ", summary, "Línea"), Variables); DatosGeneralesFormalizacion Formalizacion = new DatosGeneralesFormalizacion { IdSolicitud = CodigoSolicitud, Incident = NumIncidente, IdProceso = EnumProcesos.Formalizacion, FechaCreacionIncidente = DateTime.Now, Process = NombreProcesoFormalizacion, EsEspecifico = false, EsGarantiaReal = EsGarantiaReal, IncidenteCompletado = false, AsigCaso_JobFunctionAsignado = RepAsignacion.AsigCaso_JobFunctionAsignado, FormalizadorOperacionesCredito=FormalizadorOperacionesCredito }; DatosGeneralesFormalizacionDal.InsertarActualizar(Formalizacion); foreach (var facilidad in FacilidadesLinea) { UsuarioAsignado = UsuarioIniciador; DatosGeneralesFormalizacionDal.InsertarActualizar_Facilidad(new FormalizacionTipoFacilidades { IdSolicitud = CodigoSolicitud, IdTipoFacilidad = facilidad.IdTipoFacilidad, IdSecuenciaFacilidad = facilidad.Secuencia, IdProceso = EnumProcesos.Formalizacion, Incident = NumIncidente, UsuarioAsignado = UsuarioAsignado }); } Formalizacion = DatosGeneralesFormalizacionDal.Obtener(Formalizacion.IdSolicitud, Formalizacion.Incident); //genera los documentos legales FormalizacionDocumentosLegalesDal.GenerarDocumentos(Formalizacion, EnumEtapas.FR_Gen_Doc_Legales); #region Correo #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Rev_Info_Caso if (EsGarantiaReal == true && IdCategoria.In(EnumCategoria.EstudioInicial, EnumCategoria.EstudioSeguimiento)) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, true, null, true, Formalizacion.Incident); } else if (IdCategoria == EnumCategoria.FastTrack && EsGarantiaReal == false) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, false, null, true, Formalizacion.Incident); } else if (EsGarantiaReal == true) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, true, null, true, Formalizacion.Incident); } #endregion #endregion } #endregion #region FACILIDADES EN ESPECIFICO if (FacilidadesEspecifico != null && FacilidadesEspecifico.Count > 0) { Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnLinea).First().NodeValue = false; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsFacilidadEnEspecifico).First().NodeValue = true; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsLinea").First().Valor = "0"; foreach (var facilidad in FacilidadesEspecifico) { var EsGarantiaReal = facilidad.OfertaFacilidadesGarantias.Any(g => g.TipoGarantia == 2); Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionEsGarantiaReal).First().NodeValue = EsGarantiaReal; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionIdFacilidad).First().NodeValue = facilidad.IdTipoFacilidad; DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "TipoFacilidad").First().Valor = facilidad.IdTipoFacilidad.ToString(); DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "EsGarantiaReal").First().Valor = EsGarantiaReal ? "1" : "0"; RepAsignacion = AsignarRecipientesFormalizacion(solicitud.IdSolicitud, ClientePrincipal, Variables, DatosEntradaRecipientes); log.Trace("Metodo: AsignarRecipientes Idsolicitud: " + solicitud.IdSolicitud != null ? solicitud.IdSolicitud.ToString() : "" + " IdCategoria: " + IdCategoria != null ? IdCategoria.ToString() : "" + " IdFacilidad: " + facilidad.IdTipoFacilidad != null ? facilidad.IdTipoFacilidad.ToString() : "" + " EsLinea: False EsGaratiaReal: " + EsGarantiaReal != null ? EsGarantiaReal.ToString() : "" + " Formalizador: " + FormalizadorUEN.FormalizadorAsignado_UserID != null ? FormalizadorUEN.FormalizadorAsignado_UserID : ""); bool FormalizadorOperacionesCredito= false; AsignarRecipientes(Variables, IdCategoria, facilidad.IdTipoFacilidad, false, EsGarantiaReal, FormalizadorUEN.FormalizadorAsignado_UserID, EtapasFormalizacion, ClientePrincipal, out FormalizadorOperacionesCredito, solicitud.IdSolicitud); Variables = RepAsignacion.Variables; NumIncidente = UltimusIntgration.CompleteTask(UsuarioIniciador, TaskID, null, string.Format("{0} | {1} ", summary, facilidad.TipoFacilidad.Descripcion.Trim()), Variables); DatosGeneralesFormalizacion Formalizacion = new DatosGeneralesFormalizacion { IdSolicitud = CodigoSolicitud, Incident = NumIncidente, IdProceso = EnumProcesos.Formalizacion, FechaCreacionIncidente = DateTime.Now, Process = NombreProcesoFormalizacion, IncidenteCompletado = false, EsEspecifico = true, EsGarantiaReal = EsGarantiaReal, AsigCaso_JobFunctionAsignado = RepAsignacion.AsigCaso_JobFunctionAsignado, FormalizadorOperacionesCredito=FormalizadorOperacionesCredito }; DatosGeneralesFormalizacionDal.InsertarActualizar(Formalizacion); UsuarioAsignado = UsuarioIniciador; DatosGeneralesFormalizacionDal.InsertarActualizar_Facilidad(new FormalizacionTipoFacilidades { IdSolicitud = CodigoSolicitud, IdTipoFacilidad = facilidad.IdTipoFacilidad, IdSecuenciaFacilidad = facilidad.Secuencia, IdProceso = EnumProcesos.Formalizacion, Incident = NumIncidente, UsuarioAsignado = UsuarioAsignado }); Formalizacion = DatosGeneralesFormalizacionDal.Obtener(Formalizacion.IdSolicitud, Formalizacion.Incident); //genera los documentos legales FormalizacionDocumentosLegalesDal.GenerarDocumentos(Formalizacion, EnumEtapas.FR_Gen_Doc_Legales); #region Correo #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Rev_Info_Caso if (IdCategoria == EnumCategoria.FastTrack && EsGarantiaReal == false) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, false, null, true, Formalizacion.Incident); } else if (facilidad.IdTipoFacilidad.In(12, 13, 11)) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, true, null, true, Formalizacion.Incident); } else if (facilidad.IdTipoFacilidad.In(9, 10) && EsGarantiaReal == false) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, false, null, true, Formalizacion.Incident); } else if (facilidad.IdTipoFacilidad.In(9, 10) && EsGarantiaReal == true) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, true, null, true, Formalizacion.Incident); } else if (EsGarantiaReal == true) { NotificarCorreo(CodigoSolicitud, EtapasFormalizacion, "", null, true, null, true, Formalizacion.Incident); } #endregion #endregion } } #endregion resp.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); } catch (DbEntityValidationException ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } catch (Exception ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } return resp; } [WebMethod] public BaseJson GeneraIncidentes_Seguimiento(int IncidenteCredito) { UltimusIntegrationAPIController UltimusIntgration = new UltimusIntegrationAPIController(); BaseJson resp = new BaseJson(); string TaskID = null; int NumIncidente = 0; ProcesosDAL ProcesoDal = new ProcesosDAL(); SolicitudDAL SolicitudDal = new SolicitudDAL(); OfertaDAL OfertaDal = new OfertaDAL(); DatosGeneralesFormalizacionDAL DatosGeneralesFormalizacionDal = new DatosGeneralesFormalizacionDAL(); List Variables = new List(); EtapasDAL EtapasDal = new EtapasDAL(); DatosEntradaCondiciones DatosEntradaRecipientes = new DatosEntradaCondiciones(); EstructuraOrgChartDAL EstructuraOrgChartDal = new EstructuraOrgChartDAL(); EjecutivoDAL EjecutivoDal = new EjecutivoDAL(); ObtieneParametros ultParametros = new ObtieneParametros(); string UsuarioIniciador = ""; string NombreProcesoCredito = "Credito"; string NombreProcesoSeguimiento = "Seguimiento"; string EtapaInicio = EnumEtapas.RE_Seg_Inicio; string EtapaInicioSeguimientoCondicionesEspeciales = EnumEtapas.RE_Seg_Condiciones_Especiales; string summary = ""; int CodigoSolicitud = 0; List ListaProcesos; List EtapasSeguimiento; Solicitud solicitud; ClienteDAL ClienteDal = new ClienteDAL(); CaratulaCreditoDAL CaratulaDal = new CaratulaCreditoDAL(); Cliente ClientePrincipal; FormalizacionDocumentosLegalesDAL FormalizacionDocumentosLegalesDal = new FormalizacionDocumentosLegalesDAL(); try { UsuarioIniciador = ultParametros.GetValueKeyRegedit("UsuarioProcesoUltimus", false); ListaProcesos = ProcesoDal.Obtener(); NombreProcesoCredito = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Credito).FirstOrDefault().NombreProceso; NombreProcesoSeguimiento = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Seguimiento).FirstOrDefault().NombreProceso; EtapasSeguimiento = EtapasDal.Obtener(null, EnumProcesos.Seguimiento); #region OBTIENE TASKID ETAPA INICIO using (UltimusIntegrationClient UltimusClient = new UltimusIntegrationClient(UltimusIntgration.wSHttpBinding, UltimusIntgration.endpointAddress)) { string error = string.Empty; UltimusIncident DataTask = new UltimusIncident(); if (!UltimusClient.GetTaskByFilters(UsuarioIniciador, NombreProcesoSeguimiento, EtapaInicio, 0, out DataTask, out error) || !string.IsNullOrWhiteSpace(error)) throw new Exception("GetTaskByFilters: no se pudo obtener el taskid para generar los incidentes de seguimiento. " + error); TaskID = DataTask.TaskId; } #endregion solicitud = SolicitudDal.Obtener(IncidenteCredito, NombreProcesoCredito); if (solicitud == null) { resp.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString(); resp.DescripcionRespuesta = "No se encontró la solicitud"; return resp; } CodigoSolicitud = solicitud.IdSolicitud; ClientePrincipal = ClienteDal.ObtenerPrincipal(CodigoSolicitud); #region SUMMARY Y VARIABLES #region ARMA SUMMARY string sNombreCliente = ClientePrincipal != null ? ClientePrincipal.IdTipoCliente == EnumTipoCliente.Fisico ? string.Format("{0} {1}", ClientePrincipal.PrimerNombre.Trim(), ClientePrincipal.PrimerApellido.Trim()) : ClientePrincipal.RazonSocial.Trim() : string.Empty; summary = ClientePrincipal != null ? string.Format("{0} | {1} | Sol. #{2}", ClientePrincipal.NumeroIdentificacion.Trim(), sNombreCliente, solicitud.IdSolicitud.ToString()) : string.Empty; #endregion ICollection ListaCaratulaCreditoCondicionesEspeciales = CaratulaDal.ObtenerCondicionesEspeciales(solicitud.IdSolicitud); //ICollection ListaCaratulaCreditoExcepcionesPolitica = CaratulaDal.ObtenerExcepcionesPolitica(solicitud.IdSolicitud); foreach (CaratulaCreditoCondicionesEspeciales ItemCaratulaCreditoCondicionesEspeciales in ListaCaratulaCreditoCondicionesEspeciales) { if (ItemCaratulaCreditoCondicionesEspeciales.IdClasificacion.In(1, 2)) { DatosGeneralesSeguimientoDAL objConDatosGeneralesSeguimiento = new DatosGeneralesSeguimientoDAL(); CaratulaCreditoCondicionesEspecialesBitacoraDAL objConCCCondicionesEspecialesBitacora = new CaratulaCreditoCondicionesEspecialesBitacoraDAL(); CaratulaCreditoCondicionesEspecialesBitacora objActualCCCondicionesEspecialesBitacora = objConCCCondicionesEspecialesBitacora.ObtenerUltimoRegistro(ItemCaratulaCreditoCondicionesEspeciales.IdSolicitud, ItemCaratulaCreditoCondicionesEspeciales.Secuencia); if (objActualCCCondicionesEspecialesBitacora == null) { List ListaRecipienteSegCondicionesEspeciales = new List { string.Format(EnumOC.User, ItemCaratulaCreditoCondicionesEspeciales.ResponsableCumplimiento_UserId) }; Variables = new List { new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalIdSolicitud, NodeValue = solicitud.IdSolicitud }, new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalIncidenteProcesoPadre, NodeValue = IncidenteCredito }, new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalIdTipoSeguimiento, NodeValue = 1 }, new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalCondicionesEspecialesSecuencia, NodeValue = ItemCaratulaCreditoCondicionesEspeciales.Secuencia }, new NodeVariables { NodeName = EnumVariblesUltimus.TaskDataGlobalCondicionesEspecialesRecipienteSegCondicionesEspeciales, NodeValues = ListaRecipienteSegCondicionesEspeciales } }; NumIncidente = UltimusIntgration.CompleteTask(UsuarioIniciador, TaskID, null, summary, Variables); #region RegistroDatosGeneralesSeguimiento BaseJson respRegistroDatosGeneralesSeguimiento = objConDatosGeneralesSeguimiento.InsertarActualizar(new DatosGeneralesSeguimiento() { IdSolicitud = ItemCaratulaCreditoCondicionesEspeciales.IdSolicitud, IdProceso = EnumProcesos.Seguimiento, Incident = NumIncidente, Secuencia = ItemCaratulaCreditoCondicionesEspeciales.Secuencia, IdTipoSeguimiento = EnumTipoSeguimiento.CondicionesEspeciales, UsuarioCreador = UsuarioIniciador }); if (respRegistroDatosGeneralesSeguimiento.CodigoRespuesta != TipoCodigoRespuesta.EXITOSO.ToString()) { throw new Exception(string.Format("Ha ocurrio un problema al intentar registrar el Incidente de Seguimiento para Excepciones Politica(DatosGeneralesSeguimiento) => Solicitud:{0}, Incident:{1}, Secuencia:{2}", ItemCaratulaCreditoCondicionesEspeciales.IdSolicitud, NumIncidente, ItemCaratulaCreditoCondicionesEspeciales.Secuencia)); } #endregion #region RegistroCaratulaCreditoCondicionesEspecialesBitacora BaseJson respRegistroCCCondicionesEspecialesBitacora = objConCCCondicionesEspecialesBitacora.InsertarActualizar(new CaratulaCreditoCondicionesEspecialesBitacora() { IdSolicitud = ItemCaratulaCreditoCondicionesEspeciales.IdSolicitud, IdProceso = EnumProcesos.Seguimiento, Incident = NumIncidente, Secuencia = ItemCaratulaCreditoCondicionesEspeciales.Secuencia, IdTipoSeguimiento = EnumTipoSeguimiento.CondicionesEspeciales, IdSeguimiento = 0, IdDecision = null, Observaciones = null, Responsable_UserId = null, Responsable_UserName = null, FechaCreacion = DateTime.Now, UsuarioCreador = UsuarioIniciador, IdEtapa = EtapasSeguimiento.Where(x => x.DescripcionEtapa.Contains(EtapaInicioSeguimientoCondicionesEspeciales)).FirstOrDefault().IdEtapa, Send = false }); if (respRegistroCCCondicionesEspecialesBitacora.CodigoRespuesta != TipoCodigoRespuesta.EXITOSO.ToString()) { throw new Exception(string.Format("Ha ocurrio un problema al intentar registrar el Incidente de Seguimiento para Excepciones Politica => Solicitud:{0}, Incident:{1}, Secuencia:{2}", ItemCaratulaCreditoCondicionesEspeciales.IdSolicitud, NumIncidente, ItemCaratulaCreditoCondicionesEspeciales.Secuencia)); } #endregion } } } //foreach (CaratulaCreditoExcepcionesPolitica ItemCaratulaCreditoExcepcionesPolitica in ListaCaratulaCreditoExcepcionesPolitica) //{ // DatosGeneralesSeguimientoDAL objConDatosGeneralesSeguimiento = new DatosGeneralesSeguimientoDAL(); // CaratulaCreditoExcepcionesPoliticaBitacoraDAL objConCCExcepcionesPoliticaBitacora = new CaratulaCreditoExcepcionesPoliticaBitacoraDAL(); // CaratulaCreditoExcepcionesPoliticaBitacora objActualCCExcepcionesPoliticaBitacora = objConCCExcepcionesPoliticaBitacora.ObtenerUltimoRegistro(ItemCaratulaCreditoExcepcionesPolitica.IdSolicitud, ItemCaratulaCreditoExcepcionesPolitica.Secuencia); // if (objActualCCExcepcionesPoliticaBitacora == null) // { // List ListaRecipienteSegExcepcionesPolitica = new List(); // ListaRecipienteSegExcepcionesPolitica.Add(string.Format("USER:org=Business Organization, user={0}", ItemCaratulaCreditoExcepcionesPolitica.ResponsableCumplimiento_UserId)); // Variables = new List(); // Variables.Add(new NodeVariables { NodeName = "TaskData.Global.IdSolicitud", NodeValue = solicitud.IdSolicitud }); // Variables.Add(new NodeVariables { NodeName = "TaskData.Global.IncidenteProcesoPadre", NodeValue = IncidenteCredito }); // Variables.Add(new NodeVariables { NodeName = "TaskData.Global.IdTipoSeguimiento", NodeValue = 2 }); // Variables.Add(new NodeVariables { NodeName = "TaskData.Global.ExcepcionesPolitica.Secuencia", NodeValue = ItemCaratulaCreditoExcepcionesPolitica.Secuencia }); // Variables.Add(new NodeVariables { NodeName = "TaskData.Global.ExcepcionesPolitica.RecipienteSegExcepcionesPolitica", NodeValues = ListaRecipienteSegExcepcionesPolitica }); // NumIncidente = UltimusIntgration.CompleteTask(UsuarioIniciador, TaskID, null, summary, Variables); // #region RegistroDatosGeneralesSeguimiento // BaseJson respRegistroDatosGeneralesSeguimiento = objConDatosGeneralesSeguimiento.InsertarActualizar(new DatosGeneralesSeguimiento() // { // IdSolicitud = ItemCaratulaCreditoExcepcionesPolitica.IdSolicitud, // IdProceso = (int)EnumProcesos.Seguimiento, // Incident = NumIncidente, // Secuencia = ItemCaratulaCreditoExcepcionesPolitica.Secuencia, // IdTipoSeguimiento = (int)EnumTipoSeguimiento.ExcepcionesPolitica, // UsuarioCreador = UsuarioIniciador // }); // if (respRegistroDatosGeneralesSeguimiento.CodigoRespuesta != TipoCodigoRespuesta.EXITOSO.ToString()) // { // throw new Exception(string.Format("Ha ocurrio un problema al intentar registrar el Incidente de Seguimiento para Excepciones Politica(DatosGeneralesSeguimiento) => Solicitud:{0}, Incident:{1}, Secuencia:{2}", ItemCaratulaCreditoExcepcionesPolitica.IdSolicitud, NumIncidente, ItemCaratulaCreditoExcepcionesPolitica.Secuencia)); // } // #endregion // #region RegistroCaratulaCreditoExcepcionesPoliticaBitacora // BaseJson respRegistroCCExcepcionesPoliticaBitacora = objConCCExcepcionesPoliticaBitacora.InsertarActualizar(new CaratulaCreditoExcepcionesPoliticaBitacora() // { // IdSolicitud = ItemCaratulaCreditoExcepcionesPolitica.IdSolicitud, // IdProceso = (int)EnumProcesos.Seguimiento, // Incident = NumIncidente, // Secuencia = ItemCaratulaCreditoExcepcionesPolitica.Secuencia, // IdTipoSeguimiento = (int)EnumTipoSeguimiento.ExcepcionesPolitica, // IdSeguimiento = 0, // IdDecision = null, // Observaciones = null, // Responsable_UserId = null, // Responsable_UserName = null, // FechaCreacion = DateTime.Now, // UsuarioCreador = UsuarioIniciador, // IdEtapa = EtapasSeguimiento.Where(x => x.DescripcionEtapa.Contains(EtapaInicioSeguimientoExcepcionesPolitica)).FirstOrDefault().IdEtapa, // Send = false // }); // if (respRegistroCCExcepcionesPoliticaBitacora.CodigoRespuesta != TipoCodigoRespuesta.EXITOSO.ToString()) // { // throw new Exception(string.Format("Ha ocurrio un problema al intentar registrar el Incidente de Seguimiento para Excepciones Politica(CaratulaCreditoExcepcionesPoliticaBitacora) => Solicitud:{0}, Incident:{1}, Secuencia:{2}", ItemCaratulaCreditoExcepcionesPolitica.IdSolicitud, NumIncidente, ItemCaratulaCreditoExcepcionesPolitica.Secuencia)); // } // #endregion // } //} #endregion resp.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); } catch (DbEntityValidationException ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } catch (Exception ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } return resp; } [WebMethod] public BaseJson DevuelveIncidente_Formalizacion(int IncidenteCredito, int IncidenteFormalizacion) { UltimusIntegrationAPIController UltimusIntgration = new UltimusIntegrationAPIController(); BaseJson resp = new BaseJson(); SolicitudDAL SolicitudDal = new SolicitudDAL(); DatosGeneralesFormalizacionDAL DatosGeneralesFormalizacionDal = new DatosGeneralesFormalizacionDAL(); ProcesosDAL ProcesoDal = new ProcesosDAL(); string NombreProcesoFormalizacion = "Formalizacion"; string NombreProcesoCredito = "Credito"; string EtapaInicio = "FR_Inicio"; string EtapaFormalizacionCredito = "FR_Proceso_Formalizacion"; int CodigoSolicitud = 0; List Variables = new List(); List ListaProcesos; DatosGeneralesFormalizacion TramiteActual; List TramitesFormalizacionActuales; CaratulaCreditoDAL ConnCaratula = new CaratulaCreditoDAL(); AprobacionesComite AprobacionesComite = new AprobacionesComite(); List Aprobaciones = new List(); string User = string.Empty; string UserFullName = string.Empty; try { ListaProcesos = ProcesoDal.Obtener(); NombreProcesoCredito = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Credito).FirstOrDefault().NombreProceso; NombreProcesoFormalizacion = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Formalizacion).FirstOrDefault().NombreProceso; TramiteActual = DatosGeneralesFormalizacionDal.Obtener(null, IncidenteFormalizacion); TramitesFormalizacionActuales = DatosGeneralesFormalizacionDal.Obtener_TramitesFormalizacion(CodigoSolicitud); var solicitud = SolicitudDal.Obtener(IncidenteCredito, NombreProcesoCredito); CodigoSolicitud = solicitud.IdSolicitud; Variables.Add(new NodeVariables { NodeName = "TaskData.Global.Aprobaciones.ProvieneFormalizacion", NodeValue = true }); if (TramiteActual != null && solicitud != null) { if (!TramitesFormalizacionActuales.Any(c => c.ActivoDevolucionAprobacion == true)) { //reactiva etapa aprobacion en proceso de credito using (UltimusIntegrationClient UltimusClient = new UltimusIntegrationClient(UltimusIntgration.wSHttpBinding, UltimusIntgration.endpointAddress)) { UltimusIncident DataTask = new UltimusIncident(); string error = ""; if (!UltimusClient.GetTaskByFilters(null, NombreProcesoCredito, EtapaFormalizacionCredito, solicitud.Incidente.Value, out DataTask, out error) || !string.IsNullOrEmpty(error)) throw new Exception("GetTaskByFilters: no se pudo obtener el taskid para activar el incidente de Credito. " + error); //activa el inciente de credito UltimusIntgration.CompleteTask(DataTask.User, DataTask.TaskId, null, DataTask.Summary, Variables); User = DataTask.User; UserFullName = DataTask.UserFullName; } TramiteActual.ActivoDevolucionAprobacion = true; TramiteActual.EnColaDevolucion = false; } else { TramiteActual.ActivoDevolucionAprobacion = false; TramiteActual.EnColaDevolucion = true; } TramiteActual.FechaDevolucion = DateTime.Now; DatosGeneralesFormalizacionDal.InsertarActualizar(TramiteActual); Aprobaciones = ConnCaratula.ObtenerAprobacionesActuales(solicitud.IdSolicitud); AprobacionesComite.IdSolicitud = solicitud.IdSolicitud; AprobacionesComite.Orden = Aprobaciones.Max(x => x.Orden) + 1; AprobacionesComite.Reconsideraciones = Aprobaciones.FirstOrDefault().Reconsideraciones; AprobacionesComite.Step = "FR_Rev_Info_Caso"; AprobacionesComite.Process = "Formalizacion"; AprobacionesComite.UserName = User; AprobacionesComite.NombreCompleto = UserFullName; AprobacionesComite.Incident = IncidenteFormalizacion; AprobacionesComite.NombreIntancia = "Devolución de Caratula"; AprobacionesComite.Fecha = DateTime.Now; AprobacionesComite.FechaCreacion = DateTime.Now; ConnCaratula.ActualizarAprobacionComite(AprobacionesComite); CaratulaCredito Caratula = ConnCaratula.ObtenerCaratula(solicitud.IdSolicitud); Caratula.IdEstadoCaratula = null; Caratula.FechaAprobacion = null; ConnCaratula.InsertarActualizar(Caratula); resp.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); return resp; } else { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "No se encontro la solicitud de credito o el incidente de formalización"; } } catch (DbEntityValidationException ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } catch (Exception ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } return resp; } [WebMethod] public BaseJson CompletaIncidente_Formalizacion(int IncidenteCredito, int IncidenteFormalizacion) { UltimusIntegrationAPIController UltimusIntgration = new UltimusIntegrationAPIController(); BaseJson resp = new BaseJson(); SolicitudDAL SolicitudDal = new SolicitudDAL(); DatosGeneralesFormalizacionDAL DatosGeneralesFormalizacionDal = new DatosGeneralesFormalizacionDAL(); ProcesosDAL ProcesoDal = new ProcesosDAL(); List Variables = new List(); string NombreProcesoFormalizacion = "Formalizacion"; string NombreProcesoCredito = "Credito"; string EtapaCredito_Formalizacion = "FR_Proceso_Formalizacion"; int CodigoSolicitud = 0; List ListaProcesos; DatosGeneralesFormalizacion TramiteActual; List TramitesFormalizacionActuales; Solicitud solicitud; try { ListaProcesos = ProcesoDal.Obtener(); NombreProcesoCredito = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Credito).FirstOrDefault().NombreProceso; NombreProcesoFormalizacion = ListaProcesos.Where(c => c.IdProceso == EnumProcesos.Formalizacion).FirstOrDefault().NombreProceso; solicitud = SolicitudDal.Obtener(IncidenteCredito, NombreProcesoCredito); CodigoSolicitud = solicitud.IdSolicitud; TramiteActual = DatosGeneralesFormalizacionDal.Obtener(null, IncidenteFormalizacion); Variables.Add(new NodeVariables { NodeName = "TaskData.Global.Finalizar", NodeValue = true }); //registra que el inciente fue completado if (TramiteActual != null && solicitud != null) { TramiteActual.IncidenteCompletado = true; DatosGeneralesFormalizacionDal.InsertarActualizar(TramiteActual); } //carga data actualizada nuevamente TramitesFormalizacionActuales = DatosGeneralesFormalizacionDal.Obtener_TramitesFormalizacion(CodigoSolicitud); //valida si todos los incidentes de formalizacion fueron completados, para asi completar incidente de credito if (TramitesFormalizacionActuales != null && TramitesFormalizacionActuales.Count > 0 && !TramitesFormalizacionActuales.Where(c => c.IncidenteCompletado != true).Any()) { using (UltimusIntegrationClient UltimusClient = new UltimusIntegrationClient(UltimusIntgration.wSHttpBinding, UltimusIntgration.endpointAddress)) { UltimusIncident DataTask = new UltimusIncident(); string error = ""; if (!UltimusClient.GetTaskByFilters(null, NombreProcesoCredito, EtapaCredito_Formalizacion, solicitud.Incidente.Value, out DataTask, out error) || !string.IsNullOrWhiteSpace(error)) throw new Exception("GetTaskByFilters: no se pudo obtener el taskid para completar el incidente de credito. " + error); //completa el inciente de credito UltimusIntgration.CompleteTask(DataTask.User, DataTask.TaskId, null, DataTask.Summary, Variables); } } resp.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); } catch (DbEntityValidationException ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } catch (Exception ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); resp.DescripcionRespuesta = "Error al Generar los incidentes por favor verificar los logs del servicio"; log.Error(ex); } return resp; } [WebMethod] public DatosEntradaCondiciones EvaluarCondiciones(DatosEntradaCondiciones DatosEntrada) { MaestroCondicionesProceso MaestroCondiciones; try { DatosEntrada.EvaluacionCondiciones.Clear(); using (CreditoContex db = new CreditoContex()) { if (DatosEntrada.ListaParametros == null || DatosEntrada.ListaParametros.Count == 0) { DatosEntrada.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString(); DatosEntrada.DescripcionRespuesta = "Se requiere la lista de párametros"; return DatosEntrada; } #region BUSCA MAESTRO SEGUN LOS FILTROS var TipoParametros = db.TipoParametrosCondiciones.AsNoTracking().ToList(); DatosEntrada.ListaParametros = (from l in DatosEntrada.ListaParametros join tp in TipoParametros on l.NombreParametro equals tp.NombreParametro select l.UpdateProperties(c => { c.CodTipoDato = tp.CodTipoDato; return c; }) ).ToList(); var ParametrosProceso = db.ParametrosGlobalesProceso.AsNoTracking().Include(c => c.TipoParametrosCondiciones) .Include(c => c.FiltroParametrosGlobalesMaestro).Where(c => c.CodProceso == DatosEntrada.CodigoProceso && c.CodEvaluacion == DatosEntrada.CodEvaluacion).ToList(); var PrimerParametroProceso = ParametrosProceso != null ? ParametrosProceso.FirstOrDefault() : null; var ParametroActual = PrimerParametroProceso == null ? null : DatosEntrada.ListaParametros.Where(c => c.NombreParametro == PrimerParametroProceso.TipoParametrosCondiciones.NombreParametro).FirstOrDefault(); var ListaMaestros = PrimerParametroProceso == null ? null : PrimerParametroProceso.FiltroParametrosGlobalesMaestro.Where(c => c.Valor == ParametroActual.Valor).Select(c => c.CodMaestro).ToList(); if (ParametrosProceso != null && ParametrosProceso.Count > 1 && ListaMaestros != null && ListaMaestros.Count > 0) { var ListaMaestrosExcluidos = new List(); foreach (var item in ParametrosProceso.Where(c => c.CodParametro != PrimerParametroProceso.CodParametro).ToList()) { ParametroActual = DatosEntrada.ListaParametros.Where(c => c.NombreParametro == item.TipoParametrosCondiciones.NombreParametro).FirstOrDefault(); if (ListaMaestros != null && ListaMaestros.Count > 0) foreach (var CodMaestro in ListaMaestros) { if (!item.FiltroParametrosGlobalesMaestro.Any(c => c.Valor == ParametroActual.Valor && c.CodMaestro == CodMaestro)) ListaMaestrosExcluidos.Add(CodMaestro); } ListaMaestros = ListaMaestros.Where(c => ListaMaestrosExcluidos.Contains(c) == false).ToList(); } } //busca maestro por defecto if (ListaMaestros == null || ListaMaestros.Count == 0) { MaestroCondiciones = db.MaestroCondicionesProceso.AsNoTracking() .Include("FiltroCondicionesMaestro.TipoCondiciones") .Include("FiltroCondicionesMaestro.ReglasCondiciones.TipoParametrosCondiciones") .Where(c => c.Habilitado == true && c.MaestroPorDefecto == true && c.CodProceso == DatosEntrada.CodigoProceso && (!c.FechaInicio.HasValue || c.FechaInicio < DateTime.Now) && (!c.FechaVencimiento.HasValue || c.FechaVencimiento > DateTime.Now) ).FirstOrDefault(); } else { MaestroCondiciones = db.MaestroCondicionesProceso.AsNoTracking() .Include("FiltroCondicionesMaestro.TipoCondiciones") .Include("FiltroCondicionesMaestro.ReglasCondiciones.TipoParametrosCondiciones.TipoDatoParametros") .Where(c => c.Habilitado == true && c.CodMaestro == ListaMaestros.FirstOrDefault() && c.CodProceso == DatosEntrada.CodigoProceso && (!c.FechaInicio.HasValue || c.FechaInicio < DateTime.Now) && (!c.FechaVencimiento.HasValue || c.FechaVencimiento > DateTime.Now) ).FirstOrDefault(); } if (MaestroCondiciones == null) { DatosEntrada.CodigoRespuesta = TipoCodigoRespuesta.ADVERTENCIA.ToString(); DatosEntrada.DescripcionRespuesta = "No se encontró configuración para la conbinación de párametros"; return DatosEntrada; } #endregion foreach (var condicion in MaestroCondiciones.FiltroCondicionesMaestro) { List FormulaRegla = new List(); bool? ResultadoEvaluacion = null; if (condicion.ReglasCondiciones == null || condicion.ReglasCondiciones.Count == 0) continue; foreach (var regla in condicion.ReglasCondiciones) { bool EsAprobado = false; var campo = DatosEntrada.ListaParametros.Where(c => c.NombreParametro == regla.TipoParametrosCondiciones.NombreParametro).FirstOrDefault(); if (campo == null) continue; #region EVALUA REGLA ACTUAL switch (regla.OperadorAritmetico.Trim()) { case "=": if (campo.CodTipoDato == TiposDatos.Bit && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = campo.Valor == regla.ValorDefecto; else if (campo.CodTipoDato == TiposDatos.Cadena) EsAprobado = campo.Valor == regla.ValorDefecto; else if (campo.CodTipoDato == TiposDatos.Decimal && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = decimal.Parse(campo.Valor) == decimal.Parse(regla.ValorDefecto); else if (campo.CodTipoDato == TiposDatos.Entero && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = int.Parse(campo.Valor) == int.Parse(regla.ValorDefecto); break; case "<": if (campo.CodTipoDato == TiposDatos.Decimal && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = decimal.Parse(campo.Valor) < decimal.Parse(regla.ValorDefecto); else if (campo.CodTipoDato == TiposDatos.Entero && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = int.Parse(campo.Valor) < int.Parse(regla.ValorDefecto); break; case ">": if (campo.CodTipoDato == TiposDatos.Decimal && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = decimal.Parse(campo.Valor) > decimal.Parse(regla.ValorDefecto); else if (campo.CodTipoDato == TiposDatos.Entero && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = int.Parse(campo.Valor) > int.Parse(regla.ValorDefecto); break; case "<=": if (campo.CodTipoDato == TiposDatos.Decimal && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = decimal.Parse(campo.Valor) <= decimal.Parse(regla.ValorDefecto); else if (campo.CodTipoDato == TiposDatos.Entero && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = int.Parse(campo.Valor) <= int.Parse(regla.ValorDefecto); break; case ">=": if (campo.CodTipoDato == TiposDatos.Decimal && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = decimal.Parse(campo.Valor) >= decimal.Parse(regla.ValorDefecto); else if (campo.CodTipoDato == TiposDatos.Entero && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = int.Parse(campo.Valor) >= int.Parse(regla.ValorDefecto); break; case "!=": case "<>": if (campo.CodTipoDato == TiposDatos.Bit && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = bool.Parse(campo.Valor) != bool.Parse(regla.ValorDefecto); else if (campo.CodTipoDato == TiposDatos.Cadena) EsAprobado = campo.Valor != regla.ValorDefecto; else if (campo.CodTipoDato == TiposDatos.Decimal && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = decimal.Parse(campo.Valor) != decimal.Parse(regla.ValorDefecto); else if (campo.CodTipoDato == TiposDatos.Entero && !string.IsNullOrEmpty(campo.Valor)) EsAprobado = int.Parse(campo.Valor) != int.Parse(regla.ValorDefecto); break; default: break; } #endregion #region ARMA FORMULA DE LA CONDICION POR CADA REGLA if (string.IsNullOrWhiteSpace(regla.NombreSubConjunto))//agrega la evaluacion de la regla { if (FormulaRegla.Count > 0) FormulaRegla.Add(string.IsNullOrWhiteSpace(regla.OperadorLogicaParametro) ? "AND" : regla.OperadorLogicaParametro.ToUpper()); FormulaRegla.Add(EsAprobado ? "true" : "false"); } else//agrega la evaluacion a un grupo nuevo o existente { if (FormulaRegla.Contains("GRUPO_" + regla.NombreSubConjunto.ToUpper() + "("))//agrega la evaluacion de la regla a un grupo registrado { int IdInicio = FormulaRegla.IndexOf("GRUPO_" + regla.NombreSubConjunto.ToUpper() + "("); int IdCierre = FormulaRegla.IndexOf(")", IdInicio); FormulaRegla.Insert(IdCierre, string.IsNullOrWhiteSpace(regla.OperadorLogicaParametro) ? "AND" : regla.OperadorLogicaParametro.ToUpper()); FormulaRegla.Insert(IdCierre + 1, EsAprobado ? "true" : "false"); } else//registra un nuevo grupo y agrega la evaluacion de la regla { if (FormulaRegla.Count > 0) FormulaRegla.Add(string.IsNullOrWhiteSpace(regla.OperadorLogicoSubConjunto) ? "AND" : regla.OperadorLogicoSubConjunto.ToUpper()); FormulaRegla.Add("GRUPO_" + regla.NombreSubConjunto.ToUpper() + "("); FormulaRegla.Add(EsAprobado ? "true" : "false"); FormulaRegla.Add(")"); } } #endregion }//fin evalua reglas #region EJECUTA FORMULA DE LA CONDICION /*EJEMPLOS: true AND false true OR false AND false true AND GRUPO_A(true AND false) GRUPO_A(true OR false) OR true GRUPO_A(true OR false) OR GRUPO_B(true AND true) */ string grupoActual = null; string operandoActual = null; string operandoGrupo = null; bool? resultadoGrupo = null; foreach (var item in FormulaRegla) { if (item.Trim().ToLower() == "or" || item.Trim().ToLower() == "and") { operandoActual = item.Trim().ToLower() == "or" ? "OR" : "AND"; continue; } else if (item.Contains("GRUPO_") && string.IsNullOrEmpty(grupoActual)) { grupoActual = item; operandoGrupo = operandoActual; operandoActual = null; continue; } else if (item == ")" && !string.IsNullOrEmpty(grupoActual)) { if (ResultadoEvaluacion == null) ResultadoEvaluacion = resultadoGrupo; else if (operandoGrupo == "OR") ResultadoEvaluacion = ResultadoEvaluacion.Value || resultadoGrupo.Value; else//AND ResultadoEvaluacion = ResultadoEvaluacion.Value && resultadoGrupo.Value; grupoActual = null; operandoGrupo = null; operandoActual = null; resultadoGrupo = null; continue; } else if (!string.IsNullOrEmpty(grupoActual) && (item == "true" || item == "false")) { if (resultadoGrupo == null) resultadoGrupo = bool.Parse(item); else if (operandoActual == "OR") resultadoGrupo = resultadoGrupo.Value || bool.Parse(item); else//AND resultadoGrupo = resultadoGrupo.Value && bool.Parse(item); operandoActual = null; } else if (string.IsNullOrEmpty(grupoActual) && (item == "true" || item == "false")) { if (ResultadoEvaluacion == null) ResultadoEvaluacion = bool.Parse(item); else if (operandoActual == "OR") ResultadoEvaluacion = ResultadoEvaluacion.Value || bool.Parse(item); else//AND ResultadoEvaluacion = ResultadoEvaluacion.Value && bool.Parse(item); operandoActual = null; } } #endregion DatosEntrada.EvaluacionCondiciones.Add(new EvaluacionCondicion { Nombre = condicion.TipoCondiciones.NombreCondicion, Aprobado = ResultadoEvaluacion == true }); } } } catch (Exception ex) { DatosEntrada.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); DatosEntrada.DescripcionRespuesta = "Error al evaluar condiciones"; log.Error(ex); } return DatosEntrada; } BaseJson EnviarCorreoAutomatico(CorreosAutomaticosPendientes correo, bool? CordinadorOperacionesCrediticias = null, List BookmarkExtra = null, bool? UEN = null, int? IncidenteFormalizacion = null) { BaseJson model = new BaseJson(); FiltroCorreoProcesoJSON filtro = new FiltroCorreoProcesoJSON(); EtapasDAL EtapasDal = new EtapasDAL(); SolicitudDAL SolicitudDal = new SolicitudDAL(); UltimusUser UserEmail = null; ClienteDAL ClienteDal = new ClienteDAL(); string NombreCliente = string.Empty; try { var solicitud = SolicitudDal.Obtener(correo.IdSolicitud); var etapa = correo.Etapas; var ClientePrincipal = ClienteDal.ObtenerPrincipal(correo.IdSolicitud); ClientePrincipal.BitacoraDocumentosCliente = new BitacoraDocumentosClienteDAL().Obtener(null, ClientePrincipal.IdCliente); filtro.Proceso = "Credito"; filtro.NombreFiltro = correo.NombreFiltroCorreo; filtro.CodSolicitud = (long)correo.IdSolicitud; filtro.Etapa = etapa.DescripcionEtapa; filtro.Incidente = solicitud.Incident ?? 0; filtro.UserID = correo.UserID; filtro.CC = new List(); filtro.Destinatario = new List(); filtro.ListaParametros = new List(); filtro.ListaBookmarks = new List(); filtro.DocumentosAdjuntos = new List(); UltimusIntegrationAPIController Binding = new UltimusIntegrationAPIController(); using (UltimusIntegrationClient IntegrationClient = new UltimusIntegrationClient(Binding.wSHttpBinding, Binding.endpointAddress)) { string error = ""; #region FR_Rev_Info_Caso if (correo.NombreFiltroCorreo == "Formalizacion_Rev_Caso") { UserEmail = null; if (CordinadorOperacionesCrediticias == true) { IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Coordinador de operaciones crediticias", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); if (UEN == true) { UserEmail = null; IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Jefe de Operaciones Crediticias", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); } } else { IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Coordinador de descuento de facturas", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); if (UEN == true) { UserEmail = null; IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Jefe de Operaciones de Factoreo", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); } } if (UserEmail == null) { IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Coordinador de operaciones crediticias", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); } filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "INCIDENTE", Valor = solicitud.Incidente.HasValue ? solicitud.Incidente.ToString() : "0" }); } else if (correo.NombreFiltroCorreo == "NotificarCola") { if (CordinadorOperacionesCrediticias == true) { UserEmail = null; IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Coordinador de operaciones crediticias", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); UserEmail = null; IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Jefe de Operaciones Crediticias", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); } else { UserEmail = null; IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Coordinador de descuento de facturas", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); UserEmail = null; IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", "Jefe de Operaciones de Factoreo", out UserEmail, out error); filtro.Destinatario.Add(UserEmail.EmailAddress); } filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "INCIDENTE", Valor = IncidenteFormalizacion.ToString() }); } switch (ClientePrincipal.IdTipoCliente) { case EnumTipoCliente.Fisico: NombreCliente = string.Format("{0} {1}", ClientePrincipal.PrimerNombre.Trim(), ClientePrincipal.PrimerApellido.Trim()); break; case EnumTipoCliente.Juridico: NombreCliente = ClientePrincipal.RazonSocial.Trim(); break; } filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "IDSOLICITUD", Valor = solicitud.IdSolicitud.ToString() }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "NOMBRECLIENTE", Valor = NombreCliente }); #endregion if (BookmarkExtra != null && BookmarkExtra.Count > 0) filtro.ListaBookmarks.AddRange(BookmarkExtra); #region Adjuntar if (UEN == true) { string rutaCaratula = ClientePrincipal.BitacoraDocumentosCliente.Where(x => x.IdTipoDocumento == 1).FirstOrDefault().RutaFisicaAdjunto; if (!string.IsNullOrWhiteSpace(rutaCaratula)) filtro.DocumentosAdjuntos.Add(rutaCaratula); } #endregion using (UltimusFormAPIController InterfaceClient = new UltimusFormAPIController()) filtro = InterfaceClient.EnviarCorreoFiltro(filtro); } } catch (Exception ex) { model.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); log.Error(ex); } return model; } BaseJson NotificarCorreo(int? IdSolicitud, List EtapasFormalizacion, string UsuarioEmail, bool? JFG = null, bool? CordinadorOperacionesCrediticias = null, bool? UEN = null, bool? cola = null, int? IncidenteFormalizacion = null) { BaseJson resp = new BaseJson(); Etapas EtapaActual = new Etapas(); EtapasDAL EtapasDal = new EtapasDAL(); CorreosAutomaticosPendientes DatoCorreo = new CorreosAutomaticosPendientes(); List BookmarkExtra = new List(); List ListaRecipientes = new List(); string error = null; UltimusUser UserEmail = null; string RecipientesNotificados = string.Empty; try { string UsuarioIniciador = new ObtieneParametros().GetValueKeyRegedit("UsuarioProcesoUltimus", false); EtapasFormalizacion = EtapasDal.Obtener(null, EnumProcesos.Formalizacion); EtapaActual = EtapasFormalizacion.Where(c => c.DescripcionEtapa == EnumEtapas.FR_Rev_Info_Caso).FirstOrDefault(); DatoCorreo.IdSolicitud = Convert.ToInt32(IdSolicitud); DatoCorreo.UserID = UsuarioIniciador; DatoCorreo.IdEtapa = EtapaActual.IdEtapa; DatoCorreo.Etapas = EtapaActual; DatoCorreo.NombreFiltroCorreo = cola.HasValue ? cola.Value ? "NotificarCola" : "Formalizacion_Rev_Caso" : "Formalizacion_Rev_Caso"; UltimusIntegrationAPIController Binding = new UltimusIntegrationAPIController(); using (UltimusIntegrationClient IntegrationClient = new UltimusIntegrationClient(Binding.wSHttpBinding, Binding.endpointAddress)) { if (JFG == false) { UserEmail = null; IntegrationClient.GetUserInformation(UsuarioEmail, out UserEmail, out error); if (UserEmail != null) RecipientesNotificados = UserEmail.strUserFullName; } else if (JFG == true) { UserEmail = null; IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", UsuarioEmail, out UserEmail, out error); if (UserEmail != null) RecipientesNotificados = UserEmail.strUserFullName; } BookmarkExtra.Add(new BookmarkCorreoJSON { Nombre = "FORMALIZADOR", Valor = RecipientesNotificados }); if (cola.HasValue && cola.Value) BookmarkExtra.Add(new BookmarkCorreoJSON { Nombre = "ETAPA", Valor = EtapaActual.DescripcionEtapa }); } EnviarCorreoAutomatico(DatoCorreo, CordinadorOperacionesCrediticias, BookmarkExtra, UEN, IncidenteFormalizacion); } catch (Exception ex) { resp.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); log.Error(ex); } return resp; } [WebMethod] public bool EnviarCorreoDocumentacionNoEntregada(int Incidente, string Step) { bool respuesta = true; Solicitud Solicitud = new Solicitud(); Procesos Proceso = new Procesos(); SolicitudDAL SolicitudDAL = new SolicitudDAL(); ProcesosDAL ProcesosDAL = new ProcesosDAL(); Cliente Cliente = new Cliente(); ClienteDAL ClienteDal = new ClienteDAL(); FiltroCorreoProcesoJSON filtro = new FiltroCorreoProcesoJSON(); EtapasDAL EtapasDal = new EtapasDAL(); UltimusUser UserEmail = null; List ListaEstructuraOC = null; List ListaUserEmail = null; DetalleRequisitos DetalleRequisitos = new DetalleRequisitos(); DetalleRequisitosDAL DetalleRequisitosDAL = new DetalleRequisitosDAL(); try { Proceso = ProcesosDAL.Obtener(EnumProcesos.Credito); Solicitud = SolicitudDAL.Obtener(Incidente, Proceso.NombreProceso); Cliente = ClienteDal.ObtenerPrincipal(Solicitud.IdSolicitud); DetalleRequisitos = DetalleRequisitosDAL.Obtener(Solicitud.IdSolicitud); string UsuarioIniciador = new ObtieneParametros().GetValueKeyRegedit("UsuarioProcesoUltimus", false); if (DetalleRequisitos != null && DetalleRequisitos.DocumentacionEntregada == false) { filtro.Proceso = Proceso.NombreProceso; filtro.NombreFiltro = "TerminarProcesoNotificar"; filtro.CodSolicitud = (long)Solicitud.IdSolicitud; filtro.Etapa = Step; filtro.Incidente = Incidente; filtro.CC = new List(); filtro.Destinatario = new List(); filtro.ListaParametros = new List(); filtro.ListaBookmarks = new List(); filtro.DocumentosAdjuntos = new List(); filtro.UserID = UsuarioIniciador; UltimusIntegrationAPIController Binding = new UltimusIntegrationAPIController(); using (UltimusIntegrationClient IntegrationClient = new UltimusIntegrationClient(Binding.wSHttpBinding, Binding.endpointAddress)) { ListaUserEmail = new List(); #region Ejecutivo if (Cliente != null && !string.IsNullOrEmpty(Cliente.Ejecutivo.Correo)) filtro.Destinatario.Add(Cliente.Ejecutivo.Correo); ListaEstructuraOC = new EstructuraOrgChartDAL().Obtener(EnumRolFuncional.Asistente_Servicios, null); if (ListaEstructuraOC != null && ListaEstructuraOC.Count > 0) { foreach (var lista in ListaEstructuraOC) { if (!string.IsNullOrEmpty(lista.Name)) { ListaUserEmail = ObtenerCorreos(lista.Name, Convert.ToInt32(lista.IdTipoEstructuraOrgChart)); foreach (UltimusUser Email in ListaUserEmail) { if (!string.IsNullOrEmpty(Email.EmailAddress)) filtro.Destinatario.Add(Email.EmailAddress); } } } } #endregion if (UserEmail != null) filtro.Destinatario.Add(UserEmail.EmailAddress); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "IDSOLICITUD", Valor = Solicitud.IdSolicitud.ToString() }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "INCIDENTE", Valor = Solicitud.Incidente.HasValue ? Solicitud.Incidente.ToString() : "0" }); string NombreCliente = string.Empty; switch (Cliente.IdTipoCliente) { case EnumTipoCliente.Fisico: NombreCliente = string.Format("{0} {1}", Cliente.PrimerNombre.Trim(), Cliente.PrimerApellido.Trim()); break; case EnumTipoCliente.Juridico: NombreCliente = Cliente.RazonSocial.Trim(); break; } filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "NOMBRECLIENTE", Valor = NombreCliente }); using (UltimusFormAPIController InterfaceClient = new UltimusFormAPIController()) filtro = InterfaceClient.EnviarCorreoFiltro(filtro); respuesta = false; } } } catch (Exception ex) { log.Error(ex); } return respuesta; } public List ObtenerCorreos(string NameJobFunction, int IdTipoEstructuraOrgChart, string NameGroup = null, string UserName = null) { List respuesta = new List(); UltimusIntegrationAPIController Binding = new UltimusIntegrationAPIController(); UltimusUser UserEmail = null; string error = null; try { using (UltimusIntegrationClient IntegrationClient = new UltimusIntegrationClient(Binding.wSHttpBinding, Binding.endpointAddress)) { switch (IdTipoEstructuraOrgChart) { case 1: IntegrationClient.GetUserForJobFunction("Business Organization", "Cathay OC", NameJobFunction.Trim(), out UserEmail, out error); if (UserEmail != null) respuesta.Add(UserEmail); break; case 2: IntegrationClient.GetJobFunctionGroupMembers("Cathay OC", NameJobFunction.Trim(), out respuesta, out error); break; case 3: IntegrationClient.GetGroupUserMembers(NameGroup, out respuesta, out error); break; default: IntegrationClient.GetUserInformation(UserName, out UserEmail, out error); if (UserEmail != null) respuesta.Add(UserEmail); break; } } } catch (Exception ex) { log.Error(ex); throw ex; } return respuesta; } DatosAsignacionRecipientes AsignarRecipientesFormalizacion(int IdSolicitud, Cliente ClientePrincipal, List Variables, DatosEntradaCondiciones DatosEntradaRecipientes) { DatosAsignacionRecipientes Resp = new DatosAsignacionRecipientes(); Etapas EtapaActual; EtapasDAL EtapasDal = new EtapasDAL(); EstructuraOrgChartDAL EstructuraOrgChartDal = new EstructuraOrgChartDAL(); EjecutivoDAL EjecutivoDal = new EjecutivoDAL(); List BookmarkExtra = new List(); List EtapasFormalizacion = null; Ejecutivo FormalizadorUEN = null; string UsuarioIniciador = new ObtieneParametros().GetValueKeyRegedit("UsuarioProcesoUltimus", false); CorreosAutomaticosPendientes DatoCorreo = new CorreosAutomaticosPendientes(); List ListaRecipientes = new List(); string recipiente_asignado = null; FormalizadorUEN = EjecutivoDal.ObtenerEjecutivo(ClientePrincipal.IdEjecutivo); EtapasFormalizacion = EtapasDal.Obtener(null, EnumProcesos.Formalizacion); //DATOS DE CORREO CONSTANTES DatoCorreo.IdSolicitud = IdSolicitud; DatoCorreo.UserID = UsuarioIniciador; #region RECIPIENTE FORMALIZACION SEGUN OFERTA Y FACILIDAD ETAPA: FR_Asig_Caso ListaRecipientes.Clear(); EtapaActual = EtapasFormalizacion.Where(c => c.DescripcionEtapa == EnumEtapas.FR_Asig_Caso).FirstOrDefault(); DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "IdEtapa").First().Valor = EtapaActual == null ? "0" : EtapaActual.IdEtapa.ToString(); recipiente_asignado = string.Empty; DatosEntradaRecipientes = EvaluarCondiciones(DatosEntradaRecipientes); Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignadoUEN).First().NodeValue = false; if (DatosEntradaRecipientes.EvaluacionCondiciones != null && DatosEntradaRecipientes.EvaluacionCondiciones.Count > 0 && DatosEntradaRecipientes.EvaluacionCondiciones.Any(c => c.Aprobado == true)) { foreach (var item in DatosEntradaRecipientes.EvaluacionCondiciones.Where(c => c.Aprobado == true).ToList()) { ListaRecipientes.Add(new RecipienteUltimus { Nombre = item.Nombre, SintaxisRecipiente = EstructuraOrgChartDal.ObtenerSintaxisUltimus(item.Nombre) }); } recipiente_asignado = string.Join(";", ListaRecipientes.Select(c => c.SintaxisRecipiente).ToArray()); } //si ninguna regla se cumplio asigna el formalizador UEN if (string.IsNullOrEmpty(recipiente_asignado) && FormalizadorUEN != null) { recipiente_asignado = "USER:org=Business Organization,user=" + FormalizadorUEN.FormalizadorAsignado_UserID; Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignadoUEN).First().NodeValue = true; } Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoRecipienteAsignado).First().NodeValue = recipiente_asignado; #endregion #region RECIPIENTE FORMALIZACION SEGUN OFERTA Y FACILIDAD ETAPA: FR_Inclu_Sol_Sistem_Transac EtapaActual = EtapasFormalizacion.Where(c => c.DescripcionEtapa == EnumEtapas.FR_Inclu_Sol_Sistem_Transac).FirstOrDefault(); DatosEntradaRecipientes.ListaParametros.Where(c => c.NombreParametro == "IdEtapa").First().Valor = EtapaActual == null ? "0" : EtapaActual.IdEtapa.ToString(); recipiente_asignado = string.Empty; ListaRecipientes.Clear(); DatosEntradaRecipientes = EvaluarCondiciones(DatosEntradaRecipientes); if (DatosEntradaRecipientes.EvaluacionCondiciones != null && DatosEntradaRecipientes.EvaluacionCondiciones.Count > 0 && DatosEntradaRecipientes.EvaluacionCondiciones.Any(c => c.Aprobado == true)) { foreach (var item in DatosEntradaRecipientes.EvaluacionCondiciones.Where(c => c.Aprobado == true).ToList()) { ListaRecipientes.Add(new RecipienteUltimus { Nombre = item.Nombre, SintaxisRecipiente = EstructuraOrgChartDal.ObtenerSintaxisUltimus(item.Nombre) }); } recipiente_asignado = string.Join(";", ListaRecipientes.Select(c => c.SintaxisRecipiente).ToArray()); Resp.AsigCaso_JobFunctionAsignado = ListaRecipientes.FirstOrDefault().Nombre; } //si ninguna regla se cumplio asigna el Formalizador de operaciones crediticias if (string.IsNullOrEmpty(recipiente_asignado)) { recipiente_asignado = EstructuraOrgChartDal.ObtenerSintaxisUltimus("Formalizador de operaciones crediticias"); Resp.AsigCaso_JobFunctionAsignado = "Formalizador de operaciones crediticias"; } Variables.Where(c => c.NodeName == EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado).First().NodeValue = recipiente_asignado; #endregion Resp.Variables = Variables; return Resp; } public void AsignarRecipientes(List Variables, int? IdCategoria, int? IdFacilidad, bool EsLinea, bool EsGaratiaReal, string Formalizador, List EtapasFormalizacion, Cliente ClientePrincipal, out bool FormalizadorOperacionesCredito, int? IdSolicitud = null, int? IdTipoCambioCondiciones = null, bool? EsFactoreo = null) { try { bool UEN = false; FormalizadorOperacionesCredito = false; #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Rev_Info_Caso if (ClientePrincipal.IdTipoTramite != EnumTipoTramite.CambioCondiciones) { if (EsGaratiaReal == true && EsLinea == true && IdCategoria.In(EnumCategoria.EstudioInicial, EnumCategoria.EstudioSeguimiento)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } else if (EsGaratiaReal == false && EsLinea == true && IdCategoria.In(EnumCategoria.EstudioInicial, EnumCategoria.EstudioSeguimiento)) { UEN = true; Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = string.Format(EnumOC.User , Formalizador) }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado, NodeValue = string.Format(EnumOC.User, Formalizador) }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoTransOfertaContrato, NodeValue = string.Format(EnumOC.User, Formalizador) }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoCrearLineaTransac, NodeValue = string.Format(EnumOC.User, Formalizador) }); NotificarCorreo(IdSolicitud, EtapasFormalizacion, Formalizador, false, true, true); } else if (IdCategoria == EnumCategoria.FastTrack && EsGaratiaReal == false) { //Coordinador de Descuento de Facturas Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else if (IdFacilidad.In(12, 13, 11)) { //Coordinador de Operaciones Crediticias Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } else if (EsLinea == false && IdFacilidad.In(5, 6, 7, 8) && EsGaratiaReal == false) { // Administrador de contratos Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AdministradorContratos }); NotificarCorreo(IdSolicitud, EtapasFormalizacion, "Administrador de contratos", true, false); } else if (EsLinea == false && IdFacilidad.In(9, 10) && EsGaratiaReal == false) { // Coordinador de Descuento de Facturas Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else if (EsLinea == false && IdFacilidad.In(5, 6, 7, 8) && EsGaratiaReal == true) { // Activar rol Administrador de contratos y Activar rol Coordinador de Operaciones Crediticias Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AdministradorContratos }); NotificarCorreo(IdSolicitud, EtapasFormalizacion, "Administrador de contratos", true, false); } else if (EsLinea == false && IdFacilidad.In(9, 10) && EsGaratiaReal == true) { // Coordinador de Descuento de Facturas y Activar rol Coordinador de Operaciones Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else if (EsGaratiaReal == false) { UEN = true; //Formalizador de Operaciones Crediticias (UEN) Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = string.Format(EnumOC.User , Formalizador) }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado, NodeValue = string.Format(EnumOC.User, Formalizador) }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoTransOfertaContrato, NodeValue = string.Format(EnumOC.User, Formalizador) }); Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoCrearLineaTransac, NodeValue = string.Format(EnumOC.User, Formalizador) }); NotificarCorreo(IdSolicitud, EtapasFormalizacion, Formalizador, false, true, true); } else if (EsGaratiaReal == true) { //Activar rol Coordinador de Operaciones Crediticias Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } } else { if (EsLinea == true) { if (EsFactoreo == true && IdTipoCambioCondiciones.In(EnumTipoCambioCondiciones.SobregiroSublimite, EnumTipoCambioCondiciones.ProrrogaOperacion)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); FormalizadorOperacionesCredito = false; } else if (EsGaratiaReal == true) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); FormalizadorOperacionesCredito = false; } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.FormalizadorOperacionesCrediticias }); FormalizadorOperacionesCredito = true; } } else { if (IdFacilidad.In(5, 6, 7, 8, 9, 10)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); FormalizadorOperacionesCredito = false; } else if (EsGaratiaReal == true) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); FormalizadorOperacionesCredito = false; } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionRevCasoRecipienteAsignado, NodeValue = EnumOC.FormalizadorOperacionesCrediticias }); FormalizadorOperacionesCredito = true; } } } #endregion #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Crear_Expediente if (ClientePrincipal.IdTipoTramite == EnumTipoTramite.CambioCondiciones) { if (EsLinea == true) { if (EsFactoreo == true && IdTipoCambioCondiciones.In(EnumTipoCambioCondiciones.SobregiroSublimite, EnumTipoCambioCondiciones.ProrrogaOperacion)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado, NodeValue = EnumOC.FormalizadorDescuentoFacturas }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado, NodeValue = EnumOC.FormalizadorOperacionesCrediticias }); } } else if (IdFacilidad.In(5, 6, 7, 8, 9, 10) && EsLinea == false) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado, NodeValue = EnumOC.FormalizadorDescuentoFacturas }); } else if (!IdFacilidad.In(5, 6, 7, 8, 9, 10) && EsLinea == false) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoFormalizadorAsignado, NodeValue = EnumOC.FormalizadorOperacionesCrediticias }); } } #endregion #region RECIPIENTE FORMALIZACION SEGUN OFERTA Y FACILIDAD ETAPA: FR_Trans_Oferta_Contrato if (IdFacilidad.In(5, 6, 7, 8, 9, 10) && EsLinea == false) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoTransOfertaContrato, NodeValue = EnumOC.CoordinadorDescuentoFacturas }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoTransOfertaContrato, NodeValue = string.Format(EnumOC.User, Formalizador) }); } #endregion #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Revisar_Doc List Asig_Revisar_Doc = new List(); UltimusIntegrationAPIController Binding = new UltimusIntegrationAPIController(); string error = string.Empty; using (UltimusIntegrationClient IntegrationClient = new UltimusIntegrationClient(Binding.wSHttpBinding, Binding.endpointAddress)) { if (IdFacilidad.In(5, 6, 7, 8, 9, 10) && EsLinea == false) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigRevisarDoc, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigRevisarDoc, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } } // IncidentData.Global.Formalizacion.Asig_Revisar_Doc #endregion #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Revisar_Doc if (UEN == false) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoCrearLineaTransac, NodeValue = EnumOC.FormalizadorOperacionesCrediticias }); } #endregion #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Pagar_Operacion //Si es un caso Específico para Descuento de Facturas, Fast Track, Adelanto de contrato u Orden de compra Activar rol Coordinador de Descuento de Facturas if (EsLinea == false && IdFacilidad.In(5, 6, 7, 8, 9, 10)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoPagarOperacion, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoPagarOperacion, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } #endregion #region RECIPIENTE FORMALIZACION SEGUN REGLAS ETAPA: FR_Control_Calidad if (ClientePrincipal.IdTipoTramite != EnumTipoTramite.CambioCondiciones) { //Si es un caso para Estudio inicial, Estudio de seguimiento, Específicos o Descuento de arrendamiento Activar rol Coordinador de Operaciones Crediticias if ((EsLinea == false && IdCategoria.In(EnumCategoria.EstudioInicial, EnumCategoria.EstudioSeguimiento)) || IdFacilidad.In(15)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoControlCalidad, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } else if (EsLinea == false && IdFacilidad.In(5, 6, 7, 8, 9, 10)) //Si es un caso Específico para Descuento de Facturas, Fast Track, Adelanto de contrato u Orden de compra Activar rol Coordinador de Descuento de Facturas { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoControlCalidad, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoControlCalidad, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } } else { if (EsLinea == true) { if (EsFactoreo == true && IdTipoCambioCondiciones.In(EnumTipoCambioCondiciones.SobregiroSublimite, EnumTipoCambioCondiciones.ProrrogaOperacion)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoControlCalidad, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoControlCalidad, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } } else if (IdFacilidad.In(5, 6, 7, 8, 9, 10) && EsLinea == false) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoControlCalidad, NodeValue = EnumOC.AsigJefeCoordinadorDescuentoFacturasQUEUE }); } else if (!IdFacilidad.In(5, 6, 7, 8, 9, 10) && EsLinea == false) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoControlCalidad, NodeValue = EnumOC.AsigJefeCoordinadorOperacionesCrediticiasQUEUE }); } } #endregion #region RECIPIENTE FORMALIZACION SEGUN OFERTA Y FACILIDAD ETAPA: FR_Ejecutar_Desembolso if (IdFacilidad.In(5, 6, 7, 8, 9, 10)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoDesembolso, NodeValue = EnumOC.CajeroSecoDescuentoFacturas }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoDesembolso, NodeValue = EnumOC.CajeroSecoOperacionesCrediticias }); } #endregion #region RECIPIENTE FORMALIZACION SEGUN OFERTA Y FACILIDAD ETAPA: FR_Notificar_Desembolso if (IdFacilidad.In(5, 6, 7, 8, 9, 10)) { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoNotificarDesembolso, NodeValue = EnumOC.FormalizadorDescuentoFacturas }); } else { Variables.Add(new NodeVariables() { NodeName = EnumVariblesUltimus.TaskDataGlobalFormalizacionAsigCasoNotificarDesembolso, NodeValue = EnumOC.FormalizadorOperacionesCrediticias }); } #endregion } catch (Exception ex) { throw ex; } } [WebMethod] public UExcelJson ExtraerValoresExcel(UExcelJson ExcelJson) { try { if (ExcelJson == null) ExcelJson = new UExcelJson(); UExcel oExcelLibrary = new UExcel(); ExcelJson.ListaSpreadSheet = oExcelLibrary.ExtraccionExcel(ExcelJson.RutaDocumento, ExcelJson.ListaSpreadSheet); ExcelJson.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); ExcelJson.DescripcionRespuesta = ""; } catch (Exception ex) { ExcelJson.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); ExcelJson.DescripcionRespuesta = ex.Message; log.Error(ex); } return ExcelJson; } [WebMethod] public UExcelJson CargarValoresExcel(UExcelJson ExcelJson) { string RutaFisicaConf = string.Empty; string RutaVirtualConfig = string.Empty; UExcel oExcelLibrary = new UExcel(); try { RutaFisicaConf = System.Configuration.ConfigurationManager.AppSettings["RutaFisica"]; RutaVirtualConfig = System.Configuration.ConfigurationManager.AppSettings["RutaVirtual"]; #region Validaciones if (ExcelJson == null) throw new Exception("Parametro Nulo.Es requerido el parametro de entrada cargado"); if (!System.IO.File.Exists(ExcelJson.RutaDocumento)) throw new Exception(string.Format("No se pudo encontrar el documento {0}", ExcelJson.RutaDocumento)); if (string.IsNullOrEmpty(ExcelJson.NombreDocumentoGenerado)) throw new Exception(string.Format("El nombre para el documento a generar no es valido {0}", ExcelJson.NombreDocumentoGenerado)); if (string.IsNullOrEmpty(RutaFisicaConf)) throw new Exception("La ruta físca interna configurada para crear el documento no es correcta"); if (string.IsNullOrEmpty(RutaVirtualConfig)) throw new Exception("La ruta virtual interna configurada para acceder al documento generado no es correcta"); #endregion string RutaDocumentoGenerado = string.Format("{0}\\{1}", RutaFisicaConf, ExcelJson.NombreDocumentoGenerado); System.IO.File.Copy(ExcelJson.RutaDocumento, RutaDocumentoGenerado); ExcelJson.ListaSpreadSheet = oExcelLibrary.CargaExcel(RutaDocumentoGenerado, ExcelJson.ListaSpreadSheet); ExcelJson.RutaFisica = string.Format("{0}\\{1}", RutaFisicaConf, ExcelJson.NombreDocumentoGenerado); ExcelJson.RutaVirtual = string.Format("{0}{1}", RutaVirtualConfig, ExcelJson.NombreDocumentoGenerado); ExcelJson.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); ExcelJson.DescripcionRespuesta = string.Empty; } catch (Exception ex) { ExcelJson.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); ExcelJson.DescripcionRespuesta = ex.Message; log.Error(ex); } return ExcelJson; } [WebMethod] public bool EnviarCorreoTresDiasDocNoEntregada(int Incidente) { bool respuesta = false; Solicitud Solicitud = new Solicitud(); Procesos Proceso = new Procesos(); SolicitudDAL SolicitudDAL = new SolicitudDAL(); ProcesosDAL ProcesosDAL = new ProcesosDAL(); FiltroCorreoProcesoJSON filtro = new FiltroCorreoProcesoJSON(); EtapasDAL EtapasDal = new EtapasDAL(); DatosGeneralesAnalisis DatosActuales = new DatosGeneralesAnalisis(); List ListaUserEmail = null; List BitacoraControlAprobacion = new List(); BitacoraControlAprobacionDAL ContAprobacionDal = new BitacoraControlAprobacionDAL(); Cliente Cliente = new Cliente(); ClienteDAL ClienteDal = new ClienteDAL(); string UserFullName = string.Empty; try { Proceso = ProcesosDAL.Obtener(EnumProcesos.Credito); Solicitud = SolicitudDAL.Obtener(Incidente, Proceso.NombreProceso); Cliente = ClienteDal.ObtenerPrincipal(Solicitud.IdSolicitud); DatosActuales = new DatosGeneralesAnalisisDAL().Obtener(Solicitud.IdSolicitud); string UsuarioIniciador = new ObtieneParametros().GetValueKeyRegedit("UsuarioProcesoUltimus", false); filtro.Proceso = Proceso.NombreProceso; filtro.NombreFiltro = "NotificacionTresdiasDocAdicionales"; filtro.CodSolicitud = (long)Solicitud.IdSolicitud; filtro.Etapa = EnumEtapas.AN_Preanalisis; ; filtro.Incidente = Incidente; filtro.CC = new List(); filtro.Destinatario = new List(); filtro.ListaParametros = new List(); filtro.ListaBookmarks = new List(); filtro.DocumentosAdjuntos = new List(); filtro.UserID = UsuarioIniciador; UltimusIntegrationAPIController Binding = new UltimusIntegrationAPIController(); using (UltimusIntegrationClient IntegrationClient = new UltimusIntegrationClient(Binding.wSHttpBinding, Binding.endpointAddress)) { BitacoraControlAprobacion = ContAprobacionDal.Obtener(Solicitud.IdSolicitud, EnumEtapas.AN_Rev_Doc_Clasificar); ListaUserEmail = new List(); #region Analista if (BitacoraControlAprobacion != null && BitacoraControlAprobacion.Count > 0) { if (!string.IsNullOrEmpty(BitacoraControlAprobacion.FirstOrDefault().UsuarioAsignado)) { ListaUserEmail = ObtenerCorreos("", 0, null, BitacoraControlAprobacion.FirstOrDefault().UsuarioAsignado); foreach (UltimusUser Email in ListaUserEmail) { if (!string.IsNullOrEmpty(Email.EmailAddress)) { filtro.Destinatario.Add(Email.EmailAddress); UserFullName = Email.strUserFullName; } } } } #endregion //filtro.Destinatario.Add("jzuniga@atesacr.com"); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "IDSOLICITUD", Valor = Solicitud.IdSolicitud.ToString() }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "INCIDENTE", Valor = Solicitud.Incidente.HasValue ? Solicitud.Incidente.ToString() : "0" }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "IDENTIFICACION", Valor = Cliente.NumeroIdentificacion }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "ANALISTA", Valor = UserFullName }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "COMENTARIO", Valor = DatosActuales.ComentariosDocumentosAdicionales }); string NombreCliente = string.Empty; switch (Cliente.IdTipoCliente) { case EnumTipoCliente.Fisico: NombreCliente = string.Format("{0} {1}", Cliente.PrimerNombre.Trim(), Cliente.PrimerApellido.Trim()); break; case EnumTipoCliente.Juridico: NombreCliente = Cliente.RazonSocial.Trim(); break; } filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "NOMBRECLIENTE", Valor = NombreCliente }); using (UltimusFormAPIController InterfaceClient = new UltimusFormAPIController()) filtro = InterfaceClient.EnviarCorreoFiltro(filtro); DatosActuales.NotificacionTresDias = true; new DatosGeneralesAnalisisDAL().GuardarActualizarAnalisis(DatosActuales); respuesta = true; } } catch (Exception ex) { log.Error(ex); } return respuesta; } [WebMethod] public bool EnviarCorreoCincoDiasDocNoEntregada(int Incidente) { bool respuesta = false; Solicitud Solicitud = new Solicitud(); Procesos Proceso = new Procesos(); SolicitudDAL SolicitudDAL = new SolicitudDAL(); ProcesosDAL ProcesosDAL = new ProcesosDAL(); FiltroCorreoProcesoJSON filtro = new FiltroCorreoProcesoJSON(); EtapasDAL EtapasDal = new EtapasDAL(); UltimusUser UserEmail = null; List ListaEstructuraOC = null; List ListaUserEmail = null; Cliente Cliente = new Cliente(); ClienteDAL ClienteDal = new ClienteDAL(); List BitacoraControlAprobacion = new List(); BitacoraControlAprobacionDAL ContAprobacionDal = new BitacoraControlAprobacionDAL(); BitacoraComentariosInternos Comentarios = new BitacoraComentariosInternos(); DatosGeneralesAnalisis DatosAnalisis = new DatosGeneralesAnalisis(); Ejecutivo Ejecutivo = new Ejecutivo(); string UserFullName = string.Empty; try { Proceso = ProcesosDAL.Obtener(EnumProcesos.Credito); Solicitud = SolicitudDAL.Obtener(Incidente, Proceso.NombreProceso); Cliente = ClienteDal.ObtenerPrincipal(Solicitud.IdSolicitud); Ejecutivo = new EjecutivoDAL().ObtenerEjecutivoID(Convert.ToInt32(Cliente.IdEjecutivo)); DatosAnalisis = new DatosGeneralesAnalisisDAL().Obtener(Solicitud.IdSolicitud); string UsuarioIniciador = new ObtieneParametros().GetValueKeyRegedit("UsuarioProcesoUltimus", false); filtro.Proceso = Proceso.NombreProceso; filtro.NombreFiltro = "NotificacionCincoDiasDocAdicionales"; filtro.CodSolicitud = (long)Solicitud.IdSolicitud; filtro.Etapa = EnumEtapas.AN_Preanalisis; filtro.Incidente = Incidente; filtro.CC = new List(); filtro.Destinatario = new List(); filtro.ListaParametros = new List(); filtro.ListaBookmarks = new List(); filtro.DocumentosAdjuntos = new List(); filtro.UserID = UsuarioIniciador; UltimusIntegrationAPIController Binding = new UltimusIntegrationAPIController(); using (UltimusIntegrationClient IntegrationClient = new UltimusIntegrationClient(Binding.wSHttpBinding, Binding.endpointAddress)) { BitacoraControlAprobacion = ContAprobacionDal.Obtener(Solicitud.IdSolicitud, EnumEtapas.AN_Rev_Doc_Clasificar); ListaUserEmail = new List(); #region Analista if (BitacoraControlAprobacion != null && BitacoraControlAprobacion.Count > 0) { if (!string.IsNullOrEmpty(BitacoraControlAprobacion.FirstOrDefault().UsuarioAsignado)) { ListaUserEmail = ObtenerCorreos("", 0, null, BitacoraControlAprobacion.FirstOrDefault().UsuarioAsignado); foreach (UltimusUser Email in ListaUserEmail) { if (!string.IsNullOrEmpty(Email.EmailAddress)) { filtro.Destinatario.Add(Email.EmailAddress); UserFullName = Email.strUserFullName; } } } } #endregion #region Ejecutivo if (Cliente != null && !string.IsNullOrEmpty(Cliente.Ejecutivo.Correo)) filtro.Destinatario.Add(Cliente.Ejecutivo.Correo); #endregion #region Asistente_Negocio ListaEstructuraOC = new EstructuraOrgChartDAL().Obtener(EnumRolFuncional.Asistente_Negocio, null); if (ListaEstructuraOC != null && ListaEstructuraOC.Count > 0) { foreach (var lista in ListaEstructuraOC) { if (!string.IsNullOrEmpty(lista.Name)) { ListaUserEmail = ObtenerCorreos(lista.Name, Convert.ToInt32(lista.IdTipoEstructuraOrgChart)); foreach (UltimusUser Email in ListaUserEmail) { if (!string.IsNullOrEmpty(Email.EmailAddress)) filtro.Destinatario.Add(Email.EmailAddress); } } } } #endregion if (UserEmail != null) filtro.Destinatario.Add(UserEmail.EmailAddress); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "IDSOLICITUD", Valor = Solicitud.IdSolicitud.ToString() }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "INCIDENTE", Valor = Solicitud.Incidente.HasValue ? Solicitud.Incidente.ToString() : "0" }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "IDENTIFICACION", Valor = Cliente.NumeroIdentificacion }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "EJECUTIVO", Valor = Ejecutivo.Nombre }); string NombreCliente = string.Empty; switch (Cliente.IdTipoCliente) { case EnumTipoCliente.Fisico: NombreCliente = string.Format("{0} {1}", Cliente.PrimerNombre.Trim(), Cliente.PrimerApellido.Trim()); break; case EnumTipoCliente.Juridico: NombreCliente = Cliente.RazonSocial.Trim(); break; } filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "NOMBRECLIENTE", Valor = NombreCliente }); filtro.ListaBookmarks.Add(new BookmarkCorreoJSON { Nombre = "COMENTARIO", Valor = DatosAnalisis.ComentariosDocumentosAdicionales }); using (UltimusFormAPIController InterfaceClient = new UltimusFormAPIController()) filtro = InterfaceClient.EnviarCorreoFiltro(filtro); Comentarios.Procesos = Proceso; Comentarios.IdSolicitud = Solicitud.IdSolicitud; Comentarios.Incidente = Incidente; Comentarios.UserID = UserFullName; Comentarios.Comentario = DatosAnalisis.ComentariosDocumentosAdicionales; Comentarios.Etapa = EnumEtapas.AN_Preanalisis; Comentarios.Finalizar = false; Comentarios.IdTipoComentario = EnumTipoComentario.ComentarioDevolucionTramite; Comentarios.Sent = false; new BitacoraComentariosInternosDAL().Insertar(Comentarios); respuesta = true; } } catch (Exception ex) { log.Error(ex); } return respuesta; } public UltimusValoresEsquema ObtenerVariableEsquemaUltimus(UltimusValoresEsquema model) { UltimusIntegrationAPIController UltimusIntegration = new UltimusIntegrationAPIController(); try { foreach (UltimusVariable Variable in model.ListaVariables) { string ValorRetorno = string.Empty; UltimusIntegration.GetNodeValue(model.UltimusUserID, model.UltimusTaskId, Variable.Nombre, out ValorRetorno); Variable.Valor = ValorRetorno; } model.CodigoRespuesta = TipoCodigoRespuesta.EXITOSO.ToString(); } catch (Exception ex) { log.Error(ex); model.CodigoRespuesta = TipoCodigoRespuesta.ERROR.ToString(); model.DescripcionRespuesta = ex.Message; } return model; } } }