📄 cobistrx.cpp
字号:
szCard[sizeof(isoFields.field35.stTrack2.chData)+1]={"0"},
szProduct[4]={"0"},
szOnline[4]={"0"},
szOperacionCobis[8]={"0"},
szCurrency[4]={"0"},
szCause[8]={"0"},
szNetwork[8]={"0000"},
szCBU[32]={"0000000000000000000000"};
CHAR szAcumEfec[sizeof(isoFields.field4.chAmmount)+1]={"0"},
szAcumExtra[sizeof(isoFields.field4.chAmmount)+1]={"0"},
szTrxCurrency[4] = {"032"}; /* default 32=PESOS ARGENTINOS */
CHAR szExchangeRate[16] = {"1.00"}; /* default 1$=1us$*/
// Verificar que si el reverso es "?REVERSAL FOR LATE/UNSOL RESP?" no se procese
// porque ya fue reversada por TIMEOUT por el switch financiero
if(VerifyReversalForLateResponse( bIsReversal ))
return CISO_APPROVED_VIP_I; // Aprobada sin saldo disponible, no impactar el reverso
// Fecha de Trx especialmente formateada
FormatTrxDateTime(szYYYYMMDD, szHHMMSS, szYYYYMMDD_Trx, szHHMMSS_Trx, szYYYYMMDD_Cap);
////////////////////////////////////////////////////////////////////////////////////////
//Asignar producto y operacion COBIS
if(!AssignCOBISProductFromAccType(&cProductoCOBIS))
return CISO_INVALID_TRANSACTION_I;
if( cCobisProductoCA == cProductoCOBIS)
cOperacionCOBIS = cCobisDebitoCA;// Debito CA=264
else // if( cProductoCC == cProductoCOBIS)
cOperacionCOBIS = cCobisDebitoCC; // Debito CC=50
// Ejecutar STORED PROCEDURE
if(_RPC_DB_ == dbctType && prpcDB != NULL)
{
// Copiar string cuenta
ASSIGNSTRING(szAccount, isoFields.field102.chNum);
CHECKPARAMETER(szAccount);
// Formato del monto desde ISO hacia uso interno propio, con decimales
Format_ISO_Ammount( isoFields.field4.chAmmount, 2, szAmmount, sizeof(szAmmount),
is_true, szExchangeRate );
CHECKPARAMETER(szAmmount);
COPYSTRING(szCard, ExtractCardnumFromTrack2( &isoFields.field35 ));
CHECKPARAMETER(szCard);
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
AssignCOBISCurrencyFromAccType( &cMonedaCOBIS );
if('S' == chOnlineMode) strcpy(szOnline,"S");
else strcpy(szOnline,"N");
// Causal de debito?
AssignCOBISCauseFromCurrency( chOnlineMode, szCause, cMonedaCOBIS, cOperacionCOBIS,
cProductoCOBIS,
tblTranCodeSP_ARG_ARG,
tblTranCodeSP_USD_ARG,
tblTranCodeSP_ARG_USD,
tblTranCodeSP_USD_USD);
// Causal parametrico?
if(0 != wCause) itoa( wCause, szCause, 10 );
// Moneda de Trx
ASSIGNSTRING(szTrxCurrency, isoFields.field49.chData );
CHECKPARAMETER(szTrxCurrency);
#ifdef _RPCDB_CONNECTION_
// Invocacion
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, verificando EXEC SQL ok
wRespCde = iReturn;
if(0 == wRespCde && !bExecStatus_ok) wRespCde = CISO_EXTERNAL_DECLINE_I;
// Formatear montos ISO
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
// 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 #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 en particular
WORD TrxResCOBIS::ProcessDeposit(WORD wCause,boolean_t bIsReversal) // Deposito
{
long wRespCde = ProcessInit();
INT iReturn = 0;
/////////////////////////////////////////////////////////////////////////////
CONST stTranCodeSP tblTranCodeSP = {'S',"sp_li_deposito" ,0,0,0,0,0,0,0,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"},
szCard[sizeof(isoFields.field35.stTrack2.chData)+1]={"0"},
szProduct[4]={"0"},
szOnline[4]={"0"},
szOperacionCobis[8]={"0"},
szCurrency[4]={"0"},
szCause[8]={"0"},
szNetwork[8]={"0000"},
szDepType[4]={"E"};
CHAR szGirar[32] = {"000000000000.0000"},
szContable[32] = {"000000000000.0000"};
CHAR szTrxCurrency[4] = {"032"}; /* default 32=PESOS ARGENTINOS */
CHAR szAcumEfec[sizeof(isoFields.field4.chAmmount)+1]={"0"},
szAcumExtra[sizeof(isoFields.field4.chAmmount)+1]={"0"};
CHAR szExchangeRate[16] = {"1.00"}; /* default 1$=1us$*/
boolean_t bEnabled_E_C_U_W = is_false; /* Se permiten tipo de Depositos Cruzados ??? */
// Verificar que si el reverso es "?REVERSAL FOR LATE/UNSOL RESP?" no se procese
// porque ya fue reversada por TIMEOUT por el switch financiero
if(VerifyReversalForLateResponse( bIsReversal ))
return CISO_APPROVED_VIP_I; // Aprobada sin saldo disponible, no impactar el reverso
// Fecha de Trx especialmente formateada
FormatTrxDateTime(szYYYYMMDD, szHHMMSS, szYYYYMMDD_Trx, szHHMMSS_Trx, szYYYYMMDD_Cap);
////////////////////////////////////////////////////////////////////////////////////////
//Asignar producto y operacion COBIS
//DLH Debe tomar la cuenta de 'H' por ser un deposito, sino toma 0 y falla
if(!AssignCOBISProductFromAccType(&cProductoCOBIS,'H'))
return CISO_INVALID_TRANSACTION_I;
if( cCobisProductoCA == cProductoCOBIS)
cOperacionCOBIS = cCobisDebitoCA;// Debito CA=264
else // if( cProductoCC == cProductoCOBIS)
cOperacionCOBIS = cCobisDebitoCC; // Debito CC=50
// Ejecutar STORED PROCEDURE
if(_RPC_DB_ == dbctType && prpcDB != NULL)
{
// Copiar string cuenta, campo #103, cuenta DESDE
ASSIGNSTRING(szAccount, isoFields.field103.chNum); // Cuenta HASTA por ser deposito, #103
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);
COPYSTRING(szCard, ExtractCardnumFromTrack2( &isoFields.field35 ));
CHECKPARAMETER(szCard);
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);
// Moneda de la operacion es la moneda del debito en cuenta HASTA por ser deposito
AssignCOBISCurrencyFromAccType( &cMonedaCOBIS, 'H' );
if('S' == chOnlineMode)
{
strcpy(szOnline,"S");
itoa( tblTranCodeSP.shOnCause1, szCause,10);
}
else
{
strcpy(szOnline,"N");
itoa( tblTranCodeSP.shOffCause1, szCause,10);
};
// Causal parametrico?
if(0 != wCause) itoa( wCause, szCause, 10 );
// TIPO DE DEPOSITO, "E" o "C" (efectivo o cheque
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -