LibOFX
|
00001 /*************************************************************************** 00002 ofx_request_statement.cpp 00003 ------------------- 00004 copyright : (C) 2005 by Ace Jones 00005 email : acejones@users.sourceforge.net 00006 ***************************************************************************/ 00011 /*************************************************************************** 00012 * * 00013 * This program is free software; you can redistribute it and/or modify * 00014 * it under the terms of the GNU General Public License as published by * 00015 * the Free Software Foundation; either version 2 of the License, or * 00016 * (at your option) any later version. * 00017 * * 00018 ***************************************************************************/ 00019 00020 #ifdef HAVE_CONFIG_H 00021 #include <config.h> 00022 #endif 00023 00024 #include <cstdlib> 00025 #include <string> 00026 #include "libofx.h" 00027 #include "ofx_utilities.hh" 00028 #include "ofx_request_statement.hh" 00029 00030 using namespace std; 00031 00032 char* libofx_request_statement( const OfxFiLogin* login, const OfxAccountData* account, time_t date_from ) 00033 { 00034 OfxStatementRequest strq( *login, *account, date_from ); 00035 string request = OfxHeader(login->header_version) + strq.Output(); 00036 00037 unsigned size = request.size(); 00038 char* result = (char*)malloc(size + 1); 00039 request.copy(result, size); 00040 result[size] = 0; 00041 00042 return result; 00043 } 00044 00045 OfxStatementRequest::OfxStatementRequest( const OfxFiLogin& fi, const OfxAccountData& account, time_t from ): 00046 OfxRequest(fi), 00047 m_account(account), 00048 m_date_from(from) 00049 { 00050 Add( SignOnRequest() ); 00051 00052 if ( account.account_type == account.OFX_CREDITCARD ) 00053 Add(CreditCardStatementRequest()); 00054 else if ( account.account_type == account.OFX_INVESTMENT ) 00055 Add(InvestmentStatementRequest()); 00056 else 00057 Add(BankStatementRequest()); 00058 } 00059 00060 OfxAggregate OfxStatementRequest::BankStatementRequest(void) const 00061 { 00062 OfxAggregate bankacctfromTag("BANKACCTFROM"); 00063 bankacctfromTag.Add( "BANKID", m_account.bank_id ); 00064 bankacctfromTag.Add( "ACCTID", m_account.account_number ); 00065 if ( m_account.account_type == m_account.OFX_CHECKING ) 00066 bankacctfromTag.Add( "ACCTTYPE", "CHECKING" ); 00067 else if ( m_account.account_type == m_account.OFX_SAVINGS ) 00068 bankacctfromTag.Add( "ACCTTYPE", "SAVINGS" ); 00069 else if ( m_account.account_type == m_account.OFX_MONEYMRKT ) 00070 bankacctfromTag.Add( "ACCTTYPE", "MONEYMRKT" ); 00071 else if ( m_account.account_type == m_account.OFX_CREDITLINE ) 00072 bankacctfromTag.Add( "ACCTTYPE", "CREDITLINE" ); 00073 else if ( m_account.account_type == m_account.OFX_CMA ) 00074 bankacctfromTag.Add( "ACCTTYPE", "CMA" ); 00075 00076 OfxAggregate inctranTag("INCTRAN"); 00077 inctranTag.Add( "DTSTART", time_t_to_ofxdate( m_date_from ) ); 00078 inctranTag.Add( "INCLUDE", "Y" ); 00079 00080 OfxAggregate stmtrqTag("STMTRQ"); 00081 stmtrqTag.Add( bankacctfromTag ); 00082 stmtrqTag.Add( inctranTag ); 00083 00084 return RequestMessage("BANK", "STMT", stmtrqTag); 00085 } 00086 00087 OfxAggregate OfxStatementRequest::CreditCardStatementRequest(void) const 00088 { 00089 /* 00090 QString dtstart_string = _dtstart.toString(Qt::ISODate).remove(QRegExp("[^0-9]")); 00091 00092 return message("CREDITCARD","CCSTMT",Tag("CCSTMTRQ") 00093 .subtag(Tag("CCACCTFROM").element("ACCTID",accountnum())) 00094 .subtag(Tag("INCTRAN").element("DTSTART",dtstart_string).element("INCLUDE","Y"))); 00095 } 00096 */ 00097 OfxAggregate ccacctfromTag("CCACCTFROM"); 00098 ccacctfromTag.Add( "ACCTID", m_account.account_number ); 00099 00100 OfxAggregate inctranTag("INCTRAN"); 00101 inctranTag.Add( "DTSTART", time_t_to_ofxdate( m_date_from ) ); 00102 inctranTag.Add( "INCLUDE", "Y" ); 00103 00104 OfxAggregate ccstmtrqTag("CCSTMTRQ"); 00105 ccstmtrqTag.Add( ccacctfromTag ); 00106 ccstmtrqTag.Add( inctranTag ); 00107 00108 return RequestMessage("CREDITCARD", "CCSTMT", ccstmtrqTag); 00109 } 00110 00111 OfxAggregate OfxStatementRequest::InvestmentStatementRequest(void) const 00112 { 00113 OfxAggregate invacctfromTag("INVACCTFROM"); 00114 00115 invacctfromTag.Add( "BROKERID", m_account.broker_id ); 00116 invacctfromTag.Add( "ACCTID", m_account.account_number ); 00117 00118 OfxAggregate inctranTag("INCTRAN"); 00119 inctranTag.Add( "DTSTART", time_t_to_ofxdate( m_date_from ) ); 00120 inctranTag.Add( "INCLUDE", "Y" ); 00121 00122 OfxAggregate incposTag("INCPOS"); 00123 incposTag.Add( "DTASOF", time_t_to_ofxdatetime( time(NULL) ) ); 00124 incposTag.Add( "INCLUDE", "Y" ); 00125 00126 OfxAggregate invstmtrqTag("INVSTMTRQ"); 00127 invstmtrqTag.Add( invacctfromTag ); 00128 invstmtrqTag.Add( inctranTag ); 00129 invstmtrqTag.Add( "INCOO", "Y" ); 00130 invstmtrqTag.Add( incposTag ); 00131 invstmtrqTag.Add( "INCBAL", "Y" ); 00132 00133 return RequestMessage("INVSTMT", "INVSTMT", invstmtrqTag); 00134 } 00135 00136 char* libofx_request_payment( const OfxFiLogin* login, const OfxAccountData* account, const OfxPayee* payee, const OfxPayment* payment ) 00137 { 00138 OfxPaymentRequest strq( *login, *account, *payee, *payment ); 00139 string request = OfxHeader(login->header_version) + strq.Output(); 00140 00141 unsigned size = request.size(); 00142 char* result = (char*)malloc(size + 1); 00143 request.copy(result, size); 00144 result[size] = 0; 00145 00146 return result; 00147 } 00148 00149 OfxPaymentRequest::OfxPaymentRequest( const OfxFiLogin& fi, const OfxAccountData& account, const OfxPayee& payee, const OfxPayment& payment ): 00150 OfxRequest(fi), 00151 m_account(account), 00152 m_payee(payee), 00153 m_payment(payment) 00154 { 00155 Add( SignOnRequest() ); 00156 00157 OfxAggregate bankacctfromTag("BANKACCTFROM"); 00158 bankacctfromTag.Add( "BANKID", m_account.bank_id ); 00159 bankacctfromTag.Add( "ACCTID", m_account.account_number ); 00160 if ( m_account.account_type == m_account.OFX_CHECKING) 00161 bankacctfromTag.Add( "ACCTTYPE", "CHECKING" ); 00162 else if ( m_account.account_type == m_account.OFX_SAVINGS ) 00163 bankacctfromTag.Add( "ACCTTYPE", "SAVINGS" ); 00164 else if ( m_account.account_type == m_account.OFX_MONEYMRKT ) 00165 bankacctfromTag.Add( "ACCTTYPE", "MONEYMRKT" ); 00166 else if ( m_account.account_type == m_account.OFX_CREDITLINE ) 00167 bankacctfromTag.Add( "ACCTTYPE", "CREDITLINE" ); 00168 else if ( m_account.account_type == m_account.OFX_CMA ) 00169 bankacctfromTag.Add( "ACCTTYPE", "CMA" ); 00170 00171 OfxAggregate payeeTag("PAYEE"); 00172 payeeTag.Add( "NAME", m_payee.name ); 00173 payeeTag.Add( "ADDR1", m_payee.address1 ); 00174 payeeTag.Add( "CITY", m_payee.city ); 00175 payeeTag.Add( "STATE", m_payee.state ); 00176 payeeTag.Add( "POSTALCODE", m_payee.postalcode ); 00177 payeeTag.Add( "PHONE", m_payee.phone ); 00178 00179 OfxAggregate pmtinfoTag("PMTINFO"); 00180 pmtinfoTag.Add( bankacctfromTag ); 00181 pmtinfoTag.Add( "TRNAMT", m_payment.amount ); 00182 pmtinfoTag.Add( payeeTag ); 00183 pmtinfoTag.Add( "PAYACCT", m_payment.account ); 00184 pmtinfoTag.Add( "DTDUE", m_payment.datedue ); 00185 pmtinfoTag.Add( "MEMO", m_payment.memo ); 00186 00187 OfxAggregate pmtrqTag("PMTRQ"); 00188 pmtrqTag.Add( pmtinfoTag ); 00189 00190 Add( RequestMessage("BILLPAY", "PMT", pmtrqTag) ); 00191 } 00192 00193 char* libofx_request_payment_status( const struct OfxFiLogin* login, const char* transactionid ) 00194 { 00195 #if 0 00196 OfxAggregate pmtinqrqTag( "PMTINQRQ" ); 00197 pmtinqrqTag.Add( "SRVRTID", transactionid ); 00198 00199 OfxRequest ofx(*login); 00200 ofx.Add( ofx.SignOnRequest() ); 00201 ofx.Add( ofx.RequestMessage("BILLPAY", "PMTINQ", pmtinqrqTag) ); 00202 00203 string request = OfxHeader() + ofx.Output(); 00204 00205 unsigned size = request.size(); 00206 char* result = (char*)malloc(size + 1); 00207 request.copy(result, size); 00208 result[size] = 0; 00209 #else 00210 OfxAggregate payeesyncrq( "PAYEESYNCRQ" ); 00211 payeesyncrq.Add( "TOKEN", "0" ); 00212 payeesyncrq.Add( "TOKENONLY", "N" ); 00213 payeesyncrq.Add( "REFRESH", "Y" ); 00214 payeesyncrq.Add( "REJECTIFMISSING", "N" ); 00215 00216 OfxAggregate message( "BILLPAYMSGSRQV1" ); 00217 message.Add( payeesyncrq ); 00218 00219 OfxRequest ofx(*login); 00220 ofx.Add( ofx.SignOnRequest() ); 00221 ofx.Add( message ); 00222 00223 string request = OfxHeader(login->header_version) + ofx.Output(); 00224 00225 unsigned size = request.size(); 00226 char* result = (char*)malloc(size + 1); 00227 request.copy(result, size); 00228 result[size] = 0; 00229 00230 #endif 00231 return result; 00232 } 00233 00234 // vim:cin:si:ai:et:ts=2:sw=2: 00235