Optional extra questions after 'deposit'

Made for Bitlair but PAY ATTENTION... the IBAN in this repo is RevSpace's ;)
This commit is contained in:
Juerd Waalboer 2018-07-22 22:39:26 +02:00
parent b31b95ca37
commit 2fbc833011
2 changed files with 75 additions and 10 deletions

View file

@ -23,11 +23,53 @@ sub command :Tab(deposit) {
sub amount :Tab(13.37,42) {
my ($self, $cart, $amount) = @_;
$amount = parse_amount($amount)
$self->{amount} = parse_amount($amount)
or return REJECT, "Invalid amount";
$cart->add(undef, +$amount, "Deposit", { is_deposit => 1 });
call_hooks("deposit_methods", $self->{deposit_methods} = {});
return "How are we receiving this EUR $amount?", \&how
if keys %{ $self->{deposit_methods} };
$cart->add(undef, +$self->{amount}, "Deposit", { is_deposit => 1 });
return ACCEPT;
}
sub how :Tab(&how_tab) {
my ($self, $cart, $input) = @_;
my %methods = %{ $self->{deposit_methods} };
my $how = $self->{how} = $methods{$input}
or return REJECT, "'$input' is not a valid answer.";
if (@{ $how->{prompts} // [] }) {
return shift @{ $how->{prompts} }, \&how_prompt;
}
$cart->add(undef, +$self->{amount}, $how->{description}, { is_deposit => 1 });
return ACCEPT;
}
sub how_tab {
my ($self) = @_;
return keys %{ $self->{deposit_methods} };
}
sub how_prompt {
my ($self, $cart, $input) = @_;
my $how = $self->{how};
push @{ $how->{answers} }, $input;
if (@{ $how->{prompts} }) {
return shift @{ $how->{prompts} }, \&how_prompt;
}
my $desc = sprintf $how->{description}, @{ $how->{answers} };
$cart->add(undef, +$self->{amount}, $desc, { is_deposit => 1 });
return ACCEPT;
}
@ -43,11 +85,3 @@ sub create :Tab(yes,no) {
return ABORT;
}
sub hook_checkout {
my ($class, $cart, $user, $transaction_id) = @_;
my $sum;
$sum += $_->{amount} for $cart->select_items('is_deposit');
say sprintf "Don't forget to add EUR %.2f to the cash box!", $sum if $sum;
}

31
plugins/deposit_methods Executable file
View file

@ -0,0 +1,31 @@
#!perl
sub command { NEXT }
sub hook_deposit_methods {
my ($class, $hash) = @_;
print <<"END";
Please type one of the following:
'iban': IBAN transfer (NL 69 ABNA 0431 1582 07)
'cash': Cash in the cash box
'reimburse': Reimbursement of expenses agreed upon in advance
Note: we require an invoice or receipt with this exact amount!
'other': Provide a manual description
END
%$hash = (
iban => { description => "Deposit (IBAN transfer)" },
cash => { description => "Deposit (Cash)" },
other => { description => "Deposit (%s)", prompts => [ "Description" ] },
reimburse => {
description => "Reimbursement (%s, approval: %s)",
prompts => [
"Please provide a short description",
"Which board member gave approval?",
],
},
);
}