import torrus 1.0.9
[freeside.git] / httemplate / edit / process / part_bill_event.cgi
index 1716c71..eb0529b 100755 (executable)
-<%
+%if ( $error ) {
+%  $cgi->param('error', $error);
+<% $cgi->redirect(popurl(2). "part_bill_event.cgi?". $cgi->query_string ) %>
+%} else {
+<% $cgi->redirect(popurl(3)."browse/part_bill_event.cgi") %>
+%}
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
 
 my $eventpart = $cgi->param('eventpart');
 
 my $old = qsearchs('part_bill_event',{'eventpart'=>$eventpart}) if $eventpart;
 
 #s/days/seconds/
-$cgi->param('seconds', $cgi->param('days') * 86400 );
+$cgi->param('seconds', int( $cgi->param('days') * 86400 ) );
 
 my $error;
 if ( ! $cgi->param('plan_weight_eventcode') ) {
   $error = "Must select an action";
 } else {
 
-  $cgi->param('plan_weight_eventcode') =~ /^(\w+):(\d+):(.*)$/
+  $cgi->param('plan_weight_eventcode') =~ /^([\w\-]+):(\d+):(.*)$/s
     or die "illegal plan_weight_eventcode:".
            $cgi->param('plan_weight_eventcode');
   $cgi->param('plan', $1);
   $cgi->param('weight', $2);
   my $eventcode = $3;
   my $plandata = '';
+
+  my $rnum;
+  my $rtype;
+  my $reasonm;
+  my $class  = '';
+  $class='c' if ($eventcode =~ /cancel/);
+  $class='s' if ($eventcode =~ /suspend/);
+  if ($class) {
+    $cgi->param("${class}reason") =~ /^(-?\d+)$/
+      or $error =  "Invalid ${class}reason";
+    $rnum = $1;
+    if ($rnum == -1) {
+      $cgi->param("new${class}reasonT") =~ /^(\d+)$/
+        or $error =  "Invalid new${class}reasonT";
+      $rtype = $1;
+      $cgi->param("new${class}reason") =~ /^([\s\w]+)$/
+        or $error = "Invalid new${class}reason";
+      $reasonm = $1;
+    }
+  }
+  if ($rnum == -1 && !$error) {
+    my $reason = new FS::reason ({ 'reason'      => $reasonm,
+                                   'reason_type' => $rtype,
+                                 });
+    $error = $reason->insert;
+    unless ($error) {
+      $rnum = $reason->reasonnum;
+      $cgi->param("${class}reason", $rnum);
+      $cgi->param("new${class}reason", '');
+      $cgi->param("new${class}reasonT", '');
+    }
+  }
+
   while ( $eventcode =~ /%%%(\w+)%%%/ ) {
     my $field = $1;
-    my $value = $cgi->param($field);
+    my $value = join(', ', $cgi->param($field) );
+    $cgi->param($field, $value); #in case it errors out
     $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');
-  }
-} 
+  unless($error) {
 
-if ( $error ) {
-  $cgi->param('error', $error);
-  print $cgi->redirect(popurl(2). "part_bill_event.cgi?". $cgi->query_string );
-} else {
-  print $cgi->redirect(popurl(3)."browse/part_bill_event.cgi");
-}
+    if ( $eventpart ) {
 
-%>
+      my $new = new FS::part_bill_event ( {
+        map { $_ => scalar($cgi->param($_)) }
+            fields('part_bill_event'),
+      } );
+      $new->setfield('reason' => $rnum);
+      $error = $new->replace($old);
+
+    } else {
+
+      foreach my $payby ( $cgi->param('payby') ) {
+        my $new = new FS::part_bill_event ( {
+          map  { $_ => scalar($cgi->param($_)) }
+          grep { $_ ne 'payby' }
+               fields('part_bill_event')
+        } );
+        $new->setfield('payby'  => $payby);
+        $new->setfield('reason' => $rnum );
+        $error = $new->insert;
+        last if $error;
+      }
+
+    }
+
+  }
+
+} 
 
+</%init>