diff --git a/deluser b/deluser new file mode 100644 index 0000000..a9e047b --- /dev/null +++ b/deluser @@ -0,0 +1,49 @@ +#!perl + +use List::Util qw(any); + +HELP1 "deluser " => "Delete an account"; + +my $contra = "+donations"; + +sub command :Tab(deluser) ($self, $cart, $command, @) { + $command eq 'deluser' or return NEXT; + + $cart->{_deluser} = 1; + + # Ensure a transaction is triggered by adding one item to the cart. + $cart->add(0, "Forfeit remaining balance"); + + print( + "\n", + ">>> YOU ARE ABOUT TO FORFEIT YOUR BALANCE AND DELETE YOUR ACCOUNT! <<<\n", + "\n", + "Type your name to finish.\n" + ); + + return ACCEPT; +} + +sub hook_checkout_prepare($class, $cart, $account, $transaction_id, @) { + return if not defined $cart->{_deluser}; + + my $amount = RevBank::Accounts::balance($account); + + return ABORT, "Can not delete an account with a negative balance." + if ($amount < 0); + + $cart + ->add(-$amount, "Forfeit remaining balance") + ->add_contra($contra, +$amount, "Delete account \$you"); + + # Not having this bare return here results in "returned an unsupported value". The returned + # value seems to be a cart entry? Why? + return; +} + +sub hook_checkout_done($class, $cart, $account, $transaction_id, @) { + return if not defined $cart->{_deluser}; + + RevBank::Accounts::delete($account); + print "\nAccount $account deleted.\n"; +}