X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_svc.pm;h=621a554102038d2bba696ff950e19c5249b197b4;hb=3cbdd85a96348a287623e3b97c937c7749e99392;hp=ca26074a3da47fd7cd96289cf8a346a5c2b8b54d;hpb=c422010521a7c09673a8d4d0068d3fd482dd2dbc;p=freeside.git diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm index ca26074a3..621a55410 100644 --- a/FS/FS/part_svc.pm +++ b/FS/FS/part_svc.pm @@ -12,6 +12,11 @@ use FS::export_svc; use FS::cust_svc; use FS::part_svc_class; +FS::UID->install_callback(sub { + # preload the cache and make sure all modules load + my $svc_defs = FS::part_svc->_svc_defs; +}); + $DEBUG = 0; =head1 NAME @@ -145,9 +150,9 @@ sub insert { foreach my $field (fields($svcdb), @fields) { next if $field eq 'svcnum'; my $prefix = $svcdb.'__'; - if ( defined( $self->getfield($prefix.$_.'_flag')) - or defined($self->getfield($prefix.$_.'_required')) - or length($self->getfield($prefix.$_.'_label')) + if ( defined( $self->getfield($prefix.$field.'_flag')) + or defined($self->getfield($prefix.$field.'_required')) + or length($self->getfield($prefix.$field.'_label')) ) { my $part_svc_column = $self->part_svc_column($field); my $previous = qsearchs('part_svc_column', { @@ -284,9 +289,9 @@ sub replace { foreach my $field (fields($svcdb),@fields) { next if $field eq 'svcnum'; my $prefix = $svcdb.'__'; - if ( defined( $new->getfield($prefix.$_.'_flag')) - or defined($new->getfield($prefix.$_.'_required')) - or length($new->getfield($prefix.$_.'_label')) + if ( defined( $new->getfield($prefix.$field.'_flag')) + or defined($new->getfield($prefix.$field.'_required')) + or length($new->getfield($prefix.$field.'_label')) ) { my $part_svc_column = $new->part_svc_column($field); my $previous = qsearchs('part_svc_column', { @@ -560,6 +565,9 @@ is specified as B<0>, returns the number of unlinked customer services. sub num_cust_svc { my $self = shift; + return $self->{Hash}{num_cust_svc} + if !@_ && exists($self->{Hash}{num_cust_svc}); + my @param = ( $self->svcpart ); my( $join, $and ) = ( '', '' ); @@ -582,6 +590,26 @@ sub num_cust_svc { $sth->fetchrow_arrayref->[0]; } +=item num_cust_svc_cancelled + +Returns the number of associated customer services that are +attached to cancelled packages. + +=cut + +sub num_cust_svc_cancelled { + my $self = shift; + my $sth = dbh->prepare( + "SELECT COUNT(*) FROM cust_svc + LEFT JOIN cust_pkg USING ( pkgnum ) + WHERE svcpart = ? + AND cust_pkg.cancel IS NOT NULL" + ) or die dbh->errstr; + $sth->execute($self->svcpart) + or die $sth->errstr; + $sth->fetchrow_arrayref->[0]; +} + =item svc_x Returns a list of associated FS::svc_* records. @@ -649,9 +677,17 @@ sub _svc_defs { next; } $info{$mod} = $info; + + # all svc_* modules are required to have h_svc_* modules for invoice + # display. check for them as early as possible. + eval "use FS::h_$mod;"; + if ( $@ ) { + die "couldn't load history record module h_$mod: $@\n"; + } } } + tie my %svc_defs, 'Tie::IxHash', map { $_ => $info{$_}->{'fields'} } sort { $info{$a}->{'display_weight'} <=> $info{$b}->{'display_weight'} }