comment
[freeside.git] / FS / FS / cust_pkg.pm
index 92aa43f..374cf7a 100644 (file)
@@ -1931,6 +1931,24 @@ sub change {
 
 }
 
+=item set_quantity QUANTITY
+
+Change the package's quantity field.  This is the one package property
+that can safely be changed without canceling and reordering the package
+(because it doesn't affect tax eligibility).  Returns an error or an 
+empty string.
+
+=cut
+
+sub set_quantity {
+  my $self = shift;
+  $self = $self->replace_old; # just to make sure
+  my $qty = shift;
+  ($qty =~ /^\d+$/ and $qty > 0) or return "bad package quantity $qty";
+  $self->set('quantity' => $qty);
+  $self->replace;
+}
+
 use Storable 'thaw';
 use MIME::Base64;
 sub process_bulk_cust_pkg {
@@ -3337,6 +3355,12 @@ sub apply_usage {
   my $dbh = dbh;
   my $order = FS::Conf->new->config('cdr-minutes_priority');
 
+  my $is_classnum;
+  if ( $classnum ) {
+    $is_classnum = ' part_pkg_usage_class.classnum = '.$classnum;
+  } else {
+    $is_classnum = ' part_pkg_usage_class.classnum IS NULL';
+  }
   my @usage_recs = qsearch({
       'table'     => 'cust_pkg_usage',
       'addl_from' => ' JOIN part_pkg_usage       USING (pkgusagepart)'.
@@ -3346,7 +3370,7 @@ sub apply_usage {
       'extra_sql' => " WHERE ( cust_pkg.pkgnum = $pkgnum OR ".
                      " ( cust_pkg.custnum = $custnum AND ".
                      " part_pkg_usage.shared IS NOT NULL ) ) AND ".
-                     " part_pkg_usage_class.classnum = $classnum AND ".
+                     $is_classnum . ' AND '.
                      " cust_pkg_usage.minutes > 0",
       'order_by'  => " ORDER BY priority ASC",
   });