#!perl # This plugin must at the end in the plugins file. HELP "deposit " => "Deposit into an account"; sub command :Tab(deposit) ($self, $cart, $command, @) { $command eq 'deposit' or return NEXT; return "Amount to deposit into your account", \&amount; } sub amount :Tab(13.37,42) ($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 $amount?", \&how if keys %{ $self->{deposit_methods} }; $cart->add(+$self->{amount}, "Deposit", { is_deposit => 1 }); return ACCEPT; } sub how :Tab(&how_tab) ($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($self, @) { return keys %{ $self->{deposit_methods} }; } sub how_prompt($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; }