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;
$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 ) = @_;
=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);
# }
# }
+ #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 ) {
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;
}
-=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;
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 {
last if scalar(@tickets) >= $num;
push @tickets,
@{ FS::TicketSystem->service_tickets( $self->svcnum,
- $num - scalar(@tickets),
- $priority,
- )
- };
+ $num - scalar(@tickets),
+ $priority,
+ $status,
+ )
+ };
}
}
}
(
'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,