X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fsvc_Common.pm;h=80d5e21a6a1b44d91d7f9b3a0f7707980f6d05d3;hb=78e7919724f646e6c13069154943fa8c53957290;hp=38e656cd4080d925bbb409f618d6d6fc2013bfe6;hpb=918bbc9ce36a3dc5943f521e26751ea94a5a5539;p=freeside.git diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm index 38e656cd4..80d5e21a6 100644 --- a/FS/FS/svc_Common.pm +++ b/FS/FS/svc_Common.pm @@ -6,6 +6,7 @@ use FS::Record qw( qsearch qsearchs fields dbh ); use FS::cust_svc; use FS::part_svc; use FS::queue; +use FS::cust_main; @ISA = qw( FS::Record ); @@ -100,8 +101,11 @@ If I is set to an array reference, the jobnums of any export jobs will be added to the referenced array. If I is set to an array reference of FS::tablename objects (for -example, FS::acct_snarf objects), they will have their svcnum fieldsset and -will be inserted after this record, but before any exports are run. +example, FS::acct_snarf objects), they will have their svcnum field set and +will be inserted after this record, but before any exports are run. Each +element of the array can also optionally be a two-element array reference +containing the child object and the name of an alternate field to be filled in +with the newly-inserted svcnum, for example C<[ $svc_forward, 'srcsvc' ]> If I is set (to a scalar jobnum or an array reference of jobnums), all provisioning jobs will have a dependancy on the supplied @@ -172,8 +176,15 @@ sub insert { } foreach my $object ( @$objects ) { - $object->svcnum($self->svcnum); - $error = $object->insert; + my($field, $obj); + if ( ref($object) eq 'ARRAY' ) { + ($obj, $field) = @$object; + } else { + $obj = $object; + $field = 'svcnum'; + } + $obj->$field($self->svcnum); + $error = $obj->insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -394,12 +405,12 @@ sub setx { #get part_svc my $svcpart; - if ( $self->svcnum && qsearchs('cust_svc', {'svcnum'=>$self->svcnum}) ) { + if ( $self->get('svcpart') ) { + $svcpart = $self->get('svcpart'); + } elsif ( $self->svcnum && qsearchs('cust_svc', {'svcnum'=>$self->svcnum}) ) { my $cust_svc = $self->cust_svc; return "Unknown svcnum" unless $cust_svc; $svcpart = $cust_svc->svcpart; - } else { - $svcpart = $self->getfield('svcpart'); } my $part_svc = qsearchs( 'part_svc', { 'svcpart' => $svcpart } ); return "Unkonwn svcpart" unless $part_svc; @@ -536,6 +547,20 @@ sub clone_kludge_unsuspend { shift; } +=item cust_name + +Given a svc_ object that contains fields from cust_main (say, from a +JOINed search. See httemplate/search/svc_* for examples), returns the +equivalent of "$svc_x->cust_svc->cust_pkg->name" (but much more efficient), +or "(unlinked)" if this service is not linked to a customer. + +=cut + +sub cust_name { + my $svc_x = shift; + $svc_x->custnum ? FS::cust_main::name($svc_x) : '(unlinked)'; +} + =back =head1 BUGS