diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-08-05 04:46:00 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-08-05 04:46:00 +0200 |
| commit | 713e33e1cde621cd2c9b4d7ab04817ca01047ef8 (patch) | |
| tree | b74cce2e867c033dbddcc6d12f0b119a76b0e816 | |
| parent | a1527aff319b36e046d7415865981be6239184dd (diff) | |
| download | money-main.tar.gz | |
filter income/expensemain
| -rw-r--r-- | cli/src/search.rs | 7 | ||||
| -rw-r--r-- | cli/src/transaction.rs | 3 | ||||
| -rw-r--r-- | 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<Filter>), } @@ -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)] @@ -2,7 +2,6 @@ search / display / count filter stores > handle to/from differently for expense/income? - expense/income group by category by time frame |
