
Imports System.Data.Entity
Imports DevExpress.Xpf.Core.ServerMode
'Imports bdGestionFidas
Imports DevExpress.Mvvm
Imports DevExpress.Xpf.Grid
Imports tsWPF
Imports tsl5.Extensiones
Imports DevExpress.Xpf.Core
Imports DevExpress.XtraReports.UI
Imports System.IO
Imports DevExpress.Xpf.Printing
Imports Microsoft.Win32
Imports System.Data.Objects
Imports System.Data.Objects.DataClasses
Imports DevExpress.Data

Public Class dxwDiseñoColumnas

    '  Private bd As bdGestionFidas.cacoaentities

    Private _Codigo As String
    Private _Abrir As String
    Public _Descripcion As String
    Public _TodosLosUsuarios As String
    Public _IdDiseño As Integer?
    Dim _ld As List(Of DiseñoGuardado)
    Public Delegate Sub EliminarDiseño(idDiseño As Integer)

    Private _DelegadoEliminarDiseño As EliminarDiseño
    Private Sub dxwAgregar_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        Try
            'bd = bdGestionFidas.FIDASEntities.NuevoContexto
            'Dim lc = (From fc In bd.ficherosconfiguracion Where fc.Descripcion IsNot Nothing AndAlso fc.Descripcion <> "" And fc.Codigo = _Codigo And (fc.idUsuario.HasValue = False OrElse fc.idUsuario = bdGestionFidas.Utilidades.dsc.idUsuario) Select New DiseñoGuardado With {.Descripcion = fc.Descripcion, .TodosLosUsuarios = (fc.idUsuario.HasValue = False)}).ToList
            'Me.gc.ItemsSource = lc
            Me.teDescripcion.EditValue = _Descripcion
            Me.cbTodosUsuarios.IsChecked = _TodosLosUsuarios
            Me.gc.ItemsSource = _ld
            If _Descripcion <> "" AndAlso _ld.Any(Function(x) x.Descripcion = _Descripcion And x.TodosLosUsuarios = _TodosLosUsuarios) Then
                Me.gc.CurrentItem = _ld.First(Function(x) x.Descripcion = _Descripcion And x.TodosLosUsuarios = _TodosLosUsuarios)
            End If

        Catch ex As Exception
            DXMessageBox.Show(ex.Message, "Error")
        Finally
            Try
                DXSplashScreen.Close()
            Catch
            End Try
        End Try
    End Sub
    'Private Sub Aceptar_Click(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs)

    Public Sub New(Codigo As String, Descripcion As String, TodosUsuarios As Boolean, Abrir As Boolean, ld As List(Of DiseñoGuardado), FuncionEliminarDiseño As EliminarDiseño)

        ' Llamada necesaria para el diseñador.


        InitializeComponent()
        If Abrir Then
            Me.lgOpcionesGuardado.Visibility = System.Windows.Visibility.Hidden
            Me.btAceptar.Content = "Abrir Diseño"
        End If

        _Abrir = Abrir
        _Codigo = Codigo
        _Descripcion = Descripcion
        _TodosLosUsuarios = TodosUsuarios
        _ld = ld
        _DelegadoEliminarDiseño = FuncionEliminarDiseño



        Dim cm As New ContextMenu
        Dim mi As New MenuItem()
        mi.Tag = "MI_ELIMINAR_DISEÑO"
        mi.Header = "Eliminar Diseño"
        AddHandler mi.Click, AddressOf _EliminarDiseño
        cm.Items.Add(mi)
        Me.gc.ContextMenu = cm
        ' Agregue cualquier inicialización después de la llamada a InitializeComponent().

    End Sub


    Private Sub btAceptar_Click(sender As Object, e As RoutedEventArgs)
        Try
            Dim bcancelar As Boolean
            If _Abrir Then
                Dim dg = DirectCast(Me.gc.CurrentItem, DiseñoGuardado)
                _Descripcion = dg.Descripcion
                _TodosLosUsuarios = dg.TodosLosUsuarios
                _IdDiseño = dg.idDiseño
            Else
                _Descripcion = teDescripcion.EditValue
                If _Descripcion = "" Then Throw New Exception("La descripción es obligatoria")
                Dim ld = DirectCast(Me.gc.ItemsSource, List(Of DiseñoGuardado))
                If ld.Any(Function(x) x.Descripcion = _Descripcion And x.TodosLosUsuarios = cbTodosUsuarios.IsChecked.Value) Then
                    bcancelar = (DXMessageBox.Show("¿Desea sobreescribir el diseño de " & _Descripcion & "?", "Atención", MessageBoxButton.YesNo) = MessageBoxResult.No)
                    If Not bcancelar Then _IdDiseño = ld.First(Function(x) x.Descripcion = _Descripcion And x.TodosLosUsuarios = cbTodosUsuarios.IsChecked.Value).idDiseño
                Else
                    If cbTodosUsuarios.IsChecked.Value Then
                        If ld.Any(Function(x) x.Descripcion = _Descripcion) Then
                            bcancelar = (DXMessageBox.Show("¿Desea sobreescribir el diseño de " & _Descripcion & " y establecerlo como público para todos los usuarios?", "Atención", MessageBoxButton.YesNo) = MessageBoxResult.No)
                            If Not bcancelar Then _IdDiseño = ld.First(Function(x) x.Descripcion = _Descripcion).idDiseño
                        End If
                    Else
                        If ld.Any(Function(x) x.Descripcion = _Descripcion) Then
                            bcancelar = (DXMessageBox.Show("¿Desea sobreescribir el diseño de " & _Descripcion & " y establecerlo como privado para este usuario?", "Atención", MessageBoxButton.YesNo) = MessageBoxResult.No)
                            If Not bcancelar Then _IdDiseño = ld.First(Function(x) x.Descripcion = _Descripcion).idDiseño
                        End If
                    End If
                End If
                _TodosLosUsuarios = cbTodosUsuarios.IsChecked
            End If
            If Not bcancelar Then
                Me.DialogResult = True
                Me.Close()
            End If
        Catch ex As Exception
            DXMessageBox.Show(ex.Message, "Atención")
        End Try
    End Sub

    Private Sub btCancelar_Click(sender As Object, e As RoutedEventArgs)
        Me.DialogResult = False
        Me.Close()
    End Sub


    'Private Sub dxwDiseñoColumnas_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
    '    bd.Connection.Close()
    'End Sub

    Private Sub gc_CurrentItemChanged(sender As Object, e As CurrentItemChangedEventArgs) Handles gc.CurrentItemChanged
        Dim dg = DirectCast(Me.gc.CurrentItem, DiseñoGuardado)
        If dg IsNot Nothing Then
            Me.teDescripcion.EditValue = dg.Descripcion
            Me.cbTodosUsuarios.IsChecked = dg.TodosLosUsuarios
        End If
    End Sub

    Private Sub _EliminarDiseño(sender As Object, e As RoutedEventArgs)
        Dim dg = DirectCast(Me.gc.CurrentItem, DiseñoGuardado)
        _DelegadoEliminarDiseño.Invoke(dg.idDiseño)
        tv.DeleteRow(Me.tv.FocusedRowHandle)
    End Sub
End Class
Public Class DiseñoGuardado
    Public Property idDiseño As Integer?
    Property Descripcion As String
    Property TodosLosUsuarios As Boolean
End Class
