GnuCash  2.6.99
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
SX-ttinfo.c
1 /********************************************************************\
2  * SX-ttinfo.c -- Template Transaction manipulation functions *
3  * for scheduled transactions *
4  * Copyright (C) 2001 Robert Merkel <[email protected]> *
5  * *
6  * This program is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU General Public License as *
8  * published by the Free Software Foundation; either version 2 of *
9  * the License, or (at your option) any later version. *
10  * *
11  * This program is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14  * GNU General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU General Public License*
17  * along with this program; if not, contact: *
18  * *
19  * Free Software Foundation Voice: +1-617-542-5942 *
20  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
21  * Boston, MA 02110-1301, USA [email protected] *
22  * *
23 \********************************************************************/
24 
25 
26 #include "config.h"
27 
28 #include "SX-ttinfo.h"
29 
30 /* KvpFrame policy? */
31 struct TTInfo_s
32 {
33  /* FIXME add notes field */
34  char *description; /* owned by us */
35  char *num; /* owned by us */
36  gnc_commodity *common_currency; /* not freed */
37 
38  GList *splits; /* list of template splits, owned by us */
39 };
40 
42 {
43  char *action; /* owned by us */
44  /* FIXME: What about the split's KvpFrame */
45  char *memo; /* owned by us */
46  char *credit_formula, *debit_formula; /* owned by us */
47  Account *acc;
48 };
49 
50 TTInfo *
51 gnc_ttinfo_malloc(void)
52 {
53  TTInfo *tti = g_new0(TTInfo, 1);
54  return tti;
55 }
56 
57 static void
58 delete_splitinfo(gpointer data, gpointer user_data)
59 {
60  gnc_ttsplitinfo_free( (TTSplitInfo *) data);
61  return;
62 }
63 
64 void gnc_ttinfo_free(TTInfo *info)
65 {
66  g_return_if_fail(info);
67 
68  g_free(info->description);
69  g_free(info->num);
70  g_list_foreach(info->splits,
71  delete_splitinfo,
72  NULL);
73 
74  g_list_free(info->splits);
75 
76  g_free(info);
77 
78  return;
79 }
80 
81 void
82 gnc_ttinfo_set_description(TTInfo *tti, const char *description)
83 {
84  g_return_if_fail(tti);
85 
86  if (tti->description)
87  {
88  g_free(tti->description);
89  }
90 
91  tti->description = g_strdup(description);
92 
93  return;
94 }
95 
96 const char *
97 gnc_ttinfo_get_description(TTInfo *tti)
98 {
99  g_return_val_if_fail(tti, NULL);
100 
101  return tti->description;
102 }
103 
104 
105 
106 
107 void
108 gnc_ttinfo_set_num(TTInfo *tti, const char *num)
109 {
110  g_return_if_fail(tti);
111 
112  if (tti->num)
113  {
114  g_free(tti->num);
115  }
116 
117  tti->num = g_strdup(num);
118 
119  return;
120 }
121 
122 const char*
123 gnc_ttinfo_get_num(TTInfo *tti)
124 {
125  g_return_val_if_fail(tti, NULL);
126 
127  return tti->num;
128 }
129 
130 
131 void
132 gnc_ttinfo_set_currency(TTInfo *tti, gnc_commodity *common_currency)
133 {
134  g_return_if_fail(tti);
135 
136  tti->common_currency = common_currency;
137  return;
138 }
139 
141 gnc_ttinfo_get_currency(TTInfo *tti)
142 {
143  g_return_val_if_fail(tti, NULL);
144 
145  return tti->common_currency;
146 }
147 
148 
149 void gnc_ttinfo_set_template_splits(TTInfo *tti, GList *splits)
150 {
151  g_return_if_fail(tti);
152 
153  tti->splits = splits;
154  return;
155 }
156 
157 void gnc_ttinfo_append_template_split(TTInfo *tti, TTSplitInfo *split_i)
158 {
159  g_return_if_fail(tti && split_i);
160 
161  tti->splits = g_list_append(tti->splits, split_i);
162 
163  return;
164 }
165 
166 GList *
167 gnc_ttinfo_get_template_splits(TTInfo *tti)
168 {
169  g_return_val_if_fail(tti, NULL);
170  return tti->splits;
171 }
172 
173 TTSplitInfo *
174 gnc_ttsplitinfo_malloc(void)
175 {
176  TTSplitInfo *ttsi = g_new0(TTSplitInfo, 1);
177  return ttsi;
178 }
179 
180 void
181 gnc_ttsplitinfo_free(TTSplitInfo *ttsi)
182 {
183  if ( ttsi->action )
184  g_free(ttsi->action);
185  if ( ttsi->memo )
186  g_free(ttsi->memo);
187  if ( ttsi->credit_formula )
188  g_free(ttsi->credit_formula);
189  if ( ttsi->debit_formula )
190  g_free(ttsi->debit_formula);
191  g_free(ttsi);
192  return;
193 }
194 
195 void
196 gnc_ttsplitinfo_set_action(TTSplitInfo *ttsi, const char *action)
197 {
198  g_return_if_fail(ttsi);
199 
200  if (ttsi->action)
201  g_free(ttsi->action);
202 
203  ttsi->action = g_strdup(action);
204  return;
205 }
206 
207 const char *
208 gnc_ttsplitinfo_get_action(TTSplitInfo *ttsi)
209 {
210  g_return_val_if_fail(ttsi, NULL);
211 
212  return ttsi->action;
213 }
214 
215 void
216 gnc_ttsplitinfo_set_memo(TTSplitInfo *ttsi, const char *memo)
217 {
218  g_return_if_fail(ttsi);
219 
220  if (ttsi->memo)
221  g_free(ttsi->memo);
222 
223  ttsi->memo = g_strdup(memo);
224  return;
225 }
226 
227 const char *
228 gnc_ttsplitinfo_get_memo(TTSplitInfo *ttsi)
229 {
230  g_return_val_if_fail(ttsi, NULL);
231 
232  return ttsi->memo;
233 }
234 
235 void
236 gnc_ttsplitinfo_set_credit_formula_numeric(TTSplitInfo *ttsi, gnc_numeric credit)
237 {
238  g_return_if_fail(ttsi);
239 
240  if (ttsi->credit_formula)
241  g_free(ttsi->credit_formula);
242 
243  ttsi->credit_formula = gnc_numeric_to_string(credit);
244 
245  if (ttsi->debit_formula)
246  {
247  g_free(ttsi->debit_formula);
248  ttsi->debit_formula = NULL;
249  }
250 }
251 
252 void
253 gnc_ttsplitinfo_set_credit_formula(TTSplitInfo *ttsi, const char *credit_formula)
254 {
255  g_return_if_fail(ttsi);
256 
257  if (ttsi->credit_formula)
258  g_free(ttsi->credit_formula);
259 
260  ttsi->credit_formula = g_strdup(credit_formula);
261 
262  if (ttsi->debit_formula)
263  {
264  g_free(ttsi->debit_formula);
265  ttsi->debit_formula = NULL;
266  }
267  return;
268 }
269 
270 const char *
271 gnc_ttsplitinfo_get_credit_formula(TTSplitInfo *ttsi)
272 {
273  g_return_val_if_fail(ttsi, NULL);
274  return ttsi->credit_formula;
275 }
276 
277 
278 const char *
279 gnc_ttsplitinfo_get_debit_formula(TTSplitInfo *ttsi)
280 {
281  g_return_val_if_fail(ttsi, NULL);
282  return ttsi->debit_formula;
283 }
284 
285 void
286 gnc_ttsplitinfo_set_debit_formula_numeric(TTSplitInfo *ttsi, gnc_numeric debit)
287 {
288  g_return_if_fail(ttsi);
289 
290  if (ttsi->debit_formula)
291  {
292  g_free(ttsi->debit_formula);
293  }
294  ttsi->debit_formula = gnc_numeric_to_string(debit);
295 
296  if (ttsi->credit_formula)
297  {
298  g_free(ttsi->credit_formula);
299  ttsi->credit_formula = NULL;
300  }
301  return;
302 }
303 
304 void
305 gnc_ttsplitinfo_set_debit_formula(TTSplitInfo *ttsi, const char *debit_formula)
306 {
307  g_return_if_fail(ttsi);
308 
309  if (ttsi->debit_formula)
310  g_free(ttsi->debit_formula);
311 
312  ttsi->debit_formula = g_strdup(debit_formula);
313 
314  if (ttsi->credit_formula)
315  {
316  g_free(ttsi->credit_formula);
317  ttsi->credit_formula = NULL;
318  }
319  return;
320 }
321 
322 void
323 gnc_ttsplitinfo_set_account(TTSplitInfo *ttsi, Account *acc)
324 {
325  g_return_if_fail(ttsi && acc);
326 
327  ttsi->acc = acc;
328  return;
329 }
330 
331 Account *
332 gnc_ttsplitinfo_get_account(TTSplitInfo *ttsi)
333 {
334  g_return_val_if_fail(ttsi, NULL);
335 
336  return ttsi->acc;
337 }
gchar * gnc_numeric_to_string(gnc_numeric n)