diff options
Diffstat (limited to 'clients/bokftui.c')
| -rw-r--r-- | clients/bokftui.c | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/clients/bokftui.c b/clients/bokftui.c index ec7e75a..f00bdc1 100644 --- a/clients/bokftui.c +++ b/clients/bokftui.c @@ -4538,6 +4538,11 @@ static void company_screen(struct app *a) { static int sel = 0; const int nf = (int)(sizeof COMPANY_FIELDS / sizeof COMPANY_FIELDS[0]); + const int ninv = 2; + static const char *const invkeys[2] = { "invoice_bankgiro", + "invoice_our_ref" }; + static const char *const invlabels[2] = { "Bankgiro", + "Vår referens (faktura)" }; int owner = a->role[0] && strcmp(a->role, "owner") == 0; for (;;) { if (g_quit) @@ -4548,8 +4553,8 @@ static void company_screen(struct app *a) free(resp); return; } - char *vals[16]; - struct tui_form_field ff[16]; + char *vals[20]; + struct tui_form_field ff[20]; memset(ff, 0, sizeof ff); for (int i = 0; i < nf; i++) { char path[64]; @@ -4569,9 +4574,26 @@ static void company_screen(struct app *a) ff[i].kind = TUI_F_TEXT; } free(resp); - ff[nf].label = "Styrelseledamöter"; - ff[nf].kind = TUI_F_ACTION; - int r = tui_form_run("Företagsuppgifter", ff, nf + 1, owner, &sel); + char *sresp = + client_rpc(&a->conn, "settings.get", a->session, a->org, "{}"); + for (int i = 0; i < ninv; i++) { + char path[64]; + int idx = nf + i; + vals[idx] = xcalloc(512, 1); + snprintf(path, sizeof path, "result.%s", invkeys[i]); + char *v = sresp ? jstr_dup(sresp, path) : NULL; + snprintf(vals[idx], 512, "%s", v ? v : ""); + free(v); + ff[idx].label = invlabels[i]; + ff[idx].value = vals[idx]; + ff[idx].cap = 512; + ff[idx].kind = TUI_F_TEXT; + } + free(sresp); + ff[nf + ninv].label = "Styrelseledamöter"; + ff[nf + ninv].kind = TUI_F_ACTION; + int r = tui_form_run("Företagsuppgifter", ff, nf + ninv + 1, owner, + &sel); if (r >= 0 && r < nf) { if (!company_field_valid(&COMPANY_FIELDS[r], vals[r])) { tui_message("Ogiltigt värde", "%s", COMPANY_FIELDS[r].label); @@ -4594,10 +4616,24 @@ static void company_screen(struct app *a) show_error("Kunde inte spara", rr); free(rr); } + } else if (r >= nf && r < nf + ninv) { + yyjson_mut_doc *d = yyjson_mut_doc_new(NULL); + yyjson_mut_val *o = yyjson_mut_obj(d); + yyjson_mut_doc_set_root(d, o); + yyjson_mut_obj_add_strcpy(d, o, "key", invkeys[r - nf]); + yyjson_mut_obj_add_strcpy(d, o, "value", vals[r]); + char *args = yyjson_mut_write(d, 0, NULL); + yyjson_mut_doc_free(d); + char *rr = client_rpc(&a->conn, "settings.set", a->session, + a->org, args); + free(args); + if (!rr || !client_ok(rr)) + show_error("Kunde inte spara", rr); + free(rr); } - if (r == nf) + if (r == nf + ninv) board_screen(a); - for (int i = 0; i < nf; i++) + for (int i = 0; i < nf + ninv; i++) free(vals[i]); if (r == TUI_FORM_BACK) return; @@ -4607,8 +4643,6 @@ static void company_screen(struct app *a) static const char *const SETTING_KEYS[] = { "default_series", "attachment_dir", - "invoice_bankgiro", - "invoice_our_ref", "invoice_receivable_account", "invoice_revenue_account", "smtp_host", @@ -4622,8 +4656,6 @@ static const char *const SETTING_KEYS[] = { static const char *const SETTING_LABELS[] = { "Standardserie", "Bilagornas mapp", - "Bankgiro", - "Vår referens", "Fordringskonto", "Intäktskonto", "SMTP-server", |
