📄 atmtrx.cpp
字号:
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chCASH_AVAIL,chCASH_AVAIL); // saldo disponible
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chMIN_PAYMENT,chMIN_PAYMENT); // pago minimo
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chPAYMENT_DAT,chPAYMENT_DAT); // dia de pago
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chINTEREST_RATE,chINTEREST_RATE); // tasa de interes
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chOWE_DOLAR,chOWE_DOLAR); // deuda en dolares
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chMIN_PAYMENT_DOLAR,chMIN_PAYMENT_DOLAR); // pago minimo en dolares
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chPURCHASE_DOLAR,chPURCHASE_DOLAR); // compra en dolares
COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chCASH_FEE,chCASH_FEE); // arancel de usuario
isoFields.field54.stB24_0210_Def_Data.chFILLER[0] = 0x00;
// Insertar el campo #54 solo si no existe
if(isoMsg.IsValidField( 54 ))
isoMsg.DeleteField( 54 );
// Respuesta parametrica en campo #54
wRspCdeLen=min(sizeof(isoFields.field54),strlen(isoFields.field54.chData));
isoMsg.InsertField(54, &wRspCdeLen, (PBYTE)&isoFields.field54, wRspCdeLen );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #55 de rta., PRIRSRVD1_ISO
void TrxResATM::FormatField55_PRIRSRVD1_ISO(
char *chTrack2,
char *chCA,
char *chFiid_1,
char *chTyp_1,
char *chAcct_num_1,
char *chFiid_2,
char *chTyp_2,
char *chAcct_num_2
)
{
WORD wRspCdeLen=0;
// Formatear campo ISO #55 de rta., PRIRSRVD1_ISO, solamente para interbancarias.
if( !( isoMsg.IsATMTransferInterbank() || isoMsg.IsATMAccountVerification() ) )
{
isoMsg.DeleteField ( 55 );
return ;
};
// Formatear campo ISO #55 de rta., PRIRSRVD1_ISO
// No se blanquea inicialmente porque ya viene informado por el switch financiero
if( chTrack2 != NULL &&
chCA != NULL &&
chFiid_1 != NULL &&
chTyp_1 != NULL &&
chAcct_num_1 != NULL &&
chFiid_2 != NULL &&
chTyp_2 != NULL &&
chAcct_num_2 != NULL )
{
COPYVALUE(isoFields.field55.stInterbancarias.chTrack2,chTrack2);
COPYVALUE(isoFields.field55.stInterbancarias.chCA, chCA);
COPYVALUE(isoFields.field55.stInterbancarias.stFrom_Acct.chFiid, chFiid_1);
COPYVALUE(isoFields.field55.stInterbancarias.stFrom_Acct.chTyp, chTyp_1);
COPYVALUE(isoFields.field55.stInterbancarias.stFrom_Acct.chAcct_num, chAcct_num_1);
COPYVALUE(isoFields.field55.stInterbancarias.stTo_Acct.chFiid, chFiid_2);
COPYVALUE(isoFields.field55.stInterbancarias.stTo_Acct.chTyp, chTyp_2 );
COPYVALUE(isoFields.field55.stInterbancarias.stTo_Acct.chAcct_num, chAcct_num_2);
COPYVALUE(isoFields.field55.stInterbancarias.filler, "--------------------");
// Respuesta parametrica en campo #55
// Insertar el campo #55 solo si no existe
if(isoMsg.IsValidField( 55 ))
isoMsg.DeleteField( 55 );
wRspCdeLen=min(sizeof(isoFields.field55),strlen(isoFields.field55.chData));
isoMsg.InsertField(55, &wRspCdeLen, (PBYTE)&isoFields.field55, wRspCdeLen );
};
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #15 y #61 que POR ERRORES DEL PREHOMO DE LINK, a veces no vienen en el 0200
void TrxResATM::FormatFields15_61( void )
{
WORD wRspCdeLen=0;
if(isoMsg.IsValidField( 15 ) && isoMsg.IsValidField( 61 ))
return;
// Formatear campo ISO #15 de rta. SETTLEMENT-DATE como POSTING DATE, #17
COPYVALUEEXACT(isoFields.field15.chMMDD , isoFields.field17.chMMDD );
// Respuesta parametrica en campo #15
wRspCdeLen=sizeof(isoFields.field15);
isoMsg.InsertField(15, &wRspCdeLen, (PBYTE)&isoFields.field15, wRspCdeLen );
// Formatear campo ISO #61 de rta. , como TERM #60 y valores por defecto
COPYVALUE(isoFields.field61.stATM_Data.chCrdFIID , isoFields.field60.stATMTerm.chTermFIID);
COPYVALUE(isoFields.field61.stATM_Data.chCrdLNet , isoFields.field60.stATMTerm.chTermLNet);
COPYVALUE(isoFields.field61.stATM_Data.chSaveAcctType, "0000");
isoFields.field61.stATM_Data.chAutorizer = 'P';
isoFields.field61.stATM_Data.chOrigTranCde[0] = 0x00;
// Respuesta parametrica en campo #61
wRspCdeLen=min(sizeof(isoFields.field61),strlen(isoFields.field61.chData));
isoMsg.InsertField(61, &wRspCdeLen, (PBYTE)&isoFields.field61, wRspCdeLen );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #44 de rta., PRIRSRVD1_ISO
void TrxResATM::FormatField44_RESP_DATA( char *chOPEN_AMMOUNT, char *chDAILY_LIMIT )
{
// Como RED LINK mantiene el disponible, informamos siempre el SALDO CONTABLE,
// que es el mayor de los dos montos. Se indica con este FLAG.
const boolean_t bNetworkDailyLimit = is_true;
WORD wRspCdeLen=0;
// Formatear campo ISO #44 de rta., RESP_DATA
memset(&isoFields.field44,' ',sizeof(isoFields.field44));
// Cuantos montos se informan ?
if( chOPEN_AMMOUNT && chDAILY_LIMIT)
isoFields.field44.stAvail.chType = '2'; /* '0','1','2','3','4' o ' ' *** forzado LINK = 2 */
else if( chOPEN_AMMOUNT || chDAILY_LIMIT)
isoFields.field44.stAvail.chType = '1'; /* '0','1','2','3','4' o ' ' *** forzado LINK = 2 */
else
isoFields.field44.stAvail.chType = '0'; /* '0','1','2','3','4' o ' ' *** forzado LINK = 2 */
// Como RED LINK mantiene el disponible, informamos siempre el SALDO CONTABLE,
// que es el mayor de los dos montos.
if( chOPEN_AMMOUNT && chDAILY_LIMIT &&
strcmp(chOPEN_AMMOUNT,chDAILY_LIMIT)>0 && bNetworkDailyLimit)
{
COPYVALUE(isoFields.field44.stAvail.chOpenAmmount ,chOPEN_AMMOUNT); /* 9(10).99 : saldo apertura */
COPYVALUE(isoFields.field44.stAvail.chAvailAmmount,chOPEN_AMMOUNT); /* 9(10).99 : disponible */
}
else if( chOPEN_AMMOUNT && chDAILY_LIMIT &&
strcmp(chOPEN_AMMOUNT,chDAILY_LIMIT)<0 && bNetworkDailyLimit)
{
COPYVALUE(isoFields.field44.stAvail.chOpenAmmount ,chDAILY_LIMIT); /* 9(10).99 : saldo apertura */
COPYVALUE(isoFields.field44.stAvail.chAvailAmmount,chDAILY_LIMIT); /* 9(10).99 : disponible */
}
else if( NULL == chOPEN_AMMOUNT && NULL == chDAILY_LIMIT )
{
isoFields.field44.stAvail.chType = '2'; /* '0','1','2','3','4' o ' ' *** forzado LINK = 2 */
SETVALUEZEROE(isoFields.field44.stAvail.chOpenAmmount ); /* 9(10).99 : saldo apertura */
SETVALUEZEROE(isoFields.field44.stAvail.chAvailAmmount); /* 9(10).99 : disponible */
}
else // Todo otro caso...
{
COPYVALUE(isoFields.field44.stAvail.chOpenAmmount ,chOPEN_AMMOUNT); /* 9(10).99 : saldo apertura */
COPYVALUE(isoFields.field44.stAvail.chAvailAmmount,chDAILY_LIMIT); /* 9(10).99 : disponible */
};
// Respuesta parametrica en campo #44
// Insertar el campo #44 solo si no existe
if(isoMsg.IsValidField( 44 ))
isoMsg.DeleteField( 44 );
wRspCdeLen=min(sizeof(isoFields.field44),strlen(isoFields.field44.chData));
isoMsg.InsertField(44, &wRspCdeLen, (PBYTE)&isoFields.field44, wRspCdeLen );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #122 de rta., SECNDRY_RSRVD3_PRVT
void TrxResATM::FormatField122_SECNDRY_RSRVD3_PRVT( void )
{
WORD wRspCdeLen=0;
// Insertar el campo #122 solo si no existe
if(isoMsg.IsValidField( 122 ))
return;
// Formatear campo ISO #122 de rta., SECNDRY_RSRVD3_PRVT
memset(&isoFields.field122,' ',sizeof(isoFields.field122));
COPYVALUE(isoFields.field122.chCardIssuerIdentCode, "00000000000");
// Respuesta parametrica en campo #122
wRspCdeLen=min(sizeof(isoFields.field122),strlen(isoFields.field122.chCardIssuerIdentCode));
isoMsg.InsertField(122, &wRspCdeLen, (PBYTE)&isoFields.field122, wRspCdeLen );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #123 de rta., SECNDRY_RSRVD4_PRVT
void TrxResATM::FormatField123_SECNDRY_RSRVD4_PRVT( void )
{
WORD wRspCdeLen=0;
// Insertar el campo #123 solo si no existe
if(isoMsg.IsValidField( 123 ))
return;
// Formatear campo ISO #123 de rta., SECNDRY_RSRVD4_PRVT, "DEPOSIT AMMOUNT"
memset(&isoFields.field123,' ',sizeof(isoFields.field123));
COPYVALUE(isoFields.field123.chDepositCreditAmmount, "000000000000");
// Respuesta parametrica en campo #123
wRspCdeLen=min(sizeof(isoFields.field123),strlen(isoFields.field123.chDepositCreditAmmount));
isoMsg.InsertField(123, &wRspCdeLen, (PBYTE)&isoFields.field123, wRspCdeLen );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #127 de rta., SECNDRY_RSRVD7_PRVT
void TrxResATM::FormatField127_SECNDRY_RSRVD8_PRVT( void )
{
WORD wRspCdeLen=0;
// Actualizar o insertar segun requiera RED LINK
if(isoMsg.IsValidField( 127 ))
{
// Actualizar los tipos de cambio segun informa el switch financiero
// Copiar la cotizacion informada hacia la cotizacion aplicada
FIELD127 resp127;
// Copia local de trabajo
resp127.stATM.stATM_Dl_Resp = isoFields.field127.stATM.stATM_Dl_Resp;
// Copiar las cotizaciones del requerimiento hacia las cotizaciones de respuesta
resp127.stATM.stATM_Dl_Resp.chCamb_Aplic = '0'; /* FORZADO LINK */
COPYVALUEEXACT(resp127.stATM.stATM_Dl_Resp.chCambio_C,
isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_C);
COPYVALUEEXACT(resp127.stATM.stATM_Dl_Resp.chCambio_V,
isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_V);
COPYVALUEEXACT(resp127.stATM.stATM_Dl_Resp.chCambio_1,
isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_1);
COPYVALUEEXACT(resp127.stATM.stATM_Dl_Resp.chCambio_2,
isoFields.field127.stATM.stATM_Dl_Rqst.chCambio_2);
COPYVALUE(resp127.stATM.stATM_Dl_Resp.chFiller,"0000000000");
// Sobreescitura del campo existente
isoFields.field127.stATM.stATM_Dl_Resp = resp127.stATM.stATM_Dl_Resp;
// Actualizacion en mensaje ISO
wRspCdeLen=sizeof(isoFields.field127.stATM.chMicr_Data); // Longitud fija de 43 bytes
isoMsg.SetField(127, &wRspCdeLen, (PBYTE)&isoFields.field127, wRspCdeLen );
}
else
{
// Formatear campo ISO #127 de rta., SECNDRY_RSRVD8_PRVT
memset(&isoFields.field127,' ',sizeof(isoFields.field127));
isoFields.field127.stATM.stATM_Dl_Resp.chCamb_Aplic = '0'; /* FORZADO LINK */
COPYVALUE(isoFields.field127.stATM.stATM_Dl_Resp.chCambio_C, "00000000");
COPYVALUE(isoFields.field127.stATM.stATM_Dl_Resp.chCambio_V, "00000000");
COPYVALUE(isoFields.field127.stATM.stATM_Dl_Resp.chCambio_1, "00000000");
COPYVALUE(isoFields.field127.stATM.stATM_Dl_Resp.chCambio_2, "00000000");
COPYVALUE(isoFields.field127.stATM.stATM_Dl_Resp.chFiller, " ");
wRspCdeLen=sizeof(isoFields.field127.stATM.chMicr_Data); // Longitud fija de 43 bytes
isoMsg.InsertField(127, &wRspCdeLen, (PBYTE)&isoFields.field127, wRspCdeLen );
};
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #125 de rta., SECNDRY_RSRVD6_PRVT
void TrxResATM::FormatField125_SECNDRY_RSRVD6_PRVT( char chProc_Acct_Ind )
{
WORD wRspCdeLen=0;
// Insertar el campo #125 solo si no existe
if(isoMsg.IsValidField( 125 ))
return;
// Formatear campo ISO #125 de rta., SECNDRY_RSRVD6_PRVT, "ACCOUNT INDICATOR"
isoFields.field125.stATM_STMT.stATM.chProc_Acct_Ind = chProc_Acct_Ind;
isoFields.field125.stATM_STMT.stATM.chFiller[0] = 0x00;
// Respuesta parametrica en campo #125
wRspCdeLen=min(sizeof(isoFields.field125),strlen(isoFields.field125.chData));
isoMsg.InsertField(125, &wRspCdeLen, (PBYTE)&isoFields.field125, wRspCdeLen );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// Estado de la ultima ejecucion RPC/ODBC
boolean_t TrxResATM::TransactionExecutionStatus()
{
return bExecStatus_ok;
}
///////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -