private void contabilidad(dbContab_Contab_Entities context, string divisor, int moneda, short ano, int ciaSeleccionada, out bool error, out string message) { error = false; message = ""; int cantAsientosActualizados = 0; try { // asientos string queryString = $"Update d Set d.Debe = Round(d.Debe / {divisor}, 2), d.Haber = Round(d.Haber / {divisor}, 2) " + "FROM dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Where a.moneda = {0} And a.AnoFiscal = {1} And a.Cia = {2}"; cantAsientosActualizados = context.ExecuteStoreCommand(queryString, moneda, ano, ciaSeleccionada); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } message = $"<h3>Contabilidad</h3><br />" + $"Ok, El proceso ha finalizado en forma satisfactoria.<br /><br />" + $"En total, se han actualizado: {cantAsientosActualizados.ToString()} registros desde asientos contables."; return; }
private void contabilidad_saldosInicialesAjuste(dbContab_Contab_Entities context, string divisor, int moneda, short ano, int ciaSeleccionada, out bool error, out string message) { error = false; message = ""; int cantSaldosInicialesActualizados = 0; try { // asientos string queryString = $"Update s Set s.Inicial = Round(s.Inicial / {divisor}, 2) " + "FROM SaldosContables s " + "Where s.moneda = {0} And s.Ano = {1} And s.Cia = {2}"; cantSaldosInicialesActualizados = context.ExecuteStoreCommand(queryString, moneda, ano, ciaSeleccionada); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } message = $"<h3>Saldos iniciales - reconversión</h3><br />" + $"Ok, El proceso ha finalizado en forma satisfactoria.<br /><br />" + $"En total, se han actualizado: {cantSaldosInicialesActualizados.ToString()} registros desde asientos contables."; return; }
protected void AsientosContables_Copiar_Button_Click(object sender, EventArgs e) { Page.Validate(); if (!Page.IsValid) { return; } string ajaxPopUpMessage = ""; if (Session["filtroForma_consultaAsientosContables"] == null || string.IsNullOrEmpty(Session["filtroForma_consultaAsientosContables"].ToString())) { ajaxPopUpMessage = "<br />Aparentemente, Ud. no ha indicado un filtro a esta página.<br />" + "Debe hacerlo, para que el programa lea y seleccione registros <em><b>antes que Ud. ejecute esta función</b></em>."; this.ModalPopupTitle_span.InnerHtml = "No se ha indicado un filtro a esta página"; this.ModalPopupBody_span.InnerHtml = ajaxPopUpMessage; this.btnOk.Visible = false; this.btnCancel.Text = "Ok"; this.ModalPopupExtender1.Show(); return; } dbContab_Contab_Entities contabContext = new dbContab_Contab_Entities(); FuncionesContab2 funcionesContab = new FuncionesContab2(contabContext); int cantidadAsientosCopiados = 0; string resultMessage = ""; if (!funcionesContab.CopiarAsientosContables(Session["filtroForma_consultaAsientosContables"].ToString(), Session["filtroForma_consultaAsientosContables_subQuery"].ToString(), Membership.GetUser().UserName, Convert.ToInt32(CiaContab_DropDownList.SelectedValue), this.multiplicarPor_textBox.Text, this.dividirPor_textBox.Text, out cantidadAsientosCopiados, out resultMessage)) { this.ModalPopupTitle_span.InnerHtml = "Error al intentar ejecutar la función"; ajaxPopUpMessage = resultMessage; } else { this.ModalPopupTitle_span.InnerHtml = "Copia de asientos contables - Ejecución exitosa"; ajaxPopUpMessage = "Ok, los asientos contables han sido copiados en forma exitosa, a la compañía <em>Contab</em> que se ha indicado.<br /><br />" + "En total, se han copiado <b>" + cantidadAsientosCopiados.ToString() + "</b> asientos contables a la compañía seleccionada."; } this.ModalPopupBody_span.InnerHtml = ajaxPopUpMessage; this.btnOk.Visible = false; this.btnCancel.Text = "Ok"; this.ModalPopupExtender1.Show(); return; }
protected void Page_Load(object sender, EventArgs e) { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } ErrMessage_Span.InnerHtml = ""; ErrMessage_Span.Style["display"] = "none"; if (!Page.IsPostBack) { // determinamos los años que se han registrado en el programa y los mostramos en una lista dbContab_Contab_Entities context = new dbContab_Contab_Entities(); var ciaContabSeleccionada = context.tCiaSeleccionadas.Where(s => s.UsuarioLS == User.Identity.Name). Select(c => new { numero = c.Compania.Numero }). FirstOrDefault(); if (ciaContabSeleccionada == null) { string errorMessage = "Error: aparentemente, no se ha seleccionado una <em>Cia Contab</em>.<br />" + "Por favor seleccione una <em>Cia Contab</em> y luego regrese y continúe con la ejecución de esta función."; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; return; } var anos = context.SaldosContables.Where(s => s.Cia == ciaContabSeleccionada.numero). Select(s => new { ano = s.Ano }). Distinct(); var items = anos.OrderByDescending(a => a.ano); anosRegistrados_listBox.Items.Clear(); foreach (var ano in items) { anosRegistrados_listBox.Items.Add(ano.ano.ToString()); } this.CuentasContables_SqlDataSource.SelectParameters[0].DefaultValue = ciaContabSeleccionada.numero.ToString(); this.cuentasContables_listBox.DataBind(); // intentamos recuperar el state de esta página; en general, lo intentamos con popups filtros if (!(Membership.GetUser().UserName == null)) { KeepPageState MyKeepPageState = new KeepPageState(Membership.GetUser().UserName, Page.GetType().Name); MyKeepPageState.ReadStateFromFile(this, this.Controls); MyKeepPageState = null; } } this.CustomValidator1.IsValid = true; this.CustomValidator1.Visible = false; }
private void contabilidad_asientosAjuste(dbContab_Contab_Entities context, int cuentaContableID, int moneda, short ano, int ciaSeleccionada, out bool error, out string message) { error = false; message = ""; // asientos string queryString = $"Select d.NumeroAutomatico as numeroAutomatico, Sum(d.Debe) as sumOfDebe, Sum(d.Haber) as sumOfHaber, " + "Sum(d.Debe) - Sum(d.Haber) as diferencia, Max(d.Partida) as ultimaPartida " + "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Where a.AnoFiscal = {0} And a.Moneda = {1} And a.Cia = {2} " + "Group By d.NumeroAutomatico " + "Having Sum(d.Debe) <> Sum(d.Haber) "; List <asiento_sumarizacion> query = context.ExecuteStoreQuery <asiento_sumarizacion>(queryString, ano, moneda, ciaSeleccionada).ToList(); dAsiento partida; int asientosContablesAjustados = 0; foreach (asiento_sumarizacion p in query) { partida = new dAsiento(); partida.NumeroAutomatico = p.numeroAutomatico; partida.Partida = Convert.ToInt16(p.ultimaPartida + 10); partida.CuentaContableID = cuentaContableID; partida.Descripcion = "Reconversión (2018) - ajuste al asiento contable"; partida.Referencia = null; partida.Debe = p.diferencia <= 0 ? Math.Abs(p.diferencia) : 0; partida.Haber = p.diferencia > 0 ? Math.Abs(p.diferencia) : 0; context.dAsientos.AddObject(partida); asientosContablesAjustados++; } try { context.SaveChanges(); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; context.Dispose(); return; } context.Dispose(); message = $"<h3>Asientos contables - ajuste contra cuenta de reconversión</h3><br />" + $"Ok, El proceso ha finalizado en forma satisfactoria.<br /><br />" + $"En total, se han actualizado: {asientosContablesAjustados.ToString()} asientos contables, para ajustarlos y <em>cuadrarlos</em> a cero. "; return; }
public void AccessRemoteData(string search, int page, int cia) { try { dbContab_Contab_Entities dbContab = new dbContab_Contab_Entities(); // 1) leemos la página de items seleccionados var query = "Select Cuenta as id, Descripcion as text From CuentasContables " + "Where (Cuenta Like '%' + @search + '%' Or Descripcion Like '%' + @search + '%') And TotDet = 'D' And Cia = @cia " + "Order by Cuenta, Descripcion Offset @offset Rows Fetch Next 20 Rows Only"; var args = new DbParameter[] { new SqlParameter { ParameterName = "cia", Value = cia }, new SqlParameter { ParameterName = "search", Value = search }, new SqlParameter { ParameterName = "offset", Value = ((page - 1) * 20) }, }; var cuentasContables = dbContab.ExecuteStoreQuery <Select2DTO>(query, args).ToList(); // 2) leemos la cantidad de registros que corresonden a la selección query = "Select Count(*) as count_filtered From CuentasContables " + "Where (Cuenta Like '%' + @search + '%' Or Descripcion Like '%' + @search + '%') And TotDet = 'D' And Cia = @cia "; args = new DbParameter[] { new SqlParameter { ParameterName = "cia", Value = cia }, new SqlParameter { ParameterName = "search", Value = search } }; Int32 count_filtered = dbContab.ExecuteStoreQuery <int>(query, args).First(); var r = new Select2DTO_paginate { items = cuentasContables, resultParams = new Select2DTO_paginate_results { page = page, count_filtered = count_filtered } }; JavaScriptSerializer js = new JavaScriptSerializer(); var sResult = js.Serialize(r); Context.Response.Write(sResult); } catch (Exception ex) { Context.Response.Write(ex.Message.ToString()); } }
public HttpResponseMessage ActualizarCatalogos(int ciaContabSeleccionada) { if (!User.Identity.IsAuthenticated) { var errorResult = new { ErrorFlag = true, ErrorMessage = "Error: por favor haga un login a esta aplicación, y luego regrese a ejecutar esta función." }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } try { dbContab_Contab_Entities context = new dbContab_Contab_Entities(); var query = context.CuentasContables.Where(c => c.Cia == ciaContabSeleccionada). Where(c => c.TotDet == "D"). Where(c => c.ActSusp == "A"). OrderBy(c => c.Cuenta). Select(c => new { ID = c.ID, CuentaContable = c.CuentaEditada, Descripcion = c.Descripcion, CiaAbreviatura = c.Compania.Abreviatura }); var result = new { ErrorFlag = false, ErrorMessage = "", CuentasContables = query.ToList() }; return(Request.CreateResponse(HttpStatusCode.OK, result)); } catch (Exception ex) { string message = ex.Message; if (ex.InnerException != null) { message += "<br />" + ex.InnerException.Message; } var errorResult = new { ErrorFlag = true, ErrorMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "El mensaje específico de error es: <br />" + message }; return(Request.CreateResponse(HttpStatusCode.OK, errorResult)); } }
protected void AsientosContables_Exportar_Button_Click(object sender, EventArgs e) { string ajaxPopUpMessage = ""; if (Session["FiltroForma"] == null || string.IsNullOrEmpty(Session["FiltroForma"].ToString())) { ajaxPopUpMessage = "<br />Aparentemente, Ud. no ha indicado un filtro a esta página.<br />" + "Debe hacerlo, para que el programa lea y seleccione registros <em><b>antes que Ud. ejecute esta función</b></em>."; this.ModalPopupTitle_span.InnerHtml = "No se ha indicado un filtro a esta página"; this.ModalPopupBody_span.InnerHtml = ajaxPopUpMessage; this.btnOk.Visible = false; this.btnCancel.Text = "Ok"; this.ModalPopupExtender1.Show(); return; } dbContab_Contab_Entities contabContext = new dbContab_Contab_Entities(); FuncionesContab2 funcionesContab = new FuncionesContab2(contabContext); int cantidadPartidasLeidas = 0; string resultMessage = ""; string filePath = ""; if (!funcionesContab.Exportar_AsientosContables(Session["FiltroForma"].ToString(), this.Formato_RadioButtonList.SelectedValue, Membership.GetUser().UserName, out cantidadPartidasLeidas, out filePath, out resultMessage)) { this.ModalPopupTitle_span.InnerHtml = "Error al intentar ejecutar la función"; ajaxPopUpMessage = resultMessage; } else { this.ModalPopupTitle_span.InnerHtml = "Copia de asientos contables - Ejecución exitosa"; ajaxPopUpMessage = "Ok, los asientos contables han sido exportados a un archivo, según el formato indicado por Ud.<br /><br />" + "En total, se han leído y exportado " + cantidadPartidasLeidas.ToString() + " partidas, para los asientos contables seleccionados.<br /><br />" + "Ahora Ud. debe copiar el archivo recién construído a su PC, usando el link que para ello se muestra al cerrar este díalogo."; } this.ModalPopupBody_span.InnerHtml = ajaxPopUpMessage; this.btnOk.Visible = false; this.btnCancel.Text = "Ok"; this.DownloadFile_LinkButton.Visible = true; this.FileName_HiddenField.Value = filePath; this.ModalPopupExtender1.Show(); return; }
public IQueryable <Moneda> Monedas_DropDownList_GetData() { string userName = Membership.GetUser().UserName; dbContab_Contab_Entities context = new dbContab_Contab_Entities(); var query = context.Monedas.Where(m => m.Asientos.Where(a => a.tTempWebReport_ConsultaComprobantesContables.Any(t => t.NombreUsuario == userName)).Any()).Select(c => c); query = query.OrderBy(c => c.Descripcion); return(query); }
public IQueryable <Moneda> Monedas_DropBox_GetData() { string userName = Membership.GetUser().UserName; dbContab_Contab_Entities dbContext = new dbContab_Contab_Entities(); var query = dbContext.Monedas.Where(m => m.Contab_BalanceComprobacion.Where(c => c.NombreUsuario == userName).Any()).Select(c => c); query = query.OrderBy(c => c.Descripcion); return(query); }
private void Report_SubreportProcessingEventHandler(Object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e) { switch (Request.QueryString["rpt"].ToString()) { case "ptomtosest": // sub report para el reporte de presupuesto - montos estimados switch (e.ReportPath) // algún día puede haber más de un subreport !! { case "MontosEstimados_CuentasContables": string sCodigoPresupuesto = e.Parameters["CodigoPresupuesto"].Values[0]; int nCiaContab = Convert.ToInt32(e.Parameters["CiaContab"].Values[0].ToString()); List <MontosEstimados_Consulta_CuentaContable> list = new List <MontosEstimados_Consulta_CuentaContable>(); using (dbContab_Contab_Entities contabContext = new dbContab_Contab_Entities()) { var query = contabContext.CuentasContables.Where(c => c.Presupuesto_Codigos.Any(p => p.Codigo == sCodigoPresupuesto)).Select(c => c); query = query.Where(c => c.Cia == nCiaContab); MontosEstimados_Consulta_CuentaContable cuentaContable; foreach (var cuenta in query) { cuentaContable = new MontosEstimados_Consulta_CuentaContable() { Cuenta = cuenta.Cuenta, CuentaEditada = cuenta.CuentaEditada, Descripcion = cuenta.Descripcion }; list.Add(cuentaContable); } } e.DataSources.Clear(); ReportDataSource myReportDataSource = new ReportDataSource(); myReportDataSource.Name = "Presupuesto_MontosEstimados_CuentasContables"; myReportDataSource.Value = list; e.DataSources.Add(myReportDataSource); break; } break; } }
private bool CiaContabSeleccionada(out int ciaContabSeleccionada, out string nombreCiaContabSeleccionada, out string errorMessage) { ciaContabSeleccionada = 0; nombreCiaContabSeleccionada = ""; errorMessage = ""; if (!User.Identity.IsAuthenticated) { errorMessage = "Error: la session se ha desconectado; por favor vuelva a hacer un login a esta aplicación."; return(false); } using (dbContab_Contab_Entities context = new dbContab_Contab_Entities()) { try { var cia = context.tCiaSeleccionadas.Where(s => s.UsuarioLS == User.Identity.Name). Select(c => new { ciaContabSeleccionada = c.Compania.Numero, ciaContabSeleccionadaNombre = c.Compania.Nombre }). FirstOrDefault(); if (cia == null) { errorMessage = "Error: aparentemente, no se ha seleccionado una <em>Cia Contab</em>.<br />" + "Por favor seleccione una <em>Cia Contab</em> y luego regrese y continúe con la ejecución de esta función."; return(false); } ciaContabSeleccionada = cia.ciaContabSeleccionada; nombreCiaContabSeleccionada = cia.ciaContabSeleccionadaNombre; return(true); } catch (Exception ex) { string message = ex.Message; if (ex.InnerException != null) { message += "<br />" + ex.InnerException.Message; } errorMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "El mensaje específico de error es: <br />" + message; return(false); } } }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { HtmlGenericControl MyHtmlH2; MyHtmlH2 = (HtmlGenericControl)Master.FindControl("PageTitle_TableCell"); if (!(MyHtmlH2 == null)) { MyHtmlH2.InnerHtml = "Movimiento bancario - Consulta"; } this.MovimientoBancario_EntityDataSource.WhereParameters["MovimientoBancarioID"].DefaultValue = Page.Request.QueryString["ID"].ToString(); // --------------------------------------------------------------------------------------------------- // para permitir mostrar el asiento contable asociado, con un click al hyperlink ... int movimientoBancarioID = Convert.ToInt32(Page.Request.QueryString["ID"].ToString()); // para buscar el asiento contable asociado, debemos obtener su ID (NumeroAutomatico); para hacerlo, leemos el asiento // antes; nótese que lo obtenemos usando el pk del movimiento bancario dbContab_Contab_Entities contabContext = new dbContab_Contab_Entities(); ContabSysNet_Web.ModelosDatos_EF.Contab.Asiento asientoContable = contabContext.Asientos.Where(a => a.ProvieneDe == "Bancos" && a.ProvieneDe_ID == movimientoBancarioID).FirstOrDefault(); string url = ""; if (asientoContable != null) { url = "../../../Contab/Consultas contables/Cuentas y movimientos/CuentasYMovimientos_Comprobantes.aspx" + "?NumeroAutomatico=" + asientoContable.NumeroAutomatico.ToString(); } else { url = "../../../Contab/Consultas contables/Cuentas y movimientos/CuentasYMovimientos_Comprobantes.aspx" + "?NumeroAutomatico=-999"; } MostrarAsientoContable_HyperLink.HRef = "javascript:PopupWin('" + url + "', 1000, 680)"; } }
private void activosFijos(dbContab_Contab_Entities context, string divisor, int moneda, short ano, int ciaSeleccionada, out bool error, out string message) { error = false; message = ""; string desde = new DateTime(ano, 1, 1).ToString("yyyy-MM-dd"); string hasta = new DateTime(ano, 12, 31).ToString("yyyy-MM-dd"); string desde_mes = new DateTime(ano, 1, 1).ToString("MM"); string desde_ano = new DateTime(ano, 1, 1).ToString("yyyy"); int cant_activosFijos_actualizados = 0; // ------------------------------------------------------- // InventarioActivosFijos // ------------------------------------------------------- try { string queryString = $"Update i Set i.CostoTotal = Round(i.CostoTotal / { divisor}, 2), i.ValorResidual = Round(i.ValorResidual / { divisor}, 2), " + $"i.MontoADepreciar = Round(i.MontoADepreciar / { divisor}, 2), i.MontoDepreciacionMensual = Round(i.MontoDepreciacionMensual / { divisor}, 2) " + $"From InventarioActivosFijos i " + $"Where ((i.FechaDesincorporacion Is Null) Or (i.FechaDesincorporacion >= '{desde}')) And " + $"( (i.DepreciarHastaAno > {desde_ano}) Or (i.DepreciarHastaAno = {desde_ano} And i.DepreciarHastaMes >= {desde_mes} ) ) And " + $"i.Cia = {ciaSeleccionada}"; cant_activosFijos_actualizados = context.ExecuteStoreCommand(queryString); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } message = $"<h3>Activos fijos</h3><br />" + $"Ok, El proceso ha finalizado en forma satisfactoria.<br /><br />" + $"En total, se han actualizado: {cant_activosFijos_actualizados.ToString()} registros de activos fijos. "; return; }
public IQueryable <Moneda> MonedasFilter_DropDownList_SelectMethod() { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return(null); } string usuario = User.Identity.Name; dbContab_Contab_Entities context = new dbContab_Contab_Entities(); // aquí no necesitamos un subquery var query = context.Monedas.Where(m => m.Temp_Contab_Report_BalanceGeneral.Where(bg => bg.Usuario == usuario).Any()).Select(m => m); query = query.OrderBy(m => m.Descripcion); return(query); }
public IQueryable <Compania> CompaniasFilter_DropDownList_SelectMethod() { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return(null); } string usuario = User.Identity.Name; dbContab_Contab_Entities context = new dbContab_Contab_Entities(); // nótese como usamos un subquery ... var query1 = context.Temp_Contab_Report_BalanceGeneral.Where(c => c.Usuario == usuario).Select(c => c.CuentasContable.Cia); var query2 = from c in context.Companias where query1.Contains(c.Numero) select c; query2 = query2.OrderBy(c => c.Nombre); return(query2); }
private bool ObtenerFechaInicioAnoFiscal(DateTime fechaConsulta, int ciaContab, out DateTime fechaInicioAnoFiscal, out string errorMessage) { // regresamos el 1er. día del mes inicial del año fiscal. Esta fecha debe siempre ser *anterior* a la fecha indicada a la consulta fechaInicioAnoFiscal = new DateTime(); errorMessage = ""; ContabSysNet_Web.ModelosDatos_EF.Contab.MesesDelAnoFiscal mesFiscal; using (dbContab_Contab_Entities context = new dbContab_Contab_Entities()) { mesFiscal = context.MesesDelAnoFiscals.Where(m => m.Cia == ciaContab && m.MesFiscal == 1).FirstOrDefault(); if (mesFiscal == null) { errorMessage = "Error: aparentemente, no se ha definido el año fiscal de la cia contab en la tabla de meses del año fiscal. "; return(false); } fechaInicioAnoFiscal = new DateTime(fechaConsulta.Year, mesFiscal.Mes, 1); } // el inicio del año fiscal que regrese esta función, debe ser siempre anterior a la fecha de la consulta if (fechaInicioAnoFiscal > fechaConsulta) { fechaInicioAnoFiscal = fechaInicioAnoFiscal.AddYears(-1); } // por alguna razón determinada en su momento, el inicio del año para estos cálculos se toma como el fin del mes // y no el inicio; por ejemplo: si el inicio del año fiscal es el 1-mar-13, esta función regresa: 31-mar-13 ... fechaInicioAnoFiscal = fechaInicioAnoFiscal.AddMonths(1).AddDays(-1); return(true); }
private void contabilidad_saldosInicialesCuadrar(dbContab_Contab_Entities context, int cuentaContableID, int moneda, short ano, int ciaSeleccionada, out bool error, out string message) { error = false; message = ""; // asientos string queryString = $"Select s.Moneda as moneda, s.MonedaOriginal as monedaOriginal, s.Ano as ano, s.Cia as cia, Sum(s.Inicial) as sumOfInicial " + "From SaldosContables s Inner Join CuentasContables c On s.CuentaContableID = c.ID " + "Where s.Ano = {0} And s.Moneda = {1} And s.Cia = {2} " + "And c.TotDet = 'D' " + "Group By s.Moneda, s.MonedaOriginal, s.Ano, s.Cia"; List <saldos_sumarizacion> query = context.ExecuteStoreQuery <saldos_sumarizacion>(queryString, ano, moneda, ciaSeleccionada).ToList(); SaldosContable saldoContable; int saldosContables_ajustados = 0; int saldosContables_agregados = 0; foreach (saldos_sumarizacion inicial in query) { if (inicial.sumOfInicial == 0) { // si no hay diferencia en el saldo inicial, simplemente continuamos ... continue; } // leemos un registro de saldos para la cuenta contable, a ver si existe saldoContable = context.SaldosContables.Where(s => s.CuentaContableID == cuentaContableID && s.Moneda == inicial.moneda && s.MonedaOriginal == inicial.monedaOriginal && s.Ano == inicial.ano && s.Cia == inicial.cia).FirstOrDefault(); if (saldoContable != null) { // el registro de saldos para la: cuenta, moneda y moneda original *existe*; lo actualizamos // calculamos el nuevo saldo inicial (ajustado) decimal nuevoInicial = saldoContable.Inicial.HasValue ? saldoContable.Inicial.Value : 0; if (inicial.sumOfInicial >= 0) { nuevoInicial = nuevoInicial - inicial.sumOfInicial; // la diferencia es mayor que cero; para ajustar, restamos } else { nuevoInicial = nuevoInicial + Math.Abs(inicial.sumOfInicial); // la diferencia es menor que cero; para ajustar, sumamos } saldoContable.Inicial = nuevoInicial; saldosContables_ajustados++; } else { // el registro de saldos para la cuenta *no existe*; lo agregamos SaldosContable saldo = new SaldosContable { CuentaContableID = cuentaContableID, Moneda = inicial.moneda, MonedaOriginal = inicial.monedaOriginal, Ano = inicial.ano, // agregamos la diferencia, justo con el signo contrario ... Inicial = (inicial.sumOfInicial * -1), Mes01 = 0, Mes02 = 0, Mes03 = 0, Mes04 = 0, Mes05 = 0, Mes06 = 0, Mes07 = 0, Mes08 = 0, Mes09 = 0, Mes10 = 0, Mes11 = 0, Mes12 = 0, Anual = 0, Cia = inicial.cia, }; saldosContables_agregados++; context.SaldosContables.AddObject(saldo); } } try { context.SaveChanges(); } catch (Exception ex) { error = true; message = $"<h3>Saldos iniciales - Cuadre contra cuenta de reconversión</h3><br />" + "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; context.Dispose(); return; } context.Dispose(); message = $"<h3>Saldos iniciales - ajuste contra cuenta de reconversión</h3><br />" + $"Ok, El proceso ha finalizado en forma satisfactoria.<br /><br />" + $"En total, se han <b>actualizado</b>: {saldosContables_ajustados.ToString()} registros de saldo, para ajustar el saldo inicial del año y <em>cuadrarlo</em> a cero.<br />" + $"Además, se han <b>agregado</b>: {saldosContables_agregados.ToString()} registros de saldo, para ajustar el saldo inicial del año y <em>cuadrarlo</em> a cero."; return; }
public IQueryable <ContabSysNet_Web.ModelosDatos_EF.Contab.Temp_Contab_Report_BalanceGeneral> BalanceGeneral_GridView_GetData() { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return(null); } string usuario = User.Identity.Name; dbContab_Contab_Entities dbContab = new dbContab_Contab_Entities(); var query = dbContab.Temp_Contab_Report_BalanceGeneral.Include("CuentasContable").Where(c => c.Usuario == usuario); if (this.CompaniasFilter_DropDownList.SelectedIndex != -1) { int selectedValue = Convert.ToInt32(this.CompaniasFilter_DropDownList.SelectedValue); query = query.Where(d => d.CuentasContable.Cia == selectedValue); } if (this.MonedasFilter_DropDownList.SelectedIndex != -1) { int selectedValue = Convert.ToInt32(this.MonedasFilter_DropDownList.SelectedValue); query = query.Where(d => d.Moneda == selectedValue); } if (!string.IsNullOrEmpty(this.CuentaContableFilter_TextBox.Text)) { string miniFilter = this.CuentaContableFilter_TextBox.Text.ToString().Replace("*", ""); // nótese como el usuario puede o no usar '*' para el mini filtro; de usarlo, la busqueda es más precisa ... if (this.CuentaContableFilter_TextBox.Text.ToString().Trim().StartsWith("*") && this.CuentaContableFilter_TextBox.Text.Trim().EndsWith("*")) { query = query.Where(c => c.CuentasContable.Cuenta.Contains(miniFilter)); } else if (this.CuentaContableFilter_TextBox.Text.ToString().Trim().StartsWith("*")) { query = query.Where(c => c.CuentasContable.Cuenta.EndsWith(miniFilter)); } else if (this.CuentaContableFilter_TextBox.Text.Trim().EndsWith("*")) { query = query.Where(c => c.CuentasContable.Cuenta.StartsWith(miniFilter)); } else { query = query.Where(c => c.CuentasContable.Cuenta.Contains(miniFilter)); } } if (!string.IsNullOrEmpty(this.CuentaContableDescripcionFilter_TextBox.Text)) { string miniFilter = this.CuentaContableDescripcionFilter_TextBox.Text.ToString().Replace("*", ""); // nótese como el usuario puede o no usar '*' para el mini filtro; de usarlo, la busqueda es más precisa ... if (this.CuentaContableDescripcionFilter_TextBox.Text.ToString().Trim().StartsWith("*") && this.CuentaContableDescripcionFilter_TextBox.Text.Trim().EndsWith("*")) { query = query.Where(c => c.CuentasContable.Descripcion.Contains(miniFilter)); } else if (this.CuentaContableDescripcionFilter_TextBox.Text.ToString().Trim().StartsWith("*")) { query = query.Where(c => c.CuentasContable.Descripcion.EndsWith(miniFilter)); } else if (this.CuentaContableDescripcionFilter_TextBox.Text.Trim().EndsWith("*")) { query = query.Where(c => c.CuentasContable.Descripcion.StartsWith(miniFilter)); } else { query = query.Where(c => c.CuentasContable.Descripcion.Contains(miniFilter)); } } if (query.Count() == 0) { string errorMessage = "No se han seleccionado registros que mostrar; probablemente, el filtro indicado a esta consulta " + "no está correctamente establecido o, de estarlo, no selecciona registros para ser mostrados en la lista."; CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = errorMessage; return(null); } query = query.OrderBy(c => c.CuentasContable.CuentaEditada); return(query); }
private void ConstruirFiltroBalGenGyP(BalanceGeneral_Parametros parametros, ParametrosContab parametrosContab, dbContab_Contab_Entities dbContab, out string filtroConsulta) { // en esta función leemos usamos el contenido de la tabla ParametrosContab para determinar y seleccionar solo las cuentas // contables del grupo que corresponde, de acuerdo al tipo de consulta indicada. Por ejemplo: // si el usuario quiere GyP, debemos excluir activos, pasivos y capital; justo a la inversa para Balance General filtroConsulta = ""; if (parametros.BalGen_GyP == "BG") { if (parametrosContab.Ingresos1 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Ingresos1).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Ingresos2 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Ingresos2).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Ingresos3 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Ingresos3).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Ingresos4 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Ingresos4).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Ingresos5 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Ingresos5).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Ingresos6 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Ingresos6).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Egresos1 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Egresos1).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Egresos2 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Egresos2).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Egresos3 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Egresos3).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Egresos4 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Egresos4).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Egresos5 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Egresos5).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Egresos6 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Egresos6).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } } else { // para GyP siempre excluimos cuentas reales (activo, pasivo, capital) if (parametrosContab.Activo1 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Activo1).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Activo2 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Activo2).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Activo3 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Activo3).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Activo4 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Activo4).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Activo5 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Activo5).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Activo6 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Activo6).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Pasivo1 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Pasivo1).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Pasivo2 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Pasivo2).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Pasivo3 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Pasivo3).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Pasivo4 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Pasivo4).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Pasivo5 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Pasivo5).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Pasivo6 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Pasivo6).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Capital1 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Capital1).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Capital2 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Capital2).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Capital3 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Capital3).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Capital4 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Capital4).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Capital5 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Capital5).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } if (parametrosContab.Capital6 != null) { string cuenta = dbContab.CuentasContables.Where(c => c.ID == parametrosContab.Capital6).Select(c => c.Cuenta).FirstOrDefault(); if (cuenta != "") { filtroConsulta += " And (it.Cuenta Not Like '" + cuenta + "%')"; } } } if (filtroConsulta == "") { filtroConsulta = " And (1 == 1)"; } }
private void ConstruirConsulta(out string errorMessage) { errorMessage = ""; if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } string usuario = User.Identity.Name; if (Session["BalanceGeneral_Parametros"] == null) { errorMessage = "Aparentemente, Ud. no ha definido un filtro para esta consulta. Por favor defina un filtro para esta consulta antes de continuar."; return; } BalanceGeneral_Parametros parametros = Session["BalanceGeneral_Parametros"] as BalanceGeneral_Parametros; dbContab_Contab_Entities dbContab = new dbContab_Contab_Entities(); // leemos la tabla de parámetros para omitir del query las cuentas que no correspondan, dependiendo del tipo de reporte (BG / GyP) // nótese que la clase ParametrosContab existe en varios name spaces ContabSysNet_Web.ModelosDatos_EF.Contab.ParametrosContab parametrosContab = dbContab.ParametrosContabs.Where(p => p.Cia == parametros.CiaContab).FirstOrDefault(); if (parametrosContab == null) { errorMessage = "Aparentemente, la tabla de parámetros (Contab) no ha sido inicializada. " + "Por favor inicialize esta tabla con los valores que sean adecuados, para la Cia Contab seleccionada para esta consulta."; return; } // ahora modificamos el filtro para incluir/excluir las cuentas del tipo GyP ... string filtroBalGen_GyP = ""; ConstruirFiltroBalGenGyP(parametros, parametrosContab, dbContab, out filtroBalGen_GyP); string filtroConsulta = parametros.Filtro + filtroBalGen_GyP; // obtenemos el mes y año fiscal que corresponde al mes de la consulta; la función que determina el saldo anterior para cada cuenta contable, // en realidad lee el saldo para el mes fiscal *anterior* al de la consulta; una consulta para Marzo, necesita como saldos anteriores los del mes Febrero ... var fecha_sqlParam = new SqlParameter("@fecha", parametros.Desde); var ciaContab_sqlParam = new SqlParameter("@ciaContab", parametros.CiaContab); var mesFiscal_sqlParam = new SqlParameter("@mesFiscal", System.Data.SqlDbType.SmallInt); var anoFiscal_sqlParam = new SqlParameter("@anoFiscal", System.Data.SqlDbType.SmallInt); var nombreMes_sqlParam = new SqlParameter("@nombreMes", System.Data.SqlDbType.NVarChar, 50); var errorMessage_sqlParam = new SqlParameter("@errorMessage", System.Data.SqlDbType.NVarChar, 500); mesFiscal_sqlParam.Direction = ParameterDirection.Output; anoFiscal_sqlParam.Direction = ParameterDirection.Output; nombreMes_sqlParam.Direction = ParameterDirection.Output; errorMessage_sqlParam.Direction = ParameterDirection.Output; var contabDbContext = new ContabSysNet_Web.ModelosDatos_EF.code_first.contab.ContabContext(); var result = contabDbContext.Database.SqlQuery <int?>("dbo.spDeterminarMesFiscal @fecha, @ciaContab, @mesFiscal OUT, @anoFiscal OUT, @nombreMes OUT, @errorMessage OUT", fecha_sqlParam, ciaContab_sqlParam, mesFiscal_sqlParam, anoFiscal_sqlParam, nombreMes_sqlParam, errorMessage_sqlParam) .FirstOrDefault(); if (!string.IsNullOrEmpty(errorMessage_sqlParam.Value.ToString())) { string functionErrorMessage = errorMessage_sqlParam.Value.ToString(); errorMessage = "Hemos obtenido un error, al intentar obtener obtener el mes y año fiscal para la fecha indicada como criterio de ejecución.<br /> " + "A continuación, mostramos el mensaje específico de error:<br /> " + functionErrorMessage; return; } short mesFiscal = Convert.ToInt16(mesFiscal_sqlParam.Value); short anoFiscal = Convert.ToInt16(anoFiscal_sqlParam.Value); string nombreMes = (nombreMes_sqlParam.Value).ToString(); // refinar el filtro para, por ejemplo, GyP: leer solo gastos/ingresos; BG: no leer gastos/ingresos (depende de opción, etc.) // antes eliminamos los registros que puedan existir int cantRegistrosEliminados = dbContab.ExecuteStoreCommand("Delete From Temp_Contab_Report_BalanceGeneral Where Usuario = {0}", usuario); // nótese como leemos *solo* cuentas contables que tengan registros de saldo contable agregado ... var query = dbContab.CuentasContables.Where(filtroConsulta).Where(c => c.TotDet == "D").Where(c => c.SaldosContables.Any()).Select(c => c.ID); // ---------------------------------------------------------------------------------------------------------------------- // 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_return = Reconversion.Get_MonedaNacional(); if (monedaNacional_return.error) { errorMessage = monedaNacional_return.message;; return; } ContabSysNet_Web.ModelosDatos_EF.code_first.contab.Monedas monedaNacional = monedaNacional_return.moneda; // ponemos la moneda nacional en un session pues la usa el popup que muestra los movimientos; así no la tiene que leer cada vez Session["monedaNacional"] = monedaNacional.Moneda; // ---------------------------------------------------------------------------------------------------------------------- int cuentasContablesAgregadas = 0; foreach (int cuentaContableID in query) { // nótese como obtenemos el mes fiscal para el mes *anterior* al mes de inicio del período; la idea es obtener (luego) los saldos del mes // *anterior* al inicio del período; por ejemplo: si el usuario intenta obtener la consulta para Abril, debemos obtener los saldos para // Marzo, que serán los iniciales para Abril .... var cuentaContableID_sqlParam = new SqlParameter("@cuentaContableID", cuentaContableID); var mesFiscal2_sqlParam = new SqlParameter("@mesFiscal", mesFiscal); var anoFiscal2_sqlParam = new SqlParameter("@anoFiscal", anoFiscal); var desde_sqlParam = new SqlParameter("@desde", parametros.Desde); var hasta_sqlParam = new SqlParameter("@hasta", parametros.Hasta); var moneda_sqlParam = new SqlParameter("@moneda", parametros.Moneda); var monedaNacional_sqlParam = new SqlParameter("@monedaNacional", monedaNacional.Moneda); var monedaOriginal_sqlParam = new SqlParameter("@monedaOriginal", System.Data.SqlDbType.Int); // el valor de este parámetro puede ser null if (parametros.MonedaOriginal == null) { monedaOriginal_sqlParam.Value = DBNull.Value; } else { monedaOriginal_sqlParam.Value = parametros.MonedaOriginal; } var nombreUsuario_sqlParam = new SqlParameter("@nombreUsuario", usuario); var excluirCuentasSaldoYMovtosCero_sqlParam = new SqlParameter("@excluirSaldoInicialDebeHaberCero", parametros.ExcluirCuentasSaldoYMovtosCero); var excluirCuentasSaldosFinalCero_sqlParam = new SqlParameter("@excluirSaldoFinalCero", parametros.ExcluirCuentasSaldosFinalCero); var excluirCuentasSinMovimientos_sqlParam = new SqlParameter("@excluirSinMovimientosPeriodo", parametros.ExcluirCuentasSinMovimientos); var excluirAsientosContablesTipoCierreAnual_sqlParam = new SqlParameter("@excluirAsientoTipoCierreAnual", parametros.ExcluirAsientosContablesTipoCierreAnual); var reconvertirCifrasAntes_01Oct2021_sqlParam = new SqlParameter("@reconvertirCifrasAntes_01Oct2021", parametros.reconvertirCifrasAntes_01Oct2021); var errorMessage2_sqlParam = new SqlParameter("@errorMessage", ""); errorMessage2_sqlParam.Direction = ParameterDirection.Output; var resultadoFuncion = contabDbContext.Database.SqlQuery <int?>("dbo.spBalanceGeneral " + "@cuentaContableID, @mesFiscal, @anoFiscal, @desde, @hasta, " + "@moneda, @MonedaNacional, @monedaOriginal, @nombreUsuario, @excluirSaldoInicialDebeHaberCero, " + "@excluirSaldoFinalCero, @excluirSinMovimientosPeriodo, @excluirAsientoTipoCierreAnual, " + "@reconvertirCifrasAntes_01Oct2021, @errorMessage OUT", cuentaContableID_sqlParam, mesFiscal2_sqlParam, anoFiscal2_sqlParam, desde_sqlParam, hasta_sqlParam, moneda_sqlParam, monedaNacional_sqlParam, monedaOriginal_sqlParam, nombreUsuario_sqlParam, excluirCuentasSaldoYMovtosCero_sqlParam, excluirCuentasSaldosFinalCero_sqlParam, excluirCuentasSinMovimientos_sqlParam, excluirAsientosContablesTipoCierreAnual_sqlParam, reconvertirCifrasAntes_01Oct2021_sqlParam, errorMessage2_sqlParam) .FirstOrDefault(); if (!string.IsNullOrEmpty(errorMessage_sqlParam.Value.ToString())) { errorMessage = errorMessage_sqlParam.Value.ToString(); return; } // la función regresa la cantidad de registros agregadados (1 o 0) ... if (resultadoFuncion != null && resultadoFuncion.Value == 1) { cuentasContablesAgregadas++; } } string ajaxPopUpMessage = ""; ajaxPopUpMessage = "<br /><b>Ok, el proceso de lectura de cuentas, movimientos y saldos contables ha finalizado.</b><br /><br />" + "En total, fueron leídos (y registrados en la base de datos): <br /><br />" + "*) " + cuentasContablesAgregadas.ToString() + " cuentas contables, sus saldos del mes anterior y movimiento en el período. <br />"; this.ModalPopupTitle_span.InnerHtml = "... Ok, el proceso ha finalizado."; this.ModalPopupBody_span.InnerHtml = ajaxPopUpMessage; this.btnOk.Visible = false; this.btnCancel.Text = "Ok"; this.ModalPopupExtender1.Show(); this.MonedasFilter_DropDownList.DataBind(); this.CompaniasFilter_DropDownList.DataBind(); this.BalanceGeneral_GridView.DataBind(); // para mostrar la cantidad de registros seleccionados this.selectedRecs_p.InnerHtml = $"{cuentasContablesAgregadas.ToString()} registros seleccionados ..."; this.selectedRecs_div.Style["display"] = "block"; }
private void CrearInfoReport(out string errorMessage) { errorMessage = ""; if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } string usuario = User.Identity.Name; if (Session["BalanceGeneral_Parametros"] == null) { errorMessage = "Aparentemente, Ud. no ha definido un filtro para esta consulta. Por favor defina un filtro para esta consulta antes de continuar."; return; } BalanceGeneral_Parametros parametros = Session["BalanceGeneral_Parametros"] as BalanceGeneral_Parametros; // -------------------------------------------------------------------------------------------------------------------------------- // determinamos si el mes que corresponde al inicio del período está cerrado; debe estarlo para que la información regresada por esta // consulta sea confiable; de no ser así, indicamos pero permitimos continuar ... // nótese como usamos un modelo de datos LinqToSql (no EF), pues el código en la clase AsientosContables lo usa así y fue // escrito hace bastante tiempo ... //ContabSysNet_Web.ModelosDatos.dbContabDataContext contabLinqToSqlContex = new ContabSysNet_Web.ModelosDatos.dbContabDataContext(); dbContab_Contab_Entities dbContab = new dbContab_Contab_Entities(); //FuncionesContab funcionesContab = new FuncionesContab(parametros.CiaContab, parametros.Moneda, contabLinqToSqlContex); FuncionesContab2 funcionesContab2 = new FuncionesContab2(dbContab); bool mesAnteriorCerradoEnContab = true; string popupMessage = ""; short mesFiscal; short anoFiscal; // el mes *anterior* al período de la consulta debe estar cerrado. La función regresa False cuando el mes está cerrado // por eso fallamos si el mes *anterior* no está cerrado; es decir, cuando la función regresa True ... if (funcionesContab2.ValidarMesCerradoEnContab(parametros.Desde.AddMonths(-1), parametros.CiaContab, out mesFiscal, out anoFiscal, out errorMessage)) { // NOTA: el mes *anterior* a la fecha de inicio DEBE estar cerrado (o uno posterior) // la función regresa False si el mes está cerrado // si la función regresa True es que NO está cerrado y eso no debe ocurrir en este contexto popupMessage = "El mes anterior al mes indicado para esta consulta, <b>no</b> está cerrado. <br /> " + "Aunque Ud. puede continuar e intentar obtener esta consulta, las cifras determinadas y " + "mostradas no serán del todo confiables.<br /><br />" + "Aún así, desea continuar con la ejecución de esta consulta?"; mesAnteriorCerradoEnContab = false; } ParametrosContab parametrosContab = dbContab.ParametrosContabs.Where(p => p.Cia == parametros.CiaContab).FirstOrDefault(); if (parametrosContab == null) { errorMessage = "Aparentemente, la tabla de parámetros (Contab) no ha sido inicializada. " + "Por favor inicialize esta tabla con los valores que sean adecuados, para la Cia Contab seleccionada para esta consulta."; return; } // ---------------------------------------------------------------------------------------------------------------------------- // construimos el filtro de las cuentas contables, en base al contenido de la tabla ParametrosContab; en esta tabla el usuario indica // cuales cuentas contables corresponden a: activo, pasivo, capital, etc. Para BG, solo cuentas reales son leídas; para GyP solo cuentas // nominales son leídas ... string filtroBalGen_GyP = ""; ConstruirFiltroBalGenGyP(parametros, parametrosContab, dbContab, out filtroBalGen_GyP); string filtroConsulta = parametros.Filtro + filtroBalGen_GyP; // ---------------------------------------------------------------------------------------------------------------------------- // hacemos una validación: intentamos encontrar cuentas contables de tipo detalle, que tengan movimientos en el período indicado, pero que no tengan // un registro de saldos; estos casos pueden ocurrir para cuentas contables recién agregadas, a la cuales se le han agregado asientos pero que aún // no se ha ejecutado un cierre mensual que agregue un registro de saldos para éstas. Notificamos esta situación al usuario para que ejecute un // cierre mensual que agregue un registro de saldos para estas cuentas ... DateTime fecha1erDiaMes = new DateTime(parametros.Desde.Year, parametros.Desde.Month, 1); // nótese como no aplicamos el filtro específico a esta consulta, pues resulta complicado. Sin embargo, al no hacerlo, validamos // esta situación para todas las cuentas de la compañía, en vez de solo para las que cumplen el filtro ... string commandString = "Select c.Cuenta As CuentaContable, c.Descripcion " + "From CuentasContables c Inner Join dAsientos d On c.ID = d.CuentaContableID " + "Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Where c.Cia = {2} And c.TotDet = 'D' And " + "a.Fecha Between {0} And {1} " + "And c.ID Not In (Select s.CuentaContableID From SaldosContables s Where " + "s.Cia = {2})"; CuentaContableItem cuentasTipoDetalleSinRegistroDeSaldos = dbContab.ExecuteStoreQuery <CuentaContableItem>(commandString, fecha1erDiaMes.ToString("yyyy-MM-dd"), parametros.Hasta.ToString("yyyy-MM-dd"), parametros.CiaContab). FirstOrDefault(); if (cuentasTipoDetalleSinRegistroDeSaldos != null) { errorMessage = "Hemos encontrado que existen cuentas contables, por ejemplo <b><en>" + (cuentasTipoDetalleSinRegistroDeSaldos.CuentaContable != null ? cuentasTipoDetalleSinRegistroDeSaldos.CuentaContable.Trim() : "'cuenta contable sin número asignado - número en blanco'") + " - " + (cuentasTipoDetalleSinRegistroDeSaldos.Descripcion != null ? cuentasTipoDetalleSinRegistroDeSaldos.Descripcion.Trim() : "'cuenta contable sin descripción asignada - descripción en blanco'") + "</en></b>, con asientos registrados en el período indicado, pero sin un registro de saldos contables." + "Lo más probable es que estas cuentas sean nuevas y hayan recibido asientos; sin embargo, como el cierre contable (mensual) " + "no se ha corrido, su registro de saldos contables no ha sido creado aún. " + "Por favor ejecute un cierre contable para el mes de la consulta para que se corrija esta situación."; return; } // ---------------------------------------------------------------------------------------------------------------------------- // por último, determinamos si existen cuentas contables de tipo total y que tengan movimientos contables asociados para el período indicado. // esta situación puede ocurrir si el usuario cambia el tipo de una cuenta de detalle a total, para una cuenta que tenga asientos (el registro de // cuentas no debe permitir este cambio!). Notificamos esta situación al usuario y detenemos la ejecución del proceso ... // nótese como buscamos aquí sin usar el filtro que aplica a esta consulta; esto nos permite reportar esta situación tan grave, // independientemente del filtro que haya indicado el usuario ... commandString = "Select c.Cuenta As CuentaContable, c.Descripcion " + "From CuentasContables c Inner Join dAsientos d On c.ID = d.CuentaContableID " + "Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Where c.Cia = {0} And c.TotDet = 'T' And a.Fecha Between {1} And {2}"; CuentaContableItem cuentasTipoTotalConMovimientos = dbContab.ExecuteStoreQuery <CuentaContableItem>(commandString, parametros.CiaContab, fecha1erDiaMes.ToString("yyyy-MM-dd"), parametros.Hasta.ToString("yyyy-MM-dd")). FirstOrDefault(); if (cuentasTipoTotalConMovimientos != null) { errorMessage = "Hemos encontrado que existen cuentas contables de tipo total, por ejemplo '<b><en>" + (cuentasTipoTotalConMovimientos.CuentaContable != null ? cuentasTipoTotalConMovimientos.CuentaContable.Trim() : "'cuenta contable sin número asignado - número en blanco'") + " - " + (cuentasTipoTotalConMovimientos.Descripcion != null ? cuentasTipoTotalConMovimientos.Descripcion.Trim() : "'cuenta contable sin descripción asignada - descripción en blanco'") + "</en></b>', con asientos registrados en el período indicado. " + "Una cuenta contable de tipo total no puede recibir asientos contables. " + "Por favor revise y corrija esta situación. Luego regrese a continuar con este proceso."; return; } if (!mesAnteriorCerradoEnContab) { // arriba, se determinó que el mes anterior al mes indicado no esta cerrado en Contab; de ser así, esta consulta no podrá determinar // lo saldos iniciales del período (saldos finales del mes anterior) de una manera confiable; sin embargo, notificamos al usaurio y // permitimos continuar (o no!) ... // nótese que si el usuario decide continuar, el metodo btnOk_Click es ejecutado; si el usuario cancela, simplemente la ejecución del // proceso es detenida en el cliente (browser) ... this.ModalPopupTitle_span.InnerHtml = "El mes contable que corresponde a los saldos iniciales del período indicado no está cerrado"; this.ModalPopupBody_span.InnerHtml = popupMessage; this.btnOk.Visible = true; this.btnCancel.Text = "Cancelar"; this.ModalPopupExtender1.Show(); return; } // las validaciones pasaron; ejecutamos la función que prepara y la consulta ... ConstruirConsulta(out errorMessage); }
private bool reposicionCajaChica(IMongoDatabase mongoDatabase, dbContab_Contab_Entities dbContab, int ciaContab, string user, out string errorMessage) { // TODO: vamos a modificar contabm para que, al grabar cada vez la reposición, la registremos en una tabla "temp", lista para ser // impresa. De esa forma, estará disponible para leerla aquí y obtener el reporte. // lo que nos faltará por hacer aquí, es agregar el type para poder leer estos registros. errorMessage = ""; var mongoCollection = mongoDatabase.GetCollection <bancos_cajaChica_reposiciones_webReport>("temp_bancos_cajaChica_webReport"); //var mongoQuery = Query<bancos_cajaChica_reposiciones_webReport>.EQ(x => x.user, user); //MongoCursor<bancos_cajaChica_reposiciones_webReport> mongoCursor = mongoCollection.Find(mongoQuery); var mongoCursor = mongoCollection.AsQueryable <bancos_cajaChica_reposiciones_webReport>().Where(x => x.user == user); List <bancos_cajaChica_reposiciones_webReport> items = mongoCursor.ToList <bancos_cajaChica_reposiciones_webReport>(); var items2 = new List <bancos_cajaChica_reposiciones_gastos_webReport>(); foreach (var gasto in items[0].gastos) { items2.Add(gasto); } if (items.Count == 0) { errorMessage = "No existe información para mostrar el reporte " + "que Ud. ha requerido. <br /><br /> Probablemente Ud. no ha aplicado un " + "filtro y seleccionado información aún."; return(false); } ReportViewer1.LocalReport.ReportPath = "contabm/reports/bancos_cajaChica_reposiciones_webReport.rdlc"; ReportDataSource myReportDataSource = new ReportDataSource(); ReportDataSource myReportDataSource2 = new ReportDataSource(); myReportDataSource.Name = "DataSet1"; myReportDataSource.Value = items; ReportViewer1.LocalReport.DataSources.Add(myReportDataSource); myReportDataSource2.Name = "DataSet2"; myReportDataSource2.Value = items2; ReportViewer1.LocalReport.DataSources.Add(myReportDataSource2); // nótese que el valor 'fecha' puede venir en nulls ... string nombreCiaContab = dbContab.Companias.Where(x => x.Numero == ciaContab).Select(x => x.Nombre).FirstOrDefault(); ReportParameter[] MyReportParameters = { new ReportParameter("fecha", new DateTime().ToString("dd-MMM-yyyy")), new ReportParameter("ciaNombre", nombreCiaContab) }; ReportViewer1.LocalReport.SetParameters(MyReportParameters); ReportViewer1.LocalReport.Refresh(); return(true); }
private bool listadoAsientos_webReport(IMongoDatabase mongoDatabase, dbContab_Contab_Entities dbContab, string user, out string errorMessage) { errorMessage = ""; var mongoCollection = mongoDatabase.GetCollection <contab_asientosContables_webReport>("temp_contab_asientos_webReport"); var mongoCollection_config = mongoDatabase.GetCollection <contab_asientosContables_webReport_config>("temp_contab_asientos_webReport_config"); //var mongoQuery = Query<contab_asientosContables_webReport>.EQ(x => x.user, user); //MongoCursor<contab_asientosContables_webReport> mongoCursor = mongoCollection.Find(mongoQuery); var mongoCursor = mongoCollection.AsQueryable <contab_asientosContables_webReport>().Where(x => x.user == user); var items = mongoCursor.ToList(); if (items.Count() == 0) { errorMessage = "No existe información para mostrar el reporte " + "que Ud. ha requerido. <br /><br /> Probablemente Ud. no ha aplicado un " + "filtro y seleccionado información aún."; return(false); } // leemos también los datos de configuración del reporte (metadata) //var mongoQuery_config = Query<contab_asientosContables_webReport_config>.EQ(x => x.user, user); //MongoCursor<contab_asientosContables_webReport_config> mongoCursor_config = mongoCollection_config.Find(mongoQuery_config); // var reportConfig = mongoCollection_config.FindOne(mongoQuery_config); var reportConfig = mongoCollection_config.AsQueryable <contab_asientosContables_webReport_config>().Where(d => d.user == user).FirstOrDefault(); if (reportConfig == null) { errorMessage = "Error inesperado: no hemos podido leer un registro de configuración (parámetros) para esta ejecución del reporte.<br />" + "Debe existir un registro de configuración que contenga los parámetros de ejecución del reporte.<br />" + "Probablemente el reporte pueda ser obtenido si intenta su ejecución nuevamente."; return(false); } if (reportConfig.reportConfig.unaColumnaParaDebeYHaber) { ReportViewer1.LocalReport.ReportPath = "contabm/reports/contab_asientosContables_DebeHaberUnaColumna_webReport.rdlc"; } else { ReportViewer1.LocalReport.ReportPath = "contabm/reports/contab_asientosContables_webReport.rdlc"; } ReportDataSource myReportDataSource = new ReportDataSource(); myReportDataSource.Name = "DataSet1"; myReportDataSource.Value = items; ReportViewer1.LocalReport.DataSources.Add(myReportDataSource); // nótese que el valor 'fecha' puede venir en nulls ... ReportParameter[] MyReportParameters = { new ReportParameter("desde", reportConfig.reportConfig.desde.ToString("dd-MMM-yyyy")), new ReportParameter("hasta", reportConfig.reportConfig.hasta.ToString("dd-MMM-yyyy")), new ReportParameter("fecha", reportConfig.reportConfig.fecha.HasValue ? reportConfig.reportConfig.fecha.Value.ToString("dd-MMM-yyyy") : ""), new ReportParameter("saltoPaginaPorFecha", reportConfig.reportConfig.saltoPaginaPorFecha.ToString()), new ReportParameter("titulo", reportConfig.reportConfig.titulo), new ReportParameter("ciaNombre", reportConfig.reportConfig.ciaNombre) }; ReportViewer1.LocalReport.SetParameters(MyReportParameters); ReportViewer1.LocalReport.Refresh(); return(true); }
// para establecer una conexión a la base de datos en mongo ... // la idea de esta página es leer tablas (collections) que se han preparado en mongo // y generar reportes para estos datos // private MongoDB.Driver.MongoDatabase contabM_mongodb_conexion = null; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string errorMessage = ""; if (Request.QueryString["user"] == null || Request.QueryString["cia"] == null || Request.QueryString["report"] == null) { ErrMessage_Cell.InnerHtml = "Aparentemente, los parámetros pasados a esta página no son correctos.<br /><br />" + "Los parámetros que reciba esta página deben ser correctos para su ejecución pueda ser posible."; return; } string userID = Request.QueryString["user"].ToString(); int ciaContab = Convert.ToInt32(Request.QueryString["cia"].ToString()); string report = Request.QueryString["report"].ToString(); // -------------------------------------------------------------------------------------------------------------------------- // establecemos una conexión a mongodb; específicamente, a la base de datos del programa contabM; allí se registrará // todo en un futuro; además, ahora ya están registradas las vacaciones ... // ---------------------------------------------------------------------------------------------- // establecemos una conexión a mongodb; específicamente, a la base de datos del programa contabM; string contabm_mongodb_connection = System.Web.Configuration.WebConfigurationManager.AppSettings["contabm_mongodb_connectionString"]; string contabM_mongodb_name = System.Web.Configuration.WebConfigurationManager.AppSettings["contabM_mongodb_name"]; var client = new MongoClient(contabm_mongodb_connection); // var server = client.GetServer(); // nótese como el nombre de la base de datos mongo (de contabM) está en el archivo webAppSettings.config; en este db se registran las vacaciones var mongoDataBase = client.GetDatabase(contabM_mongodb_name); // -------------------------------------------------------------------------------------------------------------------------- var mongoCollection = mongoDataBase.GetCollection <contab_cuentasYSusMovimientos>("temp_consulta_contab_cuentasYSusMovimientos"); try { // -------------------------------------------------------------------------------------------------------------------------- // solo para que ocura una exception si mongo no está iniciado ... nótese que antes, cuando establecemos mongo, no ocurre un // exception si mongo no está iniciado ... // var queryDeleteDocs = Query<contab_cuentasYSusMovimientos>.EQ(x => x.cia, -9999999); var builder = Builders <contab_cuentasYSusMovimientos> .Filter; var filter = builder.Eq(x => x.cia, -99999999); mongoCollection.DeleteManyAsync(filter); } catch (Exception ex) { errorMessage = "Error al intentar establecer una conexión a la base de datos (mongo) de 'contabM'; el mensaje de error es: " + ex.Message; ErrMessage_Cell.InnerHtml = errorMessage; return; } dbContab_Contab_Entities dbContab = new dbContab_Contab_Entities(); switch (report) { case "cuentasYMovimientos": { errorMessage = ""; if (Request.QueryString["desde"] == null || Request.QueryString["hasta"] == null) { ErrMessage_Cell.InnerHtml = "Aparentemente, los parámetros pasados a esta página no son correctos.<br /><br />" + "Los parámetros que reciba esta página deben ser correctos para su ejecución pueda ser posible."; return; } string desde = Request.QueryString["desde"].ToString(); string hasta = Request.QueryString["hasta"].ToString(); if (!cuentasYSusMovimientos(mongoDataBase, dbContab, ciaContab, userID, desde, hasta, out errorMessage)) { errorMessage = "Error: ha ocurrido un error al intentar obtener el reporte: " + errorMessage; ErrMessage_Cell.InnerHtml = errorMessage; } break; } case "listadoAsientos_webReport": { errorMessage = ""; if (!listadoAsientos_webReport(mongoDataBase, dbContab, userID, out errorMessage)) { errorMessage = "Error: ha ocurrido un error al intentar obtener el reporte: " + errorMessage; ErrMessage_Cell.InnerHtml = errorMessage; } break; } case "reposicionCajaChica": { errorMessage = ""; if (!reposicionCajaChica(mongoDataBase, dbContab, ciaContab, userID, out errorMessage)) { errorMessage = "Error: ha ocurrido un error al intentar obtener el reporte: " + errorMessage; ErrMessage_Cell.InnerHtml = errorMessage; } break; } default: { errorMessage = "Error: el parámetro 'report' indicado a esta página no corresponde a alguno de los establecidos."; ErrMessage_Cell.InnerHtml = errorMessage; break; } } } }
private bool cuentasYSusMovimientos(IMongoDatabase mongoDatabase, dbContab_Contab_Entities dbContab, int ciaContab, string user, string desde, string hasta, out string errorMessage) { errorMessage = ""; var monedasList = dbContab.Monedas.ToList(); var mongoCollection = mongoDatabase.GetCollection <contab_cuentasYSusMovimientos>("temp_consulta_contab_cuentasYSusMovimientos"); var mongoCollection2 = mongoDatabase.GetCollection <contab_cuentasYMovimientos_movimientos>("temp_consulta_contab_cuentasYSusMovimientos2"); //var mongoQuery = Query<contab_cuentasYSusMovimientos>.EQ(x => x.user, user); //MongoCursor<contab_cuentasYSusMovimientos> mongoCursor = mongoCollection.Find(mongoQuery); var query = mongoCollection.AsQueryable <contab_cuentasYSusMovimientos>().Where(m => m.user == user); // var items = query.ToList(); List <contab_cuentasYSusMovimientos_report> myReportList = new List <contab_cuentasYSusMovimientos_report>(); contab_cuentasYSusMovimientos_report reportItem; int numero = 0; int cantidadRegistros = 0; foreach (var item in query) { numero = 0; reportItem = new contab_cuentasYSusMovimientos_report(); reportItem.numero = numero; reportItem.moneda = monedasList.Where(m => m.Moneda1 == item.monedaID).Select(m => m.Descripcion).FirstOrDefault(); reportItem.cuentaContable = item.cuentaContable; reportItem.nombreCuentaContable = item.nombreCuentaContable; reportItem.fecha = null; reportItem.numeroAsiento = null; reportItem.simboloMonedaOriginal = ""; reportItem.descripcion = "Saldo inicial del período"; reportItem.tipoAsiento = ""; reportItem.referencia = ""; reportItem.asientoTipoCierreAnualFlag = false; reportItem.saldoInicial = item.saldoInicial; reportItem.debe = 0; reportItem.haber = 0; reportItem.saldoFinal = item.saldoInicial; myReportList.Add(reportItem); cantidadRegistros++; // para cada cuenta, leemos sus movimientos //var mongoQuery2 = Query.And( // Query<contab_cuentasYMovimientos_movimientos>.EQ(x => x.registroCuentaContableID, item._id), // Query<contab_cuentasYMovimientos_movimientos>.EQ(x => x.user, user)); //MongoCursor<contab_cuentasYMovimientos_movimientos> mongoCursor2 = mongoCollection2.Find(mongoQuery2); //var items = mongoCursor.ToList(); var query2 = mongoCollection2.AsQueryable <contab_cuentasYMovimientos_movimientos>() .Where(d => d.registroCuentaContableID == item._id && d.user == user); foreach (var partida in query2) { numero++; reportItem = new contab_cuentasYSusMovimientos_report(); reportItem.numero = numero; reportItem.moneda = monedasList.Where(m => m.Moneda1 == item.monedaID).Select(m => m.Descripcion).FirstOrDefault(); reportItem.cuentaContable = item.cuentaContable; reportItem.nombreCuentaContable = item.nombreCuentaContable; reportItem.fecha = partida.fecha; reportItem.numeroAsiento = partida.numeroAsiento; reportItem.simboloMonedaOriginal = partida.simboloMonedaOriginal; reportItem.descripcion = partida.descripcion; reportItem.tipoAsiento = partida.tipoAsiento; reportItem.referencia = partida.referencia; reportItem.asientoTipoCierreAnualFlag = partida.asientoTipoCierreAnualFlag; reportItem.saldoInicial = 0; reportItem.debe = partida.debe; reportItem.haber = partida.haber; reportItem.saldoFinal = partida.debe - partida.haber; myReportList.Add(reportItem); cantidadRegistros++; } } if (cantidadRegistros == 0) { errorMessage = "No existe información para mostrar el reporte " + "que Ud. ha requerido. <br /><br /> Probablemente Ud. no ha aplicado un " + "filtro y seleccionado información aún."; return(false); } ReportViewer1.LocalReport.ReportPath = "contabm/reports/contab_cuentasYSusMovimientos.rdlc"; ReportDataSource myReportDataSource = new ReportDataSource(); myReportDataSource.Name = "DataSet1"; myReportDataSource.Value = myReportList; ReportViewer1.LocalReport.DataSources.Add(myReportDataSource); //ReportParameter FechaInicialPeriodo_ReportParameter = new // ReportParameter("FechaInicialPeriodo", dFechaInicialPeriodo.ToString()); //ReportParameter FechaFinalPeriodo_ReportParameter = new // ReportParameter("FechaFinalPeriodo", dFechaFinalPeriodo.ToString()); string nombreCiaContab = dbContab.Companias.Where(x => x.Numero == ciaContab).Select(x => x.Nombre).FirstOrDefault(); ReportParameter[] MyReportParameters = { new ReportParameter("nombreCiaContab", nombreCiaContab), new ReportParameter("desde", desde), new ReportParameter("hasta", hasta) }; ReportViewer1.LocalReport.SetParameters(MyReportParameters); ReportViewer1.LocalReport.Refresh(); return(true); }
protected void Page_Load(object sender, EventArgs e) { Master.Page.Title = "contab - Reconversión"; // TODO: porqué hay dos espacios para mostrar mensajes de error???? this.ErrMessage_Span.InnerHtml = ""; this.ErrMessage_Span.Visible = false; this.errorMessageDiv.Visible = false; this.InfoMessage_Span.Visible = false; if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } if (!Page.IsPostBack) { // Gets a reference to a Label control that is not in a // ContentPlaceHolder control HtmlContainerControl MyHtmlSpan; MyHtmlSpan = (HtmlContainerControl)Master.FindControl("AppName_Span"); if (!(MyHtmlSpan == null)) { MyHtmlSpan.InnerHtml = "Reconversión monetaria"; } HtmlGenericControl MyHtmlH2; MyHtmlH2 = (HtmlGenericControl)Master.FindControl("PageTitle_TableCell"); if (!(MyHtmlH2 == null)) { // sub título para la página MyHtmlH2.InnerHtml = "Reconversión monetaria"; } Session["reconversionMonetaria.cantidadDigitos"] = null; Session["reconversionMonetaria.ano"] = null; // intentamos leer la compañía seleccionada int ciaContabSeleccionada; string nombreCiaContabSeleccionada; using (dbContab_Contab_Entities context = new dbContab_Contab_Entities()) { try { var cia = context.tCiaSeleccionadas.Where(s => s.UsuarioLS == User.Identity.Name). Select(c => new { ciaContabSeleccionada = c.Compania.Numero, ciaContabSeleccionadaNombre = c.Compania.Nombre }). FirstOrDefault(); if (cia == null) { string errorMessage = "Error: aparentemente, no se ha seleccionado una <em>Cia Contab</em>.<br />" + "Por favor seleccione una <em>Cia Contab</em> y luego regrese y continúe con la ejecución de esta función."; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; return; } nombreCiaContabSeleccionada = cia.ciaContabSeleccionadaNombre; ciaContabSeleccionada = cia.ciaContabSeleccionada; this.companiaSeleccionada_label.Text = nombreCiaContabSeleccionada; } catch (Exception ex) { string message = ex.Message; if (ex.InnerException != null) { message += "<br />" + ex.InnerException.Message; } string errorMessage = "Error: se ha producido un error al intentar efectuar una operación en la base de datos.<br />" + "El mensaje específico de error es: <br />" + message; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; } } this.texto1.Visible = false; } else { // ------------------------------------------------------------------------- // la página puede ser 'refrescada' por el popup; en ese caso, ejeucutamos // una función que efectúa alguna funcionalidad y rebind la información if (RebindFlagHiddenField.Value == "1") { RefreshAndBindInfo(); RebindFlagHiddenField.Value = "0"; } // ------------------------------------------------------------------------- } }
private void bancos(dbContab_Contab_Entities context, string divisor, int moneda, short ano, int ciaSeleccionada, out bool error, out string message) { error = false; message = ""; string desde = new DateTime(ano, 1, 1).ToString("yyyy-MM-dd"); string hasta = new DateTime(ano, 12, 31).ToString("yyyy-MM-dd"); int cant_facturas_actualizadas = 0; int cant_cuotas_actualizadas = 0; int cant_impuestosRetenciones_actualizadas = 0; int cant_pagos_actualizadas = 0; int cant_dPagos_actualizadas = 0; int cant_movimientosBancarios_actualizadas = 0; // ------------------------------------------------------- // facturas // ------------------------------------------------------- try { string queryString = $"Update f Set f.MontoFacturaSinIva = Round(f.MontoFacturaSinIva / { divisor}, 2), f.RetencionSobreIva = Round(f.RetencionSobreIva / { divisor}, 2), " + $"f.MontoFacturaConIva = Round(f.MontoFacturaConIva / { divisor}, 2), f.Iva = Round(f.Iva / { divisor}, 2), " + $"f.TotalFactura = Round(f.TotalFactura / { divisor}, 2), f.MontoSujetoARetencion = Round(f.MontoSujetoARetencion / { divisor}, 2), " + $"f.ImpuestoRetenidoISLRAntesSustraendo = Round(f.ImpuestoRetenidoISLRAntesSustraendo / { divisor}, 2), " + $"f.ImpuestoRetenidoISLRSustraendo = Round(f.ImpuestoRetenidoISLRSustraendo / { divisor}, 2), f.ImpuestoRetenido = Round(f.ImpuestoRetenido / { divisor}, 2), " + $"f.OtrosImpuestos = Round(f.OtrosImpuestos / { divisor}, 2), f.OtrasRetenciones = Round(f.OtrasRetenciones / { divisor}, 2), " + $"f.TotalAPagar = Round(f.TotalAPagar / { divisor}, 2), f.Anticipo = Round(f.Anticipo / { divisor}, 2), " + $"f.Saldo = Round(f.Saldo / { divisor}, 2) " + $"From Facturas f " + $"Where ((f.CxCCxPFlag = 1 And f.FechaRecepcion Between '{desde}' and '{hasta}') Or " + $"(f.CxCCxPFlag = 2 And f.FechaEmision Between '{desde}' and '{hasta}')) " + $"And f.Moneda = {moneda} And f.Cia = {ciaSeleccionada}"; cant_facturas_actualizadas = context.ExecuteStoreCommand(queryString); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } // ------------------------------------------------------- // cuotas // ------------------------------------------------------- try { string queryString = $"Update c Set c.MontoCuota = Round(c.MontoCuota / { divisor}, 2), c.RetencionSobreIva = Round(c.RetencionSobreIva / { divisor}, 2), " + $"c.RetencionSobreISLR = Round(c.RetencionSobreISLR / { divisor}, 2), c.OtrosImpuestos = Round(c.OtrosImpuestos / { divisor}, 2), " + $"c.Iva = Round(c.Iva / { divisor}, 2), c.OtrasRetenciones = Round(c.OtrasRetenciones / { divisor}, 2), " + $"c.TotalCuota = Round(c.TotalCuota / { divisor}, 2), " + $"c.Anticipo = Round(c.Anticipo / { divisor}, 2), c.SaldoCuota = Round(c.SaldoCuota / { divisor}, 2) " + $"from CuotasFactura c Inner Join Facturas f On c.ClaveUnicaFactura = f.ClaveUnica " + $"Where ((f.CxCCxPFlag = 1 And f.FechaRecepcion Between '{desde}' and '{hasta}') Or " + $"(f.CxCCxPFlag = 2 And f.FechaEmision Between '{desde}' and '{hasta}')) " + $"And f.Moneda = {moneda} And f.Cia = {ciaSeleccionada}"; cant_cuotas_actualizadas = context.ExecuteStoreCommand(queryString); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } // ------------------------------------------------------- // impuestos / retenciones // ------------------------------------------------------- try { string queryString = $"Update i Set i.MontoBase = Round(i.MontoBase / { divisor}, 2), i.MontoAntesSustraendo = Round(i.MontoAntesSustraendo / { divisor}, 2), " + $"i.Sustraendo = Round(i.Sustraendo / { divisor}, 2), i.Monto = Round(i.Monto / { divisor}, 2) " + $"From Facturas_Impuestos i Inner Join Facturas f On i.FacturaID = f.ClaveUnica " + $"Where ((f.CxCCxPFlag = 1 And f.FechaRecepcion Between '{desde}' and '{hasta}') Or " + $"(f.CxCCxPFlag = 2 And f.FechaEmision Between '{desde}' and '{hasta}')) " + $"And f.Moneda = {moneda} And f.Cia = {ciaSeleccionada}"; cant_impuestosRetenciones_actualizadas = context.ExecuteStoreCommand(queryString); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } // ------------------------------------------------------- // pagos // ------------------------------------------------------- try { string queryString = $"Update p Set p.Monto = Round(p.Monto / { divisor}, 2) " + $"From Pagos p " + $"Where (p.Fecha Between '{desde}' and '{hasta}') And " + $"p.Moneda = {moneda} And p.Cia = {ciaSeleccionada}"; cant_pagos_actualizadas = context.ExecuteStoreCommand(queryString); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } // ------------------------------------------------------- // dPagos // ------------------------------------------------------- try { string queryString = $"Update d Set d.MontoPagado = Round(d.MontoPagado / { divisor}, 2) " + $"From dPagos d Inner Join Pagos p On d.ClaveUnicaPago = p.ClaveUnica " + $"Where (p.Fecha Between '{desde}' and '{hasta}') And p.Moneda = {moneda} And p.Cia = {ciaSeleccionada}"; cant_dPagos_actualizadas = context.ExecuteStoreCommand(queryString); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } // ------------------------------------------------------- // movimientos bancarios // ------------------------------------------------------- try { string queryString = $"Update m Set m.MontoBase = Round(m.MontoBase / { divisor}, 2), m.Comision = Round(m.Comision / { divisor}, 2), " + $"m.Impuestos = Round(m.Impuestos / { divisor}, 2), m.Monto = Round(m.Monto / { divisor}, 2) " + $"From MovimientosBancarios m Inner Join Chequeras ch On m.ClaveUnicaChequera = ch.NumeroChequera " + $"Inner Join CuentasBancarias cb On ch.NumeroCuenta = cb.CuentaInterna " + $"Where (m.Fecha Between '{desde}' and '{hasta}') And cb.Moneda = {moneda} And cb.Cia = {ciaSeleccionada}"; cant_movimientosBancarios_actualizadas = context.ExecuteStoreCommand(queryString); } catch (Exception ex) { error = true; message = "Ha ocurrido un error al intentar ejecutar una operación de acceso a la base de datos. <br /> " + "El mensaje específico de error es: " + ex.Message + "<br /><br />"; return; } message = $"<h3>Bancos</h3><br />" + $"Ok, El proceso ha finalizado en forma satisfactoria.<br /><br />" + $"En total, se han actualizado: {cant_facturas_actualizadas.ToString()} facturas, <br /> " + $"{cant_cuotas_actualizadas.ToString()} cuotas de factura, <br />" + $"{cant_impuestosRetenciones_actualizadas.ToString()} registros de impuestos y retenciones, <br />" + $"{cant_pagos_actualizadas.ToString()} pagos, <br />" + $"{cant_dPagos_actualizadas.ToString()} dPagos, <br />" + $"y, finalmente, {cant_movimientosBancarios_actualizadas.ToString()} movimientos bancarios. "; return; }
private void RefreshAndBindInfo() { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } if (Session["reconversionMonetaria.cantidadDigitos"] == null || Session["reconversionMonetaria.ano"] == null || Session["reconversionMonetaria.cuentaContableID"] == null) { string errorMessage = "Aparentemente, Ud. no ha indicado un filtro (parámetros de ejecución) aún; o lo ha indicado de manera <em>incompleta</em>.<br />" + "Ud. debe abrir la página que muestra el filtro e indicar valores para todos los parámetros de ejecución de este proceso."; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; return; } dbContab_Contab_Entities context = new dbContab_Contab_Entities(); // leemos la cuenta contable indicada por el usuaio int cuentaContableID = Convert.ToInt32(Session["reconversionMonetaria.cuentaContableID"]); CuentasContable cuentaContable = context.CuentasContables.Where(c => c.ID == cuentaContableID).FirstOrDefault(); if (cuentaContable == null) { string errorMessage = "Error: no hemos podido leer la cuenta contable indicada en el filtro.</em>.<br />" + "Por favor revise. La cuenta contable indicada debe existir en la tabla de cuentas contables."; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; return; } // debe existir una moneda 'nacional'; solo para ésta haremos la reconversión ... var monedaNacional_array = context.Monedas.Where(m => m.NacionalFlag); if (monedaNacional_array == null) { string errorMessage = "Error: aparentemente, no se ha definido una de las monedas como <em>nacional</em>.<br />" + "Ud. debe revisar la tabla de monedas y asegurarse que una de ellas sea definida como <em>nacional</em>."; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; return; } if (monedaNacional_array.Count() > 1) { string errorMessage = "Error: aparentemente, más de una moneda ha sido definida del tipo <em>nacional</em>.<br />" + "Ud. debe revisar la tabla de monedas y asegurarse que <b>solo una de ellas</b> sea definida como <em>nacional</em>."; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; return; } Moneda monedaNacional = monedaNacional_array.First(); var cia = context.tCiaSeleccionadas.Where(s => s.UsuarioLS == User.Identity.Name). Select(c => new { ciaContabSeleccionada = c.Compania.Numero }). FirstOrDefault(); short ano = Convert.ToInt16(Session["reconversionMonetaria.ano"]); // leemos los asientos del año, para asegurarnos que no hay asientos descuadrados ... string sSqlQueryString = "SELECT Count(*) As partidas " + "FROM dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " + "Where a.AnoFiscal = {0} And a.Moneda = {1} And a.Cia = {2} " + "Group By d.NumeroAutomatico " + "Having Sum(d.Debe) <> Sum(d.Haber)"; List <int> asientosDescuadrados = context.ExecuteStoreQuery <int>(sSqlQueryString, ano, monedaNacional.Moneda1, cia.ciaContabSeleccionada).ToList(); if (asientosDescuadrados.Count() > 0) { // nota: esta situación no aborta el proceso, pues debe ser el resultado del 1er. paso de la reconversión ... string errorMessage = "Advertencia: existen asientos descuadrados para el año a reconvertir.<br />" + "Ud. debe continuar con el próximo paso y ajustarlos, <b>solo</b> si estos asientos son producto del 1er. paso de la reconversión."; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; } Int16 cantidadDigitos = Convert.ToInt16(Session["reconversionMonetaria.cantidadDigitos"]); // finalmente, determinamos el divisor para la reconversión: si, por ejemplo, la cantidad de dígitos es 3, el dividor debe ser 1.000 int divisor = 1; for (short i = 1; i <= cantidadDigitos; i++) { divisor = divisor * 10; } this.monedaNacional_span.InnerText = monedaNacional.Descripcion + " (" + monedaNacional.Simbolo + ")"; this.cuentaContable_span.InnerText = $"{cuentaContable.CuentaEditada} - {cuentaContable.Descripcion} - {cuentaContable.ID.ToString()}"; this.ano_span.InnerText = ano.ToString(); this.cantidadDigitos_span.InnerText = cantidadDigitos.ToString(); this.divisor_span.InnerText = divisor.ToString("N0"); this.texto1.Visible = false; this.texto1.Visible = true; this.ejecutarReconversion_button.Visible = true; parametrosProc parametrosProc = new parametrosProc { ano = ano, moneda = monedaNacional.Moneda1, cantidadDigitos = cantidadDigitos, divisor = divisor, cuentaContableID = cuentaContable.ID, ciaContabSeleccionada = cia.ciaContabSeleccionada, }; // la idea es mantener el state de estos parámetros para tenerlos siempre a la mano ... Session["parametrosProc"] = parametrosProc; }
protected void ejecutarReconversion_button_Click(object sender, EventArgs e) { bool ejecutarContablidad = this.proceso_contabilidad_RadioButton.Checked; bool ejecutarContablidad_asientosAjuste = this.proceso_contabilidad_asientos_RadioButton.Checked; bool ejecutarContablidad_saldosIniciales = this.proceso_contabilidad_saldosIniciales_RadioButton.Checked; bool ejecutarContablidad_saldosIniciales_cuadrar = this.proceso_contabilidad_saldosIniciales_cuadrar_RadioButton.Checked; bool ejecutarBancos = this.proceso_bancos_RadioButton.Checked; //bool ejecutarNomina = this.proceso_nomina_RadioButton.Checked; //bool ejecutarCajaChica = this.proceso_cajaChica_RadioButton.Checked; bool ejecutarActivosFijos = this.proceso_activosFijos_RadioButton.Checked; if (!ejecutarContablidad && !ejecutarContablidad_asientosAjuste && !ejecutarContablidad_saldosIniciales && !ejecutarBancos && !ejecutarContablidad_saldosIniciales_cuadrar && !ejecutarActivosFijos) { string errorMessage = "Ud. debe seleccionar un proceso a ejecutar.<br />"; this.ErrMessage_Span.InnerHtml = errorMessage; this.ErrMessage_Span.Visible = true; return; } // recuperamos los parámetros de ejecución del proceso: año, cantidad de dígitos, moneda y cia ... parametrosProc parametrosProc = (parametrosProc)Session["parametrosProc"]; dbContab_Contab_Entities context = new dbContab_Contab_Entities(); if (ejecutarContablidad) { string sDivisor = parametrosProc.divisor.ToString(); bool error = false; string message = ""; contabilidad(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message); if (error) { this.ErrMessage_Span.InnerHtml = message; this.ErrMessage_Span.Visible = true; } else { this.InfoMessage_Span.InnerHtml = message; this.InfoMessage_Span.Visible = true; } return; } if (ejecutarContablidad_saldosIniciales) { string sDivisor = parametrosProc.divisor.ToString(); bool error = false; string message = ""; contabilidad_saldosInicialesAjuste(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message); if (error) { this.ErrMessage_Span.InnerHtml = message; this.ErrMessage_Span.Visible = true; } else { this.InfoMessage_Span.InnerHtml = message; this.InfoMessage_Span.Visible = true; } return; } if (ejecutarContablidad_saldosIniciales_cuadrar) { bool error = false; string message = ""; contabilidad_saldosInicialesCuadrar(context, parametrosProc.cuentaContableID, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message); if (error) { this.ErrMessage_Span.InnerHtml = message; this.ErrMessage_Span.Visible = true; } else { this.InfoMessage_Span.InnerHtml = message; this.InfoMessage_Span.Visible = true; } return; } if (ejecutarContablidad_asientosAjuste) { bool error = false; string message = ""; contabilidad_asientosAjuste(context, parametrosProc.cuentaContableID, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message); if (error) { this.ErrMessage_Span.InnerHtml = message; this.ErrMessage_Span.Visible = true; } else { this.InfoMessage_Span.InnerHtml = message; this.InfoMessage_Span.Visible = true; } return; } if (ejecutarBancos) { bool error = false; string message = ""; string sDivisor = parametrosProc.divisor.ToString(); bancos(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message); if (error) { this.ErrMessage_Span.InnerHtml = message; this.ErrMessage_Span.Visible = true; } else { this.InfoMessage_Span.InnerHtml = message; this.InfoMessage_Span.Visible = true; } return; } //if (ejecutarCajaChica) //{ // return; //} //if (ejecutarNomina) //{ // return; //} if (ejecutarActivosFijos) { bool error = false; string message = ""; string sDivisor = parametrosProc.divisor.ToString(); activosFijos(context, sDivisor, parametrosProc.moneda, parametrosProc.ano, parametrosProc.ciaContabSeleccionada, out error, out message); if (error) { this.ErrMessage_Span.InnerHtml = message; this.ErrMessage_Span.Visible = true; } else { this.InfoMessage_Span.InnerHtml = message; this.InfoMessage_Span.Visible = true; } return; } }