pay-cert-redeem —
| Attribute | Pos. | Req. | Default | Description |
|---|---|---|---|---|
| certs | Yes | Yes | ||
| table |
pay_certs
|
|||
| set_scratch | ||||
| capture | ||||
| die | ||||
| success | ||||
| interpolate | 0 | interpolate output? | ||
| hide | 0 | Hide the tag return value? |
Interchange 5.9.0:
Source: dist/strap/config/pay_cert_redeem.tag
Lines: 104
UserTag pay-cert-redeem Order certs
UserTag pay-cert-redeem addAttr
UserTag pay-cert-redeem Routine <<EOR
sub {
my ($certs, $opt) = @_;
my $ctab = $opt->{table} || 'pay_certs';
my $cdb = dbref($ctab)
or die errmsg("No payment cert table '%s'", $ctab);
use vars qw/$Tag/;
$opt->{set_scratch} = 'amount_remaining' unless defined $opt->{set_scratch};
my $svar = $opt->{set_scratch};
my @tid;
if($opt->{capture}) {
$certs ||= $::Scratch->{pay_certs_to_capture};
return unless $certs;
my @certs = split /[\s,\0]+/, $certs;
foreach my $code (@certs) {
my $success = $Tag->pay_cert({ capture => 1, tid => $code });
if($success) {
push @tid, $code;
}
else {
for(@tid) {
my $o = {
void => 1,
code => $_,
};
$Tag->pay_cert( $o );
::logError(
"Voided capture tid %s due to capture error on %s",
$_,
$code,
);
}
}
}
}
else {
my $total_cost = round_to_frac_digits($Tag->total_cost( { noformat => 1 }));
my $remaining = $total_cost;
$certs ||= $::Values->{use_pay_cert} || $::Scratch->{pay_cert_code};
return $remaining unless $certs;
my @certs = split /[\s,\0]+/, $certs;
foreach my $code (@certs) {
last if $remaining <= 0;
my $this = $cdb->field($code, 'amount');
my $amount;
if($this < $remaining) {
$remaining -= $this;
$amount = $this;
}
else {
$amount = $remaining;
$remaining = 0;
}
my $o = {
auth => 1,
amount => $amount,
code => $code,
};
my $tid = $Tag->pay_cert($o);
if($tid) {
push @tid, $tid;
#::logDebug("authorized pay_cert=$code amount=$amount tid=$tid");
}
else {
#::logDebug("failed to auth pay_cert=$code amount=$amount tid=$tid");
for(@tid) {
my $o = {
void => 1,
code => $_,
};
$Tag->pay_cert( $o );
my $msg = errmsg(
"Voided authorization tid %s due to auth error on %s",
$_,
$code,
);
::logError($msg);
}
die errmsg("failed to authorize pay_cert %s", $code)
if $opt->{die};
return $total_cost;
}
}
$::Scratch->{pay_certs_to_capture} = join ",", @tid;
if($opt->{set_scratch}) {
$::Scratch->{$svar} = $remaining;
}
return $opt->{success} if $opt->{success};
return $remaining;
}
}
EOR