pro-rating w/ web interface, tested (closes: Bug#313).
[freeside.git] / httemplate / edit / process / part_bill_event.cgi
index eb7c53e..1716c71 100755 (executable)
@@ -5,21 +5,42 @@ my $eventpart = $cgi->param('eventpart');
 my $old = qsearchs('part_bill_event',{'eventpart'=>$eventpart}) if $eventpart;
 
 #s/days/seconds/
-$cgi->param('seconds', $cgi->param('days') * 3600 );
-
-my $new = new FS::part_bill_event ( {
-  map {
-    $_, scalar($cgi->param($_));
-  } fields('part_bill_event'),
-} );
+$cgi->param('seconds', $cgi->param('days') * 86400 );
 
 my $error;
-if ( $eventpart ) {
-  $error = $new->replace($old);
+if ( ! $cgi->param('plan_weight_eventcode') ) {
+  $error = "Must select an action";
 } else {
-  $error = $new->insert;
-  $eventpart = $new->getfield('eventpart');
-}
+
+  $cgi->param('plan_weight_eventcode') =~ /^(\w+):(\d+):(.*)$/
+    or die "illegal plan_weight_eventcode:".
+           $cgi->param('plan_weight_eventcode');
+  $cgi->param('plan', $1);
+  $cgi->param('weight', $2);
+  my $eventcode = $3;
+  my $plandata = '';
+  while ( $eventcode =~ /%%%(\w+)%%%/ ) {
+    my $field = $1;
+    my $value = $cgi->param($field);
+    $eventcode =~ s/%%%$field%%%/$value/;
+    $plandata .= "$field $value\n";
+  }
+  $cgi->param('eventcode', $eventcode);
+  $cgi->param('plandata', $plandata);
+
+  my $new = new FS::part_bill_event ( {
+    map {
+      $_, scalar($cgi->param($_));
+    } fields('part_bill_event'),
+  } );
+
+  if ( $eventpart ) {
+    $error = $new->replace($old);
+  } else {
+    $error = $new->insert;
+    $eventpart = $new->getfield('eventpart');
+  }
+} 
 
 if ( $error ) {
   $cgi->param('error', $error);