Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Imports System.Net.Mail
Imports System.IO
Imports System.Net.Mime
Imports System.Configuration
Imports System.Web

Public Class ClsAsisTec
    'tblAsistenteTecnico
    Private _IdTblAutoAsisTec As Integer
    Private _NumInscripcion As String
    Private _PrimerNombre As String
    Private _SegundoNombre As String
    Private _PrimerApellido As String
    Private _SegundoApellido As String
    Private _IdPaisNacimiento As Integer
    Private _IdTipoIdentificacion As Integer
    Private _NumeroDocumento As String
    Private _AreaRural As Boolean
    Private _Direccion As String
    Private _IdLocalidad As Integer
    Private _IdUPZ As Integer
    Private _IdBarrio As Integer
    Private _BarrioDigitado As String
    Private _TelefonoContacto As String
    Private _CorreoElectronico As String
    Private _IdProfUniversidad As Integer
    Private _NombrePrograma As String
    Private _NombreInstitucion As String
    Private _FechaTerminacionEstudios As Date
    Private _IdNivelFormacion As Integer
    Private _NombreProgramaPost As String
    Private _Graduado As Integer
    Private _TituloExtranjero As Integer
    Private _IdPaisExpedicion As Integer
    Private _AutorizacionDatos As Boolean
    'TblAutoAsisTecDocumento
    Private _IdDocumento As Integer
    Private _IdTipoDocumento As Integer
    Private _NombreArchivo As String
    Private _RutaArchivo As String
    Private _FechaCarga As Date
    'TblAutoAsisTecVerificacion
    Private _IdVerificacion As Integer
    Private _EstadoVerificacion As Integer
    Private _FechaVerificacion As Date
    Private _IdUsuarioVerifica As Integer
    'Genericos
    Private _FechaCreacion As Date
    Private _IdUsuarioCreoRegistro As Integer
    Private _ErrorMsg As String


#Region "Propiedades"

    Property idTblAutoAsisTec() As Integer
        Get
            Return _IdTblAutoAsisTec
        End Get
        Set(ByVal Value As Integer)
            _IdTblAutoAsisTec = Value
        End Set
    End Property
    Public Property NumInscripcion() As String
        Get
            Return _NumInscripcion
        End Get
        Set(ByVal value As String)
            _NumInscripcion = value
        End Set
    End Property
    Public Property PrimerNombre() As String
        Get
            Return _PrimerNombre
        End Get
        Set(ByVal value As String)
            _PrimerNombre = value
        End Set
    End Property
    Public Property SegundoNombre() As String
        Get
            Return _SegundoNombre
        End Get
        Set(ByVal value As String)
            _SegundoNombre = value
        End Set
    End Property
    Public Property PrimerApellido() As String
        Get
            Return _PrimerApellido
        End Get
        Set(ByVal value As String)
            _PrimerApellido = value
        End Set
    End Property
    Public Property SegundoApellido() As String
        Get
            Return _SegundoApellido
        End Get
        Set(ByVal value As String)
            _SegundoApellido = value
        End Set
    End Property
    Property IdPaisNacimiento() As Integer
        Get
            Return _IdPaisNacimiento
        End Get
        Set(ByVal Value As Integer)
            _IdPaisNacimiento = Value
        End Set
    End Property
    Property IdTipoIdentificacion() As Integer
        Get
            Return _IdTipoIdentificacion
        End Get
        Set(ByVal Value As Integer)
            _IdTipoIdentificacion = Value
        End Set
    End Property
    Public Property NumeroDocumento() As String
        Get
            Return _NumeroDocumento
        End Get
        Set(ByVal value As String)
            _NumeroDocumento = value
        End Set
    End Property
    Public Property AreaRural() As Boolean
        Get
            Return _AreaRural
        End Get
        Set(ByVal value As Boolean)
            _AreaRural = value
        End Set
    End Property
    Public Property Direccion() As String
        Get
            Return _Direccion
        End Get
        Set(ByVal value As String)
            _Direccion = value
        End Set
    End Property
    Public Property IdLocalidad() As Integer
        Get
            Return _IdLocalidad
        End Get
        Set(ByVal Value As Integer)
            _IdLocalidad = Value
        End Set
    End Property
    Public Property IdUPZ() As Integer
        Get
            Return _IdUPZ
        End Get
        Set(ByVal Value As Integer)
            _IdUPZ = Value
        End Set
    End Property
    Public Property IdBarrio() As Integer
        Get
            Return _IdBarrio
        End Get
        Set(ByVal Value As Integer)
            _IdBarrio = Value
        End Set
    End Property
    Public Property BarrioDigitado() As String
        Get
            Return _BarrioDigitado
        End Get
        Set(ByVal value As String)
            _BarrioDigitado = value
        End Set
    End Property
    Public Property TelefonoContacto() As String
        Get
            Return _TelefonoContacto
        End Get
        Set(ByVal value As String)
            _TelefonoContacto = value
        End Set
    End Property
    Public Property CorreoElectronico() As String
        Get
            Return _CorreoElectronico
        End Get
        Set(ByVal value As String)
            _CorreoElectronico = value
        End Set
    End Property
    Property IdProfUniversidad() As Integer
        Get
            Return _IdProfUniversidad
        End Get
        Set(ByVal Value As Integer)
            _IdProfUniversidad = Value
        End Set
    End Property
    Public Property NombrePrograma() As String
        Get
            Return _NombrePrograma
        End Get
        Set(ByVal value As String)
            _NombrePrograma = value
        End Set
    End Property
    Public Property NombreInstitucion() As String
        Get
            Return _NombreInstitucion
        End Get
        Set(ByVal value As String)
            _NombreInstitucion = value
        End Set
    End Property
    Public Property FechaTerminacionEstudios() As Date
        Get
            Return _FechaTerminacionEstudios
        End Get
        Set(ByVal value As Date)
            _FechaTerminacionEstudios = value
        End Set
    End Property
    Property IdNivelFormacion() As Integer
        Get
            Return _IdNivelFormacion
        End Get
        Set(ByVal Value As Integer)
            _IdNivelFormacion = Value
        End Set
    End Property
    Public Property NombreProgramaPost() As String
        Get
            Return _NombreProgramaPost
        End Get
        Set(ByVal value As String)
            _NombreProgramaPost = value
        End Set
    End Property
    Public Property Graduado() As Integer
        Get
            Return _Graduado
        End Get
        Set(ByVal value As Integer)
            _Graduado = value
        End Set
    End Property
    Public Property TituloExtranjero() As Integer
        Get
            Return _TituloExtranjero
        End Get
        Set(ByVal value As Integer)
            _TituloExtranjero = value
        End Set
    End Property
    Property IdPaisExpedicion() As Integer
        Get
            Return _IdPaisExpedicion
        End Get
        Set(ByVal Value As Integer)
            _IdPaisExpedicion = Value
        End Set
    End Property
    Public Property AutorizacionDatos() As Boolean
        Get
            Return _AutorizacionDatos
        End Get
        Set(ByVal value As Boolean)
            _AutorizacionDatos = value
        End Set
    End Property
    Property IdDocumento() As Integer
        Get
            Return _IdDocumento
        End Get
        Set(ByVal Value As Integer)
            _IdDocumento = Value
        End Set
    End Property
    Property IdTipoDocumento() As Integer
        Get
            Return _IdTipoDocumento
        End Get
        Set(ByVal Value As Integer)
            _IdTipoDocumento = Value
        End Set
    End Property
    Public Property NombreArchivo() As String
        Get
            Return _NombreArchivo
        End Get
        Set(ByVal value As String)
            _NombreArchivo = value
        End Set
    End Property
    Public Property RutaArchivo() As String
        Get
            Return _RutaArchivo
        End Get
        Set(ByVal value As String)
            _RutaArchivo = value
        End Set
    End Property
    Public Property FechaCarga() As Date
        Get
            Return _FechaCarga
        End Get
        Set(ByVal value As Date)
            _FechaCarga = value
        End Set
    End Property
    Property IdVerificacion() As Integer
        Get
            Return _IdVerificacion
        End Get
        Set(ByVal Value As Integer)
            _IdVerificacion = Value
        End Set
    End Property
    Property EstadoVerificacion() As Integer
        Get
            Return _EstadoVerificacion
        End Get
        Set(ByVal Value As Integer)
            _EstadoVerificacion = Value
        End Set
    End Property
    Public Property FechaVerificacion() As Date
        Get
            Return _FechaVerificacion
        End Get
        Set(ByVal value As Date)
            _FechaVerificacion = value
        End Set
    End Property
    Property IdUsuarioVerifica() As Integer
        Get
            Return _IdUsuarioVerifica
        End Get
        Set(ByVal Value As Integer)
            _IdUsuarioVerifica = Value
        End Set
    End Property
    Public Property FechaCreacion() As Date
        Get
            Return _FechaCreacion
        End Get
        Set(ByVal value As Date)
            _FechaCreacion = value
        End Set
    End Property
    Public Property IdUsuarioCreoRegistro() As Integer
        Get
            Return _IdUsuarioCreoRegistro
        End Get
        Set(ByVal Value As Integer)
            _IdUsuarioCreoRegistro = Value
        End Set
    End Property
    Public Overridable ReadOnly Property ns_ErrorMsg() As String
        Get
            Return _ErrorMsg
        End Get
    End Property

#End Region

#Region "Metodos generales"

    Private Sub AddParam(col As Collection, nombre As String, valor As Object, tipo As SqlDbType, Optional size As Integer = 0)

        If valor Is Nothing Then valor = DBNull.Value
        If size > 0 Then
            col.Add(New CmdParametro(nombre, valor, tipo, False, size))
        Else
            col.Add(New CmdParametro(nombre, valor, tipo, False))
        End If
    End Sub

    Private Function EsVacio(valor As String) As Boolean
        Return valor Is Nothing OrElse valor.Trim() = ""
    End Function

#End Region

#Region "Metodos principales"

    Public Shared Function ObtenerDatosNumInscripcion(ByVal inscripcion As String) As DataRow
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@NumInscripcion", inscripcion, SqlDbType.VarChar, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer = 1205
        Dim dt As DataTable = clsBitacora.GetSelect("app.SpIVCSeleccionarDatosNumInscripcion", ObjParametros, HttpContext.Current.Session, evento, False).Tables(0)
        If dt.Rows.Count > 0 Then
            Return dt.Rows(0)
        Else
            Return Nothing
        End If
    End Function

    Public Shared Function ObtenerDatosIdAutAsisTec(ByVal id As String) As DataRow
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@IdTblAutoAsisTec", id, SqlDbType.VarChar, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer = 1205
        Dim dt As DataTable = clsBitacora.GetSelect("app.SpIVCSeleccionarDatosById", ObjParametros, HttpContext.Current.Session, evento, False).Tables(0)
        If dt.Rows.Count > 0 Then
            Return dt.Rows(0)
        Else
            Return Nothing
        End If
    End Function

    Public Shared Function ObtenerDocumentos(ByVal inscripcion As String) As DataTable
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@NumInscripcion", inscripcion, SqlDbType.VarChar, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer = 1206
        Dim ds As DataSet = clsBitacora.GetSelect("app.SpIVCSeleccionarDocumentosPorInscripcion", ObjParametros, HttpContext.Current.Session, evento, False)
        If ds IsNot Nothing AndAlso ds.Tables.Count > 0 Then
            Return ds.Tables(0)
        Else
            Return New DataTable()
        End If
    End Function

    Public Shared Function ObtenerDocumentosById(ByVal id As String) As DataTable
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@IdTblAutoAsisTec", id, SqlDbType.VarChar, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer = 1206
        Dim ds As DataSet = clsBitacora.GetSelect("app.SpIVCSeleccionarDocumentosById", ObjParametros, HttpContext.Current.Session, evento, False)
        If ds IsNot Nothing AndAlso ds.Tables.Count > 0 Then
            Return ds.Tables(0)
        Else
            Return New DataTable()
        End If
    End Function

    Public Shared Function ObtenerIdPorInscripcion(ByVal inscripcion As String) As DataRow
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@NumInscripcion", inscripcion, SqlDbType.VarChar, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer = 1205
        Dim dt As DataTable = clsBitacora.GetSelect("app.SpIVCObtenerIdPorInscripcion", ObjParametros, HttpContext.Current.Session, evento, False).Tables(0)
        If dt.Rows.Count > 0 Then
            Return dt.Rows(0)
        Else
            Return Nothing
        End If
    End Function

    Public Shared Function ConsultarDocumentos(idAuto As Integer) As DataTable
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@IdTblAutoAsisTec", idAuto, SqlDbType.VarChar, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer = 1206
        Dim ds As DataSet = clsBitacora.GetSelect("app.SpConsultarAutoAsisTecDocumento", ObjParametros, HttpContext.Current.Session, evento, False)
        If ds IsNot Nothing AndAlso ds.Tables.Count > 0 Then
            Return ds.Tables(0)
        Else
            Return New DataTable()
        End If
    End Function

    Public Shared Function ObtenerVerificacionesById(ByVal id As String) As DataTable
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@IdTblAutoAsisTec", id, SqlDbType.VarChar, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer = 1207 ' puedes cambiar el consecutivo según tu control
        Dim ds As DataSet = clsBitacora.GetSelect("app.SpIVCObtenerVerificacionesById", ObjParametros, HttpContext.Current.Session, evento, False)
        If ds IsNot Nothing AndAlso ds.Tables.Count > 0 Then
            Return ds.Tables(0)
        Else
            Return New DataTable()
        End If
    End Function

    Public Shared Function ObtenerCorreoRemitente() As DataRow
        Dim dr As DataRow = Nothing
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@idTblAdminCorreos", 1, SqlDbType.Int, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer
        evento = 1204
        Dim Datos As DataTable = clsBitacora.GetSelect("app.spObtenerCorreoRemitente", ObjParametros, HttpContext.Current.Session, evento, False).Tables(0)
        If Datos.Rows.Count > 0 Then
            Return Datos.Rows(0)
        Else
            Return dr
        End If
    End Function

    Public Overridable Function Insertar() As Integer
        Dim parametros As New Collection
        AddParam(parametros, "@NumInscripcion", _NumInscripcion, SqlDbType.VarChar, 20)
        AddParam(parametros, "@PrimerNombre", _PrimerNombre, SqlDbType.VarChar, 100)
        AddParam(parametros, "@SegundoNombre", _SegundoNombre, SqlDbType.VarChar, 100)
        AddParam(parametros, "@PrimerApellido", _PrimerApellido, SqlDbType.VarChar, 100)
        AddParam(parametros, "@SegundoApellido", _SegundoApellido, SqlDbType.VarChar, 100)
        AddParam(parametros, "@IdPaisNacimiento", _IdPaisNacimiento, SqlDbType.Int)
        AddParam(parametros, "@IdTipoIdentificacion", _IdTipoIdentificacion, SqlDbType.Int)
        AddParam(parametros, "@NumeroDocumento", _NumeroDocumento, SqlDbType.VarChar, 50)
        AddParam(parametros, "@AreaRural", _AreaRural, SqlDbType.Bit)
        AddParam(parametros, "@Direccion", _Direccion, SqlDbType.VarChar, 250)
        AddParam(parametros, "@IdLocalidad", _IdLocalidad, SqlDbType.Int)
        AddParam(parametros, "@IdUPZ", _IdUPZ, SqlDbType.Int)
        AddParam(parametros, "@IdBarrio", _IdBarrio, SqlDbType.Int)
        AddParam(parametros, "@BarrioDigitado", _BarrioDigitado, SqlDbType.VarChar, 150)
        AddParam(parametros, "@TelefonoContacto", _TelefonoContacto, SqlDbType.VarChar, 50)
        AddParam(parametros, "@CorreoElectronico", _CorreoElectronico, SqlDbType.VarChar, 150)
        AddParam(parametros, "@IdProfUniversidad", _IdProfUniversidad, SqlDbType.Int)
        AddParam(parametros, "@NombrePrograma", _NombrePrograma, SqlDbType.VarChar, 200)
        AddParam(parametros, "@NombreInstitucion", _NombreInstitucion, SqlDbType.VarChar, 200)
        AddParam(parametros, "@FechaTerminacionEstudios", _FechaTerminacionEstudios, SqlDbType.DateTime)
        AddParam(parametros, "@IdNivelFormacion", _IdNivelFormacion, SqlDbType.Int)
        AddParam(parametros, "@NombreProgramaPost", _NombreProgramaPost, SqlDbType.VarChar, 200)
        AddParam(parametros, "@Graduado", _Graduado, SqlDbType.Int)
        AddParam(parametros, "@TituloExtranjero", _TituloExtranjero, SqlDbType.Int)
        AddParam(parametros, "@IdPaisExpedicion", _IdPaisExpedicion, SqlDbType.Int)
        AddParam(parametros, "@AutorizacionDatos", _AutorizacionDatos, SqlDbType.Bit)
        Dim iResp As Integer = 0
        iResp = clsBitacora.Insert("app.SpIvcInsertarTblAsistenteTecnico", parametros, HttpContext.Current.Session, 281, False)
        If iResp > 0 Then
            iResp = iResp
            _ErrorMsg = clsBitacora.MsgError
        End If
        Return iResp
    End Function

    Public Sub GuardarDocumentos(idRegistro As Integer, listaDocs As List(Of ClsAsisTec))
        If idRegistro <= 0 Then Exit Sub
        For Each doc In listaDocs
            If Not String.IsNullOrEmpty(doc.RutaArchivo) Then
                Try
                    Dim parametros As New Collection
                    AddParam(parametros, "@IdTblAutoAsisTec", idRegistro, SqlDbType.Int)
                    AddParam(parametros, "@IdTipoDocumento", doc.IdTipoDocumento, SqlDbType.Int)
                    AddParam(parametros, "@NombreArchivo", doc.NombreArchivo, SqlDbType.VarChar, 200)
                    AddParam(parametros, "@RutaArchivo", doc.RutaArchivo, SqlDbType.VarChar, 500)
                    clsBitacora.Insert("app.SpInsertarDocumentoAsisTec", parametros, HttpContext.Current.Session, 281, False)
                Catch ex As Exception
                    Throw New Exception("Error insertando documento tipo " & doc.IdTipoDocumento & ": " & ex.Message)
                End Try
            End If
        Next
    End Sub

    Public Overridable Function Actualizar() As Integer
        Dim parametros As New Collection
        ' Asegúrate de que _IdTblAutoAsisTec sea realmente un Integer en tu clase
        AddParam(parametros, "@IdTblAutoAsisTec", Convert.ToInt32(_IdTblAutoAsisTec), SqlDbType.Int)
        AddParam(parametros, "@NumInscripcion", _NumInscripcion, SqlDbType.VarChar, 20)
        AddParam(parametros, "@PrimerNombre", _PrimerNombre, SqlDbType.VarChar, 100)
        AddParam(parametros, "@SegundoNombre", _SegundoNombre, SqlDbType.VarChar, 100)
        AddParam(parametros, "@PrimerApellido", _PrimerApellido, SqlDbType.VarChar, 100)
        AddParam(parametros, "@SegundoApellido", _SegundoApellido, SqlDbType.VarChar, 100)
        AddParam(parametros, "@IdPaisNacimiento", _IdPaisNacimiento, SqlDbType.Int)
        AddParam(parametros, "@IdTipoIdentificacion", _IdTipoIdentificacion, SqlDbType.Int)
        AddParam(parametros, "@NumeroDocumento", _NumeroDocumento, SqlDbType.VarChar, 50)
        AddParam(parametros, "@AreaRural", _AreaRural, SqlDbType.Bit)
        AddParam(parametros, "@Direccion", _Direccion, SqlDbType.VarChar, 250)
        AddParam(parametros, "@IdLocalidad", _IdLocalidad, SqlDbType.Int)
        AddParam(parametros, "@IdUPZ", _IdUPZ, SqlDbType.Int)
        AddParam(parametros, "@IdBarrio", _IdBarrio, SqlDbType.Int)
        AddParam(parametros, "@BarrioDigitado", _BarrioDigitado, SqlDbType.VarChar, 150)
        AddParam(parametros, "@TelefonoContacto", _TelefonoContacto, SqlDbType.VarChar, 50)
        AddParam(parametros, "@CorreoElectronico", _CorreoElectronico, SqlDbType.VarChar, 150)
        AddParam(parametros, "@IdProfUniversidad", _IdProfUniversidad, SqlDbType.Int)
        AddParam(parametros, "@NombrePrograma", _NombrePrograma, SqlDbType.VarChar, 200)
        AddParam(parametros, "@NombreInstitucion", _NombreInstitucion, SqlDbType.VarChar, 200)
        AddParam(parametros, "@FechaTerminacionEstudios", _FechaTerminacionEstudios, SqlDbType.DateTime)
        AddParam(parametros, "@IdNivelFormacion", _IdNivelFormacion, SqlDbType.Int)
        AddParam(parametros, "@NombreProgramaPost", _NombreProgramaPost, SqlDbType.VarChar, 200)
        AddParam(parametros, "@Graduado", _Graduado, SqlDbType.Int)
        AddParam(parametros, "@TituloExtranjero", _TituloExtranjero, SqlDbType.Int)
        AddParam(parametros, "@IdPaisExpedicion", _IdPaisExpedicion, SqlDbType.Int)
        AddParam(parametros, "@AutorizacionDatos", _AutorizacionDatos, SqlDbType.Bit)
        Dim evento As Integer = 18
        Return clsBitacora.Update("app.SpIvcActualizarTblAsistenteTecnico", parametros, HttpContext.Current.Session, evento, False)
    End Function

    Public Function GuardarVerificacion(idRegistro As Integer, listaVerifica As List(Of ClsAsisTec)) As Integer
        If idRegistro <= 0 Then Return 0
        For Each doc In listaVerifica
            Try
                Dim parametros As New Collection
                AddParam(parametros, "@IdDocumento", doc.IdDocumento, SqlDbType.Int)
                AddParam(parametros, "@EstadoVerificacion", doc.EstadoVerificacion, SqlDbType.Int)
                AddParam(parametros, "@FechaVerificacion", doc.FechaVerificacion, SqlDbType.DateTime)
                AddParam(parametros, "@IdUsuarioVerifica", doc.IdUsuarioVerifica, SqlDbType.Int)
                clsBitacora.Insert("app.SpGuardarAutoAsisTecVerificacion", parametros, HttpContext.Current.Session, 281, False)
            Catch ex As Exception
                Throw New Exception("Error insertando verificación " & doc.IdDocumento & ": " & ex.Message)
            End Try
        Next
        Return idRegistro
    End Function

    Public Function ActualizarVerificacion(idRegistro As Integer, listaVerifica As List(Of ClsAsisTec)) As Integer
        If idRegistro <= 0 Then Return 0

        For Each doc In listaVerifica
            Try
                Dim parametros As New Collection
                AddParam(parametros, "@IdDocumento", doc.IdDocumento, SqlDbType.Int)
                AddParam(parametros, "@EstadoVerificacion", doc.EstadoVerificacion, SqlDbType.Int)
                AddParam(parametros, "@FechaVerificacion", doc.FechaVerificacion, SqlDbType.DateTime)
                AddParam(parametros, "@IdUsuarioVerifica", doc.IdUsuarioVerifica, SqlDbType.Int)

                clsBitacora.Insert("app.SpActualizarAutoAsisTecVerificacion", parametros, HttpContext.Current.Session, 281, False)

            Catch ex As Exception
                Throw New Exception("Error actualizando verificación " & doc.IdDocumento & ": " & ex.Message)
            End Try
        Next

        Return idRegistro
    End Function

#End Region
End Class


