summaryrefslogtreecommitdiff
path: root/src/cmd_fiscal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd_fiscal.c')
-rw-r--r--src/cmd_fiscal.c71
1 files changed, 14 insertions, 57 deletions
diff --git a/src/cmd_fiscal.c b/src/cmd_fiscal.c
index 3f8e2c2..fdfeddd 100644
--- a/src/cmd_fiscal.c
+++ b/src/cmd_fiscal.c
@@ -13,36 +13,13 @@
/* fiscal years and period locks */
/* ------------------------------------------------------------------ */
+#define FY_SPEC \
+ "id:i,label:s,start_date:s,end_date:s,status:s,locked_until:n," \
+ "dividend_ore:i,events:s,agm_date:s,dividend_date:s,employees:s,notes:s"
+
static yyjson_mut_val *fy_json(struct req *r, sqlite3_stmt *st)
{
- yyjson_mut_val *o = yyjson_mut_obj(r->rdoc);
- yyjson_mut_obj_add_int(r->rdoc, o, "id", sqlite3_column_int64(st, 0));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "label",
- sq(sqlite3_column_text(st, 1)));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "start_date",
- sq(sqlite3_column_text(st, 2)));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "end_date",
- sq(sqlite3_column_text(st, 3)));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "status",
- sq(sqlite3_column_text(st, 4)));
- if (sqlite3_column_type(st, 5) == SQLITE_NULL)
- yyjson_mut_obj_add_null(r->rdoc, o, "locked_until");
- else
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "locked_until",
- sq(sqlite3_column_text(st, 5)));
- yyjson_mut_obj_add_int(r->rdoc, o, "dividend_ore",
- sqlite3_column_int64(st, 6));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "events",
- sq(sqlite3_column_text(st, 7)));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "agm_date",
- sq(sqlite3_column_text(st, 8)));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "dividend_date",
- sq(sqlite3_column_text(st, 9)));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "employees",
- sq(sqlite3_column_text(st, 10)));
- yyjson_mut_obj_add_strcpy(r->rdoc, o, "notes",
- sq(sqlite3_column_text(st, 11)));
- return o;
+ return db_row_json(r->rdoc, st, FY_SPEC);
}
#define FY_COLUMNS \
@@ -51,21 +28,10 @@ static yyjson_mut_val *fy_json(struct req *r, sqlite3_stmt *st)
static yyjson_mut_val *h_fiscal_year_list(struct req *r)
{
- yyjson_mut_val *items = yyjson_mut_arr(r->rdoc);
- sqlite3_stmt *st = NULL;
- if (sqlite3_prepare_v2(
- r->db,
- "SELECT " FY_COLUMNS " FROM fiscal_years WHERE org_id=?1"
- " ORDER BY start_date",
- -1, &st, NULL) != SQLITE_OK)
- return db_error(r);
- sqlite3_bind_int64(st, 1, r->org_id);
- while (sqlite3_step(st) == SQLITE_ROW)
- yyjson_mut_arr_add_val(items, fy_json(r, st));
- sqlite3_finalize(st);
- yyjson_mut_val *o = yyjson_mut_obj(r->rdoc);
- yyjson_mut_obj_add_val(r->rdoc, o, "items", items);
- return o;
+ return req_list(r,
+ "SELECT " FY_COLUMNS " FROM fiscal_years WHERE org_id=?1"
+ " ORDER BY start_date",
+ FY_SPEC, "i", r->org_id);
}
static yyjson_mut_val *h_fiscal_year_get(struct req *r)
@@ -355,20 +321,11 @@ static yyjson_mut_val *h_period_lock(struct req *r)
if (fy <= 0 || !util_parse_iso_date(until))
return fail(r, "INVALID_ARGS",
"fiscal_year and until (YYYY-MM-DD) are required");
- sqlite3_stmt *st = NULL;
- if (sqlite3_prepare_v2(
- r->db,
- "UPDATE fiscal_years SET locked_until=?3 WHERE org_id=?1 AND id=?2"
- " AND ?3 BETWEEN start_date AND end_date",
- -1, &st, NULL) != SQLITE_OK)
- return db_error(r);
- sqlite3_bind_int64(st, 1, r->org_id);
- sqlite3_bind_int64(st, 2, fy);
- sqlite3_bind_text(st, 3, until, -1, SQLITE_TRANSIENT);
- int rc = sqlite3_step(st);
- sqlite3_finalize(st);
- if (rc != SQLITE_DONE)
- return db_sqlite_error(r);
+ if (req_exec(r,
+ "UPDATE fiscal_years SET locked_until=?3 WHERE org_id=?1 AND id=?2"
+ " AND ?3 BETWEEN start_date AND end_date",
+ "iis", r->org_id, fy, until) != 0)
+ return NULL;
if (sqlite3_changes(r->db) == 0)
return fail(r, "NOT_FOUND",
"fiscal year not found or until is outside it");