X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FMyAccount.pm;h=4b77ea5dbe29b981827d544de7b3ce4741fcd550;hb=9c7db208cd75125dc072788288d4b2ecac6efafe;hp=a788a5c055fab55ced8591a8cf88ddd99b990767;hpb=12f4cc4b100b849de3584d5d1a2376cebcd8729f;p=freeside.git diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index a788a5c05..4b77ea5db 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -20,6 +20,7 @@ use FS::Msgcat qw(gettext); 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; @@ -321,7 +322,7 @@ sub customer_info { $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(); } @@ -339,7 +340,25 @@ sub customer_info { $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 { @@ -400,6 +419,11 @@ sub customer_info { $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'} } ) @@ -673,7 +697,7 @@ sub process_payment { 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; @@ -1038,8 +1062,10 @@ sub list_pkgs { { '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 => @@ -1050,9 +1076,21 @@ sub list_pkgs { 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 ], @@ -1335,7 +1373,7 @@ sub order_pkg { '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( { @@ -1644,6 +1682,23 @@ sub provision_phone { 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'}); @@ -1806,7 +1861,7 @@ sub part_svc_info { my $conf = new FS::Conf; - return { + my $ret = { 'svc' => $part_svc->svc, 'svcdb' => $part_svc->svcdb, 'pkgnum' => $pkgnum, @@ -1825,6 +1880,17 @@ sub part_svc_info { }; + 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 {