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); }
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); }