| 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 (flat)',
%    'code'   => '$cust_main->charge( %%%charge%%%, \'%%%reason%%%\' );',
%    'html'   => 
%      'Amount '.
%      ' Reason ',
%    'weight' => 10,
%  },
%  'fee_percent' => {
%    'name'   => 'Late fee (percentage)',
%    'code'   => '$cust_main->charge( sprintf(\'%.2f\', $cust_bill->owed * %%%percent%%% / 100 ), \'%%%reason%%%\' );',
%    'html'   => 
%      'Percent %'.
%      '
 Reason ',
%    'weight' => 10,
%  },
%  'suspend' => {
%    'name'   => 'Suspend',
%    'code'   => '$cust_main->suspend(reason => %%%sreason%%%);',
%    'weight' => 10,
%    'reason' => 'S',
%  },
%  'suspend-if-balance' => {
%    'name'   => 'Suspend if balance (this invoice and previous) over',
%    'code'   => '$cust_bill->cust_suspend_if_balance_over( %%%balanceover%%%, reason => %%%sreason%%%, );',
%    'html'   => " $money_char ". '',
%    'weight' => 10,
%    'reason' => 'S',
%  },
%  'suspend-if-pkgpart' => {
%    'name'   => 'Suspend packages',
%    'code'   => '$cust_main->suspend_if_pkgpart({pkgparts => [%%%if_pkgpart%%%,], reason => %%%sreason%%%,});',
%    'html'   => sub { &select_pkgpart('if_pkgpart', @_) },
%    'weight' => 10,
%    'reason' => 'S',
%  },
%  'suspend-unless-pkgpart' => {
%    'name'   => 'Suspend packages except',
%    'code'   => '$cust_main->suspend_unless_pkgpart({unless_pkgpart => [%%%unless_pkgpart%%%], reason => %%%sreason%%%,});',
%    'html'   => sub { &select_pkgpart('unless_pkgpart', @_) },
%    'weight' => 10,
%    'reason' => 'S',
%  },
%  'cancel' => {
%    'name'   => 'Cancel',
%    'code'   => '$cust_main->cancel(reason => %%%creason%%%);',
%    'weight' => 10,
%    'reason' => 'C',
%  },
%
%  '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,
%  },
%
%  'credit' => {
%    'name'   => "Create and apply a credit for the customer's balance (i.e. write off as bad debt)",
%    'code'   => '$cust_main->credit( $cust_main->balance, \'%%%reason%%%\' );',
%    'html'   => '',
%    '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 or check to a pending batch',
%    'code' => '$cust_bill->batch_card(%options);',
%    'weight' => 40,
%  },
%
%  
%  #'retriable' => {
%  #  'name' => 'Mark batched card event as retriable',
%  #  'code' => '$cust_pay_batch->retriable();',
%  #  'weight' => 60,
%  #},
%
%  'send' => {
%    'name' => 'Send invoice (email/print/fax)',
%    'code' => '$cust_bill->send();',
%    'weight' => 50,
%  },
%
%  'send_email' => {
%    'name' => 'Send invoice (email only)',
%    'code' => '$cust_bill->email();',
%    '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 {
%        '';
%    },
%    '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' =>
%        '',
%    '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 =
%       '';
%
%       $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_and_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}/;
%  }
%
%  if ($event eq $part_bill_event->plan){
%    $currentreasonclass=$events{$event}{reason};
%  }
%  print ntable( "#cccccc", 2).
%        qq!
 |