31 #include "gnc-xml-helper.h"
34 #include "sixtp-utils.h"
35 #include "sixtp-parsers.h"
36 #include "sixtp-utils.h"
37 #include "sixtp-dom-parsers.h"
38 #include "sixtp-dom-generators.h"
41 #include "io-gncxml-gen.h"
44 #include "gncEmployeeP.h"
45 #include "gnc-employee-xml-v2.h"
46 #include "gnc-address-xml-v2.h"
48 #define _GNC_MOD_NAME GNC_ID_EMPLOYEE
52 const gchar *employee_version_string =
"2.0.0";
55 #define gnc_employee_string "gnc:GncEmployee"
56 #define employee_username_string "employee:username"
57 #define employee_guid_string "employee:guid"
58 #define employee_id_string "employee:id"
59 #define employee_addr_string "employee:addr"
60 #define employee_language_string "employee:language"
61 #define employee_acl_string "employee:acl"
62 #define employee_active_string "employee:active"
63 #define employee_workday_string "employee:workday"
64 #define employee_rate_string "employee:rate"
65 #define employee_currency_string "employee:currency"
66 #define employee_ccard_string "employee:ccard"
67 #define employee_slots_string "employee:slots"
70 maybe_add_string (xmlNodePtr ptr,
const char *tag,
const char *str)
72 if (str && strlen(str) > 0)
73 xmlAddChild (ptr, text_to_dom_tree (tag, str));
79 xmlNodePtr ret, kvpnode;
83 ret = xmlNewNode(NULL, BAD_CAST gnc_employee_string);
84 xmlSetProp(ret, BAD_CAST
"version", BAD_CAST employee_version_string);
86 xmlAddChild(ret, guid_to_dom_tree(employee_guid_string,
89 xmlAddChild(ret, text_to_dom_tree(employee_username_string,
90 gncEmployeeGetUsername (employee)));
92 xmlAddChild(ret, text_to_dom_tree(employee_id_string,
93 gncEmployeeGetID (employee)));
95 xmlAddChild(ret, gnc_address_to_dom_tree(employee_addr_string,
96 gncEmployeeGetAddr (employee)));
98 maybe_add_string (ret, employee_language_string,
99 gncEmployeeGetLanguage (employee));
100 maybe_add_string (ret, employee_acl_string, gncEmployeeGetAcl (employee));
102 xmlAddChild(ret, int_to_dom_tree(employee_active_string,
103 gncEmployeeGetActive (employee)));
105 num = gncEmployeeGetWorkday (employee);
106 xmlAddChild(ret, gnc_numeric_to_dom_tree (employee_workday_string, &num));
108 num = gncEmployeeGetRate (employee);
109 xmlAddChild(ret, gnc_numeric_to_dom_tree (employee_rate_string, &num));
113 commodity_ref_to_dom_tree(employee_currency_string,
114 gncEmployeeGetCurrency (employee)));
116 ccard_acc = gncEmployeeGetCCard (employee);
118 xmlAddChild(ret, guid_to_dom_tree(employee_ccard_string,
121 kvpnode = kvp_frame_to_dom_tree (employee_slots_string,
122 qof_instance_get_slots (QOF_INSTANCE(employee)));
123 if (kvpnode) xmlAddChild (ret, kvpnode);
138 void (*func)(
GncEmployee *employee,
const char *txt))
140 char* txt = dom_tree_to_text(node);
141 g_return_val_if_fail(txt, FALSE);
151 employee_username_handler (xmlNodePtr node, gpointer
employee_pdata)
153 struct employee_pdata *pdata = employee_pdata;
155 return set_string(node, pdata->employee, gncEmployeeSetUsername);
161 struct employee_pdata *pdata = employee_pdata;
165 guid = dom_tree_to_guid(node);
166 g_return_val_if_fail(guid, FALSE);
169 employee = gncEmployeeLookup (pdata->book, guid);
172 gncEmployeeDestroy (pdata->employee);
173 pdata->employee = employee;
174 gncEmployeeBeginEdit (employee);
178 gncEmployeeSetGUID(pdata->employee, guid);
187 employee_id_handler (xmlNodePtr node, gpointer employee_pdata)
189 struct employee_pdata *pdata = employee_pdata;
191 return set_string(node, pdata->employee, gncEmployeeSetID);
195 employee_language_handler (xmlNodePtr node, gpointer employee_pdata)
197 struct employee_pdata *pdata = employee_pdata;
199 return set_string(node, pdata->employee, gncEmployeeSetLanguage);
203 employee_acl_handler (xmlNodePtr node, gpointer employee_pdata)
205 struct employee_pdata *pdata = employee_pdata;
207 return set_string(node, pdata->employee, gncEmployeeSetAcl);
211 employee_addr_handler (xmlNodePtr node, gpointer employee_pdata)
213 struct employee_pdata *pdata = employee_pdata;
215 return gnc_dom_tree_to_address (node, gncEmployeeGetAddr(pdata->employee));
219 employee_active_handler (xmlNodePtr node, gpointer employee_pdata)
221 struct employee_pdata *pdata = employee_pdata;
225 ret = dom_tree_to_integer(node, &val);
227 gncEmployeeSetActive(pdata->employee, (gboolean)val);
233 employee_workday_handler (xmlNodePtr node, gpointer employee_pdata)
235 struct employee_pdata *pdata = employee_pdata;
238 val = dom_tree_to_gnc_numeric(node);
239 g_return_val_if_fail(val, FALSE);
240 gncEmployeeSetWorkday(pdata->employee, *val);
247 employee_rate_handler (xmlNodePtr node, gpointer employee_pdata)
249 struct employee_pdata *pdata = employee_pdata;
252 val = dom_tree_to_gnc_numeric(node);
253 g_return_val_if_fail(val, FALSE);
254 gncEmployeeSetRate(pdata->employee, *val);
261 employee_currency_handler (xmlNodePtr node, gpointer employee_pdata)
263 struct employee_pdata *pdata = employee_pdata;
266 com = dom_tree_to_commodity_ref(node, pdata->book);
267 g_return_val_if_fail (com, FALSE);
269 gncEmployeeSetCurrency (pdata->employee, com);
275 employee_ccard_handler (xmlNodePtr node, gpointer employee_pdata)
277 struct employee_pdata *pdata = employee_pdata;
281 guid = dom_tree_to_guid(node);
282 g_return_val_if_fail(guid, FALSE);
287 g_return_val_if_fail (ccard_acc, FALSE);
288 gncEmployeeSetCCard (pdata->employee, ccard_acc);
294 employee_slots_handler (xmlNodePtr node, gpointer employee_pdata)
296 struct employee_pdata *pdata = employee_pdata;
297 return dom_tree_to_kvp_frame_given (
298 node, qof_instance_get_slots (QOF_INSTANCE(pdata->employee)));
303 { employee_username_string, employee_username_handler, 1, 0 },
304 { employee_guid_string, employee_guid_handler, 1, 0 },
305 { employee_id_string, employee_id_handler, 1, 0 },
306 { employee_addr_string, employee_addr_handler, 1, 0 },
307 { employee_language_string, employee_language_handler, 0, 0 },
308 { employee_acl_string, employee_acl_handler, 0, 0 },
309 { employee_active_string, employee_active_handler, 1, 0 },
310 { employee_workday_string, employee_workday_handler, 1, 0 },
311 { employee_rate_string, employee_rate_handler, 1, 0 },
312 { employee_currency_string, employee_currency_handler, 0, 0 },
313 {
"employee:commodity", employee_currency_handler, 0, 0 },
314 { employee_ccard_string, employee_ccard_handler, 0, 0 },
315 { employee_slots_string, employee_slots_handler, 0, 0 },
320 dom_tree_to_employee (xmlNodePtr node,
QofBook *book)
322 struct employee_pdata employee_pdata;
325 employee_pdata.employee = gncEmployeeCreate(book);
326 employee_pdata.book = book;
327 gncEmployeeBeginEdit (employee_pdata.employee);
329 successful = dom_tree_generic_parse (node, employee_handlers_v2,
332 gncEmployeeCommitEdit (employee_pdata.employee);
335 PERR (
"failed to parse employee tree");
336 gncEmployeeDestroy (employee_pdata.employee);
337 employee_pdata.employee = NULL;
340 return employee_pdata.employee;
344 gnc_employee_end_handler(gpointer data_for_children,
345 GSList* data_from_children, GSList* sibling_data,
346 gpointer parent_data, gpointer global_data,
347 gpointer *result,
const gchar *tag)
350 xmlNodePtr tree = (xmlNodePtr)data_for_children;
352 QofBook *book = gdata->bookdata;
367 g_return_val_if_fail(tree, FALSE);
369 employee = dom_tree_to_employee(tree, book);
370 if (employee != NULL)
372 gdata->cb(tag, gdata->parsedata, employee);
377 return employee != NULL;
381 employee_sixtp_parser_create(
void)
383 return sixtp_dom_parser_new(gnc_employee_end_handler, NULL, NULL);
392 id = gncEmployeeGetID (employee);
393 if (
id == NULL || *
id ==
'\0')
400 do_count (
QofInstance * employee_p, gpointer count_p)
402 int *count = count_p;
403 if (employee_should_be_saved ((
GncEmployee *) employee_p))
408 employee_get_count (
QofBook *book)
416 xml_add_employee (
QofInstance * employee_p, gpointer out_p)
424 if (!employee_should_be_saved (employee))
427 node = employee_dom_tree_create (employee);
428 xmlElemDump(out, NULL, node);
430 if (ferror(out) || fprintf(out,
"\n") < 0)
435 employee_write (FILE *out,
QofBook *book)
438 return ferror(out) == 0;
442 employee_ns(FILE *out)
444 g_return_val_if_fail(out, FALSE);
449 gnc_employee_xml_initialize (
void)
453 GNC_FILE_BACKEND_VERS,
455 employee_sixtp_parser_create,
gboolean qof_object_register_backend(QofIdTypeConst type_name, const char *backend_name, gpointer be_data)
const GncGUID * qof_instance_get_guid(gconstpointer)
#define PERR(format, args...)
void qof_object_foreach_sorted(QofIdTypeConst type_name, QofBook *book, QofInstanceForeachCB cb, gpointer user_data)
api for GnuCash version 2 XML-based file format
void qof_object_foreach(QofIdTypeConst type_name, QofBook *book, QofInstanceForeachCB cb, gpointer user_data)
gboolean gnc_xml2_write_namespace_decl(FILE *out, const char *name_space)
const gchar * QofLogModule
Account * xaccAccountLookup(const GncGUID *guid, QofBook *book)