Exemplo n.º 1
0
    private bool ValidarObtenerNumeroContab(DateTime dFecha, int nCiaContab, string sTipoAsiento,
                                            out string sMensajeError)
    {
        // esta función valida que un número de asiento contable pueda ser obtenido en forma normal. En
        // particular, es importante para asientos que correspondan a contabilidades cuyo número se obtiene
        // en base al tipo del asiento; para estos casos, si el tipo no tiene un grupo asociado en la tabla
        // tGruposDeTiposDeAsiento, el número Contab para el asiento NO PODRÁ ser obtenido en forma
        // adecuada.

        // Esta función debe ser ejecutada para que efectúe la validación mencionada ANTES de intentar
        // grabar un asiento, aunque éste tenga un número Contab negativo. Pues luego, cuando se intente
        // obtener su número Contab definitivo, el proceso fallará.

        sMensajeError = "";

        // antes que nada, nos aseguramos que el tipo de asiento exista

        int nRecCount = (from ta in _dbContab.TiposDeAsientos
                         where ta.Tipo == sTipoAsiento
                         select ta).Count();

        if (nRecCount == 0)
        {
            sMensajeError = "El tipo de asiento asociado al asiento contable no fue encontrado en Contab.";
            return(false);
        }

        int nMesCalendario = dFecha.Month;
        int nAnoCalendario = dFecha.Year;

        // determinamos si el número se genera de acuerdo al tipo

        bool?bNumeracionSeparadaPorTipo = (from par in _dbContab.ParametrosContabs
                                           where par.Cia == nCiaContab
                                           select par.NumeracionAsientosSeparadaFlag).FirstOrDefault();

        if (bNumeracionSeparadaPorTipo == null)
        {
            sMensajeError = " ... aparentemente, no se ha definido si la numeración de los asientos es o no separada de acuerdo a su tipo.<br /><br />" +
                            "Por favor abra la tabla <i>Parámetros</i> en <i>Contab</i> y defina un valor para este item.";

            return(false);
        }

        if (bNumeracionSeparadaPorTipo.Value)
        {
            // NOTESE que NO VALIDAMOS los casos en los cuales la númeración NO ES por tipo de asiento;
            // ASUMIMOS que, para estos casos, el número podrá ser obtenido en forma normal.

            // leemos el grupo de la tabla TiposDeAsiento
            // leemos el número del asiento de la tabla AsientosIdPorGrupo

            int?nGrupo = (from t in _dbContab.TiposDeAsientos
                          where t.Tipo == sTipoAsiento
                          select t.Grupo).FirstOrDefault();

            if (nGrupo == null)
            {
                sMensajeError = " ... aparentemente, no se ha definido el Grupo que corresponde al tipo de asientos que Ud. ha indicado para el asiento contable.<br />" +
                                "Como la numeración de los asientos contables es separada de acuerdo a su tipo (según está ahora definido en el sistema <i>Contab</i>), cada tipo debe corresponder a un grupo.<br />" +
                                "Por favor abra la tabla <i>Tipos de Asiento</i> en <i>Contab</i> y defina un valor para este item.";

                return(false);
            }

            AsientosIdPorGrupo MyAsientosIdPorGrupo = (from aidg in _dbContab.AsientosIdPorGrupos
                                                       where aidg.Mes == nMesCalendario &&
                                                       aidg.Ano == nAnoCalendario &&
                                                       aidg.Grupo == nGrupo.Value &&
                                                       aidg.Cia == nCiaContab
                                                       select aidg).SingleOrDefault();

            if (MyAsientosIdPorGrupo == null)
            {
                // no existe un registro en la tabla para el mes, año y cia. Buscamos el número INICIAL
                // en la tabla tGruposDeTiposDeAsiento

                var MyGrupoTipoAsiento = (from g in _dbContab.tGruposDeTiposDeAsientos
                                          where g.Grupo == nGrupo
                                          select g).FirstOrDefault();

                if (MyGrupoTipoAsiento == null || MyGrupoTipoAsiento.NumeroInicial == null)
                {
                    sMensajeError = " ... aparentemente, no se ha definido el Grupo que corresponde al tipo de asientos que Ud. ha indicado para el asiento contable.<br />" +
                                    "Como la numeración de los asientos contables es separada de acuerdo a su tipo (según está ahora definido en el sistema <i>Contab</i>), cada tipo debe corresponder a un grupo.<br />" +
                                    "Por favor abra la tabla <i>Tipos de Asiento</i> en <i>Contab</i> y defina un valor para este item;<br />" +
                                    "o, abra la tabla <i>Grupos de tipos de asiento</i> y defina un grupo y un número de inicio para este grupo.";

                    return(false);
                }
            }
        }

        return(true);
    }
Exemplo n.º 2
0
    private bool ObtenerNumeroContab(DateTime dFecha, int nCiaContab, string sTipoAsiento,
                                     out string sMensajeError, out int nNumeroContab)
    {
        // esta función determina y regresa un número de asiento Contab. Nótese que el número determinado
        // depende de si se genera por grupos de tipo o no. Esto lo determina un flag en ParametrosContab:
        // NumeracionAsientosSeparadaFlag.

        sMensajeError = "";
        nNumeroContab = 0;

        int nMesCalendario = dFecha.Month;
        int nAnoCalendario = dFecha.Year;

        // lo primero que hacemos es determinar si el número se genera de acuerdo al tipo

        bool?bNumeracionSeparadaPorTipo = (from par in _dbContab.ParametrosContabs
                                           where par.Cia == nCiaContab
                                           select par.NumeracionAsientosSeparadaFlag).FirstOrDefault();

        if (bNumeracionSeparadaPorTipo == null)
        {
            sMensajeError = " ... aparentemente, no se ha definido si la numeración de los asientos es o no separada de acuerdo a su tipo.<br /><br />" +
                            "Por favor abra la tabla <i>Parámetros</i> en <i>Contab</i> y defina un valor para este item.";
            return(false);
        }

        if (!bNumeracionSeparadaPorTipo.Value)
        {
            // la númeración NO ES separada de acuerdo al tipo del asiento. La determinación del número
            // es más simple

            // leemos el número del asiento de la tabla AsientosId

            AsientosId MyAsientosId = (from aid in _dbContab.AsientosIds
                                       where aid.Mes == nMesCalendario &&
                                       aid.Ano == nAnoCalendario &&
                                       aid.Cia == nCiaContab
                                       select aid).SingleOrDefault();

            if (MyAsientosId == null)
            {
                // no existe un registro en la tabla para el mes, año y cia. Lo creamos y asumimos 1
                // como número

                nNumeroContab = 1;

                AsientosId MyAsientosId_Nuevo = new AsientosId();

                MyAsientosId_Nuevo.Mes    = Convert.ToInt16(nMesCalendario);
                MyAsientosId_Nuevo.Ano    = Convert.ToInt16(nAnoCalendario);
                MyAsientosId_Nuevo.Cia    = nCiaContab;
                MyAsientosId_Nuevo.Numero = 2;

                _dbContab.AsientosIds.InsertOnSubmit(MyAsientosId_Nuevo);
            }
            else
            {
                nNumeroContab        = MyAsientosId.Numero;
                MyAsientosId.Numero += 1;
            }
        }
        else
        {
            // leemos el grupo de la tabla TiposDeAsiento


            // leemos el número del asiento de la tabla AsientosIdPorGrupo

            int?nGrupo = (from t in _dbContab.TiposDeAsientos
                          where t.Tipo == sTipoAsiento
                          select t.Grupo).FirstOrDefault();

            if (nGrupo == null)
            {
                sMensajeError = " ... aparentemente, no se ha definido el Grupo que corresponde al tipo de asientos que Ud. ha indicado para el asiento contable.<br />" +
                                "Como la numeración de los asientos contables es separada de acuerdo a su tipo (según está ahora definido en el sistema <i>Contab</i>), cada tipo debe corresponder a un grupo.<br />" +
                                "Por favor abra la tabla <i>Tipos de Asiento</i> en <i>Contab</i> y defina un valor para este item.";
                return(false);
            }



            AsientosIdPorGrupo MyAsientosIdPorGrupo = (from aidg in _dbContab.AsientosIdPorGrupos
                                                       where aidg.Mes == nMesCalendario &&
                                                       aidg.Ano == nAnoCalendario &&
                                                       aidg.Grupo == nGrupo.Value &&
                                                       aidg.Cia == nCiaContab
                                                       select aidg).SingleOrDefault();

            if (MyAsientosIdPorGrupo == null)
            {
                // no existe un registro en la tabla para el mes, año y cia. Buscamos el número INICIAL
                // en la tabla tGruposDeTiposDeAsiento

                var MyGrupoTipoAsiento = (from g in _dbContab.tGruposDeTiposDeAsientos
                                          where g.Grupo == nGrupo
                                          select g).FirstOrDefault();

                if (MyGrupoTipoAsiento == null || MyGrupoTipoAsiento.NumeroInicial == null)
                {
                    sMensajeError = " ... aparentemente, no se ha definido el Grupo que corresponde al tipo de asientos que Ud. ha indicado para el asiento contable.<br />" +
                                    "Como la numeración de los asientos contables es separada de acuerdo a su tipo (según está ahora definido en el sistema <i>Contab</i>), cada tipo debe corresponder a un grupo.<br />" +
                                    "Por favor abra la tabla <i>Tipos de Asiento</i> en <i>Contab</i> y defina un valor para este item;<br />" +
                                    "o, abra la tabla <i>Grupos de tipos de asiento</i> y defina un grupo y un número de inicio para este grupo.";
                    return(false);
                }

                nNumeroContab = MyGrupoTipoAsiento.NumeroInicial;

                AsientosIdPorGrupo MyAsientosIdPorGrupo_Nuevo = new AsientosIdPorGrupo();

                MyAsientosIdPorGrupo_Nuevo.Mes    = Convert.ToInt16(nMesCalendario);
                MyAsientosIdPorGrupo_Nuevo.Ano    = Convert.ToInt16(nAnoCalendario);
                MyAsientosIdPorGrupo_Nuevo.Grupo  = nGrupo.Value;
                MyAsientosIdPorGrupo_Nuevo.Cia    = nCiaContab;
                MyAsientosIdPorGrupo_Nuevo.Numero = MyGrupoTipoAsiento.NumeroInicial + 1;

                _dbContab.AsientosIdPorGrupos.InsertOnSubmit(MyAsientosIdPorGrupo_Nuevo);
            }
            else
            {
                nNumeroContab = MyAsientosIdPorGrupo.Numero.Value;
                MyAsientosIdPorGrupo.Numero += 1;
            }
        }


        try
        {
            _dbContab.SubmitChanges();
        }
        catch (Exception ex)
        {
            sMensajeError = " ... hemos obtenido un error al intentar efectuar una operación en la base de datos.<br />" +
                            "El mensaje específico de error es: <br /><br />" + ex.Message;
            return(false);
        }

        return(true);
    }
Exemplo n.º 3
0
        public bool ObtenerNumeroAsientoContab(DateTime fechaAsiento, int ciaContab, string tipoAsiento,
                                               out short numeroAsientoContab, out string errorMessage)
        {
            // esta función determina y regresa un número de asiento Contab. Nótese que el número determinado
            // depende de si se genera por grupos de tipo o no. Esto lo determina un flag en ParametrosContab:
            // NumeracionAsientosSeparadaFlag.

            // nótese como, lamentablemente, tenemos que crear aquí un nuevo context, pues vamos a actualizar AsientosID
            // cada vez que ejecutemos la función; esto evitará que se generen números duplicados si otros usuarios
            // graban asientos contables en forma simultanea a la ejecución de esta función ...

            dbContab_Contab_Entities context = new dbContab_Contab_Entities();

            errorMessage        = "";
            numeroAsientoContab = 0;

            short nMesCalendario = (short)fechaAsiento.Month;
            short nAnoCalendario = (short)fechaAsiento.Year;

            Compania companiaContab = context.Companias.Where(c => c.Numero == ciaContab).FirstOrDefault();

            if (companiaContab == null)
            {
                errorMessage = " ... error inesperado: no pudimos leer la compañía Contab asociada al " +
                               "asiento contable.";
                return(false);
            }

            if (companiaContab.ParametrosContab == null)
            {
                errorMessage = " ... error inesperado: no pudimos leer los parámetros de la compañía Contab " +
                               "en la tabla Parametros Contab.";
                return(false);
            }

            // lo primero que hacemos es determinar si el número se genera de acuerdo al tipo

            bool?bNumeracionSeparadaPorTipo = companiaContab.ParametrosContab.NumeracionAsientosSeparadaFlag;


            if (bNumeracionSeparadaPorTipo == null)
            {
                errorMessage = "Error: aparentemente, no se ha definido si la numeración de los asientos es o " +
                               "no separada de acuerdo a su tipo.<br /><br />" +
                               "Por favor abra la tabla 'Parámetros' en Contab y defina un valor para este item.";

                return(false);
            }

            if (!bNumeracionSeparadaPorTipo.Value)
            {
                // la númeración NO ES separada de acuerdo al tipo del asiento. La determinación del número
                // es más simple

                // leemos el número del asiento de la tabla AsientosId

                AsientosId MyAsientosId = context.AsientosIds.Where(a => a.Mes == nMesCalendario && a.Ano == nAnoCalendario && a.Cia == ciaContab).FirstOrDefault();

                if (MyAsientosId == null)
                {
                    // no existe un registro en la tabla para el mes, año y cia. Lo creamos y asumimos 1
                    // como número

                    numeroAsientoContab = 1;

                    AsientosId MyAsientosId_Nuevo = new AsientosId();

                    MyAsientosId_Nuevo.Mes    = Convert.ToInt16(nMesCalendario);
                    MyAsientosId_Nuevo.Ano    = Convert.ToInt16(nAnoCalendario);
                    MyAsientosId_Nuevo.Cia    = ciaContab;
                    MyAsientosId_Nuevo.Numero = 2;

                    context.AsientosIds.AddObject(MyAsientosId_Nuevo);
                }
                else
                {
                    numeroAsientoContab  = (short)MyAsientosId.Numero;
                    MyAsientosId.Numero += 1;
                }
            }
            else
            {
                // leemos el grupo de la tabla TiposDeAsiento
                // leemos el número del asiento de la tabla AsientosIdPorGrupo
                TiposDeAsiento tipoAsientoContable = (from t in context.TiposDeAsientoes
                                                      where t.Tipo == tipoAsiento
                                                      select t).FirstOrDefault();

                if (tipoAsientoContable.tGruposDeTiposDeAsiento == null)
                {
                    errorMessage = "Error: aparentemente, no se ha definido el Grupo que corresponde al tipo " +
                                   "de asientos que Ud. ha indicado para el asiento contable.<br /><br />" +
                                   "Como la numeración de los asientos contables es separada de acuerdo a su tipo " +
                                   "(según está ahora definido en el sistema Contab), cada tipo debe corresponder " +
                                   "a un grupo.<br /><br />" +
                                   "Por favor abra la tabla Tipos de Asiento en Contab y " +
                                   "defina un valor para este item.";

                    return(false);
                }

                AsientosIdPorGrupo MyAsientosIdPorGrupo = (from aidg in context.AsientosIdPorGrupoes
                                                           where aidg.Mes == nMesCalendario &&
                                                           aidg.Ano == nAnoCalendario &&
                                                           aidg.Grupo == tipoAsientoContable.tGruposDeTiposDeAsiento.Grupo &&
                                                           aidg.Cia == ciaContab
                                                           select aidg).SingleOrDefault();

                if (MyAsientosIdPorGrupo == null)
                {
                    // no existe un registro en la tabla para el mes, año y cia. Buscamos el número INICIAL
                    // en la tabla tGruposDeTiposDeAsiento

                    var MyGrupoTipoAsiento = (from g in context.tGruposDeTiposDeAsientoes
                                              where g.Grupo == tipoAsientoContable.tGruposDeTiposDeAsiento.Grupo
                                              select g).FirstOrDefault();

                    if (MyGrupoTipoAsiento == null || MyGrupoTipoAsiento.NumeroInicial == null)
                    {
                        errorMessage = "Error: aparentemente, no se ha definido el Grupo que corresponde al " +
                                       "tipo de asientos que Ud. ha indicado para el asiento contable.<br /><br />" +
                                       "Como la numeración de los asientos contables es separada de acuerdo a su tipo " +
                                       "(según está ahora definido en el sistema Contab), cada tipo debe " +
                                       "corresponder a un grupo.<br /><br />" +
                                       "Por favor abra la tabla Tipos de Asiento en Contab y " +
                                       "defina un valor para este item;<br /><br />" +
                                       "o, abra la tabla Grupos de Tipos de Asiento y defina un grupo y un " +
                                       "número de inicio para este grupo.";

                        return(false);
                    }

                    numeroAsientoContab = (short)MyGrupoTipoAsiento.NumeroInicial;

                    // nótese como usamos un nuevo context, para no interferir con la operación que llama este
                    // método (ie: Inserting)

                    AsientosIdPorGrupo MyAsientosIdPorGrupo_Nuevo = new AsientosIdPorGrupo();

                    MyAsientosIdPorGrupo_Nuevo.Mes    = Convert.ToInt16(nMesCalendario);
                    MyAsientosIdPorGrupo_Nuevo.Ano    = Convert.ToInt16(nAnoCalendario);
                    MyAsientosIdPorGrupo_Nuevo.Grupo  = tipoAsientoContable.tGruposDeTiposDeAsiento.Grupo;
                    MyAsientosIdPorGrupo_Nuevo.Cia    = ciaContab;
                    MyAsientosIdPorGrupo_Nuevo.Numero = MyGrupoTipoAsiento.NumeroInicial + 1;

                    context.AsientosIdPorGrupoes.AddObject(MyAsientosIdPorGrupo);
                }
                else
                {
                    numeroAsientoContab          = (short)MyAsientosIdPorGrupo.Numero.Value;
                    MyAsientosIdPorGrupo.Numero += 1;
                }
            }

            try
            {
                context.SaveChanges();
            }
            catch (Exception ex)
            {
                errorMessage = "Error: hemos obtenido un error al intentar efectuar una operación en la " +
                               "base de datos.<br /><br />" +
                               "El mensaje específico de error es: <br /><br />" + ex.Message;

                if (ex.InnerException != null)
                {
                    errorMessage += ex.InnerException.Message;
                }

                context = null;
                return(false);
            }

            context = null;
            return(true);
        }