public FuncionesContab(int nCiaContab, int nMoneda, dbContabDataContext dbContab) { // // TODO: Add constructor logic here // _CiaContab = nCiaContab; _Moneda = nMoneda; _dbContab = dbContab; }
protected void LeerCuentasContablesAsociadas_Button_Click(object sender, EventArgs e) { // leemos las cuentas contables asociadas al código de presupuesto seleccionado y las marcamos en el // ListBox de cuentas contables // antes eliminamos cualquier selección que pueda existir para el ListBox CuentasContables_ListBox.SelectedIndex = -1; // primero verificamos que exista una cia contab y un código de presupuesto seleccionados if (CodigosPresupuesto_ListBox.SelectedIndex == -1 || CiasContab_DropDownList.SelectedValue == "-1") { ErrMessage_Span.InnerHtml = "Ud. debe seleccionar una compañía Contab y un código de presupuesto antes de intentar ejecutar esta función."; ErrMessage_Span.Style["display"] = "block"; return; } dbContabDataContext dbContab = new dbContabDataContext(); IEnumerable <int> CuentasContables = from cc in dbContab.Presupuesto_AsociacionCodigosCuentas where cc.CiaContab == int.Parse(CiasContab_DropDownList.SelectedValue) && cc.CodigoPresupuesto == CodigosPresupuesto_ListBox.SelectedValue select cc.CuentaContableID; int RecCount = 0; for (int i = 0; i < CuentasContables_ListBox.Items.Count; i++) { int a = (from aa in CuentasContables where aa == Convert.ToInt32(CuentasContables_ListBox.Items[i].Value) select aa).Count(); if (a == 0) { // la cuenta contable leída desde el ListBox no existe en el query de cuentas para el código // de presupuesto seleccionado continue; } // la cuenta contable en el ListBox existe en el query; la seleccionamos CuentasContables_ListBox.Items[i].Selected = true; RecCount++; } CodigosPresupuesto_Message_Span.InnerHtml = "Ok, existen " + RecCount.ToString() + " cuentas contables asociadas al código de presupuesto " + CodigosPresupuesto_ListBox.SelectedValue + ". <br /><br />Fueron seleccionadas en la lista de cuentas contables."; CodigosPresupuesto_Message_Span.Style["display"] = "block"; }
protected void Presupuesto_Montos_LinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) { LinqDataSource myLinqDataSource = this.Presupuesto_Montos_LinqDataSource; dbContabDataContext dbContab = new dbContabDataContext(); var query = dbContab.Presupuesto_Montos.Select(m => m); if (Anos_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.Ano == Convert.ToInt16(this.Anos_DropDownList.SelectedValue)); } if (Monedas_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.Moneda == Convert.ToInt32(Monedas_DropDownList.SelectedValue)); } if (CiasContab_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.CiaContab == Convert.ToInt32(this.CiasContab_DropDownList.SelectedValue)); } if (!string.IsNullOrEmpty(this.CodigoCuentaPresupuesto_TextBox.Text)) { if (this.CodigoCuentaPresupuesto_TextBox.Text.Contains("*")) { if (this.CodigoCuentaPresupuesto_TextBox.Text.StartsWith("*")) { query = query.Where(m => m.CodigoPresupuesto.EndsWith(this.CodigoCuentaPresupuesto_TextBox.Text.Replace("*", ""))); } else if (this.CodigoCuentaPresupuesto_TextBox.Text.EndsWith("*")) { query = query.Where(m => m.CodigoPresupuesto.StartsWith(this.CodigoCuentaPresupuesto_TextBox.Text.Replace("*", ""))); } else { query = query.Where(m => m.CodigoPresupuesto.Contains(this.CodigoCuentaPresupuesto_TextBox.Text)); } } else { query = query.Where(m => m.CodigoPresupuesto.Contains(this.CodigoCuentaPresupuesto_TextBox.Text)); } } e.Result = query; }
private void RefreshAndBindInfo() { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } if (Session["FiltroForma"] == null) { ErrMessage_Span.InnerHtml = "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."; ErrMessage_Span.Style["display"] = "block"; return; } dbContabDataContext dbContab = new dbContabDataContext(); // -------------------------------------------------------------------------------------------- // determinamos el mes y año fiscales, para usarlos como criterio para buscar el saldo en la tabla // SaldosContables. En esta table, los saldos están para el mes fiscal y no para el mes calendario. // Los meses solo varían cuando el año fiscal no es igual al año calendario // -------------------------------------------------------------------------------------------- // eliminamos el contenido de la tabla temporal try { dbContab.ExecuteCommand("Delete From tTempWebReport_PresupuestoConsultaMontosEstimados Where NombreUsuario = {0}", Membership.GetUser().UserName); } catch (Exception ex) { dbContab.Dispose(); ErrMessage_Span.InnerHtml = "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 />"; ErrMessage_Span.Style["display"] = "block"; return; } // usamos el criterio que indico el usuario para leer los códigos de presupuesto y sus montos // estimados y registrar esta información en una tabla 'temporal' (tTempWebReport...) var query = dbContab.ExecuteQuery <Presupuesto_Monto>( "Select * From Presupuesto_Montos Where " + Session["FiltroForma"].ToString()); List <tTempWebReport_PresupuestoConsultaMontosEstimado> TemporalRecords_List = new List <tTempWebReport_PresupuestoConsultaMontosEstimado>(); tTempWebReport_PresupuestoConsultaMontosEstimado TemporalRecord; foreach (Presupuesto_Monto record in query) { TemporalRecord = new tTempWebReport_PresupuestoConsultaMontosEstimado(); TemporalRecord.Moneda = record.Moneda; TemporalRecord.CiaContab = record.CiaContab; TemporalRecord.AnoFiscal = record.Ano; TemporalRecord.CodigoPresupuesto = record.CodigoPresupuesto; TemporalRecord.Mes01_Est = record.Mes01_Est; TemporalRecord.Mes02_Est = record.Mes02_Est; TemporalRecord.Mes03_Est = record.Mes03_Est; TemporalRecord.Mes04_Est = record.Mes04_Est; TemporalRecord.Mes05_Est = record.Mes05_Est; TemporalRecord.Mes06_Est = record.Mes06_Est; TemporalRecord.Mes07_Est = record.Mes07_Est; TemporalRecord.Mes08_Est = record.Mes08_Est; TemporalRecord.Mes09_Est = record.Mes09_Est; TemporalRecord.Mes10_Est = record.Mes10_Est; TemporalRecord.Mes11_Est = record.Mes11_Est; TemporalRecord.Mes12_Est = record.Mes12_Est; TemporalRecord.NombreUsuario = Membership.GetUser().UserName; TemporalRecords_List.Add(TemporalRecord); } try { dbContab.tTempWebReport_PresupuestoConsultaMontosEstimados.InsertAllOnSubmit(TemporalRecords_List); dbContab.SubmitChanges(); } catch (Exception ex) { dbContab.Dispose(); ErrMessage_Span.InnerHtml = "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 />"; ErrMessage_Span.Style["display"] = "block"; return; } this.CiasContab_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue = Membership.GetUser().UserName; this.Monedas_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue = Membership.GetUser().UserName; this.Anos_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue = Membership.GetUser().UserName; CiasContab_DropDownList.DataBind(); Monedas_DropDownList.DataBind(); Anos_DropDownList.DataBind(); // intentamos usar como parametros del LinqDataSource el primer item en los combos Monedas y CiasContab if (this.CiasContab_DropDownList.Items.Count > 0) { CiasContab_DropDownList.SelectedIndex = 0; } if (this.Monedas_DropDownList.Items.Count > 0) { Monedas_DropDownList.SelectedIndex = 0; } if (this.Anos_DropDownList.Items.Count > 0) { Anos_DropDownList.SelectedIndex = 0; } // establecemos los valores de los parámetros en el LinqDataSource MontosEstimados_SqlDataSource.SelectParameters["CiaContab"].DefaultValue = "-999"; MontosEstimados_SqlDataSource.SelectParameters["Moneda"].DefaultValue = "-99"; MontosEstimados_SqlDataSource.SelectParameters["AnoFiscal"].DefaultValue = "-99"; if (CiasContab_DropDownList.SelectedValue != null && CiasContab_DropDownList.SelectedValue.ToString() != "") { MontosEstimados_SqlDataSource.SelectParameters["CiaContab"].DefaultValue = CiasContab_DropDownList.SelectedValue.ToString(); } if (Monedas_DropDownList.SelectedValue != null && Monedas_DropDownList.SelectedValue.ToString() != "") { MontosEstimados_SqlDataSource.SelectParameters["Moneda"].DefaultValue = Monedas_DropDownList.SelectedValue.ToString(); } if (Anos_DropDownList.SelectedValue != null && Anos_DropDownList.SelectedValue.ToString() != "") { MontosEstimados_SqlDataSource.SelectParameters["AnoFiscal"].DefaultValue = Anos_DropDownList.SelectedValue.ToString(); } MontosEstimados_SqlDataSource.SelectParameters["NombreUsuario"].DefaultValue = Membership.GetUser().UserName; MontosEstimados_ListView.DataBind(); dbContab.Dispose(); }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (Session["FechaInicialPeriodo"] == null || Session["FechaFinalPeriodo"] == null) { CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = "Aparentemente, Ud. no ha aplicado un filtro; debe hacerlo antes de intentar ejecutar esta consulta."; return; } // nótese cómo obtenemos la moneda nacional que viene como un parámetro. La necesitamos para saber si debemos o no reconvertir (reconversión de Oct/21) if (Session["monedaNacional"] == null) { CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = "Upsss, esta consulta no ha recibido un valor para la moneda nacional. <br /> " + "Por favor revise esta situación y corríjala para que sea posible la ejecución de esta consulta."; return; } var monedaNacional = 0; var moneda = 0; try { monedaNacional = Convert.ToInt32(Session["monedaNacional"]); moneda = Convert.ToInt32(Request.QueryString["mon"]); } catch (Exception err) { CustomValidator1.IsValid = false; CustomValidator1.ErrorMessage = "Hemos obtenido un error al intentar obtener la moneda y/o moneda nacional. <br /> " + "El mensaje específico del error obtenido es: " + err.Message; return; } // para saber si el usuario quiere reconvertir las cifras anteriores al 1-Oct-21 bool bReconvertirCifrasAntes_01Oct2021 = false; if (Session["ReconvertirCifrasAntes_01Oct2021"] != null) { bReconvertirCifrasAntes_01Oct2021 = (bool)Session["ReconvertirCifrasAntes_01Oct2021"]; } dbContabDataContext dbContab = new dbContabDataContext(); var query = (from cta in dbContab.CuentasContables where cta.ID == Convert.ToInt32(Request.QueryString["cta"]) select new { cta.CuentaEditada, cta.Descripcion }).FirstOrDefault(); DateTime FechaInicialPeriodo = (System.DateTime)Session["FechaInicialPeriodo"]; DateTime FechaFinalPeriodo = (System.DateTime)Session["FechaFinalPeriodo"]; TituloPagina.InnerHtml = "Movimientos contables para la cuenta <i>" + query.CuentaEditada + " - " + query.Descripcion + "</i><br /> en el período " + FechaInicialPeriodo.ToString("dd-MMM-yy") + " a " + FechaFinalPeriodo.ToString("dd-MMM-yy"); // ------------------------------------------------------------------------------------------------------------------ // para dar valores a los parámetros del SqlDataSource this.MovimientosContables_SqlDataSource.SelectParameters["CuentaContableID"].DefaultValue = Request.QueryString["cta"]; this.MovimientosContables_SqlDataSource.SelectParameters["Moneda"].DefaultValue = Request.QueryString["mon"]; this.MovimientosContables_SqlDataSource.SelectParameters["FechaInicialPeriodo"].DefaultValue = Session["FechaInicialPeriodo"].ToString(); this.MovimientosContables_SqlDataSource.SelectParameters["FechaFinalPeriodo"].DefaultValue = Session["FechaFinalPeriodo"].ToString(); // ------------------------------------------------------------------------------------------------------------------ Label MySumOfDebe_Label = (Label)BalanceComprobacion_ListView.FindControl("SumOfDebe_Label"); Label MySumOfHaber_Label = (Label)BalanceComprobacion_ListView.FindControl("SumOfHaber_Label"); decimal?nTotalDebe = 0; decimal?nTotalHaber = 0; DateTime fechaInicialPeriodo = Convert.ToDateTime(Session["FechaInicialPeriodo"].ToString()); DateTime fechaFinalPeriodo = Convert.ToDateTime(Session["FechaFinalPeriodo"].ToString()); // ahora sumarizamos el debe y el haber para la cuenta y período indicados ... if (bReconvertirCifrasAntes_01Oct2021 && (moneda == monedaNacional)) { // Nota: cuando el usuario quiere reconvertir, excluimos el asiento de reconversión // primero leemos valores *anteriores* a 1/Oct/21 y reconvertimos nTotalDebe = (from d in dbContab.dAsientos where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) && d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) && (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha < new DateTime(2021, 10, 1)) && (d.Referencia == null || d.Referencia != "Reconversión 2021") select(decimal?) d.Debe).Sum(); nTotalHaber = (from d in dbContab.dAsientos where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) && d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) && (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha < new DateTime(2021, 10, 1)) && (d.Referencia == null || d.Referencia != "Reconversión 2021") select(decimal?) d.Haber).Sum(); // luego leemos valores *posteriores* a 1/Oct/21 y *no* reconvertimos var nTotalDebe2 = (from d in dbContab.dAsientos where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) && d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) && (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha <= fechaFinalPeriodo) && d.Asiento.Fecha >= new DateTime(2021, 10, 1) && (d.Referencia == null || d.Referencia != "Reconversión 2021") select(decimal?) d.Debe).Sum(); var nTotalHaber2 = (from d in dbContab.dAsientos where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) && d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) && (d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha <= fechaFinalPeriodo) && d.Asiento.Fecha >= new DateTime(2021, 10, 1) && (d.Referencia == null || d.Referencia != "Reconversión 2021") select(decimal?) d.Haber).Sum(); nTotalDebe = nTotalDebe.HasValue ? nTotalDebe.Value : 0; nTotalHaber = nTotalHaber.HasValue ? nTotalHaber.Value : 0; nTotalDebe2 = nTotalDebe2.HasValue ? nTotalDebe2.Value : 0; nTotalHaber2 = nTotalHaber2.HasValue ? nTotalHaber2.Value : 0; // reconvertimos nTotalDebe = Math.Round((nTotalDebe.Value / 1000000), 2); nTotalHaber = Math.Round((nTotalHaber.Value / 1000000), 2); nTotalDebe += nTotalDebe2; nTotalHaber += nTotalHaber2; } else { // Nota: cuando el usuario no quiere reconvertir, mantenemos el asiento de reconversión nTotalDebe = (from d in dbContab.dAsientos where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) && d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) && d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha <= fechaFinalPeriodo select(decimal?) d.Debe).Sum(); nTotalHaber = (from d in dbContab.dAsientos where d.CuentaContableID == Convert.ToInt32(Request.QueryString["cta"].ToString()) && d.Asiento.Moneda == Convert.ToInt32(Request.QueryString["mon"]) && d.Asiento.Fecha >= fechaInicialPeriodo && d.Asiento.Fecha <= fechaFinalPeriodo select(decimal?) d.Haber).Sum(); } dbContab = null; if (MySumOfDebe_Label != null) { MySumOfDebe_Label.Text = nTotalDebe == null ? "0,00" : nTotalDebe.Value.ToString("#,##0.00"); } if (MySumOfHaber_Label != null) { MySumOfHaber_Label.Text = nTotalHaber == null ? "0,00" : nTotalHaber.Value.ToString("#,##0.00"); } // --------------------------------------------------------------------------------------------------------------- // agregamos el select statement al Sql DataSource; la idea es cambiarlo dependiendo de si el usuario // quiere o no reconvertir las cifras por la reconversión de Oct/2.021. if (bReconvertirCifrasAntes_01Oct2021 && (moneda == monedaNacional)) { // Ok, el usuario quiere reconvertir. Reconvertimos solo cifras anteriores a Oct/2.021 y en moneda nacional // hacemos un Union en el Select para aplicar la reconversión *solo* a movimientos anteriores al 1/Oct/2021 // Nota: cuando el usuario quiere reconvertir, excluimos el asiento de reconversion this.MovimientosContables_SqlDataSource.SelectCommand = // el 1er Select lee debe y haber *anterioes* al 1/Oct/21; reconvierte "Select d.Partida, d.NumeroAutomatico, a.Numero As NumeroComprobanteContable, a.Fecha As Fecha, " + "d.Descripcion As DescripcionPartida, d.Referencia, " + "Round((d.Debe / 1000000), 2) as Debe, Round((d.Haber / 1000000), 2) as Haber, Count(l.Id) as NumLinks, " + "co.Abreviatura As NombreCiaContab, m.Simbolo As SimboloMoneda, mo.Simbolo As SimboloMonedaOriginal " + "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico Inner Join Monedas m on a.Moneda = m.Moneda " + "Inner Join Monedas mo on a.MonedaOriginal = mo.Moneda Inner Join Companias co on a.Cia = co.Numero " + "Left Join Asientos_Documentos_Links l on a.NumeroAutomatico = l.NumeroAutomatico " + "Where (d.CuentaContableID = @CuentaContableID) And (a.Moneda = @Moneda) And (a.Fecha >= @FechaInicialPeriodo and a.Fecha < @FechaFinalPeriodo) And " + "(a.Fecha < '2021-10-1') And (d.Referencia Is Null Or d.Referencia <> 'Reconversión 2021') " + "Group By d.Partida, d.NumeroAutomatico, a.Numero, a.Fecha, d.Descripcion, d.Referencia, d.Debe, d.Haber, co.Abreviatura, m.Simbolo, mo.Simbolo " + "Union " + // el 2do Select lee debe y haber *posteriores* al 1/Oct/21; no reconvierte "Select d.Partida, d.NumeroAutomatico, a.Numero As NumeroComprobanteContable, a.Fecha As Fecha, " + "d.Descripcion As DescripcionPartida, d.Referencia, d.Debe, d.Haber, Count(l.Id) as NumLinks, " + "co.Abreviatura As NombreCiaContab, m.Simbolo As SimboloMoneda, mo.Simbolo As SimboloMonedaOriginal " + "From dAsientos d Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico Inner Join Monedas m on a.Moneda = m.Moneda " + "Inner Join Monedas mo on a.MonedaOriginal = mo.Moneda Inner Join Companias co on a.Cia = co.Numero " + "Left Join Asientos_Documentos_Links l on a.NumeroAutomatico = l.NumeroAutomatico " + "Where (d.CuentaContableID = @CuentaContableID) And (a.Moneda = @Moneda) And (a.Fecha >= @FechaInicialPeriodo and a.Fecha <= @FechaFinalPeriodo) And " + "(a.Fecha >= '2021-10-1') And (d.Referencia Is Null Or d.Referencia <> 'Reconversión 2021') " + "Group By d.Partida, d.NumeroAutomatico, a.Numero, a.Fecha, d.Descripcion, d.Referencia, d.Debe, d.Haber, co.Abreviatura, m.Simbolo, mo.Simbolo " + "Order By a.Fecha, a.Numero, d.Partida"; } } }
protected void AsociarCodigosACuentaContable_Button_Click(object sender, EventArgs e) { // verificamos que existan registros seleccionados en ambos ListBoxes: codigos y cuentas if (CodigosPresupuesto_ListBox.SelectedIndex == -1 || CuentasContables_ListBox.SelectedIndex == -1 || CiasContab_DropDownList.SelectedValue == "-1") { ErrMessage_Span.InnerHtml = "Ud. debe seleccionar un registro en la lista de códigos de presupuesto y uno o varios " + "registros en la tabla de cuentas contables."; ErrMessage_Span.Style["display"] = "block"; return; } // agregamos registros a la tabla Presupuesto_AsociacionCodidosPresupuestoCuentasContables dbContabDataContext dbContab = new dbContabDataContext(); Presupuesto_AsociacionCodigosCuenta MyPresupuesto_AsociacionCodigosCuentas; List <Presupuesto_AsociacionCodigosCuenta> MyPresupuesto_AsociacionCodigosCuentas_List = new List <Presupuesto_AsociacionCodigosCuenta>(); int RecCount = 0; for (int i = 0; i < CuentasContables_ListBox.Items.Count; i++) { if (!(CuentasContables_ListBox.Items[i].Selected)) { continue; } // el item está seleccionado en el listbox; lo agregamos a nuestra lista MyPresupuesto_AsociacionCodigosCuentas = new Presupuesto_AsociacionCodigosCuenta(); MyPresupuesto_AsociacionCodigosCuentas.CodigoPresupuesto = CodigosPresupuesto_ListBox.SelectedValue; MyPresupuesto_AsociacionCodigosCuentas.CuentaContableID = Convert.ToInt32(CuentasContables_ListBox.Items[i].Value); MyPresupuesto_AsociacionCodigosCuentas.CiaContab = int.Parse(CiasContab_DropDownList.SelectedValue); MyPresupuesto_AsociacionCodigosCuentas_List.Add(MyPresupuesto_AsociacionCodigosCuentas); RecCount++; } // primero intentamos eliminar los registros de la tabla, por si acaso algunos existen try { dbContab.ExecuteCommand("Delete From Presupuesto_AsociacionCodigosCuentas Where CodigoPresupuesto = {0} And CiaContab = {1}", CodigosPresupuesto_ListBox.SelectedValue, CiasContab_DropDownList.SelectedValue); // Ok, ahora que sabemos que los registros no existen, los agregamos dbContab.Presupuesto_AsociacionCodigosCuentas.InsertAllOnSubmit(MyPresupuesto_AsociacionCodigosCuentas_List); dbContab.SubmitChanges(); CuentasContables_Message_Span.InnerHtml = "Ok, " + RecCount.ToString() + " cuentas contables fueron asociadas al código de presupuesto " + CodigosPresupuesto_ListBox.SelectedValue; CuentasContables_Message_Span.Style["display"] = "block"; } catch (Exception ex) { ErrMessage_Span.InnerHtml = "Ha ocurrido un error al intentar agregar la información a la base de datos.<br />El mensaje específico de error es: " + ex.Message; ErrMessage_Span.Style["display"] = "block"; return; } }
protected void Page_Load(object sender, EventArgs e) { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } if (!Page.IsPostBack) { switch (Request.QueryString["rpt"].ToString()) { case "ptomtosest": { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } Presupuesto_MontosEstimados MyReportDataSet = new Presupuesto_MontosEstimados(); MontosEstimadosTableAdapter MyReportTableAdapter = new MontosEstimadosTableAdapter(); MyReportTableAdapter.FillByNombreUsuario(MyReportDataSet.MontosEstimados, Membership.GetUser().UserName); if (MyReportDataSet.MontosEstimados.Rows.Count == 0) { ErrMessage_Cell.InnerHtml = "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; } // ----------------------------------------------------------------------------------------------- ReportViewer1.LocalReport.ReportPath = "Contab/Presupuesto/Consultas/Montos estimados/MontosEstimados.rdlc"; ReportDataSource myReportDataSource = new ReportDataSource(); myReportDataSource.Name = "Presupuesto_MontosEstimados_MontosEstimados"; myReportDataSource.Value = MyReportDataSet.MontosEstimados; ReportViewer1.LocalReport.DataSources.Add(myReportDataSource); // para ejecutar un procedimiento que procesa el sub report ReportViewer1.LocalReport.SubreportProcessing += Report_SubreportProcessingEventHandler; ReportViewer1.LocalReport.Refresh(); break; } case "ptoconsmes": { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } string cantNiveles = Request.QueryString["cantniveles"].ToString(); Presupuesto_ConsultaMensual MyReportDataSet = new Presupuesto_ConsultaMensual(); PresupuestoMensualTableAdapter MyReportTableAdapter = new PresupuestoMensualTableAdapter(); MyReportTableAdapter.FillByNombreUsuario(MyReportDataSet.PresupuestoMensual, Membership.GetUser().UserName); if (MyReportDataSet.PresupuestoMensual.Rows.Count == 0) { ErrMessage_Cell.InnerHtml = "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; } ReportViewer1.LocalReport.ReportPath = "Contab/Presupuesto/Consultas/Mensual/ConsultaMensual.rdlc"; ReportDataSource myReportDataSource = new ReportDataSource(); myReportDataSource.Name = "Presupuesto_ConsultaMensual_PresupuestoMensual"; myReportDataSource.Value = MyReportDataSet.PresupuestoMensual; ReportViewer1.LocalReport.DataSources.Add(myReportDataSource); dbContabDataContext dbContab = new dbContabDataContext(); var queryMesAno = (from t in dbContab.tTempWebReport_PresupuestoConsultaMensuals where t.NombreUsuario == Membership.GetUser().UserName select new { t.NombreMes, t.AnoFiscal, t.FactorConversion }) .FirstOrDefault(); if (queryMesAno == null) { ErrMessage_Cell.InnerHtml = "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; } string mes = queryMesAno.NombreMes; string ano = queryMesAno.AnoFiscal.ToString(); string sFactorConversion = queryMesAno.FactorConversion.ToString("N2"); dbContab = null; ReportParameter Mes_ReportParameter = new ReportParameter("Mes", mes); ReportParameter Ano_ReportParameter = new ReportParameter("Ano", ano); ReportParameter FactorConversion_ReportParameter = new ReportParameter("FactorConversion", sFactorConversion); ReportParameter CantNiveles_ReportParameter = new ReportParameter("CantNiveles", cantNiveles); ReportParameter[] MyReportParameters = { Mes_ReportParameter, Ano_ReportParameter, FactorConversion_ReportParameter, CantNiveles_ReportParameter }; ReportViewer1.LocalReport.SetParameters(MyReportParameters); ReportViewer1.LocalReport.Refresh(); break; } case "ptoconsanual": { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } string cantNiveles = Request.QueryString["cantniveles"].ToString(); Presupuesto_ConsultaAnual MyReportDataSet = new Presupuesto_ConsultaAnual(); Presupuesto_ConsultaAnualTableAdapter MyReportTableAdapter = new Presupuesto_ConsultaAnualTableAdapter(); MyReportTableAdapter.FillByNombreUsuario(MyReportDataSet._Presupuesto_ConsultaAnual, Membership.GetUser().UserName); if (MyReportDataSet._Presupuesto_ConsultaAnual.Rows.Count == 0) { ErrMessage_Cell.InnerHtml = "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; } ReportViewer1.LocalReport.ReportPath = "Contab/Presupuesto/Consultas/Anual/ConsultaAnual.rdlc"; ReportDataSource myReportDataSource = new ReportDataSource(); myReportDataSource.Name = "Presupuesto_ConsultaAnual_Presupuesto_ConsultaAnual"; myReportDataSource.Value = MyReportDataSet._Presupuesto_ConsultaAnual; ReportViewer1.LocalReport.DataSources.Add(myReportDataSource); dbContabDataContext dbContab = new dbContabDataContext(); short nAnoFiscalReporte = (from t in dbContab.tTempWebReport_PresupuestoConsultaAnuals where t.NombreUsuario == Membership.GetUser().UserName select t.AnoFiscal).FirstOrDefault(); dbContab = null; ReportParameter AnoFiscal_ReportParameter = new ReportParameter("AnoFiscal", nAnoFiscalReporte.ToString()); ReportParameter CifrasConvertidas_ReportParameter = new ReportParameter("CifrasConvertidas", "0"); if (Request.QueryString["conv"] != null && Request.QueryString["conv"].ToString() == "1") { CifrasConvertidas_ReportParameter.Values[0] = "1"; } ReportParameter CantNiveles_ReportParameter = new ReportParameter("CantNiveles", cantNiveles); ReportParameter[] MyReportParameters3 = { AnoFiscal_ReportParameter, CifrasConvertidas_ReportParameter, CantNiveles_ReportParameter }; ReportViewer1.LocalReport.SetParameters(MyReportParameters3); ReportViewer1.LocalReport.Refresh(); break; } } } }
protected void Page_PreRender(object sender, EventArgs e) { if (ConsultaPresupuesto_ListView.HasControls()) { // intentamos leer un registro en la tabla tTempWebReport..., para obtener la compañía Contab // usada en el filtro y leer los nombres de meses para ésta. NOTESE QUE si el usuario // selecciona más de una Cia Contab en el filtro y sus años fiscales difieren, los nombres // de meses en el encabezado pueden ser inconsistentes ... dbContabDataContext dbContab = new dbContabDataContext(); var ciaContab = (from t in dbContab.tTempWebReport_PresupuestoConsultaAnuals where t.NombreUsuario == User.Identity.Name select t.CiaContab).FirstOrDefault(); if (ciaContab == 0) { return; } // leemos los nombres de cada mes y los monstramos en los encabezados de las columnas // en el ListView. Nótese que el ListView muestra meses fiscales y no calendario var meses = from m in dbContab.MesesDelAnoFiscals where m.Mes >= 1 && m.Mes <= 12 where m.Cia == ciaContab orderby m.MesFiscal select m; foreach (var NombreMes in meses) { switch (NombreMes.MesFiscal) { case 1: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes01_th")).InnerHtml = NombreMes.NombreMes; break; } case 2: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes02_th")).InnerHtml = NombreMes.NombreMes; break; } case 3: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes03_th")).InnerHtml = NombreMes.NombreMes; break; } case 4: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes04_th")).InnerHtml = NombreMes.NombreMes; break; } case 5: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes05_th")).InnerHtml = NombreMes.NombreMes; break; } case 6: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes06_th")).InnerHtml = NombreMes.NombreMes; break; } case 7: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes07_th")).InnerHtml = NombreMes.NombreMes; break; } case 8: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes08_th")).InnerHtml = NombreMes.NombreMes; break; } case 9: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes09_th")).InnerHtml = NombreMes.NombreMes; break; } case 10: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes10_th")).InnerHtml = NombreMes.NombreMes; break; } case 11: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes11_th")).InnerHtml = NombreMes.NombreMes; break; } case 12: { ((HtmlTableCell)ConsultaPresupuesto_ListView.Controls[0] .FindControl("Mes12_th")).InnerHtml = NombreMes.NombreMes; break; } } } dbContab = null; } }
protected void CopiarCodigosPresupuesto_Button_Click(object sender, EventArgs e) { if (SourceCiaContab_ListBox.SelectedIndex == -1) { ErrMessage_Span.InnerHtml = "Ud. debe seleccionar la compañía que contiene los códigos de presupuesto a copiar."; ErrMessage_Span.Style["Display"] = "Block"; return; } if (TargetCiaContab_ListBox.SelectedIndex == -1) { ErrMessage_Span.InnerHtml = "Ud. debe seleccionar la compañía a la cual serán copiados los códigos de presupuesto."; ErrMessage_Span.Style["Display"] = "Block"; return; } if (TargetCiaContab_ListBox.SelectedValue == SourceCiaContab_ListBox.SelectedValue) { ErrMessage_Span.InnerHtml = "Ud. debe seleccionar compañías diferentes."; ErrMessage_Span.Style["Display"] = "Block"; return; } if (CopiarMontos_CheckBox.Checked && CopiarMontos_DropDownList.SelectedIndex == -1) { ErrMessage_Span.InnerHtml = "Ud. marcó la opción que indica que se deben también copiar los registros de montos estimados; sin embargo, no se ha seleccionado un año para estos registros de montos.<br />Nota: es probable que los registros de montos NO EXISTAN para la compañía que contiene los códigos; por esta razón, tal vez los años de estos montos no estén ni siquiera en la lista."; ErrMessage_Span.Style["Display"] = "Block"; return; } // chequeamos que la compañía Source tenga códigos de presupuesto registrados int nCantidadRegistros = 0; dbContabDataContext dbContab = new dbContabDataContext(); nCantidadRegistros = (from sc in dbContab.Presupuesto_Codigos where sc.CiaContab == int.Parse(SourceCiaContab_ListBox.SelectedValue) select sc).Count(); if (nCantidadRegistros == 0) { ErrMessage_Span.InnerHtml = "La compañía " + SourceCiaContab_ListBox.SelectedItem + " no tiene códigos de presupuesto registrados que puedan " + "ser copiados a la compañía " + TargetCiaContab_ListBox.SelectedItem + ". Por favor revise esta situación."; ErrMessage_Span.Style["Display"] = "Block"; dbContab = null; return; } // ahora chequeamos que la compañía Target NO TENGA códigos de presupuesto registrados; de ser así, // la opción Eliminar Registros debe estar marcada if (!EliminarCodigos_CheckBox.Checked) { int nCantidadCodigosTargetCia = (from a in dbContab.Presupuesto_Codigos where a.CiaContab == int.Parse(TargetCiaContab_ListBox.SelectedValue) select a.Codigo).Count(); if (nCantidadCodigosTargetCia > 0) { ErrMessage_Span.InnerHtml = "La compañía " + TargetCiaContab_ListBox.SelectedItem + " TIENE códigos de presupuesto registrados. " + "Ud. DEBE marcar la opción que permite eliminar estos registros antes de efectuar la copia de los códigos desde la compañía " + SourceCiaContab_ListBox.SelectedItem + "."; ErrMessage_Span.Style["Display"] = "Block"; dbContab = null; return; } } dbContab = null; // ------------------------------------------------------------------------------ // inicializamos antes las variables que indican que debemos mostrar el progreso Session["Progress_Completed"] = 0; Session["Progress_Percentage"] = 0; // ------------------------------------------------------------------------------ Thread MyThread = new Thread(CopiarMontosEntreCias); MyThread.Priority = ThreadPriority.Lowest; MyThread.Start(); //ejecutamos javascript para que lea la variable session y muestre el progreso System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("<script language='javascript'>"); sb.Append("showprogress();"); sb.Append("</script>"); ClientScript.RegisterStartupScript(this.GetType(), "onLoad", sb.ToString()); }
protected void AjustarMontosEstimados_Confirmacion_Button_Click(object sender, EventArgs e) { // ajustamos los montos de cuentas seleccionadas, en el porcentaje indicado por el usuario ... decimal porcentaje; if (!decimal.TryParse(this.AjustarMontosMensuales_Porcentaje_TextBox.Text, out porcentaje)) { GeneralError_Span.InnerHtml = "Aparentemente, el valor indicado como porcentaje no es correcto.<br />" + "Por favor indique un número para este campo; ejemplos: 30; 30,5; -30,5; 10,75; ..."; GeneralError_Span.Style["display"] = "block"; return; } dbContabDataContext dbContab = new dbContabDataContext(); var query = dbContab.Presupuesto_Montos.Select(m => m); if (Anos_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.Ano == Convert.ToInt16(this.Anos_DropDownList.SelectedValue)); } if (Monedas_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.Moneda == Convert.ToInt32(Monedas_DropDownList.SelectedValue)); } if (CiasContab_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.CiaContab == Convert.ToInt32(this.CiasContab_DropDownList.SelectedValue)); } if (!string.IsNullOrEmpty(this.CodigoCuentaPresupuesto_TextBox.Text)) { if (this.CodigoCuentaPresupuesto_TextBox.Text.Contains("*")) { if (this.CodigoCuentaPresupuesto_TextBox.Text.StartsWith("*")) { query = query.Where(m => m.CodigoPresupuesto.EndsWith(this.CodigoCuentaPresupuesto_TextBox.Text.Replace("*", ""))); } else if (this.CodigoCuentaPresupuesto_TextBox.Text.EndsWith("*")) { query = query.Where(m => m.CodigoPresupuesto.StartsWith(this.CodigoCuentaPresupuesto_TextBox.Text.Replace("*", ""))); } else { query = query.Where(m => m.CodigoPresupuesto.Contains(this.CodigoCuentaPresupuesto_TextBox.Text)); } } else { query = query.Where(m => m.CodigoPresupuesto.Contains(this.CodigoCuentaPresupuesto_TextBox.Text)); } } int registrosSeleccionados = 0; int signo = porcentaje >= 0 ? 1 : -1; porcentaje = Math.Abs(porcentaje / 100); // nótese como siempre tratamos el monto absoluto (sin su signo) y luego agregamos el signo al final; la idea es que // si el usuario quiere aumentar -1000 en 50%, quede -1500 y no -500 foreach (Presupuesto_Monto montos in query) { montos.Mes01_Est = AjustarMontoEstimado(montos.Mes01_Est, signo, porcentaje); montos.Mes02_Est = AjustarMontoEstimado(montos.Mes02_Est, signo, porcentaje); montos.Mes03_Est = AjustarMontoEstimado(montos.Mes03_Est, signo, porcentaje); montos.Mes04_Est = AjustarMontoEstimado(montos.Mes04_Est, signo, porcentaje); montos.Mes05_Est = AjustarMontoEstimado(montos.Mes05_Est, signo, porcentaje); montos.Mes06_Est = AjustarMontoEstimado(montos.Mes06_Est, signo, porcentaje); montos.Mes07_Est = AjustarMontoEstimado(montos.Mes07_Est, signo, porcentaje); montos.Mes08_Est = AjustarMontoEstimado(montos.Mes08_Est, signo, porcentaje); montos.Mes09_Est = AjustarMontoEstimado(montos.Mes09_Est, signo, porcentaje); montos.Mes10_Est = AjustarMontoEstimado(montos.Mes10_Est, signo, porcentaje); montos.Mes11_Est = AjustarMontoEstimado(montos.Mes11_Est, signo, porcentaje); montos.Mes12_Est = AjustarMontoEstimado(montos.Mes12_Est, signo, porcentaje); registrosSeleccionados++; } string modalTitleMessage = "Ajuste de montos estimados"; string modalBodyMessage = "Ok, los montos de las cuentas de presupuesto seleccionadas en la lista han sido ajustados.<br /><br />" + "En total, se han ajustado " + registrosSeleccionados.ToString() + " cuentas de presupuesto (que estaban seleccionadas en la lista).<br /><br />" + "Cuando Ud. cierre este diálogo, la lista estará actualizada y Ud. podrá ver los montos de las cuentas de presupuesto ya actualizados."; try { dbContab.SubmitChanges(); } catch (Exception ex) { string errorMessage = ex.Message; if (ex.InnerException != null) { errorMessage += "<br />" + ex.InnerException.Message; } modalTitleMessage = "Ha ocurrido un error al intentar guardar los cambios en la base de datos ..."; modalBodyMessage = errorMessage; } this.ModalPopupTitle_span2.InnerHtml = modalTitleMessage; this.ModalPopupBody_span2.InnerHtml = modalBodyMessage; this.AjustarMontosEstimados_Confirmacion_Button.Visible = false; this.AjustarMontosEstimados_Confirmacion_Button.Text = "Ajustar montos ..."; this.AjustarMontosEstimados_Cancel_Button_Click.Text = "Cerrar"; this.ModalPopupExtender1.Show(); this.PresupuestoMontos_ListView.DataBind(); }
protected void AjustarMontosEstimados_btnOk_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.AjustarMontosMensuales_Porcentaje_TextBox.Text)) { GeneralError_Span.InnerHtml = "Ud. debe indicar un valor para el porcentaje a aumentar o disminuir."; GeneralError_Span.Style["display"] = "block"; return; } if (this.AjustarMontosMensuales_Porcentaje_TextBox.Text.Contains(".")) { GeneralError_Span.InnerHtml = "Aparentemente, Ud. ha usado un '.' como separador decimal;<br />" + "por favor no use puntos, sino comas, como separador decimal."; GeneralError_Span.Style["display"] = "block"; return; } decimal porcentaje; if (!decimal.TryParse(this.AjustarMontosMensuales_Porcentaje_TextBox.Text, out porcentaje)) { GeneralError_Span.InnerHtml = "Aparentemente, el valor indicado como porcentaje no es correcto.<br />" + "Por favor indique un número para este campo; ejemplos: 30; 30,5; -30,5; 10,75; ..."; GeneralError_Span.Style["display"] = "block"; return; } // determinamos cuantos items serán actualizados con este proceso ... int cantidadRegistrosQueSeranActualizados; using (dbContabDataContext dbContab = new dbContabDataContext()) { var query = dbContab.Presupuesto_Montos.Select(m => m); if (Anos_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.Ano == Convert.ToInt16(this.Anos_DropDownList.SelectedValue)); } if (Monedas_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.Moneda == Convert.ToInt32(Monedas_DropDownList.SelectedValue)); } if (CiasContab_DropDownList.SelectedIndex != -1) { query = query.Where(m => m.CiaContab == Convert.ToInt32(this.CiasContab_DropDownList.SelectedValue)); } if (!string.IsNullOrEmpty(this.CodigoCuentaPresupuesto_TextBox.Text)) { if (this.CodigoCuentaPresupuesto_TextBox.Text.Contains("*")) { if (this.CodigoCuentaPresupuesto_TextBox.Text.StartsWith("*")) { query = query.Where(m => m.CodigoPresupuesto.EndsWith(this.CodigoCuentaPresupuesto_TextBox.Text.Replace("*", ""))); } else if (this.CodigoCuentaPresupuesto_TextBox.Text.EndsWith("*")) { query = query.Where(m => m.CodigoPresupuesto.StartsWith(this.CodigoCuentaPresupuesto_TextBox.Text.Replace("*", ""))); } else { query = query.Where(m => m.CodigoPresupuesto.Contains(this.CodigoCuentaPresupuesto_TextBox.Text)); } } else { query = query.Where(m => m.CodigoPresupuesto.Contains(this.CodigoCuentaPresupuesto_TextBox.Text)); } } cantidadRegistrosQueSeranActualizados = query.Count(); } // ------------------------------------------------------------------------------------------------------------------------------ this.ModalPopupTitle_span2.InnerHtml = "Ajuste de montos estimados"; this.ModalPopupBody_span2.InnerHtml = "Desea ajustar los montos de las cuentas de presupuesto seleccionadas, usando el porcentaje: " + porcentaje.ToString("N2") + "% ?<br /><br />" + "(en total, este proceso ajustará montos de " + cantidadRegistrosQueSeranActualizados.ToString() + " cuentas de presupuesto, " + "las cuales están ahora seleccionadas en la lista)"; this.AjustarMontosEstimados_Confirmacion_Button.Visible = true; this.AjustarMontosEstimados_Confirmacion_Button.Text = "Ajustar montos ..."; this.AjustarMontosEstimados_Cancel_Button_Click.Text = "Cancelar"; this.ModalPopupExtender1.Show(); Session["ConfirmarNominaEjecutadaAntesFlag"] = true; return; }
private void CrearRegistrosMontos() { // creamos los registros con los montos estimados para el año indicado y para cada código de presupuesto int[] nCiasContab; int[] nMonedas; // Creamos una lista de monedas; nótese que el usuario puede o no seleccionar una moneda // ahora requerimos seleccionar una y solo una (moneda y cia contab) if (Monedas_ListBox.SelectedIndex != -1) { nMonedas = new int[1]; nMonedas[0] = int.Parse(Monedas_ListBox.SelectedValue); } else { // leemos las monedas y las grabamos en el array dbContabDataContext dbContab0 = new dbContabDataContext(); var monedas = from m in dbContab0.Moneda_Contabs select m.Moneda1; int i = 0; int nCantMonedas = (from m in dbContab0.Moneda_Contabs select m.Moneda1).Count(); nMonedas = new int[nCantMonedas]; foreach (int MyMoneda in monedas) { nMonedas[i] = MyMoneda; i++; } dbContab0 = null; } // Igual que para monedas, creamos una lista de compañías if (this.CiasContab_ListBox.SelectedIndex != -1) { nCiasContab = new int[1]; nCiasContab[0] = int.Parse(CiasContab_ListBox.SelectedValue); } else { // leemos las cias contab y las grabamos en el array dbContabDataContext dbContab0 = new dbContabDataContext(); var cias = from c in dbContab0.Compania_Contabs select c.Numero; int i = 0; int nCantCiasContab = (from c in dbContab0.Compania_Contabs select c.Numero).Count(); nCiasContab = new int[nCantCiasContab]; foreach (int MyCiaContab in cias) { nCiasContab[i] = MyCiaContab; i++; } dbContab0 = null; } // ------------------------------------------------------------------------------------------------- // lo PRIMERO que hacemos es intentar grabar para el nuevo año los registros que ahora existan para // el año anterior short AnoActual = short.Parse(Ano_TextBox.Text); short AnoAnterior = short.Parse(Ano_TextBox.Text); AnoAnterior -= 1; int nRegistrosAgregadosAnoAnterior = 0; int nRegistrosActualizadosAnoAnterior = 0; dbContabDataContext dbContab = new dbContabDataContext(); // ----------------------------------------------------------------------------------------------------- // inicializamos la variable que sigue en la cantidad de cías x monedas; de esta forma, iremos mostrando // el progreso al usuario; cada vez que se procese una compañía, se irá mostrando el progreso int nRegistroActual = 0; int nProgressPercentaje = 0; int nCantidadRegistros = nMonedas.Length * nCiasContab.Length; // ----------------------------------------------------------------------------------------------------- foreach (int nMoneda in nMonedas) { foreach (int nCiaContab in nCiasContab) { // leemos los registros en Presupuesto_Montos para el "año anterior" que no existan en la misma // tabla para el "año actual" y, además, que no estén suspendidos en Presupuesto_Codigos string sqlSelectString = "Select CodigoPresupuesto, Mes01_Est, Mes02_Est, Mes03_Est, Mes04_Est, Mes05_Est, Mes06_Est, Mes07_Est, Mes08_Est, " + " Mes09_Est, Mes10_Est, Mes11_Est, Mes12_Est " + " From Presupuesto_Montos Inner Join Presupuesto_Codigos On " + " Presupuesto_Montos.CodigoPresupuesto = Presupuesto_Codigos.Codigo And " + " Presupuesto_Montos.CiaContab = Presupuesto_Codigos.CiaContab" + " Where Presupuesto_Montos.Moneda = " + nMoneda.ToString() + " And Presupuesto_Montos.CiaContab = " + nCiaContab.ToString() + " And Presupuesto_Montos.Ano = " + AnoAnterior.ToString() + " And Presupuesto_Codigos.SuspendidoFlag = 0"; if (!string.IsNullOrEmpty(this.CuentaPresupuesto_AgregarMontos_Filter_TextBox.Text)) { // el usuario indicó un valor para seleccionar por cuenta de presupuesto; hacemos un Like por este campo ... sqlSelectString += " And Presupuesto_Montos.CodigoPresupuesto Like '" + this.CuentaPresupuesto_AgregarMontos_Filter_TextBox.Text.Replace("*", "%") + "'"; } if (!this.ActualizarAunqueExistan_CheckBox.Checked) { // si el usuario lo indica, seleccionamos los montos aunque existan, y los actualizamos (si existen) ... sqlSelectString += " And Not Presupuesto_Montos.CodigoPresupuesto In " + " (Select CodigoPresupuesto From Presupuesto_Montos Where Moneda = " + nMoneda.ToString() + " And CiaContab = " + nCiaContab.ToString() + " And Ano = " + AnoActual.ToString() + ")"; } IEnumerable <_Presupuesto_Montos> Lista_PresupuestoMontos_AnoAnterior = dbContab.ExecuteQuery <_Presupuesto_Montos>(sqlSelectString); Presupuesto_Monto MyRegPresupuestoMonto; List <Presupuesto_Monto> MyRegPresupuestoMontos = new List <Presupuesto_Monto>(); foreach (_Presupuesto_Montos MyPresupuestoMontos in Lista_PresupuestoMontos_AnoAnterior) { // si el registro de montos estimados existe, lo actualizamos; de otra forma, lo agregamos ... Presupuesto_Monto presupuestoMontos = dbContab.Presupuesto_Montos. Where(m => m.CodigoPresupuesto == MyPresupuestoMontos.CodigoPresupuesto && m.CiaContab == nCiaContab && m.Moneda == nMoneda && m.Ano == AnoActual).FirstOrDefault(); if (presupuestoMontos != null) { // el registro ya existe, lo actualizamos ... presupuestoMontos.Mes01_Est = MyPresupuestoMontos.Mes01_Est; presupuestoMontos.Mes02_Est = MyPresupuestoMontos.Mes02_Est; presupuestoMontos.Mes03_Est = MyPresupuestoMontos.Mes03_Est; presupuestoMontos.Mes04_Est = MyPresupuestoMontos.Mes04_Est; presupuestoMontos.Mes05_Est = MyPresupuestoMontos.Mes05_Est; presupuestoMontos.Mes06_Est = MyPresupuestoMontos.Mes06_Est; presupuestoMontos.Mes07_Est = MyPresupuestoMontos.Mes07_Est; presupuestoMontos.Mes08_Est = MyPresupuestoMontos.Mes08_Est; presupuestoMontos.Mes09_Est = MyPresupuestoMontos.Mes09_Est; presupuestoMontos.Mes10_Est = MyPresupuestoMontos.Mes10_Est; presupuestoMontos.Mes11_Est = MyPresupuestoMontos.Mes11_Est; presupuestoMontos.Mes12_Est = MyPresupuestoMontos.Mes12_Est; nRegistrosActualizadosAnoAnterior++; } else { // el registro no existe, lo agregamos MyRegPresupuestoMonto = new Presupuesto_Monto(); MyRegPresupuestoMonto.CodigoPresupuesto = MyPresupuestoMontos.CodigoPresupuesto; MyRegPresupuestoMonto.CiaContab = nCiaContab; MyRegPresupuestoMonto.Moneda = nMoneda; MyRegPresupuestoMonto.Ano = AnoActual; MyRegPresupuestoMonto.Mes01_Est = MyPresupuestoMontos.Mes01_Est; MyRegPresupuestoMonto.Mes02_Est = MyPresupuestoMontos.Mes02_Est; MyRegPresupuestoMonto.Mes03_Est = MyPresupuestoMontos.Mes03_Est; MyRegPresupuestoMonto.Mes04_Est = MyPresupuestoMontos.Mes04_Est; MyRegPresupuestoMonto.Mes05_Est = MyPresupuestoMontos.Mes05_Est; MyRegPresupuestoMonto.Mes06_Est = MyPresupuestoMontos.Mes06_Est; MyRegPresupuestoMonto.Mes07_Est = MyPresupuestoMontos.Mes07_Est; MyRegPresupuestoMonto.Mes08_Est = MyPresupuestoMontos.Mes08_Est; MyRegPresupuestoMonto.Mes09_Est = MyPresupuestoMontos.Mes09_Est; MyRegPresupuestoMonto.Mes10_Est = MyPresupuestoMontos.Mes10_Est; MyRegPresupuestoMonto.Mes11_Est = MyPresupuestoMontos.Mes11_Est; MyRegPresupuestoMonto.Mes12_Est = MyPresupuestoMontos.Mes12_Est; MyRegPresupuestoMontos.Add(MyRegPresupuestoMonto); nRegistrosAgregadosAnoAnterior++; } } if (MyRegPresupuestoMontos.Count > 0) { dbContab.Presupuesto_Montos.InsertAllOnSubmit(MyRegPresupuestoMontos); } try { dbContab.SubmitChanges(); } catch (Exception ex) { string errorMessage = ex.Message; if (ex.InnerException != null) { errorMessage += "<br />" + ex.InnerException.Message; } ErrMessage_Span.InnerHtml = "Hemos obtenido un mensaje de error al intentar efectuar una operación en la base de datos.<br /> " + "El mensaje específico de error es: " + errorMessage; ErrMessage_Span.Style["display"] = "block"; return; } // --------------------------------------------------------------------------- // calculamos el progreso (%); es usado por el progress bar en la página nRegistroActual += 1; nProgressPercentaje = nRegistroActual * 100 / nCantidadRegistros; Session["Progress_Percentage"] = nProgressPercentaje; // --------------------------------------------------------------------------- } } // ------------------------------------------------------------------------------------------------- // YA GRABAMOS los códigos y sus montos desde al año anterior al actual; ahora leemos desde // Presupuesto_Codigos aquellos que no existan en Presupuesto_Montos (pues son nuevos?) para el año // actual y los registramos, con todos sus montos en nulls // nótese como el usuario decide si desea o no hacer este paso ... int nRegistrosAgregadosAnoActual = 0; if (this.AgregarDesdeTablaCodigosPresupuesto_CheckBox.Checked) { nRegistroActual = 0; foreach (int nMoneda in nMonedas) { foreach (int nCiaContab in nCiasContab) { // leemos los registros en Presupuesto_Montos para el "año anterior" que no existan en la misma // tabla para el "año actual" y, además, que no estén suspendidos en Presupuesto_Codigos IEnumerable <String> Lista_CodigosPresupuesto_Nuevos = dbContab.ExecuteQuery <String>( "Select Codigo From Presupuesto_Codigos Where" + " CiaContab = " + nCiaContab.ToString() + " And SuspendidoFlag = 0 And GrupoFlag = 0" + " And Not Codigo In " + " (Select CodigoPresupuesto From Presupuesto_Montos Where Moneda = " + nMoneda.ToString() + " And CiaContab = " + nCiaContab.ToString() + " And Ano = " + AnoActual.ToString() + ")" ); Presupuesto_Monto MyRegPresupuestoMonto; List <Presupuesto_Monto> MyRegPresupuestoMontos = new List <Presupuesto_Monto>(); foreach (String MyCodigoPresupuesto in Lista_CodigosPresupuesto_Nuevos) { MyRegPresupuestoMonto = new Presupuesto_Monto(); MyRegPresupuestoMonto.CodigoPresupuesto = MyCodigoPresupuesto; MyRegPresupuestoMonto.CiaContab = nCiaContab; MyRegPresupuestoMonto.Moneda = nMoneda; MyRegPresupuestoMonto.Ano = AnoActual; // nótese como todos los montos (estimados y ejecutados) quedan en null MyRegPresupuestoMontos.Add(MyRegPresupuestoMonto); nRegistrosAgregadosAnoActual++; } if (MyRegPresupuestoMontos.Count > 0) { dbContab.Presupuesto_Montos.InsertAllOnSubmit(MyRegPresupuestoMontos); try { dbContab.SubmitChanges(); } catch (Exception ex) { //ErrMessage_Span.InnerHtml = "Hemos obtenido un mensaje de error al intentar efectuar una operación en la base de datos.<br />El mensaje específico de error es: " + ex.Message; //ErrMessage_Span.Style["display"] = "block"; } } // --------------------------------------------------------------------------- // calculamos el progreso (%); es usado por el progress bar en la página nRegistroActual += 1; nProgressPercentaje = nRegistroActual * 100 / nCantidadRegistros; Session["Progress_Percentage"] = nProgressPercentaje; // --------------------------------------------------------------------------- } } } dbContab = null; // ----------------------------------------------------------------------------------------- // cuando el proceso termina, escribimos sus resultados a un xml file, para que los procese // el parent thread XElement root = new XElement("ProcessState"); XElement elm1 = new XElement("Values", new XElement("RegistrosAgregadosAnoAnterior", nRegistrosAgregadosAnoAnterior), new XElement("RegistrosActualizadosAnoAnterior", nRegistrosActualizadosAnoAnterior), new XElement("RegistrosAgregadosAnoActual", nRegistrosAgregadosAnoActual)); root.Add(elm1); String fileName = String.Concat(Page.GetType().Name, "-", User.Identity.Name); String rootPath = Server.MapPath("~"); String filePath = Server.MapPath("~/keepstatefiles/" + fileName + ".xml"); root.Save(filePath); // ----------------------------------------------------------------------------------------- // para indicar al progress bar que el proceso terminó Session["Progress_Completed"] = 1; }
protected void AplicarFactorConversion_LinkButton_Click(object sender, EventArgs e) { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } // intentamos leer los factores de uno de los 12 meses del año, para guardarlos en la tabla // de la consulta (tTempWebRerpot_PresupuestoConsultaAnual; NOTESE que el año y meses de la // consulta corresponden a meses fiscales y no calendario; tenemos que buscar la correspondencia // en la tabla de meses fiscales de la contabilidad dbContabDataContext dbContab = new dbContabDataContext(); dbContab.ExecuteCommand ("Delete From FactoresConversionAnoMes_Aplicados Where NombreUsuario = {0}", User.Identity.Name); // -------------------------------------------------------------------------------- // lo primero que hacemos es obtener el año fiscal de la consulta var query0 = (from t in dbContab.tTempWebReport_PresupuestoConsultaAnuals where t.NombreUsuario == User.Identity.Name select t).FirstOrDefault(); if (query0 == null) { ErrMessage_Span.InnerHtml = "Aparentemente, Ud. no ha ejecutado la consulta todavía y, " + "por lo tanto, no se han seleccionado registros aún para la misma. <br />" + "Ud. debe definir y aplicar un filtro para ejecutar la consulta y seleccionar " + "registros, antes de intentar aplicar un factor de conversión a estas cifras."; ErrMessage_Span.Style["display"] = "block"; return; } Int16 nAnoFiscalConsulta = query0.AnoFiscal; // leemos los meses del año en la tabla de meses, para ir obteniendo cada mes calendario y // luego el factor de conversion; nótese que queremos obtener los factores ordenados por // mes fiscal, pues en ese orden están presentadas las cifras de esta consulta var query = from mf in dbContab.MesesDelAnoFiscals where mf.Cia == query0.CiaContab && mf.MesFiscal >= 1 && mf.MesFiscal <= 12 orderby mf.MesFiscal select mf; if (query == null) { ErrMessage_Span.InnerHtml = "No existe registros en la tabla Definición de Meses para " + "el Año Fiscal. <br /> " + "Por favor revise el contenido de esta tabla y corrija este error antes " + "de intentar continuar con este proceso."; ErrMessage_Span.Style["display"] = "block"; return; } FactoresConversionAnoMes_Aplicado factoresConversionAplicados; List <FactoresConversionAnoMes_Aplicado> factoresConversionAplicados_List = new List <FactoresConversionAnoMes_Aplicado>(); foreach (var registroMes in query) { int nMesCalendario = registroMes.Mes; int nAnoCalendario = nAnoFiscalConsulta; if (registroMes.Ano == 1) { nAnoCalendario++; } // ahora que tenemos el mes y año calendarios, leemos el factor de conversión y lo // guardamos en el array de factores por mes fiscal var queryFactoresConversion = (from fc in dbContab.FactoresConversionAnoMes where fc.Mes == nMesCalendario && fc.Ano == nAnoCalendario select fc).FirstOrDefault(); factoresConversionAplicados = new FactoresConversionAnoMes_Aplicado(); factoresConversionAplicados.MesFiscal = Convert.ToByte(registroMes.MesFiscal); factoresConversionAplicados.AnoFiscal = nAnoFiscalConsulta; factoresConversionAplicados.MesCalendario = Convert.ToByte(registroMes.Mes); factoresConversionAplicados.AnoCalendario = Convert.ToInt16(nAnoCalendario); factoresConversionAplicados.NombreMes = registroMes.NombreMes; if (queryFactoresConversion == null || queryFactoresConversion.FactorConversion == 0) { factoresConversionAplicados.FactorConversion = 1; } else { factoresConversionAplicados.FactorConversion = queryFactoresConversion.FactorConversion; } factoresConversionAplicados.NombreUsuario = User.Identity.Name; factoresConversionAplicados_List.Add(factoresConversionAplicados); } if (factoresConversionAplicados_List.Count != 12) { ErrMessage_Span.InnerHtml = "La tabla Definición de Meses para el Año Fiscal no está completa " + "para el año fiscal de la compañía. Esta tabla debe tener una definición para cada " + "uno de los 12 meses del año.<br />" + "Por favor revise el contenido de la tabla mencionada y corrija esta situación."; ErrMessage_Span.Style["display"] = "block"; return; } try { // intentamos agregar la lista a la tabla en la base de datos dbContab.FactoresConversionAnoMes_Aplicados.InsertAllOnSubmit (factoresConversionAplicados_List); dbContab.SubmitChanges(); } catch (Exception ex) { dbContab = null; ErrMessage_Span.InnerHtml = "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 />"; ErrMessage_Span.Style["display"] = "block"; return; } // TODO: aplicar los factores encontrados a los registros en la tabla tTempWebReport... // ahora leemos la tabla con los registros de la consulta y aplicamos los factores de conversión // para cada mes fiscal var consultaPresupuestoQuery = from cp in dbContab.tTempWebReport_PresupuestoConsultaAnuals where cp.NombreUsuario == User.Identity.Name select cp; foreach (var consultaPresupuesto in consultaPresupuestoQuery) { // nótese que, desde su creación, la lista de factores está // ordenada por mes fiscal (1, 2, 3, ...) consultaPresupuesto.Mes01_Eje /= factoresConversionAplicados_List[0].FactorConversion; consultaPresupuesto.Mes02_Eje /= factoresConversionAplicados_List[1].FactorConversion; consultaPresupuesto.Mes03_Eje /= factoresConversionAplicados_List[2].FactorConversion; consultaPresupuesto.Mes04_Eje /= factoresConversionAplicados_List[3].FactorConversion; consultaPresupuesto.Mes05_Eje /= factoresConversionAplicados_List[4].FactorConversion; consultaPresupuesto.Mes06_Eje /= factoresConversionAplicados_List[5].FactorConversion; consultaPresupuesto.Mes07_Eje /= factoresConversionAplicados_List[6].FactorConversion; consultaPresupuesto.Mes08_Eje /= factoresConversionAplicados_List[7].FactorConversion; consultaPresupuesto.Mes09_Eje /= factoresConversionAplicados_List[8].FactorConversion; consultaPresupuesto.Mes10_Eje /= factoresConversionAplicados_List[9].FactorConversion; consultaPresupuesto.Mes11_Eje /= factoresConversionAplicados_List[10].FactorConversion; consultaPresupuesto.Mes12_Eje /= factoresConversionAplicados_List[11].FactorConversion; // el total ejecutado es la sumarización de todos los meses antes convertidos consultaPresupuesto.TotalEjecutado = consultaPresupuesto.Mes01_Eje + consultaPresupuesto.Mes02_Eje + consultaPresupuesto.Mes03_Eje + consultaPresupuesto.Mes04_Eje + consultaPresupuesto.Mes05_Eje + consultaPresupuesto.Mes06_Eje + consultaPresupuesto.Mes07_Eje + consultaPresupuesto.Mes08_Eje + consultaPresupuesto.Mes09_Eje + consultaPresupuesto.Mes10_Eje + consultaPresupuesto.Mes11_Eje + consultaPresupuesto.Mes12_Eje; // para obtener el total presupuestado (estimado) convertido, leemos los montos estimados // para cada mes en la tabla Presupuesto_Montos, para el registro específico; luego, // convertimos cada monto estimado y sumarizamos var presupuesto_MontosEstimadosConvertidos = (from pm in dbContab.Presupuesto_Montos where pm.CodigoPresupuesto == consultaPresupuesto.CodigoPresupuesto && pm.CiaContab == consultaPresupuesto.CiaContab && pm.Moneda == consultaPresupuesto.Moneda && pm.Ano == consultaPresupuesto.AnoFiscal select pm.Mes01_Est / factoresConversionAplicados_List[0].FactorConversion + pm.Mes02_Est / factoresConversionAplicados_List[1].FactorConversion + pm.Mes03_Est / factoresConversionAplicados_List[2].FactorConversion + pm.Mes04_Est / factoresConversionAplicados_List[3].FactorConversion + pm.Mes05_Est / factoresConversionAplicados_List[4].FactorConversion + pm.Mes06_Est / factoresConversionAplicados_List[5].FactorConversion + pm.Mes07_Est / factoresConversionAplicados_List[6].FactorConversion + pm.Mes08_Est / factoresConversionAplicados_List[7].FactorConversion + pm.Mes09_Est / factoresConversionAplicados_List[8].FactorConversion + pm.Mes10_Est / factoresConversionAplicados_List[9].FactorConversion + pm.Mes11_Est / factoresConversionAplicados_List[10].FactorConversion + pm.Mes12_Est / factoresConversionAplicados_List[11].FactorConversion ).FirstOrDefault(); // NOTA IMPORTANTE: el registro DEBE existir en Presupuesto_Montos, pues de allí se obtuvo // el registro en tTempWebReport...; de otra forma, terminamos con un error if (presupuesto_MontosEstimadosConvertidos == null) { ErrMessage_Span.InnerHtml = "Error inesperado: no se ha encontrado el registro para el " + "código de presupuesto '" + consultaPresupuesto.CodigoPresupuesto + "' en la tabla Presupuesto_Montos. Por favor revise esta situación y corríjala " + "antes de ejecutar nuevamente este proceso."; ErrMessage_Span.Style["display"] = "block"; return; } consultaPresupuesto.TotalPresupuestado = presupuesto_MontosEstimadosConvertidos; } try { // persistimos los cambios hechos en tTempWebReport_ConsultaPresupuestoAnual dbContab.SubmitChanges(); dbContab = null; PageDataBind(); } catch (Exception ex) { dbContab = null; ErrMessage_Span.InnerHtml = "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 />"; ErrMessage_Span.Style["display"] = "block"; return; } // para indicar al report que las cifras se han convertido; el report muestra un pequeño mensaje // que indica esta situación ... ControlPresupuesto_Reportes_HyperLink.NavigateUrl = "javascript:PopupWin('../../../../ReportViewer2.aspx?rpt=ptoconsanual&conv=1', 1000, 680)"; }
private void BuildReportRecords() { // construímos los registros que se usarán para mostrar la consulta al usuario if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } if (Session["FiltroForma"] == null) { ErrMessage_Span.InnerHtml = "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."; ErrMessage_Span.Style["display"] = "block"; return; } // -------------------------------------------------------------------------------------------- // eliminamos el contenido de la tabla temporal dbContabDataContext dbContab = new dbContabDataContext(); try { dbContab.ExecuteCommand("Delete From tTempWebReport_PresupuestoConsultaAnual Where NombreUsuario = {0}", User.Identity.Name); } catch (Exception ex) { dbContab = null; ErrMessage_Span.InnerHtml = "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 />"; ErrMessage_Span.Style["display"] = "block"; return; } // leemos la tabla Presupuesto_Montos y construimos los registros en tTempWebReport... IList <PresupuestoMontos> PresupuestoMontos_List = dbContab.ExecuteQuery <PresupuestoMontos> (@"Select CodigoPresupuesto, CiaContab, Moneda, Ano, " + "IsNull(Mes01_Est, 0) As Mes01_Est, IsNull(Mes01_Eje, 0) As Mes01_Eje, " + "IsNull(Mes02_Est, 0) As Mes02_Est, IsNull(Mes02_Eje, 0) As Mes02_Eje, " + "IsNull(Mes03_Est, 0) As Mes03_Est, IsNull(Mes03_Eje, 0) As Mes03_Eje, " + "IsNull(Mes04_Est, 0) As Mes04_Est, IsNull(Mes04_Eje, 0) As Mes04_Eje, " + "IsNull(Mes05_Est, 0) As Mes05_Est, IsNull(Mes05_Eje, 0) As Mes05_Eje, " + "IsNull(Mes06_Est, 0) As Mes06_Est, IsNull(Mes06_Eje, 0) As Mes06_Eje, " + "IsNull(Mes07_Est, 0) As Mes07_Est, IsNull(Mes07_Eje, 0) As Mes07_Eje, " + "IsNull(Mes08_Est, 0) As Mes08_Est, IsNull(Mes08_Eje, 0) As Mes08_Eje, " + "IsNull(Mes09_Est, 0) As Mes09_Est, IsNull(Mes09_Eje, 0) As Mes09_Eje, " + "IsNull(Mes10_Est, 0) As Mes10_Est, IsNull(Mes10_Eje, 0) As Mes10_Eje, " + "IsNull(Mes11_Est, 0) As Mes11_Est, IsNull(Mes11_Eje, 0) As Mes11_Eje, " + "IsNull(Mes12_Est, 0) As Mes12_Est, IsNull(Mes12_Eje, 0) As Mes12_Eje " + "From Presupuesto_Montos " + "Where " + Session["FiltroForma"].ToString() + " Order By Presupuesto_Montos.CiaContab").ToList(); if (PresupuestoMontos_List.Count() == 0) { dbContab = null; ErrMessage_Span.InnerHtml = "No existen registros que cumplan el criterio de selección (filtro) que Ud. ha indicado. <br />" + "Para regresar registros, Ud. puede intentar un filtro diferente al que ha indicado."; ErrMessage_Span.Style["display"] = "block"; Session["Progress_SelectedRecs"] = 0; Session["Progress_Completed"] = 1; Session["Progress_Percentage"] = 0; return; } int nCantidadRegistros = PresupuestoMontos_List.Count(); int nRegistroActual = 0; int nProgreesPercentaje = 0; tTempWebReport_PresupuestoConsultaAnual MyTempWebReportPresupuestoConsultaAnual; List <tTempWebReport_PresupuestoConsultaAnual> MyTempWebRepotPresupuestoConsultaAnual_List = new List <tTempWebReport_PresupuestoConsultaAnual>(); foreach (PresupuestoMontos MyPresupuestoMontos in PresupuestoMontos_List) { // preparamos el registro que vamos a agregar a tTempWebReport... MyTempWebReportPresupuestoConsultaAnual = new tTempWebReport_PresupuestoConsultaAnual(); MyTempWebReportPresupuestoConsultaAnual.CiaContab = MyPresupuestoMontos.CiaContab; MyTempWebReportPresupuestoConsultaAnual.Moneda = MyPresupuestoMontos.Moneda; MyTempWebReportPresupuestoConsultaAnual.AnoFiscal = MyPresupuestoMontos.Ano; MyTempWebReportPresupuestoConsultaAnual.CodigoPresupuesto = MyPresupuestoMontos.CodigoPresupuesto; MyTempWebReportPresupuestoConsultaAnual.Mes01_Eje = MyPresupuestoMontos.Mes01_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes02_Eje = MyPresupuestoMontos.Mes02_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes03_Eje = MyPresupuestoMontos.Mes03_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes04_Eje = MyPresupuestoMontos.Mes04_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes05_Eje = MyPresupuestoMontos.Mes05_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes06_Eje = MyPresupuestoMontos.Mes06_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes07_Eje = MyPresupuestoMontos.Mes07_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes08_Eje = MyPresupuestoMontos.Mes08_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes09_Eje = MyPresupuestoMontos.Mes09_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes10_Eje = MyPresupuestoMontos.Mes10_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes11_Eje = MyPresupuestoMontos.Mes11_Eje; MyTempWebReportPresupuestoConsultaAnual.Mes12_Eje = MyPresupuestoMontos.Mes12_Eje; MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado = MyPresupuestoMontos.Mes01_Est + MyPresupuestoMontos.Mes02_Est + MyPresupuestoMontos.Mes03_Est + MyPresupuestoMontos.Mes04_Est + MyPresupuestoMontos.Mes05_Est + MyPresupuestoMontos.Mes06_Est + MyPresupuestoMontos.Mes07_Est + MyPresupuestoMontos.Mes08_Est + MyPresupuestoMontos.Mes09_Est + MyPresupuestoMontos.Mes10_Est + MyPresupuestoMontos.Mes11_Est + MyPresupuestoMontos.Mes12_Est; decimal totalEjecutado = MyPresupuestoMontos.Mes01_Eje + MyPresupuestoMontos.Mes02_Eje + MyPresupuestoMontos.Mes03_Eje + MyPresupuestoMontos.Mes04_Eje + MyPresupuestoMontos.Mes05_Eje + MyPresupuestoMontos.Mes06_Eje + MyPresupuestoMontos.Mes07_Eje + MyPresupuestoMontos.Mes08_Eje + MyPresupuestoMontos.Mes09_Eje + MyPresupuestoMontos.Mes10_Eje + MyPresupuestoMontos.Mes11_Eje + MyPresupuestoMontos.Mes12_Eje; MyTempWebReportPresupuestoConsultaAnual.TotalEjecutado = totalEjecutado; if (!(MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado == 0)) { MyTempWebReportPresupuestoConsultaAnual.Mes01_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes01_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes02_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes02_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes03_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes03_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes04_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes04_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes05_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes05_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes06_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes06_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes07_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes07_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes08_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes08_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes09_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes09_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes10_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes10_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes11_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes11_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); MyTempWebReportPresupuestoConsultaAnual.Mes12_Eje_Porc = (float)(MyTempWebReportPresupuestoConsultaAnual.Mes12_Eje * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); //MyTempWebReportPresupuestoConsultaAnual.Variacion = // (float)(MyTempWebReportPresupuestoConsultaAnual.TotalEjecutado * 100 / // MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); // modificamos el calculo de la diferencia, para que sea realmente una diferencia y // no un porcentaje de los ejecutado ... decimal?diferencia = MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado - MyTempWebReportPresupuestoConsultaAnual.TotalEjecutado; if (diferencia != null) { MyTempWebReportPresupuestoConsultaAnual.Variacion = (float)(diferencia * 100 / MyTempWebReportPresupuestoConsultaAnual.TotalPresupuestado); } } MyTempWebReportPresupuestoConsultaAnual.NombreUsuario = User.Identity.Name; // ------------------------------------------------------------------------------- // determinamos los niveles previos para cada cuenta de presupuesto y los grabamos // a la tabla (ej: niveles previos para la cuenta 3-01-001: 3-01 y 3) string codigoPresupuesto = MyTempWebReportPresupuestoConsultaAnual.CodigoPresupuesto; short cantNivelesPrevios = (short)CountStringOccurrences(codigoPresupuesto, "-"); // los códigos deben tener al menos un codigo de agrupación (hasta 6) if (cantNivelesPrevios == 0) { ErrMessage_Span.InnerHtml = "El código de presupuesto : " + MyTempWebReportPresupuestoConsultaAnual.CodigoPresupuesto + " no tiene un nivel (previo) que lo agrupe; los códigos de presupuesto deben tener" + " al menos un nivel de agrupación."; ErrMessage_Span.Style["display"] = "block"; Session["Progress_Completed"] = 1; Session["Progress_Percentage"] = 0; return; } int posProxGuion = -1; for (short i = 1; i <= cantNivelesPrevios; i++) { posProxGuion = codigoPresupuesto.IndexOf("-", posProxGuion + 1); string nivelPrevio = codigoPresupuesto.Substring(0, posProxGuion); switch (i) { case 1: MyTempWebReportPresupuestoConsultaAnual.Codigo1erNivel = nivelPrevio; break; case 2: MyTempWebReportPresupuestoConsultaAnual.Codigo2doNivel = nivelPrevio; break; case 3: MyTempWebReportPresupuestoConsultaAnual.Codigo3erNivel = nivelPrevio; break; case 4: MyTempWebReportPresupuestoConsultaAnual.Codigo4toNivel = nivelPrevio; break; case 5: MyTempWebReportPresupuestoConsultaAnual.Codigo5toNivel = nivelPrevio; break; case 6: MyTempWebReportPresupuestoConsultaAnual.Codigo6toNivel = nivelPrevio; break; } } // ------------------------------------------------------------------------------- // agregamos el registro a la lista MyTempWebRepotPresupuestoConsultaAnual_List.Add(MyTempWebReportPresupuestoConsultaAnual); // ------------------------------------------------------------------------------- // para actualizar las variables que se usan para mostrar el meter al usuario nRegistroActual += 1; nProgreesPercentaje = nRegistroActual * 100 / nCantidadRegistros; Session["Progress_Percentage"] = nProgreesPercentaje; // ------------------------------------------------------------------------------- } try { // agregamos la lista a la tabla en el db dbContab.tTempWebReport_PresupuestoConsultaAnuals.InsertAllOnSubmit(MyTempWebRepotPresupuestoConsultaAnual_List); dbContab.SubmitChanges(); // finalmente, eliminamos de la tabla los recgistros cuya cuenta de presupuesto haya sido suspendida en la maestra string sqlStatement = "Delete From temp from tTempWebReport_PresupuestoConsultaAnual temp Inner Join Presupuesto_Codigos p " + "on temp.CodigoPresupuesto = p.Codigo And temp.CiaContab = p.CiaContab " + "Where p.SuspendidoFlag = 1 And temp.NombreUsuario = {0} "; dbContab.ExecuteCommand(sqlStatement, User.Identity.Name); } catch (Exception ex) { dbContab = null; ErrMessage_Span.InnerHtml = "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 />"; ErrMessage_Span.Style["display"] = "block"; Session["Progress_Completed"] = 1; Session["Progress_Percentage"] = 0; return; } dbContab = null; // ----------------------------------------------------- // por último, inicializamos las variables que se usan para mostrar el progreso de la tarea Session["Progress_Completed"] = 1; Session["Progress_Percentage"] = 0; Session["Progress_SelectedRecs"] = nCantidadRegistros.ToString(); // ----------------------------------------------------- }
protected void Page_Load(object sender, EventArgs e) { if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } // ----------------------------------------------------------------------------------------- Master.Page.Title = "Consulta de presupuesto - consulta de movimientos contables para un código de presupuesto y un mes"; ErrMessage_Span.InnerHtml = ""; ErrMessage_Span.Style["display"] = "none"; if (!Page.IsPostBack) { HtmlGenericControl MyHtmlH2; MyHtmlH2 = (HtmlGenericControl)(Master.FindControl("PageTitle_TableCell")); if (MyHtmlH2 != null) { MyHtmlH2.InnerHtml = ""; } MovimientosContables_SqlDataSource.SelectParameters["MesFiscal"].DefaultValue = Request.QueryString["MesFiscal"].ToString(); MovimientosContables_SqlDataSource.SelectParameters["AnoFiscal"].DefaultValue = Request.QueryString["AnoFiscal"].ToString(); MovimientosContables_SqlDataSource.SelectParameters["CiaContab"].DefaultValue = Request.QueryString["CiaContab"].ToString(); MovimientosContables_SqlDataSource.SelectParameters["Moneda"].DefaultValue = Request.QueryString["Moneda"].ToString(); MovimientosContables_SqlDataSource.SelectParameters["CodigoPresupuesto"].DefaultValue = Request.QueryString["CodigoPresupuesto"].ToString(); // leemos el nombre del mes, usando el mes fiscal y la compañía contab dbContabDataContext dbContab = new dbContabDataContext(); var MyMesesAnoFiscal = (from meses in dbContab.MesesDelAnoFiscals where meses.Cia == Convert.ToInt32(Request.QueryString["CiaContab"].ToString()) && meses.MesFiscal == int.Parse(Request.QueryString["MesFiscal"].ToString()) select meses).FirstOrDefault(); if (MyMesesAnoFiscal == null) { dbContab = null; ErrMessage_Span.InnerHtml = "Aparentemente, no existe un registro en la tabla <i>Meses del Año Fiscal<i/> para alguna de las compañías seleccionada y el mes que se desea consultar.<br /><br />Por favor revise esta situación. La tabla tabla <i>Meses del Año Fiscal<i/> debe contener un registro cada una de las compañías registradas en <i>Contab<i/>."; ErrMessage_Span.Style["display"] = "block"; Session["Progress_SelectedRecs"] = 0; Session["Progress_Completed"] = 1; Session["Progress_Percentage"] = 0; return; } TituloConsulta_H2.InnerHtml = "Movimientos contables para el código de presupuesto " + Request.QueryString["CodigoPresupuesto"].ToString() + " " + Request.QueryString["NombreCodigoPresupuesto"].ToString() + "<br /> " + "para el mes " + MyMesesAnoFiscal.NombreMes + " del año fiscal " + Request.QueryString["AnoFiscal"].ToString(); // usamos linq to sql para obtener un total de los movimientos seleccionados y mostrados decimal?nGranTotal = (decimal?)(from da in dbContab.dAsientos from pacc in dbContab.Presupuesto_AsociacionCodigosCuentas where da.CuentaContableID == pacc.CuentaContableID && da.Asiento.Cia == pacc.CiaContab && da.Asiento.MesFiscal == int.Parse(Request.QueryString["MesFiscal"].ToString()) && da.Asiento.AnoFiscal == int.Parse(Request.QueryString["AnoFiscal"].ToString()) && da.Asiento.Moneda == int.Parse(Request.QueryString["Moneda"].ToString()) && da.Asiento.Cia == int.Parse(Request.QueryString["CiaContab"].ToString()) && pacc.CodigoPresupuesto == Request.QueryString["CodigoPresupuesto"].ToString() select new Nullable <Decimal>(da.Debe - da.Haber)).Sum(); Label MyTotalLabel = (Label)MovimientosContables_ListView.FindControl("GranTotal_Label"); if (nGranTotal.HasValue) { MyTotalLabel.Text = nGranTotal.Value.ToString("N2"); } dbContab = null; } else { } MovimientosContables_ListView.DataBind(); }
private void CopiarMontosEntreCias() { // construimos el nombre del archivo xml que contendrá, al final, los resultados de la ejecución String fileName = String.Concat(Page.GetType().Name, "-", User.Identity.Name); String rootPath = Server.MapPath("~"); String filePath = Server.MapPath("~/keepstatefiles/" + fileName + ".xml"); // ----------------------------------------------------------------------------------------------- // nótese que creamos el xml file que contendrá los resultados del proceso ahora. Esto permitirá // actualizarlo más adelante cuando sea necesario en forma más compacta (ie: sin crear todo el // archivo cada vez que, por ejemplo, encontremos un error y necesitemos reportarlo XElement root = new XElement("ProcessState", new XElement("Values", new XElement("CantidadCodigosEliminados", 0), new XElement("CantidadCodigosCopiados", 0), new XElement("CantidadCuentasContablesAsociadasCopiadas", 0), new XElement("CantidadCuentasContablesAsociadasNoCopiadas", 0), new XElement("CantidadRegistrosMontosCopiados", 0), new XElement("Error", new XElement("ErrorFlag", 0), new XElement("ErrorMessage", "")))); root.Save(filePath); // ----------------------------------------------------------------------------------------------- // contamos y eliminamos los registros que ahora puedan existir para la cia Target. Nótese que, de // existir, ya chequeamos que el usuario haya marcado la opción que permite eliminarlos. dbContabDataContext dbContab = new dbContabDataContext(); int nCantidadCodigosEliminados = (from a in dbContab.Presupuesto_Codigos where a.CiaContab == int.Parse(TargetCiaContab_ListBox.SelectedValue) select a.Codigo).Count(); // ---------------------------------------------------------------------------------------------- // siempre eliminamos los registros de códigos que puedan existir para la compañía Target; // lo hacemos pues, si existen códigos por eliminar, al llegar aquí SIEMPRE se tuvo que haber // marcado que éstos debían ser eliminados dbContab.ExecuteCommand("Delete From Presupuesto_Codigos Where CiaContab = {0}", TargetCiaContab_ListBox.SelectedValue); // para reportar el progreso en la página int nRegistroActual = 0, nProgressPercentaje = 0, nCantidadRegistros = 0; nCantidadRegistros = (from sc in dbContab.Presupuesto_Codigos where sc.CiaContab == int.Parse(SourceCiaContab_ListBox.SelectedValue) select sc).Count(); // ---------------------------------------------------------------------------------------------- // leemos los códigos de presupuesto de la compañía Source y los copiamos a la compañía Target ... int nCantidadCodigosCopiados = 0; var SourceCia_CodigosPresuesto = from sc in dbContab.Presupuesto_Codigos where sc.CiaContab == int.Parse(SourceCiaContab_ListBox.SelectedValue) select new { sc.Codigo, sc.Descripcion, sc.CantNiveles, sc.GrupoFlag, sc.SuspendidoFlag }; Presupuesto_Codigo MyCodigo; List <Presupuesto_Codigo> MyCodigo_List = new List <Presupuesto_Codigo>(); foreach (var Codigo in SourceCia_CodigosPresuesto) { // vamos agregando cada código leído de la compañía Source a la compañía Target MyCodigo = new Presupuesto_Codigo(); MyCodigo.Codigo = Codigo.Codigo; MyCodigo.Descripcion = Codigo.Descripcion; MyCodigo.CantNiveles = Codigo.CantNiveles; MyCodigo.GrupoFlag = Codigo.GrupoFlag; MyCodigo.SuspendidoFlag = Codigo.SuspendidoFlag; MyCodigo.CiaContab = int.Parse(TargetCiaContab_ListBox.SelectedValue); MyCodigo_List.Add(MyCodigo); nCantidadCodigosCopiados++; // --------------------------------------------------------------------- // calculamos el progreso (%); es usado por el progress bar en la página nRegistroActual++; nProgressPercentaje = nRegistroActual * 100 / nCantidadRegistros; Session["Progress_Percentage"] = nProgressPercentaje; // ---------------------------------------------------------------------- } try { dbContab.Presupuesto_Codigos.InsertAllOnSubmit(MyCodigo_List); dbContab.SubmitChanges(); } catch (Exception ex) { dbContab = null; // --------------------------------------------- // escribimos el error al xml file y terminamos XElement xml = XElement.Load(filePath); xml.Element("Values").Element("Error").ReplaceAll( new XElement("ErrorFlag", "1"), new XElement("ErrorMessage", ex.Message)); xml.Save(filePath); // para indicar que al progress bar que el proceso terminó Session["Progress_Completed"] = 1; return; } // ----------------------------------------------------------------------------------------------- // ahora copiamos las cuentas contables asociadas a códigos de presupuesto. Nótese que chequeamos // que la cuenta contable exista para la compañía, antes de intentar grabarla en la tabla // para mostrar el progreso del progreso en la página nRegistroActual = 0; nProgressPercentaje = 0; nCantidadRegistros = (from cc in dbContab.Presupuesto_AsociacionCodigosCuentas where cc.CiaContab == int.Parse(SourceCiaContab_ListBox.SelectedValue) select cc).Count(); var AsociacionCodigosCuentas = from acc in dbContab.Presupuesto_AsociacionCodigosCuentas where acc.CiaContab == int.Parse(SourceCiaContab_ListBox.SelectedValue) select new { acc.CodigoPresupuesto, acc.CuentaContableID, acc.CuentasContable.Cuenta }; Presupuesto_AsociacionCodigosCuenta MyPresupuesto_AsociacionCodigosCuentas; List <Presupuesto_AsociacionCodigosCuenta> MyPresupuesto_AsociacionCodigosCuentas_List = new List <Presupuesto_AsociacionCodigosCuenta>(); int nCantidadCuentasContablesAsociadasCopiadas = 0; int nCantidadCuentasContablesAsociadasNoCopiadas = 0; foreach (var CuentaContable in AsociacionCodigosCuentas) { // primero nos aseguramos que la cuenta contable existe en la compañía Target // NOTA: como la cuenta contable en el código de presupuesto es el ID de la cuenta, debemos buscar la cuenta (ie: 1001200) para el ID (1500) ... CuentasContable cuentaContableEnTargetCia = dbContab.CuentasContables. Where(c => c.Cuenta == CuentaContable.Cuenta && c.Cia == int.Parse(TargetCiaContab_ListBox.SelectedValue)).FirstOrDefault(); if (cuentaContableEnTargetCia == null) { nCantidadCuentasContablesAsociadasNoCopiadas++; } else { MyPresupuesto_AsociacionCodigosCuentas = new Presupuesto_AsociacionCodigosCuenta(); MyPresupuesto_AsociacionCodigosCuentas.CodigoPresupuesto = CuentaContable.CodigoPresupuesto; MyPresupuesto_AsociacionCodigosCuentas.CuentaContableID = cuentaContableEnTargetCia.ID; MyPresupuesto_AsociacionCodigosCuentas.CiaContab = int.Parse(TargetCiaContab_ListBox.SelectedValue); MyPresupuesto_AsociacionCodigosCuentas_List.Add(MyPresupuesto_AsociacionCodigosCuentas); nCantidadCuentasContablesAsociadasCopiadas++; } // --------------------------------------------------------------------- // calculamos el progreso (%); es usado por el progress bar en la página nRegistroActual++; nProgressPercentaje = nRegistroActual * 100 / nCantidadRegistros; Session["Progress_Percentage"] = nProgressPercentaje; // ---------------------------------------------------------------------- } try { dbContab.Presupuesto_AsociacionCodigosCuentas. InsertAllOnSubmit(MyPresupuesto_AsociacionCodigosCuentas_List); dbContab.SubmitChanges(); } catch (Exception ex) { dbContab = null; // --------------------------------------------- // escribimos el error al xml file y terminamos XElement xml = XElement.Load(filePath); xml.Element("Values").Element("Error").ReplaceAll( new XElement("ErrorFlag", "1"), new XElement("ErrorMessage", ex.Message)); xml.Save(filePath); // para indicar que al progress bar que el proceso terminó Session["Progress_Completed"] = 1; return; } // ----------------------------------------------------------------------------------------------------- // por último, el usuario pudo haber indicado que desea también pasar los registros de montos estimados // desde la compañía Source hacia la Target. Nótese que, de ser así, debe venir el año en al textbox // que existe para ello int nCantidadRegistrosMontosCopiados = 0; if (CopiarMontos_CheckBox.Checked && CopiarMontos_DropDownList.SelectedIndex != -1) { // para mostrar el progreso del progreso en la página nRegistroActual = 0; nProgressPercentaje = 0; nCantidadRegistros = (from pm in dbContab.Presupuesto_Montos where pm.CiaContab == int.Parse(SourceCiaContab_ListBox.SelectedValue) && pm.Ano == int.Parse(CopiarMontos_DropDownList.SelectedValue) select pm).Count(); var query = from pm in dbContab.Presupuesto_Montos where pm.CiaContab == int.Parse(SourceCiaContab_ListBox.SelectedValue) && pm.Ano == int.Parse(CopiarMontos_DropDownList.SelectedValue) select new { pm.CodigoPresupuesto, pm.Moneda, pm.Mes01_Est, pm.Mes02_Est, pm.Mes03_Est, pm.Mes04_Est, pm.Mes05_Est, pm.Mes06_Est, pm.Mes07_Est, pm.Mes08_Est, pm.Mes09_Est, pm.Mes10_Est, pm.Mes11_Est, pm.Mes12_Est }; Presupuesto_Monto MyPresupuesto_Montos; List <Presupuesto_Monto> MyPresupuesto_Montos_List = new List <Presupuesto_Monto>(); foreach (var Pres_Montos in query) { MyPresupuesto_Montos = new Presupuesto_Monto(); MyPresupuesto_Montos.CodigoPresupuesto = Pres_Montos.CodigoPresupuesto; MyPresupuesto_Montos.CiaContab = int.Parse(TargetCiaContab_ListBox.SelectedValue); MyPresupuesto_Montos.Moneda = Pres_Montos.Moneda; MyPresupuesto_Montos.Ano = short.Parse(CopiarMontos_DropDownList.SelectedValue); MyPresupuesto_Montos.Mes01_Est = Pres_Montos.Mes01_Est; MyPresupuesto_Montos.Mes02_Est = Pres_Montos.Mes02_Est; MyPresupuesto_Montos.Mes03_Est = Pres_Montos.Mes03_Est; MyPresupuesto_Montos.Mes04_Est = Pres_Montos.Mes04_Est; MyPresupuesto_Montos.Mes05_Est = Pres_Montos.Mes05_Est; MyPresupuesto_Montos.Mes06_Est = Pres_Montos.Mes06_Est; MyPresupuesto_Montos.Mes07_Est = Pres_Montos.Mes07_Est; MyPresupuesto_Montos.Mes08_Est = Pres_Montos.Mes08_Est; MyPresupuesto_Montos.Mes09_Est = Pres_Montos.Mes09_Est; MyPresupuesto_Montos.Mes10_Est = Pres_Montos.Mes10_Est; MyPresupuesto_Montos.Mes11_Est = Pres_Montos.Mes11_Est; MyPresupuesto_Montos.Mes12_Est = Pres_Montos.Mes12_Est; MyPresupuesto_Montos_List.Add(MyPresupuesto_Montos); nCantidadRegistrosMontosCopiados++; // --------------------------------------------------------------------- // calculamos el progreso (%); es usado por el progress bar en la página nRegistroActual++; nProgressPercentaje = nRegistroActual * 100 / nCantidadRegistros; Session["Progress_Percentage"] = nProgressPercentaje; // ---------------------------------------------------------------------- } try { dbContab.Presupuesto_Montos.InsertAllOnSubmit(MyPresupuesto_Montos_List); dbContab.SubmitChanges(); } catch (Exception ex) { dbContab = null; // --------------------------------------------- // escribimos el error al xml file y terminamos XElement xml = XElement.Load(filePath); xml.Element("Values").Element("Error").ReplaceAll( new XElement("ErrorFlag", "1"), new XElement("ErrorMessage", ex.Message)); xml.Save(filePath); // para indicar que al progress bar que el proceso terminó Session["Progress_Completed"] = 1; return; } } dbContab = null; // ---------------------------------------------------------------------------------------- // cuando el proceso termina, escribimos los resultados al xml file XElement xmlfile = XElement.Load(filePath); xmlfile.Element("Values").ReplaceAll( new XElement("CantidadCodigosEliminados", nCantidadCodigosEliminados), new XElement("CantidadCodigosCopiados", nCantidadCodigosCopiados), new XElement("CantidadCuentasContablesAsociadasCopiadas", nCantidadCuentasContablesAsociadasCopiadas), new XElement("CantidadCuentasContablesAsociadasNoCopiadas", nCantidadCuentasContablesAsociadasNoCopiadas), new XElement("CantidadRegistrosMontosCopiados", nCantidadRegistrosMontosCopiados), new XElement("Error", new XElement("ErrorFlag", 0), new XElement("ErrorMessage", ""))); xmlfile.Save(filePath); // para indicar que al progress bar que el proceso terminó Session["Progress_Completed"] = 1; }
protected void Page_Load(object sender, EventArgs e) { ErrMessage_Span.InnerHtml = ""; ErrMessage_Span.Style["display"] = "none"; if (!Page.IsPostBack) { HtmlGenericControl MyHtmlH2; MyHtmlH2 = (HtmlGenericControl)Master.FindControl("PageTitle_TableCell"); if (!(MyHtmlH2 == null)) { MyHtmlH2.InnerHtml = "Consulta de Asientos Contables"; } dbContabDataContext dbContab = new dbContabDataContext(); int numeroAutomaticoAsiento = Convert.ToInt32(Page.Request.QueryString["NumeroAutomatico"]); // nótese que las páginas que usan esta página reciben, todas, este parámetro bool bReconvertirCifrasAntes_01Oct2021 = false; try { bReconvertirCifrasAntes_01Oct2021 = (bool)Session["ReconvertirCifrasAntes_01Oct2021"]; } catch (Exception ex) { ErrMessage_Span.InnerHtml = "Ud. debe aplicar un filtro antes de intentar abrir esta página. <br />" + "Aparentemente, no se ha aplicado un filtro aún. <br /> " + "Por favor aplique un filtro. Luego regrese y ejecute esta función."; ErrMessage_Span.Style["display"] = "block"; return; } // si el usuario quiere aplicar la reconversión Oct/2021, lo indicamos al SqlDataSource con un parámetro // el sqldatasource usa un Case para aplicar o no la operación (x/1M y redondear a 2 decimales) // solo intentamos reconvertir si el asiento es en Bs y de fecha *anterior* a 1-oct-2021 if (bReconvertirCifrasAntes_01Oct2021) { var asiento = dbContab.Asientos.Where(x => x.NumeroAutomatico == numeroAutomaticoAsiento).Select(x => new { moneda = x.Moneda, fecha = x.Fecha }).First(); if (asiento.fecha >= new DateTime(2021, 10, 1)) { bReconvertirCifrasAntes_01Oct2021 = false; } else { // ---------------------------------------------------------------------------------------------------------------------- // 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) { ErrMessage_Span.InnerHtml = monedaNacional_return.message; ErrMessage_Span.Style["display"] = "block"; return; } Monedas monedaNacional = monedaNacional_return.moneda; // ---------------------------------------------------------------------------------------------------------------------- if (asiento.moneda != monedaNacional.Moneda) { bReconvertirCifrasAntes_01Oct2021 = false; } else { this.Partidas_SqlDataSource.SelectParameters["Reconversion_2021"].DefaultValue = "si"; } } } this.AsientosContables_SqlDataSource.SelectParameters["NumeroAutomatico"].DefaultValue = numeroAutomaticoAsiento.ToString(); this.Partidas_SqlDataSource.SelectParameters["NumeroAutomatico"].DefaultValue = numeroAutomaticoAsiento.ToString(); this.Asientos_Log_SqlDataSource.SelectParameters["NumeroAutomatico"].DefaultValue = numeroAutomaticoAsiento.ToString(); this.AsientosLinks_SqlDataSource.SelectParameters["NumeroAutomatico"].DefaultValue = numeroAutomaticoAsiento.ToString(); decimal?nTotalDebe = (from d in dbContab.dAsientos where d.NumeroAutomatico == numeroAutomaticoAsiento select(decimal?) d.Debe).Sum(); decimal?nTotalHaber = (from d in dbContab.dAsientos where d.NumeroAutomatico == numeroAutomaticoAsiento select(decimal?) d.Haber).Sum(); if (bReconvertirCifrasAntes_01Oct2021) { nTotalDebe = Convert.ToDecimal(Math.Round(Convert.ToDouble(nTotalDebe) / 1000000, 2)); nTotalHaber = Convert.ToDecimal(Math.Round(Convert.ToDouble(nTotalHaber) / 1000000, 2)); } Label MySumOfDebe_Label = (Label)Partidas_ListView.FindControl("SumOfDebe_Label"); Label MySumOfHaber_Label = (Label)Partidas_ListView.FindControl("SumOfHaber_Label"); if (MySumOfDebe_Label != null) { MySumOfDebe_Label.Text = nTotalDebe != null?nTotalDebe.Value.ToString("#,##0.000") : "0,000"; } if (MySumOfHaber_Label != null) { MySumOfHaber_Label.Text = nTotalHaber != null?nTotalHaber.Value.ToString("#,##0.000") : "0,000"; } dbContab = null; // establecemos la propiedad del link que permite obtener el reporte para este asiento contable ... string url = ""; url = "../../../ReportViewer.aspx?rpt=unasientocontable&NumeroAutomatico=" + numeroAutomaticoAsiento.ToString(); ImprimirAsientoContable_HyperLink.HRef = "javascript:PopupWin('" + url + "', 1000, 680)"; } }
protected void Page_Load(object sender, EventArgs e) { ErrMessage_Span.InnerHtml = ""; ErrMessage_Span.Style["display"] = "none"; if (!User.Identity.IsAuthenticated) { FormsAuthentication.SignOut(); return; } Master.Page.Title = "Control de presupuesto - Consulta anualizada"; ControlPresupuesto_Reportes_HyperLink.NavigateUrl = "javascript:PopupWin('../../../../ReportViewer2.aspx?rpt=ptoconsanual&cantniveles=" + CantNiveles_DropDownList.SelectedValue + "', 1000, 680)"; 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 = "Contab"; } HtmlGenericControl MyHtmlH2; MyHtmlH2 = (HtmlGenericControl)(Master.FindControl("PageTitle_TableCell")); if (MyHtmlH2 != null) { MyHtmlH2.InnerHtml = "Consulta del Control de Presupuesto"; } //-------------------------------------------------------------------------------------------- //para asignar la página que corresponde al help de la página HtmlAnchor MyHtmlHyperLink; MyHtmlHyperLink = (HtmlAnchor)Master.FindControl("Help_HyperLink"); MyHtmlHyperLink.HRef = "javascript:PopupWin('../../../Doc/Bancos/Facturas/Consulta facturas/consulta_general_de_facturas.htm', 1000, 680)"; Session["FiltroForma"] = null; // eliminamos el contenido de la tabla de factores de conversión 'aplicados', para que esté // vacía cuando el usuario ejecute la función que lee estos factores y convierte las cifras // de esta consulta dbContabDataContext dbContab = new dbContabDataContext(); dbContab.ExecuteCommand ("Delete From FactoresConversionAnoMes_Aplicados Where NombreUsuario = {0}", User.Identity.Name); dbContab = null; } 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 (ExecuteThread_HiddenField.Value == "1") { // cuando este html item es 1, ejecutamos el thread que construye la selección y la graba // a una tabla en la base de datos ExecuteThread_HiddenField.Value = "0"; // nótese como ejecutamos el sub que sigue en un thread diferente // ------------------------------------------------------------------------------ // inicializamos antes las variables que indican que debemos mostrar el progreso Session["Progress_Completed"] = 0; Session["Progress_Percentage"] = 0; Session["Progress_SelectedRecs"] = 0; // ------------------------------------------------------------------------------ BuildReportRecords(); // ------------------------------------------------------------------------------------------------------ // para mostrar un título que describa la consulta, leemos alguna información desde // la tabla tTempWebReport... dbContabDataContext dbContab = new dbContabDataContext(); var MySelectedAnoFiscal = (from ma in dbContab.tTempWebReport_PresupuestoConsultaAnuals where ma.NombreUsuario == User.Identity.Name select new { ma.AnoFiscal }).FirstOrDefault(); TituloConsulta_H2.InnerHtml = "Consulta anualizada de presupuesto para el año fiscal " + MySelectedAnoFiscal.AnoFiscal.ToString(); dbContab = null; PageDataBind(); //Thread MyThread = new Thread(BuildReportRecords); //MyThread.Priority = ThreadPriority.Lowest; //MyThread.Start(); //// ejecutamos javascript para que lea la variable session y muestre el progreso //System.Text.StringBuilder sb = new System.Text.StringBuilder(); //sb.Append("<script language='javascript'>"); //sb.Append("showprogress();"); //sb.Append("</script>"); //ClientScript.RegisterStartupScript(this.GetType(), "onLoad", sb.ToString()); } else { if (RebindPage_HiddenField.Value == "1") { // cuando este html item es 1 terminó el thread que construye la selección. Entonces // se hace un refresh de la página y ejecutamos aquí el procedimiento que hace el // databind a los controles para que muestren los datos al usuario RebindPage_HiddenField.Value = "0"; SelectedRecs_HiddenField.Value = Session["Progress_SelectedRecs"].ToString(); PageDataBind(); // ------------------------------------------------------------------------------------------------------ // para mostrar un título que describa la consulta, leemos alguna información desde // la tabla tTempWebReport... dbContabDataContext dbContab = new dbContabDataContext(); var MySelectedAnoFiscal = (from ma in dbContab.tTempWebReport_PresupuestoConsultaAnuals where ma.NombreUsuario == User.Identity.Name select new { ma.AnoFiscal }).FirstOrDefault(); TituloConsulta_H2.InnerHtml = "Consulta anualizada de presupuesto para el año fiscal " + MySelectedAnoFiscal.AnoFiscal.ToString(); dbContab = null; System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("<script language='javascript'>"); sb.Append("showprogress_displayselectedrecs();"); sb.Append("</script>"); ClientScript.RegisterStartupScript(this.GetType(), "onLoad", sb.ToString()); } } } }