📄 cobistrx.cpp
字号:
{
if (cCobisDebito_Gral == cOperacionCOBIS)
cOperacionCOBIS = cCobisDebitoCC; // Debito CC=50
else
cOperacionCOBIS = cCobisCreditoCC;// Credito CC=48
};
// Ejecutar STORED PROCEDURE
if(_RPC_DB_ == dbctType && prpcDB != NULL)
{
// Copiar string cuenta-tarjeta-monto etc.
COPYSTRING(szCard, ExtractCardnumFromTrack2( &isoFields.field35 ) );
CHECKPARAMETER(szCard);
if('D' == chCuentaDesdeHacia)
ASSIGNSTRING(szAccount, isoFields.field102.chNum); // Cuenta Desde
if('H' == chCuentaDesdeHacia)
ASSIGNSTRING(szAccount, isoFields.field103.chNum); // Cuenta Hacia
CHECKPARAMETER(szAccount);
// Formato del monto desde ISO hacia uso interno propio, con decimales
// y con tipo de cambio aplicado si correspondiera
Format_ISO_Ammount( isoFields.field4.chAmmount, 2, szAmmount, sizeof(szAmmount),
is_true, szExchangeRate );
CHECKPARAMETER(szAmmount);
ASSIGNSTRING(szReceipt, isoFields.field37.chNum);
CHECKPARAMETER(szReceipt);
ASSIGNSTRING(szFIID , isoFields.field60.stATMTerm.chTermFIID);
CHECKPARAMETER(szFIID);
CHECKBNLFIID(szFIID); // Es id "BNL" ? Usar el id de LINK, numerico
ASSIGNSTRING(szATM , isoFields.field41.chData);
CHECKPARAMETER(szATM);
ASSIGNSTRING(szNetwork, isoFields.field60.stATMTerm.chTermLNet); // LNET de la TERMINAL
CHECKPARAMETER(szNetwork);
/* SOLO PARA TRANSFERENCIAS MINORISTAS POR CBU */
if( isoMsg.IsATMTransferCBU() )
{
ASSIGNSTRING(szCBU, isoFields.field54.stTransferenciaCBU.chCBU); // CBU para xfers. minoristas
CHECKPARAMETER(szCBU);
}
// Moneda de la operacion es la moneda del debito en cuenta ORIGEN o DESTINO
AssignCOBISCurrencyFromAccType( &cMonedaCOBIS , chCuentaDesdeHacia );
// Online ?
if('S' == chOnlineMode) strcpy(szOnline,"S");
else strcpy(szOnline,"N");
// Causal interbancarias, y ademas no es parametrico ?
if(is_false == bIsInterbankXfer && NULL == ptblTranCodeSP)
AssignCOBISCauseFromCurrency( chOnlineMode, szCause,
cMonedaCOBIS, cOperacionCOBIS, cProductoCOBIS,
tblTranCodeSP_Interbank,
tblTranCodeSP_Interbank,
tblTranCodeSP_Interbank,
tblTranCodeSP_Interbank);
// Causal debito/credito, y ademas no es parametrico ?
else if (NULL == ptblTranCodeSP)
AssignCOBISCauseFromCurrency( chOnlineMode, szCause,
cMonedaCOBIS, cOperacionCOBIS, cProductoCOBIS,
tblTranCodeSP_ARG_ARG,
tblTranCodeSP_USD_ARG,
tblTranCodeSP_ARG_USD,
tblTranCodeSP_USD_USD);
else // Causal parametrico?
AssignCOBISCauseFromCurrency( chOnlineMode, szCause,
cMonedaCOBIS, cOperacionCOBIS, cProductoCOBIS,
(*ptblTranCodeSP),
(*ptblTranCodeSP),
(*ptblTranCodeSP),
(*ptblTranCodeSP) );
// Moneda de Trx
ASSIGNSTRING(szTrxCurrency, isoFields.field49.chData );
CHECKPARAMETER(szTrxCurrency);
//////////////////////////////////////////////////////////////
// CORRALITO : Cuentas de libre disponibilidad ?
//////////////////////////////////////////////////////////////
if(isoMsg.IsATMTransferInterbank()) /* Transferencia interbancaria? */
{
if(isalpha(isoFields.field55.stInterbancarias.chTo_Acct_Typ))
{
szToAcctTyp[0] = isoFields.field55.stInterbancarias.chTo_Acct_Typ;
szToAcctTyp[1] = 0x00;
}
if(isalpha(isoFields.field55.stInterbancarias.chFr_Acct_Typ))
{
szFromAcctTyp[0] = isoFields.field55.stInterbancarias.chFr_Acct_Typ;
szFromAcctTyp[1] = 0x00;
}
};
//////////////////////////////////////////////////////////////
#ifdef _RPCDB_CONNECTION_
/* Solo para Transferencias se usa un SP distinto */
if(isoMsg.IsATMTransferInterbank()) /* Transferencia interbancaria? */
/* Invocacion como NOTA DE DEBITO/CREDITO */
bExecStatus_ok = prpcDB->AccountCreditDebitNote( szAccount,
szAmmount ,
szCause ,
szCard ,
szReceipt ,
szFIID ,
szATM ,
TranslateTranCode_ISO_B24(isoFields.field3.uProcCde.chData),
itoa(cOperacionCOBIS,szOperacionCobis,10),
itoa(cMonedaCOBIS ,szCurrency,10),
szYYYYMMDD ,
szYYYYMMDD_Trx ,
szHHMMSS ,
szHHMMSS_Trx ,
szOnline ,
itoa(cProductoCOBIS,szProduct,10),
szYYYYMMDD_Cap ,
szNetwork ,
szCBU ,
szGirar ,
szContable ,
szAcumEfec ,
szAcumExtra ,
szTrxCurrency ,
szExchangeRate ,
szToAcctTyp ,
szFromAcctTyp );
else
/* Invocacion como EXTRACCION para otras transacciones */
bExecStatus_ok = prpcDB->AccountWidrawal( szAccount,
szAmmount ,
szCause ,
szCard ,
szReceipt ,
szFIID ,
szATM ,
TranslateTranCode_ISO_B24(isoFields.field3.uProcCde.chData),
itoa(cOperacionCOBIS,szOperacionCobis,10),
itoa(cMonedaCOBIS ,szCurrency,10),
szYYYYMMDD ,
szYYYYMMDD_Trx ,
szHHMMSS ,
szHHMMSS_Trx ,
szOnline ,
itoa(cProductoCOBIS,szProduct,10),
szYYYYMMDD_Cap ,
szNetwork ,
szCBU ,
szGirar ,
szContable ,
szAcumEfec ,
szAcumExtra ,
szTrxCurrency ,
szExchangeRate );
// Codigo de retorno de la ejecucion del SP
iReturn = prpcDB->GetStatus();
#else
iReturn = CISO_EXTERNAL_DECLINE_I;
#endif // #ifdef _RPCDB_CONNECTION_
}
else
iReturn = CISO_EXTERNAL_DECLINE_I;
// Formatear Codigo de Rta ISO8538 en base a COBIS
wRespCde = iReturn;
if(0 == wRespCde && !bExecStatus_ok) wRespCde = CISO_EXTERNAL_DECLINE_I;
// Formatear saldos a formato ISO-LINK,sin punto decimal ni millar
Format_ISO_Ammount( szGirar , 0, szGirar , sizeof(isoFields.field4.chAmmount));
Format_ISO_Ammount( szContable, 0, szContable, sizeof(isoFields.field4.chAmmount));
// Formatear campo ISO #44, RESP_DATA, saldo y disponible
FormatField44_RESP_DATA( szContable, szGirar );
// Formatear campo ISO #54 de rta., stB24_0210_Def_Data
Format_ISO_Ammount( szAcumEfec , 0, szAcumEfec ,
sizeof(isoFields.field54.stB24_0210_Def_Data.chINT_OWE_AUSTRAL));
Format_ISO_Ammount( szAcumExtra, 0, szAcumExtra,
sizeof(isoFields.field54.stB24_0210_Def_Data.chOWE_DOLAR));
FormatField54_B24_0210_Def_Data(
"99", // chWITH_ADV_AVAIL, : contador extracciones o adelantos
szAcumEfec, // chINT_OWE_AUSTRAL,12 : LIBRE DISPONIBILIDAD (CORRALITO)
szGirar, // chCASH_AVAIL,12 : saldo disponible
NULL, // chMIN_PAYMENT,12
NULL, // chPAYMENT_DAT,6
NULL, // chINTEREST_RATE,6
szAcumExtra, // chOWE_DOLAR,10 : ACUMULADOR DE EXTRACCIONES (CORRALITO)
NULL, // chMIN_PAYMENT_DOLAR,10
NULL, // chPURCHASE_DOLAR,10
NULL ); // chCASH_FEE,8 : arancel de usuario
// Formatear campo ISO #55 de rta., PRIRSRVD1_ISO
FormatField55_PRIRSRVD1_ISO(
NULL, // Track-2 o PAN del Titular
NULL, // Codigo asociado
NULL, // Institucion 1
NULL, // Tipo Cta. 1
NULL, // Cuenta Num. 1
NULL, // Institucion 2
NULL, // Tipo Cta. 2
NULL ); // Cuenta Num. 2
// Formatear campo ISO #122, SECNDRY_RSRVD3_PRVT
FormatField122_SECNDRY_RSRVD3_PRVT();
// Formatear campo ISO #123, SECNDRY_RSRVD4_PRVT, "DEPOSIT AMMOUNT"
FormatField123_SECNDRY_RSRVD4_PRVT();
// Formatear campo ISO #125, SECNDRY_RSRVD6_PRVT, "ACCOUNT INDICATOR"
FormatField125_SECNDRY_RSRVD6_PRVT( '1' );
// Formatear campo ISO #127, SECNDRY_RSRVD8_PRVT
FormatField127_SECNDRY_RSRVD8_PRVT();
////////////////////////////////////////////////////
// Borrar campos no validos en la rta. : 43,48,52,63
isoMsg.DeleteField ( 43 );
isoMsg.DeleteField ( 48 );
isoMsg.DeleteField ( 52 );
isoMsg.DeleteField ( 63 );
////////////////////////////////////////////////////
// Retornar cod.rta.
return TranslateRespCode_COBIS_ISO_B24( wRespCde );
}
// Procesamiento de transacciones de xfer. minorista, o CBU
WORD TrxResCOBIS::ProcessIndividualTransfer(WORD wCause,boolean_t bIsReversal) // Transferencia minorista
{
///////////////////////////////////////////////////////////////////////////////
CONST stTranCodeSP tblTranCodeSP = {'S', NULL, 4331, 0, 331, 0, 3831, 0, 831 };
///////////////////////////////////////////////////////////////////////////////
// La transferencia por CBU solo genera un DEBITO en cuenta (extraccion) y recien el credito
// se obtiene por compensacion, por camara, a las 48hs, y por proceso batch.
return ProcessDebitCredit_Note('D', cCobisDebito_Gral, &tblTranCodeSP , bIsReversal );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResCOBIS::ProcessWithdrawal(WORD wCause,boolean_t bIsReversal) // Extraccion
{
long wRespCde = ProcessInit();
CHAR szGirar[32] = {"000000000000.0000"};
CHAR szContable[32] = {"000000000000.0000"};
INT iReturn = 0;
///////////////////////////////////////////////////////////////////////////////////////
CONST stTranCodeSP tblTranCodeSP_ARG_ARG = {'S' , "sp_li_ndc_ext",4190, 0, 190, 0 ,
3690, 0, 690, 0 };
CONST stTranCodeSP tblTranCodeSP_ARG_USD = {'S' , "sp_li_ndc_ext",4191, 0, 191, 0 ,
3691, 0, 691, 0 };
CONST stTranCodeSP tblTranCodeSP_USD_ARG = {'S' , "sp_li_ndc_ext",4192, 0, 192, 0 ,
3692, 0, 692, 0 };
CONST stTranCodeSP tblTranCodeSP_USD_USD = {'S' , "sp_li_ndc_ext",4193, 0, 193, 0 ,
3693, 0, 693, 0 };
///////////////////////////////////////////////////////////////////////////////////////
CHAR szYYYYMMDD[] = _TIMESTAMP_MASK_, // Xmit-date
szHHMMSS[] = _TIMESTAMP_MASK_, // Xmit-time
szYYYYMMDD_Trx[] = _TIMESTAMP_MASK_, // Trx-date
szHHMMSS_Trx[] = _TIMESTAMP_MASK_, // Trx-time
szYYYYMMDD_Cap[] = _TIMESTAMP_MASK_; // Cap-date
CHAR chOnlineMode = (boolOnlineMode == is_true) ? 'S' : 'N';
enumCOBIS cProductoCOBIS = cCobisProductoCA; // Producto default es CA
enumCOBIS cOperacionCOBIS = cCobisDebitoCA; // Operacion default es debito C.A.
enumCOBIS cMonedaCOBIS = cCobisMonedaPesos;
CHAR szAccount[sizeof(isoFields.field102.chNum)+1]={"0"},
szAmmount[sizeof(isoFields.field4.chAmmount)+1]={"0"},
szReceipt[sizeof(isoFields.field37.chNum)+1]={"0"},
szFIID[sizeof(isoFields.field60.stATMTerm.chTermFIID)+1]={"0"},
szATM[sizeof(isoFields.field41.chData)+1]={"0"},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -