/// <summary> /// Crear y abrir las conexiones a las dos base de datos. /// Ademas de agregar la transacción correspondiente a cada /// base de datos. /// </summary> public void crearConexiones() { // Conexion CTI _oSQL.CrearConexion(); _oSQL.AbrirConexion(); _oSQL.CrearTransaccion(); }
public void agregarPoliza(DataTable pdtTbl_Traspasos, string psTipoTraspaso, DataTable pdtTbl_VMX_IVATRASTEMP) { Microsoft_SQL_Server objSql = new Microsoft_SQL_Server(Global.Servidor, Global.BaseDatos, Global.Usuario, Global.Password); string sInsertGJ = string.Empty; string sInsertGJ_CURR = string.Empty; StringBuilder sGJ_DIST = new StringBuilder(); StringBuilder sGJ_LINE = new StringBuilder(); StringBuilder sVMX_CONTOLPOLIZA_LINE = new StringBuilder(); AdminCurrencyTracking oCurrencyTracking = new AdminCurrencyTracking(); _dtVMX_IVATRASTEMP = pdtTbl_Traspasos; _dtDetalla_IVA = pdtTbl_VMX_IVATRASTEMP; string query = string.Empty; try { _lstCurrencyTracking = oCurrencyTracking.getCurrencyTracking(_GJ_Date); objSql.CrearConexion(); objSql.AbrirConexion(); objSql.CrearTransaccion(); // General Journal sInsertGJ = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.GeneralJournal"); sInsertGJ = string.Format(sInsertGJ, _ID, _GJ_Date, _Description, _PostingDate, _Total_DR_Amount, _Total_CR_Amount, _Sell_Rate, _Buy_Rate, _EntityID, _Create_Date, _UserID, _CurrencyID, _Post_All_Tracking, _Post_As_Native, _User_Exch_Rate, _Posting_Candidate); // Insertar encabezado de Poliza objSql.EjecutarDML(sInsertGJ); // Almacenar el tipo de moneda y el monto de la poliza. sInsertGJ_CURR = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.Currency"); sInsertGJ_CURR = string.Format(sInsertGJ_CURR, _ID, _CurrencyID, _Total_CR_Amount, _Sell_Rate, _Buy_Rate); if (_lstCurrencyTracking.Count > 0) { string currencyTracking = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.Currency"); foreach (MonedaRastreo item in _lstCurrencyTracking) { sInsertGJ_CURR += string.Format(currencyTracking, _ID, item.ID, Math.Round((_Total_CR_Amount / item.SELL_RATE), 2), item.SELL_RATE, item.BUY_RATE); } } objSql.EjecutarDML(sInsertGJ_CURR); int iDistNo = 0; int iLineNo = 1; double dperdida = 0; double dganancia = 0; string sCtaGanancia = string.Empty; string sCtaPerdida = string.Empty; foreach (DataRow drRow_Traspasos in pdtTbl_Traspasos.Rows) { string DIST_NO = "1"; string NATIVE_AMOUNT = "0"; string POSTING_STATUS = "U"; string NATIVE = "Y"; string sCta_Origen = drRow_Traspasos["CUENTA_ORIGEN"].ToString(); string sCta_Destino = drRow_Traspasos["CUENTA_DESTINO"].ToString(); string sMontoTraspaso = drRow_Traspasos["MONTO"].ToString(); double dIVA_Factura = double.Parse(drRow_Traspasos["MONTO"].ToString()); double dIVA_Deposito = double.Parse(drRow_Traspasos["MONTO_IVA_DEPOSITO"].ToString()); double dGananciaPerdida = 0; string str_sql = string.Empty; // ganancia perdida DataRow[] result = pdtTbl_VMX_IVATRASTEMP.Select("VAT_GL_ACCT_ID = '" + sCta_Origen + "' AND TRASLADO = '" + sCta_Destino + "'"); foreach (DataRow item in pdtTbl_VMX_IVATRASTEMP.Rows) { dGananciaPerdida = double.Parse(item["PERDIDA_GANANCIA"].ToString()); if (item["VAT_GL_ACCT_ID"].ToString().Equals(sCta_Origen) && item["TRASLADO"].ToString().Equals(sCta_Destino) && dGananciaPerdida < 0) { dperdida += Math.Abs(dGananciaPerdida); sCtaPerdida = item["CUENTA_PER_GANANCIA"].ToString(); } else { dganancia += dGananciaPerdida; sCtaGanancia = item["CUENTA_PER_GANANCIA"].ToString(); } } // Encacbezado de poliza para control de CTECH query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.ControlCTech"); query = string.Format(query, _ID, sCta_Destino, sMontoTraspaso, _PostingDate, _Create_Date, _Create_Date, _UserID, psTipoTraspaso); objSql.EjecutarDML(query); // En caso de que el monto sea cero no se genera // ningun movimiento contable. if (dIVA_Factura > 0) { // Detalle de los movimientos de la poliza. // Nota:En caso de tener moneda de rastreo generar un registro automaticamente para esta moneda // CXC.- Cuentas por Cobrar // Verificar el caso en que la cuenta origen sea diferente a la cuenta destino if (psTipoTraspaso == "CXC") { // DR.- Debito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo, dIVA_Factura, "DR", sCta_Origen, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, _CurrencyID, NATIVE); sGJ_DIST.AppendLine(query); iDistNo++; // CR.- Credito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo.ToString(), dIVA_Deposito, "CR", sCta_Destino, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, _CurrencyID, NATIVE); sGJ_DIST.AppendLine(query); // Moneda rastreable foreach (MonedaRastreo moneda in _lstCurrencyTracking) { iDistNo++; // DR.- Debito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo, Math.Round((double.Parse(sMontoTraspaso) / moneda.SELL_RATE), 2), "DR", sCta_Destino, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, moneda.ID, "N"); sGJ_DIST.AppendLine(query); iDistNo++; // CR.- Credito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo, Math.Round((double.Parse(sMontoTraspaso) / moneda.SELL_RATE), 2), "CR", sCta_Destino, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, moneda.ID, "N"); sGJ_DIST.AppendLine(query); } } else { // CR.- Credito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo, sMontoTraspaso, "CR", sCta_Origen, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, _CurrencyID, NATIVE); sGJ_DIST.AppendLine(query); iDistNo++; // DR.- Debito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo, sMontoTraspaso, "DR", sCta_Destino, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, _CurrencyID, NATIVE); sGJ_DIST.AppendLine(query); // Moneda rastreable foreach (MonedaRastreo moneda in _lstCurrencyTracking) { iDistNo++; // CR.- Credito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo, Math.Round((double.Parse(sMontoTraspaso) / moneda.SELL_RATE), 2), "CR", sCta_Origen, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, moneda.ID, "N"); sGJ_DIST.AppendLine(query); iDistNo++; // DR.- Debito query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxC"); query = string.Format(query, _ID, DIST_NO, iDistNo, Math.Round((double.Parse(sMontoTraspaso) / moneda.SELL_RATE), 2), "DR", sCta_Destino, NATIVE_AMOUNT, _PostingDate, POSTING_STATUS, _Create_Date, _EntityID, moneda.ID, "N"); sGJ_DIST.AppendLine(query); } } iDistNo++; // Detalle de movimientos de la poliza // CXP.- Cuentas por Pagar if (psTipoTraspaso == "CXP") { query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxP"); query = string.Format(query, _ID, iLineNo, sCta_Destino, sMontoTraspaso, 0); sGJ_LINE.AppendLine(query); iLineNo++; query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxP"); query = string.Format(query, _ID, iLineNo, sCta_Origen, 0, sMontoTraspaso); sGJ_LINE.AppendLine(query); } else { query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxP"); query = string.Format(query, _ID, iLineNo, sCta_Origen, sMontoTraspaso, 0); sGJ_LINE.AppendLine(query); iLineNo++; query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CxP"); query = string.Format(query, _ID, iLineNo, sCta_Destino, 0, sMontoTraspaso); sGJ_LINE.AppendLine(query); } iLineNo++; } foreach (DataRow dr_i in pdtTbl_VMX_IVATRASTEMP.Rows) { string BANK_ACCOUNT_ID = dr_i["BANK_ACCOUNT_ID"].ToString(); string CONTROL_NO = dr_i["CONTROL_NO"].ToString(); string VAT_AMOUNT = "0"; string SELL_RATE = dr_i["TC_FACTURA"].ToString(); string MONTO = dr_i["IVA_MXN_TRASLADAR_FACT"].ToString(); string CUENTA_ORIGEN = dr_i["VAT_GL_ACCT_ID"].ToString(); string DESCRIPCION = dr_i["DESCRIPCION"].ToString(); string CUENTA_DESTINO = dr_i["TRASLADO"].ToString(); string COD_CLIENTE = string.Empty; if (sCta_Destino == CUENTA_DESTINO && sCta_Origen == CUENTA_ORIGEN) { // CXC - CASH_RECEIPT if (psTipoTraspaso == "CXC") { COD_CLIENTE = dr_i["Cliente"].ToString(); query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CashReceiptCxC"); query = string.Format(query, _ID, BANK_ACCOUNT_ID, CONTROL_NO, VAT_AMOUNT, SELL_RATE, MONTO, CUENTA_ORIGEN, DESCRIPCION, CUENTA_DESTINO, CUENTA_DESTINO, psTipoTraspaso, COD_CLIENTE); sVMX_CONTOLPOLIZA_LINE.AppendLine(query); } else { // CXP - CASH_DISBURSEMENT query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.CashDisbursementCxP"); query = string.Format(query, _ID, BANK_ACCOUNT_ID, CONTROL_NO, VAT_AMOUNT, SELL_RATE, MONTO, CUENTA_ORIGEN, DESCRIPCION, CUENTA_DESTINO, CUENTA_DESTINO, psTipoTraspaso); sVMX_CONTOLPOLIZA_LINE.AppendLine(query); } } } } // Guardar todos los traspasos en GJ_DIST objSql.EjecutarDML(sGJ_DIST.ToString()); // Guarddar todo los traspasos en GJ_LINE objSql.EjecutarDML(sGJ_LINE.ToString()); // Guardar los traspasos en tabla de CTECH objSql.EjecutarDML(sVMX_CONTOLPOLIZA_LINE.ToString()); // Actualizar el nuevo numero de poliza query = MapeoQuerySql.ObtenerPorId("PolizaContable.agregarPoliza.ActualizaNumeroPoliza"); query = string.Format(query, ((int.Parse(_ID) + 1)).ToString()); objSql.EjecutarDML(query); objSql.TransCommit(); } catch (Exception ex) { objSql.TransRollback(); throw new Exception(string.Format("Ocurrió un error al generar la póliza.\nDetalle: {0}.", ex.Message)); } finally { objSql.DestruirTransaccion(); objSql.CerrarConexion(); objSql.DestruirConexion(); } }