Merge branch 'master' of git.freeside.biz:/home/git/freeside
authorIvan Kohler <ivan@freeside.biz>
Sun, 11 Aug 2013 23:18:24 +0000 (16:18 -0700)
committerIvan Kohler <ivan@freeside.biz>
Sun, 11 Aug 2013 23:18:24 +0000 (16:18 -0700)
1  2 
FS/FS/cust_pkg.pm

diff --combined FS/FS/cust_pkg.pm
@@@ -1450,8 -1450,10 +1450,8 @@@ field)
  
  Can be set true to adjust the next bill date forward by
  the amount of time the account was inactive.  This was set true by default
 -since 1.4.2 and 1.5.0pre6; however, starting with 1.7.0 this needs to be
 -explicitly requested.  Price plans for which this makes sense (anniversary-date
 -based than prorate or subscription) could have an option to enable this
 -behaviour?
 +in the past (from 1.4.2 and 1.5.0pre6 through 1.7.0), but now needs to be
 +explicitly requested with this option or in the price plan.
  
  =back
  
@@@ -1732,6 -1734,11 +1732,11 @@@ New pkgpart (see L<FS::part_pkg>)
  
  New refnum (see L<FS::part_referral>).
  
+ =item quantity
+ New quantity; if unspecified, the new package will have the same quantity
+ as the old.
  =item cust_pkg
  
  "New" (existing) FS::cust_pkg object.  The package's services and other 
@@@ -1767,9 -1774,6 +1772,6 @@@ sub change 
    my $self = shift;
    my $opt = ref($_[0]) ? shift : { @_ };
  
- #  my ($custnum, $pkgparts, $remove_pkgnum, $return_cust_pkg, $refnum) = @_;
- #    
    my $conf = new FS::Conf;
  
    # Transactionize this whole mess
  
    my $time = time;
  
-   #$hash{$_} = $self->$_() foreach qw( last_bill bill );
-     
-   #$hash{$_} = $self->$_() foreach qw( setup );
    $hash{'setup'} = $time if $self->setup;
  
    $hash{'change_date'} = $time;
    }
  
    $hash{'contactnum'} = $opt->{'contactnum'} if $opt->{'contactnum'};
+   $hash{'quantity'} = $opt->{'quantity'} || $self->quantity;
  
    my $cust_pkg;
    if ( $opt->{'cust_pkg'} ) {
@@@ -2098,7 -2099,9 +2097,9 @@@ The date for the package change.  Requi
  
  =item locationnum
  
- The pkgpart and locationnum of the new package, with the same 
+ =item quantity
+ The pkgpart. locationnum, and quantity of the new package, with the same 
  meaning as in C<change>.
  
  =back
@@@ -2130,7 -2133,9 +2131,9 @@@ sub change_later 
          if $opt->{'pkgpart'} and $opt->{'pkgpart'} != $change_to->pkgpart;
      my $new_locationnum = $opt->{'locationnum'}
          if $opt->{'locationnum'} and $opt->{'locationnum'} != $change_to->locationnum;
-     if ( $new_pkgpart or $new_locationnum ) {
+     my $new_quantity = $opt->{'quantity'}
+         if $opt->{'quantity'} and $opt->{'quantity'} != $change_to->quantity;
+     if ( $new_pkgpart or $new_locationnum or $new_quantity ) {
        # it hasn't been billed yet, so in principle we could just edit
        # it in place (w/o a package change), but that's bad form.
        # So change the package according to the new options...
        if $opt->{'pkgpart'} and $opt->{'pkgpart'} != $self->pkgpart;
    my $new_locationnum = $opt->{'locationnum'}
        if $opt->{'locationnum'} and $opt->{'locationnum'} != $self->locationnum;
-   return '' unless $new_pkgpart or $new_locationnum; # wouldn't do anything
+   my $new_quantity = $opt->{'quantity'}
+       if $opt->{'quantity'} and $opt->{'quantity'} != $self->quantity;
+   return '' unless $new_pkgpart or $new_locationnum or $new_quantity; # wouldn't do anything
  
    my %hash = (
      'custnum'     => $self->custnum,
      'pkgpart'     => ($opt->{'pkgpart'}     || $self->pkgpart),
      'locationnum' => ($opt->{'locationnum'} || $self->locationnum),
+     'quantity'    => ($opt->{'quantity'}    || $self->quantity),
      'start_date'  => $date,
    );
    my $new = FS::cust_pkg->new(\%hash);