<% if ( $cgi->param('eventpart') && $cgi->param('eventpart') =~ /^(\d+)$/ ) { $cgi->param('eventpart', $1); } else { $cgi->param('eventpart', ''); } my ($query) = $cgi->keywords; my $action = ''; my $part_bill_event = ''; if ( $cgi->param('error') ) { $part_bill_event = new FS::part_bill_event ( { map { $_, scalar($cgi->param($_)) } fields('part_bill_event') } ); } if ( $query && $query =~ /^(\d+)$/ ) { $part_bill_event ||= qsearchs('part_bill_event',{'eventpart'=>$1}); } else { $part_bill_event ||= new FS::part_bill_event {}; } $action ||= $part_bill_event->eventpart ? 'Edit' : 'Add'; my $hashref = $part_bill_event->hashref; %> <%= include('/elements/header.html', "$action Invoice Event Definition", menubar( 'Main Menu' => popurl(2), 'View all invoice events' => popurl(2). 'browse/part_bill_event.cgi', ) ) %> <% if ( $cgi->param('error') ) { %> Error: <%= $cgi->param('error') %> <% } %>
Invoice Event #<%= $hashref->{eventpart} ? $hashref->{eventpart} : "(NEW)" %> <%= ntable("#cccccc",2) %> Event name For customers <% my $days = $hashref->{seconds}/86400; %> After days Test event Disabled {disabled} eq 'Y' ? ' CHECKED' : '' %>> Action <% #print ntable(); sub select_pkgpart { my $label = shift; my $plandata = shift; my %selected = map { $_=>1 } split(/,\s*/, $plandata->{$label}); qq('; } sub select_agentnum { my $plandata = shift; #my $agentnum = $plandata->{'agentnum'}; my %agentnums = map { $_=>1 } split(/,\s*/, $plandata->{'agentnum'}); ''; } my $conf = new FS::Conf; my $money_char = $conf->config('money_char') || '$'; #this is pretty kludgy right here. tie my %events, 'Tie::IxHash', 'fee' => { 'name' => 'Late fee', 'code' => '$cust_main->charge( %%%charge%%%, \'%%%reason%%%\' );', 'html' => 'Amount '. '
Reason ', 'weight' => 10, }, 'suspend' => { 'name' => 'Suspend', 'code' => '$cust_main->suspend();', 'weight' => 10, }, 'suspend-if-balance' => { 'name' => 'Suspend if balance (this invoice and previous) over', 'code' => '$cust_bill->cust_suspend_if_balance_over( %%%balanceover%%% );', 'html' => " $money_char ". '', 'weight' => 10, }, 'suspend-if-pkgpart' => { 'name' => 'Suspend packages', 'code' => '$cust_main->suspend_if_pkgpart(%%%if_pkgpart%%%);', 'html' => sub { &select_pkgpart('if_pkgpart', @_) }, 'weight' => 10, }, 'suspend-unless-pkgpart' => { 'name' => 'Suspend packages except', 'code' => '$cust_main->suspend_unless_pkgpart(%%%unless_pkgpart%%%);', 'html' => sub { &select_pkgpart('unless_pkgpart', @_) }, 'weight' => 10, }, 'cancel' => { 'name' => 'Cancel', 'code' => '$cust_main->cancel();', 'weight' => 10, }, 'addpost' => { 'name' => 'Add postal invoicing', 'code' => '$cust_main->invoicing_list_addpost(); "";', 'weight' => 20, }, 'comp' => { 'name' => 'Pay invoice with a complimentary "payment"', 'code' => '$cust_bill->comp();', 'weight' => 30, }, 'realtime-card' => { 'name' => 'Run card with a Business::OnlinePayment realtime gateway', 'code' => '$cust_bill->realtime_card();', 'weight' => 30, }, 'realtime-check' => { 'name' => 'Run check with a Business::OnlinePayment realtime gateway', 'code' => '$cust_bill->realtime_ach();', 'weight' => 30, }, 'realtime-lec' => { 'name' => 'Run phone bill ("LEC") billing with a Business::OnlinePayment realtime gateway', 'code' => '$cust_bill->realtime_lec();', 'weight' => 30, }, 'batch-card' => { 'name' => 'Add card to the pending credit card batch', 'code' => '$cust_bill->batch_card();', 'weight' => 40, }, 'send' => { 'name' => 'Send invoice (email/print/fax)', 'code' => '$cust_bill->send();', 'weight' => 50, }, 'send_alternate' => { 'name' => 'Send invoice (email/print/fax) with alternate template', 'code' => '$cust_bill->send(\'%%%templatename%%%\');', 'html' => '', 'weight' => 50, }, 'send_if_newest' => { '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' => '', 'weight' => 50, }, 'send_agent' => { 'name' => 'Send invoice (email/print/fax) ', 'code' => '$cust_bill->send(\'%%%agent_templatename%%%\', [ %%%agentnum%%% ], \'%%%agent_invoice_from%%%\');', 'html' => sub { '
only for agent(s) '. &select_agentnum(@_). '
with template
email From:
'; }, 'weight' => 50, }, 'send_csv_ftp' => { 'name' => 'Upload CSV invoice data to an FTP server', 'code' => '$cust_bill->send_csv( protocol => \'ftp\', server => \'%%%ftpserver%%%\', username => \'%%%ftpusername%%%\', password => \'%%%ftppassword%%%\', dir => \'%%%ftpdir%%%\', \'format\' => \'%%%ftpformat%%%\', );', 'html' => ''. ''. ''. ''. ''. ''. ''. ''. ''. '
Format ("default" or "billco"): '. ''. ''. '
FTP server: '. '
FTP username: '. ''. '
FTP password: '. ''. '
FTP directory: '. '
', 'weight' => 50, }, 'spool_csv' => { 'name' => 'Spool CSV invoice data', 'code' => '$cust_bill->spool_csv( \'format\' => \'%%%spoolformat%%%\', \'dest\' => \'%%%spooldest%%%\', \'balanceover\' => \'%%%spoolbalanceover%%%\', \'agent_spools\' => \'%%%spoolagent_spools%%%\', );', 'html' => sub { my $plandata = shift; my $html = ''. ''. ''. ''. ''. ''. ''. ''. ''. ''. '
Format: '. ''. '
For destination: '. ''. '
if balance (this invoice and previous) over '. "$money_char ". ''. '
Individual per-agent spools? {'spoolagent_spools'} ? 'CHECKED' : '' ). '>'. '
'; $html; }, 'weight' => 50, }, 'bill' => { 'name' => 'Generate invoices (normally only used with a Late Fee event)', 'code' => '$cust_main->bill();', 'weight' => 60, }, 'apply' => { 'name' => 'Apply unapplied payments and credits', 'code' => '$cust_main->apply_payments; $cust_main->apply_credits; "";', 'weight' => 70, }, 'collect' => { 'name' => 'Collect on invoices (normally only used with a Late Fee and Generate Invoice events)', 'code' => '$cust_main->collect();', 'weight' => 80, }, ; foreach my $event ( keys %events ) { my %plandata = map { /^(\w+) (.*)$/; ($1, $2); } split(/\n/, $part_bill_event->plandata); my $html = $events{$event}{html}; if ( ref($html) eq 'CODE' ) { $html = &{$html}(\%plandata); } while ( $html =~ /%%%(\w+)%%%/ ) { my $field = $1; $html =~ s/%%%$field%%%/$plandata{$field}/; } print ntable( "#cccccc", 2). qq!plan; print qq!VALUE="!. $event. ":". $events{$event}{weight}. ":". encode_entities($events{$event}{code}). qq!">$events{$event}{name}!; print ''. $html. '' if $html; print qq!!; print ''; } #print ''; print < END print qq!!; %>