going somewhere.

This commit is contained in:
didier amyot committed 2022-12-18 10:39:33 -05:00
1 parent 494cdedfc6
commit 64e9be8b5a
12 files changed
+203 -76

No files matched your search

+68 -26
View File
@@ -1,37 +1,62 @@
use rusqlite::{params, Result, Transaction};
use rusqlite::{params, Params, Transaction};
use crate::db::accounts::get_account_by_id;
use crate::db::accounts::{Account, get_account_by_id};
use crate::db::cheques::SecurityEmitterCheque;
use crate::db::external_id::AccountId;
use crate::db::securities;
use crate::db::securities::get_security_by_id;
use crate::util::*;
fn _add_securities_to_account(tx: &Transaction,
cheque: &SecurityEmitterCheque) -> Result<()> {
fn _add_securities_to_account(tx: &TransactionHelper,
cheque: &SecurityEmitterCheque,
account_id: &AccountId) -> CustomResult<()> {
let q = "UPDATE accounts
SET amount = amount + ?1
WHERE id = ?2";
tx.execute(q, params![cheque.amount, account_id])?;
Ok(())
}
fn _add_cheque_to_cashed_cheques_log(tx: &TransactionHelper,
cheque: &SecurityEmitterCheque,
account_id: &AccountId) -> Result<(), Error> {
let q = "
INSERT INTO accounts() VALUES()
INSERT INTO cashed_cheques(
drawer_user_id,
cheque_number,
amount,
underlying_security
)
VALUES(?1, ?2, ?3, ?4)
";
tx.execute(q, params![cheque.amount])?;
tx.execute(q, params![cheque.drawer_user_id,
cheque.cheque_number,
cheque.amount,
cheque.security_id])?;
Ok(())
}
fn cash_cheque(tx: &Transaction,
cheque: &SecurityEmitterCheque) -> Result<()> {
cheque.assert_valid(tx)?;
cheque: &SecurityEmitterCheque,
account_id: &AccountId) -> CustomResult<()> {
// move money to new account
_add_securities_to_account(tx, cheque)?;
// create transaction log
// create cheque log
Ok(())
}
if !securities::is_owner(tx, &cheque.security_id, &cheque.drawer_user_id).map_err(Error::SqlError)? {
return Err(Error::InvalidDrawer(format!("The drawer is the security owner: {:?}", cheque)));
}
fn update_account(tx: &Transaction, account_id: u32) -> Result<()> {
let account = get_account_by_id(tx, account_id)?;
return Ok(());
let myx = TransactionHelper::new(tx);
_add_securities_to_account(&myx, cheque, account_id)?;
_add_cheque_to_cashed_cheques_log(&myx, cheque, account_id)?;
// create transaction log
Ok(())
}
#[cfg(test)]
mod test {
use rusqlite::{Connection, params, Result};
use rusqlite::{Connection, params};
use crate::db::accounts::create_account;
use crate::db::test_utils;
use crate::migration;
@@ -44,19 +69,36 @@ mod test {
return conn;
}
#[test]
fn test_basic() -> Result<()> {
fn test_basic() -> Result<(), Error> {
let mut conn = setup();
let tx = conn.transaction()?;
let (users, securities, accounts) = test_utils::setup_basic_environment(&tx)?;
tx.commit()?;
let tx = conn.transaction().unwrap();
let (users, securities, accounts) = test_utils::setup_basic_environment(&tx).unwrap();
let sec = securities.get(0).unwrap();
let drawer = users.get(0).unwrap();
let payee = users.get(1).unwrap();
let amount: u32 = 1000;
let payee_account = create_account(&tx, & sec.id(), & payee.id()).unwrap();
let tx = conn.transaction()?;
// let cheque = SecurityEmitterCheque{
// drawer_user_id: users.get_unchecked(0).id
// };
tx.commit().unwrap();
let tx = conn.transaction().unwrap();
// let tx = conn.transaction()?;
// SecurityEmitterCheque::new(securities.get())
let cheque = SecurityEmitterCheque::new(
drawer.id(),
sec.id(),
payee.id(),
amount,
99,
);
cash_cheque(&tx, &cheque, &payee_account.id())?;
tx.commit().unwrap();
Ok(())
}
}