LibOFX
ofx_container_account.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  ofx_container_account.cpp
3  -------------------
4  copyright : (C) 2002 by Benoit Gr�goire
5  email : benoitg@coeus.ca
6 ***************************************************************************/
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23 
24 #include <string>
25 #include "messages.hh"
26 #include "libofx.h"
27 #include "ofx_containers.hh"
28 #include "ofx_utilities.hh"
29 
30 extern OfxMainContainer * MainContainer;
31 
32 /***************************************************************************
33  * OfxAccountContainer *
34  ***************************************************************************/
35 
36 OfxAccountContainer::OfxAccountContainer(LibofxContext *p_libofx_context, OfxGenericContainer *para_parentcontainer, std::string para_tag_identifier):
37  OfxGenericContainer(p_libofx_context, para_parentcontainer, para_tag_identifier)
38 {
39  memset(&data, 0, sizeof(data));
40  type = "ACCOUNT";
41  if (para_tag_identifier == "CCACCTFROM")
42  {
43  /*Set the type for a creditcard account. Bank account specific
44  OFX elements will set this attribute elsewhere */
45  ASSIGN(data.account_type, data.OFX_CREDITCARD);
46  }
47  if (para_tag_identifier == "INVACCTFROM")
48  {
49  /*Set the type for an investment account. Bank account specific
50  OFX elements will set this attribute elsewhere */
51  ASSIGN(data.account_type, data.OFX_INVESTMENT);
52  }
53  if (parentcontainer != NULL
54  && parentcontainer->type == "STATEMENT"
55  && ((OfxStatementContainer*)parentcontainer)->data.currency_valid == true)
56  {
57  ASSIGN_STRNCPY(data.currency, std::string(((OfxStatementContainer*)parentcontainer)->data.currency));
58  }
59 }
60 OfxAccountContainer::~OfxAccountContainer()
61 {
62  /* if (parentcontainer->type == "STATEMENT")
63  {
64  ((OfxStatementContainer*)parentcontainer)->add_account(data);
65  }
66  ofx_proc_account_cb (data);*/
67 }
68 
69 void OfxAccountContainer::add_attribute(const std::string identifier, const std::string value)
70 {
71  if ( identifier == "BANKID")
72  {
73  m_bankid = value;
74  ASSIGN_STRNCPY(data.bank_id, value);
75  }
76  else if ( identifier == "BRANCHID")
77  {
78  m_branchid = value;
79  ASSIGN_STRNCPY(data.branch_id, value);
80  }
81  else if ( identifier == "ACCTID")
82  {
83  m_acctid = value;
84  ASSIGN_STRNCPY(data.account_number, value);
85  }
86  else if ( identifier == "ACCTKEY")
87  {
88  m_acctkey = value;
89  }
90  else if ( identifier == "BROKERID") /* For investment accounts */
91  {
92  m_brokerid = value;
93  ASSIGN_STRNCPY(data.broker_id, value);
94  }
95  else if ((identifier == "ACCTTYPE") || (identifier == "ACCTTYPE2"))
96  {
97  data.account_type_valid = true;
98  if (value == "CHECKING")
99  {
100  data.account_type = data.OFX_CHECKING;
101  }
102  else if (value == "SAVINGS")
103  {
104  data.account_type = data.OFX_SAVINGS;
105  }
106  else if (value == "MONEYMRKT")
107  {
108  data.account_type = data.OFX_MONEYMRKT;
109  }
110  else if (value == "CREDITLINE")
111  {
112  data.account_type = data.OFX_CREDITLINE;
113  }
114  else if (value == "CMA")
115  {
116  data.account_type = data.OFX_CMA;
117  }
118  /* AccountType CREDITCARD is set at object creation, if appropriate */
119  else
120  {
121  data.account_type_valid = false;
122  }
123  }
124  else
125  {
126  /* Redirect unknown identifiers to the base class */
127  OfxGenericContainer::add_attribute(identifier, value);
128  }
129 }//end OfxAccountContainer::add_attribute()
130 
132 {
133  libofx_context->accountCallback(data);
134  return true;
135 }
136 
138 {
139  gen_account_id ();
140 
141  if (MainContainer != NULL)
142  {
143  return MainContainer->add_container(this);
144  }
145  else
146  {
147  return false;
148  }
149 }
150 
151 void OfxAccountContainer::gen_account_id(void)
152 {
153  if (data.account_type == OfxAccountData::OFX_CREDITCARD)
154  {
155  STRNCPY(data.account_id, std::string(data.account_id) + m_acctid + " " + m_acctkey);
156  STRNCPY(data.account_name, std::string(data.account_name) + "Credit card " + m_acctid);
157  }
158  else if (data.account_type == OfxAccountData::OFX_INVESTMENT)
159  {
160  STRNCPY(data.account_id, std::string(data.account_id) + m_brokerid + " " + m_acctid);
161  STRNCPY(data.account_name, std::string(data.account_name) + "Investment account " +
162  m_acctid + " at broker " + m_brokerid);
163  }
164  else
165  {
166  STRNCPY(data.account_id, std::string(data.account_id) + m_bankid + " " + m_branchid + " " + m_acctid);
167  STRNCPY(data.account_name, std::string(data.account_name) + "Bank account " + m_acctid);
168  }
169  data.account_id_valid = true;
170 }//end OfxAccountContainer::gen_account_id()
A generic container for an OFX SGML element. Every container inherits from OfxGenericContainer.
virtual void add_attribute(const std::string identifier, const std::string value)
Add data to a container object.
virtual int gen_event()
Generate libofx.h events.
Various simple functions for type conversion & al.
int add_to_main_tree()
Add this container to the main tree.
Represents a statement for either a bank account or a credit card account.
void STRNCPY(T &dest, const std::string &src)
#define ASSIGN_STRNCPY(DEST, VALUE)
LibOFX internal object code.
void add_attribute(const std::string identifier, const std::string value)
Add data to a container object.
Message IO functionality.
The root container. Created by the <OFX> OFX element or by the export functions.
#define ASSIGN(DEST, VALUE)