Пример #1
0
        protected void AsientosContables_Copiar_Button_Click(object sender, EventArgs e)
        {
            Page.Validate();
            if (!Page.IsValid)
            {
                return;
            }

            string ajaxPopUpMessage = "";

            if (Session["filtroForma_consultaAsientosContables"] == null || string.IsNullOrEmpty(Session["filtroForma_consultaAsientosContables"].ToString()))
            {
                ajaxPopUpMessage = "<br />Aparentemente, Ud. no ha indicado un filtro a esta página.<br />" +
                                   "Debe hacerlo, para que el programa lea y seleccione registros <em><b>antes que Ud. ejecute esta función</b></em>.";

                this.ModalPopupTitle_span.InnerHtml = "No se ha indicado un filtro a esta página";
                this.ModalPopupBody_span.InnerHtml  = ajaxPopUpMessage;

                this.btnOk.Visible  = false;
                this.btnCancel.Text = "Ok";

                this.ModalPopupExtender1.Show();

                return;
            }

            dbContab_Contab_Entities contabContext   = new dbContab_Contab_Entities();
            FuncionesContab2         funcionesContab = new FuncionesContab2(contabContext);
            int    cantidadAsientosCopiados          = 0;
            string resultMessage = "";

            if (!funcionesContab.CopiarAsientosContables(Session["filtroForma_consultaAsientosContables"].ToString(),
                                                         Session["filtroForma_consultaAsientosContables_subQuery"].ToString(),
                                                         Membership.GetUser().UserName,
                                                         Convert.ToInt32(CiaContab_DropDownList.SelectedValue),
                                                         this.multiplicarPor_textBox.Text,
                                                         this.dividirPor_textBox.Text,
                                                         out cantidadAsientosCopiados,
                                                         out resultMessage))
            {
                this.ModalPopupTitle_span.InnerHtml = "Error al intentar ejecutar la función";
                ajaxPopUpMessage = resultMessage;
            }
            else
            {
                this.ModalPopupTitle_span.InnerHtml = "Copia de asientos contables - Ejecución exitosa";

                ajaxPopUpMessage = "Ok, los asientos contables han sido copiados en forma exitosa, a la compañía <em>Contab</em> que se ha indicado.<br /><br />" +
                                   "En total, se han copiado <b>" + cantidadAsientosCopiados.ToString() + "</b> asientos contables a la compañía seleccionada.";
            }

            this.ModalPopupBody_span.InnerHtml = ajaxPopUpMessage;
            this.btnOk.Visible  = false;
            this.btnCancel.Text = "Ok";

            this.ModalPopupExtender1.Show();

            return;
        }
Пример #2
0
        protected void AsientosContables_Exportar_Button_Click(object sender, EventArgs e)
        {
            string ajaxPopUpMessage = "";

            if (Session["FiltroForma"] == null || string.IsNullOrEmpty(Session["FiltroForma"].ToString()))
            {
                ajaxPopUpMessage = "<br />Aparentemente, Ud. no ha indicado un filtro a esta página.<br />" +
                                   "Debe hacerlo, para que el programa lea y seleccione registros <em><b>antes que Ud. ejecute esta función</b></em>.";

                this.ModalPopupTitle_span.InnerHtml = "No se ha indicado un filtro a esta página";
                this.ModalPopupBody_span.InnerHtml  = ajaxPopUpMessage;

                this.btnOk.Visible  = false;
                this.btnCancel.Text = "Ok";

                this.ModalPopupExtender1.Show();

                return;
            }

            dbContab_Contab_Entities contabContext   = new dbContab_Contab_Entities();
            FuncionesContab2         funcionesContab = new FuncionesContab2(contabContext);
            int    cantidadPartidasLeidas            = 0;
            string resultMessage = "";
            string filePath      = "";

            if (!funcionesContab.Exportar_AsientosContables(Session["FiltroForma"].ToString(),
                                                            this.Formato_RadioButtonList.SelectedValue,
                                                            Membership.GetUser().UserName,
                                                            out cantidadPartidasLeidas,
                                                            out filePath,
                                                            out resultMessage))
            {
                this.ModalPopupTitle_span.InnerHtml = "Error al intentar ejecutar la función";
                ajaxPopUpMessage = resultMessage;
            }
            else
            {
                this.ModalPopupTitle_span.InnerHtml = "Copia de asientos contables - Ejecución exitosa";

                ajaxPopUpMessage = "Ok, los asientos contables han sido exportados a un archivo, según el formato indicado por Ud.<br /><br />" +
                                   "En total, se han leído y exportado " + cantidadPartidasLeidas.ToString() + " partidas, para los asientos contables seleccionados.<br /><br />" +
                                   "Ahora Ud. debe copiar el archivo recién construído a su PC, usando el link que para ello se muestra al cerrar este díalogo.";
            }

            this.ModalPopupBody_span.InnerHtml = ajaxPopUpMessage;
            this.btnOk.Visible  = false;
            this.btnCancel.Text = "Ok";

            this.DownloadFile_LinkButton.Visible = true;
            this.FileName_HiddenField.Value      = filePath;

            this.ModalPopupExtender1.Show();

            return;
        }
        private void CrearInfoReport(out string errorMessage)
        {
            errorMessage = "";

            if (!User.Identity.IsAuthenticated)
            {
                FormsAuthentication.SignOut();
                return;
            }

            string usuario = User.Identity.Name;

            if (Session["BalanceGeneral_Parametros"] == null)
            {
                errorMessage = "Aparentemente, Ud. no ha definido un filtro para esta consulta. Por favor defina un filtro para esta consulta antes de continuar.";
                return;
            }

            BalanceGeneral_Parametros parametros = Session["BalanceGeneral_Parametros"] as BalanceGeneral_Parametros;

            // --------------------------------------------------------------------------------------------------------------------------------
            // determinamos si el mes que corresponde al inicio del período está cerrado; debe estarlo para que la información regresada por esta
            // consulta sea confiable; de no ser así, indicamos pero permitimos continuar ...

            // nótese como usamos un modelo de datos LinqToSql (no EF), pues el código en la clase AsientosContables lo usa así y fue
            // escrito hace bastante tiempo ...
            //ContabSysNet_Web.ModelosDatos.dbContabDataContext contabLinqToSqlContex = new ContabSysNet_Web.ModelosDatos.dbContabDataContext();

            dbContab_Contab_Entities dbContab = new dbContab_Contab_Entities();

            //FuncionesContab funcionesContab = new FuncionesContab(parametros.CiaContab, parametros.Moneda, contabLinqToSqlContex);
            FuncionesContab2 funcionesContab2 = new FuncionesContab2(dbContab);

            bool   mesAnteriorCerradoEnContab = true;
            string popupMessage = "";

            short mesFiscal;
            short anoFiscal;

            // el mes *anterior* al período de la consulta debe estar cerrado. La función regresa False cuando el mes está cerrado
            // por eso fallamos si el mes *anterior* no está cerrado; es decir, cuando la función regresa True ...
            if (funcionesContab2.ValidarMesCerradoEnContab(parametros.Desde.AddMonths(-1), parametros.CiaContab, out mesFiscal, out anoFiscal, out errorMessage))
            {
                // NOTA: el mes *anterior* a la fecha de inicio DEBE estar cerrado (o uno posterior)
                // la función regresa False si el mes está cerrado
                // si la función regresa True es que NO está cerrado y eso no debe ocurrir en este contexto
                popupMessage = "El mes anterior al mes indicado para esta consulta, <b>no</b> está cerrado. <br /> " +
                               "Aunque Ud. puede continuar e intentar obtener esta consulta, las cifras determinadas y " +
                               "mostradas no serán del todo confiables.<br /><br />" +
                               "Aún así, desea continuar con la ejecución de esta consulta?";

                mesAnteriorCerradoEnContab = false;
            }

            ParametrosContab parametrosContab = dbContab.ParametrosContabs.Where(p => p.Cia == parametros.CiaContab).FirstOrDefault();

            if (parametrosContab == null)
            {
                errorMessage = "Aparentemente, la tabla de parámetros (Contab) no ha sido inicializada. " +
                               "Por favor inicialize esta tabla con los valores que sean adecuados, para la Cia Contab seleccionada para esta consulta.";

                return;
            }

            // ----------------------------------------------------------------------------------------------------------------------------
            // construimos el filtro de las cuentas contables, en base al contenido de la tabla ParametrosContab; en esta tabla el usuario indica
            // cuales cuentas contables corresponden a: activo, pasivo, capital, etc. Para BG, solo cuentas reales son leídas; para GyP solo cuentas
            // nominales son leídas ...
            string filtroBalGen_GyP = "";

            ConstruirFiltroBalGenGyP(parametros, parametrosContab, dbContab, out filtroBalGen_GyP);

            string filtroConsulta = parametros.Filtro + filtroBalGen_GyP;

            // ----------------------------------------------------------------------------------------------------------------------------
            // hacemos una validación: intentamos encontrar cuentas contables de tipo detalle, que tengan movimientos en el período indicado, pero que no tengan
            // un registro de saldos; estos casos pueden ocurrir para cuentas contables recién agregadas, a la cuales se le han agregado asientos pero que aún
            // no se ha ejecutado un cierre mensual que agregue un registro de saldos para éstas. Notificamos esta situación al usuario para que ejecute un
            // cierre mensual que agregue un registro de saldos para estas cuentas ...

            DateTime fecha1erDiaMes = new DateTime(parametros.Desde.Year, parametros.Desde.Month, 1);

            // nótese como no aplicamos el filtro específico a esta consulta, pues resulta complicado. Sin embargo, al no hacerlo, validamos
            // esta situación para todas las cuentas de la compañía, en vez de solo para las que cumplen el filtro ...
            string commandString = "Select c.Cuenta As CuentaContable, c.Descripcion " +
                                   "From CuentasContables c Inner Join dAsientos d On c.ID = d.CuentaContableID " +
                                   "Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " +
                                   "Where c.Cia = {2} And c.TotDet = 'D' And " +
                                   "a.Fecha Between {0} And {1} " +
                                   "And c.ID Not In (Select s.CuentaContableID From SaldosContables s Where " +
                                   "s.Cia = {2})";

            CuentaContableItem cuentasTipoDetalleSinRegistroDeSaldos = dbContab.ExecuteStoreQuery <CuentaContableItem>(commandString,
                                                                                                                       fecha1erDiaMes.ToString("yyyy-MM-dd"),
                                                                                                                       parametros.Hasta.ToString("yyyy-MM-dd"),
                                                                                                                       parametros.CiaContab).
                                                                       FirstOrDefault();

            if (cuentasTipoDetalleSinRegistroDeSaldos != null)
            {
                errorMessage = "Hemos encontrado que existen cuentas contables, por ejemplo <b><en>" +
                               (cuentasTipoDetalleSinRegistroDeSaldos.CuentaContable != null ? cuentasTipoDetalleSinRegistroDeSaldos.CuentaContable.Trim() :
                                "'cuenta contable sin número asignado - número en blanco'") +
                               " - " +
                               (cuentasTipoDetalleSinRegistroDeSaldos.Descripcion != null ? cuentasTipoDetalleSinRegistroDeSaldos.Descripcion.Trim() :
                                "'cuenta contable sin descripción asignada - descripción en blanco'") +
                               "</en></b>, con asientos registrados en el período indicado, pero sin un registro de saldos contables." +
                               "Lo más probable es que estas cuentas sean nuevas y hayan recibido asientos; sin embargo, como el cierre contable (mensual) " +
                               "no se ha corrido, su registro de saldos contables no ha sido creado aún. " +
                               "Por favor ejecute un cierre contable para el mes de la consulta para que se corrija esta situación.";

                return;
            }

            // ----------------------------------------------------------------------------------------------------------------------------
            // por último, determinamos si existen cuentas contables de tipo total y que tengan movimientos contables asociados para el período indicado.
            // esta situación puede ocurrir si el usuario cambia el tipo de una cuenta de detalle a total, para una cuenta que tenga asientos (el registro de
            // cuentas no debe permitir este cambio!). Notificamos esta situación al usuario y detenemos la ejecución del proceso ...

            // nótese como buscamos aquí sin usar el filtro que aplica a esta consulta; esto nos permite reportar esta situación tan grave,
            // independientemente del filtro que haya indicado el usuario ...
            commandString = "Select c.Cuenta As CuentaContable, c.Descripcion " +
                            "From CuentasContables c Inner Join dAsientos d On c.ID = d.CuentaContableID " +
                            "Inner Join Asientos a On d.NumeroAutomatico = a.NumeroAutomatico " +
                            "Where c.Cia = {0} And c.TotDet = 'T' And a.Fecha Between {1} And {2}";

            CuentaContableItem cuentasTipoTotalConMovimientos = dbContab.ExecuteStoreQuery <CuentaContableItem>(commandString,
                                                                                                                parametros.CiaContab,
                                                                                                                fecha1erDiaMes.ToString("yyyy-MM-dd"),
                                                                                                                parametros.Hasta.ToString("yyyy-MM-dd")).
                                                                FirstOrDefault();

            if (cuentasTipoTotalConMovimientos != null)
            {
                errorMessage = "Hemos encontrado que existen cuentas contables de tipo total, por ejemplo '<b><en>" +
                               (cuentasTipoTotalConMovimientos.CuentaContable != null ? cuentasTipoTotalConMovimientos.CuentaContable.Trim() :
                                "'cuenta contable sin número asignado - número en blanco'") +
                               " - " +
                               (cuentasTipoTotalConMovimientos.Descripcion != null ? cuentasTipoTotalConMovimientos.Descripcion.Trim() :
                                "'cuenta contable sin descripción asignada - descripción en blanco'") +
                               "</en></b>', con asientos registrados en el período indicado. " +
                               "Una cuenta contable de tipo total no puede recibir asientos contables. " +
                               "Por favor revise y corrija esta situación. Luego regrese a continuar con este proceso.";

                return;
            }

            if (!mesAnteriorCerradoEnContab)
            {
                // arriba, se determinó que el mes anterior al mes indicado no esta cerrado en Contab; de ser así, esta consulta no podrá determinar
                // lo saldos iniciales del período (saldos finales del mes anterior) de una manera confiable; sin embargo, notificamos al usaurio y
                // permitimos continuar (o no!) ...

                // nótese que si el usuario decide continuar, el metodo btnOk_Click es ejecutado; si el usuario cancela, simplemente la ejecución del
                // proceso es detenida en el cliente (browser) ...

                this.ModalPopupTitle_span.InnerHtml = "El mes contable que corresponde a los saldos iniciales del período indicado no está cerrado";
                this.ModalPopupBody_span.InnerHtml  = popupMessage;

                this.btnOk.Visible  = true;
                this.btnCancel.Text = "Cancelar";

                this.ModalPopupExtender1.Show();

                return;
            }

            // las validaciones pasaron; ejecutamos la función que prepara y la consulta ...
            ConstruirConsulta(out errorMessage);
        }