diff options
| author | Anders Betts <anders.betts@gmail.com> | 2026-09-20 19:55:48 +0200 |
|---|---|---|
| committer | Anders Betts <anders.betts@gmail.com> | 2026-09-20 19:55:48 +0200 |
| commit | beafdbe0d64340387d619c38554976410129f05b (patch) | |
| tree | 007c165855def001c5bb41fe44c0ec654e8db838 | |
| parent | a15e9a3b6e3528a6665533929f67e725960f4fa1 (diff) | |
| download | bokf-0.1.53.tar.gz bokf-0.1.53.zip | |
tui: bankgiro and our ref belong to Företagsuppgifterv0.1.53
| -rw-r--r-- | clients/bokftui.c | 54 | ||||
| -rw-r--r-- | docs/PROTOCOL.md | 4 |
2 files changed, 46 insertions, 12 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", diff --git a/docs/PROTOCOL.md b/docs/PROTOCOL.md index 2fe0e68..bbe8166 100644 --- a/docs/PROTOCOL.md +++ b/docs/PROTOCOL.md @@ -705,7 +705,9 @@ commands. Implemented screens (0.1.0-dev): årsredovisning draft reads them without prompting. - **Företagsuppgifter** — the org record (name, org number, VAT number, address, e-mail, phone, moms period, framework, fiscal-year start month), - editable in place; only owners can save, others see it read-only. + plus the invoice bankgiro and "vår referens"; editable in place, only + owners can save, others see it read-only. The accounting accounts and the + SMTP transport live in **Inställningar**. - **Revision** — chain verification and behandlingshistorik. **Ctrl+N is the universal "add" key**: it starts a new verifikat from the |
