From 713e33e1cde621cd2c9b4d7ab04817ca01047ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Thu, 5 Aug 2021 04:46:00 +0200 Subject: filter income/expense --- cli/src/search.rs | 7 ++++++- cli/src/transaction.rs | 3 +++ cli/todo | 1 - 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cli/src/search.rs b/cli/src/search.rs index 816dca8..41910f8 100644 --- a/cli/src/search.rs +++ b/cli/src/search.rs @@ -10,7 +10,7 @@ use rust_decimal::Decimal; use std::convert::TryFrom; use std::str::FromStr; -use crate::transaction::{Category, Transaction}; +use crate::transaction::{Category, Transaction, TransactionKind}; //TODO tests @@ -104,6 +104,7 @@ pub enum Constraint { After(DateIsh), On(DateIsh), AmountCompare(Decimal, Comparison), + TransactionKind(TransactionKind), Filters(Vec), } @@ -121,6 +122,7 @@ impl Constraint { Comparison::Less => &transaction.amount < amount, Comparison::LessOrEqual => &transaction.amount <= amount, }, + Constraint::TransactionKind(kind) => &transaction.kind == kind, Constraint::Filters(filters) => { filters.iter().fold(true, |include, filter| match filter { Filter::Union(constraint) => include || constraint.satisfies(transaction), @@ -145,6 +147,9 @@ impl Constraint { ), map(tag("week"), |_| Constraint::Filters(week_of(today()))), map(tag("month"), |_| Constraint::Filters(month_of(today()))), + map(tag("expense"), |_| Constraint::TransactionKind(TransactionKind::Expense)), + map(tag("income"), |_| Constraint::TransactionKind(TransactionKind::Income)), + //TODO transfer? map( delimited(char('('), separated_list0(space1, Filter::parse), char(')')), Constraint::Filters, diff --git a/cli/src/transaction.rs b/cli/src/transaction.rs index 9053aa3..71f81a3 100644 --- a/cli/src/transaction.rs +++ b/cli/src/transaction.rs @@ -14,7 +14,9 @@ pub(crate) type Account = String; pub(crate) type Category = String; #[derive(Debug)] +#[derive(Clone)] #[derive(Hash)] +#[derive(PartialEq)] #[derive(Deserialize, Serialize)] #[derive(StructOpt)] pub enum TransactionKind { @@ -45,6 +47,7 @@ impl fmt::Display for TransactionKind { } #[derive(Debug)] +#[derive(Clone)] #[derive(Hash)] #[derive(Deserialize, Serialize)] #[derive(Tabled)] diff --git a/cli/todo b/cli/todo index b4e2cff..7dee692 100644 --- a/cli/todo +++ b/cli/todo @@ -2,7 +2,6 @@ search / display / count filter stores > handle to/from differently for expense/income? - expense/income group by category by time frame -- cgit v1.2.1