X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FClientAPI%2FMyAccount.pm;h=c2c295e275430a6c64c3ebe9eef971a2f061921a;hb=0bfdd767de9c8758c5997beb72bfd8c22db25ab4;hp=ac3ebdfc596a765862940dea3c37d68198e14164;hpb=179e23fed3371f98eb52e8d7122b5c13e6e2f8d1;p=freeside.git diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index ac3ebdfc5..c2c295e27 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1422,6 +1422,9 @@ sub list_svcs { next if $pkgnum && $cust_pkg->pkgnum != $pkgnum; push @cust_svc, @{[ $cust_pkg->cust_svc ]}; #@{[ ]} to force array context } + + @cust_svc = grep { $_->part_svc->selfservice_access ne 'hidden' } @cust_svc; + if ( $p->{'svcdb'} ) { my $svcdb = ref($p->{'svcdb'}) eq 'HASH' ? $p->{'svcdb'} @@ -1445,7 +1448,8 @@ sub list_svcs { map { my $svc_x = $_->svc_x; my($label, $value) = $_->label; - my $svcdb = $_->part_svc->svcdb; + my $part_svc = $_->part_svc; + my $svcdb = $part_svc->svcdb; my $cust_pkg = $_->cust_pkg; my $part_pkg = $cust_pkg->part_pkg; @@ -1455,6 +1459,7 @@ sub list_svcs { 'label' => $label, 'value' => $value, 'pkg_status' => $cust_pkg->status, + 'readonly' => ( $part_svc->selfservice_access eq 'readonly' ), ); if ( $svcdb eq 'svc_acct' ) { @@ -1560,8 +1565,6 @@ sub acct_forward_info { sub process_acct_forward { my $p = shift; - warn Dumper($p); - my($context, $session, $custnum) = _custoragent_session_custnum($p); return { 'error' => $session } if $context eq 'error'; @@ -1592,10 +1595,13 @@ sub process_acct_forward { } else { my $conf = new FS::Conf; $new->svcpart($conf->config('selfservice-svc_forward_svcpart')); - $new->pkgnum($old->cust_svc->pkgnum); - warn Dumper($new); + + my $svc_acct = _customer_svc_x( $custnum, $p->{'svcnum'}, 'svc_acct' ) + or return { 'error' => 'No service' }; #how would we even get here? + + $new->pkgnum( $svc_acct->cust_svc->pkgnum ); + $error = $new->insert; - warn $error; } return { 'error' => $error }; @@ -1715,9 +1721,10 @@ sub list_support_usage { } sub _list_cdr_usage { - my($svc_phone, $begin, $end) = @_; - map [ $_->downstream_csv('format' => 'default', 'keeparray' => 1) ], #XXX config for format - $svc_phone->get_cdrs( 'begin'=>$begin, 'end'=>$end, ); + # XXX CDR type support... + my($svc_phone, $begin, $end, %opt) = @_; + map [ $_->downstream_csv(%opt, 'keeparray' => 1) ], + $svc_phone->get_cdrs( 'begin'=>$begin, 'end'=>$end, ); } sub list_cdr_usage { @@ -1742,12 +1749,26 @@ sub _usage_details { return { 'error' => 'No service selected in list_svc_usage' } unless $svc_x; - my $header = $svcdb eq 'svc_phone' - ? [ split(',', FS::cdr::invoice_header('default') ) ] #XXX - : []; - my $cust_pkg = $svc_x->cust_svc->cust_pkg; my $freq = $cust_pkg->part_pkg->freq; + my %callback_opt; + my $header = []; + if ( $svcdb eq 'svc_phone' ) { + my $format = $cust_pkg->part_pkg->option('output_format') || ''; + $format = '' if $format =~ /^sum_/; + # sensible default if there is no format or it's a summary format + if ( $cust_pkg->part_pkg->plan eq 'voip_inbound' ) { + $format ||= 'source_default'; + $callback_opt{inbound} = 1; + } + else { + $format ||= 'default'; + } + + $callback_opt{format} = $format; + $header = [ split(',', FS::cdr::invoice_header($format) ) ]; + } + my $start = $cust_pkg->setup; #my $end = $cust_pkg->bill; # or time? my $end = time; @@ -1757,7 +1778,9 @@ sub _usage_details { $p->{ending} = $end; } - my (@usage) = &$callback($svc_x, $p->{beginning}, $p->{ending}); + my (@usage) = &$callback($svc_x, $p->{beginning}, $p->{ending}, + %callback_opt + ); #kinda false laziness with FS::cust_main::bill, but perhaps #we should really change this bit to DateTime and DateTime::Duration