Compare commits

..

No commits in common. "f6e9b5525b07e38a5c787fbe78436eada36f40e7" and "cabb6c50101334b96179998a7fd82a4fbeb14fc6" have entirely different histories.

7 changed files with 26 additions and 27 deletions

View File

@ -200,6 +200,7 @@ but be sure not to include the ticker or symbol of the currency
(i.e., for `$14,567.27 USD`, enter `14567.27` or `14,567.27`).
* **memo**: This can be a string of characters of any length, though fewer than 20-30 characters is advised.
Currently, **commas** in the memo field are **not** supported.
* *quantity*: This is similar to **proceeds**, in that the **decimal separator** must be a **period**,
and you *cannot* include the ticker or symbol of the currency in that field.

View File

@ -34,7 +34,7 @@ so it can be successfully imported into `cryptools`.
* Two methods each of LIFO or FIFO (compatible w/ the concept of "specific identification")
* Ability to perform like-kind exchange treatment through a particular date (must use wizard or `.env` file)
* Ability to perform like-kind exchange treatment through a particular date
* Compatible with any (single) home currency

View File

@ -60,7 +60,7 @@ pub fn import_and_process_final(
&mut transactions_map,
)?;
println!(" Successfully imported CSV Input File.");
println!(" Successfully imported csv file.");
println!("Processing the data...");
transactions_map = create_lots_mvmts::create_lots_and_movements(

View File

@ -28,7 +28,7 @@ pub fn import_from_csv(
let file = match File::open(import_file_path) {
Ok(x) => {
// println!("\nCSV ledger file opened successfully.\n");
println!("\nCSV ledger file opened successfully.\n");
x
},
Err(e) => {
@ -90,7 +90,7 @@ ordered chronologically (i.e., beginning in column 4 - the 1st account column -
The next column's value should be 2, then 3, etc, until the final account).";
// Header row variables have been set. It's now time to set up the accounts.
println!("\nCreating accounts...");
println!("Attempting to create accounts...");
let length = &headerstrings.len();
@ -153,7 +153,7 @@ fn import_transactions(
let mut changed_action_records = 0;
let mut changed_txn_num = Vec::new();
println!("Creating transactions...");
println!("Attempting to create transactions...");
for result in rdr.records() {
@ -243,9 +243,9 @@ fn import_transactions(
let tx_date = NaiveDate::parse_from_str(this_tx_date, &format_yy)
.unwrap_or_else(|_| NaiveDate::parse_from_str(this_tx_date, &format_yyyy)
.expect("
FATAL: Transaction date parsing failed. You must tell the program the format of the date in your CSV Input File. The date separator \
is expected to be a hyphen. The dating format is expected to be \"American\" (%m-%d-%y), not ISO 8601 (%y-%m-%d). You may set different \
date format options via command line flag, environment variable or .env file. Perhaps first run with `--help` or see `.env.example.`\n")
Failed to parse date in input file. Confirm your choice of the separator character, which is expected to be a hyphen \
unless otherwise set via command line flag, environment variable or .env file. Also confirm your choice of dating format \
whether it be American (%m-%d-%y) or ISO (%y-%m-%d). Run with `--help` or see `.env.example.`\n")
);
let transaction = Transaction {

View File

@ -1,6 +1,6 @@
## CONFIGURATION
##
## The defaults are shown below. If the defaults are not suitable, copy this .env.example into a new .env file,
## If the defaults below are not suitable, copy this .env.example into a new .env file,
## uncomment the respective enviroment variable, and set the value according to your needs.
## Alternatively, command line flags are available for ISO_DATE and DATE_SEPARATOR_SWITCH.
## Command line flags will override enviroment variables.
@ -26,7 +26,6 @@
# (Optional; default is not set)
#LK_CUTOFF_DATE=YYYY-mm-DD
# These are the options available for choosing in which order lots are chosen for disposals.
#1. LIFO according to the order the lot was created.
#2. LIFO according to the basis date of the lot.
#3. FIFO according to the order the lot was created.

View File

@ -119,7 +119,8 @@ This software will import your csv file's ledger of cryptocurrency transactions.
It will then process it by creating 'lots' and posting 'movements' to those lots.
Along the way, it will keep track of income, expenses, gains, and losses.
See examples/.env.example or run with --help to learn how to change default program behavior.
See .env.example for environment variables that may be set in a .env file in order to
change default program behavior.
Note: The software is designed to import a full history. Gains and losses may be incorrect otherwise.
");

View File

@ -20,49 +20,47 @@ use crate::wizard;
pub fn get_env(cmd_args: &super::Cli) -> Result<super::Cfg, Box<dyn Error>> {
match dotenv::dotenv() {
Ok(_path) => { println!("Exporting temporary environment variables from .env file.") },
Ok(_path) => { println!("Setting environment variables from .env file.") },
Err(_e) => println!("Did not find .env file.")
}
println!(" Setting runtime variables according to command line options or environment variables (the former take precedent).");
let iso_date: bool = if cmd_args.iso_date {
println!(" Command line flag for ISO_DATE was set. Using YY-mm-dd or YY/mm/dd.");
println!(" Command line flag for ISO_DATE was set. Using YY-mm-dd or YY/mm/dd.");
true
} else {
match env::var("ISO_DATE") {
Ok(val) => {
if val == "1" || val.to_lowercase() == "true" {
println!(" Found ISO_DATE env var: {}. Using YY-mm-dd or YY/mm/dd.", val);
println!(" Found ISO_DATE env var: {}. Using YY-mm-dd or YY/mm/dd.", val);
true
} else {
println!(" Found ISO_DATE env var: {} (not 1 or true). Using MM-dd-YY or MM/dd/YY.", val);
println!(" Found ISO_DATE env var: {} (not 1 or true). Using MM-dd-YY or MM/dd/YY.", val);
false
}
},
Err(_e) => {
println!(" Using default dating convention (MM-dd-YY or MM/dd/YY).");
println!(" Using default dating convention (MM-dd-YY or MM/dd/YY).");
false
},
}
};
let date_separator_is_slash: bool = if cmd_args.date_separator_is_slash {
println!(" Command line flag for DATE_SEPARATOR_IS_SLASH was set. Date separator set to slash (\"/\").");
println!(" Command line flag for DATE_SEPARATOR_IS_SLASH was set. Date separator set to slash (\"/\").");
true
} else {
match env::var("DATE_SEPARATOR_IS_SLASH") {
Ok(val) => {
if val == "1" || val.to_ascii_lowercase() == "true" {
println!(" Found DATE_SEPARATOR_IS_SLASH env var: {}. Date separator set to slash (\"/\").", val);
println!(" Found DATE_SEPARATOR_IS_SLASH env var: {}. Date separator set to slash (\"/\").", val);
true
} else {
println!(" Found DATE_SEPARATOR_IS_SLASH env var: {} (not 1 or true). Date separator set to hyphen (\"-\").", val);
println!(" Found DATE_SEPARATOR_IS_SLASH env var: {} (not 1 or true). Date separator set to hyphen (\"-\").", val);
false
}
}
Err(_e) => {
println!(" Using default date separator, hyphen (\"-\").");
println!(" Using default date separator, hyphen (\"-\").");
false
},
}
@ -70,26 +68,26 @@ pub fn get_env(cmd_args: &super::Cli) -> Result<super::Cfg, Box<dyn Error>> {
let home_currency = match env::var("HOME_CURRENCY") {
Ok(val) => {
println!(" Found HOME_CURRENCY env var: {}", val);
println!(" Found HOME_CURRENCY env var: {}", val);
val.to_uppercase()},
Err(_e) => {
println!(" Using default home currency (USD).");
println!(" Using default home currency (USD).");
"USD".to_string()},
};
let lk_cutoff_date = match env::var("LK_CUTOFF_DATE") {
Ok(val) => {
println!(" Found LK_CUTOFF_DATE env var: {}", val);
println!(" Found LK_CUTOFF_DATE env var: {}", val);
Some(val)},
Err(_e) => None,
};
let inv_costing_method = match env::var("INV_COSTING_METHOD") {
Ok(val) => {
println!(" Found INV_COSTING_METHOD env var: {}", val);
println!(" Found INV_COSTING_METHOD env var: {}", val);
val},
Err(_e) => {
println!(" Using default inventory costing method (LIFO by lot creation date).");
println!(" Using default inventory costing method (LIFO by lot creation date).");
"1".to_string()},
};