public void generate() { AdminCurrencyTracking oCurrencyTracking = new AdminCurrencyTracking(); AdminGeneralJournal oAdminGJ = new AdminGeneralJournal(); AdminGJ oAdmGJ = new AdminGJ(); GJ oGJ; List <GJ_CURR> lstGJ_CURR = new List <GJ_CURR>(); List <GJ_DIST> lstGJ_DIST = new List <GJ_DIST>(); List <GJ_LINE> lstGJ_LINE = new List <GJ_LINE>(); List <VMXCONTROLPOLIZA> lstVMXPoliza = new List <VMXCONTROLPOLIZA>(); List <VMX_CONTOLPOLIZA_LINE> lstVMXPoliza_line = new List <VMX_CONTOLPOLIZA_LINE>(); try { oAdminGJ.crearConexiones(); _lstCurrencyTracking = oCurrencyTracking.getCurrencyTracking(GJ_DATE); // a) GJ - General Journal oGJ = getGJ(); oAdminGJ.createGJ(oGJ); // b) GJ_CURR - General Journal Currecncy lstGJ_CURR = getGJ_CURR(); foreach (GJ_CURR oGJ_CURR in lstGJ_CURR) { oAdminGJ.createGJ_CURR(oGJ_CURR); } // c) GJ_DIST - General Journal Distribution lstGJ_DIST = getListGJ_DIST(); foreach (GJ_DIST oGJ_DIST in lstGJ_DIST) { oAdminGJ.createGJ_DIST(oGJ_DIST); } // d) GJ_LINE - General Journal Line lstGJ_LINE = getListGJ_LINE(); foreach (GJ_LINE oGJ_LINE in lstGJ_LINE) { oAdminGJ.createGJ_LINE(oGJ_LINE); } // e) VMXCONTROLPOLIZA lstVMXPoliza = getListVMXCONTROLPOLIZA(); foreach (VMXCONTROLPOLIZA oVMXPoliza in lstVMXPoliza) { oAdminGJ.createVMXCONTROLPOLIZA(oVMXPoliza); } // f) VMX_CONTOLPOLIZA_LINE lstVMXPoliza_line = getListVMX_CONTOLPOLIZA_LINE_CXC_TCPago(); foreach (VMX_CONTOLPOLIZA_LINE oVMXPoliza in lstVMXPoliza_line) { oAdminGJ.createVMX_CONTOLPOLIZA_LINE_CXC(oVMXPoliza); } // Actualizar el nuevo número de póliza oAdmGJ.setNext_GJ_ID(); oAdminGJ.commitTransaction(); } catch (Exception ex) { oAdminGJ.rollBackTransaction(); throw new Exception("Error al generar Poliza Contable. Detalle: " + ex.Message); } finally { oAdminGJ.cerrarConexiones(); } }
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(); } }