#!/usr/bin/env bash # docker-finance | modern accounting for the power-user # # Copyright (C) 2021-2024 Aaron Fiore (Founder, Evergreen Crypto LLC) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # "Libraries" # [ -z "$DOCKER_FINANCE_CONTAINER_REPO" ] && exit 1 source "${DOCKER_FINANCE_CONTAINER_REPO}/src/finance/lib/internal/lib_utils.bash" || exit 1 # # Facade # function lib_ledger::ledger-import() { lib_ledger::__ledger-import "$@" lib_utils::catch $? } function lib_ledger::ledger-cli() { lib_ledger::__ledger-cli "$@" lib_utils::catch $? } function lib_ledger::ledger-ui() { lib_ledger::__ledger-ui "$@" lib_utils::catch $? } function lib_ledger::ledger-vui() { lib_ledger::__ledger-vui "$@" lib_utils::catch $? } function lib_ledger::ledger-web() { lib_ledger::__ledger-web "$@" lib_utils::catch $? } # # Implementation # function lib_ledger::__ledger-import() { [ -z "$global_usage" ] && lib_utils::die_fatal [ -z "$global_arg_delim_1" ] && lib_utils::die_fatal [ -z "$global_arg_delim_2" ] && lib_utils::die_fatal local -r _arg="$1" local -r _usage=" \e[32mDescription:\e[0m Import all accounts' CSV data to produce viable journals (see README for setup) \e[32mUsage:\e[0m $ $global_usage [year${global_arg_delim_2}] \e[32mArguments:\e[0m Fetch year: year${global_arg_delim_2} \e[32mExamples:\e[0m \e[37;2m# Import all years since 2020\e[0m $ $global_usage year${global_arg_delim_2}2020 " if [ "$#" -gt 1 ]; then lib_utils::die_usage "$_usage" fi # Get/Set year if [ ! -z "$_arg" ]; then if [[ ! "$_arg" =~ ^year[s]?${global_arg_delim_2} ]]; then lib_utils::die_usage "$_usage" fi # Parse key for value local _key="${_arg%${global_arg_delim_2}*}" local _len="$((${#_key} + 1))" if [[ "$_key" =~ ^year[s]?$ ]]; then local _arg_year="${_arg:${_len}}" if [ -z "$_arg_year" ]; then lib_utils::die_usage "$_usage" fi fi fi # Arg: year # TODO: implement range if [ ! -z "$_arg_year" ]; then # TODO: 20th century support [[ ! "$_arg_year" =~ ^20[0-9][0-9]$ ]] \ && lib_utils::die_usage "$_usage" \ || declare -gr global_arg_year="$_arg_year" else global_arg_year="$(date +%Y)" declare -gr global_arg_year fi [ -z "$global_child_profile_journal" ] && lib_utils::die_fatal time /usr/local/bin/hledger-flow import \ "$(dirname $global_child_profile_journal)" --start-year "$global_arg_year" } function lib_ledger::__ledger-cli() { /usr/bin/hledger -f "$global_child_profile_journal" "$@" } function lib_ledger::__ledger-ui() { /usr/bin/hledger-ui -f "$global_child_profile_journal" "$@" } function lib_ledger::__ledger-vui() { /usr/bin/hledger -f "$global_child_profile_journal" print -O csv "$@" \ | visidata --motd-url file:///dev/null --filetype csv } function lib_ledger::__ledger-web() { /usr/bin/hledger-web -f "$global_child_profile_journal" "$@" } # vim: sw=2 sts=2 si ai et