Imports System.Data.Entity Imports DevExpress.Xpf.Core.ServerMode Imports bdGrupoSanchoToro Imports DevExpress.Xpf.Grid Imports DevExpress.Xpf.Core Imports System.Linq.Dynamic Imports DevExpress.Xpf.Bars Imports tsUtilidades.Datos Imports tsWPF Imports DevExpress.Data Imports tsWPF.Comun Imports tsWPFCore.Comun Imports tsWPFCore Imports tsUtilidades Imports bdGrupoSanchoToro.db Imports bdGrupoSanchoToro.db.Utilidades Public Class ucBalanceSumasYSaldos Private TotalGastos As Double Private TotalIngresos As Double Dim bd As tscGrupoSanchoToro ' Private _Ejercicios As List(Of Integer) ' Private _NivelCuentas As Integer Public Overrides ReadOnly Property idRegistroAplicacionActual As String Get Return "BalanceSumasYSaldos" & _Nivel.ToString End Get End Property Public Overrides ReadOnly Property DescripcionRegistro As String Get Return "Cuentas" End Get End Property Public Overrides ReadOnly Property NombreTablaBase As String Get Return "Cuentas" End Get End Property Public Overrides Sub EstableceDataContextSecundarios(Optional Background As Boolean = False) End Sub Public Overrides Sub EstableceTitulo() Me.docpanel.Caption = "Balance de Sumas y Saldos (" & _Nivel.ToString & " DÍGITOS)" End Sub Private _Nivel As Integer Public Overrides Sub Cargado() _Nivel = CInt(tsUtilidades.Utilidades.Ttagi(Me.OtrosParametros, "OPAR")) Dim Ejercicios = bd.ejercicioscontables.OrderByDescending(Function(x) x.FechaInicio).ToList Dim ejab = Ejercicios.Where(Function(x) x.FechaCierre Is Nothing) deFechaInicio.EditValue = ejab.OrderBy(Function(x) x.FechaInicio).First.FechaInicio deFechaFin.EditValue = ejab.OrderByDescending(Function(x) x.FechaFin).First.FechaFin End Sub Public Overrides Function EstableceDCPrincipal(Optional Background As Boolean = False, Optional FuerzaNuevo As Boolean = False, Optional Refrescar As Boolean = False) As EstadosAplicacion Return EstadosAplicacion.AplicacionSinIndice End Function Public Overrides Function ObtieneBD() As tsUtilidades.ItsContexto bd = tscGrupoSanchoToro.NuevoContexto() Return bd End Function 'Public Overrides Function ObtieneConexionBD() As BBDD ' Return bdCOASVD.GestionAsegasaEntities.bdga 'End Function Public Overrides Function ObtienePermisos() As tsUtilidades.Permisos Return Comun.ObtienePermisos(Me.bd, "AP.CONTABILIDAD", idUsuario) End Function Public Sub New() ' Esta llamada es exigida por el diseñador. InitializeComponent() 'Me.lgFiltrosBusquedaRapida.Visibility = Visibility.Collapsed 'Me.lgFiltrosBusquedaAvanzada.Visibility = Visibility.Visible ' Agregue cualquier inicialización después de la llamada a InitializeComponent(). End Sub Public Function ObtieneApuntes(BackGround As Boolean, FechaInicio As DateOnly, FechaFin As DateOnly, Nivel As Integer, IncluirAsientoRegularizacion As Boolean) As List(Of CuentaBalanceSumasYSaldos) Dim parametros(0) As Object Dim iNumExc As Integer = 0 Dim lcbe As New List(Of CuentaBalanceSumasYSaldos) Do Try Dim ctas = bd.cuentas.Where(Function(x) ((x.idEjercicioNavigation.FechaInicio <= FechaInicio And FechaInicio <= x.idEjercicioNavigation.FechaFin) OrElse (FechaInicio <= x.idEjercicioNavigation.FechaInicio And FechaFin >= x.idEjercicioNavigation.FechaInicio)) And x.NumeroCuenta.Length = Nivel).ToList() 'Dim ctas = bd.cuentas.Where(Function(x) x.NumeroCuenta.Length = Nivel).GroupBy(Function(x) x.NumeroCuenta).Select(Function(x) x.OrderByDescending(Function(y) y.ejercicioscontables.FechaInicio).FirstOrDefault).Select(Function(x) New With {.NumeroCuenta = x.NumeroCuenta, .Denominacion = x.Denominacion}) Dim fit1 As DateOnly = New DateOnly(FechaInicio.Year, 1, 1) Dim fit2 As DateOnly = New DateOnly(FechaInicio.Year, 4, 1) Dim fit3 As DateOnly = New DateOnly(FechaInicio.Year, 7, 1) Dim fit4 As DateOnly = New DateOnly(FechaInicio.Year, 10, 1) Dim fft1 As DateOnly = New DateOnly(FechaInicio.Year, 3, 31) Dim fft2 As DateOnly = New DateOnly(FechaInicio.Year, 6, 30) Dim fft3 As DateOnly = New DateOnly(FechaInicio.Year, 9, 30) Dim fft4 As DateOnly = New DateOnly(FechaInicio.Year, 12, 31) Dim ff As DateOnly = If(fft4 > FechaFin, fft4, FechaFin) If Nivel = 8 Then Dim FechaInicioPeriodo As New DateOnly(FechaInicio.Year, 1, 1) Dim iqApuntes As IQueryable(Of apuntes) If IncluirAsientoRegularizacion Then iqApuntes = bd.apuntes.Include("asientos").AsQueryable Else iqApuntes = bd.apuntes.Include("asientos").Where(Function(x) x.idAsientoNavigation.Tipo <> asientos.TipoAsiento.REGULARIZACION) End If lcbe = iqApuntes.Where(Function(x) x.idAsientoNavigation.Fecha >= FechaInicioPeriodo AndAlso x.idAsientoNavigation.Fecha <= ff).ToList.GroupBy(Function(x) New With {Key .Cta = x.idCuentaNavigation.NumeroCuenta}) _ .Select(Function(g) New CuentaBalanceSumasYSaldos With {.Cuenta = g.Key.Cta, .Denominacion = ctas.FirstOrDefault(Function(c) c.NumeroCuenta = g.Key.Cta).Denominacion, .Debe = g.Where(Function(x) x.idAsientoNavigation.Fecha >= FechaInicio AndAlso x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(y) y.Debe), .Haber = g.Where(Function(x) x.idAsientoNavigation.Fecha >= FechaInicio AndAlso x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(y) y.Haber), .DebeAcumulado = g.Where(Function(x) x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(x) x.Debe), .HaberAcumulado = g.Where(Function(x) x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(x) x.Haber), .DebeT1 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit1 AndAlso x.idAsientoNavigation.Fecha <= fft1).Sum(Function(y) y.Debe), .HaberT1 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit1 AndAlso x.idAsientoNavigation.Fecha <= fft1).Sum(Function(y) y.Haber), .DebeT2 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit2 AndAlso x.idAsientoNavigation.Fecha <= fft2).Sum(Function(y) y.Debe), .HaberT2 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit2 AndAlso x.idAsientoNavigation.Fecha <= fft2).Sum(Function(y) y.Haber), .DebeT3 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit3 AndAlso x.idAsientoNavigation.Fecha <= fft3).Sum(Function(y) y.Debe), .HaberT3 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit3 AndAlso x.idAsientoNavigation.Fecha <= fft3).Sum(Function(y) y.Haber), .DebeT4 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit4 AndAlso x.idAsientoNavigation.Fecha <= fft4).Sum(Function(y) y.Debe), .HaberT4 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit4 AndAlso x.idAsientoNavigation.Fecha <= fft4).Sum(Function(y) y.Haber) }).OrderBy(Function(x) x.Cuenta).ToList Else Dim FechaInicioPeriodo As New DateOnly(FechaInicio.Year, 1, 1) Dim iqApuntes As IQueryable(Of apuntes) If IncluirAsientoRegularizacion Then iqApuntes = bd.apuntes.Include("asientos").AsQueryable Else iqApuntes = bd.apuntes.Include("asientos").Where(Function(x) x.idAsientoNavigation.Tipo <> asientos.TipoAsiento.REGULARIZACION) End If lcbe = iqApuntes.Where(Function(x) x.idAsientoNavigation.Fecha >= FechaInicioPeriodo And x.idAsientoNavigation.Fecha <= ff).ToList.GroupBy(Function(x) New With {Key .CtaSuperior = x.idCuentaNavigation.NumeroCuenta.Substring(0, Nivel)}) _ .Select(Function(g) New CuentaBalanceSumasYSaldos With {.Cuenta = g.Key.CtaSuperior, .Denominacion = ctas.FirstOrDefault(Function(c) c.NumeroCuenta = g.Key.CtaSuperior).Denominacion, .Debe = g.Where(Function(x) x.idAsientoNavigation.Fecha >= FechaInicio AndAlso x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(y) y.Debe), .Haber = g.Where(Function(x) x.idAsientoNavigation.Fecha >= FechaInicio AndAlso x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(y) y.Haber), .DebeAcumulado = g.Where(Function(x) x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(x) x.Debe), .HaberAcumulado = g.Where(Function(x) x.idAsientoNavigation.Fecha <= FechaFin).Sum(Function(x) x.Haber), .DebeT1 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit1 AndAlso x.idAsientoNavigation.Fecha <= fft1).Sum(Function(y) y.Debe), .HaberT1 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit1 AndAlso x.idAsientoNavigation.Fecha <= fft1).Sum(Function(y) y.Haber), .DebeT2 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit2 AndAlso x.idAsientoNavigation.Fecha <= fft2).Sum(Function(y) y.Debe), .HaberT2 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit2 AndAlso x.idAsientoNavigation.Fecha <= fft2).Sum(Function(y) y.Haber), .DebeT3 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit3 AndAlso x.idAsientoNavigation.Fecha <= fft3).Sum(Function(y) y.Debe), .HaberT3 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit3 AndAlso x.idAsientoNavigation.Fecha <= fft3).Sum(Function(y) y.Haber), .DebeT4 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit4 AndAlso x.idAsientoNavigation.Fecha <= fft4).Sum(Function(y) y.Debe), .HaberT4 = g.Where(Function(x) x.idAsientoNavigation.Fecha >= fit4 AndAlso x.idAsientoNavigation.Fecha <= fft4).Sum(Function(y) y.Haber) }).OrderBy(Function(x) x.Cuenta).ToList End If Exit Do Catch ex As Exception If BackGround = False Then Throw New Exception(ex.Message, ex) iNumExc += 1 If iNumExc > 3 Then Throw New Exception(ex.Message, ex) End If End Try Loop Return lcbe End Function Public Async Sub ObtieneApuntesAsync(bd As tscGrupoSanchoToro, Background As Boolean) Try Dim rs As New List(Of CuentaBalanceSumasYSaldos) Dim fi, ff As DateOnly? fi = deFechaInicio.EditValue ff = deFechaFin.EditValue If Background Then If fi.HasValue AndAlso ff.HasValue Then Me.ContenedorAplicacion.IsEnabled = False Await Task.Run(Sub() rs = ObtieneApuntes(Background, fi, ff, _Nivel, cbIncluirAsientoApertura.IsChecked) End Sub) End If Else If fi.HasValue = False OrElse ff.HasValue = False Then DXMessageBox.Show("Las fechas de inicio y fin son obligatorias", "Atención") Else If fi.Value.Year <> ff.Value.Year Then DXMessageBox.Show("Atención los ejercicios contables desde la fecha de inicio a la de fin son diferentes por lo que los datos trimestrales solo serán del primer año", "Atención") End If If DXSplashScreen.IsActive = False Then DXSplashScreen.Show(Of tsWPFCore.SplashScreenTecnosis)() DXSplashScreen.SetState("Buscando Apuntes ...") rs = ObtieneApuntes(Background, fi, ff, _Nivel, cbIncluirAsientoApertura.IsChecked) End If End If gc.ItemsSource = rs DataContext = rs gc.ExpandAllGroups() Catch ex As Exception If DXSplashScreen.IsActive Then DXSplashScreen.Close() DXMessageBox.Show(ex.Message, "Error") Finally Me.ContenedorAplicacion.IsEnabled = True If DXSplashScreen.IsActive Then DXSplashScreen.Close() End Try End Sub Private Sub Nuevo() Handles Me.BotonNuevoPulsado FuncionesDinamicas.AbrirAP(New ucCuenta, OtrosParametros) End Sub Private Sub ApLineas_Enlazar(Celda As EditGridCellData, Defecto As Boolean) Handles Me.Enlazar Dim id As Integer = DirectCast(Me.gc.CurrentItem, cuentas).idCuenta Dim uc As New ucCuenta(id) FuncionesDinamicas.AbrirAP(New ucCuenta(id), OtrosParametros) End Sub Private Sub BtBuscar_Click(sender As Object, e As RoutedEventArgs) ObtieneApuntesAsync(bd, False) End Sub End Class Public Class CuentaBalanceSumasYSaldos Property Cuenta As String Property Denominacion As String Property Debe As Double Property Haber As Double ReadOnly Property Saldo As Double Get Return Math.Round(Debe - Haber, 2, MidpointRounding.AwayFromZero) End Get End Property Property DebeT1 As Double Property HaberT1 As Double ReadOnly Property SaldoT1 As Double Get Return Math.Round(DebeT1 - HaberT1, 2, MidpointRounding.AwayFromZero) End Get End Property Property DebeT2 As Double Property HaberT2 As Double ReadOnly Property SaldoT2 As Double Get Return Math.Round(DebeT2 - HaberT2, 2, MidpointRounding.AwayFromZero) End Get End Property Property DebeT3 As Double Property HaberT3 As Double ReadOnly Property SaldoT3 As Double Get Return Math.Round(DebeT3 - HaberT3, 2, MidpointRounding.AwayFromZero) End Get End Property Property DebeT4 As Double Property HaberT4 As Double ReadOnly Property SaldoT4 As Double Get Return Math.Round(DebeT4 - HaberT4, 2, MidpointRounding.AwayFromZero) End Get End Property Property DebeAcumulado As Double Property HaberAcumulado As Double ReadOnly Property SaldoAcumulado As Double Get Return Math.Round(DebeAcumulado - HaberAcumulado, 2, MidpointRounding.AwayFromZero) End Get End Property End Class