event refactor, landing on HEAD!
[freeside.git] / httemplate / search / cust_bill_event.cgi
1 <% include( 'elements/search.html',
2                  'title'       => $title,
3                  'html_init'   => $html_init,
4                  'menubar'     => $menubar,
5                  'name'        => 'billing events',
6                  'query'       => $sql_query,
7                  'count_query' => $count_sql,
8                  'header'      => [ 'Event',
9                                     'Date',
10                                     'Status',
11                                     #'Inv #', 'Inv Date', 'Cust #',
12                                     'Invoice',
13                                     FS::UI::Web::cust_header(),
14                                   ],
15                  'fields' => [
16                                'event',
17                                sub { time2str("%b %d %Y %T", $_[0]->_date) },
18                                sub { 
19                                      #my $cust_bill_event = shift;
20                                      my $status = $_[0]->status;
21                                      $status .= ': '.$_[0]->statustext
22                                        if $_[0]->statustext;
23                                      $status;
24                                    },
25                                sub {
26                                      #my $cust_bill_event = shift;
27                                      'Invoice #'. $_[0]->invnum.
28                                      ' ('.
29                                        time2str("%D", $_[0]->cust_bill_date).
30                                      ')';
31                                    },
32                                \&FS::UI::Web::cust_fields,
33                              ],
34                 'align' => 'lrlr'.FS::UI::Web::cust_aligns(),
35                 'links' => [
36                               '',
37                               '',
38                               '',
39                               sub {
40                                 my $part_bill_event = shift;
41                                 my $template = $part_bill_event->templatename;
42                                 $template .= '-' if $template;
43                                 [ "${p}view/cust_bill.cgi?$template", 'invnum'];
44                               },
45                               ( map { $_ ne 'Cust. Status' ? $link_cust : '' }
46                                     FS::UI::Web::cust_header()
47                               ),
48                             ],
49                  'color' => [ 
50                               '',
51                               '',
52                               '',
53                               '',
54                               FS::UI::Web::cust_colors(),
55                             ],
56                  'style' => [ 
57                               '',
58                               '',
59                               '',
60                               '',
61                               FS::UI::Web::cust_styles(),
62                             ],
63              )
64 %>
65 <%init>
66
67 my $curuser = $FS::CurrentUser::CurrentUser;
68
69 die "access denied"
70   unless $curuser->access_right('Billing event reports')
71       or $curuser->access_right('View customer billing events')
72          && $cgi->param('invnum') =~ /^(\d+)$/;
73
74 my $title = $cgi->param('failed')
75               ? 'Failed invoice events'
76               : 'Invoice events';
77
78 my @search = ();
79
80 if ( $cgi->param('agentnum') && $cgi->param('agentnum') =~ /^(\d+)$/ ) {
81   push @search, "agentnum = $1";
82   #my $agent = qsearchs('agent', { 'agentnum' => $1 } );
83   #die "unknown agentnum $1" unless $agent;
84 }
85
86 my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
87 push @search, "cust_bill_event._date >= $beginning",
88               "cust_bill_event._date <= $ending";
89
90 if ( $cgi->param('failed') ) {
91   push @search, "statustext != ''",
92                 "statustext IS NOT NULL",
93                 "statustext != 'N/A'";
94 }
95
96 if ( $cgi->param('part_bill_event.payby') =~ /^(\w+)$/ ) {
97   push @search, "part_bill_event.payby = '$1'";
98 }
99
100 if ( $cgi->param('invnum') =~ /^(\d+)$/ ) {
101   push @search, "cust_bill_event.invnum = '$1'";
102 }
103
104 #here is the agent virtualization
105 push @search, $FS::CurrentUser::CurrentUser->agentnums_sql;
106
107 my $where = 'WHERE '. join(' AND ', @search );
108
109 my $join = 'LEFT JOIN part_bill_event USING ( eventpart ) '.
110            'LEFT JOIN cust_bill       USING ( invnum    ) '.
111            'LEFT JOIN cust_main       USING ( custnum   ) ';
112
113 my $sql_query = {
114   'table'     => 'cust_bill_event',
115   'select'    => join(', ',
116                     'cust_bill_event.*',
117                     'part_bill_event.event',
118                     'cust_bill.custnum',
119                     'cust_bill._date AS cust_bill_date',
120                     'cust_main.custnum AS cust_main_custnum',
121                     FS::UI::Web::cust_sql_fields(),
122                   ),
123   'hashref'   => {}, 
124   'extra_sql' => "$where ORDER BY _date ASC",
125   'addl_from' => $join,
126 };
127
128 my $count_sql = "SELECT COUNT(*) FROM cust_bill_event $join $where";
129
130 my $conf = new FS::Conf;
131
132 my $failed = $cgi->param('failed');
133
134 my $html_init = '
135     <FONT SIZE="+1">Invoice events are the deprecated, old-style actions taken o
136 n open invoices.  See Reports-&gt;Billing events-&gt;Billing events for current event reports.</FONT><BR><BR>';
137
138 $html_init .= join("\n", map {
139   ( my $action = $_ ) =~ s/_$//;
140   include('/elements/progress-init.html',
141             $_.'form',
142             [ 'action', 'beginning', 'ending', 'failed' ],
143             "../misc/${_}invoice_events.cgi",
144             { 'message' => "Invoices re-${action}ed" }, #would be nice to show the number of them, but...
145             $_, #key
146          ),
147   qq!<FORM NAME="${_}form">!,
148   qq!<INPUT TYPE="hidden" NAME="action" VALUE="$_">!, #not used though
149   qq!<INPUT TYPE="hidden" NAME="beginning" VALUE="$beginning">!,
150   qq!<INPUT TYPE="hidden" NAME="ending"    VALUE="$ending">!,
151   qq!<INPUT TYPE="hidden" NAME="failed"    VALUE="$failed">!,
152   qq!</FORM>!
153 } qw( print_ email_ fax_ ) );
154
155 my $menubar =  [
156                  'Re-print these events' =>
157                    "javascript:print_process()",
158                  'Re-email these events' =>
159                    "javascript:email_process()",
160                ];
161
162 push @$menubar, 'Re-fax these events' =>
163                   "javascript:fax_process()"
164   if $conf->exists('hylafax');
165
166 my $link_cust = sub {
167   my $cust_bill_event = shift;
168   $cust_bill_event->cust_main_custnum
169     ? [ "${p}view/cust_main.cgi?", 'custnum' ]
170     : '';
171 };
172
173 </%init>