Optional extra questions after 'deposit'
Made for Bitlair but PAY ATTENTION... the IBAN in this repo is RevSpace's ;)
This commit is contained in:
parent
b31b95ca37
commit
2fbc833011
2 changed files with 75 additions and 10 deletions
|
@ -23,11 +23,53 @@ sub command :Tab(deposit) {
|
||||||
sub amount :Tab(13.37,42) {
|
sub amount :Tab(13.37,42) {
|
||||||
my ($self, $cart, $amount) = @_;
|
my ($self, $cart, $amount) = @_;
|
||||||
|
|
||||||
$amount = parse_amount($amount)
|
$self->{amount} = parse_amount($amount)
|
||||||
or return REJECT, "Invalid 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;
|
return ACCEPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,11 +85,3 @@ sub create :Tab(yes,no) {
|
||||||
return ABORT;
|
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
31
plugins/deposit_methods
Executable 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?",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue