示例#1
0
 /// <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();
 }
示例#2
0
        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();
            }
        }