diff --git a/src/models/account.rs b/src/models/account.rs index f364348..c219a22 100644 --- a/src/models/account.rs +++ b/src/models/account.rs @@ -63,15 +63,9 @@ impl Account { Ok(res) } - pub async fn recategorize_transactions( - &self, - pool: &SqlitePool, - from: Option>, - to: Option>, - ) -> Result<()> { + pub async fn recategorize_transactions(&self, pool: &SqlitePool) -> Result<()> { let rules = Rule::list_by_user(pool, self.user).await?; - let mut tx_list = - Transaction::list_by_date(pool, self.account_id, from, to, None, true).await?; + let mut tx_list = Transaction::list_uncategorized(pool, self.account_id).await?; for tx in tx_list.iter_mut() { println!("Checking {}", tx.get_description()); if tx.recategorize(pool, &rules).await? { diff --git a/src/models/transaction.rs b/src/models/transaction.rs index 1d7c534..78da2c8 100644 --- a/src/models/transaction.rs +++ b/src/models/transaction.rs @@ -157,6 +157,20 @@ impl Transaction { Ok(res) } + pub async fn list_uncategorized(pool: &SqlitePool, account: i32) -> Result> { + let mut query = sqlx::QueryBuilder::new("SELECT * FROM TRANSACTIONS WHERE account="); + query.push_bind(account); + + query.push(" AND category IS NULL"); + let rows = query.build().fetch_all(pool).await?; + + let mut ret = Vec::new(); + for r in &rows { + ret.push(Transaction::from_row(r)?); + } + Ok(ret) + } + pub async fn group_by_date( pool: &SqlitePool, account: i32, diff --git a/templates/accounts.html b/templates/accounts.html index cfa731b..41e10b5 100644 --- a/templates/accounts.html +++ b/templates/accounts.html @@ -22,6 +22,7 @@

Last transactions

+ @@ -75,6 +76,13 @@