68 lines
1.6 KiB
Perl
68 lines
1.6 KiB
Perl
#!perl
|
|
|
|
# This plugin must at the end in the plugins file.
|
|
|
|
HELP "deposit <amount>" => "Deposit into an account";
|
|
|
|
sub command :Tab(deposit) {
|
|
my ($self, $cart, $command) = @_;
|
|
|
|
$command eq 'deposit' or return NEXT;
|
|
|
|
return "Amount to deposit into your account", \&amount;
|
|
}
|
|
|
|
sub amount :Tab(13.37,42) {
|
|
my ($self, $cart, $amount) = @_;
|
|
|
|
$self->{amount} = parse_amount($amount)
|
|
or return REJECT, "Invalid amount";
|
|
|
|
call_hooks("deposit_methods", \my $message, $self->{deposit_methods} = {});
|
|
|
|
return $message . "How are we receiving this EUR $amount?", \&how
|
|
if keys %{ $self->{deposit_methods} };
|
|
|
|
$cart->add(+$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.";
|
|
|
|
$how->{_key} = $input;
|
|
|
|
if (@{ $how->{prompts} // [] }) {
|
|
return shift @{ $how->{prompts} }, \&how_prompt;
|
|
}
|
|
|
|
$cart->add(+$self->{amount}, $how->{description}, { is_deposit => 1, method => $how->{_key} });
|
|
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(+$self->{amount}, $desc, { is_deposit => 1, method => $how->{_key} });
|
|
return ACCEPT;
|
|
}
|