X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_svc.pm;h=d6d7d4cf15dfd3efd73161c10e93ce7711129d91;hb=992f784a5f012c7a954f86c62d0977ec947a3170;hp=627410729f625e6d6a3fea934ca13a3fba7ea656;hpb=63973c641c4be00765fa27e55c57cc5b9aa4da19;p=freeside.git diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index 627410729..d6d7d4cf1 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -1,7 +1,7 @@ package FS::cust_svc; use strict; -use vars qw( @ISA $DEBUG $me $ignore_quantity ); +use vars qw( @ISA $DEBUG $me $ignore_quantity $conf $ticket_system ); use Carp; #use Scalar::Util qw( blessed ); use FS::Conf; @@ -25,6 +25,12 @@ $me = '[cust_svc]'; $ignore_quantity = 0; +#ask FS::UID to run this stuff for us later +FS::UID->install_callback( sub { + $conf = new FS::Conf; + $ticket_system = $conf->config('ticket_system') +}); + sub _cache { my $self = shift; my ( $hashref, $cache ) = @_; @@ -103,15 +109,19 @@ record - you should probably use the B method instead. =cut +my $rt_session; + sub delete { my $self = shift; my $error = $self->SUPER::delete; return $error if $error; - if ( FS::Conf->new->config('ticket_system') eq 'RT_Internal' ) { - FS::TicketSystem->init; - my $session = FS::TicketSystem->session; - my $links = RT::Links->new($session->{CurrentUser}); + if ( $ticket_system eq 'RT_Internal' ) { + unless ( $rt_session ) { + FS::TicketSystem->init; + $rt_session = FS::TicketSystem->session; + } + my $links = RT::Links->new($rt_session->{CurrentUser}); my $svcnum = $self->svcnum; $links->Limit(FIELD => 'Target', VALUE => 'freeside://freeside/cust_svc/'.$svcnum); @@ -295,6 +305,17 @@ sub replace { # } # } + #trigger a pkg_change export on pkgnum changes + if ( $new->pkgnum != $old->pkgnum ) { + my $error = $new->svc_x->export('pkg_change', $new->cust_pkg, + $old->cust_pkg, + ); + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error if $error; + } + } + #my $error = $new->SUPER::replace($old, @_); my $error = $new->SUPER::replace($old); if ( $error ) { @@ -330,7 +351,7 @@ sub check { my $part_svc = qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } ); return "Unknown svcpart" unless $part_svc; - if ( $self->pkgnum ) { + if ( $self->pkgnum && ! $ignore_quantity ) { my $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } ); return "Unknown pkgnum" unless $cust_pkg; ($part_svc) = grep { $_->svcpart == $self->svcpart } $cust_pkg->part_svc; @@ -794,14 +815,17 @@ sub get_session_history { } -=item tickets +=item tickets [ STATUS ] Returns an array of hashes representing the tickets linked to this service. +An optional status (or arrayref or hashref of statuses) may be specified. + =cut sub tickets { my $self = shift; + my $status = ( @_ && $_[0] ) ? shift : ''; my $conf = FS::Conf->new; my $num = $conf->config('cust_main-max_tickets') || 10; @@ -810,7 +834,12 @@ sub tickets { if ( $conf->config('ticket_system') ) { unless ( $conf->config('ticket_system-custom_priority_field') ) { - @tickets = @{ FS::TicketSystem->service_tickets($self->svcnum, $num) }; + @tickets = @{ FS::TicketSystem->service_tickets( $self->svcnum, + $num, + undef, + $status, + ) + }; } else { @@ -820,10 +849,11 @@ sub tickets { last if scalar(@tickets) >= $num; push @tickets, @{ FS::TicketSystem->service_tickets( $self->svcnum, - $num - scalar(@tickets), - $priority, - ) - }; + $num - scalar(@tickets), + $priority, + $status, + ) + }; } } } @@ -890,7 +920,8 @@ sub smart_search_param { ( 'table' => 'cust_svc', 'select' => 'svc_all.svcnum AS svcnum, '. - 'COALESCE(svc_all.svcdb, part_svc.svcdb) AS svcdb', + 'COALESCE(svc_all.svcdb, part_svc.svcdb) AS svcdb, '. + 'cust_svc.*', 'addl_from' => $addl_from, 'hashref' => {}, 'extra_sql' => $extra_sql,