use FS::part_export;
use FS::cdr;
use FS::UI::Web;
+use FS::export_cust_svc;
#most FS::svc_ classes are autoloaded in svc_x emthod
use FS::svc_acct; #this one is used in the cache stuff
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
+ # delete associated export_cust_svc
+ foreach my $export_cust_svc (
+ qsearch('export_cust_svc',{ 'svcnum' => $self->svcnum })
+ ) {
+ my $error = $export_cust_svc->delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
my $error = $self->SUPER::delete;
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
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) = @_;
=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) = @_;
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 ),
};
}