supplemental packages, #20689
[freeside.git] / httemplate / edit / process / REAL_cust_pkg.cgi
index 3e0ef59..fd28934 100755 (executable)
@@ -19,36 +19,41 @@ die "access denied"
 my $pkgnum = $cgi->param('pkgnum') or die;
 my $old = qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
 my %hash = $old->hash;
-$hash{$_}= $cgi->param($_) ? parse_datetime($cgi->param($_)) : ''
-  foreach qw( start_date setup bill last_bill contract_end );
+foreach ( qw( start_date setup bill last_bill contract_end ) ) {
+  if ( $cgi->param($_) =~ /^(\d+)$/ ) {
+    $hash{$_} = $1;
+  } else {
+    $hash{$_} = '';
+  }
   # adjourn, expire, resume not editable this way
-
-my @errors = ();
-
-push @errors, '_bill_areyousure'
-  if $hash{'bill'} != $old->bill             # if the next bill date was changed
-  && $hash{'bill'} < time                    # to a date in the past
-  && ! $cgi->param('bill_areyousure');       # and it wasn't confirmed
-
-push @errors, '_setup_areyousure'
-  if ! $hash{'setup'} && $old->setup         # if the setup date was removed
-  && ! $cgi->param('setup_areyousure');      # and it wasn't confirmed 
-
-push @errors, '_setupadd_areyousure'
-  if $hash{'setup'} && ! $old->setup         # if the setup date was added
-  && ! $cgi->param('setupadd_areyousure');   # and it wasn't confirmed 
-
-push @errors, '_start'
-  if $hash{'start_date'} && !$old->start_date # if a start date was added
-  && $hash{'setup'};                          # but there's a setup date
+}
 
 my $new;
 my $error;
-if ( @errors ) {
-  $error = join(',', @errors);
-} else {
-  $new = new FS::cust_pkg \%hash;
-  $error = $new->replace($old);
+$new = new FS::cust_pkg \%hash;
+$error = $new->replace($old);
+
+if (!$error) {
+  my @supp_pkgs = $old->supplemental_pkgs;
+  foreach $new (@supp_pkgs) {
+    foreach ( qw( start_date setup contract_end ) ) {
+      # propagate these to supplementals
+      $new->set($_, $hash{$_});
+    }
+    if ( $hash{'bill'} ne $old->get('bill') ) {
+      if ( $hash{'bill'} and $old->get('bill') ) {
+        # adjust by the same interval
+        my $diff = $hash{'bill'} - $old->get('bill');
+        $new->set('bill', $new->get('bill') + $diff);
+      } else {
+        # absolute date
+        $new->set('bill', $hash{'bill'});
+      }
+    }
+    $error = $new->replace;
+    $error .= ' (supplemental package '.$new->pkgnum.')' if $error; 
+    last if $error;
+  }
 }
 
 </%init>