LibOFX
|
00001 /*************************************************************************** 00002 ofx_container_statement.cpp 00003 ------------------- 00004 copyright : (C) 2002 by Benoit Gr�goire 00005 email : benoitg@coeus.ca 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 <string> 00025 #include "messages.hh" 00026 #include "libofx.h" 00027 #include "ofx_containers.hh" 00028 #include "ofx_utilities.hh" 00029 00030 extern OfxMainContainer * MainContainer; 00031 00032 /*************************************************************************** 00033 * OfxStatementContainer * 00034 ***************************************************************************/ 00035 00036 OfxStatementContainer::OfxStatementContainer(LibofxContext *p_libofx_context, OfxGenericContainer *para_parentcontainer, string para_tag_identifier): 00037 OfxGenericContainer(p_libofx_context, para_parentcontainer, para_tag_identifier) 00038 { 00039 memset(&data, 0, sizeof(data)); 00040 type = "STATEMENT"; 00041 } 00042 OfxStatementContainer::~OfxStatementContainer() 00043 { 00044 /* while(transaction_queue.empty()!=true) 00045 { 00046 ofx_proc_transaction_cb(transaction_queue.front()); 00047 transaction_queue.pop(); 00048 }*/ 00049 } 00050 void OfxStatementContainer::add_attribute(const string identifier, const string value) 00051 { 00052 if (identifier == "CURDEF") 00053 { 00054 strncpy(data.currency, value.c_str(), OFX_CURRENCY_LENGTH); 00055 data.currency_valid = true; 00056 } 00057 else if (identifier == "MKTGINFO") 00058 { 00059 strncpy(data.marketing_info, value.c_str(), OFX_MARKETING_INFO_LENGTH); 00060 data.marketing_info_valid = true; 00061 } 00062 else if (identifier == "DTSTART") 00063 { 00064 data.date_start = ofxdate_to_time_t(value); 00065 data.date_start_valid = true; 00066 } 00067 else if (identifier == "DTEND") 00068 { 00069 data.date_end = ofxdate_to_time_t(value); 00070 data.date_end_valid = true; 00071 } 00072 else 00073 { 00074 OfxGenericContainer::add_attribute(identifier, value); 00075 } 00076 }//end OfxStatementContainer::add_attribute() 00077 00078 void OfxStatementContainer::add_balance(OfxBalanceContainer* ptr_balance_container) 00079 { 00080 if (ptr_balance_container->tag_identifier == "LEDGERBAL") 00081 { 00082 data.ledger_balance = ptr_balance_container->amount; 00083 data.ledger_balance_valid = ptr_balance_container->amount_valid; 00084 } 00085 else if (ptr_balance_container->tag_identifier == "AVAILBAL") 00086 { 00087 data.available_balance = ptr_balance_container->amount; 00088 data.available_balance_valid = ptr_balance_container->amount_valid; 00089 } 00090 else 00091 { 00092 message_out(ERROR, "OfxStatementContainer::add_balance(): the balance has unknown tag_identifier: " + ptr_balance_container->tag_identifier); 00093 } 00094 } 00095 00096 00097 int OfxStatementContainer::add_to_main_tree() 00098 { 00099 if (MainContainer != NULL) 00100 { 00101 return MainContainer->add_container(this); 00102 } 00103 else 00104 { 00105 return false; 00106 } 00107 } 00108 00109 int OfxStatementContainer::gen_event() 00110 { 00111 libofx_context->statementCallback(data); 00112 return true; 00113 } 00114 00115 00116 void OfxStatementContainer::add_account(OfxAccountData * account_data) 00117 { 00118 if (account_data->account_id_valid == true) 00119 { 00120 data.account_ptr = account_data; 00121 strncpy(data.account_id, account_data->account_id, OFX_ACCOUNT_ID_LENGTH); 00122 data.account_id_valid = true; 00123 } 00124 } 00125 /*void OfxStatementContainer::add_transaction(const OfxTransactionData transaction_data) 00126 { 00127 transaction_queue.push(transaction_data); 00128 }*/