Cleaned up journal entry and txt file formatting. Cleaned up auto_memo formatting.
This commit is contained in:
parent
eda9c1932e
commit
e009bb94f8
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "cryptools"
|
name = "cryptools"
|
||||||
version = "0.8.2"
|
version = "0.8.3"
|
||||||
authors = ["scoobybejesus <scoobybejesus@users.noreply.github.com>"]
|
authors = ["scoobybejesus <scoobybejesus@users.noreply.github.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "Command-line utility for processing cryptocurrency transactions into 'lots' and 'movements'."
|
description = "Command-line utility for processing cryptocurrency transactions into 'lots' and 'movements'."
|
||||||
|
|
|
@ -241,16 +241,36 @@ impl Transaction {
|
||||||
let ic_raw_acct = raw_accts.get(&ic_acct.raw_key).unwrap();
|
let ic_raw_acct = raw_accts.get(&ic_acct.raw_key).unwrap();
|
||||||
let ic_ticker = &ic_raw_acct.ticker;
|
let ic_ticker = &ic_raw_acct.ticker;
|
||||||
|
|
||||||
if tx_type == TxType::Exchange {
|
let og_amt_and_ticker;
|
||||||
format!("Paid {} {} for {} {}, valued at {} {}.",
|
if og_raw_acct.is_home_currency(home_currency) {
|
||||||
og_amt, og_ticker, ic_amt, ic_ticker, self.proceeds, home_currency)
|
og_amt_and_ticker = format!("{:.2} {}",
|
||||||
|
og_amt.to_string().as_str().parse::<f32>()?, og_ticker
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
format!("Transferred {} {} to another account. Received {} {}, likely after a transaction fee.",
|
og_amt_and_ticker = format!("{} {}", og_amt, og_ticker);
|
||||||
og_amt, og_ticker, ic_amt, ic_ticker)
|
}
|
||||||
|
|
||||||
|
let ic_amt_and_ticker;
|
||||||
|
if ic_raw_acct.is_home_currency(home_currency) {
|
||||||
|
ic_amt_and_ticker = format!("{:.2} {}",
|
||||||
|
ic_amt.to_string().as_str().parse::<f32>()?, ic_ticker
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
ic_amt_and_ticker = format!("{} {}", ic_amt, ic_ticker);
|
||||||
|
}
|
||||||
|
|
||||||
|
if tx_type == TxType::Exchange {
|
||||||
|
format!("Paid {} for {}, valued at {:.2} {}.",
|
||||||
|
og_amt_and_ticker, ic_amt_and_ticker,
|
||||||
|
self.proceeds.to_string().as_str().parse::<f32>()?, home_currency)
|
||||||
|
} else {
|
||||||
|
format!("Transferred {} to another account. Received {}, likely after a transaction fee.",
|
||||||
|
og_amt_and_ticker, ic_amt_and_ticker)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
format!("Margin profit or loss valued at {} {}.", self.proceeds, home_currency)
|
format!("Margin profit or loss valued at {:.2} {}.",
|
||||||
|
self.proceeds.to_string().as_str().parse::<f32>()?, home_currency)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -263,11 +283,13 @@ impl Transaction {
|
||||||
|
|
||||||
if amt > d128!(0.0) {
|
if amt > d128!(0.0) {
|
||||||
|
|
||||||
format!("Received {} {} valued at {} {}.", amt, ticker, self.proceeds, home_currency)
|
format!("Received {} {} valued at {:.2} {}.", amt, ticker,
|
||||||
|
self.proceeds.to_string().as_str().parse::<f32>()?, home_currency)
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
format!("Spent {} {} valued at {} {}.", amt, ticker, self.proceeds, home_currency)
|
format!("Spent {} {} valued at {:.2} {}.", amt, ticker,
|
||||||
|
self.proceeds.to_string().as_str().parse::<f32>()?, home_currency)
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -174,10 +174,10 @@ depending on the bookkeeping practices you employ.";
|
||||||
|
|
||||||
if let Some(cb) = cost_basis_ic {
|
if let Some(cb) = cost_basis_ic {
|
||||||
debits += cb;
|
debits += cb;
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20.2}{:5}{:>20}",
|
||||||
acct_string_ic,
|
acct_string_ic,
|
||||||
"",
|
"",
|
||||||
cb.to_string(),
|
cb.to_string().as_str().parse::<f32>()?,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
)?;
|
)?;
|
||||||
|
@ -185,12 +185,12 @@ depending on the bookkeeping practices you employ.";
|
||||||
|
|
||||||
if let Some(cb) = cost_basis_og {
|
if let Some(cb) = cost_basis_og {
|
||||||
credits += cb;
|
credits += cb;
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20.2}",
|
||||||
acct_string_og,
|
acct_string_og,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
cb.to_string(),
|
cb.to_string().as_str().parse::<f32>()?,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,20 +199,20 @@ depending on the bookkeeping practices you employ.";
|
||||||
if lt_gain_loss > d128!(0) {
|
if lt_gain_loss > d128!(0) {
|
||||||
credits += lt_gain_loss.abs();
|
credits += lt_gain_loss.abs();
|
||||||
let ltg_string = format!("Long-term gain disposing {}", amount_lt.abs());
|
let ltg_string = format!("Long-term gain disposing {}", amount_lt.abs());
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20.2}",
|
||||||
ltg_string,
|
ltg_string,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
lt_gain_loss.to_string(),
|
lt_gain_loss.to_string().as_str().parse::<f32>()?,
|
||||||
)?;
|
)?;
|
||||||
} else {
|
} else {
|
||||||
debits += lt_gain_loss.abs();
|
debits += lt_gain_loss.abs();
|
||||||
let ltl_string = format!("Long-term loss disposing {}", amount_lt.abs());
|
let ltl_string = format!("Long-term loss disposing {}", amount_lt.abs());
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20.2}{:5}{:>20}",
|
||||||
ltl_string,
|
ltl_string,
|
||||||
"",
|
"",
|
||||||
lt_gain_loss.abs().to_string(),
|
lt_gain_loss.abs().to_string().as_str().parse::<f32>()?,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
)?;
|
)?;
|
||||||
|
@ -224,20 +224,20 @@ depending on the bookkeeping practices you employ.";
|
||||||
if st_gain_loss > d128!(0) {
|
if st_gain_loss > d128!(0) {
|
||||||
credits += st_gain_loss.abs();
|
credits += st_gain_loss.abs();
|
||||||
let stg_string = format!("Short-term gain disposing {}", amount_st.abs());
|
let stg_string = format!("Short-term gain disposing {}", amount_st.abs());
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20.2}",
|
||||||
stg_string,
|
stg_string,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
st_gain_loss.to_string(),
|
st_gain_loss.to_string().as_str().parse::<f32>()?,
|
||||||
)?;
|
)?;
|
||||||
} else {
|
} else {
|
||||||
debits += st_gain_loss.abs();
|
debits += st_gain_loss.abs();
|
||||||
let stl_string = format!("Short-term loss disposing {}", amount_st.abs());
|
let stl_string = format!("Short-term loss disposing {}", amount_st.abs());
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20.2}{:5}{:>20}",
|
||||||
stl_string,
|
stl_string,
|
||||||
"",
|
"",
|
||||||
st_gain_loss.abs().to_string(),
|
st_gain_loss.abs().to_string().as_str().parse::<f32>()?,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
)?;
|
)?;
|
||||||
|
@ -246,21 +246,21 @@ depending on the bookkeeping practices you employ.";
|
||||||
|
|
||||||
if income != d128!(0) {
|
if income != d128!(0) {
|
||||||
credits += income;
|
credits += income;
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20.2}",
|
||||||
"Income",
|
"Income",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
income.to_string(),
|
income.to_string().as_str().parse::<f32>()?,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if expense != d128!(0) {
|
if expense != d128!(0) {
|
||||||
debits += expense.abs();
|
debits += expense.abs();
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20.2}{:5}{:>20}",
|
||||||
"Expense",
|
"Expense",
|
||||||
"",
|
"",
|
||||||
expense.abs().to_string(),
|
expense.abs().to_string().as_str().parse::<f32>()?,
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
)?;
|
)?;
|
||||||
|
@ -274,12 +274,12 @@ depending on the bookkeeping practices you employ.";
|
||||||
"--------------------",
|
"--------------------",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
writeln!(file, "{:50}{:5}{:>20}{:5}{:>20}",
|
writeln!(file, "{:50}{:5}{:>20.2}{:5}{:>20.2}",
|
||||||
" Totals",
|
" Totals",
|
||||||
"",
|
"",
|
||||||
debits,
|
debits.to_string().as_str().parse::<f32>()?,
|
||||||
"",
|
"",
|
||||||
credits,
|
credits.to_string().as_str().parse::<f32>()?,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
writeln!(file, "\n (Txn {} on {}. {}. {})",
|
writeln!(file, "\n (Txn {} on {}. {}. {})",
|
||||||
|
|
|
@ -148,7 +148,7 @@ Enable like-kind treatment: {}",
|
||||||
let lot_sum_row;
|
let lot_sum_row;
|
||||||
|
|
||||||
if raw_acct.is_home_currency(home_currency) {
|
if raw_acct.is_home_currency(home_currency) {
|
||||||
lot_sum_row = format!("\t• Σ: {:.2} {}, with remaining cost basis of {:.2} {} and basis date of {}",
|
lot_sum_row = format!(" • Σ: {:.2} {}, with remaining cost basis of {:.2} {} and basis date of {}",
|
||||||
formatted_sum.to_string().as_str().parse::<f32>()?,
|
formatted_sum.to_string().as_str().parse::<f32>()?,
|
||||||
ticker,
|
ticker,
|
||||||
formatted_basis.to_string().as_str().parse::<f32>()?,
|
formatted_basis.to_string().as_str().parse::<f32>()?,
|
||||||
|
@ -156,7 +156,7 @@ Enable like-kind treatment: {}",
|
||||||
lot.date_for_basis_purposes
|
lot.date_for_basis_purposes
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
lot_sum_row = format!("\t• Σ: {} {}, with remaining cost basis of {:.2} {} and basis date of {}",
|
lot_sum_row = format!(" • Σ: {} {}, with remaining cost basis of {:.2} {} and basis date of {}",
|
||||||
formatted_sum,
|
formatted_sum,
|
||||||
ticker,
|
ticker,
|
||||||
formatted_basis.to_string().as_str().parse::<f32>()?,
|
formatted_basis.to_string().as_str().parse::<f32>()?,
|
||||||
|
@ -165,7 +165,7 @@ Enable like-kind treatment: {}",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
writeln!(file, "{}", lot_sum_row)?;
|
writeln!(file, "{}", lot_sum_row)?;
|
||||||
writeln!(file, "\t Movements:")?;
|
writeln!(file, " Movements:")?;
|
||||||
|
|
||||||
for (m_idx, mvmt) in lot.movements.borrow().iter().enumerate() {
|
for (m_idx, mvmt) in lot.movements.borrow().iter().enumerate() {
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ Enable like-kind treatment: {}",
|
||||||
let description_string: String;
|
let description_string: String;
|
||||||
|
|
||||||
if raw_acct.is_home_currency(home_currency) {
|
if raw_acct.is_home_currency(home_currency) {
|
||||||
description_string = format!("\t\t{}.\t{:<8.2} {} (Txn #{:>4}) {:>9} txn on {:10}. - {}",
|
description_string = format!("\t{}. {:<8.2} {} (Txn #{:>4}) {:>9} txn on {:10}. - {}",
|
||||||
(m_idx+1),
|
(m_idx+1),
|
||||||
mvmt.amount.to_string().as_str().parse::<f32>()?,
|
mvmt.amount.to_string().as_str().parse::<f32>()?,
|
||||||
ticker,
|
ticker,
|
||||||
|
@ -185,7 +185,7 @@ Enable like-kind treatment: {}",
|
||||||
txn.user_memo
|
txn.user_memo
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
description_string = format!("\t\t{}.\t{:<8} {} (Txn #{:>4}) {:>9} txn on {:10}. - {}",
|
description_string = format!("\t{}. {:<8} {} (Txn #{:>4}) {:>9} txn on {:10}. - {}",
|
||||||
(m_idx+1),
|
(m_idx+1),
|
||||||
mvmt.amount,
|
mvmt.amount,
|
||||||
ticker,
|
ticker,
|
||||||
|
@ -216,7 +216,7 @@ Enable like-kind treatment: {}",
|
||||||
let income = mvmt.get_income(ars, raw_acct_map, acct_map, txns_map)?;
|
let income = mvmt.get_income(ars, raw_acct_map, acct_map, txns_map)?;
|
||||||
let expense = mvmt.get_expense(ars, raw_acct_map, acct_map, txns_map)?;
|
let expense = mvmt.get_expense(ars, raw_acct_map, acct_map, txns_map)?;
|
||||||
|
|
||||||
let activity_str = format!("\t\t\tProceeds: {:>10.2}; Cost basis: {:>10.2}; for Gain/loss: {} {:>10.2}; Inc.: {:>10.2}; Exp.: {:>10.2}.",
|
let activity_str = format!("\t Proceeds: {:>10.2}; Cost basis: {:>10.2}; for Gain/loss: {} {:>10.2}; Inc.: {:>10.2}; Exp.: {:>10.2}.",
|
||||||
lk_proceeds.to_string().as_str().parse::<f32>()?,
|
lk_proceeds.to_string().as_str().parse::<f32>()?,
|
||||||
lk_cost_basis.to_string().as_str().parse::<f32>()?,
|
lk_cost_basis.to_string().as_str().parse::<f32>()?,
|
||||||
mvmt.get_term(acct_map, ars),
|
mvmt.get_term(acct_map, ars),
|
||||||
|
|
Loading…
Reference in New Issue