public IQueryable <Monedas> MonedasFilter_DropDownList_SelectMethod() { // ponemos el en ddl las compañías seleccionadas en el filtro; la idea es que el usuario pueda seleccionar cualquiera de ellas // para mostrarlas, separadamente, en la lista if (Session["FiltroForma"] == null) { return(null); } ContabContext contabContext = new ContabContext(); string filter = Session["FiltroForma"].ToString(); var sqlQuery = "Select Asientos.Moneda From dAsientos " + "Inner Join Asientos On dAsientos.NumeroAutomatico = Asientos.NumeroAutomatico " + "Inner Join CuentasContables On dAsientos.CuentaContableID = CuentasContables.ID " + $"Where {filter} " + "Group By Asientos.Moneda"; List <int> monedas = contabContext.Database.SqlQuery <int>(sqlQuery).ToList(); var query = contabContext.Monedas.Where(x => monedas.Contains(x.Moneda)).Select(x => x).AsQueryable(); return(query); }
// nota: usamos el ValueTuple para regresar un object, sin definirlo antes public static MonedaNacional_result Get_MonedaNacional() { // leemos la tabla de monedas para 'saber' cual es la moneda Bs. Nota: la idea es aplicar las opciones de reconversión // *solo* a esta moneda Monedas monedaNacional = null; using (var contabContext = new ContabContext()) { monedaNacional = contabContext.Monedas.Where(x => x.NacionalFlag).FirstOrDefault(); if (monedaNacional == null) { string message = "Error al intentar leer la moneda <em>nacional</em> en la tabla <em>Monedas</em>. <br /> " + "No existe una moneda definida como <em>moneda nacional</em>.<br /> " + "Por favor defina alguna de las monedas registradas como <em>moneda nacional</em>.<br /> "; var monedas = new Monedas(); var result0 = new MonedaNacional_result(true, message, null); return(result0); } } var result = new MonedaNacional_result(false, "", monedaNacional); return(result); }
public string ConstruirFiltro(ContabContext contabContext) { string filter = Session["FiltroForma"].ToString(); // aplicamos los minifilters; el usuario puede seleccionar cia y moneda desde ddl en el tope de la página if (!string.IsNullOrEmpty(this.CuentaContableFilter_TextBox.Text)) { string miniFilter = this.CuentaContableFilter_TextBox.Text.ToString().Replace("*", ""); filter += $" And (CuentasContables.Cuenta Like '%{miniFilter}%')"; } if (!string.IsNullOrEmpty(this.CuentaContableDescripcionFilter_TextBox.Text)) { string miniFilter = this.CuentaContableDescripcionFilter_TextBox.Text.ToString().Replace("*", ""); filter += $" And (CuentasContables.Descripcion Like '%{miniFilter}%')"; } if (!string.IsNullOrEmpty(this.CentroCostoFilter_TextBox.Text)) { string miniFilter = this.CentroCostoFilter_TextBox.Text.ToString().Replace("*", ""); filter += $" And (CentrosCosto.DescripcionCorta Like '%{miniFilter}%' Or CentrosCosto.Descripcion Like '%{miniFilter}%' )"; } // aplicamos los minifilters; el usuario puede seleccionar cia y moneda desde ddl en el tope de la página if (this.CompaniasFilter_DropDownList.SelectedIndex != -1) { int selectedValue = Convert.ToInt32(this.CompaniasFilter_DropDownList.SelectedValue); filter += $" And (Asientos.Cia In ({selectedValue}))"; } if (this.MonedasFilter_DropDownList.SelectedIndex != -1) { int selectedValue = Convert.ToInt32(this.MonedasFilter_DropDownList.SelectedValue); filter += $" And (Asientos.Moneda In ({selectedValue}))"; } return(filter); }
private void RefreshAndBindInfo() { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } if (Session["FiltroForma"] == null) { CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = "Aparentemente, Ud. no ha indicado un filtro aún.<br />Por favor indique y aplique un filtro antes " + "de intentar mostrar el resultado de la consulta."; return; } // nótese como hacemos también el databinding de los dos combos, cada vez que el usuario cambia el filtro; la // razón es que el contenido de ambos combos depende del resultado del query ... this.MonedasFilter_DropDownList.DataBind(); this.CompaniasFilter_DropDownList.DataBind(); // --------------------------------------------------------------------------------------------------------------------------------------------- // leemos la tabla de monedas para 'saber' cual es la moneda Bs. Nota: la idea es aplicar las opciones de reconversión *solo* a esta moneda var monedaNacional_result = Reconversion.Get_MonedaNacional(); if (monedaNacional_result.error) { CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = monedaNacional_result.message; return; } Monedas monedaNacional = monedaNacional_result.moneda; // --------------------------------------------------------------------------------------------------------------------------------------------- ContabContext contabContext = new ContabContext(); string filter = ConstruirFiltro(contabContext); // el usuario indica en el filtro si desea reconvertir cifras anteriores al 1/Oct/2.021 bool bReconvertirCifrasAntes_01Oct2021 = (bool)Session["ReconvertirCifrasAntes_01Oct2021"]; int moneda = (int)Session["monedaSeleccionada"]; // las fechas vienen como Dates en el Session; en realidad como Objects; por eso se deben convertir a Dates DateTime fechaInicialPeriodo = (DateTime)Session["fechaInicialPeriodo"]; DateTime fechaFinalPeriodo = (DateTime)Session["fechaFinalPeriodo"]; string sFechaInicialPeriodo = fechaInicialPeriodo.ToString("yyyy-MM-dd"); string sFechaFinalPeriodo = fechaFinalPeriodo.ToString("yyyy-MM-dd"); string query = ""; // aplicamos la reconversión *solo* cuando: el usuario lo indicó, la moneda es Bs y la la fecha de inicio es anterior al 1/Oct if (!bReconvertirCifrasAntes_01Oct2021 || (moneda != monedaNacional.Moneda) || fechaInicialPeriodo >= new DateTime(2021, 10, 1)) { // no se va a reconvertir: hacemos el query en forma usual query = "Select a.NumeroAutomatico as numeroAutomatico, a.Numero as numero, d.Partida, c.Cuenta as cuentaContable, " + "c.Descripcion as cuentaContableDescripcion, a.Fecha as fecha, d.Descripcion as descripcion, " + "d.Referencia as referencia, a.ProvieneDe as provieneDe, " + "d.Debe as debe, d.Haber as haber, a.Usuario as usuario, " + "m.Simbolo as monedaSimbolo, mo.Simbolo as monedaOriginalSimbolo, " + "d.Debe as debe, d.Haber as haber, " + "cc.DescripcionCorta as centrosCostoDescripcion, comp.Abreviatura as companiaAbreviatura " + "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Inner Join CuentasContables c On d.CuentaContableID = c.ID " + "Inner Join Monedas m On a.Moneda = m.Moneda " + "Inner Join Monedas mo On a.MonedaOriginal = mo.Moneda " + "Inner Join Companias comp On a.Cia = comp.Numero " + "Left Outer Join CentrosCosto cc On d.CentroCosto = cc.CentroCosto " + $"Where (a.Fecha Between '{sFechaInicialPeriodo}' And '{sFechaFinalPeriodo}') And " + $"{filter} " + " And (d.Referencia <> 'Reconversión 2021') " + "Order By a.Fecha, a.Numero"; } else { // se va a reconvertir: agregamos un Union al query para lograr la reconversión de las cifras anteriores a 1/Oct/21 // este es el período *hasta* el 1ro/Oct: reconvertimos query = "Select a.NumeroAutomatico as numeroAutomatico, a.Numero as numero, d.Partida, c.Cuenta as cuentaContable, " + "c.Descripcion as cuentaContableDescripcion, a.Fecha as fecha, d.Descripcion as descripcion, " + "d.Referencia as referencia, a.ProvieneDe as provieneDe, " + "Round((d.Debe / 1000000), 2) as debe, Round((d.Haber / 1000000), 2) as haber, " + "a.Usuario as usuario, " + "m.Simbolo as monedaSimbolo, mo.Simbolo as monedaOriginalSimbolo, " + "d.Debe as debe, d.Haber as haber, " + "cc.DescripcionCorta as centrosCostoDescripcion, comp.Abreviatura as companiaAbreviatura " + "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Inner Join CuentasContables c On d.CuentaContableID = c.ID " + "Inner Join Monedas m On a.Moneda = m.Moneda " + "Inner Join Monedas mo On a.MonedaOriginal = mo.Moneda " + "Inner Join Companias comp On a.Cia = comp.Numero " + "Left Outer Join CentrosCosto cc On d.CentroCosto = cc.CentroCosto " + $"Where (a.Fecha Between '{sFechaInicialPeriodo}' And '2021-09-30') And " + $"{filter} " + "Union " + // este es el período *desde* el 1ro/Oct: no reconvertimos "Select a.NumeroAutomatico as numeroAutomatico, a.Numero as numero, d.Partida, c.Cuenta as cuentaContable, " + "c.Descripcion as cuentaContableDescripcion, a.Fecha as fecha, d.Descripcion as descripcion, " + "d.Referencia as referencia, a.ProvieneDe as provieneDe, " + "d.Debe as debe, d.Haber as haber, a.Usuario as usuario, " + "m.Simbolo as monedaSimbolo, mo.Simbolo as monedaOriginalSimbolo, " + "d.Debe as debe, d.Haber as haber, " + "cc.DescripcionCorta as centrosCostoDescripcion, comp.Abreviatura as companiaAbreviatura " + "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Inner Join CuentasContables c On d.CuentaContableID = c.ID " + "Inner Join Monedas m On a.Moneda = m.Moneda " + "Inner Join Monedas mo On a.MonedaOriginal = mo.Moneda " + "Inner Join Companias comp On a.Cia = comp.Numero " + "Left Outer Join CentrosCosto cc On d.CentroCosto = cc.CentroCosto " + $"Where (a.Fecha Between '2021-10-1' And '{sFechaFinalPeriodo}') And " + $"{filter} " + " And (d.Referencia <> 'Reconversión 2021') " + "Order By a.Fecha, a.Numero"; } // cambiamos los nombres de las tablas pues se abrevian en el query query = query.Replace("dAsientos.", "d."); query = query.Replace("Asientos.", "a."); query = query.Replace("CuentasContables.", "c."); query = query.Replace("CentrosCosto.", "cc."); //var partidas = contabContext.dAsientos.SqlQuery(query); this.SqlDataSource1.SelectCommand = query; this.MovimientosContables_GridView.DataBind(); }