From a5a4afbb77bbdffc25ae94d10b645b0bcc76e859 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 31 Jan 2006 11:02:54 +0000 Subject: [PATCH] *** empty log message *** --- FS/FS/Schema.pm | 1 + FS/FS/payby.pm | 125 ++++++++++++++++++++++++++++++++ FS/MANIFEST | 2 + FS/t/payby.t | 5 ++ htetc/handler.pl | 1 + httemplate/browse/part_bill_event.cgi | 133 +++++++++++++++++++++++----------- httemplate/edit/part_bill_event.cgi | 126 ++++++++++++++++++++++---------- 7 files changed, 309 insertions(+), 84 deletions(-) create mode 100644 FS/FS/payby.pm create mode 100644 FS/t/payby.t 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 @@ - <% - 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.

+ Invoice events are actions taken on open invoices.

+ Add a new invoice event

+ <%= $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); '( show disabled events )'; } %> -<%= table() %> - - param('showdisabled') ? 2 : 3 %>>Event - Payby - After - Action - Options - Code - +

+ +<% 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/
/go; %> - - - <%= $part_bill_event->eventpart %> -<% unless ( $cgi->param('showdisabled') ) { %> - - <%= $part_bill_event->disabled ? 'DISABLED' : '' %> -<% } %> - - <%= $part_bill_event->event %> - - <%= $part_bill_event->payby %> - - <%= $delay %> - - <%= $part_bill_event->plan %> - - <%= $plandata %> - - <%= $part_bill_event->eventcode %> - + + <% 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/
/go; + my $freq = $part_bill_event->freq || '1d'; + %> + + <% if ( $oldfreq ne $freq ) { %> + + + param('showdisabled') ? 7 : 8 %>><%= ucfirst($freq{$freq}) %> event tests for <%= $payby{$payby} %> customers + + + + param('showdisabled') ? 2 : 3 %>>Event + After + Action + Options + Code + + + <% + $oldfreq = $freq; + $bgcolor = ''; + %> + + <% } %> + + <% + if ( $bgcolor eq $bgcolor1 ) { + $bgcolor = $bgcolor2; + } else { + $bgcolor = $bgcolor1; + } + %> + + + + <%= $part_bill_event->eventpart %> + <% unless ( $cgi->param('showdisabled') ) { %> + + <%= $part_bill_event->disabled ? 'DISABLED' : '' %> + <% } %> + + <%= $part_bill_event->event %> + + <%= $delay %> + + <%= $part_bill_event->plan %> + + <%= $plandata %> + + <%= $part_bill_event->eventcode %> + + <% } %> + +

+ + <% } %> + <% } %> - + 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 @@ - + <% 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!Error: !, $cgi->param('error'), - "" - 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 '
'. - ''; -print "Invoice Event #", $hashref->{eventpart} ? $hashref->{eventpart} : "(NEW)"; +<% if ( $cgi->param('error') ) { %> + Error: <%= $cgi->param('error') %> +<% } %> -print ntable("#cccccc",2), <Payby +Invoice Event #<%= $hashref->{eventpart} ? $hashref->{eventpart} : "(NEW)" %> -for (qw(CARD DCRD CHEK DCHK LECB BILL COMP)) { - print qq!"; - } else { - print ">$_"; - } -} +<%= ntable("#cccccc",2) %> -my $days = $hashref->{seconds}/86400; + + Event name + + -print < -Event -After days -END + + For + + customers + + + + <% my $days = $hashref->{seconds}/86400; %> -print 'Disabled'; -print '{disabled} eq "Y"; -print '>'; -print ''; + + After + days + -print 'Action'; + + Test event + + + + + + + + Disabled + + {disabled} eq 'Y' ? ' CHECKED' : '' %>> + + + + + Action + + +<% #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 ". '', @@ -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' => '', @@ -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' => '', @@ -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 { ' @@ -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 .= ''. ''. + + ''. + ''. + ''. ''. '
if balance (this invoice and previous) over '. + "$money_char ". + ''. + '
Individual per-agent spools? {'spoolagent_spools'} ? 'CHECKED' : '' ). -- 2.11.0