fix A/R report
[freeside.git] / httemplate / view / part_event-targets.html
1 <& /elements/header-popup.html,
2      {
3        'title'   => 'Event query - '.$part_event->event,
4      }
5 &>
6 <FORM STYLE="display:inline" ACTION=<%$cgi->url%> METHOD="GET">
7 When event is run on <& /elements/input-date-field.html, {
8   'name'    => 'date',
9   'value'   => $time,
10   'format'  => FS::Conf->new->config('date_format') || '%m/%d/%Y',
11 } &>
12 <INPUT TYPE="hidden" NAME="eventpart" VALUE="<%$eventpart%>">
13 <INPUT TYPE="submit" VALUE="Refresh">
14 </FORM>
15 <BR><BR>
16 % if ( $objects > 0 ) {
17   <% emt("[quant,_1,$label]", $objects) %>
18 %   if ( $part_event->eventtable ne 'cust_main' ) {
19   <% emt("belonging to [quant,_1,customer]", $customers) %>
20 %   }
21 <BR><BR>
22 <TABLE class="grid" cellspacing=0 width="100%" style="font-size:80%">
23   <TR style='background-color:#cccccc'>
24 %   foreach my $header ('Trigger', @cust_header, @header) {
25     <TH><% $header %></TH>
26 %   }
27   </TR>
28
29 %   my @rowcolors = ('ffffff','eeeeee');
30 %   my $row = 0;
31 %   foreach my $object (@targets) {
32   <TR style="background-color:#<% $rowcolors[$row++ % 2] %>">
33 %     # now works for all eventtables, including cust_pkg
34 %     my $link = $p . 'view/' . $part_event->eventtable . '.cgi?' .
35 %        $object->$pkey;
36     <TD><A target="_blank" href="<% $link %>">
37     <% ucfirst $label %> #<% $object->$pkey %></A></TD>
38
39 %     my $cust_main = $object->cust_main; # via Mixin
40 %     my $i = 0; # hack to avoid messing with cust_aligns/colors/styles
41 %     foreach (@cust_fields) {
42 %       if ($cust_header[$i] eq 'Cust. Status') {
43     <TD style="text-align:center;
44                font-weight:bold;
45                color:#<% $cust_main->cust_statuscolor %>"><% $_->($cust_main) %></TD>
46 %       }
47 %       else {
48     <TD><% $_->($cust_main) %></TD>
49 %       }
50 %     $i++;
51 %     } #foreach @cust_fields
52
53 %     foreach (@fields) {
54     <TD><% ref($_) eq 'CODE' ? $_->($object) : $object->$_ %></TD>
55 %     }
56   </TR>
57 %   } #foreach $object
58
59 </TABLE>
60
61 % } #object > 0
62 % else {
63
64 <% emt("No matching ${label}s found.") %>
65
66 %}
67 <& /elements/footer.html &>
68 <%init>
69
70 my $curuser = $FS::CurrentUser::CurrentUser;
71 die "access denied"
72   unless $curuser->access_right('Edit billing events')
73         || $curuser->access_right('Edit global billing events');
74
75 my ($eventpart) = $cgi->param('eventpart');
76 $eventpart =~ /^\d+$/ or die 'illegal eventpart';
77
78 my $time = parse_datetime($cgi->param('date')) || time;
79
80 my $part_event = FS::part_event->by_key($eventpart)
81   or die "Event definition $eventpart not found.\n";
82 my @targets = $part_event->targets('time' => $time);
83 my $total = @targets;
84
85 # in imitation of search/elements/search-html.html
86 my @header;
87 my @fields;
88 my ($pkey, $label);
89 $pkey = dbdef->table($part_event->eventtable)->primary_key;
90
91 for ($part_event->eventtable) {
92   if (/^cust_main$/) {
93     # very likely to appear in events
94     my %paybys = FS::payby->cust_payby2longname;
95     push @header, 'Balance', 'Payment Method';
96     push @fields, 'balance', sub{ $paybys{$_[0]->payby} };
97     $label = 'customer';
98   }
99   elsif (/^cust_bill$/) {
100     push @header, 'Invoice Date', 'Amount', 'Balance';
101     push @fields, date_format('_date'), 'charged', 'owed';
102     $label = 'invoice';
103   }
104   elsif (/^cust_statement$/) {
105     push @header, 'Statement Date', 'Amount', 'Balance';
106     push @fields, date_format('_date'), 'charged', 'owed';
107     $label = 'statement';
108   }
109   elsif (/^cust_pkg$/) {
110     push @header, 'Package', 'Next Bill', 'Frequency';
111     push @fields, sub {$_[0]->part_pkg->pkg}, date_format('bill'), 
112         sub {$_[0]->part_pkg->freq_pretty};
113     $label = 'package';
114   }
115   elsif (/^svc_acct$/) {
116     push @header, 'Username', 'Domain';
117     push @fields, 'username', 'domain';
118     $label = 'service';
119   }
120   else {}
121 }
122
123 my @cust_header = FS::UI::Web::cust_header();
124 my @cust_fields = FS::UI::Web::cust_fields_subs();
125
126 my $objects = scalar(@targets);
127 my $customers = uniq(map {$_->cust_main->custnum} @targets);
128
129 sub date_format {
130   my $column = shift;
131   sub { my $obj = shift;
132         my $value = $obj->get($column);
133         $value ? time2str('%b %d %Y', $value) : '';
134       };
135 }
136
137 </%init>