/// <summary> /// Delega a la Capa de Datos devolver la configuracion de la B.D. /// </summary> /// <returns></returns> public Entidades.Configuracion_Certificado TraerConfiguracion() { Entidades.Configuracion_Certificado objEntidadesConfigCertificado = new Entidades.Configuracion_Certificado(); objEntidadesConfigCertificado = objDatosConfCertificado.TraerConfiguracion(); return objEntidadesConfigCertificado; }
/// <summary> /// Control del Botón de Pedir Ticket de Acceso. /// Si hay uno vigente en la B.D. utiliza este, sino pide uno nuevo al WebService. /// </summary> private void pedirTicketAcceso() { objEntidadesConfiguracionCertificado = objLogicaConfiguracionCertificado.TraerConfiguracion(); /*Verifica si tiene una configuracion cargada en la B.D.*/ if (objEntidadesConfiguracionCertificado.Cuit != 0) { /*Tiene una configuracion cargada*/ //Entidades.Tickets objEntidadesTicket_Rta = new Entidades.Tickets(); Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); //Devuelve un Ticket Vigente guardado en la B.D. objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); if (objEntidadesTicket_Acceso.Id_Ticket == 0) { /*No hay ningún Ticket de Acceso habilitado en la base de Datos, se pedirá uno nuevo*/ Entidades.CertificadosX509 objEntidadesCertificado = new Entidades.CertificadosX509(); Logica.CertificadosX509 objLogicaCertificado = new Logica.CertificadosX509(); objEntidadesCertificado.IdServicioNegocio = DEFAULT_SERVICIO; if (objEntidadesConfiguracionCertificado.TipoAprobacion == 'P') { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_PRODUCCION; } else { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_HOMOLOGACION; } /*Pido en el WebService un Nuevo Ticket de Acceso*/ Logica.Tickets objTicketRespuesta = new Logica.Tickets(); objEntidadesTicket_Acceso = objTicketRespuesta.Gestionar_TA(objEntidadesCertificado); objEntidadesTicket_Acceso.Cuit = objEntidadesConfiguracionCertificado.Cuit; objEntidadesTicket_Acceso.TipoAprobacion = objEntidadesConfiguracionCertificado.TipoAprobacion; if (objEntidadesTicket_Acceso.Sign != null) { Logica.Tickets_Acceso objTicketsAcceso = new Logica.Tickets_Acceso(); //Guarda el ticket en la B.D. objTicketsAcceso.Agregar(objEntidadesTicket_Acceso); } } mostrarDatosTicketAcceso(objEntidadesTicket_Acceso); } else { MessageBox.Show("Para utilizar el programa primero debe cargar el certificado desde Configuracion -> Certificado"); } }
/// <summary> /// Carga Aplicacion /// Verifica si tiene cargada la configuración en la B.D. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void frmTicketAcceso_Load(object sender, EventArgs e) { this.Text = Application.ProductName + " - "+ Application.ProductVersion; if (objLogicaInternet.hayInternet() == true) { btnVerificarInternet.Visible = false; objEntidadesConfiguracionCertificado = objLogicaConfiguracionCertificado.TraerConfiguracion(); /*Verifica si tiene una configuracion cargada en la B.D.*/ if (objEntidadesConfiguracionCertificado.Cuit == 0) { MessageBox.Show("Para utilizar el programa primero debe cargar el certificado desde Configuracion -> Certificado"); } else { pedirTicketAcceso(); } } else { MessageBox.Show("No hay conexión a Internet. Por favor verificar su conexión"); } }
/// <summary> /// Carga del Form /// Busca en la Base si ya hay una configuración cargada /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void frmConfiguracionCertificado_Load(object sender, EventArgs e) { Logica.Configuracion_Certificado objLogicaConfiguracionCertificado = new Logica.Configuracion_Certificado(); openArchCertificadoPFX.Title = "Elegir Certificado"; openArchCertificadoPFX.Filter = "Archivo de Certificado (*.pfx)|*.pfx"; openArchCertificadoPFX.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal); objEntidadesConfiguracionCertificado = objLogicaConfiguracionCertificado.TraerConfiguracion(); if (objEntidadesConfiguracionCertificado.Cuit != 0) { txtCuit.Text = objEntidadesConfiguracionCertificado.Cuit.ToString(); txtArchCertificadoPFX.Text = objEntidadesConfiguracionCertificado.ArchivoCertificadoPFX; txtPFXPassword.Text = objEntidadesConfiguracionCertificado.PasswordPFX; if(objEntidadesConfiguracionCertificado.TipoAprobacion == 'P') { rbServidorProduccion.Checked = true; } } }
/// <summary> /// Lee el Certificado desde el archivo abriendolo con la password /// </summary> /// <returns>Un objeto certificado X509</returns> /// <remarks></remarks> public X509Certificate2 ObtenerCertificadoDesdeArchivo() { Entidades.Configuracion_Certificado objEntidadesConf_Certificado = new Entidades.Configuracion_Certificado(); Logica.Configuracion_Certificado objLogicaConf_Certificado = new Logica.Configuracion_Certificado(); SecureString passwordCertificadoPFX; objEntidadesConf_Certificado = objLogicaConf_Certificado.TraerConfiguracion(); passwordCertificadoPFX = ConvertirPasswordSecureString(objEntidadesConf_Certificado.PasswordPFX); //Se instancia un objeto Certificado X509Certificate2 objCertificado = new X509Certificate2(); try { //Se importa al objeto certificado el archivo leido abriendolo con la password objCertificado.Import(Microsoft.VisualBasic.FileIO.FileSystem.ReadAllBytes(objEntidadesConf_Certificado.ArchivoCertificadoPFX), passwordCertificadoPFX, X509KeyStorageFlags.PersistKeySet); //Retorno certificado return objCertificado; } catch (Exception excepcionAlImportarCertificado) { throw new Exception("ERROR: Procedimiento: ObtenerCertificadoDesdeArchivo. Ruta del archivo=" + objEntidadesConf_Certificado.ArchivoCertificadoPFX + ". Excepcion=" + excepcionAlImportarCertificado.Message + " " + excepcionAlImportarCertificado.StackTrace); } }
/// <summary> /// Guarda la configuración en la B.D. /// La Agrega si es la primera vez o la actualiza si ya existe /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGuardarConf_Click(object sender, EventArgs e) { if (txtCuit.Text != "0" || txtArchCertificadoPFX.Text != "") { Logica.Configuracion_Certificado objLogicaConfiguracionCertificado = new Logica.Configuracion_Certificado(); Entidades.Configuracion_Certificado objEntidadesConfiguracionCertificadoForm = new Entidades.Configuracion_Certificado(); objEntidadesConfiguracionCertificadoForm.Cuit = Convert.ToInt64(txtCuit.Text); objEntidadesConfiguracionCertificadoForm.ArchivoCertificadoPFX = txtArchCertificadoPFX.Text; objEntidadesConfiguracionCertificadoForm.PasswordPFX = txtPFXPassword.Text; if (rbServidorProduccion.Checked == true) { objEntidadesConfiguracionCertificadoForm.TipoAprobacion = 'P'; } else { objEntidadesConfiguracionCertificadoForm.TipoAprobacion = 'H'; } if (objEntidadesConfiguracionCertificado.Cuit == 0) //No habia nada guardado previamente en la B.D. { objLogicaConfiguracionCertificado.Agregar(objEntidadesConfiguracionCertificadoForm); MessageBox.Show("Configuración Guardada"); } else { objLogicaConfiguracionCertificado.Modificar(objEntidadesConfiguracionCertificadoForm); MessageBox.Show("Configuración Actualizada"); } } }
/// <summary> /// Pide un Nuevo Ticket de Acceso con las configuraciones cargadas /// </summary> /// <returns></returns> private bool pedirNuevoTicketAcc() { bool respuesta = false; lblPedirNuevoTicketAccRTA.ForeColor = Color.Black; lblPedirNuevoTicketAccRTA.Text = "Procesando..."; lblPedirNuevoTicketAccRTA.Refresh(); /*Pide la configuración desde la B.D.*/ Entidades.Configuracion_Certificado objEntidadesConfiguracionCertificado = new Entidades.Configuracion_Certificado(); Logica.Configuracion_Certificado objLogicaConfiguracionCertificado = new Logica.Configuracion_Certificado(); objEntidadesConfiguracionCertificado = objLogicaConfiguracionCertificado.TraerConfiguracion(); /*Creo un Certificado a partir de la configuración que recuperé desde la B.D.*/ Entidades.CertificadosX509 objEntidadesCertificado = new Entidades.CertificadosX509(); const string DEFAULT_SERVICIO = "wsfe"; const string SERVIDOR_WSAA_PRODUCCION = "https://wsaa.afip.gov.ar/ws/services/LoginCms?WSDL"; const string SERVIDOR_WSAA_HOMOLOGACION = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL"; objEntidadesCertificado.IdServicioNegocio = DEFAULT_SERVICIO; if (objEntidadesConfiguracionCertificado.TipoAprobacion == 'P') { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_PRODUCCION; } else { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_HOMOLOGACION; } /*Pido en el WebService un Nuevo Ticket de Acceso*/ Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); Logica.Tickets objTicketRespuesta = new Logica.Tickets(); objEntidadesTicket_Acceso = objTicketRespuesta.Gestionar_TA(objEntidadesCertificado); objEntidadesTicket_Acceso.Cuit = objEntidadesConfiguracionCertificado.Cuit; objEntidadesTicket_Acceso.TipoAprobacion = objEntidadesConfiguracionCertificado.TipoAprobacion; if (objEntidadesTicket_Acceso.Sign != null) { Logica.Tickets_Acceso objTicketsAcceso = new Logica.Tickets_Acceso(); //Guarda el ticket en la B.D. objTicketsAcceso.Agregar(objEntidadesTicket_Acceso); lblPedirNuevoTicketAccRTA.ForeColor = Color.Green; lblPedirNuevoTicketAccRTA.Text = "OK"; lblPedirNuevoTicketAccRTA.Refresh(); respuesta = true; } else { lblPedirNuevoTicketAccRTA.ForeColor = Color.Red; lblPedirNuevoTicketAccRTA.Text = "ERROR"; lblPedirNuevoTicketAccRTA.Refresh(); } return respuesta; }
/// <summary> /// Devuelve la configuración cargada en la B.D. /// </summary> /// <returns></returns> public Entidades.Configuracion_Certificado TraerConfiguracion() { Entidades.Configuracion_Certificado objEntidadesConfigCertificado = new Entidades.Configuracion_Certificado(); string strSQL = "SELECT Cuit, ArchivoCertificadoPFX, PasswordPFX, TipoAprobacion FROM Configuracion_Certificado WHERE Id_Configuracion = 1"; SqlConnection objConexion = new SqlConnection(Conexion.strConexion); SqlCommand comTraer = new SqlCommand(strSQL, objConexion); SqlDataReader drConfigCertificado; try { objConexion.Open(); drConfigCertificado = comTraer.ExecuteReader(); drConfigCertificado.Read(); if (drConfigCertificado.HasRows) { objEntidadesConfigCertificado.Cuit = Convert.ToInt64(drConfigCertificado["Cuit"]); objEntidadesConfigCertificado.ArchivoCertificadoPFX = drConfigCertificado["ArchivoCertificadoPFX"].ToString(); objEntidadesConfigCertificado.PasswordPFX = drConfigCertificado["PasswordPFX"].ToString(); objEntidadesConfigCertificado.TipoAprobacion = Convert.ToChar(drConfigCertificado["TipoAprobacion"]); } } catch (SqlException) { //Se produjo un error SQL, SqlExcepcion es especifico de sql por eso va arriba de Excepcion throw new Exception("Error en la Base de Datos"); } catch (Exception) { //Pasa la excepción a la capa de lógica throw new Exception("No pudo Listar la Configuracion"); } finally { //Cierro la conexion solo si estaba abierto if (objConexion.State == ConnectionState.Open) { objConexion.Close(); } } return objEntidadesConfigCertificado; }