summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2006-01-31 11:02:54 +0000
committerivan <ivan>2006-01-31 11:02:54 +0000
commita5a4afbb77bbdffc25ae94d10b645b0bcc76e859 (patch)
treebf3c028597a3f9017a293b40ea3aa73fac8d662c
parentc1bb4ddb71147d0571bd301a6d8c452fdf0e1bc9 (diff)
*** empty log message ***
-rw-r--r--FS/FS/Schema.pm1
-rw-r--r--FS/FS/payby.pm125
-rw-r--r--FS/MANIFEST2
-rw-r--r--FS/t/payby.t5
-rw-r--r--htetc/handler.pl1
-rwxr-xr-xhttemplate/browse/part_bill_event.cgi133
-rwxr-xr-xhttemplate/edit/part_bill_event.cgi126
7 files changed, 309 insertions, 84 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index a0637f50c..33d0fd6d8 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -307,6 +307,7 @@ sub tables_hashref {
'part_bill_event' => {
'columns' => [
'eventpart', 'serial', '', '',
+ 'freq', 'varchar', 'NULL', $char_d,
'payby', 'char', '', 4,
'event', 'varchar', '', $char_d,
'eventcode', @perl_type,
diff --git a/FS/FS/payby.pm b/FS/FS/payby.pm
new file mode 100644
index 000000000..3d43dff60
--- /dev/null
+++ b/FS/FS/payby.pm
@@ -0,0 +1,125 @@
+package FS::payby;
+
+use strict;
+use vars qw(%hash);
+use Tie::IxHash;
+
+=head1 NAME
+
+FS::payby - Object methods for payment type records
+
+=head1 SYNOPSIS
+
+ use FS::payby;
+
+ #for now...
+
+ my @payby = FS::payby->payby;
+
+ tie my %payby, 'Tie::IxHash', FS::payby->payby2longname
+
+ my @cust_payby = FS::payby->cust_payby;
+
+ tie my %payby, 'Tie::IxHash', FS::payby->cust_payby2longname
+
+=head1 DESCRIPTION
+
+Payment types.
+
+=head1 METHODS
+
+=over 4
+
+=item
+
+=cut
+
+tie %hash, 'Tie::IxHash',
+ 'CARD' => {
+ tinyname => 'card',
+ shortname => 'Credit card',
+ longname => 'Credit card (automatic)',
+ },
+ 'DCRD' => {
+ tinyname => 'card',
+ shortname => 'Credit card',
+ longname => 'Credit card (on-demand)',
+ cust_pay => 'CARD', #this is a customer type only, payments are CARD...
+ },
+ 'CHEK' => {
+ tinyname => 'check',
+ shortname => 'Electronic check',
+ longname => 'Electronic check (automatic)',
+ },
+ 'DCHK' => {
+ tinyname => 'check',
+ shortname => 'Electronic check',
+ longname => 'Electronic check (on-demand)',
+ cust_pay => 'CHEK', #this is a customer type only, payments are CHEK...
+ },
+ 'LECB' => {
+ tinyname => 'phone bill',
+ shortname => 'Phone bill billing',
+ longname => 'Phone bill billing',
+ },
+ 'BILL' => {
+ tinyname => 'billing',
+ shortname => 'Billing',
+ longname => 'Billing',
+ },
+ 'CASH' => {
+ tinyname => 'cash',
+ shortname => 'Cash', # initial payment, then billing
+ longname => 'Cash',
+ cust_main => 'BILL', #this is a payment type only, customers go to BILL...
+ },
+ 'WEST' => {
+ tinyname => 'western union',
+ shortname => 'Western Union', # initial payment, then billing
+ longname => 'Western Union',
+ cust_main => 'BILL', #this is a payment type only, customers go to BILL...
+ },
+ 'MCRD' => { #not the same as DCRD
+ tinyname => 'card',
+ shortname => 'Manual credit card', # initial payment, then billing
+ longname => 'Manual credit card',
+ cust_main => 'BILL', #this is a payment type only, customers go to BILL...
+ },
+ 'COMP' => {
+ tinyname => 'comp',
+ shortname => 'Complimentary',
+ longname => 'Complimentary',
+ },
+;
+
+sub payby {
+ keys %hash;
+}
+
+sub payby2longname {
+ my $self = shift;
+ map { $_ => $hash{$_}->{longname} } $self->payby;
+}
+
+sub cust_payby {
+ my $self = shift;
+ grep { ! exists $hash{$_}->{cust_main} } self->payby;
+}
+
+sub cust_payby2longname {
+ my $self = shift;
+ map { $_ => $hash{$_}->{longname} } $self->cust_payby;
+}
+
+=back
+
+=head1 BUGS
+
+This should eventually be an actual database table.
+
+=head1 SEE ALSO
+
+=cut
+
+1;
+
diff --git a/FS/MANIFEST b/FS/MANIFEST
index c8f10f291..d8adfb9e0 100644
--- a/FS/MANIFEST
+++ b/FS/MANIFEST
@@ -125,6 +125,7 @@ FS/part_svc.pm
FS/part_svc_column.pm
FS/part_svc_router.pm
FS/part_virtual_field.pm
+FS/payby.pm
FS/pkg_class.pm
FS/pkg_svc.pm
FS/rate.pm
@@ -259,6 +260,7 @@ t/part_pop_local.t
t/part_referral.t
t/part_svc.t
t/part_svc_column.t
+t/payby.t
t/pkg_class.t
t/pkg_svc.t
t/port.t
diff --git a/FS/t/payby.t b/FS/t/payby.t
new file mode 100644
index 000000000..7430bc8e5
--- /dev/null
+++ b/FS/t/payby.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::payby;
+$loaded=1;
+print "ok 1\n";
diff --git a/htetc/handler.pl b/htetc/handler.pl
index 2f2b0af4a..06060b20a 100644
--- a/htetc/handler.pl
+++ b/htetc/handler.pl
@@ -171,6 +171,7 @@ sub handler
use FS::payment_gateway;
use FS::agent_payment_gateway;
use FS::XMLRPC;
+ use FS::payby;
if ( %%%RT_ENABLED%%% ) {
eval '
diff --git a/httemplate/browse/part_bill_event.cgi b/httemplate/browse/part_bill_event.cgi
index 5a89516df..0b6d0cb2b 100755
--- a/httemplate/browse/part_bill_event.cgi
+++ b/httemplate/browse/part_bill_event.cgi
@@ -1,6 +1,4 @@
-<!-- mason kludge -->
<%
-
my %search;
if ( $cgi->param('showdisabled') ) {
%search = ();
@@ -10,13 +8,15 @@ if ( $cgi->param('showdisabled') ) {
my @part_bill_event = qsearch('part_bill_event', \%search );
my $total = scalar(@part_bill_event);
-
%>
+
<%= include("/elements/header.html",'Invoice Event Listing', menubar( 'Main Menu' => $p) ) %>
- Invoice events are actions taken on overdue invoices.<BR><BR>
+ Invoice events are actions taken on open invoices.<BR><BR>
+
<A HREF="<%= $p %>edit/part_bill_event.cgi"><I>Add a new invoice event</I></A>
<BR><BR>
+
<%= $total %> events
<%= $cgi->param('showdisabled')
? do { $cgi->param('showdisabled', 0);
@@ -24,48 +24,93 @@ my $total = scalar(@part_bill_event);
: do { $cgi->param('showdisabled', 1);
'( <a href="'. $cgi->self_url. '">show disabled events</a> )'; }
%>
-<%= table() %>
- <TR>
- <TH COLSPAN=<%= $cgi->param('showdisabled') ? 2 : 3 %>>Event</TH>
- <TH>Payby</TH>
- <TH>After</TH>
- <TH>Action</TH>
- <TH>Options</TH>
- <TH>Code</TH>
- </TR>
+<BR><BR>
+
+<% tie my %payby, 'Tie::IxHash', FS::payby->cust_payby2longname;
+ tie my %freq, 'Tie::IxHash', '1d' => 'daily', '1m' => 'monthly';
+ foreach my $payby ( keys %payby ) {
+ my $oldfreq = '';
+
+ my @payby_part_bill_event = grep { $payby eq $_->payby }
+ sort { $a->seconds <=> $b->seconds
+ || $a->weight <=> $b->weight
+ || $a->eventpart <=> $b->eventpart
+ }
+ @part_bill_event;
-<% foreach my $part_bill_event ( sort { $a->payby cmp $b->payby
- || $a->seconds <=> $b->seconds
- || $a->weight <=> $b->weight
- || $a->eventpart <=> $b->eventpart
- } @part_bill_event ) {
- my $url = "${p}edit/part_bill_event.cgi?". $part_bill_event->eventpart;
- use Time::Duration;
- my $delay = duration_exact($part_bill_event->seconds);
- my $plandata = $part_bill_event->plandata;
- $plandata =~ s/\n/<BR>/go;
%>
- <TR>
- <TD><A HREF="<%= $url %>">
- <%= $part_bill_event->eventpart %></A></TD>
-<% unless ( $cgi->param('showdisabled') ) { %>
- <TD>
- <%= $part_bill_event->disabled ? 'DISABLED' : '' %></TD>
-<% } %>
- <TD><A HREF="<%= $url %>">
- <%= $part_bill_event->event %></A></TD>
- <TD>
- <%= $part_bill_event->payby %></TD>
- <TD>
- <%= $delay %></TD>
- <TD>
- <%= $part_bill_event->plan %></TD>
- <TD>
- <%= $plandata %></TD>
- <TD><FONT SIZE="-1">
- <%= $part_bill_event->eventcode %></FONT></TD>
- </TR>
+
+ <% if ( @payby_part_bill_event ) { %>
+
+ <%= include('/elements/table-grid.html') %>
+
+ <% my $bgcolor1 = '#eeeeee';
+ my $bgcolor2 = '#ffffff';
+ my $bgcolor;
+ %>
+
+ <%
+ foreach my $part_bill_event ( @payby_part_bill_event ) {
+ my $url = "${p}edit/part_bill_event.cgi?". $part_bill_event->eventpart;
+ my $delay = duration_exact($part_bill_event->seconds);
+ ( my $plandata = $part_bill_event->plandata ) =~ s/\n/<BR>/go;
+ my $freq = $part_bill_event->freq || '1d';
+ %>
+
+ <% if ( $oldfreq ne $freq ) { %>
+
+ <TR>
+ <TH CLASS="grid" BGCOLOR="#999999" COLSPAN=<%= $cgi->param('showdisabled') ? 7 : 8 %>><%= ucfirst($freq{$freq}) %> event tests for <FONT SIZE="+1"><I><%= $payby{$payby} %> customers</I></FONT></TH>
+ </TR>
+
+ <TR>
+ <TH CLASS="grid" BGCOLOR="#cccccc" COLSPAN=<%= $cgi->param('showdisabled') ? 2 : 3 %>>Event</TH>
+ <TH CLASS="grid" BGCOLOR="#cccccc">After</TH>
+ <TH CLASS="grid" BGCOLOR="#cccccc">Action</TH>
+ <TH CLASS="grid" BGCOLOR="#cccccc">Options</TH>
+ <TH CLASS="grid" BGCOLOR="#cccccc">Code</TH>
+ </TR>
+
+ <%
+ $oldfreq = $freq;
+ $bgcolor = '';
+ %>
+
+ <% } %>
+
+ <%
+ if ( $bgcolor eq $bgcolor1 ) {
+ $bgcolor = $bgcolor2;
+ } else {
+ $bgcolor = $bgcolor1;
+ }
+ %>
+
+ <TR>
+ <TD CLASS="grid" BGCOLOR="<%= $bgcolor %>"><A HREF="<%= $url %>">
+ <%= $part_bill_event->eventpart %></A></TD>
+ <% unless ( $cgi->param('showdisabled') ) { %>
+ <TD CLASS="grid" BGCOLOR="<%= $bgcolor %>">
+ <%= $part_bill_event->disabled ? 'DISABLED' : '' %></TD>
+ <% } %>
+ <TD CLASS="grid" BGCOLOR="<%= $bgcolor %>"><A HREF="<%= $url %>">
+ <%= $part_bill_event->event %></A></TD>
+ <TD CLASS="grid" BGCOLOR="<%= $bgcolor %>">
+ <%= $delay %></TD>
+ <TD CLASS="grid" BGCOLOR="<%= $bgcolor %>">
+ <%= $part_bill_event->plan %></TD>
+ <TD CLASS="grid" BGCOLOR="<%= $bgcolor %>">
+ <%= $plandata %></TD>
+ <TD CLASS="grid" BGCOLOR="<%= $bgcolor %>"><FONT SIZE="-1">
+ <%= $part_bill_event->eventcode %></FONT></TD>
+ </TR>
+ <% } %>
+ </TABLE>
+ <BR><BR>
+
+ <% } %>
+
<% } %>
-</TABLE>
+
</BODY>
</HTML>
diff --git a/httemplate/edit/part_bill_event.cgi b/httemplate/edit/part_bill_event.cgi
index 32ca47af4..57eedbc71 100755
--- a/httemplate/edit/part_bill_event.cgi
+++ b/httemplate/edit/part_bill_event.cgi
@@ -1,4 +1,4 @@
-<!-- mason kludge -->
+<!--mason kludge-->
<%
if ( $cgi->param('eventpart') && $cgi->param('eventpart') =~ /^(\d+)$/ ) {
@@ -23,48 +23,86 @@ if ( $query && $query =~ /^(\d+)$/ ) {
$action ||= $part_bill_event->eventpart ? 'Edit' : 'Add';
my $hashref = $part_bill_event->hashref;
-print header("$action Invoice Event Definition", menubar(
- 'Main Menu' => popurl(2),
- 'View all invoice events' => popurl(2). 'browse/part_bill_event.cgi',
-));
+%>
-print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'),
- "</FONT>"
- if $cgi->param('error');
+<%= include('/elements/header.html',
+ "$action Invoice Event Definition",
+ menubar(
+ 'Main Menu' => popurl(2),
+ 'View all invoice events' => popurl(2). 'browse/part_bill_event.cgi',
+ )
+ )
+%>
-print '<FORM ACTION="', popurl(1), 'process/part_bill_event.cgi" METHOD=POST>'.
- '<INPUT TYPE="hidden" NAME="eventpart" VALUE="'.
- $part_bill_event->eventpart .'">';
-print "Invoice Event #", $hashref->{eventpart} ? $hashref->{eventpart} : "(NEW)";
+<% if ( $cgi->param('error') ) { %>
+ <FONT SIZE="+1" COLOR="#ff0000">Error: <%= $cgi->param('error') %></FONT>
+<% } %>
-print ntable("#cccccc",2), <<END;
-<TR><TD ALIGN="right">Payby</TD><TD><SELECT NAME="payby">
-END
+<FORM ACTION="<%= popurl(1) %>process/part_bill_event.cgi" METHOD=POST>
+<INPUT TYPE="hidden" NAME="eventpart" VALUE="<%= $part_bill_event->eventpart %>">
+Invoice Event #<%= $hashref->{eventpart} ? $hashref->{eventpart} : "(NEW)" %>
-for (qw(CARD DCRD CHEK DCHK LECB BILL COMP)) {
- print qq!<OPTION VALUE="$_"!;
- if ($part_bill_event->payby eq $_) {
- print " SELECTED>$_</OPTION>";
- } else {
- print ">$_</OPTION>";
- }
-}
+<%= ntable("#cccccc",2) %>
-my $days = $hashref->{seconds}/86400;
+ <TR>
+ <TD ALIGN="right">Event name </TD>
+ <TD><INPUT TYPE="text" NAME="event" VALUE="<%= $hashref->{event} %>"></TD>
+ </TR>
-print <<END;
-</SELECT></TD></TR>
-<TR><TD ALIGN="right">Event</TD><TD><INPUT TYPE="text" NAME="event" VALUE="$hashref->{event}"></TD></TR>
-<TR><TD ALIGN="right">After</TD><TD><INPUT TYPE="text" NAME="days" VALUE="$days"> days</TD></TR>
-END
+ <TR>
+ <TD ALIGN="right">For </TD>
+ <TD>
+ <SELECT NAME="payby">
+
+ <% tie my %payby, 'Tie::IxHash', FS::payby->cust_payby2longname;
+ foreach my $payby ( keys %payby ) {
+ %>
+
+ <OPTION VALUE="<%= $payby %>"<%= ($part_bill_event->payby eq $payby) ? ' SELECTED' : '' %>><%= $payby{$payby} %></OPTION>
+
+ <% } %>
+
+ </SELECT> customers
+ </TD>
+ </TR>
+
+ <% my $days = $hashref->{seconds}/86400; %>
-print '<TR><TD ALIGN="right">Disabled</TD><TD>';
-print '<INPUT TYPE="checkbox" NAME="disabled" VALUE="Y"';
-print ' CHECKED' if $hashref->{disabled} eq "Y";
-print '>';
-print '</TD></TR>';
+ <TR>
+ <TD ALIGN="right">After</TD>
+ <TD><INPUT TYPE="text" NAME="days" VALUE="<%= $days %>"> days</TD>
+ </TR>
-print '<TR><TD ALIGN="right">Action</TD><TD>';
+ <TR>
+ <TD ALIGN="right">Test event</TD>
+ <TD>
+ <SELECT NAME="freq">
+
+ <% tie my %freq, 'Tie::IxHash', '1d' => 'daily', '1m' => 'monthly';
+ foreach my $freq ( keys %freq ) {
+ %>
+
+ <OPTION VALUE="<%= $freq %>"<%= ($part_bill_event->freq eq $freq) ? ' SELECTED' : '' %>><%= $freq{$freq} %></OPTION>
+
+ <% } %>
+
+ </SELECT>
+ </TD>
+ </TR>
+
+
+ <TR>
+ <TD ALIGN="right">Disabled</TD>
+ <TD>
+ <INPUT TYPE="checkbox" NAME="disabled" VALUE="Y"<%= $hashref->{disabled} eq 'Y' ? ' CHECKED' : '' %>>
+ </TD>
+ </TR>
+
+ <TR>
+ <TD VALIGN="top" ALIGN="right">Action</TD>
+ <TD>
+
+<%
#print ntable();
@@ -113,7 +151,7 @@ tie my %events, 'Tie::IxHash',
'code' => '$cust_main->suspend();',
'weight' => 10,
},
- 'suspend' => {
+ 'suspend-if-balance' => {
'name' => 'Suspend if balance (this invoice and previous) over',
'code' => '$cust_bill->cust_suspend_if_balance_over( %%%balanceover%%% );',
'html' => " $money_char ". '<INPUT TYPE="text" SIZE="7" NAME="balanceover" VALUE="%%%balanceover%%%">',
@@ -174,13 +212,13 @@ tie my %events, 'Tie::IxHash',
},
'send' => {
- 'name' => 'Send invoice (email/print)',
+ 'name' => 'Send invoice (email/print/fax)',
'code' => '$cust_bill->send();',
'weight' => 50,
},
'send_alternate' => {
- 'name' => 'Send invoice (email/print) with alternate template',
+ 'name' => 'Send invoice (email/print/fax) with alternate template',
'code' => '$cust_bill->send(\'%%%templatename%%%\');',
'html' =>
'<INPUT TYPE="text" NAME="templatename" VALUE="%%%templatename%%%">',
@@ -188,7 +226,7 @@ tie my %events, 'Tie::IxHash',
},
'send_if_newest' => {
- 'name' => 'Send invoice (email/print) with alternate template, if it is still the newest invoice (useful for late notices - set to 31 days or later)',
+ 'name' => 'Send invoice (email/print/fax) with alternate template, if it is still the newest invoice (useful for late notices - set to 31 days or later)',
'code' => '$cust_bill->send_if_newest(\'%%%if_newest_templatename%%%\');',
'html' =>
'<INPUT TYPE="text" NAME="if_newest_templatename" VALUE="%%%if_newest_templatename%%%">',
@@ -196,7 +234,7 @@ tie my %events, 'Tie::IxHash',
},
'send_agent' => {
- 'name' => 'Send invoice (email/print) ',
+ 'name' => 'Send invoice (email/print/fax) ',
'code' => '$cust_bill->send(\'%%%agent_templatename%%%\', [ %%%agentnum%%% ], \'%%%agent_invoice_from%%%\');',
'html' => sub {
'<TABLE BORDER=0>
@@ -263,6 +301,7 @@ tie my %events, 'Tie::IxHash',
'code' => '$cust_bill->spool_csv(
\'format\' => \'%%%spoolformat%%%\',
\'dest\' => \'%%%spooldest%%%\',
+ \'balanceover\' => \'%%%spoolbalanceover%%%\',
\'agent_spools\' => \'%%%spoolagent_spools%%%\',
);',
'html' => sub {
@@ -303,6 +342,13 @@ tie my %events, 'Tie::IxHash',
$html .=
'</SELECT>'.
'</TD></TR>'.
+
+ '<TR>'.
+ '<TD ALIGN="right">if balance (this invoice and previous) over </TD>'.
+ '<TD>'.
+ "$money_char ".
+ '<INPUT TYPE="text" SIZE="7" NAME="spoolbalanceover" VALUE="%%%spoolbalanceover%%%">'.
+ '</TD>'.
'<TR><TD ALIGN="right">Individual per-agent spools? </TD>'.
'<TD><INPUT TYPE="checkbox" NAME="spoolagent_spools" VALUE="1" '.
( $plandata->{'spoolagent_spools'} ? 'CHECKED' : '' ).