Files
SanchoToro/GestionGrupoSanchoToro/Informes/ucPlantillas.xaml.vb
2026-01-23 12:45:41 +01:00

402 lines
16 KiB
VB.net

Imports bdGrupoSanchoToro.db
Imports System.Data.Entity
Imports DevExpress.Xpf.Core.ServerMode
Imports DevExpress.Xpf.Core
Imports DevExpress.XtraReports.UserDesigner
Imports DevExpress.XtraReports.UI
Imports System.IO
Imports DevExpress.Xpf.Grid
Imports DevExpress.Xpf.RichEdit
Imports DevExpress.Office.Services
Imports System.ComponentModel
Imports tsWPFCore
Imports DevExpress.Xpf.Docking
Imports DevExpress.Xpf.Reports.UserDesigner
Imports DevExpress.Xpf.Reports.UserDesigner.Native
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq
Imports System.Text
Imports System.Windows
Imports System.Collections
Imports bdGrupoSanchoToro.db.Utilidades
Imports bdGrupoSanchoToro.dbcontext
Public Class ucPlantillas
Private bd As bdGrupoSanchoToro.tscGrupoSanchoToro
Private PlantillaActual As plantillas
Private WithEvents bplas As BindingList(Of plantillas)
' Private mdiController As XRDesignMdiController
'Public Overrides ReadOnly Property CampoIndice As String
' Get
' Return ""
' End Get
'End Property
Public Overrides ReadOnly Property idRegistroAplicacionActual As String
Get
Return "Plantillas"
End Get
End Property
Public Overrides ReadOnly Property DescripcionRegistro As String
Get
Return "Plantillas"
End Get
End Property
Public Overrides ReadOnly Property NombreTablaBase As String
Get
Return "plantillas"
End Get
End Property
Private Sub tvPlantillas_InitNewRow(sender As Object, e As DevExpress.Xpf.Grid.InitNewRowEventArgs)
' e.Source = New plantillas
GC.SetCellValue(e.RowHandle, "Oculto", False)
gc.SetCellValue(e.RowHandle, "TipoListado", False)
gc.SetCellValue(e.RowHandle, "idEmpresa", EmpresaActual.idEmpresa)
'e.Handled = True
End Sub
Private Sub btEditar_Click(sender As Object, e As RoutedEventArgs)
Dim pl As plantillas
If GC.View.FocusedRowHandle = DataControlBase.NewItemRowHandle Then
pl = GC.GetRow(DataControlBase.NewItemRowHandle)
GC.View.CommitEditing(True)
Else
GC.View.CommitEditing(True)
pl = Me.gc.GetFocusedRow
End If
If pl.idGrupo <> 0 Then
EditarPlantilla(pl)
Else
DXMessageBox.Show("La columna Grupo de plantilla es obligatoria", "Atención", MessageBoxButton.OK, MessageBoxImage.Exclamation)
End If
End Sub
Private Sub EditarPlantilla(pl As bdGrupoSanchoToro.db.plantillas)
Try
If pl.idPlantilla > 0 Then
bd = tscGrupoSanchoToro.NuevoContexto
pl = bd.plantillas.First(Function(X) X.idPlantilla = pl.idPlantilla)
End If
PlantillaActual = pl
Select Case PlantillaActual.idGrupoNavigation.Codigo
'Case "GRUPLA.CERTIFICADOS"
' Dim tsEditor As tsWPFCore.dxwEditor
' If pl.idFichero.HasValue AndAlso pl.idFicheroNavigation.Fichero IsNot Nothing Then
' ' tsEditor = New tsWPFCore.dxwEditor(New IO.MemoryStream(pl.idFicheroNavigation.Fichero), DevExpress.XtraRichEdit.DocumentFormat.OpenXml, DevExpress.XtraRichEdit.DocumentFormat.OpenXml, AddressOf Guardar, AddressOf CargarDatosMailMergeCertificados)
' Else
' ' tsEditor = New tsWPFCore.dxwEditor(Nothing, DevExpress.XtraRichEdit.DocumentFormat.OpenXml, DevExpress.XtraRichEdit.DocumentFormat.OpenXml, AddressOf Guardar, AddressOf CargarDatosMailMergeCertificados)
' End If
' tsEditor.ShowDialog()
Case "GRUPLA.DOCX"
Dim tsEditor As tsWPFCore.dxwEditor
If pl.idFichero.HasValue AndAlso pl.idFicheroNavigation.Fichero IsNot Nothing Then
tsEditor = New tsWPFCore.dxwEditor(New IO.MemoryStream(pl.idFicheroNavigation.Fichero), DevExpress.XtraRichEdit.DocumentFormat.OpenXml, DevExpress.XtraRichEdit.DocumentFormat.OpenXml, AddressOf GuardarPlantilla)
Else
tsEditor = New tsWPFCore.dxwEditor(Nothing, DevExpress.XtraRichEdit.DocumentFormat.OpenXml, DevExpress.XtraRichEdit.DocumentFormat.OpenXml, AddressOf GuardarPlantilla)
End If
tsEditor.ShowDialog()
Case "GRUPLA.ODT"
Dim tsEditor As tsWPFCore.dxwEditor
If pl.idFichero.HasValue AndAlso pl.idFicheroNavigation.Fichero IsNot Nothing Then
tsEditor = New tsWPFCore.dxwEditor(New IO.MemoryStream(pl.idFicheroNavigation.Fichero), DevExpress.XtraRichEdit.DocumentFormat.OpenDocument, DevExpress.XtraRichEdit.DocumentFormat.OpenDocument, AddressOf GuardarPlantilla)
Else
tsEditor = New tsWPFCore.dxwEditor(Nothing, DevExpress.XtraRichEdit.DocumentFormat.OpenDocument, DevExpress.XtraRichEdit.DocumentFormat.OpenDocument, AddressOf GuardarPlantilla)
End If
tsEditor.ShowDialog()
Case Else
' Dim fr = New InformesCOAS.xrFactura
Dim xr As New XtraReport
Try
If pl.idFichero.HasValue = False OrElse pl.idFicheroNavigation.Fichero Is Nothing Then
xr = New XtraReport
Else
xr.LoadLayoutFromXml(New MemoryStream(pl.idFicheroNavigation.Fichero))
End If
Me.Guardar(Nothing, Nothing, True, False)
Dim vi As New tsWPFCore.ucDiseñadorInformes(xr, pl.idPlantilla, AddressOf GuardarWPF)
Dim GrupoDocumentos = Me.GrupoDocumentos
Dim dc = tsWPFCore.Comun.dm.DockController
Dim docpanel As DevExpress.Xpf.Docking.DocumentPanel
Dim d = (From p In GrupoDocumentos.Items Where p.Tag = "Plantilla." & pl.idPlantilla.ToString)
If d.Count > 0 Then
docpanel = d.First
Else
docpanel = New DevExpress.Xpf.Docking.DocumentPanel
docpanel.Caption = pl.Descripcion
docpanel.Content = vi
docpanel.ClosingBehavior = DevExpress.Xpf.Docking.ClosingBehavior.ImmediatelyRemove
docpanel.Tag = "Plantilla." & pl.idPlantilla.ToString
GrupoDocumentos.Items.Add(docpanel)
End If
dc.Activate(docpanel)
Catch ex As Exception
DXMessageBox.Show(ex.Message, "Error ucPlantillas.EditarPlantilla")
'Comun.GeneraRegistroCorreoExcepcion(bd, ex, "ucPlantillas.EditarPlantilla")
Finally
'xr.Dispose()
'xr = Nothing
'System.GC.Collect()
'System.GC.WaitForFullGCComplete()
End Try
End Select
Catch ex As Exception
DXMessageBox.Show(ex.Message, "Error")
End Try
End Sub
Private Sub GuardarPlantilla(ms As MemoryStream)
Me.Guardar(Nothing, Nothing, True, False)
If PlantillaActual.idFichero.HasValue = False Then
Dim idTipoPlantilla = bd.enumeraciones.Where(Function(x) x.Codigo = "TIPFIC.PLANTILLA").First.idEnumeracion
PlantillaActual.idFicheroNavigation = New ficheros With {.idTipo = idTipoPlantilla}
End If
Dim sextension As String
Select Case PlantillaActual.idGrupoNavigation.Codigo
Case "GRUPLA.ODT"
sextension = ".odt"
Case "GRUPLA.XHTML"
sextension = ".xhtml"
'Case "GRUPLA.NOMINASWORD"
' sextension = ".odt"
Case "GRUPLA.DOCX"
sextension = ".docx"
Case Else
sextension = ".xml"
End Select
PlantillaActual.idFicheroNavigation.Fichero = ms.ToArray
PlantillaActual.idFicheroNavigation.Fecha = Now
PlantillaActual.idFicheroNavigation.Descripcion = PlantillaActual.Descripcion
PlantillaActual.idFicheroNavigation.NombreFichero = PlantillaActual.idPlantilla.ToString & sextension
bd.GuardarCambios()
End Sub
Private Sub CopiarPlantilla(sender As Object, e As RoutedEventArgs)
Try
Dim ra As bdGrupoSanchoToro.db.plantillas = Me.gc.CurrentItem
Dim np As New plantillas
Dim i As Integer = 1
Do
np.Descripcion = "Copia " & i.ToString & " " & ra.Descripcion
i += 1
Loop Until Not bd.plantillas.ToList.Any(Function(x) x.Descripcion = np.Descripcion)
If ra.Codigo IsNot Nothing Then
i = 1
Do
np.Codigo = ra.Codigo & "-" & i.ToString
i += 1
Loop Until Not bd.plantillas.ToList.Any(Function(x) x.Codigo = np.Codigo)
End If
np.idGrupo = ra.idGrupo
np.Observaciones = ra.Observaciones
np.Oculta = ra.Oculta
np.TipoListado = ra.TipoListado
bd.plantillas.Add(np)
bd.GuardarCambios()
Dim idTipoPlantilla = bd.enumeraciones.Where(Function(x) x.Codigo = "TIPFIC.PLANTILLA").First.idEnumeracion
np.idFicheroNavigation = New ficheros With {.idTipo = idTipoPlantilla}
Dim sextension As String
Select Case ra.idGrupoNavigation.Codigo
Case "GRUPLA.XHTML"
sextension = ".xhtml"
Case "GRUPLA.ODT"
sextension = ".odt"
Case "GRUPLA.DOCX"
sextension = ".docx"
Case Else
sextension = ".xml"
End Select
np.idFicheroNavigation.Fichero = ra.idFicheroNavigation.Fichero
np.idFicheroNavigation.Fecha = Now
np.idFicheroNavigation.Descripcion = np.Descripcion
np.idFicheroNavigation.NombreFichero = np.idPlantilla.ToString & sextension
bd.GuardarCambios()
EstableceDCPrincipal()
Catch ex As Exception
DXMessageBox.Show(ex.Message, "Error")
End Try
End Sub
Private Sub bplas_ListChanged(sender As Object, e As ListChangedEventArgs) Handles bplas.ListChanged
If e.ListChangedType = ListChangedType.ItemAdded Then
bd.plantillas.Add(DirectCast(bplas.Item(e.NewIndex), plantillas))
End If
End Sub
Private Sub gc_DespuesEliminar(gc As tsWPFCore.tsGridControl) Handles gc.DespuesEliminar
bplas.Remove(gc.CurrentItem)
Me.bd.GuardarCambios()
End Sub
Private Sub tvPlantillas_ValidateRow(sender As Object, e As GridRowValidationEventArgs) Handles tvPlantillas.ValidateRow
Try
ErroresValidacion.EliminaError("DatosDuplicados")
Dim pl As plantillas
If tvPlantillas.FocusedRowHandle = DataControlBase.NewItemRowHandle Then
pl = gc.GetRow(DataControlBase.NewItemRowHandle)
Else
pl = gc.CurrentItem
End If
If pl.idPlantilla = 0 Then
If bplas.Where(Function(x) x.Descripcion = pl.Descripcion).Count > 1 OrElse bd.plantillas.Any(Function(x) x.Descripcion = pl.Descripcion) Then
e.IsValid = False
' Debug.WriteLine("bplas:" & bplas.Any(Function(x) x.Descripcion = pl.Descripcion).ToString)
' Debug.WriteLine("bd:" & bd.plantillas.Any(Function(x) x.Descripcion = pl.Descripcion).ToString)
End If
If pl.Codigo IsNot Nothing AndAlso pl.Codigo <> "" Then
If bplas.Where(Function(x) x.Codigo = pl.Codigo).Count > 1 OrElse bd.plantillas.Any(Function(x) x.Codigo = pl.Codigo) Then
e.IsValid = False
End If
End If
Else
If bd.plantillas.Any(Function(x) x.idPlantilla <> pl.idPlantilla AndAlso (x.Descripcion = pl.Descripcion)) Then
e.IsValid = False
End If
If pl.Codigo IsNot Nothing AndAlso pl.Codigo <> "" Then
If bplas.Where(Function(x) x.Codigo = pl.Codigo).Count > 1 OrElse bd.plantillas.Any(Function(x) x.idPlantilla <> pl.idPlantilla AndAlso x.Codigo = pl.Codigo) Then
e.IsValid = False
End If
End If
End If
If Not e.IsValid Then
e.SetError("Nombre de Plantilla o Codigo ya utilizado")
DXMessageBox.Show("Nombre de Plantilla o Codigo ya utilizado", "Error")
End If
bd.GuardarCambios()
Catch EX As Exception
e.SetError(EX.Message)
e.IsValid = False
DXMessageBox.Show(EX.Message, "Error")
End Try
End Sub
Public Shared Sub GuardarWPF(b() As Byte, idPlantilla As Integer)
Dim bd = tscGrupoSanchoToro.NuevoContexto()
Dim plantilla = bd.plantillas.First(Function(X) X.idPlantilla = idPlantilla)
bd.GuardarCambios()
If plantilla.idFichero.HasValue = False Then
Dim idTipoPlantilla = bd.enumeraciones.Where(Function(x) x.Codigo = "TIPFIC.PLANTILLA").First.idEnumeracion
plantilla.idFicheroNavigation = New ficheros With {.idTipo = idTipoPlantilla}
End If
Dim sextension As String
Select Case plantilla.idGrupoNavigation.Codigo
Case "GRUPLA.XHTML"
sextension = ".xhtml"
Case "GRUPLA.DOCX"
sextension = ".docx"
Case Else
sextension = ".xml"
End Select
plantilla.idFicheroNavigation.Fichero = b
plantilla.idFicheroNavigation.Fecha = Now
plantilla.idFicheroNavigation.Descripcion = plantilla.Descripcion
plantilla.idFicheroNavigation.NombreFichero = plantilla.idPlantilla.ToString & sextension
bd.GuardarCambios()
End Sub
Public Overrides Function EstableceDCPrincipal(Optional Background As Boolean = False, Optional FuerzaNuevo As Boolean = False, Optional Refrescar As Boolean = False) As tsUtilidades.EstadosAplicacion
Try
Dim gptmp = (From e In bd.enumeraciones Select e Where e.idGrupoEnumeracionNavigation.Grupo = "GRUPLA").ToList
Dim gp As New List(Of bdGrupoSanchoToro.db.enumeraciones)
For Each g In gptmp
If Comun.ObtienePermisos(bd, g.Codigo, idUsuario).Impresion Then
gp.Add(g)
End If
Next
Me.cbGrupo.ItemsSource = gp
Me.cbPermiso.ItemsSource = bd.permisos.ToList
Dim plas = bd.plantillas.ToList.Where(Function(p) gp.Any(Function(x) x.Codigo = p.idGrupoNavigation.Codigo)).ToList
Me.gc.DataContext = bd
bplas = New BindingList(Of plantillas)(plas)
Me.gc.ItemsSource = bplas
Return tsUtilidades.EstadosAplicacion.SinDatos
Catch ex As Exception
Throw New Exception(ex.Message, ex)
End Try
End Function
Public Overrides Sub EstableceDataContextSecundarios(Optional Background As Boolean = False)
End Sub
Public Overrides Sub EstableceTitulo()
Me.docpanel.Caption = "Plantillas"
Me.docpanel.Tag = "Plantillas"
End Sub
Public Overrides Sub Cargado()
Me.ContenedorAplicacion.btNuevo.IsVisible = False
Me.ContenedorAplicacion.siEstado.IsVisible = False
If bd.usuarios.First(Function(x) x.idUsuario = bdGrupoSanchoToro.db.Utilidades.idUsuario).idGrupoNavigation.Descripcion.ToLower = "administradores" Then
Me.gcPermiso.Visible = True
Me.gcCodigo.Visible = True
Me.gcEditar.VisibleIndex = Me.gc.Columns.Count
End If
Dim mi As New MenuItem()
mi.Header = "Copiar Plantilla"
AddHandler mi.Click, AddressOf CopiarPlantilla
Me.gc.ContextMenu.Items.Add(mi)
End Sub
Public Overrides Function ObtieneBD() As tsUtilidades.ItsContexto
bd = tscGrupoSanchoToro.NuevoContexto()
Return bd
End Function
Public Overrides Function ObtienePermisos() As tsUtilidades.Permisos
Return Comun.ObtienePermisos(Me.bd, "AP.SUPERADMINISTRADORES", idUsuario)
End Function
End Class