Separatista
mt940s.h
1 /***************************************************************************
2  * Copyright (C) 2013 by Okkel Klaver *
3  * info@vanhetland.nl *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
20 
21 #ifndef SEPARATISTA_MT940S_H
22 #define SEPARATISTA_MT940S_H
23 
24 #include <string>
25 #include <vector>
26 #include <unordered_map>
27 #include <ctime>
28 
29 #include "separatista/iban/iban.h"
30 
31 #ifdef MT940S_BUILDINGDLL
32 # define MT940S_EXTERN __declspec(dllexport)
33 #elif defined MT940S_USINGDLL
34 # define MT940S_EXTERN __declspec(dllimport)
35 #else
36 # define MT940S_EXTERN
37 #endif
38 
39 namespace Separatista
40 {
41 
43 {
44 public:
48  MT940S_EXTERN MT940SCurrency();
49 
56  MT940S_EXTERN void set(const char dcCode, const char *currency, const char *amount);
57 
61  MT940S_EXTERN const char* getCurrency();
62  MT940S_EXTERN operator const char* ();
63 
64 private:
65  char m_dcCode;
66  std::string m_currency;
67  std::string m_amount;
68  std::string m_buffer; // Internal buffer for formatting
69 };
70 
72 {
73 public:
77  MT940S_EXTERN MT940SDate();
78 
83  MT940S_EXTERN MT940SDate& operator = (const char *date);
84 
85  MT940S_EXTERN time_t getTime() const;
86 
87  MT940S_EXTERN operator time_t () const;
88 private:
89  std::string m_date;
90 };
91 
93 {
94 public:
98  MT940S_EXTERN MT940STransaction();
99 
100  MT940S_EXTERN ~MT940STransaction();
101 
102  MT940S_EXTERN MT940SDate* getDate();
103  MT940S_EXTERN void setDate(const char *date);
104 
105  MT940S_EXTERN const char* getRDCCode() const;
106  MT940S_EXTERN void setRDCCode(const char *code);
107 
108  MT940S_EXTERN MT940SCurrency* getCurrency();
109  MT940S_EXTERN void setCurrency(const char dcCode, const char *currency, const char *amount);
110 
111  MT940S_EXTERN const char* getTransactionCode() const;
112  MT940S_EXTERN void setTransactionCode(const char *code);
113 
114  MT940S_EXTERN const char* getTransactionReference() const;
115  MT940S_EXTERN void setTransactionReference(const char *code);
116 
117  MT940S_EXTERN const IBAN* getForeignIBAN() const;
118  MT940S_EXTERN void setForeignIBAN(const char *iban);
119 
124  MT940S_EXTERN void addDescription(const char *key, const char *value);
125  MT940S_EXTERN const char* getDescription(const char *key);
126 
127  MT940S_EXTERN void moveFirstDescription();
128  MT940S_EXTERN bool moveNextDescription();
129  MT940S_EXTERN bool descriptionEOF() const;
130  MT940S_EXTERN const char* getDescriptionKey() const;
131  MT940S_EXTERN const char* getDescriptionValue() const;
132 
133 private:
134  MT940SDate m_date;
135  std::string m_rdcCode;
136  MT940SCurrency m_currency;
137  std::string m_transactionCode;
138  std::string m_transactionReference;
139  IBAN m_foreignIBAN;
140  std::unordered_map<std::string, std::string> m_descriptionMap;
141  std::unordered_map<std::string, std::string>::iterator m_descriptionIterator;
142 };
143 
144 // Forward declaration
145 class MT940SRecordset;
146 
148 {
149 public:
153  MT940S_EXTERN MT940SDocument();
154 
158  MT940S_EXTERN ~MT940SDocument();
159 
164  {
166  OK = 0,
172  E_MEMORY
173  };
174 
180  MT940S_EXTERN MT940SDocument::OpenStatus Open(const char *path);
181 
185  MT940S_EXTERN size_t getRecordsetCount();
186 
190  MT940S_EXTERN MT940SRecordset* getRecordset(size_t i);
191 protected:
200  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord940(int line, int rline);
201 
202 private:
203  std::vector<MT940SRecordset*> m_recordsets;
204 };
205 
207 {
208 public:
212  MT940S_EXTERN MT940SRecordset();
213 
217  MT940S_EXTERN ~MT940SRecordset();
218 
219  MT940SDocument::OpenStatus MT940S_EXTERN getStatus() const;
220 
228  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord(int line, int rline, std::string& header, std::string& data);
229 
230  MT940S_EXTERN const char* getCurrencyClient() const;
231 
232  MT940S_EXTERN const char* getTransactionReference() const;
233 
234  MT940S_EXTERN const char* getSerialNumber() const;
235 
236  MT940S_EXTERN const IBAN* getIBANClient() const;
237 
238  MT940S_EXTERN MT940SCurrency* getPreviousBalance();
239 
240  MT940S_EXTERN const MT940SDate* getPreviousBalanceDate() const;
241 
242  MT940S_EXTERN MT940SCurrency* getCurrentBalance();
243 
244  MT940S_EXTERN const MT940SDate* getCurrentBalanceDate() const;
245 
246  MT940S_EXTERN size_t getTransactionCount() const;
247 
248  MT940S_EXTERN MT940STransaction* getTransaction(size_t index);
249 
250 
251 protected:
252 
260  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord20(int line, int rline, std::string& data);
261 
269  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord25(int line, int rline, std::string& data);
270 
278  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord28C(int line, int rline, std::string& data);
279 
287  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord60F(int line, int rline, std::string& data);
288 
296  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord61(int line, int rline, std::string& data);
297 
305  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord86(int line, int rline, std::string& data);
306 
314  MT940S_EXTERN MT940SDocument::OpenStatus ReadRecord62F(int line, int rline, std::string& data);
315 
316 private:
317  std::string m_currencyClient;
318  std::string m_transactionReference;
319  std::string m_serialNumber;
320  IBAN m_ibanClient;
321  MT940SCurrency m_previousBalance;
322  MT940SDate m_previousBalanceDate;
323  MT940SCurrency m_currentBalance;
324  MT940SDate m_currentBalanceDate;
325  std::vector<MT940STransaction*> m_transactions;
326  std::vector<MT940STransaction*>::iterator m_transactionsIterator;
327  std::string m_description;
328 };
329 
330 }
331 
332 #endif // !defined SEPARATISTA_MT940S_H
Definition: mt940s.h:206
Definition: iban.h:47
MT940S_EXTERN MT940SCurrency()
Definition: mt940s.cpp:535
Error parsing file or not a MT940S file.
Definition: mt940s.h:170
MT940S_EXTERN const char * getCurrency()
Definition: mt940s.cpp:546
Error opening/reading file.
Definition: mt940s.h:168
Definition: mt940s.h:71
Definition: mt940s.h:39
Definition: mt940s.h:42
OpenStatus
Definition: mt940s.h:163
Definition: mt940s.h:92
Definition: mt940s.h:147