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