31char* libofx_request_statement(
const OfxFiLogin* login,
const OfxAccountData* account, time_t date_from )
34 std::string request = OfxHeader(login->header_version) + strq.Output();
36 unsigned size = request.size();
37 char* result = (
char*)malloc(size + 1);
38 request.copy(result, size);
51 if ( account.account_type == account.OFX_CREDITCARD )
53 else if ( account.account_type == account.OFX_INVESTMENT || account.account_type == account.OFX_401K)
62 bankacctfromTag.
Add(
"BANKID", m_account.bank_id );
63 bankacctfromTag.
Add(
"ACCTID", m_account.account_number );
64 if ( m_account.account_type == m_account.OFX_CHECKING )
65 bankacctfromTag.
Add(
"ACCTTYPE",
"CHECKING" );
66 else if ( m_account.account_type == m_account.OFX_SAVINGS )
67 bankacctfromTag.
Add(
"ACCTTYPE",
"SAVINGS" );
68 else if ( m_account.account_type == m_account.OFX_MONEYMRKT )
69 bankacctfromTag.
Add(
"ACCTTYPE",
"MONEYMRKT" );
70 else if ( m_account.account_type == m_account.OFX_CREDITLINE )
71 bankacctfromTag.
Add(
"ACCTTYPE",
"CREDITLINE" );
72 else if ( m_account.account_type == m_account.OFX_CMA )
73 bankacctfromTag.
Add(
"ACCTTYPE",
"CMA" );
76 inctranTag.
Add(
"DTSTART", time_t_to_ofxdate( m_date_from ) );
77 inctranTag.
Add(
"INCLUDE",
"Y" );
80 stmtrqTag.
Add( bankacctfromTag );
81 stmtrqTag.
Add( inctranTag );
97 ccacctfromTag.
Add(
"ACCTID", m_account.account_number );
100 inctranTag.
Add(
"DTSTART", time_t_to_ofxdate( m_date_from ) );
101 inctranTag.
Add(
"INCLUDE",
"Y" );
104 ccstmtrqTag.
Add( ccacctfromTag );
105 ccstmtrqTag.
Add( inctranTag );
114 invacctfromTag.
Add(
"BROKERID", m_account.broker_id );
115 invacctfromTag.
Add(
"ACCTID", m_account.account_number );
118 inctranTag.
Add(
"DTSTART", time_t_to_ofxdate( m_date_from ) );
119 inctranTag.
Add(
"INCLUDE",
"Y" );
122 incposTag.
Add(
"DTASOF", time_t_to_ofxdatetime( time(NULL) ) );
123 incposTag.
Add(
"INCLUDE",
"Y" );
126 invstmtrqTag.
Add( invacctfromTag );
127 invstmtrqTag.
Add( inctranTag );
128 invstmtrqTag.
Add(
"INCOO",
"Y" );
129 invstmtrqTag.
Add( incposTag );
130 invstmtrqTag.
Add(
"INCBAL",
"Y" );
131 if (m_account.account_type == OfxAccountData::OFX_401K)
133 invstmtrqTag.
AddXml(
"INC401K",
"Y" );
134 invstmtrqTag.
AddXml(
"INC401KBAL",
"Y" );
140char* libofx_request_payment(
const OfxFiLogin* login,
const OfxAccountData* account,
const OfxPayee* payee,
const OfxPayment* payment )
143 std::string request = OfxHeader(login->header_version) + strq.Output();
145 unsigned size = request.size();
146 char* result = (
char*)malloc(size + 1);
147 request.copy(result, size);
162 bankacctfromTag.
Add(
"BANKID", m_account.bank_id );
163 bankacctfromTag.
Add(
"ACCTID", m_account.account_number );
164 if ( m_account.account_type == m_account.OFX_CHECKING)
165 bankacctfromTag.
Add(
"ACCTTYPE",
"CHECKING" );
166 else if ( m_account.account_type == m_account.OFX_SAVINGS )
167 bankacctfromTag.
Add(
"ACCTTYPE",
"SAVINGS" );
168 else if ( m_account.account_type == m_account.OFX_MONEYMRKT )
169 bankacctfromTag.
Add(
"ACCTTYPE",
"MONEYMRKT" );
170 else if ( m_account.account_type == m_account.OFX_CREDITLINE )
171 bankacctfromTag.
Add(
"ACCTTYPE",
"CREDITLINE" );
172 else if ( m_account.account_type == m_account.OFX_CMA )
173 bankacctfromTag.
Add(
"ACCTTYPE",
"CMA" );
176 payeeTag.
Add(
"NAME", m_payee.name );
177 payeeTag.
Add(
"ADDR1", m_payee.address1 );
178 payeeTag.
Add(
"CITY", m_payee.city );
179 payeeTag.
Add(
"STATE", m_payee.state );
180 payeeTag.
Add(
"POSTALCODE", m_payee.postalcode );
181 payeeTag.
Add(
"PHONE", m_payee.phone );
184 pmtinfoTag.
Add( bankacctfromTag );
185 pmtinfoTag.
Add(
"TRNAMT", m_payment.amount );
186 pmtinfoTag.
Add( payeeTag );
187 pmtinfoTag.
Add(
"PAYACCT", m_payment.account );
188 pmtinfoTag.
Add(
"DTDUE", m_payment.datedue );
189 pmtinfoTag.
Add(
"MEMO", m_payment.memo );
192 pmtrqTag.
Add( pmtinfoTag );
197char* libofx_request_payment_status(
const struct OfxFiLogin* login,
const char* transactionid )
201 pmtinqrqTag.Add(
"SRVRTID", transactionid );
204 ofx.Add( ofx.SignOnRequest() );
205 ofx.Add( ofx.RequestMessage(
"BILLPAY",
"PMTINQ", pmtinqrqTag) );
207 std::string request = OfxHeader() + ofx.Output();
209 unsigned size = request.size();
210 char* result = (
char*)malloc(size + 1);
211 request.copy(result, size);
215 payeesyncrq.Add(
"TOKEN",
"0" );
216 payeesyncrq.Add(
"TOKENONLY",
"N" );
217 payeesyncrq.Add(
"REFRESH",
"Y" );
218 payeesyncrq.Add(
"REJECTIFMISSING",
"N" );
221 message.Add( payeesyncrq );
224 ofx.Add( ofx.SignOnRequest() );
227 std::string request = OfxHeader(login->header_version) + ofx.Output();
229 unsigned size = request.size();
230 char* result = (
char*)malloc(size + 1);
231 request.copy(result, size);
A single aggregate as described in the OFX 1.02 specification.
void Add(const std::string &tag, const std::string &data)
void AddXml(const std::string &tag, const std::string &data)
OfxAggregate(const std::string &tag)
OfxPaymentRequest(const OfxFiLogin &fi, const OfxAccountData &account, const OfxPayee &payee, const OfxPayment &payment)
OfxAggregate SignOnRequest(void) const
OfxAggregate RequestMessage(const std::string &msgtype, const std::string &trntype, const OfxAggregate &aggregate) const
OfxRequest(const OfxFiLogin &fi)
OfxStatementRequest(const OfxFiLogin &fi, const OfxAccountData &account, time_t from)
OfxAggregate CreditCardStatementRequest(void) const
OfxAggregate InvestmentStatementRequest(void) const
OfxAggregate BankStatementRequest(void) const
Declaration of libofx_request_statement to create an OFX file containing a request for a statement.
Various simple functions for type conversion & al.