summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-08-05 04:46:00 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-08-05 04:46:00 +0200
commit713e33e1cde621cd2c9b4d7ab04817ca01047ef8 (patch)
treeb74cce2e867c033dbddcc6d12f0b119a76b0e816
parenta1527aff319b36e046d7415865981be6239184dd (diff)
downloadmoney-713e33e1cde621cd2c9b4d7ab04817ca01047ef8.tar.gz
filter income/expensemain
-rw-r--r--cli/src/search.rs7
-rw-r--r--cli/src/transaction.rs3
-rw-r--r--cli/todo1
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)]
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