Partial Class ConcursoPostulanteBusinessObject

#Region "Contructores"
    ' Definir en esta region los constructores personalizados para el BusinessObject

#End Region

#Region "Metodos Generales"
    ' Definir en esta region los metodos no estaticos,
    ' estos metodos comunmente utilizan como parametros de proceso valores tomados de la propiedad entity

    Public Overrides Function SaveChanges() As MSG

        Dim MSG As New MSG("SaveChanges")
        ' pones toda tu logica de validacion previo a el guardado

        Try
            Transaction.Begin()

            If Me._IsNew Then
                MSG = MyBase.SaveChanges

                If MSG.EventType = dGen.Library.Entity.MSG.MsgType.Errors Then
                    Transaction.RollBack()
                    Return MSG
                End If

                MSG = ExecuteCopiaPostulacion(Me.Entity.idConcursoPostulante, Me.Entity.idUsuario)

                If MSG.EventType = dGen.Library.Entity.MSG.MsgType.Errors Then
                    Transaction.RollBack()
                    Return MSG
                End If

                'Dim ListaEspecialidad As EntityList(Of USU_Especialidad) = USU_EspecialidadBusinessObject.GetListUSU_EspecialidadBySEG_Usuarios(Me.Entity.idUsuario)
                'Dim File1 As String, File2 As String
                'For Each especialidad As USU_Especialidad In ListaEspecialidad
                '    File1 = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings("RutaArchivos") & especialidad.certificado)
                '    File2 = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings("RutaArchivosPostulacion") & especialidad.certificado)
                '    System.IO.File.Copy(File1, File2)

                'Next

                Dim oHistorial As New HistoricoConcursoPostulanteBusinessObject()
                oHistorial.Entity.idConcursoPostulante = Me.Entity.idConcursoPostulante
                oHistorial.Entity.fecha = Now
                oHistorial.Entity.idEstadoConcursoPostulante = 1
                oHistorial.Entity.usuario = Me.Entity.usuarioCreacion
                MSG = oHistorial.SaveChanges
                If MSG.EventType = dGen.Library.Entity.MSG.MsgType.Errors Then
                    Transaction.RollBack()
                    Return MSG
                End If

            Else

                'VERIFICAMOS SI ESTA CALIFICADO
                If Me.Entity.vbFormacion.HasValue Then
                    Me.Entity.Calificado = True
                End If

                If Not (Me.Entity.idEstadoConcursoPostulante = 2 Or Me.Entity.idEstadoConcursoPostulante = 3) Then



                    If Me.Entity.vbFormacion = False Or Me.Entity.vbConocimientos = False Or Me.Entity.vbExperiencia = False Then
                        Me.Entity.idEstadoConcursoPostulante = 4

                    End If

                    If Me.Entity.vbFormacion = True AndAlso Me.Entity.vbConocimientos = True AndAlso Me.Entity.vbExperiencia = True Then
                        Me.Entity.idEstadoConcursoPostulante = 5

                    End If
                End If
                

                MSG = MyBase.SaveChanges

                If MSG.EventType = dGen.Library.Entity.MSG.MsgType.Errors Then
                    Transaction.RollBack()
                    Return MSG
                End If



                If String.Compare(Me.Entity.idEstadoConcursoPostulanteOld, Me.Entity.idEstadoConcursoPostulante) <> 0 Then


                    Dim oHistorial As New HistoricoConcursoPostulanteBusinessObject()
                    oHistorial.Entity.idConcursoPostulante = Me.Entity.idConcursoPostulante
                    oHistorial.Entity.fecha = Now
                    oHistorial.Entity.idEstadoConcursoPostulante = Me.Entity.idEstadoConcursoPostulante
                    oHistorial.Entity.usuario = Me.Entity.usuarioModificacion
                    MSG = oHistorial.SaveChanges
                    If MSG.EventType = dGen.Library.Entity.MSG.MsgType.Errors Then
                        Transaction.RollBack()
                        Return MSG
                    End If
                End If
            End If


            Transaction.Commit()
            Return MSG
        Catch ex As Exception
            Transaction.RollBack()
            MSG.FriendlyMessage = "No fue posible guardar la informacion de la Postulación"
            MSG.TechnicalMessage = ex.Message
            Return MSG
        End Try

    End Function
#End Region

#Region "Metodos Estaticos"

    Public Shared Function ExecuteCopiaPostulacion(idConcursoPostulante As Integer, idUsuario As Integer) As MSG
        Return GetDdHelperInstance.ExecuteCopiaPostulacion(idConcursoPostulante, idUsuario)
    End Function
    ' Definir en esta region metodos estaticos
    Public Shared Function ExistePostulacion(idUsuario As Integer, idPlaza As Integer) As Boolean
        Return GetDdHelperInstance.ExistePostulacion(idUsuario, idPlaza)
    End Function

    Public Shared Function ExisteCodigo(CodigoPostulacion As String, idPlaza As Integer) As Boolean
        Return GetDdHelperInstance.ExisteCodigo(CodigoPostulacion, idPlaza)
    End Function

    Public Shared Function GetConcursoPostulante(idUsuario As Integer, idPlaza As Integer) As ConcursoPostulante
        Return GetDdHelperInstance.GetConcursoPostulante(idUsuario, idPlaza)
    End Function

    Public Shared Function GetConcursoPostulante(idConcursoPostulante As Integer) As ConcursoPostulante
        Dim o As New ConcursoPostulanteBusinessObject(idConcursoPostulante)
        Return o.Entity
    End Function

    Public Shared Function GetListConcursoPostulanteBySEG_Usuarios(ByVal idUsuario As Int32, Optional ByVal foreignLevel As Integer = 0) As List(Of ConcursoPostulante)
        Dim ListConcursoPostulante As EntityList(Of ConcursoPostulante) = GetDdHelperInstance.GetListConcursoPostulanteBySEG_Usuarios(idUsuario, foreignLevel)
        Dim f = From cp As ConcursoPostulante In ListConcursoPostulante Select cp Order By cp.fechaCreacion Descending

        Return f.ToList

    End Function


    Public Shared Function EnviarCodigoCorreo(idUsuario As Integer, codigo As String, nombrePuesto As String) As MSG
        Dim msg As New MSG("codigo")

        Dim UsuariosBusinessObject As New UsuariosBusinessObject(idUsuario, 1)

        If UsuariosBusinessObject.IsNew Then
            msg.EventType = dGen.Library.Entity.MSG.MsgType.Errors
            msg.FriendlyMessage = "No fué posible recuperar la información del usuario"
            Return msg
        End If

        Dim mensaje As String = String.Format("<table><tr><td style='text-align:center;'><img alt='' src='" + ConfigurationManager.AppSettings("Logo") + "' /></td></tr>" + _
"  <tr style='color: #FFFFFF; background-color: #2CA9E1'><td colspan='2'><strong style='color: #FFFFFF;'>Estimado/a:</strong> <strong>{0}</strong></td></tr> " + _
"  <tr><td>&nbsp;</td></tr> " + _
"  <tr><td>Su aplicación al concurso {2} ha sido completada satisfactoriamente, para el seguimiento del proceso su código de postulación es: {1}</td></tr> " + _
"  <tr><td>Puede verificar esta misma información en la sección: 'Mis Postulaciones'</td></tr> " + _
"  <tr><td>&nbsp;</td></tr> " + _
"  <tr><td>Esta cuenta de correo no esta siendo monitoreada, por favor no responder este correo.</td></tr> " + _
"         </table>", UsuariosBusinessObject.Entity.fkidTratamiento.tratamiento & " " & UsuariosBusinessObject.Entity.nombres & " " & UsuariosBusinessObject.Entity.apellidos, codigo, nombrePuesto)

        Dim destinatarios As New ArrayList
        destinatarios.Add(UsuariosBusinessObject.Entity.email)

        msg = SistemasBusinessObject.EnviarCorreo(String.Format("Postulación '{0}' de empleospublicos.gob.sv", nombrePuesto), mensaje, destinatarios)
        Return msg

    End Function
#End Region

#Region "Metodos Privados"
    ' Definir en esta region metodos privados

#End Region

#Region "Metodos Reportes"
    ' Definir en esta region metodos utilizados para reportes que comunmente devulven DataSets

#End Region
End Class
