diff options
author | mark <mark> | 2012-02-15 01:32:10 +0000 |
---|---|---|
committer | mark <mark> | 2012-02-15 01:32:10 +0000 |
commit | c6e4f9460f44a7440ef2fa7e67ed51dfe40a7668 (patch) | |
tree | e9df9004013e69645978fa0a3e1c66ad8c7ad6c2 /httemplate | |
parent | ca7ff572923114a72daae24e85f33ad89ebb5ab9 (diff) |
query billing events to see affected objects, #15142
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/browse/part_event.html | 33 | ||||
-rw-r--r-- | httemplate/search/elements/search-html.html | 9 | ||||
-rwxr-xr-x | httemplate/view/cust_pkg.cgi | 11 | ||||
-rw-r--r-- | httemplate/view/part_event-targets.html | 128 |
4 files changed, 176 insertions, 5 deletions
diff --git a/httemplate/browse/part_event.html b/httemplate/browse/part_event.html index f68f06b9f..6be28602d 100644 --- a/httemplate/browse/part_event.html +++ b/httemplate/browse/part_event.html @@ -22,14 +22,14 @@ 'Action', ], 'fields' => [ 'eventpart', - 'event', + $event_sub, $eventtable_sub, $check_freq_sub, $conditions_sub, $action_sub, ], 'links' => [ $link, - $link, + '', '', '', '', @@ -40,6 +40,33 @@ %> <%once> +my $link = [ $p.'edit/part_event.html?', 'eventpart' ]; + +my $event_sub = sub { + my $part_event = shift; + my $onclick = include('/elements/popup_link_onclick.html', + action => $p.'view/part_event-targets.html?'.$part_event->eventpart, + actionlabel => 'Event query - '.$part_event->event, + width => 650, + height => 420, + close_text => 'Close', + ); + [#rows + [#subcolumns + { + 'data' => $part_event->event, + 'link' => $p.'edit/part_event.html?'.$part_event->eventpart, + }, + { + 'data' => ' (query) ', + 'size' => '-1', + 'data_style' => 'b', + 'onclick' => $onclick, + }, + ], + ]; +}; + my $eventtable_labels = FS::part_event->eventtable_labels; my $eventtable_sub = sub { $eventtable_labels->{ shift->eventtable }; }; @@ -131,8 +158,6 @@ my $action_sub = sub { }; -my $link = [ $p.'edit/part_event.html?', 'eventpart' ]; - </%once> <%init> diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html index d1f4b2f1e..af0c8fc09 100644 --- a/httemplate/search/elements/search-html.html +++ b/httemplate/search/elements/search-html.html @@ -296,6 +296,11 @@ % ? '<A HREF="'. $e->{'link'}. '">' % : '' % ). +% ( $e->{'onclick'} # don't use with 'link' +% ? '<A HREF="#" onclick="' . +% $e->{'onclick'}.'">' +% : '' +% ). % ( $e->{'size'} % ? '<FONT SIZE="'.uc($e->{'size'}).'">' % : '' @@ -310,7 +315,9 @@ % : '' % ). % ( $e->{'size'} ? '</FONT>' : '' ). -% ( $e->{'link'} ? '</A>' : '' ). +% ( $e->{'link'} || $e->{'onclick'} +% ? '</A>' +% : '' ). % '</td>'; % % } @$rowref ). diff --git a/httemplate/view/cust_pkg.cgi b/httemplate/view/cust_pkg.cgi new file mode 100755 index 000000000..d8a0041ee --- /dev/null +++ b/httemplate/view/cust_pkg.cgi @@ -0,0 +1,11 @@ +<% $cgi->redirect($path) %> +<%init> +# since cust_pkgs can't be viewed directly, just throw a redirect +my ($pkgnum) = $cgi->keywords; +$pkgnum =~ /^\d+$/ or die "invalid pkgnum '$pkgnum'"; +my $show = $FS::CurrentUser::CurrentUser->default_customer_view =~ /^(jumbo|packages)$/ ? '' : ';show=packages'; + +my $self = FS::cust_pkg->by_key($pkgnum) or die "pkgnum $pkgnum not found"; +my $frag = 'cust_pkg'. $self->pkgnum; +my $path = $p.'view/cust_main.cgi?custnum='.$self->custnum.";$show#$frag"; +</%init> diff --git a/httemplate/view/part_event-targets.html b/httemplate/view/part_event-targets.html new file mode 100644 index 000000000..c5faccfd6 --- /dev/null +++ b/httemplate/view/part_event-targets.html @@ -0,0 +1,128 @@ +<& /elements/header-popup.html, + { + 'title' => 'Event query - '.$part_event->event, + } +&> +% if ( $objects > 0 ) { + <% emt("[quant,_1,$label]", $objects) %> +% if ( $part_event->eventtable ne 'cust_main' ) { + <% emt("belonging to [quant,_1,customer]", $customers) %> +% } +<BR><BR> +<TABLE class="grid" cellspacing=0 width="100%" style="font-size:80%"> + <TR style='background-color:#cccccc'> +% foreach my $header ('Trigger', @cust_header, @header) { + <TH><% $header %></TH> +% } + </TR> + +% my @rowcolors = ('ffffff','eeeeee'); +% my $row = 0; + <TR style="background-color:#<% $rowcolors[$row++ % 2] %>"> +% foreach my $object (@targets) { +% # now works for all eventtables, including cust_pkg +% my $link = $p . 'view/' . $part_event->eventtable . '.cgi?' . +% $object->$pkey; + <TD><A target="_blank" href="<% $link %>"> + <% ucfirst $label %> #<% $object->$pkey %></A></TD> + +% my $cust_main = $object->cust_main; # via Mixin +% my $i = 0; # hack to avoid messing with cust_aligns/colors/styles +% foreach (@cust_fields) { +% if ($cust_header[$i] eq 'Cust. Status') { + <TD style="text-align:center; + font-weight:bold; + color:#<% $cust_main->cust_statuscolor %>"><% $_->($cust_main) %></TD> +% } +% else { + <TD><% $_->($cust_main) %></TD> +% } +% $i++; +% } #foreach @cust_fields + +% foreach (@fields) { + <TD><% ref($_) eq 'CODE' ? $_->($object) : $object->$_ %></TD> +% } + </TR> +% } #foreach $object + +</TABLE> + +% } #object > 0 +% else { + +<% emt("No matching ${label}s found.") %> + +%} +<& /elements/footer.html &> +<%once> +use List::MoreUtils qw(uniq); +</%once> +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; +die "access denied" + unless $curuser->access_right('Edit billing events') + || $curuser->access_right('Edit global billing events'); + +my ($eventpart) = $cgi->keywords; +$eventpart =~ /^\d+$/ or die 'illegal eventpart'; + +my $part_event = FS::part_event->by_key($eventpart) + or die "Event definition $eventpart not found.\n"; +my @targets = $part_event->targets; +my $total = @targets; + +# in imitation of search/elements/search-html.html +my @header; +my @fields; +my ($pkey, $label); +$pkey = dbdef->table($part_event->eventtable)->primary_key; + +for ($part_event->eventtable) { + if (/^cust_main$/) { + # very likely to appear in events + my %paybys = FS::payby->cust_payby2longname; + push @header, 'Balance', 'Payment Method'; + push @fields, 'balance', sub{ $paybys{$_[0]->payby} }; + $label = 'customer'; + } + elsif (/^cust_bill$/) { + push @header, 'Invoice Date', 'Amount', 'Balance'; + push @fields, date_format('_date'), 'charged', 'owed'; + $label = 'invoice'; + } + elsif (/^cust_statement$/) { + push @header, 'Statement Date', 'Amount', 'Balance'; + push @fields, date_format('_date'), 'charged', 'owed'; + $label = 'statement'; + } + elsif (/^cust_pkg$/) { + push @header, 'Package', 'Next Bill', 'Frequency'; + push @fields, sub {$_[0]->part_pkg->pkg}, date_format('bill'), + sub {$_[0]->part_pkg->freq_pretty}; + $label = 'package'; + } + elsif (/^svc_acct$/) { + push @header, 'Username', 'Domain'; + push @fields, 'username', 'domain'; + $label = 'service'; + } + else {} +} + +my @cust_header = FS::UI::Web::cust_header(); +my @cust_fields = FS::UI::Web::cust_fields_subs(); + +my $objects = scalar(@targets); +my $customers = uniq(map {$_->cust_main->custnum} @targets); + +sub date_format { + my $column = shift; + sub { my $obj = shift; + my $value = $obj->get($column); + $value ? time2str('%b %d %Y', $value) : ''; + }; +} + +</%init> |