You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
6.3 KiB
187 lines
6.3 KiB
#!/usr/bin/env sh
|
|
|
|
|
|
### Config
|
|
### # Get script directory
|
|
### SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
### # Source DB config
|
|
### source $SCRIPT_DIR/.dndbank.conf
|
|
source ${HOME}/.dndbank.conf
|
|
|
|
### Error Handling
|
|
fail_badsel() {
|
|
printf "\n$(tput setaf 3)ERROR 10:$(tput sgr0) $(tput bold)Bad selection!$(tput sgr0)\n\n"
|
|
# Restart at main menu
|
|
show_menu init
|
|
}
|
|
|
|
### Menu
|
|
hold_menu() {
|
|
echo "Press [Enter] to continue..."
|
|
read
|
|
}
|
|
|
|
show_menu() {
|
|
#[ "$1" == "init" ] || pre_menu
|
|
printf 'Select a function by number:
|
|
|
|
1. Create Account
|
|
2. Deposit
|
|
3. Withdrawal
|
|
4. Show All Balances
|
|
5. Show All Transactions
|
|
6. Show Transactions for Account
|
|
9. Delete Account (!)
|
|
|
|
0. Quit
|
|
|
|
|
|
'
|
|
read -p "Selection: " -n1 action
|
|
case $action in
|
|
1)
|
|
echo " Create Account"
|
|
create_account
|
|
;;
|
|
2)
|
|
echo " Make a Desposit"
|
|
make_deposit
|
|
;;
|
|
3)
|
|
echo " Make a Withdrawal"
|
|
make_withdrawal
|
|
;;
|
|
4)
|
|
echo " Show All Balances"
|
|
show_balance
|
|
;;
|
|
5)
|
|
echo " Show All Transactions"
|
|
show_transactions_all
|
|
;;
|
|
6)
|
|
echo " Show Transactions for Account"
|
|
show_transactions
|
|
;;
|
|
9)
|
|
echo " Delete Account"
|
|
delete_account
|
|
;;
|
|
[0qQ])
|
|
echo " Quit"
|
|
exit 0
|
|
;;
|
|
*)
|
|
fail_badsel
|
|
;;
|
|
esac
|
|
}
|
|
|
|
|
|
### Primary Functions ###
|
|
dbconnect="psql -h ${DB_HOST} -p ${DB_PORT} -U ${DB_USER} -d ${DB_NAME}"
|
|
|
|
create_account() {
|
|
read -p "Enter Account Name: " name
|
|
tstamp=$(date +%Y-%m-%d\ %H:%M:%S)
|
|
read -p "Creating account: '${name}'. Are you sure? (y/N)" -n1 CONFIRM
|
|
case $CONFIRM in
|
|
[Yy])
|
|
printf "\n$(tput bold)Creating account...\n\n$(tput sgr0)"
|
|
eval "$dbconnect -c \"INSERT INTO account (name,created) VALUES ('${name}','${tstamp}');\"" &&
|
|
eval "$dbconnect -c \"INSERT INTO balance (id,gold) VALUES ((SELECT id FROM account WHERE name = '${name}'),'0');\"" &&
|
|
printf "\n$(tput bold)$(tput setaf 2)DONE!\n\n$(tput sgr0)" ||
|
|
printf "\n$(tput bold)$(tput setaf 1)ERROR ??: Unknown\n\n$(tput sgr0)"
|
|
;;
|
|
*)
|
|
printf "\n$(tput bold)$(tput setaf 1)ABORT\n\n$(tput sgr0)"
|
|
;;
|
|
esac
|
|
hold_menu
|
|
}
|
|
|
|
delete_account() {
|
|
printf "\n$(tput bold)$(tput setaf 3)This action is not yet supported!\n\n$(tput sgr0)"
|
|
# # Close/Delete Account
|
|
# DELETE FROM balance WHERE id = (SELECT id FROM account WHERE name = ${name});
|
|
# DELETE FROM transaction WHERE account = (SELECT id FROM account WHERE name = ${name});
|
|
# DELETE FROM account WHERE name = ${name};
|
|
show_menu
|
|
}
|
|
|
|
make_deposit() {
|
|
eval "$dbconnect -c \"SELECT * FROM account;\""
|
|
read -p "Enter Account ID: " ID
|
|
read -p "Enter amount of gp to deposit: " amount
|
|
tstamp=$(date +%Y-%m-%d\ %H:%M:%S)
|
|
read -p "Depositing ${amount}gp into account ${ID}. Are you sure? (y/N)" -n1 CONFIRM
|
|
case $CONFIRM in
|
|
[Yy])
|
|
printf "\n$(tput bold)Depositing...\n\n$(tput sgr0)"
|
|
eval "$dbconnect -c \"INSERT INTO transaction (account,deposit,timestamp) VALUES ('${ID}','${amount}','${tstamp}');\""
|
|
eval "$dbconnect -c \"UPDATE balance SET gold = gold + '${amount}' WHERE id = '${ID}';\""
|
|
printf "\n$(tput bold)$(tput setaf 2)DONE!\n\n$(tput sgr0)" ||
|
|
printf "\n$(tput bold)$(tput setaf 1)ERROR ??: Unknown\n\n$(tput sgr0)"
|
|
printf "\nNew balance:\n"
|
|
eval "$dbconnect -c \"SELECT account.id,account.name,gold FROM balance INNER JOIN account ON account.id = balance.id where balance.id = ${ID};\""
|
|
;;
|
|
*)
|
|
printf "\n$(tput bold)$(tput setaf 1)ABORT\n\n$(tput sgr0)"
|
|
;;
|
|
esac
|
|
hold_menu
|
|
# # Transaction (Deposit)
|
|
# INSERT INTO transaction (account,deposit,timestamp) VALUES ((SELECT id FROM account WHERE name = ${name}),${amount},${tstamp});
|
|
# UPDATE balance SET gold = gold + 123.45 WHERE id = (SELECT id FROM account WHERE name = ${name});
|
|
}
|
|
|
|
make_withdrawal() {
|
|
eval "$dbconnect -c \"SELECT * FROM account;\""
|
|
read -p "Enter Account ID: " ID
|
|
read -p "Enter amount of gp to withdraw: " amount
|
|
tstamp=$(date +%Y-%m-%d\ %H:%M:%S)
|
|
read -p "Withdrawing ${amount}gp from account ${ID}. Are you sure? (y/N)" -n1 CONFIRM
|
|
case $CONFIRM in
|
|
[Yy])
|
|
printf "\n$(tput bold)Withdrawing...\n\n$(tput sgr0)"
|
|
eval "$dbconnect -c \"INSERT INTO transaction (account,withdrawal,timestamp) VALUES ('${ID}','${amount}','${tstamp}');\""
|
|
eval "$dbconnect -c \"UPDATE balance SET gold = gold - '${amount}' WHERE id = '${ID}';\""
|
|
printf "\n$(tput bold)$(tput setaf 2)DONE!\n\n$(tput sgr0)" ||
|
|
printf "\n$(tput bold)$(tput setaf 1)ERROR ??: Unknown\n\n$(tput sgr0)"
|
|
printf "\nNew balance:\n"
|
|
eval "$dbconnect -c \"SELECT account.id,account.name,gold FROM balance INNER JOIN account ON account.id = balance.id where balance.id = ${ID};\""
|
|
;;
|
|
*)
|
|
printf "\n$(tput bold)$(tput setaf 1)ABORT\n\n$(tput sgr0)"
|
|
;;
|
|
esac
|
|
hold_menu
|
|
# # Transaction (Withdraw)
|
|
# INSERT INTO transaction (account,withdrawal,timestamp) VALUES ((SELECT id FROM account WHERE name = ${name}),${amount},${tstamp});
|
|
# UPDATE balance SET gold = gold - 12.34 WHERE id = (SELECT id FROM account WHERE name = ${name});
|
|
}
|
|
|
|
show_balance() {
|
|
eval "$dbconnect -c \"SELECT account.id,account.name,gold FROM balance INNER JOIN account ON account.id = balance.id ORDER BY name;\""
|
|
hold_menu
|
|
}
|
|
|
|
show_transactions_all() {
|
|
eval "$dbconnect -c \"SELECT transaction.id,account.name,withdrawal,deposit,timestamp FROM transaction INNER JOIN account ON account.id = transaction.account ORDER BY timestamp;\""
|
|
hold_menu
|
|
}
|
|
|
|
show_transactions() {
|
|
read -p "Enter search term (e.g. character name): " name
|
|
echo
|
|
eval "$dbconnect -c \"SELECT transaction.id,account.name,withdrawal,deposit,timestamp FROM transaction INNER JOIN account ON account.id = transaction.account ORDER BY timestamp;\"" | grep -iE "$name|timestamp|------"
|
|
echo
|
|
hold_menu
|
|
}
|
|
|
|
while true; do
|
|
show_menu init
|
|
done
|
|
exit 1
|
|
|