Ejemplo n.º 1
0
        public void RelacionAnalitica()
        {
            var cuentasFiltro = new CuentasFiltro
            {
                IdCuenta = new Guid("02bcd575-75ec-48bb-af43-c517fe65af4f")
            };

            var saldosFiltro = new SaldoFiltro
            {
                FechaIni = new DateTime(2018, 12, 1),
                FechaFin = new DateTime(2018, 12, 31)
            };

            var cuentas    = QueryCuentasDetalle(cuentasFiltro);
            var saldosDet  = QuerySaldosDetalle(cuentas, saldosFiltro);
            var acumulados = QueryAcumularSaldosDetalle(saldosDet);

            var saldos = QuerySaldoDto(acumulados);
            var ret    = saldos.ToSql(SqlText.ParamMode.Substitute);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Query que devuelve los saldos de un conjunto de cuentas detalle
        /// </summary>
        /// <param name="detalle">Subquery que tiene un renglon por cada cuenta de detalle de interés</param>
        static ISqlSelect <CuentasRaizDetSaldo> QuerySaldosDetalle(ISqlSelect <CuentasRaizDet> detalle, SaldoFiltro filtro)
        {
            var q = Sql
                    .From(detalle)
                    .Left().Lateral(det =>
                                    Sql.From(Sql.RawSubquery <Mov>(@"
	SELECT 
		CASE mov.""TipoMovimiento"" WHEN 0 THEN mov.""Importe"" ELSE 0 END AS ""Cargo"",
		CASE mov.""TipoMovimiento"" WHEN 1 THEN mov.""Importe"" ELSE 0 END AS ""Abono"",
		pol.""Fecha""
	FROM ""Movimiento"" mov 
	JOIN ""Poliza"" pol ON pol.""IdRegistro"" = mov.""IdPoliza""
	WHERE 
		mov.""IdCuentaDetalle"" = ""det"".""IdCuentaDet"" AND
		pol.""Aplicada"" AND NOT pol.""Borrada""
"))
                                    .Select(x => new MovCargoAbono
            {
                CargoPer = Sql.Coalesce(Sql.Filter(Sql.Sum(x.Cargo), Sql.Between(x.Fecha, filtro.FechaIni, filtro.FechaFin)), 0),
                AbonoPer = Sql.Coalesce(Sql.Filter(Sql.Sum(x.Abono), Sql.Between(x.Fecha, filtro.FechaIni, filtro.FechaFin)), 0),

                CargoAnt = Sql.Coalesce(Sql.Filter(Sql.Sum(x.Cargo), x.Fecha < filtro.FechaIni), 0),
                AbonoAnt = Sql.Coalesce(Sql.Filter(Sql.Sum(x.Abono), x.Fecha < filtro.FechaIni), 0),
            }))
                    .On(x => true)
                    .Alias(x => new
            {
                det = x.Item1,
                mov = x.Item2
            })
                    .Select(x => new CuentasRaizDetSaldo
            {
                IdRaiz        = x.det.IdRaiz,
                IdCuentaDet   = x.det.IdCuentaDet,
                IdCuentaAcum  = x.det.IdCuentaAcum,
                IdCuentaPadre = x.det.IdCuentaPadre,
                Terminacion   = x.det.Terminacion,
                Nombre        = x.det.Nombre,

                CargoAnt = x.mov.CargoAnt,
                AbonoAnt = x.mov.AbonoAnt,

                CargoPer = x.mov.CargoPer,
                AbonoPer = x.mov.AbonoPer
            });

            return(q);
        }