use FS::Misc qw(card_types);
use FS::Misc::DateTime qw(parse_datetime);
use FS::ClientAPI_SessionCache;
+use FS::cust_svc;
use FS::svc_acct;
use FS::svc_domain;
use FS::svc_phone;
$return{'require_address2'} = '';
}
- if ( $conf->exists('ticket_system') ) {
+ if ( $FS::TicketSystem::system ) {
warn "$me customer_info: initializing ticket system\n" if $DEBUG;
FS::TicketSystem->init();
}
$return{balance} = $cust_main->balance;
}
- $return{tickets} = [ ($cust_main->tickets) ];
+ my @tickets = $cust_main->tickets;
+ # unavoidable false laziness w/ httemplate/view/cust_main/tickets.html
+ if ( FS::TicketSystem->selfservice_priority ) {
+ my $dir = $conf->exists('ticket_system-priority_reverse') ? -1 : 1;
+ $return{tickets} = [
+ sort {
+ (
+ ($a->{'_selfservice_priority'} eq '') <=>
+ ($b->{'_selfservice_priority'} eq '')
+ ) ||
+ ( $dir *
+ ($b->{'_selfservice_priority'} <=> $a->{'_selfservice_priority'})
+ )
+ } @tickets
+ ];
+ }
+ else {
+ $return{tickets} = \@tickets;
+ }
unless ( $session->{'pkgnum'} ) {
my @open = map {
$return{discount_terms_hash} = { $cust_main->discount_terms_hash };
}
+ if ( $session->{'svcnum'} ) {
+ my $cust_svc = qsearchs('cust_svc', { 'svcnum' => $session->{'svcnum'} });
+ $return{'svc_label'} = ($cust_svc->label)[1] if $cust_svc;
+ }
+
} elsif ( $session->{'svcnum'} ) { #no customer record
my $svc_acct = qsearchs('svc_acct', { 'svcnum' => $session->{'svcnum'} } )
if $cust_main->paymask eq $payinfo;
$payinfo =~ s/\D//g;
- $payinfo =~ /^(\d{13,16})$/
+ $payinfo =~ /^(\d{13,16}|\d{8,9})$/
or return { 'error' => gettext('invalid_card') }; # . ": ". $self->payinfo
$payinfo = $1;
{ 'svcnum' => $session->{'svcnum'},
'custnum' => $custnum,
'cust_pkg' => [ map {
- { $_->hash,
+ my $primary_cust_svc = $_->primary_cust_svc;
+ +{ $_->hash,
$_->part_pkg->hash,
+ #status => $_->status,
part_svc =>
[ map $_->hashref, $_->available_part_svc ],
cust_svc =>
if $context eq 'agent'
&& $conf->exists('agent-showpasswords')
&& $_->part_svc->svcdb eq 'svc_acct';
+ $ref->{svchash} = { $_->svc_x->hash } if
+ $_->part_svc->svcdb eq 'svc_phone';
+ $ref->{svchash}->{svcpart} = $_->part_svc->svcpart
+ if $_->part_svc->svcdb eq 'svc_phone'; # hack
$ref;
} $_->cust_svc
],
+ primary_cust_svc =>
+ $primary_cust_svc
+ ? { $primary_cust_svc->hash,
+ label => [ $primary_cust_svc->label ],
+ finger => $primary_cust_svc->svc_x->finger, #uuh
+ $primary_cust_svc->part_svc->hash,
+ }
+ : {}, #'' ?
};
} $cust_main->ncancelled_pkgs
],
'svc_domain' => [ qw( domain ) ],
'svc_phone' => [ qw( phonenum pin sip_password phone_name ) ],
'svc_external' => [ qw( id title ) ],
- 'svc_pbx' => [ qw( id name ) ],
+ 'svc_pbx' => [ qw( id title ) ],
);
my $svc_x = "FS::$svcdb"->new( {
my @bulkdid;
@bulkdid = @{$p->{'bulkdid'}} if $p->{'bulkdid'};
+ if($p->{'svcnum'} && $p->{'svcnum'} =~ /^\d+$/){
+ my($context, $session, $custnum) = _custoragent_session_custnum($p);
+ return { 'error' => $session } if $context eq 'error';
+
+ my $svc_phone = qsearchs('svc_phone', { svcnum => $p->{'svcnum'} });
+ return { 'error' => 'service not found' } unless $svc_phone;
+ return { 'error' => 'invalid svcnum' }
+ if $svc_phone && $svc_phone->cust_svc->cust_pkg->custnum != $custnum;
+
+ $svc_phone->email($p->{'email'})
+ if $svc_phone->email ne $p->{'email'} && $p->{'email'} =~ /^([\w\.\d@]+|)$/;
+ $svc_phone->forwarddst($p->{'forwarddst'})
+ if $svc_phone->forwarddst ne $p->{'forwarddst'}
+ && $p->{'forwarddst'} =~ /^(\d+|)$/;
+ return { 'error' => $svc_phone->replace };
+ }
+
# single DID LNP
unless($p->{'lnp'}) {
$p->{'lnp_desired_due_date'} = parse_datetime($p->{'lnp_desired_due_date'});
my $conf = new FS::Conf;
- return {
+ my $ret = {
'svc' => $part_svc->svc,
'svcdb' => $part_svc->svcdb,
'pkgnum' => $pkgnum,
};
+ if ($p->{'svcnum'} && $p->{'svcnum'} =~ /^\d+$/
+ && $ret->{'svcdb'} eq 'svc_phone') {
+ $ret->{'svcnum'} = $p->{'svcnum'};
+ my $svc_phone = qsearchs('svc_phone', { svcnum => $p->{'svcnum'} });
+ if ( $svc_phone && $svc_phone->cust_svc->cust_pkg->custnum == $custnum ) {
+ $ret->{'email'} = $svc_phone->email;
+ $ret->{'forwarddst'} = $svc_phone->forwarddst;
+ }
+ }
+
+ $ret;
}
sub unprovision_svc {