1 /********************************************************************\
2 * SX-ttinfo.c -- Template Transaction manipulation functions *
3 * for scheduled transactions *
4 * Copyright (C) 2001 Robert Merkel <rgmerk@mira.net> *
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 gnu@gnu.org *
22 * *
23 \********************************************************************/
24
25
26 #include <config.h>
27
28 #include "SX-ttinfo.h"
29
30 struct TTInfo_s
31 {
32 char *description; /* owned by us */
33 char *num; /* owned by us */
34 char *notes;
35 gnc_commodity *common_currency; /* not freed */
36
37 GList *splits; /* list of template splits, owned by us */
38 };
39
40 struct TTSplitInfo_s
41 {
42 char *action; /* owned by us */
43 char *memo; /* owned by us */
44 char *credit_formula, *debit_formula; /* owned by us */
45 Account *acc;
46 };
47
48 TTInfo *
gnc_ttinfo_malloc(void)49 gnc_ttinfo_malloc(void)
50 {
51 TTInfo *tti = g_new0(TTInfo, 1);
52 return tti;
53 }
54
55 static void
delete_splitinfo(gpointer data,gpointer user_data)56 delete_splitinfo(gpointer data, gpointer user_data)
57 {
58 gnc_ttsplitinfo_free( (TTSplitInfo *) data);
59 return;
60 }
61
gnc_ttinfo_free(TTInfo * info)62 void gnc_ttinfo_free(TTInfo *info)
63 {
64 g_return_if_fail(info);
65
66 g_free(info->description);
67 g_free(info->num);
68 g_free (info->notes);
69 g_list_foreach(info->splits,
70 delete_splitinfo,
71 NULL);
72
73 g_list_free(info->splits);
74
75 g_free(info);
76
77 return;
78 }
79
80 void
gnc_ttinfo_set_description(TTInfo * tti,const char * description)81 gnc_ttinfo_set_description(TTInfo *tti, const char *description)
82 {
83 g_return_if_fail(tti);
84
85 if (tti->description)
86 {
87 g_free(tti->description);
88 }
89
90 tti->description = g_strdup(description);
91
92 return;
93 }
94
95 const char *
gnc_ttinfo_get_description(TTInfo * tti)96 gnc_ttinfo_get_description(TTInfo *tti)
97 {
98 g_return_val_if_fail(tti, NULL);
99
100 return tti->description;
101 }
102
103
104
105
106 void
gnc_ttinfo_set_num(TTInfo * tti,const char * num)107 gnc_ttinfo_set_num(TTInfo *tti, const char *num)
108 {
109 g_return_if_fail(tti);
110
111 if (tti->num)
112 {
113 g_free(tti->num);
114 }
115
116 tti->num = g_strdup(num);
117
118 return;
119 }
120
121 const char*
gnc_ttinfo_get_num(TTInfo * tti)122 gnc_ttinfo_get_num(TTInfo *tti)
123 {
124 g_return_val_if_fail(tti, NULL);
125
126 return tti->num;
127 }
128
129 void
gnc_ttinfo_set_notes(TTInfo * tti,const char * notes)130 gnc_ttinfo_set_notes (TTInfo *tti, const char *notes)
131 {
132 g_return_if_fail (tti);
133
134 if (tti->notes)
135 {
136 g_free (tti->notes);
137 }
138
139 tti->notes = g_strdup (notes);
140
141 return;
142 }
143
144 const char*
gnc_ttinfo_get_notes(TTInfo * tti)145 gnc_ttinfo_get_notes (TTInfo *tti)
146 {
147 g_return_val_if_fail (tti, NULL);
148
149 return tti->notes;
150 }
151
152 void
gnc_ttinfo_set_currency(TTInfo * tti,gnc_commodity * common_currency)153 gnc_ttinfo_set_currency(TTInfo *tti, gnc_commodity *common_currency)
154 {
155 g_return_if_fail(tti);
156
157 tti->common_currency = common_currency;
158 return;
159 }
160
161 gnc_commodity *
gnc_ttinfo_get_currency(TTInfo * tti)162 gnc_ttinfo_get_currency(TTInfo *tti)
163 {
164 g_return_val_if_fail(tti, NULL);
165
166 return tti->common_currency;
167 }
168
169
gnc_ttinfo_set_template_splits(TTInfo * tti,GList * splits)170 void gnc_ttinfo_set_template_splits(TTInfo *tti, GList *splits)
171 {
172 g_return_if_fail(tti);
173
174 tti->splits = splits;
175 return;
176 }
177
gnc_ttinfo_append_template_split(TTInfo * tti,TTSplitInfo * split_i)178 void gnc_ttinfo_append_template_split(TTInfo *tti, TTSplitInfo *split_i)
179 {
180 g_return_if_fail(tti && split_i);
181
182 tti->splits = g_list_append(tti->splits, split_i);
183
184 return;
185 }
186
187 GList *
gnc_ttinfo_get_template_splits(TTInfo * tti)188 gnc_ttinfo_get_template_splits(TTInfo *tti)
189 {
190 g_return_val_if_fail(tti, NULL);
191 return tti->splits;
192 }
193
194 TTSplitInfo *
gnc_ttsplitinfo_malloc(void)195 gnc_ttsplitinfo_malloc(void)
196 {
197 TTSplitInfo *ttsi = g_new0(TTSplitInfo, 1);
198 return ttsi;
199 }
200
201 void
gnc_ttsplitinfo_free(TTSplitInfo * ttsi)202 gnc_ttsplitinfo_free(TTSplitInfo *ttsi)
203 {
204 if ( ttsi->action )
205 g_free(ttsi->action);
206 if ( ttsi->memo )
207 g_free(ttsi->memo);
208 if ( ttsi->credit_formula )
209 g_free(ttsi->credit_formula);
210 if ( ttsi->debit_formula )
211 g_free(ttsi->debit_formula);
212 g_free(ttsi);
213 return;
214 }
215
216 void
gnc_ttsplitinfo_set_action(TTSplitInfo * ttsi,const char * action)217 gnc_ttsplitinfo_set_action(TTSplitInfo *ttsi, const char *action)
218 {
219 g_return_if_fail(ttsi);
220
221 if (ttsi->action)
222 g_free(ttsi->action);
223
224 ttsi->action = g_strdup(action);
225 return;
226 }
227
228 const char *
gnc_ttsplitinfo_get_action(TTSplitInfo * ttsi)229 gnc_ttsplitinfo_get_action(TTSplitInfo *ttsi)
230 {
231 g_return_val_if_fail(ttsi, NULL);
232
233 return ttsi->action;
234 }
235
236 void
gnc_ttsplitinfo_set_memo(TTSplitInfo * ttsi,const char * memo)237 gnc_ttsplitinfo_set_memo(TTSplitInfo *ttsi, const char *memo)
238 {
239 g_return_if_fail(ttsi);
240
241 if (ttsi->memo)
242 g_free(ttsi->memo);
243
244 ttsi->memo = g_strdup(memo);
245 return;
246 }
247
248 const char *
gnc_ttsplitinfo_get_memo(TTSplitInfo * ttsi)249 gnc_ttsplitinfo_get_memo(TTSplitInfo *ttsi)
250 {
251 g_return_val_if_fail(ttsi, NULL);
252
253 return ttsi->memo;
254 }
255
256 void
gnc_ttsplitinfo_set_credit_formula_numeric(TTSplitInfo * ttsi,gnc_numeric credit)257 gnc_ttsplitinfo_set_credit_formula_numeric(TTSplitInfo *ttsi, gnc_numeric credit)
258 {
259 g_return_if_fail(ttsi);
260
261 if (ttsi->credit_formula)
262 g_free(ttsi->credit_formula);
263
264 ttsi->credit_formula = gnc_numeric_to_string(credit);
265
266 if (ttsi->debit_formula)
267 {
268 g_free(ttsi->debit_formula);
269 ttsi->debit_formula = NULL;
270 }
271 }
272
273 void
gnc_ttsplitinfo_set_credit_formula(TTSplitInfo * ttsi,const char * credit_formula)274 gnc_ttsplitinfo_set_credit_formula(TTSplitInfo *ttsi, const char *credit_formula)
275 {
276 g_return_if_fail(ttsi);
277
278 if (ttsi->credit_formula)
279 g_free(ttsi->credit_formula);
280
281 ttsi->credit_formula = g_strdup(credit_formula);
282
283 if (ttsi->debit_formula)
284 {
285 g_free(ttsi->debit_formula);
286 ttsi->debit_formula = NULL;
287 }
288 return;
289 }
290
291 const char *
gnc_ttsplitinfo_get_credit_formula(TTSplitInfo * ttsi)292 gnc_ttsplitinfo_get_credit_formula(TTSplitInfo *ttsi)
293 {
294 g_return_val_if_fail(ttsi, NULL);
295 return ttsi->credit_formula;
296 }
297
298
299 const char *
gnc_ttsplitinfo_get_debit_formula(TTSplitInfo * ttsi)300 gnc_ttsplitinfo_get_debit_formula(TTSplitInfo *ttsi)
301 {
302 g_return_val_if_fail(ttsi, NULL);
303 return ttsi->debit_formula;
304 }
305
306 void
gnc_ttsplitinfo_set_debit_formula_numeric(TTSplitInfo * ttsi,gnc_numeric debit)307 gnc_ttsplitinfo_set_debit_formula_numeric(TTSplitInfo *ttsi, gnc_numeric debit)
308 {
309 g_return_if_fail(ttsi);
310
311 if (ttsi->debit_formula)
312 {
313 g_free(ttsi->debit_formula);
314 }
315 ttsi->debit_formula = gnc_numeric_to_string(debit);
316
317 if (ttsi->credit_formula)
318 {
319 g_free(ttsi->credit_formula);
320 ttsi->credit_formula = NULL;
321 }
322 return;
323 }
324
325 void
gnc_ttsplitinfo_set_debit_formula(TTSplitInfo * ttsi,const char * debit_formula)326 gnc_ttsplitinfo_set_debit_formula(TTSplitInfo *ttsi, const char *debit_formula)
327 {
328 g_return_if_fail(ttsi);
329
330 if (ttsi->debit_formula)
331 g_free(ttsi->debit_formula);
332
333 ttsi->debit_formula = g_strdup(debit_formula);
334
335 if (ttsi->credit_formula)
336 {
337 g_free(ttsi->credit_formula);
338 ttsi->credit_formula = NULL;
339 }
340 return;
341 }
342
343 void
gnc_ttsplitinfo_set_account(TTSplitInfo * ttsi,Account * acc)344 gnc_ttsplitinfo_set_account(TTSplitInfo *ttsi, Account *acc)
345 {
346 g_return_if_fail(ttsi && acc);
347
348 ttsi->acc = acc;
349 return;
350 }
351
352 Account *
gnc_ttsplitinfo_get_account(TTSplitInfo * ttsi)353 gnc_ttsplitinfo_get_account(TTSplitInfo *ttsi)
354 {
355 g_return_val_if_fail(ttsi, NULL);
356
357 return ttsi->acc;
358 }
359