X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_pkg.pm;h=e3f4777aa9ec409eb37f9bd10da997772075d7f9;hb=df2bf964527e0b5596af471b1b7d84d14305b2a2;hp=e0fb58996e2310c3bb5f62869d3c7a9ed9e8598d;hpb=ff92fba056c2b61753d464c84ecede6ec2f57258;p=freeside.git diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index e0fb58996..e3f4777aa 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -707,7 +707,9 @@ sub cancel { return '' if $date; #no errors my @invoicing_list = grep { $_ !~ /^(POST|FAX)$/ } $self->cust_main->invoicing_list; - if ( !$options{'quiet'} && $conf->exists('emailcancel') && @invoicing_list ) { + if ( !$options{'quiet'} && + $conf->exists('emailcancel', $self->cust_main->agentnum) && + @invoicing_list ) { my $msgnum = $conf->config('cancel_msgnum', $self->cust_main->agentnum); my $error = ''; if ( $msgnum ) { @@ -1650,21 +1652,19 @@ I flag will be omitted. sub h_cust_svc { my $self = shift; my ($end, $start, $mode) = @_; - my %search = ( - 'table' => 'h_cust_svc', - 'hashref' => { 'pkgnum' => $self->pkgnum } + my @cust_svc = $self->_sort_cust_svc( + [ qsearch( 'h_cust_svc', + { 'pkgnum' => $self->pkgnum, }, + FS::h_cust_svc->sql_h_search(@_), + ) ] ); - @search{'select', 'extra_sql', 'cache_obj', 'addl_from'} = - FS::h_cust_svc->sql_h_search($end, $start); if ( $mode eq 'I' ) { - $search{'addl_from'} .= ' JOIN cust_pkg USING (pkgnum) - JOIN pkg_svc USING (pkgpart, svcpart)'; - $search{'extra_sql'} = ' AND pkg_svc.hidden IS NULL '.$search{'extra_sql'}; + my %hidden_svcpart = map { $_->svcpart => $_->hidden } $self->part_svc; + return grep { !$hidden_svcpart{$_->svcpart} } @cust_svc; + } + else { + return @cust_svc; } - - $self->_sort_cust_svc( - [ qsearch(\%search) ] - ); } sub _sort_cust_svc { @@ -1767,6 +1767,7 @@ sub part_svc { max( 0, $pkg_svc->quantity - $num_cust_svc ); $part_svc->{'Hash'}{'cust_pkg_svc'} = $num_cust_svc ? [ $self->cust_svc($part_svc->svcpart) ] : []; + $part_svc->{'Hash'}{'hidden'} = $pkg_svc->hidden; $part_svc; } $self->part_pkg->pkg_svc; @@ -3328,9 +3329,21 @@ sub bulk_change { sub _upgrade_data { # class method my ($class, %opts) = @_; $class->_upgrade_otaker(%opts); - my $sql =('UPDATE cust_pkg SET contract_end = NULL WHERE contract_end = -1'); - my $sth = dbh->prepare($sql); - $sth->execute or die $sth->errstr; + my @statements = ( + # RT#10139, bug resulting in contract_end being set when it shouldn't + 'UPDATE cust_pkg SET contract_end = NULL WHERE contract_end = -1', + # RT#10830, bad calculation of prorate date near end of year + # the date range for bill is December 2009, and we move it forward + # one year if it's before the previous bill date (which it should + # never be) + 'UPDATE cust_pkg SET bill = bill + (365*24*60*60) WHERE bill < last_bill + AND bill > 1259654400 AND bill < 1262332800 AND (SELECT plan FROM part_pkg + WHERE part_pkg.pkgpart = cust_pkg.pkgpart) = \'prorate\'', + ); + foreach my $sql (@statements) { + my $sth = dbh->prepare($sql); + $sth->execute or die $sth->errstr; + } } =back