⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trxres.cpp

📁 ISO 8583 with c++ for financial transaction standard
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        if(_B24_CURRENCY_ARGENTINA_ == antoi(isoFields.field49.chData,3) 
            && 
            bApplyChangeRate == is_true)
        {
            /* En funcion del tipo de cuenta, establecer la tasa de cambio */
            if((_B24_SAVINGS_ACCOUNT_USD_    == iFromAccType ||            
                _B24_CHECKINGS_ACCOUNT_USD_  == iFromAccType ) &&
                antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_C,8,3) >0.0f)
            {
                dblCnvRate = antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_C,8,3);
                isoFields.field127.stATM.stATM_Dl_Resp.chCamb_Aplic='2';
                /* copio el tipo de cambio aplicado */
                if(szExchangeRate)
                    sprintf(szExchangeRate,"%8.3f",dblCnvRate);
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount * dblCnvRate;
            }
            else 
            if((_B24_SAVINGS_ACCOUNT_USD_    == iToAccType ||            
                _B24_CHECKINGS_ACCOUNT_USD_  == iToAccType )    &&
                antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_V,8,3) >0.0f)
            {
                dblCnvRate = antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_V,8,3);
                isoFields.field127.stATM.stATM_Dl_Resp.chCamb_Aplic='1';
                /* copio el tipo de cambio aplicado */
                if(szExchangeRate)
                    sprintf(szExchangeRate,"%8.3f",dblCnvRate);
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount / dblCnvRate;
            }
            else
            {
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount * dblCnvRate;        
                else
                    dblAmmountCnv = dblAmmount;
            }
        }
        else if(_B24_CURRENCY_USA_ == antoi(isoFields.field49.chData,3) 
                && 
                bApplyChangeRate == is_true)
        {        
            /* En funcion del tipo de cuenta, establecer la tasa de cambio */
            if((_B24_SAVINGS_ACCOUNT_         == iFromAccType ||            
                _B24_CHECKINGS_ACCOUNT_       == iFromAccType )    &&
                antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_V,8,3) >0.0f)
            {
                dblCnvRate = antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_V,8,3);
                isoFields.field127.stATM.stATM_Dl_Resp.chCamb_Aplic='1';
                /* copio el tipo de cambio aplicado */
                if(szExchangeRate)
                    sprintf(szExchangeRate,"%8.3f",dblCnvRate);
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount / dblCnvRate;

            }
            else if((_B24_SAVINGS_ACCOUNT_    == iToAccType ||            
                _B24_CHECKINGS_ACCOUNT_        == iToAccType ) &&
                antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_C,8,3) >0.0f)
            {
                dblCnvRate = antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_C,8,3);
                isoFields.field127.stATM.stATM_Dl_Resp.chCamb_Aplic='2';
                /* copio el tipo de cambio aplicado */
                if(szExchangeRate)
                    sprintf(szExchangeRate,"%8.3f",dblCnvRate);
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount * dblCnvRate;

            }
            else
            {
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount / dblCnvRate;
                else
                    dblAmmountCnv = dblAmmount;
            };
        }
        else if((_B24_CURRENCY_BRAZIL_ == antoi(isoFields.field49.chData,3) ||
                _B24_CURRENCY_URUGUAY_ == antoi(isoFields.field49.chData,3)) && 
                bApplyChangeRate == is_true)
        {        
            /* En funcion del tipo de cuenta, establecer la tasa de cambio */
            if((_B24_SAVINGS_ACCOUNT_         == iFromAccType ||            
                _B24_CHECKINGS_ACCOUNT_       == iFromAccType )    &&
                antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_1,8,3) >0.0f)
            {
                dblCnvRate = antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_1,8,3);
                isoFields.field127.stATM.stATM_Dl_Resp.chCamb_Aplic='3';
                /* copio el tipo de cambio aplicado */
                if(szExchangeRate)
                    sprintf(szExchangeRate,"%8.3f",dblCnvRate);
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount / dblCnvRate;

            }
            else if((_B24_SAVINGS_ACCOUNT_    == iToAccType ||            
                _B24_CHECKINGS_ACCOUNT_        == iToAccType ) &&
                antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_2,8,3) >0.0f)
            {
                dblCnvRate = antof(isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_2,8,3);
                isoFields.field127.stATM.stATM_Dl_Resp.chCamb_Aplic='4';
                /* copio el tipo de cambio aplicado */
                if(szExchangeRate)
                    sprintf(szExchangeRate,"%8.3f",dblCnvRate);
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount * dblCnvRate;

            }
            else
            {
                /* aplicacion del tipo de cambio SI CORRESPONDIERA */
                if(dblCnvRate != 0.0f && dblCnvRate != 1.0f)
                    dblAmmountCnv = dblAmmount / dblCnvRate;

                else
                    dblAmmountCnv = dblAmmount;
            };
        };
        /* El monto de la transaccion ya viene expresada en la moneda de la cuenta ORIGEN */
        /* a menos que sea un DEPOSITO. Por lo que no es necesaria la conversion con tasa */
        /* de cambio, sino solo a titulo verificador, EXCEPTO para DEPOSITOS.             */
        /* Conversion a ASCII sin necesidad de alineamiento */
        if(dblAmmountCnv == dblAmmount)        
            /* monto convertido es identico a monto de transaccion */
            sprintf( szNew, "%.2f", dblAmmountCnv ); 
        /* excepto para depositos en efectivo */
        else if ((dblAmmountCnv != dblAmmount)          &&
                 (0 == iFromAccType )                   &&
                 (_B24_SAVINGS_ACCOUNT_   == iToAccType ||            
                  _B24_CHECKINGS_ACCOUNT_ == iToAccType ))
        {
            /* monto convertido con tipo de cambio, para DEPOSITOS*/
            if(dblAmmountCnv != 0.0f)
                sprintf( szNew, "%.2f", dblAmmountCnv ); 
            else
                sprintf( szNew, "%.2f", dblAmmount ); 
        }
        else if (dblAmmountCnv != dblAmmount)
            sprintf( szNew, "%.2f", dblAmmount ); /* monto original de trx */
        /* retornar conversion con pto. decimal incluido */
        return (shLen);
    }
    /******************************************************************/
    else
    {
        /* copia local y longitud de la cadena que representa al MONTO TRX*/    
        strcpy(szNew, szAmmount );        
        /* longitud */
        shLen = strlen(szNew);        
    };
    /******************************************************************/

    /* de lo contrario, se convierte de uso interno a formato ISO con 2 decimales */
    /* ubicacion del pto. millar */
    for(pszDecPoint = strchr(szNew, (int)chMilePoint),
        shQPoints = 0;
        pszDecPoint != NULL ;                
        pszDecPoint++,
        pszDecPoint = strchr(pszDecPoint, (int)chMilePoint),
        shLen = strlen(szNew) )
        {
            memmove( pszDecPoint,pszDecPoint+1, shLen - (pszDecPoint - szNew) - 1);
            shQPoints++;
        }; /* end for */
    szNew[shLen - shQPoints] = 0x00;
    shLen = strlen(szNew);

    /* conversion a binario y verificacion del tipo de cambio si corresponde */
    dblAmmount = atof( szNew );
    /* reconversion a ASCII con 2 decimales y N digitos representativos */
    if(shAlignWidth > 0)
        /* alineamiento + un espacio para contempletar el pto. decimal que luego desaparece */
        sprintf( szNew, "%0*.2f", shAlignWidth + 1, dblAmmount );
    else
        /* sin necesidad de alineamiento....*/
        sprintf( szNew, "%.2f", dblAmmount );
    /* buscar el pto. decimal y eliminarlo (formato ISO pto. implicito 2 decimales )*/
    pszDecPoint = strchr(szNew, (int)'.');
    if(pszDecPoint)
    {
        shLen = strlen(szNew);
        memmove( pszDecPoint,pszDecPoint+1, shLen - (pszDecPoint - szNew) - 1);
        szNew[shLen - 1] = 0x00;
        shLen = strlen(szNew);
    };    
    /* retornar longitud de nuevo string */
    return shLen;
        
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Traduce el codigo de transaccion de ISO hacia Base24 interno
char *TrxBaseResolution::TranslateTranCode_ISO_B24(char szTranCode[])
{
    // Casteo a estructura
    PROCCDE_ISO    *pProcCde = (PROCCDE_ISO *)szTranCode;
    // Processing Code, From Acct, To Acct.
    SHORT       shTran    = 0, 
                shFromAcc = 0, 
                shToAcc   = 0;
    // Variable de soporte, estatica y local, ya que se retorna a la salida de la funcion
    static PROCCDE_ISO    stB24TranCode;

    // Copia estatica local
    stB24TranCode.uProcCde    = pProcCde->uProcCde ;
    stB24TranCode.chFiller[0] = 0x00; // Null-ending string
    // Inicio de conversion de codigos ISO8583 a internos de Base24
    // RED LINK se aleja del estandar al incorporar TRAN-CDE alfanumericos. Atencion.
    // Ambos digitos numericos ?
    if( isdigit(pProcCde->uProcCde.stTranCde.chTran_Cde[0]) &&
        isdigit(pProcCde->uProcCde.stTranCde.chTran_Cde[1]) )
        shTran = antoi(pProcCde->uProcCde.stTranCde.chTran_Cde,2);
    // Solo el primer digito es numerico ?
    else if (isdigit(pProcCde->uProcCde.stTranCde.chTran_Cde[0]) &&
             !isdigit(pProcCde->uProcCde.stTranCde.chTran_Cde[1]) )
        shTran = -1; // Un valor negativo es un valor que NO SE CONVIERTE, se traslada identico    
    // En todo otro caso
    else                

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -