📄 lxaccount.cc
字号:
// break; // case HBCI_JOB_RESULT_SUCCESS: // cerr << "\nJobTransfer: job was successfully performed" << endl; // break; // case HBCI_JOB_RESULT_FAILED: // cerr << "\nJobTransfer: job was executed and failed" << endl; // } // check interactor state if ( (*intActor).aborted() ){ (*intActor).abort(false); // cerr << "\nStatus of Interactor: aborted! Interactor reset!" << endl; } // else{ // cerr << "\nStatus of Interactor: not aborted!" << endl; // } // check job result if ( (*transferJob).result() == HBCI_JOB_RESULT_SUCCESS ){ cerr << "\nMoney Transfer job has been performed successfully!" << endl; // cerr << "\nSave HBCI stuff!" << endl; hbciApi->save(); HBCI::Transaction procTransaction ( transaction ); // set execution date QDate today ( QDate::currentDate () ); HBCI::Date todayHBCI ( today.day(), today.month(), today.year() ); procTransaction.setValutaDate ( todayHBCI ); LxRemittance *prm = new LxRemittance ( this, procTransaction, LxRemittance::processed ); removeRemittance ( rm ); addRemittance ( prm ); }else{ cerr << "\nMoney Transfer job has not been performed successfully!" << endl; } // clear queue list<HBCI::Pointer<HBCI::OutboxJob> > qjobs = hbciApi->queuedJobs (); list<HBCI::Pointer<HBCI::OutboxJob> >::iterator jb; // cerr << "\nClear queue!\n\nNumber of queued jobs = " << qjobs.size() << endl; for ( jb = qjobs.begin(); jb != qjobs.end(); ++jb){ hbciApi->removeQueuedJob ( *jb ); } // qjobs = hbciApi->queuedJobs (); // cerr << "\nNumber of queued jobs = " << qjobs.size() << endl;}int LxAccount::checkForBank (unsigned long blz){ int nbanks; const BankCodeVec & banksOfBLZ = hbciApi->getBanks (blz); nbanks = banksOfBLZ.size(); return nbanks;}AccountNumberCheck::Result LxAccount::checkForAccount (const QString &blz, const QString &acc, string &met){ AccountNumberCheck::Result result; met = ""; const BankCodeVec & banksOfBLZ = hbciApi->getBanks (blz); if ( banksOfBLZ.empty() ){ result = AccountNumberCheck::BANK_NOT_KNOWN; return result; }// AccountNumberCheck checker("/home/franz/progs/HBCI/lxbank/lib/LxBank/ktoblzcheckblz.txt"); AccountNumberCheck checker(KTOBLZFILE); const LxBankCodeData &bcdat = banksOfBLZ.front(); string methode(bcdat.getPZmethode()); if ( methode == "09" ){ met = methode; result = AccountNumberCheck::UNKNOWN; return result; } if ( methode == "A1" ){ met = methode; result = AccountNumberCheck::UNKNOWN; return result; } string blzStr(blz.latin1()); string accStr(acc.latin1()); result = checker.check(blzStr, accStr, methode); switch (result){ case AccountNumberCheck::OK: met = methode; result = AccountNumberCheck::OK; break; case AccountNumberCheck::UNKNOWN: met = methode; result = AccountNumberCheck::UNKNOWN; break; case AccountNumberCheck::ERROR: met = methode; result = AccountNumberCheck::ERROR; break; case AccountNumberCheck::BANK_NOT_KNOWN: result = AccountNumberCheck::BANK_NOT_KNOWN; } return result;}void LxAccount::initAccount(){ if ( !(hbciAccount.isValid()) ){ return; } // we have an valid account HBCI::Pointer<HBCI::Bank> bank = (*hbciAccount).bank(); if ( !(bank.isValid()) ) { return; } // we have a valid bank // account config file name accConfigFile = hbciApi->getConfigDir() + "/account_" + (*bank).bankCode() + "_" + (*hbciAccount).accountId(); currRemConfigFile = accConfigFile + "_current_remittances"; procRemConfigFile = accConfigFile + "_processed_remittances"; // load account configuration loadAccountConfig ( ); loadCurrentRemittances ( ); loadProcessedRemittances ( ); // currency currency = (*hbciAccount).currency().c_str(); // BANK institut = (*bank).name().c_str(); // BLZ bankLeitZahl = (*bank).bankCode().c_str(); // country code country = (*bank).countryCode (); // KONTONUMMER kontoNummer = (*hbciAccount).accountId().c_str(); // KONTONAME accountName = (*hbciAccount).accountName().c_str(); // KONTOINHABER inhaber = (*hbciAccount).name1().c_str(); // DATUMLETZTERAUSZUG // KONTOSTAND updateAccountData();}void LxAccount::updateAccountData(){ if ( !(hbciAccount.isValid()) ){ return; } // we have an valid account // update last account statement date if ( lastUpdated.isValid () ){ QDate tmpDate ( lastUpdated.year(), lastUpdated.month(), lastUpdated.day()); lastUpdatedStr = tmpDate.toString (); }else{ lastUpdatedStr = "\0"; } // update balance HBCI::AccountBalance accBal = (*hbciAccount).balance(); HBCI::Balance bal = accBal.bookedBalance(); if ( bal.isDebit() ){// cerr << "LxAccount::updateAccountData: isDebit returns true for BLZ/account "// << bankLeitZahl << "/" << kontoNummer << "!" << endl; HBCI::Value tval = bal.value(); double accval = tval.getValue();// cerr << "accval = " << accval << endl; accval *= -1.0;// cerr << "accval = " << accval << endl; HBCI::Value val( accval, tval.getCurrency () ); kontoStand = val.toReadableString().c_str();// cerr << "kontoStand = '" << kontoStand << "'" << endl; if ( kontoStand == "-0,00" ){ kontoStand = "0,00"; } }else{// cerr << "LxAccount::updateAccountData: isDebit returns false for BLZ/account "// << bankLeitZahl << "/" << kontoNummer << "!" << endl; HBCI::Value val = bal.value(); kontoStand = val.toReadableString().c_str(); } bal = accBal.notedBalance(); HBCI::Value val = bal.value(); notedBalance = val.toReadableString().c_str();}void LxAccount::setupAccountStmtList ( ){ if ( !(hbciAccount.isValid()) ){ return; } QString skey; int count; double saldo; LxAccountStmt *acStmtItem; // get start balance const HBCI::Value &val = startingBalance.value(); saldo = val.getValue(); // obtain transactions const list<HBCI::Transaction> &transactions = (*hbciAccount).transactions(); list<HBCI::Transaction>::const_iterator trIt; accountStmtList.clear (); int sortKeyDigitCount = (int)(log10((double)transactions.size()) + 2.0); for (trIt = transactions.begin(), count = 1; trIt != transactions.end(); ++trIt, ++count){ skey.sprintf ("%0*d", sortKeyDigitCount, count); acStmtItem = new LxAccountStmt (count, skey, saldo, *trIt); saldo = acStmtItem->getSaldo (); accountStmtList.append ( acStmtItem ); } LxAccountStmt *acs; double umsatz, minUmsatz, maxUmsatz, minSaldo, maxSaldo; for (acs = accountStmtList.first(), minUmsatz = maxUmsatz = minSaldo = maxSaldo = 0.0; acs != 0; acs = accountStmtList.next()){ umsatz = acs->getUmsatz(); if ( umsatz > maxUmsatz ) maxUmsatz = umsatz; else if ( umsatz < minUmsatz ) minUmsatz = umsatz; saldo = acs->getSaldo(); if ( saldo > maxSaldo ) maxSaldo = saldo; else if ( saldo < minSaldo ) minSaldo = saldo; } int minv, maxv, minDigits, maxDigits, uDigits, uBase, sDigits, sBase; minv = (int)(minUmsatz * 100.0); if ( minv ) minDigits = ((int) log10(fabs((double)minv))) + 1; else minDigits = 1; maxv = (int)(maxUmsatz * 100.0); if ( minv ) maxDigits = ((int) log10(fabs((double)maxv))) + 1; else maxDigits = 1; if ( minDigits > maxDigits ) uDigits = minDigits + 1; else uDigits = maxDigits + 1; uBase = (int)pow(10.0, (double)(uDigits-1)); minv = (int)(minSaldo * 100.0); if ( minv ) minDigits = ((int) log10(fabs((double)minv))) + 1; else minDigits = 1; maxv = (int)(maxSaldo * 100.0); if ( minv ) maxDigits = ((int) log10(fabs((double)maxv))) + 1; else maxDigits = 1; if ( minDigits > maxDigits ) sDigits = minDigits + 1; else sDigits = maxDigits + 1; sBase = (int)pow(10.0, (double)(uDigits-1)); for (acs = accountStmtList.first(); acs != 0; acs = accountStmtList.next()){ acs->setUmsatzSortKey (uBase, uDigits, 100.0); acs->setSaldoSortKey (sBase, sDigits, 100.0); } return;}// void LxAccount::setupRemittanceLists ( )// {// // cerr << "LxAccount::setupRemittanceLists called!" << endl;// if ( remittanceListsRead ){// return;// }// currentRemittanceList.clear ();// processedRemittanceList.clear ();// QFile rm(remittanceFile);// if ( rm.open(IO_ReadOnly) ) { // file opened successfully// QStringList remittanceData;// QTextStream rmTxt( &rm ); // use a text stream// QString txtLine;// while ( !rmTxt.eof() ) { // until end of file...// txtLine = rmTxt.readLine(); // line of text excluding '\n'// if ( LxAccount::isDataLine (txtLine) ){// remittanceData.append(txtLine);// }// }// rm.close();// if ( !remittanceData.isEmpty () ){// QString skey;// QStringList::Iterator it;// int count;// LxRemittance *remittance;// LxRemittance::RemittanceStatus rmType;// for (it = remittanceData.begin(); it != remittanceData.end(); ++it){// remittance = new LxRemittance ( this, *it );// rmType = remittance->getStatus ();// switch (rmType){// case LxRemittance::current:// currentRemittanceList.append ( remittance );// break;// case LxRemittance::processed:// processedRemittanceList.append ( remittance );// break;// }// }// if ( !currentRemittanceList.isEmpty() ){// int digits = (int)(log10((double)currentRemittanceList.count()) + 2.0);// for (remittance = currentRemittanceList.first(), count = 1;// remittance != 0; remittance = currentRemittanceList.next(), ++count){// remittance->setNumberAndSortKey (count, digits);// }// }// if ( !processedRemittanceList.isEmpty() ){// int digits = (int)(log10((double)processedRemittanceList.count()) + 2.0);// for (remittance = processedRemittanceList.first(), count = 1;// remittance != 0; remittance = processedRemittanceList.next(), ++count){// remittance->setNumberAndSortKey (count, digits);// }// }// } // remittanceListsRead = true;// return;// }else{// cerr << "LxAccount::addRemittance: Unable to open file \"" << remittanceFile << "\"" << endl;// exit (1);// }// }void LxAccount::addRemittance ( LxRemittance *rm ){// if ( !remittanceListsRead ){// setupRemittanceLists ( );// } HBCI::Error err; int count, digits; LxRemittance *remittance; LxRemittance::RemittanceStatus rmType = rm->getStatus (); switch ( rmType ){ case LxRemittance::current: // insert remittance into list currentRemittanceList.append ( rm ); digits = (int)(log10((double)currentRemittanceList.count()) + 2.0); for (remittance = currentRemittanceList.first(), count = 1; remittance != 0; remittance = currentRemittanceList.next(), ++count){ remittance->setNumberAndSortKey (count, digits); } // save remittances to file err = saveCurrentRemittances (); // update the user interface emit updateCurrentRemittanceView( currentRemittanceList ); break; case LxRemittance::processed: // insert remittance into list processedRemittanceList.append ( rm ); digits = (int)(log10((double)processedRemittanceList.count()) + 2.0); for (remittance = processedRemittanceList.first(), count = 1; remittance != 0; remittance = processedRemittanceList.next(), ++count){ remittance->setNumberAndSortKey (count, digits); } // save remittances to file err = saveProcessedRemittances (); // update the user interface emit updateProcessedRemittanceView( processedRemittanceList ); break; }}void LxAccount::modifyRemittance ( LxRemittance *rm, LxRemittance *rmm ){// if ( !remittanceListsRead ){// setupRemittanceLists ( );// } HBCI::Error err; int index, count, digits;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -