-
- my $sth = dbh->prepare(
- 'UPDATE svc_acct SET seconds = seconds - ? WHERE svcnum = ?'
- ) or die dbh->errstr;;
- $sth->execute($seconds, $self->svcnum) or die $sth->errstr;
- if ( $conf->exists('svc_acct-usage_suspend')
- && $self->seconds - $seconds <= 0 ) {
- #my $error = $self->suspend;
- my $error = $self->cust_svc->cust_pkg->suspend;
- die $error if $error;
+
+ my $sql = "UPDATE svc_acct SET seconds = ".
+ " CASE WHEN seconds IS NULL THEN 0 ELSE seconds END ". #$seconds||0
+ " $op ? WHERE svcnum = ?";
+ warn "$me $sql\n"
+ if $DEBUG;
+
+ my $sth = $dbh->prepare( $sql )
+ or die "Error preparing $sql: ". $dbh->errstr;
+ my $rv = $sth->execute($seconds, $self->svcnum);
+ die "Error executing $sql: ". $sth->errstr
+ unless defined($rv);
+ die "Can't update seconds for svcnum". $self->svcnum
+ if $rv == 0;
+
+ my $action = $op2action{$op};
+
+ if ( $conf->exists("svc_acct-usage_$action")
+ && &{$op2condition{$op}}($self, $seconds) ) {
+ #my $error = $self->$action();
+ my $error = $self->cust_svc->cust_pkg->$action();
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "Error ${action}ing: $error";
+ }