Name

pay-cert-redeem —

ATTRIBUTES

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?

DESCRIPTION

BEHAVIOR

This tag does not appear to be affected by, or affect, the rest of Interchange.

EXAMPLES

No examples are available at this time. We do consider this a problem and will try to supply some.

NOTES

AVAILABILITY

pay-cert-redeem is available in Interchange versions:

4.6.0-5.9.0 (git-head)

SOURCE

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

AUTHORS

Interchange Development Group

SEE ALSO

pay-cert(7ic)

DocBook! Interchange!