📄 trxres.cpp
字号:
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 + -