📄 trxres.cpp
字号:
shTran = -1; // Un valor negativo es un valor que NO SE CONVIERTE, se traslada identico
// Cuenta desde-hacia son numericos obligatorios
shFromAcc = antoi(pProcCde->uProcCde.stTranCde.chFrom_Acct_Typ,2);
shToAcc = antoi(pProcCde->uProcCde.stTranCde.chTo_Acct_Typ,2);
switch( shTran )
{
case 1 : shTran = 10; break; // Extraccion de cuenta
case 9 : shTran = 19; break; // Orden de debito en cta. por transferencias
case 21 : shTran = 20; break; // Depositos en cuenta
/******************************************************/
case 31 : shTran = 30; break; // Consultas de saldos vs.
case 32 : shTran = 31; break; // Cambio de PIN
/******************************************************/
case 90 : shTran = 51; break; // Pago Servicios con debito en cuenta
default : break; // permanece sin cambios, puede ser alfanumerico....
}
switch( shFromAcc )
{
case _B24_CHECKINGS_ACCOUNT_USD_ : shFromAcc = _CEXTR_CHECKINGS_ACCOUNT_USD_; break; // 7 - CUENTA CORRIENTE EN DOLARES
case _B24_SAVINGS_ACCOUNT_ : shFromAcc = _CEXTR_SAVINGS_ACCOUNT_ ; break; // 10 - CAJA DE AHORROS EN PESOS
case _B24_SPECIAL_ACCOUNT_AFJP_ : shFromAcc = _CEXTR_SPECIAL_ACCOUNT_AFJP_ ; break; // 13 - CUENTA AFJP
case _B24_SAVINGS_ACCOUNT_BOND_ : shFromAcc = _CEXTR_SAVINGS_ACCOUNT_BOND_ ; break; // 14 - CUENTA BONOS
case _B24_SAVINGS_ACCOUNT_USD_ : shFromAcc = _CEXTR_SAVINGS_ACCOUNT_USD_ ; break; // 15 - CAJA DE AHORROS EN DOLARES
case _B24_CHECKINGS_ACCOUNT_ : shFromAcc = _CEXTR_CHECKINGS_ACCOUNT_ ; break; // 20 - CUENTA CORRIENTE EN PESOS
// case _B24_CHECKINGS_ACCOUNT_BOND_: shFromAcc = 14; break; // 14 - CUENTA CORRIENTE BONOS
case _B24_CREDIT_CARD_ACCOUNT_ : shFromAcc = _CEXTR_CREDIT_CARD_ACCOUNT_ ; break; // 30 - CUENTA TARJETA DE CREDITO EN PESOS
case _B24_CREDIT_LINE_ACCOUNT_ : shFromAcc = _CEXTR_CREDIT_LINE_ACCOUNT_ ; break; // 32 - CUENTA CREDITO VISTA EN PESOS
default : break; // permanece sin cambios
}
switch( shToAcc )
{
case _B24_CHECKINGS_ACCOUNT_USD_ : shToAcc = _CEXTR_CHECKINGS_ACCOUNT_USD_; break; // 7 - CUENTA CORRIENTE EN DOLARES
case _B24_SAVINGS_ACCOUNT_ : shToAcc = _CEXTR_SAVINGS_ACCOUNT_ ; break; // 10 - CAJA DE AHORROS EN PESOS
case _B24_SPECIAL_ACCOUNT_AFJP_ : shToAcc = _CEXTR_SPECIAL_ACCOUNT_AFJP_ ; break; // 13 - CUENTA AFJP
case _B24_SAVINGS_ACCOUNT_BOND_ : shToAcc = _CEXTR_SAVINGS_ACCOUNT_BOND_ ; break; // 14 - CUENTA BONOS
case _B24_SAVINGS_ACCOUNT_USD_ : shToAcc = _CEXTR_SAVINGS_ACCOUNT_USD_ ; break; // 15 - CAJA DE AHORROS EN DOLARES
case _B24_CHECKINGS_ACCOUNT_ : shToAcc = _CEXTR_CHECKINGS_ACCOUNT_ ; break; // 20 - CUENTA CORRIENTE EN PESOS
// case _B24_CHECKINGS_ACCOUNT_BOND_: shToAcc = 14; break; // 14 - CUENTA CORRIENTE BONOS
case _B24_CREDIT_CARD_ACCOUNT_ : shToAcc = _CEXTR_CREDIT_CARD_ACCOUNT_ ; break; // 30 - CUENTA TARJETA DE CREDITO EN PESOS
case _B24_CREDIT_LINE_ACCOUNT_ : shToAcc = _CEXTR_CREDIT_LINE_ACCOUNT_ ; break; // 32 - CUENTA CREDITO VISTA EN PESOS
default : break; // permanece sin cambios
}
// En ASCII-DISPLAY
// Si son todos numericos....
if(shTran > 0)
sprintf( stB24TranCode.uProcCde.stTranCde.chTran_Cde, "%02d%02d%02d",
shTran, shFromAcc, shToAcc );
// Sino, si alguno es alfanumerico....
else
sprintf( stB24TranCode.uProcCde.stTranCde.chTran_Cde, "%2.2s%02d%02d",
pProcCde->uProcCde.stTranCde.chTran_Cde, shFromAcc, shToAcc );
// Retorno de valor convertido, en forma estatica
return ( stB24TranCode.uProcCde.chData );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formateo especial de campos fecha y hora
BOOL TrxBaseResolution::FormatTrxDateTime(char *szYYYYMMDD, char *szHHMMSS,
char *szYYYYMMDD_Trx, char *szHHMMSS_Trx,
char *szYYYYMMDD_Cap )
{
// Precondicion
if(!(szYYYYMMDD && szHHMMSS && szYYYYMMDD_Trx && szHHMMSS_Trx && szYYYYMMDD_Cap))
return FALSE;
/* Invocar a funcion base con defaults */
return FormatTrxDateTime_WMask( szYYYYMMDD, szHHMMSS,
szYYYYMMDD_Trx, szHHMMSS_Trx,
szYYYYMMDD_Cap,
is_true , is_true, is_true, is_true, 0 );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formateo especial de campos fecha y hora, segun mascara y segun ano de 4 digitos
BOOL TrxBaseResolution::FormatTrxDateTime_WMask(char *szYYYYMMDD, char *szHHMMSS,
char *szYYYYMMDD_Trx, char *szHHMMSS_Trx,
char *szYYYYMMDD_Cap,
boolean_t bUseSeparators ,
boolean_t bUse4DigitsYear,
boolean_t bFormatIsMMDDYY,
boolean_t bAlwaysTimeIsDateAndTime,
short nTimestampLength,
short nHourLength)
{
const time_t tTimestamp = time( NULL );
const tm *ptmLocal = localtime( &tTimestamp );
short nYear = ptmLocal->tm_year + 1900 ; /* default es ano actual */
const short cnYearDigits = ( bUse4DigitsYear ) ? 4 : 2; /* default es 4 digitos */
short nLength = 0;
/***********************************************************************/
const char *cszMMDDYY_Mask = "%.2s/%.2s/%0*i";
const char *cszMMDDYY_MaskNoSep = "%.2s%.2s%0*i";
const char *cszHHMMSS_Mask = "%.2s:%.2s:%.2s";
const char *cszHHMMSS_MaskNoSep = "%.2s%.2s%.2s";
const char *cszTIMESTAMP_Mask = "%s %.2s:%.2s:%.2s";
const char *cszTIMESTAMP_MaskNoSep = "%s%.2s%.2s%.2s";
const char *cszYYMMDD_Mask = "%0*i/%.2s/%.2s";
const char *cszYYMMDD_MaskNoSep = "%0*i%.2s%.2s";
char *pszDATE_Mask = (char *)cszMMDDYY_Mask ; /* default c/separadores y MMDDYYYY*/
char *pszTIME_Mask = (char *)cszHHMMSS_Mask ; /* default c/separadores y HHMMSS*/
char *pszTIMESTAMP_Mask = (char *)cszTIMESTAMP_Mask ; /* default c/separadores y YYYY*/
/***********************************************************************/
short nMonth = ptmLocal->tm_mon + 1; /* default es mes actual */
short nYearTranDat = nYear ; /* default es ano actual */
short nYearPostDat = nYear ; /* default es ano actual */
/***********************************************************************/
// No hay Precondicion esepcifica, ya que pueden o no informarse todos los campos
//////////////////////////////////////////////////////////////////////
// Segun mascara y ano de 4 digitos
//////////////////////////////////////////////////////////////////////
// ptmLocal->tm_year + 1900; /* years since 1900 */
// ptmLocal->tm_mon + 1; /* months since January - [0;11] */
// ptmLocal->tm_mday; /* day of the month - [1;31] */
// ptmLocal->tm_hour; /* hours since midnight - [0;23] */
// ptmLocal->tm_min; /* minutes after the hour - [0;59] */
// ptmLocal->tm_sec; /* seconds after the minute - [0;59] */
//////////////////////////////////////////////////////////////////////
if(bUse4DigitsYear)
nYear = ptmLocal->tm_year + 1900 ;
else
nYear = ptmLocal->tm_year % 100;
//////////////////////////////////////////////////////////////////////////
// Cuando el MES de POSTING-DATE es MENOR al de TRANSACTION-DATE,
// y es IGUAL al MES actual del sistema, ha cambiado el ao !!!
// Ej. Es 01-01-2002 y entra SAF del 31-12-2001, debe restarse 1 al ao actual.
if( strncmp(isoFields.field17.chMMDD, isoFields.field13.chMMDD,2) < 0
&&
antoi(isoFields.field17.chMMDD,2) == nMonth )
nYearTranDat = nYear - 1;
else
nYearTranDat = nYear ;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// Cuando el MES de POSTING-DATE es MENOR al de TRANSACTION-DATE,
// y es MENOR al MES actual del sistema, ha cambiado el ao !!!
// Ej. Es 31-12-2001 y ya ingresan del 01-01-2002, debe sumarse 1 al ao actual.
if( strncmp(isoFields.field17.chMMDD, isoFields.field13.chMMDD,2) < 0
&&
antoi(isoFields.field17.chMMDD,2) < nMonth )
nYearPostDat = nYear + 1;
else
nYearPostDat = nYear ;
//////////////////////////////////////////////////////////////////////////
if(bUseSeparators)
{
if(bFormatIsMMDDYY)
pszDATE_Mask = (char *)cszMMDDYY_Mask ;
else
pszDATE_Mask = (char *)cszYYMMDD_Mask ;
pszTIMESTAMP_Mask = (char *)cszTIMESTAMP_Mask ;
}
else
{
if(bFormatIsMMDDYY)
pszDATE_Mask = (char *)cszMMDDYY_MaskNoSep ;
else
pszDATE_Mask = (char *)cszYYMMDD_MaskNoSep ;
if(bAlwaysTimeIsDateAndTime)
pszTIME_Mask = (char *)cszTIMESTAMP_MaskNoSep ;
else
pszTIME_Mask = (char *)cszHHMMSS_MaskNoSep ;
pszTIMESTAMP_Mask = (char *)cszTIMESTAMP_MaskNoSep ;
};
// Fecha de Transmision, formato MM/DD/YYYY (XMIT-DATE), ISO-FIELD-07
if(szYYYYMMDD)
{
if(bFormatIsMMDDYY)
sprintf(szYYYYMMDD,pszDATE_Mask, isoFields.field7.chMMDD, isoFields.field7.chMMDD+2,
cnYearDigits , nYear );
else
sprintf(szYYYYMMDD,pszDATE_Mask, cnYearDigits , nYear, isoFields.field7.chMMDD,
isoFields.field7.chMMDD+2 );
}
// Hora de Transmision formato HH:MM:SS (XMIT-TIME), ISO-FIELD-07
if(szHHMMSS)
{
if(bAlwaysTimeIsDateAndTime)
{
sprintf(szHHMMSS ,pszTIMESTAMP_Mask , szYYYYMMDD,
isoFields.field7.chHHMMSS,isoFields.field7.chHHMMSS+2,isoFields.field7.chHHMMSS+4 );
// Paddear lo restante con ceros
nLength = strlen(szHHMMSS);
if(nTimestampLength > nLength)
memset( szHHMMSS+nLength, '0', nTimestampLength-nLength);
}
else
sprintf(szHHMMSS ,pszTIME_Mask ,
isoFields.field7.chHHMMSS,isoFields.field7.chHHMMSS+2,isoFields.field7.chHHMMSS+4 );
};
// Fecha de Transaccion, formato MM/DD/YYYY (TRX-DATE), ISO-FIELD-13
// El ano se obtiene , o bien del sistema, o bien de la fecha de transaccion :
// Mismo ano de transmision que la fecha de negocios? (comparar 2 ultimos digitos)
if(szYYYYMMDD_Trx)
{
if(bFormatIsMMDDYY)
sprintf(szYYYYMMDD_Trx,pszDATE_Mask, isoFields.field13.chMMDD, isoFields.field13.chMMDD+2,
cnYearDigits , nYearTranDat );
else
sprintf(szYYYYMMDD_Trx,pszDATE_Mask, cnYearDigits , nYear, isoFields.field13.chMMDD,
isoFields.field13.chMMDD+2 );
}
// Hora de Transaccion formato HH:MM:SS (TRX-TIME = XMIT-TIME), ISO-FIELD-12
if(szHHMMSS_Trx)
{
if(bAlwaysTimeIsDateAndTime)
sprintf(szHHMMSS_Trx ,pszTIMESTAMP_Mask , szYYYYMMDD_Trx,
isoFields.field12.chHHMMSS,isoFields.field12.chHHMMSS+2,isoFields.field12.chHHMMSS+4 );
else
sprintf(szHHMMSS_Trx ,pszTIME_Mask ,
isoFields.field12.chHHMMSS,isoFields.field12.chHHMMSS+2,isoFields.field12.chHHMMSS+4 );
// Paddear lo restante con ceros, si corresponde, a los milisegundos....
nLength = strlen(szHHMMSS_Trx);
if(nHourLength > nLength)
memset( szHHMMSS_Trx+nLength, '0', nHourLength-nLength);
};
// Fecha de Negocios (capture date)(CAP-DATE), ISO-FIELD-17
if(szYYYYMMDD_Cap)
{
if(bFormatIsMMDDYY)
sprintf(szYYYYMMDD_Cap,pszDATE_Mask, isoFields.field17.chMMDD, isoFields.field17.chMMDD+2,
cnYearDigits , nYearPostDat );
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -