fix discounts vs. quantities for prorate packages, RT#23530
[freeside.git] / FS / FS / part_pkg / sql_external.pm
index 3cf2064..813e808 100644 (file)
@@ -1,7 +1,7 @@
 package FS::part_pkg::sql_external;
+use base qw( FS::part_pkg::discount_Mixin FS::part_pkg::recur_Common );
 
 use strict;
-use base qw( FS::part_pkg::recur_Common );
 use vars qw( %info );
 use DBI;
 #use FS::Record qw(qsearch qsearchs);
@@ -9,17 +9,8 @@ use DBI;
 %info = (
   'name' => 'Base charge plus additional fees for external services from a configurable SQL query',
   'shortname' => 'External SQL query',
+  'inherit_fields' => [ 'prorate_Mixin', 'global_Mixin' ],
   'fields' => {
-    'setup_fee' => { 'name' => 'Setup fee for this package',
-                     'default' => 0,
-                   },
-    'recur_fee' => { 'name' => 'Base recurring fee for this package',
-                     'default' => 0,
-                   },
-    'unused_credit' => { 'name' => 'Credit the customer for the unused portion'.
-                                   ' of service at cancellation',
-                         'type' => 'checkbox',
-                       },
     'cutoff_day'    => { 'name' => 'Billing Day (1 - 28) for prorating or '.
                                    'subscription',
                          'default' => '1',
@@ -44,17 +35,24 @@ use DBI;
                  'default' => '',
                },
   },
-  'fieldorder' => [qw( setup_fee recur_fee unused_credit recur_method cutoff_day
-                       datasrc db_username db_password query 
+  'fieldorder' => [qw( recur_method cutoff_day ),
+                   FS::part_pkg::prorate_Mixin::fieldorder,
+                   qw( datasrc db_username db_password query 
                   )],
   'weight' => '58',
 );
 
+sub price_info {
+    my $self = shift;
+    my $str = $self->SUPER::price_info;
+    $str .= " plus per-service charges" if $str;
+    $str;
+}
+
 sub calc_recur {
   my $self = shift;
-  my($cust_pkg) = @_; #, $sdate, $details, $param ) = @_;
-
-  my $price = $self->calc_recur_Common(@_);
+  my($cust_pkg, $sdate, $details, $param ) = @_;
+  my $price = 0;
 
   my $dbh = DBI->connect( map { $self->option($_) }
                               qw( datasrc db_username db_password )
@@ -72,10 +70,11 @@ sub calc_recur {
     $price += $sth->fetchrow_arrayref->[0];
   }
 
-  $price;
+  $param->{'override_charges'} = $price;
+  ($cust_pkg->quantity || 1) * $self->calc_recur_Common($cust_pkg,$sdate,$details,$param);
 }
 
-sub can_discount { 0; }
+sub can_discount { 1; }
 
 sub is_free { 0; }