diff options
Diffstat (limited to 'httemplate/search/cust_event.html')
-rw-r--r-- | httemplate/search/cust_event.html | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/httemplate/search/cust_event.html b/httemplate/search/cust_event.html new file mode 100644 index 000000000..d55b5c6d2 --- /dev/null +++ b/httemplate/search/cust_event.html @@ -0,0 +1,285 @@ +<% include( 'elements/search.html', + 'title' => $title, + 'html_init' => $html_init, + 'menubar' => $menubar, + 'name' => 'billing events', + 'query' => $sql_query, + 'count_query' => $count_sql, + 'header' => [ 'Event', + 'Date', + 'Status', + 'Trigger', + #'Inv #', 'Inv Date', 'Cust #', + #'Invoice', + + FS::UI::Web::cust_header(), #'cust_main_custnum', + ], + 'fields' => [ + 'event', + sub { time2str("%b %d %Y %T", $_[0]->_date) }, + $status_sub, + $trigger_sub, + #sub { + # #my $cust_event = shift; + # 'Invoice #'. $_[0]->invnum. + # ' ('. + # time2str("%D", $_[0]->cust_bill_date). + # ')'; + # }, + \&FS::UI::Web::cust_fields, + ], + 'align' => 'lrll'.FS::UI::Web::cust_aligns(), + 'links' => [ + '', + '', + '', + $trigger_link, + #sub { + # my $part_event = shift; + # #XXX + # my $template = $part_event->templatename; + # $template .= '-' if $template; + # [ "${p}view/cust_bill.cgi?$template", 'invnum']; + #}, + + ( map { $_ ne 'Cust. Status' ? $link_cust : '' } + FS::UI::Web::cust_header() + ), + ], + 'color' => [ + '', + '', + '', + '', + #'', + FS::UI::Web::cust_colors(), + ], + 'style' => [ + '', + '', + '', + '', + #'', + FS::UI::Web::cust_styles(), + ], + ) +%> +<%once> + +my $status_sub = sub { + my $cust_event = shift; + + my $status = $cust_event->status; + $status .= ': '.$cust_event->statustext + if $cust_event->statustext; + + my $part_event = $cust_event->part_event; + + if ( $part_event->eventtable eq 'cust_bill' && $part_event->templatename ) { + my $alt_templatename = $part_event->templatename; + my $alt_link = "$alt_templatename-". $cust_event->tablenum; + + my $conf = new FS::Conf; + my $cust_bill = $cust_event->cust_X; + + $status .= qq{ + ( <A HREF="${p}view/cust_bill.cgi?$alt_link">view</A> + | <A HREF="${p}view/cust_bill-pdf.cgi?$alt_link.pdf">view + typeset</A> + | <A HREF="${p}misc/print-invoice.cgi?$alt_link">re-print</A> + }; + + if ( grep { $_ ne 'POST' } $cust_bill->cust_main->invoicing_list ) { + $status .= qq{ + | <A HREF="${p}misc/email-invoice.cgi?$alt_link">re-email</A> + }; + } + + if ( $conf->exists('hylafax') && length($cust_bill->cust_main->fax) ) { + $status .= qq{ + | <A HREF="${p}misc/fax-invoice.cgi?$alt_link">re-fax</A> + } + } + + $status .= ' ) '; + + } + + $status; +}; + +my $trigger_sub = sub { + my $cust_event = shift; + my $eventtable = $cust_event->eventtable; + my $label = FS::part_event->eventtable_labels->{$eventtable}; + #if ( $eventtable eq 'cust_pkg' || $eventtable eq 'cust_bill' ) { + "$label #". $cust_event->tablenum; + #} else { + # $label; + #} +}; + +my $trigger_link = sub { + my $cust_event = shift; + my $eventtable = $cust_event->eventtable; + if ( $eventtable eq 'cust_pkg' ) { + my $custnum = $cust_event->cust_main_custnum; + [ "${p}view/cust_main.cgi?$custnum#cust_pkg", 'tablenum' ]; + } else { + [ "${p}view/$eventtable.cgi?", 'tablenum' ]; + } +}; + +</%once> +<%init> + +my $curuser = $FS::CurrentUser::CurrentUser; + +die "access denied" + unless $curuser->access_right('Billing event reports') + or $curuser->access_right('View customer billing events') + && ( $cgi->param('custnum') =~ /^(\d+)$/ + || $cgi->param('invnum') =~ /^(\d+)$/ + || $cgi->param('pkgnum') =~ /^(\d+)$/ + ); + + +my $title = $cgi->param('failed') + ? 'Failed billing events' + : 'Billing events'; + +my @search = (); + +if ( $cgi->param('agentnum') && $cgi->param('agentnum') =~ /^(\d+)$/ ) { + push @search, "cust_main.agentnum = $1"; + #my $agent = qsearchs('agent', { 'agentnum' => $1 } ); + #die "unknown agentnum $1" unless $agent; +} + +my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi); +push @search, "cust_event._date >= $beginning", + "cust_event._date <= $ending"; + +if ( $cgi->param('failed') ) { + push @search, "statustext != ''", + "statustext IS NOT NULL", + "statustext != 'N/A'"; +} + +#if ( $cgi->param('part_event.payby') =~ /^(\w+)$/ ) { +# push @search, "part_event.payby = '$1'"; +#} + +if ( $cgi->param('custnum') =~ /^(\d+)$/ ) { + push @search, "cust_main.custnum = '$1'"; +} +if ( $cgi->param('invnum') =~ /^(\d+)$/ ) { + push @search, "part_event.eventtable = 'cust_bill'", + "tablenum = '$1'"; +} +if ( $cgi->param('pkgnum') =~ /^(\d+)$/ ) { + push @search, "part_event.eventtable = 'cust_pkg'", + "tablenum = '$1'"; +} + +#here is the agent virtualization +push @search, $curuser->agentnums_sql( 'table' => 'cust_main' ); + +my $where = 'WHERE '. join(' AND ', @search ); + +my $join = " + JOIN part_event USING ( eventpart ) + LEFT JOIN cust_bill ON ( eventtable = 'cust_bill' AND tablenum = invnum ) + LEFT JOIN cust_pkg ON ( eventtable = 'cust_pkg' AND tablenum = pkgnum ) + LEFT JOIN cust_main ON ( ( eventtable = 'cust_main' AND tablenum = cust_main.custnum ) + OR ( eventtable = 'cust_bill' AND cust_bill.custnum = cust_main.custnum ) + OR ( eventtable = 'cust_pkg' AND cust_pkg.custnum = cust_main.custnum ) + ) +"; + #'LEFT JOIN cust_main USING ( custnum ) '; + +my $sql_query = { + 'table' => 'cust_event', + 'select' => join(', ', + 'cust_event.*', + 'part_event.*', + #'cust_bill.custnum', + #'cust_bill._date AS cust_bill_date', + 'cust_main.custnum AS cust_main_custnum', + FS::UI::Web::cust_sql_fields(), + ), + 'hashref' => {}, + 'extra_sql' => "$where ORDER BY _date ASC", + 'addl_from' => $join, +}; + +my $count_sql = "SELECT COUNT(*) FROM cust_event $join $where"; + +my $conf = new FS::Conf; + +my $failed = $cgi->param('failed'); + +my $html_init = join("\n", map { + ( my $action = $_ ) =~ s/_$//; + include('/elements/progress-init.html', + $_.'form', + [ 'action', 'beginning', 'ending', 'failed' ], + "../misc/${_}events.cgi", + { 'message' => "Invoices re-${action}ed" }, #would be nice to show the number of them, but... + $_, #key + ), + qq!<FORM NAME="${_}form">!, + qq!<INPUT TYPE="hidden" NAME="action" VALUE="$_">!, #not used though + qq!<INPUT TYPE="hidden" NAME="beginning" VALUE="$beginning">!, + qq!<INPUT TYPE="hidden" NAME="ending" VALUE="$ending">!, + qq!<INPUT TYPE="hidden" NAME="failed" VALUE="$failed">!, + qq!</FORM>! +} qw( print_ email_ fax_ ) ). + +'<SCRIPT TYPE="text/javascript"> + +function confirm_print_process() { + if ( ! confirm("Are you sure you want to reprint these invoices?") ) { + return; + } + print_process(); +} +function confirm_email_process() { + if ( ! confirm("Are you sure you want to re-email these invoices?") ) { + return; + } + email_process(); +} +function confirm_fax_process() { + if ( ! confirm("Are you sure you want to re-fax these invoices?") ) { + return; + } + fax_process(); +} + +</SCRIPT>'; + +my $menubar = []; + +if ( $curuser->access_right('Resend invoices') ) { + + push @$menubar, 'Re-print these events' => + "javascript:confirm_print_process()", + 'Re-email these events' => + "javascript:confirm_email_process()", + ; + + push @$menubar, 'Re-fax these events' => + "javascript:confirm_fax_process()" + if $conf->exists('hylafax'); + +} + +my $link_cust = sub { + my $cust_event = shift; + $cust_event->cust_main_custnum + ? [ "${p}view/cust_main.cgi?", 'cust_main_custnum' ] + : ''; +}; + +</%init> |