X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_pkg.pm;h=6b9a8463f3fadce2aa4dea6fe88154cbcc58a00d;hp=3e87aadf57d4849132bd33bb885ade761dbc1785;hb=2f1d603f47befaef66b15f0c2ae459d5a6fdbe0e;hpb=e8e6cb9e129eb20fef8e4fa19239c76b4280cf5f diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 3e87aadf5..6b9a8463f 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -2039,14 +2039,15 @@ sub change { } if ( $keep_dates ) { - foreach my $date ( qw(setup bill last_bill susp adjourn cancel expire - resume start_date contract_end ) ) { + foreach my $date ( qw(setup bill last_bill) ) { $hash{$date} = $self->getfield($date); } } - # always keep this date, regardless of anything - # (the date of the package change is in a different field) - $hash{'order_date'} = $self->getfield('order_date'); + # always keep the following dates + foreach my $date (qw(order_date susp adjourn cancel expire resume + start_date contract_end)) { + $hash{$date} = $self->getfield($date); + } # allow $opt->{'locationnum'} = '' to specifically set it to null # (i.e. customer default location) @@ -2082,19 +2083,15 @@ sub change { # changed from this package. $cust_pkg = $opt->{'cust_pkg'}; - foreach ( qw( pkgnum pkgpart locationnum ) ) { - $cust_pkg->set("change_$_", $self->get($_)); + # follow all the above rules for date changes, etc. + foreach (keys %hash) { + $cust_pkg->set($_, $hash{$_}); } - $cust_pkg->set('change_date', $time); - $cust_pkg->set('start_date', ''); # it's starting now - # if we are crediting unused time, then create the new package as a new - # package, charge its setup fee, etc. (same as an immediate change) - if (! $unused_credit) { - foreach my $date ( qw(setup bill last_bill susp adjourn resume - contract_end ) ) { - $cust_pkg->set($date, $self->getfield($date)); - } + # except those that implement the future package change behavior + foreach (qw(change_to_pkgnum start_date expire)) { + $cust_pkg->set($_, ''); } + $error = $cust_pkg->replace; } else {