Initial commit
This commit is contained in:
		
							
								
								
									
										430
									
								
								create_monthly_cash_flow.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										430
									
								
								create_monthly_cash_flow.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -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 | ||||
		Reference in New Issue
	
	Block a user