Imports DevExpress.Web
Imports System.Data.SqlClient

Public Class ucUsuEspecialidad
    Inherits System.Web.UI.UserControl

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            ObjectUsuEspecialidad.SelectParameters("idUsuario").DefaultValue = CInt(Page.User.Identity.Name)


        End If
    End Sub

    Protected Sub gridUsuEspecialidad_CellEditorInitialize(sender As Object, e As DevExpress.Web.ASPxGridViewEditorEventArgs) Handles gridUsuEspecialidad.CellEditorInitialize
        If e.Column.FieldName = "inicioAnio" Or e.Column.FieldName = "finAnio" Then
            Dim se As ASPxSpinEdit = CType(e.Editor, ASPxSpinEdit)
            se.MinValue = Now.Date.Year - 100
            se.MaxValue = Now.Date.Year
            'se.ClientSideEvents.Validation = "function(s,e) { e.isValid = ValidateEditorValue(); e.errorText = 'El año fin tiene que ser mayor o igual que el año de inicio.';}"
        End If

        'If (Not gridUsuEspecialidad.IsEditing) OrElse e.Column.FieldName <> "ESP_CODIGO" Then
        '    Return
        'End If
        'If e.KeyValue Is DBNull.Value OrElse e.KeyValue Is Nothing Then
        '    Return
        'End If
        'Dim val As Object = gridUsuEspecialidad.GetRowValuesByKeyValue(e.KeyValue, "GRA_CODIGO")
        'If val Is DBNull.Value Then
        '    Return
        'End If

        'Dim grado As String = CStr(val)

        'Dim combo As ASPxComboBox = TryCast(e.Editor, ASPxComboBox)
        'FillEspecialidadCombo(combo, grado)

        'AddHandler combo.Callback, AddressOf cmbEspecialidad_OnCallback

        If (Not gridUsuEspecialidad.IsEditing) OrElse e.Column.FieldName <> "ESP_CODIGO" Then
            Return
        End If

        Dim combo As ASPxComboBox = TryCast(e.Editor, ASPxComboBox)
        If Not gridUsuEspecialidad.IsNewRowEditing Then
            Dim val As Object = gridUsuEspecialidad.GetRowValuesByKeyValue(e.KeyValue, "GRA_CODIGO")
            If val Is DBNull.Value Then
                Return
            End If
            Dim grado As String = CStr(val)
            FillEspecialidadCombo(combo, grado)

        End If


        AddHandler combo.Callback, AddressOf cmbEspecialidad_OnCallback

    End Sub

    Protected Shared Sub FillEspecialidadCombo(ByVal cmb As ASPxComboBox, ByVal grado As String)
        If String.IsNullOrEmpty(grado) Then
            Return
        End If

        Dim especialidades As List(Of clEspecialidad) = GetEspecialidades(grado)


        cmb.Items.Clear()
        For Each especialidad As clEspecialidad In especialidades
            cmb.Items.Add(especialidad.Nombre, especialidad.Value)
        Next especialidad
        If cmb.Items.Count = 1 Then
            cmb.SelectedIndex = 0
        End If
    End Sub

    Private Shared Function GetEspecialidades(ByVal grado As String) As List(Of clEspecialidad)
        Dim ListaEspecialidades As New List(Of clEspecialidad)
        Using cnn As New SqlConnection(ConfigurationManager.ConnectionStrings("cnn").ConnectionString)
            cnn.Open()
            Dim cmd As New SqlCommand("select e.ESP_CODIGO as codigo, e.ESP_NOMBRE as nombre from GOES.dbo.RHM_ORG_GRADOESPECIALIDAD as ge, GOES.dbo.RHM_ORG_ESPECIALIDAD as e where gra_codigo=@varGradoCodigo AND ge.ESP_CODIGO = e.ESP_CODIGO order by ASCII(lower(ESP_NOMBRE)), ESP_NOMBRE", cnn)
            cmd.Parameters.Add("@varGradoCodigo", SqlDbType.VarChar).Value = grado

            Dim dr As SqlDataReader = cmd.ExecuteReader
            Dim oEspecialidad As clEspecialidad
            While dr.Read
                oEspecialidad = New clEspecialidad(dr("codigo"), dr("nombre"))
                ListaEspecialidades.Add(oEspecialidad)

            End While
            dr.Close()
            cnn.Close()
        End Using

        Return ListaEspecialidades
    End Function

    Private Sub cmbEspecialidad_OnCallback(ByVal source As Object, ByVal e As CallbackEventArgsBase)
        FillEspecialidadCombo(TryCast(source, ASPxComboBox), e.Parameter)
    End Sub

    Private Sub gridUsuEspecialidad_HtmlEditFormCreated(sender As Object, e As ASPxGridViewEditFormEventArgs) Handles gridUsuEspecialidad.HtmlEditFormCreated


        Dim ucCargaArchivo As ucCargaArchivo = gridUsuEspecialidad.FindEditRowCellTemplateControl(gridUsuEspecialidad.Columns("certificado"), "ucCargaArchivo1")

        If gridUsuEspecialidad.IsNewRowEditing Then
            ucCargaArchivo.HyperLinkArchivo = String.Empty
        Else
            Dim NombreArchivo As Object = gridUsuEspecialidad.GetRowValues(gridUsuEspecialidad.EditingRowVisibleIndex, "certificado")
            'If String.IsNullOrEmpty(ucCargaArchivo.nombreArchivoCargado) Then
            '    'If String.IsNullOrEmpty(NombreArchivo) Then
            '    ucCargaArchivo.HyperLinkArchivo = NombreArchivo
            'Else

            '    ucCargaArchivo.HyperLinkArchivo = ucCargaArchivo.nombreArchivoCargado
            'End If
            ucCargaArchivo.HyperLinkArchivo = NombreArchivo
        End If
    End Sub

    Protected Sub gridUsuEspecialidad_RowInserting(sender As Object, e As Data.ASPxDataInsertingEventArgs) Handles gridUsuEspecialidad.RowInserting
        Dim ucCargaArchivo As ucCargaArchivo = gridUsuEspecialidad.FindEditRowCellTemplateControl(gridUsuEspecialidad.Columns("certificado"), "ucCargaArchivo1")

        If ucCargaArchivo.GetASPxUploadControl.IsValid Then
            e.NewValues("certificado") = ucCargaArchivo.nombreArchivoCargado
        End If

        e.NewValues("idUsuario") = CInt(Page.User.Identity.Name)
        Dim g As ASPxGridView = TryCast(sender, ASPxGridView)
        g.JSProperties("cpInsert") = True
    End Sub

    Protected Sub gridUsuEspecialidad_RowUpdating(sender As Object, e As Data.ASPxDataUpdatingEventArgs) Handles gridUsuEspecialidad.RowUpdating
        e.NewValues("idUsuario") = CInt(Page.User.Identity.Name)

        Dim ucCargaArchivo As ucCargaArchivo = gridUsuEspecialidad.FindEditRowCellTemplateControl(gridUsuEspecialidad.Columns("certificado"), "ucCargaArchivo1")


        If String.Compare(ucCargaArchivo.HyperLinkArchivo, ucCargaArchivo.nombreArchivoCargado) <> 0 Then
            If USU_EspecialidadBusinessObject.ExistePostulacion(ucCargaArchivo.HyperLinkArchivo) = False Then
                If USU_EspecialidadBusinessObject.ExisteOtroGradoMismoArchivo(ucCargaArchivo.HyperLinkArchivo) = False Then
                    USU_EspecialidadBusinessObject.EliminarArchivo(ucCargaArchivo.HyperLinkArchivo)
                End If

            End If
            e.NewValues("certificado") = ucCargaArchivo.nombreArchivoCargado
        Else
            e.NewValues("certificado") = ucCargaArchivo.HyperLinkArchivo
        End If
        'e.NewValues("usuarioCreacion") = CInt(Page.User.Identity.Name)

    End Sub

    Protected Sub gridUsuEspecialidad_RowDeleting(sender As Object, e As Data.ASPxDataDeletingEventArgs) Handles gridUsuEspecialidad.RowDeleting
        'Dim ucCargaArchivo As ucCargaArchivo = gridUsuEspecialidad.FindEditRowCellTemplateControl(gridUsuEspecialidad.Columns("certificado"), "ucCargaArchivo1")
        'If USU_EspecialidadBusinessObject.ExistePostulacion(CInt(Page.User.Identity.Name)) = False And Not (ucCargaArchivo Is Nothing) Then
        '    USU_EspecialidadBusinessObject.EliminarArchivo(ucCargaArchivo.HyperLinkArchivo)
        'End If
        'e.Values("certificado") = ucCargaArchivo.HyperLinkArchivo
        Dim g As ASPxGridView = TryCast(sender, ASPxGridView)
        g.JSProperties("cpInsert") = True
    End Sub

    Protected Sub gridUsuEspecialidad_InitNewRow(sender As Object, e As Data.ASPxDataInitNewRowEventArgs) Handles gridUsuEspecialidad.InitNewRow
        e.NewValues("idPais") = 65
    End Sub

    Protected Function GetTotal() As String
        Dim summaryItem = gridUsuEspecialidad.TotalSummary.First(Function(i) i.Tag = "total")
        Return gridUsuEspecialidad.GetTotalSummaryValue(summaryItem)
    End Function

End Class