public void EnviarNotificacion(string tipoNotificacion, string descripcionTipo, string asunto, string nombreDestinatario, string correoDestinatario, string textoAdicional = null)
        {
            var asuntoConcatenado        = string.Empty;
            ParametrosNotificacion datos = new ParametrosNotificacion();

            datos.TipoNotificacion = tipoNotificacion;
            datos.variables        = new Dictionary <string, string>();

            PlantillaNotificacionRequest filtro = new PlantillaNotificacionRequest();

            filtro.CodigoSistema          = ConfigurationManager.AppSettings["CODIGO_SISTEMA"].ToString();
            filtro.CodigoTipoNotificacion = datos.TipoNotificacion;

            var datosPlantilla = plantillaNotificacionService.BuscarPlantillaNotificacion(filtro).Result.FirstOrDefault();

            if (datosPlantilla != null)
            {
                var profile = politicaService.ListaCuentaNotificacionSGC(null, "3").Result.FirstOrDefault();
                datos.profileCorreo = (profile != null ? profile.Valor.ToString() : "");

                var urlSistema = politicaService.ListaUrlSistemas(null, "3").Result.FirstOrDefault().Valor.ToString();
                urlSistema = string.Format("{0}{1}{2}{3}{4}{5}{6}", "<a href='", urlSistema,
                                           DatosConstantes.UrlOpcionesSistema.RutaConsulta, "'>", urlSistema,
                                           DatosConstantes.UrlOpcionesSistema.RutaConsulta, "</a>");

                if (tipoNotificacion == DatosConstantes.TipoNotificacion.RespuestaConsultas)
                {
                    asuntoConcatenado = datosPlantilla.Asunto;

                    datos.variables.Add("@para", nombreDestinatario);
                    datos.variables.Add("@asunto_consulta", asunto);
                    datos.variables.Add("@url_opcion_sistema", urlSistema);
                    datos.textoNotificar = datosPlantilla.Contenido;
                }
                else
                {
                    asuntoConcatenado = datosPlantilla.Asunto + " " + asunto;

                    datos.variables.Add("@para", nombreDestinatario);
                    datos.variables.Add("@tipo_consulta", descripcionTipo);
                    datos.variables.Add("@url_opcion_sistema", urlSistema);
                    datos.textoNotificar = datosPlantilla.Contenido;
                }


                foreach (var item in datos.variables)
                {
                    datos.textoNotificar = datos.textoNotificar.Replace(item.Key, item.Value);
                }
            }
            consultaLogicRepository.NotificarConsulta(asuntoConcatenado, datos.textoNotificar, correoDestinatario, null, datos.profileCorreo);
        }
        public void enviarCorreo(int IdPeticion, string AppPath)
        {
            ParametrosNotificacion       objParametrosNotificacion       = new ParametrosNotificacion();
            ErrorProcedimientoAlmacenado objErrorProcedimientoAlmacenado = new ErrorProcedimientoAlmacenado();
            NotificacionesRdn            objConsultaNotificacionesRdn    = new NotificacionesRdn();
            Boolean RespuestaEnvio = false;

            objParametrosNotificacion.IdPeticion = IdPeticion;
            var Notificaciones = objConsultaNotificacionesRdn.Obtener_NotificacionesRdn(objParametrosNotificacion, objErrorProcedimientoAlmacenado).ToList();

            foreach (pa_PeticionesWeb_Notificaciones_Obtener_Notificaciones_Result notificacion in Notificaciones)
            {
                //Obtiene los datos para el correo
                string        asuntoNotificacion    = obtAsuntoNotificacion(notificacion, AppPath);
                string        contenidoNotificacion = obtContenidoNotificacion(notificacion, AppPath);
                string        destinatario          = string.IsNullOrEmpty(notificacion.Destinatario) ? string.Empty : notificacion.Destinatario.ToString();
                List <string> Adjuntos = new List <string>();
                //Envía el correo
                Correo objCorreo = new Correo();
                string msgError  = string.Empty;
                if (asuntoNotificacion == string.Empty || contenidoNotificacion == string.Empty || destinatario == string.Empty)
                {
                    msgError = "No existe asunto, contenido o destinatario";
                }
                if (msgError == string.Empty)
                {
                    RespuestaEnvio = objCorreo.enviarCorreo(asuntoNotificacion, contenidoNotificacion, true, destinatario, string.Empty, Adjuntos, out msgError);
                }
                //Guarda en la base de datos lo que se envió
                clsDetallePeticionNotificacion objDetalleNotificacion = new clsDetallePeticionNotificacion();
                objDetalleNotificacion.IdPeticion       = IdPeticion;
                objDetalleNotificacion.IdNotificacion   = notificacion.IdNotificacion;
                objDetalleNotificacion.Remitente        = ConfigurationManager.AppSettings["MailAccountSender"].ToString();
                objDetalleNotificacion.Destinatario     = notificacion.Destinatario;
                objDetalleNotificacion.ConCopiaA        = string.Empty;
                objDetalleNotificacion.Asunto           = asuntoNotificacion;
                objDetalleNotificacion.EstatusEnvio     = RespuestaEnvio;
                objDetalleNotificacion.ComentariosEnvio = msgError;
                objDetalleNotificacion.Fecha            = DateTime.Now;
                ErrorProcedimientoAlmacenado objErrProcAlma = new ErrorProcedimientoAlmacenado();
                NotificacionesRdn            objRegistraNotificacionesRdn = new NotificacionesRdn();
                int RespuestaInsert;
                RespuestaInsert = objRegistraNotificacionesRdn.Insertar_NotificacionRdn(objDetalleNotificacion, objErrProcAlma);
            }
        }
        public List <pa_PeticionesWeb_Notificaciones_Obtener_Notificaciones_Result> Obtener_NotificacionesRdn(ParametrosNotificacion ParametrosEntrada, ErrorProcedimientoAlmacenado ParametrosError)
        {
            Procesos.Modulos.Notificaciones.Notificaciones objNotificacionesP = new Procesos.Modulos.Notificaciones.Notificaciones();

            List <pa_PeticionesWeb_Notificaciones_Obtener_Notificaciones_Result> Notificaciones = new List <pa_PeticionesWeb_Notificaciones_Obtener_Notificaciones_Result>();

            try
            {
                Notificaciones = objNotificacionesP.Obtener_NotificacionesP(ParametrosEntrada, ParametrosError);
            }
            catch (Exception)
            {
                #region Manejo de la excepcion
                throw;
                #endregion
            }
            return(Notificaciones);
        }
        /// <summary>
        /// Reenvia Consulta
        /// </summary>
        /// <param name="data"></param>
        /// <returns>Indicador con el resultado de la operación</returns>
        public ProcessResult <ConsultaRequest> ReenviarConsulta(ConsultaRequest data)
        {
            ProcessResult <ConsultaRequest> resultado = new ProcessResult <ConsultaRequest>();

            try
            {
                ConsultaEntity entidad = ConsultaAdapter.ObtenerConsultaEntity(data);
                entidad.EstadoConsulta = DatosConstantes.EstadoConsulta.Enviado;
                entidad.FechaEnvio     = DateTime.Now;

                //Obtenemos la consulta original
                var entidadSincronizar = consultaEntityRepository.GetById(new Guid(data.CodigoConsultaRelacionado));

                entidad.Asunto = "RE: " + entidadSincronizar.Asunto;
                var nombreRemitenteOriginal = trabajadorService.BuscarTrabajador(new TrabajadorRequest()
                {
                    CodigoTrabajador = entidadSincronizar.CodigoRemitente
                }).Result.FirstOrDefault().NombreCompleto;
                entidad.Contenido                 = data.Adicional + "</br></br> Enviado por " + nombreRemitenteOriginal + " el " + entidadSincronizar.FechaEnvio.Value.ToString("dd/M/yyyy") + ":</br></br>" + entidadSincronizar.Contenido;
                entidad.Tipo                      = entidadSincronizar.Tipo;
                entidad.CodigoDestinatario        = new Guid(data.CodigoDestinatario);
                entidad.CodigoRemitente           = new Guid(data.CodigoRemitente);
                entidad.CodigoUnidadOperativa     = entidadSincronizar.CodigoUnidadOperativa;
                entidad.CodigoArea                = entidadSincronizar.CodigoArea;
                entidad.CodigoConsultaRelacionado = new Guid(data.CodigoConsultaRelacionado);
                entidad.CodigoConsultaOriginal    = (entidadSincronizar.CodigoConsultaOriginal == null ? entidadSincronizar.CodigoConsulta : entidadSincronizar.CodigoConsultaOriginal);
                entidad.VistoRemitenteOriginal    = true;
                consultaEntityRepository.Insertar(entidad);
                consultaEntityRepository.GuardarCambios();

                //Cambiamos el estado en la consulta original a reenviado
                entidadSincronizar.EstadoConsulta = DatosConstantes.EstadoConsulta.Reenviado;
                consultaEntityRepository.Editar(entidadSincronizar);
                consultaEntityRepository.GuardarCambios();

                //Enviar Correo
                ParametrosNotificacion datos = new ParametrosNotificacion();
                datos.TipoNotificacion = DatosConstantes.TipoNotificacion.RegistroConsultas;
                datos.variables        = new Dictionary <string, string>();

                PlantillaNotificacionRequest filtro = new PlantillaNotificacionRequest();
                filtro.CodigoSistema          = ConfigurationManager.AppSettings["CODIGO_SISTEMA"].ToString();
                filtro.CodigoTipoNotificacion = datos.TipoNotificacion;

                var datosPlantilla = plantillaNotificacionService.BuscarPlantillaNotificacion(filtro).Result.FirstOrDefault();

                if (datosPlantilla != null)
                {
                    var profile = politicaService.ListaCuentaNotificacionSGC(null, "3").Result.FirstOrDefault();
                    datos.profileCorreo = (profile != null ? profile.Valor.ToString() : "");

                    var urlSistema = politicaService.ListaUrlSistemas(null, "3").Result.FirstOrDefault().Valor.ToString();
                    urlSistema = string.Format("{0}{1}{2}{3}{4}{5}{6}", "<a href='", urlSistema,
                                               DatosConstantes.UrlOpcionesSistema.RutaConsulta, "'>", urlSistema,
                                               DatosConstantes.UrlOpcionesSistema.RutaConsulta, "</a>");

                    var destinatario = trabajadorService.BuscarTrabajador(new TrabajadorRequest()
                    {
                        CodigoTrabajador = entidad.CodigoDestinatario
                    }).Result.FirstOrDefault();

                    datos.variables.Add("@para", destinatario.NombreCompleto);
                    datos.variables.Add("@tipo_consulta", data.DescripcionTipo);
                    datos.variables.Add("@url_opcion_sistema", urlSistema);
                    datos.textoNotificar = data.Adicional + "</br></br> Enviado por " + nombreRemitenteOriginal + " el " + entidadSincronizar.FechaEnvio.Value.ToString("dd/M/yyyy") + ":</br></br>" + datosPlantilla.Contenido;

                    foreach (var item in datos.variables)
                    {
                        datos.textoNotificar = datos.textoNotificar.Replace(item.Key, item.Value);
                    }

                    consultaLogicRepository.NotificarConsulta(entidadSincronizar.Asunto, datos.textoNotificar, destinatario.CorreoElectronico, null, datos.profileCorreo);
                }

                //copiar los adjuntos del original
                var resultAdjunto = consultaAdjuntoLogicRepository.BuscarConsultaAdjunto(
                    null,
                    new Guid(data.CodigoConsultaRelacionado),
                    null,
                    null,
                    DatosConstantes.EstadoRegistro.Activo
                    );

                if (resultAdjunto != null && resultAdjunto.Count > 0)
                {
                    foreach (var item in resultAdjunto)
                    {
                        item.CodigoConsultaAdjunto = Guid.NewGuid();
                        item.CodigoConsulta        = entidad.CodigoConsulta;
                        consultaAdjuntoEntityRepository.Insertar(ConsultaAdapter.ObtenerConsultaAdjuntoEntityDeLogic(item));
                        consultaAdjuntoEntityRepository.GuardarCambios();
                    }
                }

                //Guardar nuevos adjuntos
                if (data.ListaAdjuntos != null)
                {
                    foreach (var item in data.ListaAdjuntos)
                    {
                        byte[] bytes = System.IO.File.ReadAllBytes(item.RutaArchivoSharePoint);
                        item.CodigoConsulta = entidad.CodigoConsulta;
                        item.ArchivoAdjunto = bytes;
                        var resultadoAdjunto = RegistrarConsultaAdjunto(item);
                    }
                }

                data.ListaAdjuntos = null;

                resultado.Result = data;
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <ConsultaService>(e);
            }

            return(resultado);
        }