suspension and cancellation reasons
[freeside.git] / httemplate / edit / process / part_bill_event.cgi
1 %
2 %my $eventpart = $cgi->param('eventpart');
3 %
4 %my $old = qsearchs('part_bill_event',{'eventpart'=>$eventpart}) if $eventpart;
5 %
6 %#s/days/seconds/
7 %$cgi->param('seconds', int( $cgi->param('days') * 86400 ) );
8 %
9 %my $error;
10 %if ( ! $cgi->param('plan_weight_eventcode') ) {
11 %  $error = "Must select an action";
12 %} else {
13 %
14 %  $cgi->param('plan_weight_eventcode') =~ /^([\w\-]+):(\d+):(.*)$/s
15 %    or die "illegal plan_weight_eventcode:".
16 %           $cgi->param('plan_weight_eventcode');
17 %  $cgi->param('plan', $1);
18 %  $cgi->param('weight', $2);
19 %  my $eventcode = $3;
20 %  my $plandata = '';
21 %  while ( $eventcode =~ /%%%(\w+)%%%/ ) {
22 %    my $field = $1;
23 %    my $value = join(', ', $cgi->param($field) );
24 %    $cgi->param($field, $value); #in case it errors out
25 %    $eventcode =~ s/%%%$field%%%/$value/;
26 %    $plandata .= "$field $value\n";
27 %  }
28 %  $cgi->param('eventcode', $eventcode);
29 %  $cgi->param('plandata', $plandata);
30 %
31 %  my $rnum;
32 %  my $rtype;
33 %  my $reasonm;
34 %  if ($eventcode =~ /cancel/) {
35 %    $cgi->param('creason') =~ /^(-?\d+)$/ || die "Invalid creason";
36 %    $rnum = $1;
37 %    if ($rnum == -1) {
38 %      $cgi->param('newcreasonT') =~ /^(\d+)$/ || die "Invalid newcreasonT";
39 %      $rtype = $1;
40 %      $cgi->param('newcreason') =~ /^([\s\w]+)$/ || die "Invalid newcreasonT";
41 %      $reasonm = $1;
42 %    }
43 %  }
44 %  if ($eventcode =~ /suspend/) {
45 %    $cgi->param('sreason') =~ /^(-?\d+)$/ || die "Invalid sreason";
46 %    $rnum = $1;
47 %    if ($rnum == -1) {
48 %      $cgi->param('newsreasonT') =~ /^(\d+)$/ || die "Invalid newsreasonT";
49 %      $rtype = $1;
50 %      $cgi->param('newsreason') =~ /^([\s\w]+)$/ || die "Invalid newsreasonT";
51 %      $reasonm = $1;
52 %    }
53 %  }
54
55 %  if ($rnum == -1 && !$error) {
56 %    my $reason = new FS::reason ({ 'reason'      => $reasonm,
57 %                                   'reason_type' => $rtype,
58 %                                 });
59 %    $error = $reason->insert or $rnum = $reason->reasonnum;
60 %  }
61 %
62 %  unless($error){
63 %    my $new = new FS::part_bill_event ( {
64 %      map {
65 %        $_, scalar($cgi->param($_));
66 %      } fields('part_bill_event'),
67 %    } );
68 %    $new->setfield('reason', $rnum);
69 %
70 %    if ( $eventpart ) {
71 %      $error = $new->replace($old);
72 %    } else {
73 %      $error = $new->insert;
74 %      $eventpart = $new->getfield('eventpart');
75 %    }
76 %  }
77 %} 
78 %
79 %if ( $error ) {
80 %  $cgi->param('error', $error);
81 %  print $cgi->redirect(popurl(2). "part_bill_event.cgi?". $cgi->query_string );
82 %} else {
83 %  print $cgi->redirect(popurl(3)."browse/part_bill_event.cgi");
84 %}
85 %
86 %
87
88