add per-agent invoice templates, add per-package suspend invoice events, fix automati...
[freeside.git] / FS / FS / part_bill_event.pm
index fb2c06a..4774b8d 100644 (file)
@@ -3,6 +3,7 @@ package FS::part_bill_event;
 use strict;
 use vars qw( @ISA );
 use FS::Record qw( qsearch qsearchs );
+use FS::Conf;
 
 @ISA = qw(FS::Record);
 
@@ -36,7 +37,7 @@ FS::Record.  The following fields are currently supported:
 
 =item eventpart - primary key
 
-=item payby - CARD, BILL, or COMP
+=item payby - CARD, DCRD, CHEK, DCHK, LECB, BILL, or COMP
 
 =item event - event name
 
@@ -44,6 +45,12 @@ FS::Record.  The following fields are currently supported:
 
 =item seconds - how long after the invoice date events of this type are triggered
 
+=item weight - ordering for events with identical seconds
+
+=item plan - eventcode plan
+
+=item plandata - additional plan data
+
 =item disabled - Disabled flag, empty or `Y'
 
 =back
@@ -106,13 +113,60 @@ insert and replace methods.
 sub check {
   my $self = shift;
 
-  $self->ut_numbern('eventpart')
-    || $self->ut_enum('payby', [qw( CARD BILL COMP )] )
+  $self->weight(0) unless $self->weight;
+
+  my $conf = new FS::Conf;
+  if ( $conf->exists('safe-part_bill_event') ) {
+    my $error = $self->ut_anything('eventcode');
+    return $error if $error;
+
+    my $c = $self->eventcode;
+
+    $c =~ /^\s*\$cust_main\->(suspend|cancel|invoicing_list_addpost|bill|collect)\(\);\s*("";)?\s*$/
+
+      or $c =~ /^\s*\$cust_bill\->(comp|realtime_(card|ach|lec)|realtime_card_cybercash|batch_card|send)\(\);\s*$/
+
+      or $c =~ /^\s*\$cust_bill\->send\(\'\w+\'\);\s*$/
+
+      or $c =~ /^\s*\$cust_main\->apply_payments; \$cust_main->apply_credits; "";\s*$/
+
+      or $c =~ /^\s*\$cust_main\->charge\( \s*\d*\.?\d*\s*,\s*\'[\w \!\@\#\$\%\&\(\)\-\+\;\:\"\,\.\?\/]*\'\s*\);\s*$/
+
+      or do {
+        #log
+        return "illegal eventcode: $c";
+      };
+
+  }
+
+  my $error = $self->ut_numbern('eventpart')
+    || $self->ut_enum('payby', [qw( CARD DCRD CHEK DCHK LECB BILL COMP )] )
     || $self->ut_text('event')
     || $self->ut_anything('eventcode')
     || $self->ut_number('seconds')
     || $self->ut_enum('disabled', [ '', 'Y' ] )
+    || $self->ut_number('weight')
+    || $self->ut_textn('plan')
+    || $self->ut_anything('plandata')
   ;
+    #|| $self->ut_snumber('seconds')
+  return $error if $error;
+
+  #quelle kludge
+  if ( $self->plandata =~ /^(agent_)?templatename\s+(.*)$/m ) {
+    my $name= $2;
+
+    foreach my $file (qw( template latex latexnotes )) {
+      unless ( $conf->exists("invoice_${file}_$name") ) {
+        $conf->set(
+          "invoice_${file}_$name" =>
+            join("\n", $conf->config("invoice_$file") )
+        );
+      }
+    }
+  }
+
+  $self->SUPER::check;
 }
 
 =back