LibOFX
|
00001 /*************************************************************************** 00002 ofx_container_account.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 * OfxAccountContainer * 00034 ***************************************************************************/ 00035 00036 OfxAccountContainer::OfxAccountContainer(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 = "ACCOUNT"; 00041 strcpy(bankid, ""); 00042 strcpy(branchid, ""); 00043 strcpy(acctid, ""); 00044 strcpy(acctkey, ""); 00045 strcpy(brokerid, ""); 00046 if (para_tag_identifier == "CCACCTFROM") 00047 { 00048 /*Set the type for a creditcard account. Bank account specific 00049 OFX elements will set this attribute elsewhere */ 00050 data.account_type = data.OFX_CREDITCARD; 00051 data.account_type_valid = true; 00052 } 00053 if (para_tag_identifier == "INVACCTFROM") 00054 { 00055 /*Set the type for an investment account. Bank account specific 00056 OFX elements will set this attribute elsewhere */ 00057 data.account_type = data.OFX_INVESTMENT; 00058 data.account_type_valid = true; 00059 } 00060 if (parentcontainer != NULL && ((OfxStatementContainer*)parentcontainer)->data.currency_valid == true) 00061 { 00062 strncpy(data.currency, ((OfxStatementContainer*)parentcontainer)->data.currency, OFX_CURRENCY_LENGTH); /* In ISO-4217 format */ 00063 data.currency_valid = true; 00064 } 00065 } 00066 OfxAccountContainer::~OfxAccountContainer() 00067 { 00068 /* if (parentcontainer->type == "STATEMENT") 00069 { 00070 ((OfxStatementContainer*)parentcontainer)->add_account(data); 00071 } 00072 ofx_proc_account_cb (data);*/ 00073 } 00074 00075 void OfxAccountContainer::add_attribute(const string identifier, const string value) 00076 { 00077 if ( identifier == "BANKID") 00078 { 00079 strncpy(bankid, value.c_str(), OFX_BANKID_LENGTH); 00080 data.bank_id_valid = true; 00081 strncpy(data.bank_id, value.c_str(), OFX_BANKID_LENGTH); 00082 } 00083 else if ( identifier == "BRANCHID") 00084 { 00085 strncpy(branchid, value.c_str(), OFX_BRANCHID_LENGTH); 00086 data.branch_id_valid = true; 00087 strncpy(data.branch_id, value.c_str(), OFX_BRANCHID_LENGTH); 00088 } 00089 else if ( identifier == "ACCTID") 00090 { 00091 strncpy(acctid, value.c_str(), OFX_ACCTID_LENGTH); 00092 data.account_number_valid = true; 00093 strncpy(data.account_number, value.c_str(), OFX_ACCTID_LENGTH); 00094 } 00095 else if ( identifier == "ACCTKEY") 00096 { 00097 strncpy(acctkey, value.c_str(), OFX_ACCTKEY_LENGTH); 00098 } 00099 else if ( identifier == "BROKERID") /* For investment accounts */ 00100 { 00101 strncpy(brokerid, value.c_str(), OFX_BROKERID_LENGTH); 00102 data.broker_id_valid = true; 00103 strncpy(data.broker_id, value.c_str(), OFX_BROKERID_LENGTH); 00104 } 00105 else if ((identifier == "ACCTTYPE") || (identifier == "ACCTTYPE2")) 00106 { 00107 data.account_type_valid = true; 00108 if (value == "CHECKING") 00109 { 00110 data.account_type = data.OFX_CHECKING; 00111 } 00112 else if (value == "SAVINGS") 00113 { 00114 data.account_type = data.OFX_SAVINGS; 00115 } 00116 else if (value == "MONEYMRKT") 00117 { 00118 data.account_type = data.OFX_MONEYMRKT; 00119 } 00120 else if (value == "CREDITLINE") 00121 { 00122 data.account_type = data.OFX_CREDITLINE; 00123 } 00124 else if (value == "CMA") 00125 { 00126 data.account_type = data.OFX_CMA; 00127 } 00128 /* AccountType CREDITCARD is set at object creation, if appropriate */ 00129 else 00130 { 00131 data.account_type_valid = false; 00132 } 00133 } 00134 else 00135 { 00136 /* Redirect unknown identifiers to the base class */ 00137 OfxGenericContainer::add_attribute(identifier, value); 00138 } 00139 }//end OfxAccountContainer::add_attribute() 00140 00141 int OfxAccountContainer::gen_event() 00142 { 00143 libofx_context->accountCallback(data); 00144 return true; 00145 } 00146 00147 int OfxAccountContainer::add_to_main_tree() 00148 { 00149 gen_account_id (); 00150 00151 if (MainContainer != NULL) 00152 { 00153 return MainContainer->add_container(this); 00154 } 00155 else 00156 { 00157 return false; 00158 } 00159 } 00160 00161 void OfxAccountContainer::gen_account_id(void) 00162 { 00163 if (data.account_type == OfxAccountData::OFX_CREDITCARD) 00164 { 00165 strncat(data.account_id, acctid, OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00166 strncat(data.account_id, " ", OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00167 strncat(data.account_id, acctkey, OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00168 00169 strncat(data.account_name, "Credit card ", OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00170 strncat(data.account_name, acctid, OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00171 } 00172 else if (data.account_type == OfxAccountData::OFX_INVESTMENT) 00173 { 00174 strncat(data.account_id, brokerid, OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00175 strncat(data.account_id, " ", OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00176 strncat(data.account_id, acctid, OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00177 00178 strncat(data.account_name, "Investment account ", OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00179 strncat(data.account_name, acctid, OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00180 strncat(data.account_name, " at broker ", OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00181 strncat(data.account_name, brokerid, OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00182 } 00183 else 00184 { 00185 strncat(data.account_id, bankid, OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00186 strncat(data.account_id, " ", OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00187 strncat(data.account_id, branchid, OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00188 strncat(data.account_id, " ", OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00189 strncat(data.account_id, acctid, OFX_ACCOUNT_ID_LENGTH - strlen(data.account_id)); 00190 00191 strncat(data.account_name, "Bank account ", OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00192 strncat(data.account_name, acctid, OFX_ACCOUNT_NAME_LENGTH - strlen(data.account_name)); 00193 } 00194 //if (strlen(data.account_id) >= 0) // The strlen() is always non-negative 00195 { 00196 data.account_id_valid = true; 00197 } 00198 }//end OfxAccountContainer::gen_account_id()