compta/mvt.ml

65 lines
1.6 KiB
OCaml

let optstring = function Some s -> s | None -> ""
type t = {
year : int;
month : int;
day : int;
category : string;
subcategory : string;
amount : float;
account : string;
payee : string;
notes : string;
}
type predicate = t -> bool
let create ~year ~month ~day ~category ?subcategory ~amount ~account ~payee
?notes () =
{
year = truncate year;
month = truncate month;
day = truncate day;
category;
subcategory = optstring subcategory;
amount;
account;
payee;
notes = optstring notes;
}
let mvt year month day category subcategory amount account payee notes =
create ~year ~month ~day ~category ?subcategory ~amount ~account ~payee ?notes
()
let after y m d l =
Printf.sprintf "%04d-%02d-%02d" l.year l.month l.day
> Printf.sprintf "%04d-%02d-%02d" y m d
let until y m d l =
Printf.sprintf "%04d-%02d-%02d" l.year l.month l.day
<= Printf.sprintf "%04d-%02d-%02d" y m d
let is_account_caisse : predicate = fun m -> m.account = "CAISSE"
let is_account_courant : predicate = fun m -> m.account = "COURANT"
let any : predicate = fun _ -> true
let mvts fn =
Sqlite3_utils.(
with_db fn (fun db ->
exec db
"select Year, Month, Day, Category, Subcategory, Amount, \
AccountName, Payee, Notes from alldata"
~ty:
Ty.
( nil,
p3 float float float
@>> p2 text (nullable text)
@>> p1 float
@>> p3 text text (nullable text),
mvt )
~f:Cursor.to_list))
|> Rresult.R.get_ok