[freeside-commits] freeside/FS/FS Conf.pm, 1.340, 1.341 svc_acct.pm, 1.271, 1.272

Ivan,,, ivan at wavetail.420.am
Sun Dec 13 23:10:53 PST 2009


Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv24793/FS/FS

Modified Files:
	Conf.pm svc_acct.pm 
Log Message:
add overlimit_groups agent-specific config, overriding export-specific overlimit_groups, RT#6622

Index: Conf.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Conf.pm,v
retrieving revision 1.340
retrieving revision 1.341
diff -u -d -r1.340 -r1.341
--- Conf.pm	29 Nov 2009 23:18:07 -0000	1.340
+++ Conf.pm	14 Dec 2009 07:10:50 -0000	1.341
@@ -2242,6 +2242,14 @@
   },
 
   {
+    'key'         => 'overlimit_groups',
+    'section'     => '',
+    'description' => 'RADIUS group (or comma-separated groups) to assign to svc_acct which has exceeded its bandwidth or time limit.',
+    'type'        => 'text',
+    'per_agent'   => 1,
+  },
+
+  {
     'key'         => 'cust-fields',
     'section'     => 'UI',
     'description' => 'Which customer fields to display on reports by default',

Index: svc_acct.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/svc_acct.pm,v
retrieving revision 1.271
retrieving revision 1.272
diff -u -d -r1.271 -r1.272
--- svc_acct.pm	4 Dec 2009 04:45:42 -0000	1.271
+++ svc_acct.pm	14 Dec 2009 07:10:50 -0000	1.272
@@ -1947,26 +1947,13 @@
         ( $action eq 'suspend'   && !$self->overlimit 
        || $action eq 'unsuspend' &&  $self->overlimit ) 
      ) {
-    foreach my $part_export ( $self->cust_svc->part_svc->part_export ) {
-      if ($part_export->option('overlimit_groups')) {
-        my ($new,$old);
-        my $other = new FS::svc_acct $self->hashref;
-        my $groups = &{ $self->_fieldhandlers->{'usergroup'} }
-                       ($self, $part_export->option('overlimit_groups'));
-        $other->usergroup( $groups );
-        if ($action eq 'suspend'){
-          $new = $other; $old = $self;
-        }else{
-          $new = $self; $old = $other;
-        }
-        my $error = $part_export->export_replace($new, $old);
-        $error ||= $self->overlimit($action);
-        if ( $error ) {
-          $dbh->rollback if $oldAutoCommit;
-          return "Error replacing radius groups in export, ${op}: $error";
-        }
-      }
+
+    my $error = $self->_op_overlimit($action);
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
     }
+
   }
 
   if ( $conf->exists("svc_acct-usage_$action")
@@ -2011,6 +1998,61 @@
 
 }
 
+sub _op_overlimit {
+  my( $self, $action ) = @_;
+
+  local $SIG{HUP} = 'IGNORE';
+  local $SIG{INT} = 'IGNORE';
+  local $SIG{QUIT} = 'IGNORE';
+  local $SIG{TERM} = 'IGNORE';
+  local $SIG{TSTP} = 'IGNORE';
+  local $SIG{PIPE} = 'IGNORE';
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  my $cust_pkg = $self->cust_svc->cust_pkg;
+
+  my $agent_overlimit =
+    $cust_pkg
+      ? $conf->config('overlimit_groups', $cust_pkg->cust_main->agentnum )
+      : '';
+
+  foreach my $part_export ( $self->cust_svc->part_svc->part_export ) {
+
+    my $groups = $agent_overlimit || $part_export->option('overlimit_groups');
+    next unless $groups;
+
+    my $gref = &{ $self->_fieldhandlers->{'usergroup'} }( $self, $groups );
+
+    my $other = new FS::svc_acct $self->hashref;
+    $other->usergroup( $gref );
+
+    my($new,$old);
+    if ($action eq 'suspend') {
+      $new = $other;
+      $old = $self;
+    } else { # $action eq 'unsuspend'
+      $new = $self;
+      $old = $other;
+    }
+
+    my $error = $part_export->export_replace($new, $old)
+                || $self->overlimit($action);
+
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return "Error replacing radius groups: $error";
+    }
+
+  }
+
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+  '';
+
+}
+
 sub set_usage {
   my( $self, $valueref, %options ) = @_;
 
@@ -2083,28 +2125,20 @@
   }
 
   if ( $reset ) {
-    my $error;
 
-    if ($self->overlimit) {
-      $error = $self->overlimit('unsuspend');
-      foreach my $part_export ( $self->cust_svc->part_svc->part_export ) {
-        if ($part_export->option('overlimit_groups')) {
-          my $old = new FS::svc_acct $self->hashref;
-          my $groups = &{ $self->_fieldhandlers->{'usergroup'} }
-                         ($self, $part_export->option('overlimit_groups'));
-          $old->usergroup( $groups );
-          $error ||= $part_export->export_replace($self, $old);
-        }
-      }
-    }
+    my $error = '';
+
+    $error = $self->_op_overlimit('unsuspend')
+      if $self->overlimit;;
+
+    $error ||= $self->cust_svc->cust_pkg->unsuspend
+      if $conf->exists("svc_acct-usage_unsuspend");
 
-    if ( $conf->exists("svc_acct-usage_unsuspend")) {
-      $error ||= $self->cust_svc->cust_pkg->unsuspend;
-    }
     if ( $error ) {
       $dbh->rollback if $oldAutoCommit;
       return "Error unsuspending: $error";
     }
+
   }
 
   warn "$me update successful; committing\n"



More information about the freeside-commits mailing list