use FS::cdr;
use FS::UI::Web;
use FS::export_cust_svc;
+use FS::DBI;
#most FS::svc_ classes are autoloaded in svc_x emthod
use FS::svc_acct; #this one is used in the cache stuff
#my $error = $new->SUPER::replace($old, @_);
my $error = $new->SUPER::replace($old);
- #trigger a relocate export on location changes
- if ( $new->cust_pkg->locationnum != $old->cust_pkg->locationnum ) {
+ #trigger a relocate export on location changes (NENA2 and Northern 911 export)
+ my $old_pkg = $old->cust_pkg;
+ my $new_pkg = $new->cust_pkg;
+ if ( $old_pkg && $new_pkg && $new_pkg->locationnum != $old_pkg->locationnum ) {
my $svc_x = $new->svc_x;
if ( $svc_x->locationnum ) {
if ( $svc_x->locationnum == $old->cust_pkg->locationnum ) {
return $cust_pkg->getfield('cancel') || '';
}
-=item label
+=item label [ LOCALE ]
Returns a list consisting of:
-- The name of this service (from part_svc)
+- The name of this service (from part_svc), optionally localized
- A meaningful identifier (username, domain, or mail alias)
- The table name (i.e. svc_domain) for this service
- svcnum
my($label, $value, $svcdb) = $cust_svc->label;
-=item label_long
+=item label_long [ LOCALE ]
Like the B<label> method, except the second item in the list ("meaningful
identifier") may be longer - typically, a full name is included.
sub _label {
my $self = shift;
my $method = shift;
+ my $locale = shift;
my $svc_x = $self->svc_x
or return "can't find ". $self->part_svc->svcdb. '.svcnum '. $self->svcnum;
- $self->$method($svc_x);
+ $self->$method($svc_x, undef, undef, $locale);
}
+# svc_label(_long) takes three arguments: end date, start date, locale
+# and FS::svc_*::label methods must accept those also, if they even care
+
sub svc_label { shift->_svc_label('label', @_); }
sub svc_label_long { shift->_svc_label('label_long', @_); }
sub _svc_label {
my( $self, $method, $svc_x ) = ( shift, shift, shift );
+ my ($end, $start, $locale) = @_;
(
- $self->part_svc->svc,
+ $self->part_svc->svc_locale($locale),
$svc_x->$method(@_),
$self->part_svc->svcdb,
$self->svcnum
=item seconds_since_sqlradacct TIMESTAMP_START TIMESTAMP_END
-See L<FS::svc_acct/seconds_since_sqlradacct>. Equivalent to
-$cust_svc->svc_x->seconds_since_sqlradacct, but more efficient. Meaningless
-for records where B<svcdb> is not "svc_acct".
+Equivalent to $cust_svc->svc_x->seconds_since_sqlradacct, but
+more efficient. Meaningless for records where B<svcdb> is not
+svc_acct or svc_broadband.
=cut
-#note: implementation here, POD in FS::svc_acct
sub seconds_since_sqlradacct {
my($self, $start, $end) = @_;
warn "$mes connecting to sqlradius database\n"
if $DEBUG;
- my $dbh = DBI->connect( map { $part_export->option($_) }
+ my $dbh = FS::DBI->connect( map { $part_export->option($_) }
qw(datasrc username password) )
- or die "can't connect to sqlradius database: ". $DBI::errstr;
+ or die "can't connect to sqlradius database: ". $FS::DBI::errstr;
warn "$mes connected to sqlradius database\n"
if $DEBUG;
=item attribute_since_sqlradacct TIMESTAMP_START TIMESTAMP_END ATTRIBUTE
See L<FS::svc_acct/attribute_since_sqlradacct>. Equivalent to
-$cust_svc->svc_x->attribute_since_sqlradacct, but more efficient. Meaningless
-for records where B<svcdb> is not "svc_acct".
+$cust_svc->svc_x->attribute_since_sqlradacct, but more efficient.
+Meaningless for records where B<svcdb> is not svc_acct or svc_broadband.
=cut
-#note: implementation here, POD in FS::svc_acct
#(false laziness w/seconds_since_sqlradacct above)
sub attribute_since_sqlradacct {
my($self, $start, $end, $attrib) = @_;
warn "$mes connecting to sqlradius database\n"
if $DEBUG;
- my $dbh = DBI->connect( map { $part_export->option($_) }
+ my $dbh = FS::DBI->connect( map { $part_export->option($_) }
qw(datasrc username password) )
- or die "can't connect to sqlradius database: ". $DBI::errstr;
+ or die "can't connect to sqlradius database: ". $FS::DBI::errstr;
warn "$mes connected to sqlradius database\n"
if $DEBUG;
warn "$mes connecting to sqlradius database\n"
if $DEBUG;
- my $dbh = DBI->connect( map { $part_export->option($_) }
+ my $dbh = FS::DBI->connect( map { $part_export->option($_) }
qw(datasrc username password) )
- or die "can't connect to sqlradius database: ". $DBI::errstr;
+ or die "can't connect to sqlradius database: ". $FS::DBI::errstr;
warn "$mes connected to sqlradius database\n"
if $DEBUG;
my $self = shift;
my $svc_x = $self->svc_x;
+{ ( map { $_=>$self->$_ } $self->fields ),
- ( map { $svc_x=>$svc_x->$_ } $svc_x->fields ),
+ ( map { $_=>$svc_x->$_ } $svc_x->fields ),
};
}