Imports System.ComponentModel Imports DevExpress.Xpf.Core Imports DevExpress.Xpf.Docking Imports System.Windows.Media.Animation Imports DevExpress.Xpf.Core.Native Imports DevExpress.Xpf.Editors Imports System.IO Imports DevExpress.Xpf.Bars Imports DevExpress.Xpf.Grid Imports Microsoft.Win32 Imports tsl5.Extensiones Imports DevExpress.Spreadsheet Imports System.Data.Entity.ModelConfiguration.Conventions Public Class ContenedorCabLin ' Public bd As System.Data.Objects.ObjectContext Public Aplicacion As ApCabLin Public dp As DocumentPanel Dim _DescripcionDiseño As String Dim _TodosUsuariosDiseño As Boolean ' Private VentanaError As VentanaErr Public Event CargaAplicacion(sender As System.Object, e As System.Windows.RoutedEventArgs) Public Event AntesDeGuardar(sender As System.Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Public Event DespuesDeGuardar(sender As System.Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) 'Public Shared ReadOnly EventoLanzaMensaje As RoutedEvent = EventManager.RegisterRoutedEvent("LanzaMensaje", RoutingStrategy.Bubble, GetType(RoutedEventHandler), GetType(ContenedorCabLin)) 'Public Custom Event LanzaMensaje As RoutedEventHandler ' AddHandler(value As RoutedEventHandler) ' Me.AddHandler(EventoLanzaMensaje, value) ' End AddHandler ' RemoveHandler(value As RoutedEventHandler) ' Me.RemoveHandler(EventoLanzaMensaje, value) ' End RemoveHandler ' RaiseEvent(sender As Object, e As RoutedEventArgs) ' Me.RaiseEvent(e) ' End RaiseEvent 'End Event Private Sub Cargado(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded Me.siMensaje.Content = "" RaiseEvent CargaAplicacion(sender, e) If DXSplashScreen.IsActive Then DXSplashScreen.Close() ' Me.Aplicacion.ValidarControles = True End Sub Private Sub Guardar(sender As System.Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Handles btGuardar.ItemClick 'Dispatcher.BeginInvoke(New Action(Function() ucexpedientes.Estado = EstadosCablin.Nuevo), Windows.Threading.DispatcherPriority.Loaded) 'Dispatcher.BeginInvoke(New Action(Sub() Aplicacion.Guardar(sender, e)), Windows.Threading.DispatcherPriority.ContextIdle) Dim Guardado As Boolean Try btGuardar.IsEnabled = False Guardado = Not Aplicacion.Guardar(sender, e) If Me.Aplicacion.Estado = EstadosCablin.AplicacionSinIndice Then btGuardar.IsEnabled = True Finally If Guardado Then Select Case Aplicacion.Estado Case EstadosCablin.ModificandoRegistro btGuardar.IsEnabled = Aplicacion.PermisosConcedidos.Modificar Case EstadosCablin.Nuevo btGuardar.IsEnabled = Aplicacion.PermisosConcedidos.Nuevos End Select Else btGuardar.IsEnabled = True End If End Try End Sub Public Sub New() ' Llamada necesaria para el diseñador. InitializeComponent() ' Agregue cualquier inicialización después de la llamada a InitializeComponent(). End Sub 'Public Sub New(Contenido As ApCabLin, TablaBase As String, Registros As ListCollectionView, Busqueda As DevExpress.Xpf.LayoutControl.LayoutGroup, GridBusqueda As DevExpress.Xpf.Grid.GridControl) ' If Not (System.ComponentModel.DesignerProperties.GetIsInDesignMode(Me)) Then ' ' Llamada necesaria para el diseñador. ' InitializeComponent() ' Aplicacion = Contenido ' ' Aplicacion.Contexto = Contexto ' Contenido.ContenedorCL = Me ' Contenido.Registros = Registros ' ' Contenido.ObjetoEntidad = ModeloEntidad ' Contenido.NombreTablaBase = TablaBase ' Contenido.Busqueda = Busqueda ' Contenido.GridBusqueda = GridBusqueda ' Me.contenido.Children.Add(Contenido) ' AddHandler Me.PreviewKeyDown, AddressOf Aplicacion.ApCabLin_PreviewKeyDown ' End If ' '' Agregue cualquier inicialización después de la llamada a InitializeComponent(). 'End Sub 'Public Sub New(Contenido As ApCabLin) ' If Not (System.ComponentModel.DesignerProperties.GetIsInDesignMode(Me)) Then ' ' Llamada necesaria para el diseñador. ' InitializeComponent() ' Aplicacion = Contenido ' Contenido.ContenedorCL = Me ' Me.contenido.Children.Add(Contenido.Aplicacion) ' AddHandler Me.PreviewKeyDown, AddressOf Aplicacion.ApCabLin_PreviewKeyDown ' End If 'End Sub Private sbDesvanecer As Storyboard = Nothing Public Sub New(Aplicacion As ApCabLin, uc As UserControl, dp As DocumentPanel) If Not (System.ComponentModel.DesignerProperties.GetIsInDesignMode(Me)) Then ' Llamada necesaria para el diseñador. InitializeComponent() Me.contenido.Children.Add(uc) Me.Aplicacion = Aplicacion Me.dp = dp Aplicacion.ContenedorCL = Me Dim da As New DoubleAnimation With da .From = 1 .To = 0 .Duration = New Duration(TimeSpan.FromSeconds(2)) .AutoReverse = False End With Storyboard.SetTargetProperty(da, New PropertyPath(OpacityProperty)) sbDesvanecer = New Storyboard sbDesvanecer.Children.Add(da) End If End Sub ' Private Sub mv_CurrentChanged(sender As Object, e As System.EventArgs) Handles mv.CurrentChanged ' cabecera = Me.mv.CurrentEditItem 'End Sub Private Sub Nuevo(sender As System.Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Handles btNuevo.ItemClick Me.Aplicacion.ValidarControles = False Me.Aplicacion.DocPanel.Tag = Me.Aplicacion.GetType.Name & "." & Me.Aplicacion.Titulo & ".NUEVO" Aplicacion.Estado = EstadosCablin.Nuevo Me.Aplicacion.ValidarControles = True 'Busqueda.Visibility = Windows.Visibility.Collapsed 'Busqueda.Visibility = Windows.Visibility.Hidden 'btBuscar.IsChecked = False 'Cabecera.AddNew() End Sub Private Sub btEliminar_ItemClick(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Handles btEliminar.ItemClick Aplicacion.Eliminar(sender, e) End Sub Friend Sub IniciaAnimacion(Mensaje As String, Color As Color) Try Me.siMensaje.Content = Mensaje Dim tbm As TextBlock = LayoutHelper.FindElementByName(Me.BarraBotones, "tbMensaje") tbm.Foreground = New SolidColorBrush(Color) Storyboard.SetTarget(sbDesvanecer, tbm) BeginStoryboard(sbDesvanecer) Catch ex As Exception Debug.Write(ex.Message) End Try End Sub Private Sub btImprimirPlantilla_ItemClick(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Dim oa = Me.Aplicacion.ObjetoActual Dim be As BaseEdit = Nothing Try be = LayoutHelper.FindParentObject(Of BaseEdit)(oa) Catch ex As Exception End Try If Not be Is Nothing Then Select Case be.GetType Case GetType(TextEdit), GetType(PasswordBoxEdit), GetType(ButtonEdit), GetType(DateEdit), GetType(ComboBoxEdit), GetType(DevExpress.Xpf.Grid.LookUp.LookUpEdit) Dim expression = be.GetBindingExpression(BaseEdit.EditValueProperty) If Configuracion.ComportamientoValidacion = Validation.InvalidValueBehavior.AllowLeaveEditor Then be.DoValidate() If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() Else If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() be.DoValidate() End If Case GetType(CheckEdit) End Select End If 'Dim be As BaseEdit = LayoutHelper.FindParentObject(Of BaseEdit)(Keyboard.FocusedElement) 'If Not be Is Nothing Then ' Select Case be.GetType ' Case GetType(TextEdit), GetType(PasswordBoxEdit), GetType(ButtonEdit), GetType(DateEdit), GetType(ComboBoxEdit), GetType(DevExpress.Xpf.Grid.LookUp.LookUpEdit) ' Dim expression = be.GetBindingExpression(BaseEdit.EditValueProperty) ' If Not expression Is Nothing Then expression.UpdateSource() ' be.DoValidate() ' Case GetType(CheckEdit) ' End Select 'End If Dim idPlantilla As Integer = bePlantilla.EditValue Me.Aplicacion.LanzaImprimirPlantilla(sender, e, idPlantilla) End Sub ' Private Function FindVisualChild(Of childItem As DependencyObject)(ByVal obj As DependencyObject) As childItem ' For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(obj) - 1 ' Dim child As DependencyObject = VisualTreeHelper.GetChild(obj, i) ' If child IsNot Nothing AndAlso TypeOf child Is childItem Then ' Return CType(child, childItem) ' Else ' Dim childOfChild As childItem = FindVisualChild(Of childItem)(child) ' If childOfChild IsNot Nothing Then ' Return childOfChild ' End If ' End If ' Next i ' Return Nothing ' End Function ' Private Sub htIniciaAnimacion(Mensaje As String, Color As Color) Private Sub btAcciones_ItemClick(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Dim oa = Me.Aplicacion.ObjetoActual Dim be As BaseEdit = Nothing Try be = LayoutHelper.FindParentObject(Of BaseEdit)(oa) Catch ex As Exception End Try If Not be Is Nothing Then Select Case be.GetType Case GetType(TextEdit), GetType(PasswordBoxEdit), GetType(ButtonEdit), GetType(DateEdit), GetType(ComboBoxEdit), GetType(DevExpress.Xpf.Grid.LookUp.LookUpEdit) Dim expression = be.GetBindingExpression(BaseEdit.EditValueProperty) If Configuracion.ComportamientoValidacion = Validation.InvalidValueBehavior.AllowLeaveEditor Then be.DoValidate() If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() Else If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() be.DoValidate() End If Case GetType(CheckEdit) End Select End If 'Dim be As BaseEdit = LayoutHelper.FindParentObject(Of BaseEdit)(Keyboard.FocusedElement) 'If Not be Is Nothing Then ' Select Case be.GetType ' Case GetType(TextEdit), GetType(PasswordBoxEdit), GetType(ButtonEdit), GetType(DateEdit), GetType(ComboBoxEdit), GetType(DevExpress.Xpf.Grid.LookUp.LookUpEdit) ' Dim expression = be.GetBindingExpression(BaseEdit.EditValueProperty) ' If Not expression Is Nothing Then expression.UpdateSource() ' be.DoValidate() ' Case GetType(CheckEdit) ' End Select 'End If Dim idAccion As Integer = beAcciones.EditValue Me.Aplicacion.LanzaEjecutaAccion(sender, e, idAccion) End Sub Private Sub btActualizar_ItemClick(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Me.Aplicacion.RefrescaUC(True) End Sub Private Sub beAcciones_EditValueChanged(sender As Object, e As RoutedEventArgs) Dim idAccion As Integer = beAcciones.EditValue Dim acs As List(Of Accion) = Me.cbAcciones.ItemsSource Dim ac As Accion = (From a In acs Where a.idAccion = idAccion).First Me.btAcciones.Hint = ac.Descripcion End Sub Private Sub bePlantilla_EditValueChanged(sender As Object, e As RoutedEventArgs) Dim idPlantilla As Integer = bePlantilla.EditValue Dim plantillas As List(Of tsWPF.Plantilla) = Me.cbPlantillaAImprimir.ItemsSource Dim pl As Plantilla = (From p In plantillas Where p.idPlantilla = idPlantilla).First Me.btImprimirPlantilla.Hint = "Imprimir " & pl.Descripcion End Sub Private Sub ContenedorCabLin_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded Try If Aplicacion IsNot Nothing Then If Aplicacion.bdEntidad.Connection.State <> System.Data.ConnectionState.Closed Then Aplicacion.bdEntidad.Connection.Close() End If Catch ex As Exception End Try End Sub Private Sub btAyuda_ItemClick(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Me.Aplicacion.DelegadoAyuda.Invoke(Me.Aplicacion.uc.GetType.ToString) End Sub Private Sub btDiseño_ItemClick(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) Try Dim drs = ObtieneDiseñoActual() Me.Aplicacion.DelegadoDiseño.Invoke(Me.Aplicacion.bdEntidad, OperacionDiseñoEnum.GUARDAR, Me.Aplicacion.uc.GetType.ToString, _DescripcionDiseño, _TodosUsuariosDiseño, drs) Catch ex As Exception If Me.Aplicacion.DelegadoErrorNoControlado IsNot Nothing Then Me.Aplicacion.DelegadoErrorNoControlado.Invoke(Me.Aplicacion, ex) End Try End Sub Friend Function ObtieneDiseñoActual() As Byte() Dim ld As New DiseñoRejillas Dim i As Integer For Each l In Aplicacion.Lineas i += 1 If l.Name = "" Then l.Name = "tsRejilla-" & i.ToString Dim dr As New DiseñoRejilla dr.Nombre = l.Name dr.Version = "1" Dim ms As New MemoryStream l.SaveLayoutToStream(ms) dr.Diseño = ms.ToArray ld.Rejillas.Add(dr) Next Dim drs = System.Text.Encoding.Unicode.GetBytes(tsl5.Utilidades.Serializar(ld)) Return drs End Function Private Sub btRestaurarDiseño_ItemClick(sender As Object, e As DevExpress.Xpf.Bars.ItemClickEventArgs) If Aplicacion.DiseñoOriginal IsNot Nothing Then Try Dim ld As New DiseñoRejillas ld = tsl5.Utilidades.deserializar(System.Text.Encoding.Unicode.GetString(Aplicacion.DiseñoOriginal), ld.GetType) Dim i As Integer For Each l In Aplicacion.Lineas i += 1 If l.Name = "" Then l.Name = "tsRejilla-" & i.ToString Try If ld.Rejillas.Any(Function(x) x.Nombre = l.Name) Then Dim dr As DiseñoRejilla = ld.Rejillas.Where(Function(x) x.Nombre = l.Name).First l.RestoreLayoutFromStream(New System.IO.MemoryStream(dr.Diseño)) End If Catch ex As Exception If Me.Aplicacion.DelegadoErrorNoControlado IsNot Nothing Then Me.Aplicacion.DelegadoErrorNoControlado.Invoke(Me.Aplicacion, ex) ' Debug.Write("Error DelegadoDiseño Rejilla") End Try Next Dim drs = System.Text.Encoding.Unicode.GetBytes(tsl5.Utilidades.Serializar(ld)) Me.Aplicacion.DelegadoDiseño.Invoke(Me.Aplicacion.bdEntidad, OperacionDiseñoEnum.RESTAURAR_ORIGINAL, Me.Aplicacion.uc.GetType.ToString, _DescripcionDiseño, _TodosUsuariosDiseño, drs) Catch ex As Exception If Me.Aplicacion.DelegadoErrorNoControlado IsNot Nothing Then Me.Aplicacion.DelegadoErrorNoControlado.Invoke(Me.Aplicacion, ex) End Try End If End Sub Private Sub btGuardarDiseñoComo_ItemClick(sender As Object, e As ItemClickEventArgs) Try Dim drs = ObtieneDiseñoActual() Me.Aplicacion.DelegadoDiseño.Invoke(Me.Aplicacion.bdEntidad, OperacionDiseñoEnum.GUARDAR_COMO, Me.Aplicacion.uc.GetType.ToString, _DescripcionDiseño, _TodosUsuariosDiseño, drs) Catch ex As Exception If Me.Aplicacion.DelegadoErrorNoControlado IsNot Nothing Then Me.Aplicacion.DelegadoErrorNoControlado.Invoke(Me.Aplicacion, ex) DXMessageBox.Show(ex.Message, "Error btDiseñoComo_Itemclick") End Try End Sub Private Sub btAbrirDiseñoGuardado_ItemClick(sender As Object, e As ItemClickEventArgs) Dim b = Me.Aplicacion.DelegadoDiseño.Invoke(Me.Aplicacion.bdEntidad, OperacionDiseñoEnum.ABRIR_DISEÑO_GUARDADO, Me.Aplicacion.uc.GetType.ToString, _DescripcionDiseño, _TodosUsuariosDiseño, Nothing) If b IsNot Nothing Then Dim ld As New DiseñoRejillas ld = tsl5.Utilidades.deserializar(System.Text.Encoding.Unicode.GetString(b), ld.GetType) Dim i As Integer Dim lg As List(Of tsGridControl) = Nothing tsWPF.ObtieneHijosDeTipo(Of tsGridControl)(Me, lg) For Each l In lg i += 1 If l.Name = "" Then l.Name = "tsRejilla-" & i.ToString Try If ld.Rejillas.Any(Function(x) x.Nombre = l.Name) Then Dim dr As DiseñoRejilla = ld.Rejillas.Where(Function(x) x.Nombre = l.Name).First l.RestoreLayoutFromStream(New System.IO.MemoryStream(dr.Diseño)) End If Catch ex As Exception If Me.Aplicacion.DelegadoErrorNoControlado IsNot Nothing Then Me.Aplicacion.DelegadoErrorNoControlado.Invoke(Me.Aplicacion, ex) DXMessageBox.Show(ex.Message, "Error btDiseñoGuardado_Itemclick") End Try Next End If End Sub Private Sub BtCapturar_ItemClick(sender As Object, e As ItemClickEventArgs) Dim sficherojpg = tsl5.Utilidades.ObtieneFicheroAleatorio("jpg") IO.File.WriteAllBytes(sficherojpg, Me.Aplicacion.uc.ObtieneImagen(1, 100)) Process.Start(sficherojpg) End Sub Private Sub BtExportar_ItemClick(sender As Object, e As ItemClickEventArgs) Dim sfd As New SaveFileDialog sfd.FileName = "Exportacion.xlsx" sfd.Filter = "Fichero Excel (*.xls, *.xlsx|*.xls;*.xlsx" sfd.DefaultExt = ".xlsx" Dim ms As New List(Of Stream) Dim formato As DevExpress.Spreadsheet.DocumentFormat If sfd.ShowDialog Then Dim i As Integer = 0 Dim ngc As New tsGridControl For Each oc In Me.Aplicacion.ControlesTS Try Dim gc As New tsGridColumn() gc.FieldName = oc.PropiedadesTS.NombreCampo gc.Header = oc.Label.ToString.TrimEnd(":") gc.Width = oc.Width ngc.Columns.Add(gc) Catch End Try Next ngc.ItemsSource = Me.Aplicacion.DataContext Dim ls = New MemoryStream ngc.View.ExportToXlsx(ls) ms.Add(ls) For Each l In Me.Aplicacion.Lineas Try ls = New MemoryStream ms.Add(ls) Dim vista As TableView = l.View Select Case IO.Path.GetExtension(sfd.FileName).ToLower Case ".xls" vista.ExportToXls(ls) formato = DevExpress.Spreadsheet.DocumentFormat.Xls Case ".xlsx" vista.ExportToXlsx(ls) formato = DevExpress.Spreadsheet.DocumentFormat.Xlsx End Select i += 1 Catch End Try Next Dim wb As New Workbook For i = 0 To ms.Count - 1 Try Dim wbc As New Workbook ms(i).Position = 0 wbc.LoadDocument(ms(i), formato) wb.Worksheets(i).CopyFrom(wbc.Worksheets(0)) If i = 0 Then wb.Worksheets(i).Name = Me.Aplicacion.Titulo Else If wb.Worksheets.Any(Function(x) x.Name = Me.Aplicacion.Lineas(i - 1).NombreTablaBase) Then wb.Worksheets(i).Name = (i - 1).ToString Else wb.Worksheets(i).Name = Me.Aplicacion.Lineas(i - 1).NombreTablaBase End If End If If i < ms.Count - 1 Then wb.Worksheets.Add() Catch End Try Next Dim nc As Integer = 0 For Each c In Me.Aplicacion.ControlesTS Try Select Case c.Content.GetType Case GetType(CheckEdit) Dim Ce As CheckEdit = c.Content wb.Worksheets(0).Cells(1, nc).SetValue(If(Ce.IsChecked, "SI", "NO")) Case GetType(ButtonEdit) Dim te As ButtonEdit = c.Content wb.Worksheets(0).Cells(1, nc).SetValue(te.EditValue) Case GetType(TextEdit) Dim te As TextEdit = c.Content wb.Worksheets(0).Cells(1, nc).SetValue(te.EditValue) Case GetType(DateEdit) Dim de As DateEdit = c.Content wb.Worksheets(0).Cells(1, nc).SetValue(de.EditValue) Case GetType(ComboBoxEdit) Dim cbe As ComboBoxEdit = c.Content wb.Worksheets(0).Cells(1, nc).SetValue(cbe.DisplayText) Case GetType(DevExpress.Xpf.Grid.LookUp.LookUpEdit) Dim le As DevExpress.Xpf.Grid.LookUp.LookUpEdit = c.Content wb.Worksheets(0).Cells(1, nc).SetValue(le.EditValue) End Select nc += 1 Catch End Try Next wb.SaveDocument(sfd.FileName, formato) Process.Start(sfd.FileName) End If End Sub Private Sub bePlantilla_GotFocus(sender As Object, e As RoutedEventArgs) Handles bePlantilla.GotFocus Dim oa = Me.Aplicacion.ObjetoActual Dim be As BaseEdit = Nothing Try be = LayoutHelper.FindParentObject(Of BaseEdit)(oa) Catch ex As Exception End Try If Not be Is Nothing Then Select Case be.GetType Case GetType(TextEdit), GetType(PasswordBoxEdit), GetType(ButtonEdit), GetType(DateEdit), GetType(ComboBoxEdit), GetType(DevExpress.Xpf.Grid.LookUp.LookUpEdit) Dim expression = be.GetBindingExpression(BaseEdit.EditValueProperty) If Configuracion.ComportamientoValidacion = Validation.InvalidValueBehavior.AllowLeaveEditor Then be.DoValidate() If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() Else If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() be.DoValidate() End If Case GetType(CheckEdit) End Select End If End Sub Private Sub beAcciones_GotFocus(sender As Object, e As RoutedEventArgs) Handles beAcciones.GotFocus Dim oa = Me.Aplicacion.ObjetoActual Dim be As BaseEdit = Nothing Try be = LayoutHelper.FindParentObject(Of BaseEdit)(oa) Catch ex As Exception End Try If Not be Is Nothing Then Select Case be.GetType Case GetType(TextEdit), GetType(PasswordBoxEdit), GetType(ButtonEdit), GetType(DateEdit), GetType(ComboBoxEdit), GetType(DevExpress.Xpf.Grid.LookUp.LookUpEdit) Dim expression = be.GetBindingExpression(BaseEdit.EditValueProperty) If Configuracion.ComportamientoValidacion = Validation.InvalidValueBehavior.AllowLeaveEditor Then be.DoValidate() If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() Else If Not expression Is Nothing AndAlso expression.IsDirty Then expression.UpdateSource() be.DoValidate() End If Case GetType(CheckEdit) End Select End If End Sub End Class Public Class DiseñoRejillas Property Rejillas As New List(Of DiseñoRejilla) Property Version As String End Class Public Class DiseñoRejilla Public Diseño() As Byte Public Version As String Public Nombre As String End Class