Imports DevExpress.Xpf.Editors Imports DevExpress.Xpf.LayoutControl Imports tsWPF Imports System.ComponentModel Imports System.Data Imports DevExpress.Xpf.Editors.Validation Imports DevExpress.Xpf.Editors.Helpers Imports DevExpress.Xpf.Core Imports tsWPF.modExtensiones Imports System.Data.Common Imports System.Data.Entity Imports bdGrupoSanchoToro Imports tsUtilidades.Datos Imports DevExpress.Xpf.Bars Imports DevExpress.Xpf.Grid Imports System.IO Imports DevExpress.Spreadsheet Imports Microsoft.Win32 Imports System.Drawing Imports tsWPF.Comun Imports tsWPFCore.Comun Imports tsWPFCore Imports tsUtilidades Imports bdGrupoSanchoToro.db Imports bdGrupoSanchoToro.db.Utilidades Public Class ucInformeContables Private bd As tscGrupoSanchoToro Friend _idInforme As Nullable(Of Integer) ' Public Overrides Sub Cargado() Me.Tipo_ucControlBusqueda = GetType(ucInformesContables) End Sub Public Overrides Function EstablecedcPrincipal(Optional Background As Boolean = False, Optional FuerzaNuevo As Boolean = False, Optional Refrescar As Boolean = False) As EstadosAplicacion Dim NuevoEstado As EstadosAplicacion Dim ra As informescontables If FuerzaNuevo OrElse _idInforme Is Nothing Then ra = New bdGrupoSanchoToro.db.informescontables 'ra.FechaApertura = Now.Date 'ra.Descripcion = Now.Year.ToString 'ra.FechaInicio = New Date(Now.Year, 1, 1) 'ra.FechaFin = New Date(Now.Year, 12, 31) 'ra.idEmpresa = bd.empresas.First(Function(x) x.FechaBaja.HasValue = False).idEmpresaContable Me.DataContext = ra _idInforme = Nothing ' ra.idEjercicio = Nothing NuevoEstado = EstadosAplicacion.Nuevo Else ra = bd.informescontables.First(Function(x) x.idInforme = _idInforme) NuevoEstado = EstadosAplicacion.ModificandoRegistro End If Me.DataContext = ra gcCeldas.ItemsSource = ra.celdasinformescontables 'gcCuentasCeldas.ItemsSource = ra.celdasinformescontables. Return NuevoEstado End Function Public Overrides Function ObtieneBD() As tsUtilidades.ItsContexto bd = tscGrupoSanchoToro.NuevoContexto() Return bd End Function Public Overrides ReadOnly Property NombreTablaBase As String Get Return "informescontables" End Get End Property Public Overrides ReadOnly Property idRegistroAplicacionActual As String Get If Estado = EstadosAplicacion.Nuevo Then Return "informescontables.Nuevo" Else Return "informescontables." & DirectCast(Me.DataContext, informescontables).idInforme.ToString End If End Get End Property Public Overrides ReadOnly Property DescripcionRegistro As String Get Return "Informe Contable" End Get End Property Public Sub New(Optional idInforme As Integer? = Nothing) ' Llamada necesaria para el diseñador. InitializeComponent() _idInforme = idInforme ' Agregue cualquier inicialización después de la llamada a InitializeComponent(). End Sub 'Public Sub EstableceAplicacion(ap As Aplicacion) Implements IAplicacion.EstableceAplicacion ' Me.ap = ap 'End Sub Public Overrides Sub EstableceTitulo() If Me.docpanel Is Nothing Then Dim w As dxwGenerica = Window.GetWindow(Me) w.Title = "Agregar nuevo informe" Else If Me.Estado = EstadosAplicacion.ModificandoRegistro Then Dim ej As informescontables = Me.DataContext Me.docpanel.Caption = "Informe " & ej.Descripcion Me.docpanel.Tag = "Informe." & ej.Descripcion Else Me.docpanel.Caption = "Informe Nuevo" Me.docpanel.Tag = "Informe.Nuevo" End If End If End Sub Public Overrides Function ObtienePermisos() As tsUtilidades.Permisos Return Comun.ObtienePermisos(Me.bd, "AP.CONTABILIDAD", idUsuario) End Function 'Public Overrides Function ObtieneConexionBD() As BBDD ' Return bdGrupoSanchoToro.gestionasegasaEntities.bdga 'End Function Private Sub ap_ValidarControl(sender As Object, e As ValidationEventArgs, ByRef ev As ErrorValidacion, ByRef ValorOriginalCambiado As Object) Handles Me.ValidarControl Dim pts As PropiedadesTS = sender.parent.propiedadests If Not pts Is Nothing Then Dim ra As informescontables = Me.DataContext ' Select Case pts.NombreCampo.ToLower ' End Select End If End Sub 'Private Sub ObtieneCuentas(ra As informescontables) ' 'Dim Nivel As Integer = cbNivel.EditValue ' 'Dim ctas = ra.cuentas.Where(Function(x) x.NumeroCuenta.Length = Nivel).ToList ' 'gcCuentas.ItemsSource = ctas 'End Sub 'Private Sub cbNivel_EditValueChanged(sender As Object, e As EditValueChangedEventArgs) Handles cbNivel.EditValueChanged ' Dim ra As ejercicioscontables = Me.DataContext ' ObtieneCuentas(ra) 'End Sub 'Private Sub HlAsientoRegularizacion_Click(sender As Object, e As RoutedEventArgs) ' Dim id = DirectCast(Me.DataContext, informescontables).AsientoRegularizacion.idAsiento ' Dim uc As New ucDiario ' FuncionesDinamicas.AbrirUcCL(uc, Comun.dwi.grupodoc, Nothing, Comun.dcfg, Comun.dcn, 0, bdGrupoSanchoToro.Utilidades.dsc, Comun.OtrosParametros, id) 'End Sub Public Overrides Sub EstableceDataContextSecundarios(Optional Background As Boolean = False) Dim Acciones As New List(Of tsWPFCore.Accion) 'Acciones.Add(New Accion With { ' .idAccion = 1, ' .Descripcion = "GENERA ASIENTO CIERRE Y DE APERTURA"}) 'Acciones.Add(New Accion With { ' .idAccion = 2, ' .Descripcion = "REENUMERA Nº ASIENTO OFICIAL"}) 'Acciones.Add(New Accion With { ' .idAccion = 3, ' .Descripcion = "GENERA BALANCE DE SITUACION"}) Me.cbCampos.ItemsSource = CampoInforme.ObtieneCamposInformes Me.ContenedorAplicacion.cbAcciones.ItemsSource = Acciones If Acciones.Count > 0 Then Me.ContenedorAplicacion.beAcciones.EditValue = Acciones.First.idAccion End Sub 'Private Sub HlAsientoApertura_Click(sender As Object, e As RoutedEventArgs) ' Dim id = DirectCast(Me.DataContext, informescontables).AsientoApertura.idAsiento ' Dim uc As New ucDiario ' FuncionesDinamicas.AbrirUcCL(uc, Comun.dwi.grupodoc, Nothing, Comun.dcfg, Comun.dcn, 0, bdGrupoSanchoToro.Utilidades.dsc, Comun.OtrosParametros, id) 'End Sub Private Sub ap_Enlazar(Celda As EditGridCellData, Defecto As Boolean) Handles Me.Enlazar Select Case Celda.Column.FieldName.ToLower 'Case "idCelda" ' Dim id As Integer = DirectCast(Me.gcGestiones.CurrentItem, asientos).idAsiento ' Dim uc As New ucDiario ' FuncionesDinamicas.AbrirUcCL(uc, Comun.dwi.grupodoc, Nothing, Comun.dcfg, Comun.dcn, 0, bdGrupoSanchoToro.Utilidades.dsc, Comun.OtrosParametros, id) End Select End Sub Private Sub ap_DespuesGuardar(sender As Object, e As ItemClickEventArgs, OpcionGuardado As Integer) Handles Me.DespuesGuardar Dim ra As informescontables = Me.DataContext _idInforme = ra.idInforme 'Dim NuevoInforme As informescontables = Me.DataContext '_idInforme = NuevoInforme.idInforme 'If NuevoInforme.FechaCierre.HasValue = False AndAlso NuevoInforme.FechaApertura.Year = Now.Year Then ' Dim ea = bd.ejercicioscontables.OrderByDescending(Function(x) x.FechaInicio).FirstOrDefault(Function(x) x.FechaInicio < NuevoInforme.FechaInicio) ' If DXMessageBox.Show("¿Desea copiar las cuentas del Ejercicio Anterior?", "Atención", vbYesNo) = MessageBoxResult.Yes Then ' CopiaCuentas(NuevoInforme) ' ap.RefrescaUC(True) ' End If 'End If End Sub Private Sub ap_EjecutarAccion(sender As Object, e As ItemClickEventArgs, idAccion As Integer) Handles Me.EjecutarAccion 'Select Case idAccion ' Case 1 ' GENERA ASIENTO DE CIERRE Y APERTURA ' GeneraAsientoRegularizacionYApertura() ' Case 2 ' REENUMERA ASIENTOS OFICIALES Y CIERRA EL EJERCCIO ' ReenumeraAsientosOficiales() ' Case 3 ' GeneraInformeContable("BALSIT") 'End Select End Sub Private Sub EstableceEstiloGrupo(rg As DevExpress.Spreadsheet.CellRange) Dim rgf As Formatting = rg.BeginUpdateFormatting rgf.Font.Bold = True rgf.Fill.BackgroundColor = Color.LightCyan rgf.Borders.BottomBorder.LineStyle = BorderLineStyle.DashDot rgf.Borders.TopBorder.LineStyle = BorderLineStyle.DashDot rgf.Borders.LeftBorder.LineStyle = BorderLineStyle.DashDot rgf.Borders.RightBorder.LineStyle = BorderLineStyle.DashDot End Sub Private Sub RutaDocumentoAdjunto_DefaultButtonClick(sender As Object, e As RoutedEventArgs) Handles RutaDocumentoAdjunto.DefaultButtonClick Dim ra As informescontables = Me.DataContext Dim ofd As New OpenFileDialog ofd.CheckPathExists = True ofd.Filter = "Documento .xlsx|*.xlsx" If ofd.ShowDialog Then Dim fic As db.ficheros If ra.idFicheroNavigation Is Nothing Then fic = New db.ficheros ra.idFicheroNavigation = fic Else fic = ra.idFicheroNavigation End If fic.NombreFichero = IO.Path.GetFileName(ofd.FileName) fic.Fichero = IO.File.ReadAllBytes(ofd.FileName) fic.Fecha = Now fic.idTipo = bd.enumeraciones.Where(Function(x) x.Codigo = "TIPFIC.PLANTILLA").First.idEnumeracion RutaDocumentoAdjunto.Text = IO.Path.GetFileName(ofd.FileName) End If End Sub Private Sub BiVerFicheroEscaneado_Click(sender As Object, e As RoutedEventArgs) Dim ra As informescontables = Me.DataContext If ra.idFicheroNavigation IsNot Nothing AndAlso ra.idFicheroNavigation.Fichero IsNot Nothing Then IO.File.WriteAllBytes("c:\tmp\" + ra.idFicheroNavigation.NombreFichero, ra.idFicheroNavigation.Fichero) Process.Start("c:\tmp\" + ra.idFicheroNavigation.NombreFichero) Else DXMessageBox.Show("No se ha asignado ningún documento externo", "Atención") End If End Sub Private Sub gcCeldas_CurrentItemChanged(sender As Object, e As CurrentItemChangedEventArgs) Handles gcCeldas.CurrentItemChanged Dim celdainformes As celdasinformescontables = CType(gcCeldas.CurrentItem, celdasinformescontables) If celdainformes IsNot Nothing Then gcCuentasCeldas.ItemsSource = celdainformes.cuentasceldasinformescontables Else gcCuentasCeldas.ItemsSource = Nothing End If End Sub 'Private Sub tvCuentasCeldas_CellValueChanged(sender As Object, e As CellValueChangedEventArgs) Handles tvCuentasCeldas.CellValueChanged ' Select Case e.Column.FieldName.ToLower ' Case "numerocuenta" ' Dim dre As cuentasceldasinformescontables = e.Row ' Dim valor As String = tvCuentasCeldas.Grid.GetCellValue(e.RowHandle, "NumeroCuenta") ' If (Not valor.Length = 0) OrElse (valor.Length > 4 And valor.Length < 8) OrElse valor.Length > 8 Then ' tvCuentasCeldas.Grid.SetCellValue(e.RowHandle, "NumeroCuenta", "") ' End If ' End Select 'End Sub Private Sub tvCuentasCeldas_ValidateRow(sender As Object, e As GridRowValidationEventArgs) Handles tvCuentasCeldas.ValidateRow Dim htErrores = New Hashtable Dim ap As cuentasceldasinformescontables = e.Row Dim valor As String = ap.NumeroCuenta If (Not valor.Length = 0) OrElse (valor.Length > 4 And valor.Length < 8) OrElse valor.Length > 8 Then htErrores.Add("CuentasCeldas", "El numero de cuenta tiene que tener longitud de 1,2,3,4 u 8 caratéres") End If If htErrores.Count > 0 Then If htErrores.Count > 0 Then Me.AgregaErroresTSGC(gcCuentasCeldas, htErrores, e) End Sub Private Sub tvCuentasCeldas_ValidateCell(sender As Object, e As GridCellValidationEventArgs) Handles tvCuentasCeldas.ValidateCell 'Dim ap As cuentasceldasinformescontables = tvCuentasCeldas.Grid.GetCellValue(e.RowHandle, "NumeroCuenta") If (e.Cell.Property = "NumeroCuenta") Then Dim valor As String = e.Value If (valor.Length = 0) OrElse ((valor.Length > 4 And valor.Length < 8) OrElse valor.Length > 8) Then e.ErrorContent = "El numero de cuenta tiene que tener longitud de 1,2,3,4 u 8 caratéres" e.IsValid = False End If End If End Sub End Class Public Class CampoInforme Property Campo As String Property Descripcion As String Public Shared Function ObtieneCamposInformes() As List(Of CampoInforme) Dim lc As New List(Of CampoInforme) lc.Add(New CampoInforme With {.Campo = "TOTALSALDO", .Descripcion = "TOTAL SALDO CUENTA"}) lc.Add(New CampoInforme With {.Campo = "TOTALSALDOEJANT", .Descripcion = "TOTAL SALDO CUENTA EJERCICIO ANTERIOR"}) lc.Add(New CampoInforme With {.Campo = "TOTALSALDOAC", .Descripcion = "TOTAL SALDO CUENTA (ANTES DE CIERRE)"}) lc.Add(New CampoInforme With {.Campo = "TOTALSALDOACEJANT", .Descripcion = "TOTAL SALDO CUENTA EJERCICIO ANTERIOR (ANTES DE CIERRE)"}) lc.Add(New CampoInforme With {.Campo = "EJERCICIO", .Descripcion = "EJERCICIO ACTUAL"}) lc.Add(New CampoInforme With {.Campo = "EJERCICIOANT", .Descripcion = "EJERCICIO ANTERIOR"}) Return lc End Function End Class