30 #include "gnc-aqbanking-templates.h" 32 #include "qofinstance-p.h" 33 #include "kvp-frame.hpp" 34 #include "gnc-rational.hpp" 37 static const char* TT_NAME {
"name"};
38 static const char* TT_RNAME {
"rnam"};
39 static const char* TT_RACC {
"racc"};
40 static const char* TT_RBCODE {
"rbcd"};
41 static const char* TT_PURPOS {
"purp"};
42 static const char* TT_PURPOSCT {
"purc"};
43 static const char* TT_AMOUNT {
"amou"};
50 m_name(), m_recipient_name(), m_recipient_account(),
51 m_recipient_bankcode(), m_amount(gnc_numeric_zero()), m_purpose(),
52 m_purpose_continuation() {}
54 const std::string& recip_name,
55 const std::string& recip_account,
56 const std::string& recip_code,
58 const std::string& purpose,
59 const std::string& purpose_cont) :
60 m_name(name), m_recipient_name(recip_name),
61 m_recipient_account(recip_account), m_recipient_bankcode(recip_code),
62 m_amount(amount), m_purpose(purpose),
63 m_purpose_continuation(purpose_cont) {}
64 KvpFrame* make_kvp_frame();
65 const char* name()
const {
return m_name.c_str(); }
66 const char* recipient_name()
const {
return m_recipient_name.c_str(); }
67 const char* recipient_account()
const 69 return m_recipient_account.c_str();
71 const char* recipient_bankcode()
const 73 return m_recipient_bankcode.c_str();
75 const GncRational amount()
const {
return m_amount; }
76 const char* purpose()
const {
return m_purpose.c_str(); }
77 const char* purpose_continuation()
const 79 return m_purpose_continuation.c_str();
81 void set_name (
const char* name) { m_name = name; }
82 void set_recipient_name (
const char* name) { m_recipient_name = name; }
83 void set_recipient_account (
const char* account) {
84 m_recipient_account = account;
86 void set_recipient_bankcode (
const char* code) {
87 m_recipient_bankcode = code;
89 void set_amount (
GncRational amount) { m_amount = amount; }
90 void set_purpose (
const char* purpose) { m_purpose = purpose; }
91 void set_purpose_continuation (
const char* name) { m_name = name; }
94 std::string m_recipient_name;
95 std::string m_recipient_account;
96 std::string m_recipient_bankcode;
98 std::string m_purpose;
99 std::string m_purpose_continuation;
103 _GncABTransTempl::make_kvp_frame()
105 auto frame =
new KvpFrame;
106 frame->set({TT_NAME},
new KvpValue(g_strdup (m_name.c_str())));
107 frame->set({TT_RNAME},
new KvpValue(g_strdup (m_recipient_name.c_str())));
108 frame->set({TT_RACC},
new KvpValue(g_strdup (m_recipient_account.c_str())));
109 frame->set({TT_RBCODE},
new KvpValue(g_strdup (m_recipient_bankcode.c_str())));
110 frame->set({TT_AMOUNT},
new KvpValue(m_amount));
111 frame->set({TT_PURPOS},
new KvpValue(g_strdup (m_purpose.c_str())));
112 frame->set({TT_PURPOSCT},
new KvpValue(g_strdup (m_purpose_continuation.c_str())));
124 const gchar *recp_account,
125 const gchar *recp_bankcode, gnc_numeric amount,
126 const gchar *purpose,
const gchar *purpose_cont)
129 amount, purpose, purpose_cont);
135 GList *retval = NULL;
136 auto toplevel = qof_instance_get_slots (QOF_INSTANCE (b));
137 auto slot = toplevel->get_slot({
"hbci",
"template-list"});
140 auto list = slot->get<GList*>();
141 for (
auto node = list; node != NULL; node = g_list_next (node))
143 KvpFrame *frame =
static_cast<KvpValue*
>(node->data)->get<KvpFrame*>();
144 auto c_func = [frame](
const char* key)
145 {
auto slot = frame->get_slot({key});
146 return slot ==
nullptr ? std::string(
"") : std::string(slot->get<
const char*>());};
147 auto n_func = [frame](
const char* key)
148 {
auto slot = frame->get_slot({key});
149 return slot ==
nullptr ? gnc_numeric_zero() : slot->get<gnc_numeric>();};
151 c_func(TT_RACC), c_func(TT_RBCODE),
152 n_func(TT_AMOUNT), c_func(TT_PURPOS),
153 c_func(TT_PURPOSCT));
154 retval = g_list_prepend (retval, templ);
156 retval = g_list_reverse (retval);
169 for(GList *node = l; node != NULL; node = g_list_next(node))
170 delete static_cast<_GncABTransTempl*>(node->data);
173 copy_list_value(
const void* pvalue,
void* pdata)
175 auto new_value =
new KvpValue(*static_cast<const KvpValue*>(pvalue));
182 GList *kvp_list = NULL;
183 for (
auto node = template_list; node != NULL; node = g_list_next (node))
186 auto value =
new KvpValue(templ->make_kvp_frame());
187 kvp_list = g_list_prepend (kvp_list, value);
189 kvp_list = g_list_reverse (kvp_list);
190 auto value =
new KvpValue(g_list_copy_deep(kvp_list, copy_list_value,
192 qof_book_begin_edit(b);
193 KvpFrame *toplevel = qof_instance_get_slots (QOF_INSTANCE (b));
194 delete toplevel->set_path({
"hbci",
"template-list"}, value);
195 qof_instance_set_dirty_flag (QOF_INSTANCE (b), TRUE);
196 qof_book_commit_edit(b);
202 g_return_val_if_fail(t, NULL);
209 g_return_val_if_fail(t, NULL);
210 return t->recipient_name();
216 g_return_val_if_fail(t, NULL);
217 return t->recipient_account();
223 g_return_val_if_fail(t, NULL);
224 return t->recipient_bankcode();
230 g_return_val_if_fail(t, gnc_numeric_zero());
237 g_return_val_if_fail(t, NULL);
244 g_return_val_if_fail(t, NULL);
245 return t->purpose_continuation();
259 t->set_recipient_name(recp_name);
264 const gchar *recp_account)
267 t->set_recipient_account(recp_account);
272 const gchar *recp_bankcode)
275 t->set_recipient_bankcode(recp_bankcode);
282 t->set_amount(amount);
289 t->set_purpose(purpose);
294 const gchar *purpose_cont)
297 t->set_purpose_continuation (purpose_cont);
const gchar * gnc_ab_trans_templ_get_purpose(const GncABTransTempl *t)
void gnc_ab_trans_templ_free(GncABTransTempl *t)
Free the memory used by a template.
void gnc_ab_trans_templ_set_purpose_cont(GncABTransTempl *t, const gchar *purpose_cont)
Replace the second purpose line stored in a template.
A template for an AqBanking transaction.
void gnc_ab_trans_templ_set_amount(GncABTransTempl *t, gnc_numeric amount)
Replace the amount stored in a template.
const gchar * gnc_ab_trans_templ_get_recp_account(const GncABTransTempl *t)
void gnc_ab_trans_templ_list_free(GList *l)
Free the memory used by a list of templates, including the list itself.
void gnc_ab_trans_templ_set_recp_account(GncABTransTempl *t, const gchar *recp_account)
Replace the Account Number of the recipient stored in a template.
void gnc_ab_trans_templ_set_name(GncABTransTempl *t, const gchar *name)
Set the name of a template.
void gnc_ab_trans_templ_set_recp_name(GncABTransTempl *t, const gchar *recp_name)
Replace the Account Number of the recipient stored in a template.
void gnc_ab_trans_templ_set_recp_bankcode(GncABTransTempl *t, const gchar *recp_bankcode)
Replace the Bank Code of the recipient stored in a template.
GncABTransTempl * gnc_ab_trans_templ_new()
Create a template with unset contents.
void gnc_ab_trans_templ_set_purpose(GncABTransTempl *t, const gchar *purpose)
Replace the first purpose line stored in a template.
const gchar * gnc_ab_trans_templ_get_name(const GncABTransTempl *t)
gnc_numeric gnc_ab_trans_templ_get_amount(const GncABTransTempl *t)
const gchar * gnc_ab_trans_templ_get_recp_bankcode(const GncABTransTempl *t)
Rational number class using GncInt128 for the numerator and denominator.
void gnc_ab_set_book_template_list(QofBook *b, GList *template_list)
Set the GList of kvp_frames of template transactions in the Book b to template_list.
const gchar * gnc_ab_trans_templ_get_recp_name(const GncABTransTempl *t)
GncABTransTempl * gnc_ab_trans_templ_new_full(const gchar *name, const gchar *recp_name, const gchar *recp_account, const gchar *recp_bankcode, gnc_numeric amount, const gchar *purpose, const gchar *purpose_cont)
Create a template with given contents.
const gchar * gnc_ab_trans_templ_get_purpose_cont(const GncABTransTempl *t)
GList * gnc_ab_trans_templ_list_new_from_book(QofBook *b)
Obtain the list of QofTemplates saved in a Book.