📄 cobistrx.cpp
字号:
tblTranCodeSP_USD_USD,
(cMonedaCOBIS1 != cMonedaCOBIS2),
cMonedaCOBIS2 );
// Causal 2-CREDITO?
if(cMonedaCOBIS1 == cMonedaCOBIS2)
// Se informa CUENTA DESTINO y OPERACION CREDITO
AssignCOBISCauseFromCurrency( chOnlineMode, szCause2,
cMonedaCOBIS2, cOperacionCOBIS2, cProductoCOBIS2,
tblTranCodeSP_ARG_ARG,
tblTranCodeSP_USD_ARG,
tblTranCodeSP_ARG_USD,
tblTranCodeSP_USD_USD,
(cMonedaCOBIS1 != cMonedaCOBIS2),
cMonedaCOBIS1 );
else // Si son distintas monedas....
// Se informa la CUENTA ORIGEN, pero, con OPERACION CREDITO
AssignCOBISCauseFromCurrency( chOnlineMode, szCause2,
cMonedaCOBIS1, cOperacionCOBIS2, cProductoCOBIS1,
tblTranCodeSP_ARG_ARG,
tblTranCodeSP_USD_ARG,
tblTranCodeSP_ARG_USD,
tblTranCodeSP_USD_USD,
(cMonedaCOBIS1 != cMonedaCOBIS2),
cMonedaCOBIS2 );
/////////////////////////////////////////////////////////////////////////////////////
// Causal parametrico?
if(0 != wCause)
itoa( wCause, szCause1, 10 );
// Moneda de Trx
ASSIGNSTRING(szTrxCurrency, isoFields.field49.chData );
CHECKPARAMETER(szTrxCurrency);
#ifdef _RPCDB_CONNECTION_
// Invocacion
bExecStatus_ok = prpcDB->AccountTransfer( szAccount1 ,
szAccount2 ,
szAmmount ,
szCause1 ,
szCause2 ,
szCard ,
szReceipt ,
szFIID ,
szATM ,
TranslateTranCode_ISO_B24(isoFields.field3.uProcCde.chData),
itoa(cOperacionCOBIS1,szOperacionCobis1,10),
itoa(cOperacionCOBIS2,szOperacionCobis2,10),
itoa(cMonedaCOBIS1,szCurrency1,10),
itoa(cMonedaCOBIS2,szCurrency2,10),
szYYYYMMDD ,
szYYYYMMDD_Trx ,
szYYYYMMDD_Cap ,
szHHMMSS ,
szHHMMSS_Trx ,
szOnline ,
itoa(cProductoCOBIS1,szProduct1,10),
itoa(cProductoCOBIS2,szProduct2,10),
szNetwork ,
szGirar ,
szExchangeRate ,
szTrxCurrency ,
szAcumEfec ,
szAcumExtra ,
szContable );
// 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( '2' );
// 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::ProcessCreditNote(WORD wCause,boolean_t bIsReversal) // Nota de Credito
{
long wRespCde = ProcessInit();
///////////////////////////////////////////////////////////////////////////////
CONST stTranCodeSP tblTranCodeSP = {'S', NULL, 0, 113, 0, 113, 0, 613, 0, 613};
///////////////////////////////////////////////////////////////////////////////
// La transferencia en COBIS implica dos movimientos : una acreditacion y otra debitacion,
// y son dos invocaciones distintas a la base de datos.
// Acreditar cuenta DESDE (FROM ACCT)
wRespCde = ProcessDebitCredit_Note( 'D', cCobisCredito_Gral,
&tblTranCodeSP, bIsReversal );
// Retornar cod.rta.
return TranslateRespCode_COBIS_ISO_B24( wRespCde );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResCOBIS::ProcessDebitNote(WORD wCause,boolean_t bIsReversal) // Nota de Debito
{
long wRespCde = ProcessInit();
//////////////////////////////////////////////////////////////////////////////////
CONST stTranCodeSP tblTranCodeSP = {'S', NULL, 4213, 0, 213, 0, 3713, 0, 713, 0};
//////////////////////////////////////////////////////////////////////////////////
// La transferencia en COBIS implica dos movimientos : una acreditacion y otra debitacion,
// y son dos invocaciones distintas a la base de datos.
// Debitar cuenta DESDE (FROM ACCT)
wRespCde = ProcessDebitCredit_Note( 'D', cCobisDebito_Gral, &tblTranCodeSP, bIsReversal );
// Retornar cod.rta.
return TranslateRespCode_COBIS_ISO_B24( wRespCde );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular : SUB-TRANSFERENCIA
WORD TrxResCOBIS::ProcessDebitCredit_Note( char chCuentaDesdeHacia,
enumCOBIS cOperacionCOBIS,
CONST stTranCodeSP *ptblTranCodeSP,
boolean_t bIsReversal,
boolean_t bIsInterbankXfer )
{
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_trans",4198, 102, 198, 102,
3698, 602, 698, 602 };
CONST stTranCodeSP tblTranCodeSP_ARG_USD = {'S',"sp_li_ndc_trans",4200, 104, 200, 104,
3700, 604, 700, 604 };
CONST stTranCodeSP tblTranCodeSP_USD_ARG = {'S',"sp_li_ndc_trans",4199, 103, 199, 103,
3699, 603, 699, 603 };
CONST stTranCodeSP tblTranCodeSP_USD_USD = {'S',"sp_li_ndc_trans",4201, 105, 201, 105,
3701, 605, 701, 605 };
CONST stTranCodeSP tblTranCodeSP_Interbank= {'S',"sp_li_ndc_trans",4213, 213, 3713, 713,
4213, 213, 3713, 713 };
/////////////////////////////////////////////////////////////////////////////////////////////////
CHAR szYYYYMMDD[] = _TIMESTAMP_MASK_, // Xmit-date
szHHMMSS[] = _TIMESTAMP_MASK_, // Xmit-time
szYYYYMMDD_Trx[] = _TIMESTAMP_MASK_, // Trx-date
szHHMMSS_Trx[] = _TIMESTAMP_MASK_; // Trx-time
CHAR szYYYYMMDD_Cap[] = _TIMESTAMP_MASK_; // Cap-date
CHAR szAccount[sizeof(isoFields.field102.chNum)+1]={"0"};
CHAR chOnlineMode = (boolOnlineMode == is_true) ? 'S' : 'N';
enumCOBIS cProductoCOBIS = cCobisProductoCA; // Producto default CA, donde CA=4,CC=3.
enumCOBIS cMonedaCOBIS = cCobisMonedaPesos;
CHAR 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"},
szProduct[4]={"0"},
szOnline[4]={"0"},
szOperacionCobis[8]={"0"},
szCurrency[4]={"0"},
szCard[sizeof(isoFields.field35.stTrack2.chData)+1]={"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$*/
/***********************************************************/
/* TIPOS DE CUENTAS DE LIBRE DISPONIBILIDAD SEGUN RED LINK */
CHAR szToAcctTyp[2] = B24_NONFREE_AVAIL_ACCOUNT_TYP,
szFromAcctTyp[2] = B24_NONFREE_AVAIL_ACCOUNT_TYP;
/***********************************************************/
// 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);
/////////////////////////////////////////////////////////////////////
// Si es una reversa, el CREDITO se convierte en DEBITO y viceversa
/////////////////////////////////////////////////////////////////////
if(bIsReversal)
{
if(cCobisDebitoCA == cOperacionCOBIS)
cOperacionCOBIS = cCobisCreditoCA;
else if(cCobisCreditoCA == cOperacionCOBIS)
cOperacionCOBIS = cCobisDebitoCA;
else if(cCobisDebitoCC == cOperacionCOBIS)
cOperacionCOBIS = cCobisCreditoCC;
else if(cCobisCreditoCC == cOperacionCOBIS)
cOperacionCOBIS = cCobisDebitoCC;
else if(cCobisDebito_Gral == cOperacionCOBIS)
cOperacionCOBIS = cCobisCredito_Gral;
else if(cCobisCredito_Gral == cOperacionCOBIS)
cOperacionCOBIS = cCobisDebito_Gral;
else
return CISO_EXTERNAL_DECLINE_I;
};
/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
//Asignar producto y operacion COBIS
if(!AssignCOBISProductFromAccType(&cProductoCOBIS,chCuentaDesdeHacia))
return CISO_INVALID_TRANSACTION_I;
if( cCobisProductoCA == cProductoCOBIS)
{
if (cCobisDebito_Gral == cOperacionCOBIS)
cOperacionCOBIS = cCobisDebitoCA;// Debito CA=264
else
cOperacionCOBIS = cCobisCreditoCA;// Credito CA=253
}
else // if( cProductoCC == cProductoCOBIS)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -