commit 26286cabe1ee330c40e5f25bf7ea0d505acae7de Author: Christoph Date: Sat Mar 3 01:30:18 2018 +0100 Initial commit diff --git a/create_monthly_cash_flow.sh b/create_monthly_cash_flow.sh new file mode 100755 index 0000000..f42d124 --- /dev/null +++ b/create_monthly_cash_flow.sh @@ -0,0 +1,430 @@ +#!/usr/bin/env bash + +# ============= +# --- Some Definitions +# ============= + +logfile=$(mktemp) + +office_dir="/home/chris/O.OPEN/Büro" +base_dir_bank_statement="/home/chris/O.OPEN/Bank-Konten/Commerzbank/Geschaefts-Konto/Kontoauszüge" +src_base_dir_cash_flow="${office_dir}/Einnahmen/" + +bill_receipts="Rechnungen Einnahmen" +bill_cost="Rechnungen Ausgaben" + +backup_time="$(date +%Y-%m-%d-%H%M)" + +default_year="$(date +%Y)" +default_month="$(date +%m)" + + +# --- +# --- DON'T MAKE CHANGES AFTER THIS LINE +# --- + + +# ============= +# --- Some functions +# ============= + +# - Revursive function +# - +copy_file () { + + echo "" + echononl "Create directory '"$1"'.." + if [[ ! -d "${dir_cash_cost}/$2/$1" ]]; then + mkdir "${dir_cash_cost}/$2/$1" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi + else + echo_skipped + fi + + while IFS='' read -r -d '' _file || [[ -n $_file ]] ; do + + [[ -h "$_file" ]] && continue + + if [[ -d "$_file" ]] ; then + copy_file "$(basename "${_file}")" "$2/$1" + continue + fi + + echononl "Copy '$(basename "$_file")' to '$(basename "$1")'.." + if [[ "$_file" =~ \.zip$ ]] ; then + echo_skipped + else + cp -a "$_file" "${dir_cash_cost}/$2/$1/$(basename "$_file")" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi + fi + done < <(find "${src_dir_cash_cost}/$2/$1" -mindepth 1 -maxdepth 1 -print0) +} + +clean_up() { + + rm -f $logfile + exit $1 +} + + +echononl(){ + echo X\\c > /tmp/shprompt$$ + if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then + echo "$*\\c" 1>&2 + else + echo -e -n "$*" 1>&2 + fi + rm /tmp/shprompt$$ +} + +fatal(){ + echo "" + echo -e "\t[ \033[31m\033[1mfataler Fehler\033[m ]: $*" + echo "" + echo -e "\t\033[31m\033[1mInstalllation wird abgebrochen\033[m\033[m" + echo "" + clean_up 1 +} + +error(){ + echo "" + echo -e "\t[ \033[31m\033[1mFehler\033[m ]: $*" + echo "" +} + +warn (){ + echo "" + echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" + echo "" +} + +info (){ + echo "" + echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*" + echo "" +} + +echo_ok() { + echo -e "\033[75G[ \033[32mok\033[m ]" +} +echo_failed(){ + echo -e "\033[75G[ \033[1;31mfailed\033[m ]" +} +echo_skipped() { + echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" +} + +trap clean_up SIGHUP SIGINT SIGTERM + +## --- +## --- END: functions + +clear +echo +#echo -e "\033[21G\033[32mSkript zur Erstellung der Dateien für die monatlich Bilanz \033[m" +echo -e "\t\033[32mSkript zur Erstellung der Dateien für die monatlich Bilanz \033[m" +echo +echo +echo + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Für welches Jahr (JJJJ) soll die Bilanz erstellt werden?" +echo "" +year="" +if [[ -n "$default_year" ]] ; then + echononl "Jahr [${default_year}]: " + read year + if [[ "X$year" = "X" ]]; then + year="$default_year" + fi +else + echononl "Jahr [JJJJ]: " + read year + while [ "X$year" = "X" ] ; do + echo -e "\n\t\033[33m\033[1mDie Angabe von 'Jahr' ist erforderlich!\033[m\n" + echononl "Jahr [JJJJ]: " + read year + done +fi +year_short="$(echo ${year:${#year} - 2})" + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Für welche Monat (MM) soll die Bilanz erstellt werden?" +echo "" +month="" +if [[ -n "$default_month" ]] ; then + echononl "Monat [${default_month}]: " + read month + if [[ "X$month" = "X" ]]; then + month="$default_month" + fi +else + echononl "Monat [MM]: " + read month + while [ "X$month" = "X" ] ; do + echo -e "\n\t\033[33m\033[1mDie Angabe von 'Monat' ist erforderlich!\033[m\n" + echononl "Monat [MM]: " + read month + done +fi + + + +src_dir_cash_receipts="${office_dir}/Einnahmen/${year}" +src_dir_cash_cost="${office_dir}/Ausgaben/${year}/$month" +src_dir_bank_statement="$base_dir_bank_statement/${year}" + +base_dir_cash_flow="${office_dir}/Abschluss_${year}" +dir_cash_flow="${base_dir_cash_flow}/${year}-${month}" +dir_cash_receipts="${dir_cash_flow}/$bill_receipts" +dir_cash_cost="${dir_cash_flow}/$bill_cost" + + +echo +#echo -e "\033[21G\033[32mSkript zur Erstellung der Dateien für die monatlich Bilanz \033[m" +echo -e "\t\033[32mErstelle die Dateien für die monatlich Bilanz \033[1m${month}/${year}\033[m" +echo + +info "Continue creating the monthly bilnce type uppercase 'YES'" +echo -e -n "\033[1mContinue:\033[m " +read OK + +if [[ "$OK" != "YES" ]] ; then + fatal "Abort by user request - Answer as not 'YES'" +fi + + +if [[ -d "$dir_cash_flow" ]]; then + echo "" + echononl "Backup existing cash flow directory\n '$dir_cash_flow'.." + mv "$dir_cash_flow" "${dir_cash_flow}.BAK-$backup_time" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +fi + +# --- +# - Create needed directories +# --- + +echo "" +echo "" +echo -e "\033[37m\033[1mCreate needed directories..\033[m" +echo "" + + +echononl "Create directory '$(basename "$base_dir_cash_flow")'.." +if [[ ! -d "$base_dir_cash_flow" ]]; then + mkdir "$base_dir_cash_flow" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +else + echo_skipped +fi + +echononl "Create directory '$(basename "$dir_cash_flow")'.." +if [[ ! -d "$dir_cash_flow" ]]; then + mkdir "$dir_cash_flow" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +else + echo_skipped +fi + +echononl "Create directory '$(basename "$dir_cash_receipts")'.." +if [[ ! -d "$dir_cash_receipts" ]]; then + mkdir "$dir_cash_receipts" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +else + echo_skipped +fi + +echononl "Create directory '$(basename "$dir_cash_cost")'.." +if [[ ! -d "$dir_cash_cost" ]]; then + mkdir "$dir_cash_cost" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +else + echo_skipped +fi + + + + +# --- +# - Bank statement +# --- + +echo "" +echo "" +echo -e "\033[37m\033[1mGet bank statement file for ${month}/${year} ..\033[m" +echo "" + +found_bank_statement=false +echononl "Copy '${src_dir_bank_statement}/Auszug01-${month}-${year_short}.pdf' \n to directory '$dir_cash_flow'.." +if [[ -f "${src_dir_bank_statement}/Auszug01-${month}-${year_short}.pdf" ]]; then + found_bank_statement=true + cp -a "${src_dir_bank_statement}/Auszug01-${month}-${year_short}.pdf" "$dir_cash_flow/" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +else + echo_skipped +fi + +# --- +# - Cash flow receipts +# --- + +echo "" +echo "" +echo -e "\033[37m\033[1mCreate cash flow receipts (Einnahmen)..\033[m" +echo "" + +found_cash_receipts=false +while IFS='' read -r -d '' _rg_pdf ; do + found_cash_receipts=true + echononl "Kopiere Rechnung '$(basename "$_rg_pdf")'.." + cp -a "$_rg_pdf" "$dir_cash_receipts" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +done < <(find "$src_dir_cash_receipts" -maxdepth 1 -type f -name "rg-${year}-${month}*.pdf" -print0) + +echo +found_contract_file=false +while IFS='' read -r -d '' file || [[ -n $file ]] ; do + found_contract_file=true + echononl "Copy '$(basename $file)' to directory\n '$dir_cash_flow'.." + cp -a "$file" "$dir_cash_flow/" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +done < <(find "$base_dir_cash_flow" -mindepth 1 -maxdepth 1 -type f -name "ServiceVertraege_${year}_Stand-${year}-${month}-*.xlsx" -print0) + + + + +# --- +# - Cash flow cost +# --- + +echo "" +echo "" +echo -e "\033[37m\033[1mCreate cash flow cost (Ausgaben)..\033[m" +echo "" + + +found_cash_cost=false +while IFS='' read -r -d '' dir ; do + found_cash_cost=true + copy_file "$(basename "$dir")" "" +done < <(find "$src_dir_cash_cost/" -mindepth 1 -maxdepth 1 -type d -print0) + +# --- +# - Create zip archive +# --- + +echo "" +echo "" +echo -e "\033[37m\033[1mCreate zip archive..\033[m" +echo "" + +echononl "Backup file 'oopen-${year}-${month}.zip'.." +if [[ -f "${base_dir_cash_flow}/oopen-${year}-${month}.zip" ]]; then + cp -a "${base_dir_cash_flow}/oopen-${year}-${month}.zip" \ + "${base_dir_cash_flow}/oopen-${year}-${month}.${backup_time}.zip" > $logfile 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error $(cat $logfile) + fi +else + echo_skipped +fi + +echononl "Change into dorectory '${base_dir_cash_flow}'.." +cd ${base_dir_cash_flow} > $logfile 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error $(cat $logfile) +fi + + +echononl "Create zip archive 'oopen-${year}-${month}.zip'.." +zip -r "oopen-${year}-${month}.zip" "${year}-${month}" > $logfile 2>&1 +if [[ $? -eq 0 ]]; then + echo_ok +else + echo_failed + error $(cat $logfile) +fi + + +if ! $found_cash_receipts ; then + warn "No cash flow receipts (Einnahmen) found." +fi +if ! $found_bank_statement ; then + error "No bank statement file found." +else + echo +fi +if ! $found_contract_file ; then + warn "No service contract file found." +else + echo +fi + +if ! $found_cash_cost ; then + warn "No cash flow cost (Ausgaben) found." +fi + + +echo "" +clean_up 0