add per-agent invoice templates, add per-package suspend invoice events, fix automati...
[freeside.git] / httemplate / edit / part_bill_event.cgi
index 580e467..d0fa973 100755 (executable)
@@ -1,5 +1,4 @@
-<!-- $Id: part_bill_event.cgi,v 1.5 2002-02-04 17:04:33 ivan Exp $ -->
-
+<!-- mason kludge -->
 <%
 
 if ( $cgi->param('eventpart') && $cgi->param('eventpart') =~ /^(\d+)$/ ) {
@@ -21,7 +20,7 @@ if ( $query && $query =~ /^(\d+)$/ ) {
 } else {
   $part_bill_event ||= new FS::part_bill_event {};
 }
-$action ||= $part_bill_event->pkgpart ? 'Edit' : 'Add';
+$action ||= $part_bill_event->eventpart ? 'Edit' : 'Add';
 my $hashref = $part_bill_event->hashref;
 
 print header("$action Invoice Event Definition", menubar(
@@ -42,7 +41,7 @@ print ntable("#cccccc",2), <<END;
 <TR><TD ALIGN="right">Payby</TD><TD><SELECT NAME="payby">
 END
 
-for (qw(CARD BILL COMP)) {
+for (qw(CARD DCRD CHEK DCHK LECB BILL COMP)) {
   print qq!<OPTION VALUE="$_"!;
   if ($part_bill_event->payby eq $_) {
     print " SELECTED>$_</OPTION>";
@@ -69,6 +68,31 @@ print '<TR><TD ALIGN="right">Action</TD><TD>';
 
 #print ntable();
 
+sub select_pkgpart {
+  my $label = shift;
+  my $plandata = shift;
+  my %selected = map { $_=>1 } split(/,\s*/, $plandata->{$label});
+  qq(<SELECT NAME="$label" MULTIPLE>).
+  join("\n", map {
+    '<OPTION VALUE="'. $_->pkgpart. '"'.
+    ( $selected{$_->pkgpart} ? ' SELECTED' : '' ).
+    '>'. $_->pkg. ' - '. $_->comment
+  } qsearch('part_pkg', { 'disabled' => '' } ) ).
+  '</SELECT>';
+}
+
+sub select_agentnum {
+  my $plandata = shift;
+  my $agentnum = $plandata->{'agentnum'};
+  '<SELECT NAME="agentnum">'.
+  join("\n", map {
+    '<OPTION VALUE="'. $_->agentnum. '"'.
+    ( $_->agentnum == $agentnum ? ' SELECTED' : '' ).
+    '>'. $_->agent
+  } qsearch('agent', { 'disabled' => '' } ) ).
+  '</SELECT>';
+}
+
 #this is pretty kludgy right here.
 tie my %events, 'Tie::IxHash',
 
@@ -85,6 +109,18 @@ tie my %events, 'Tie::IxHash',
     'code'   => '$cust_main->suspend();',
     '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();',
@@ -94,7 +130,7 @@ tie my %events, 'Tie::IxHash',
   'addpost' => {
     'name' => 'Add postal invoicing',
     'code' => '$cust_main->invoicing_list_addpost(); "";',
-    'pad'  => 20,
+    'weight'  => 20,
   },
 
   'comp' => {
@@ -109,9 +145,15 @@ tie my %events, 'Tie::IxHash',
     'weight' => 30,
   },
 
-  'realtime-card-cybercash' => {
-    'name' => '(<b>deprecated</b>) Run card with <a href="http://www.cybercash.com/cashregister">CyberCash CashRegister</a> realtime gateway',
-    'code' => '$cust_bill->realtime_card_cybercash();',
+  'realtime-check' => {
+    'name' => 'Run check with a <a href="http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment">Business::OnlinePayment</a> realtime gateway',
+    'code' => '$cust_bill->realtime_ach();',
+    'weight' => 30,
+  },
+
+  'realtime-lec' => {
+    'name' => 'Run phone bill ("LEC") billing with a <a href="http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment">Business::OnlinePayment</a> realtime gateway',
+    'code' => '$cust_bill->realtime_lec();',
     'weight' => 30,
   },
 
@@ -127,6 +169,58 @@ tie my %events, 'Tie::IxHash',
     'weight' => 50,
   },
 
+  'send_alternate' => {
+    'name' => 'Send invoice (email/print) with alternate template',
+    'code' => '$cust_bill->send(\'%%%templatename%%%\');',
+    'html' =>
+        '<INPUT TYPE="text" NAME="templatename" VALUE="%%%templatename%%%">',
+    'weight' => 50,
+  },
+
+  'send_agent' => {
+    'name' => 'Send invoice (email/print) ',
+    'code' => '$cust_bill->send(\'%%%agent_templatename%%%\', %%%agentnum%%%);',
+    'html' => sub {
+        '<TABLE BORDER=0>
+          <TR>
+            <TD ALIGN="right">only for agent </TD>
+            <TD>'. &select_agentnum(@_). '</TD>
+          </TR>
+          <TR>
+            <TD ALIGN="right">with template </TD>
+            <TD>
+              <INPUT TYPE="text" NAME="agent_templatename" VALUE="%%%agent_templatename%%%">
+            </TD>
+          </TR>
+        </TABLE>';
+    },
+    '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%%%\'       );',
+    'html' =>
+        '<TABLE BORDER=0><TR><TD ALIGN="right">FTP server: </TD>'.
+          '<TD><INPUT TYPE="text" NAME="ftpserver" VALUE="%%%ftpserver%%%">'.
+          '</TD></TR>'.
+        '<TR><TD ALIGN="right">FTP username: </TD><TD>'.
+          '<INPUT TYPE="text" NAME="ftpusername" VALUE="%%%ftpusername%%%">'.
+          '</TD></TR>'.
+        '<TR><TD ALIGN="right">FTP password: </TD><TD>'.
+          '<INPUT TYPE="text" NAME="ftppassword" VALUE="%%%ftppassword%%%">'.
+          '</TD></TR>'.
+        '<TR><TD ALIGN="right">FTP directory: </TD>'.
+          '<TD><INPUT TYPE="text" NAME="ftpdir" VALUE="%%%ftpdir%%%">'.
+          '</TD></TR>'.
+        '</TABLE>',
+    'weight' => 50,
+  },
+
   'bill' => {
     'name' => 'Generate invoices (normally only used with a <i>Late Fee</i> event)',
     'code' => '$cust_main->bill();',
@@ -151,6 +245,9 @@ 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}/;