selfservice priority sort order, #14029
[freeside.git] / FS / FS / ClientAPI / MyAccount.pm
index 014434a..7db49d5 100644 (file)
@@ -339,7 +339,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 {
@@ -673,7 +691,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;
 
@@ -1050,6 +1068,10 @@ 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
                               ],
@@ -1335,7 +1357,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 +1666,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 +1845,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 +1864,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 {