diff options
Diffstat (limited to 'src/sru.c')
| -rw-r--r-- | src/sru.c | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -350,6 +350,22 @@ static void date_compact(const char *iso, char out[9]) snprintf(out, 9, "%.4s%.2s%.2s", iso, iso + 5, iso + 8); } +/* The emitted (non-zero) whole-krona fields, in blankett order. */ +static yyjson_mut_val *fields_json(yyjson_mut_doc *doc, const struct fldset *f, + const char *const *order, size_t norder) +{ + yyjson_mut_val *arr = yyjson_mut_arr(doc); + for (size_t i = 0; i < norder; i++) { + int64_t kr = fld_get(f, order[i]) / 100; + if (!kr) + continue; + yyjson_mut_val *o = yyjson_mut_arr_add_obj(doc, arr); + yyjson_mut_obj_add_strcpy(doc, o, "code", order[i]); + yyjson_mut_obj_add_int(doc, o, "amount", kr); + } + return arr; +} + static yyjson_mut_val *file_json(yyjson_mut_doc *doc, const char *fname, const struct buf *b) { @@ -692,6 +708,17 @@ yyjson_mut_val *sru_export(yyjson_mut_doc *doc, sqlite3 *db, int64_t org_id, yyjson_mut_val *o = yyjson_mut_obj(doc); yyjson_mut_obj_add_strcpy(doc, o, "period", type_base); yyjson_mut_obj_add_strcpy(doc, o, "blankett", type_ink2); + yyjson_mut_obj_add_strcpy(doc, o, "from", fy_start); + yyjson_mut_obj_add_strcpy(doc, o, "to", fy_end); + yyjson_mut_obj_add_val(doc, o, "ink2", + fields_json(doc, &ink2, INK2_ORDER, + sizeof INK2_ORDER / sizeof INK2_ORDER[0])); + yyjson_mut_obj_add_val(doc, o, "ink2r", + fields_json(doc, &ink2r, INK2R_ORDER, + sizeof INK2R_ORDER / sizeof INK2R_ORDER[0])); + yyjson_mut_obj_add_val(doc, o, "ink2s", + fields_json(doc, &ink2s, INK2S_ORDER, + sizeof INK2S_ORDER / sizeof INK2S_ORDER[0])); yyjson_mut_obj_add_val(doc, o, "info", info_file); yyjson_mut_obj_add_val(doc, o, "blanketter", blanketter_file); if (unmapped.n > 0) { |
