RT# 83450 - fixed rateplan export
[freeside.git] / FS / FS / svc_Radius_Mixin.pm
index ac97eab..6674162 100644 (file)
@@ -68,7 +68,8 @@ sub replace  {
 
   $old->usergroup; # make sure this is cached for exports
 
-  my $error =  $new->process_m2m(
+  my $error =  $new->check # make sure fixed fields are set before process_m2m
+            || $new->process_m2m(
                                  'link_table'   => 'radius_usergroup',
                                  'target_table' => 'radius_group',
                                  'params'       => $new->usergroup,
@@ -98,12 +99,12 @@ sub delete {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  my $error =  $self->SUPER::delete(@_)
-            || $self->process_m2m(
+  my $error =  $self->process_m2m(
                                    'link_table'   => 'radius_usergroup',
                                    'target_table' => 'radius_group',
                                    'params'       => [],
-                                 );
+                                 )
+            || $self->SUPER::delete;
 
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
@@ -158,6 +159,71 @@ sub radius_groups {
   return map {$_->$method} @groups;
 }
 
+=item seconds_since_sqlradacct TIMESTAMP_START TIMESTAMP_END
+
+Returns the numbers of seconds this account has been online between
+TIMESTAMP_START (inclusive) and TIMESTAMP_END (exclusive), according to an
+external SQL radacct table, specified via sqlradius export.  Sessions which
+started in the specified range but are still open are counted from session
+start to the end of the range (unless they are over 1 day old, in which case
+they are presumed missing their stop record and not counted).  Also, sessions
+which end in the range but started earlier are counted from the start of the
+range to session end.  Finally, sessions which start before the range but end
+after are counted for the entire range.
+
+TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see
+L<perlfunc/"time">.  Also see L<Time::Local> and L<Date::Parse> for conversion
+functions.
+
+=cut
+
+#note: POD here, implementation in FS::cust_svc
+sub seconds_since_sqlradacct {
+  my $self = shift;
+  $self->cust_svc->seconds_since_sqlradacct(@_);
+}
+
+=item attribute_since_sqlradacct TIMESTAMP_START TIMESTAMP_END ATTRIBUTE
+
+For this service, returns the sum of the given attribute for sessions ending
+between TIMESTAMP_START (inclusive) and TIMESTAMP_END (exclusive).
+
+TIMESTAMP_START and TIMESTAMP_END are specified as UNIX timestamps; see
+L<perlfunc/"time">.  Also see L<Time::Local> and L<Date::Parse> for conversion
+functions.
+
+=cut
+
+#note: POD here, implementation in FS::cust_svc
+sub attribute_since_sqlradacct {
+  my $self = shift;
+  $self->cust_svc->attribute_since_sqlradacct(@_);
+}
+
+=item attribute_last_sqlradacct ATTRIBUTE
+
+For this service, returns the most recent value of the given attribute.
+
+=cut
+
+#note: POD here, implementation in FS::cust_svc
+sub attribute_last_sqlradacct {
+  my $self = shift;
+  $self->cust_svc->attribute_last_sqlradacct(@_);
+}
+=item get_session_history TIMESTAMP_START TIMESTAMP_END
+
+Returns an array of hash references of this customers login history for the
+given time range.  (document this better)
+
+=cut
+
+sub get_session_history {
+  my $self = shift;
+  $self->cust_svc->get_session_history(@_);
+}
+
+
 =back
 
 =cut