Exemple #1
0
    public bool GrabarAsientoContable(_AsientoContable AsientoContable, out string sErrMessage,
                                      string sUserName)
    {
        sErrMessage = "";


        // Grabamos el asiento pasado a esta función a la tabla de asientos y partidas; nótese como
        // usamos un número negativo como número del asiento; en un proximo paso, el usuario asignará
        // números Contab a los asientos de la lista

        // intentamos registrar el asiento. Nótese que el asiento preparado para el asiento fue leído en
        // AsientoContable (arriba usando Linq)

        // lo primero que hacemos es obtener un ClaveUnica para el asiento y un número negativo

        int nNumeroNegativoAsientoContable = 0;

        if (!ObtenerNumeroNegativoAsiento(AsientoContable.Fecha, AsientoContable.CiaContab,
                                          out sErrMessage, out nNumeroNegativoAsientoContable))
        {
            return(false);
        }

        int nPKAsientoContable = 0;

        if (!ObtenerClaveUnicaAsiento(out sErrMessage, out nPKAsientoContable))
        {
            return(false);
        }

        AsientoContable.Numero           = nNumeroNegativoAsientoContable;
        AsientoContable.NumeroAutomatico = nPKAsientoContable;


        ContabSysNet_Web.ModelosDatos.Asiento MyAsientoContable = new ContabSysNet_Web.ModelosDatos.Asiento();

        MyAsientoContable.NumeroAutomatico = nPKAsientoContable;

        MyAsientoContable.Fecha     = AsientoContable.Fecha;
        MyAsientoContable.Numero    = Convert.ToInt16(nNumeroNegativoAsientoContable);
        MyAsientoContable.Mes       = Convert.ToByte(AsientoContable.Fecha.Month);
        MyAsientoContable.Ano       = Convert.ToInt16(AsientoContable.Fecha.Year);
        MyAsientoContable.MesFiscal = AsientoContable.MesFiscal.Value;
        MyAsientoContable.AnoFiscal = AsientoContable.AnoFiscal.Value;
        MyAsientoContable.Tipo      = AsientoContable.Tipo;

        if (AsientoContable.Descripcion.Length > 250)
        {
            MyAsientoContable.Descripcion = AsientoContable.Descripcion.ToString().Substring(0, 50);
        }
        else
        {
            MyAsientoContable.Descripcion = AsientoContable.Descripcion;
        }

        //MyAsientoContable.NumPartidas = 0;
        //MyAsientoContable.TotalDebe = 0;
        //MyAsientoContable.TotalHaber = 0;

        MyAsientoContable.Moneda         = AsientoContable.Moneda;
        MyAsientoContable.MonedaOriginal = AsientoContable.Moneda;
        MyAsientoContable.FactorDeCambio = AsientoContable.FactorCambio.Value;

        MyAsientoContable.ConvertirFlag = true;
        MyAsientoContable.ProvieneDe    = AsientoContable.ProvieneDe;
        MyAsientoContable.Ingreso       = DateTime.Now;
        MyAsientoContable.UltAct        = DateTime.Now;
        MyAsientoContable.Usuario       = sUserName;
        MyAsientoContable.Cia           = AsientoContable.CiaContab;

        _dbContab.Asientos.InsertOnSubmit(MyAsientoContable);

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

        // grabar partidas a dAsientos

        // ahora que registramos el asiento, registramos sus partidas

        ContabSysNet_Web.ModelosDatos.dAsiento        MyPartidaAsiento;
        List <ContabSysNet_Web.ModelosDatos.dAsiento> MyPartidaAsiento_List = new List <ContabSysNet_Web.ModelosDatos.dAsiento>();

        decimal nTotalDebe        = 0;
        decimal nTotalHaber       = 0;
        short   nNumeroPartida    = 0;
        int     nCantidadPartidas = AsientoContable.Partidas.Count();

        foreach (var wMyPartidaAsiento in AsientoContable.Partidas)
        {
            nNumeroPartida  += 10;
            MyPartidaAsiento = new ContabSysNet_Web.ModelosDatos.dAsiento();

            MyPartidaAsiento.NumeroAutomatico = nPKAsientoContable;

            //MyPartidaAsiento.Fecha = AsientoContable.Fecha;
            //MyPartidaAsiento.Numero = Convert.ToInt16(nNumeroNegativoAsientoContable);
            //MyPartidaAsiento.Mes = Convert.ToByte(AsientoContable.Fecha.Month);
            //MyPartidaAsiento.Ano = Convert.ToInt16(AsientoContable.Fecha.Year);
            //MyPartidaAsiento.MesFiscal = AsientoContable.MesFiscal.Value;
            //MyPartidaAsiento.AnoFiscal = AsientoContable.AnoFiscal.Value;

            MyPartidaAsiento.Partida = nNumeroPartida;
            //MyPartidaAsiento.Cuenta = wMyPartidaAsiento.CuentaContable;

            if (wMyPartidaAsiento.Referencia.Length > 20)
            {
                MyPartidaAsiento.Referencia = wMyPartidaAsiento.Referencia.ToString().Substring(0, 20);
            }
            else
            {
                MyPartidaAsiento.Referencia = wMyPartidaAsiento.Referencia;
            }

            if (wMyPartidaAsiento.Descripcion.Length > 50)
            {
                MyPartidaAsiento.Descripcion = wMyPartidaAsiento.Descripcion.ToString().Substring(0, 50);
            }
            else
            {
                MyPartidaAsiento.Descripcion = wMyPartidaAsiento.Descripcion;
            }

            MyPartidaAsiento.Debe  = wMyPartidaAsiento.Debe;
            MyPartidaAsiento.Haber = wMyPartidaAsiento.Haber;

            //MyPartidaAsiento.Moneda = AsientoContable.Moneda;
            //MyPartidaAsiento.MonedaOriginal = AsientoContable.Moneda;
            //MyPartidaAsiento.FactorDeCambio = AsientoContable.FactorCambio.Value;
            //MyPartidaAsiento.ConvertirFlag = true;

            //MyPartidaAsiento.Cia = AsientoContable.CiaContab;

            nTotalDebe  += wMyPartidaAsiento.Debe;
            nTotalHaber += wMyPartidaAsiento.Haber;

            MyPartidaAsiento_List.Add(MyPartidaAsiento);
        }

        _dbContab.dAsientos.InsertAllOnSubmit(MyPartidaAsiento_List);

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


        // actualizar items: NumPartidas, TotalDebe y TotalHaber en Asientos

        ContabSysNet_Web.ModelosDatos.Asiento AsientoContab = (from a in _dbContab.Asientos
                                                               where a.NumeroAutomatico == nPKAsientoContable
                                                               select a).FirstOrDefault();

        if (AsientoContab == null)
        {
            sErrMessage = "... se ha producido un error al intentar efectuar una operación en la base de datos. <br />" +
                          "No se encontró el asiento contable recién registrado para su modificación.";
            return(false);
        }

        //AsientoContab.NumPartidas = Convert.ToInt16(nCantidadPartidas);
        //AsientoContab.TotalDebe = nTotalDebe;
        //AsientoContab.TotalHaber = nTotalHaber;

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


        return(true);
    }
Exemple #2
0
    public bool AsignarNumeroContab(_AsientoContable AsientoContable, out string sErrMessage)
    {
        sErrMessage = "";


        // Determinamos un número Contab para el asiento contable pasado a esta función
        // y lo asignamos al asiento que fue grabado previamente (con un número negativo)

        if (AsientoContable.Numero > 0)
        {
            sErrMessage = "Aparentemente, ya Ud. asignó un número <i>Contab</i> a este comprobante, pues su número <b>no es</b> negativo.<br />" +
                          "Esta función debe ser ejecutada para obtener números <i>Contab</i> para comprobantes cuyo número es negativo.";
            return(false);
        }

        int nNumeroNegativoAnterior = AsientoContable.Numero.Value;

        int nNumeroAsientoContab = 0;

        if (!ObtenerNumeroContab(AsientoContable.Fecha, AsientoContable.CiaContab,
                                 AsientoContable.Tipo, out sErrMessage, out nNumeroAsientoContab))
        {
            return(false);
        }

        // ahora actualizamos TRES tablas con el número determinado: asientos, dasientos y tTemp...

        ContabSysNet_Web.ModelosDatos.Asiento MyAsientoContable = (from a in _dbContab.Asientos
                                                                   where a.Numero == AsientoContable.Numero &&
                                                                   a.Mes == AsientoContable.Fecha.Month &&
                                                                   a.Ano == AsientoContable.Fecha.Year &&
                                                                   a.Cia == AsientoContable.CiaContab
                                                                   select a).SingleOrDefault();



        if (MyAsientoContable == null)
        {
            sErrMessage = "Aparentemente, Ud. no ha registrado aún el asiento contable.<br />" +
                          "Construya y registre el asiento contable primero y luego regrese a esta función para intentar asignarle un número Contab.";
            return(false);
        }

        List <ContabSysNet_Web.ModelosDatos.dAsiento> MyAsientoContable_Partidas = (from a in _dbContab.dAsientos
                                                                                    where a.NumeroAutomatico == AsientoContable.NumeroAutomatico
                                                                                    select a).ToList();

        MyAsientoContable.Numero = Convert.ToInt16(nNumeroAsientoContab);

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

        AsientoContable.Numero = nNumeroAsientoContab;
        return(true);
    }
Exemple #3
0
    public bool ValidarAsientoContable(_AsientoContable AsientoContable, out string sErrMessage)
    {
        sErrMessage = "";

        // recibe un asiento contable completo e intenta validarlo; este método es usado, principalmente,
        // en la carga automática de asientos contables desde otras aplicaciones; la clase recibe un
        // asiento que puede inclumplir muchas validaciones, lo valida y regresa el error en un
        // string si existe

        // ---------------------------------------------------
        // validamos que exista la CiaContab
        int nRecCount = (from c in _dbContab.Compania_Contabs
                         where c.Numero == AsientoContable.CiaContab
                         select c).Count();

        if (nRecCount == 0)
        {
            sErrMessage = "La compañía indicada para el asiento contable no fue encontrada en Contab.";
            return(false);
        }

        // ---------------------------------------------------
        // validamos que exista la moneda

        nRecCount = (from m in _dbContab.Moneda_Contabs
                     where m.Moneda1 == AsientoContable.Moneda
                     select m).Count();

        if (nRecCount == 0)
        {
            sErrMessage = "La moneda indicada para el asiento contable no fue encontrada en Contab.";
            return(false);
        }

        // -----------------------------------------------------------------------------------
        // el método que sigue valida que el tipo de asiento exista y, además, si la numeración
        // es separada por tipo de asiento, que este mecanismo esté correctamente configurado en la
        // compañía para el tipo de asiento indicado

        if (!ValidarObtenerNumeroContab(AsientoContable.Fecha, AsientoContable.CiaContab, AsientoContable.Tipo, out sErrMessage))
        {
            return(false);
        }

        // asignamos un factor de cambio al asiento contable
        // leemos el factor de cambio más próximo a la fecha de la reposición
        decimal?nFactorCambio = (from fc in _dbContab.CambiosMonedas
                                 where fc.Fecha <= AsientoContable.Fecha
                                 orderby fc.Fecha descending
                                 select fc.Cambio).FirstOrDefault();

        if (!nFactorCambio.HasValue)
        {
            nFactorCambio = 0;
        }

        AsientoContable.FactorCambio = nFactorCambio;

        // determina mes y año fiscal
        Int16 nMesFiscal = 0;
        Int16 nAnoFiscal = 0;

        if (!DeterminarMesFiscal(AsientoContable.Fecha, AsientoContable.CiaContab, out sErrMessage, out nMesFiscal, out nAnoFiscal))
        {
            return(false);
        }

        AsientoContable.MesFiscal = nMesFiscal;
        AsientoContable.AnoFiscal = nAnoFiscal;

        // validar mes cerrado en Contab
        if (!ValidarUltimoMesCerradoContab(AsientoContable.Fecha, AsientoContable.CiaContab, out sErrMessage))
        {
            return(false);
        }

        // ahora validamos que las cuentas contables que vienen con cada asiento existan en Contab para
        // la compañía específica y sean del tipo detalle.

        foreach (_Partida MyPartida in AsientoContable.Partidas)
        {
            var sTotalDetalle = (from cc in _dbContab.CuentasContables
                                 where cc.Cia == AsientoContable.CiaContab &&
                                 cc.Cuenta == MyPartida.CuentaContable
                                 select cc.TotDet).FirstOrDefault();

            if (sTotalDetalle == null)
            {
                sErrMessage = "La cuenta contable " + MyPartida.CuentaContable +
                              " no existe en la tabla de cuentas contables para la compañía del asiento.";
                return(false);
            }

            if (sTotalDetalle != "D")
            {
                sErrMessage = "Aunque la cuenta contable " + MyPartida.CuentaContable +
                              " existe en la tabla de cuentas contables para la compañía del asiento, " +
                              "no es del tipo Detalle<br />" +
                              "Las cuentas contables que se asocien a los asientos, deben ser del tipo Detalle.";
                return(false);
            }
        }

        return(true);
    }