fix discounts not appearing for one-time charge packages, RT#13654
authorivan <ivan>
Mon, 24 Oct 2011 01:15:59 +0000 (01:15 +0000)
committerivan <ivan>
Mon, 24 Oct 2011 01:15:59 +0000 (01:15 +0000)
FS/FS/cust_pkg_discount.pm
FS/FS/part_pkg/flat.pm
httemplate/elements/order_pkg.js
httemplate/elements/tr-select-discount.html
httemplate/view/cust_main/order_pkg_link.html

index d41f497..72a1e9c 100644 (file)
@@ -171,6 +171,9 @@ sub check {
   ;
   return $error if $error;
 
   ;
   return $error if $error;
 
+  return "Discount does not apply to setup fees, and package has no recurring"
+    if ! $self->discount->setup && ! $self->cust_pkg->freq;
+
   $self->usernum($FS::CurrentUser::CurrentUser->usernum) unless $self->usernum;
 
   $self->SUPER::check;
   $self->usernum($FS::CurrentUser::CurrentUser->usernum) unless $self->usernum;
 
   $self->SUPER::check;
index cb7e183..d59c694 100644 (file)
@@ -220,11 +220,7 @@ sub is_prepaid { 0; } #no, we're postpaid
 
 sub can_start_date { ! shift->option('start_1st', 1) }
 
 
 sub can_start_date { ! shift->option('start_1st', 1) }
 
-#XXX discounts only on recurring fees for now (no setup/one-time or usage)
-sub can_discount {
-  my $self = shift;
-  $self->freq =~ /^\d+$/ && $self->freq > 0;
-}
+sub can_discount { 1; }
 
 sub recur_temporality {
   my $self = shift;
 
 sub recur_temporality {
   my $self = shift;
index 2f53e36..4807359 100644 (file)
@@ -8,8 +8,10 @@ function pkg_changed () {
     if ( discountnum ) {
       if ( form.pkgpart.options[form.pkgpart.selectedIndex].getAttribute('data-can_discount') == 1 ) {
         form.discountnum.disabled = false;
     if ( discountnum ) {
       if ( form.pkgpart.options[form.pkgpart.selectedIndex].getAttribute('data-can_discount') == 1 ) {
         form.discountnum.disabled = false;
+        discountnum_changed(form.discountnum);
       } else {
         form.discountnum.disabled = true;
       } else {
         form.discountnum.disabled = true;
+        discountnum_changed(form.discountnum);
       }
     }
 
       }
     }
 
@@ -29,6 +31,7 @@ function pkg_changed () {
   } else {
     form.submitButton.disabled = true;
     if ( discountnum ) { form.discountnum.disabled = true; }
   } else {
     form.submitButton.disabled = true;
     if ( discountnum ) { form.discountnum.disabled = true; }
+    discountnum_changed(form.discountnum);
   }
 }
 
   }
 }
 
index 6bfc485..30a60ec 100644 (file)
     function <% $name %>_changed(what) {
       var <% $name %> = what.options[what.selectedIndex].value;
 
     function <% $name %>_changed(what) {
       var <% $name %> = what.options[what.selectedIndex].value;
 
-      if ( <% $name %> == '-1' ) {
+      if ( <% $name %> == '-1' && ! what.disabled ) {
         <% $ge %>('<% $name %>__type_label0').style.display = '';
         <% $ge %>('<% $name %>__type_label0').style.visibility = '';
         <% $ge %>('<% $name %>__type').style.display = '';
         <% $ge %>('<% $name %>__type').style.visibility = '';
         <% $ge %>('<% $name %>__type_label0').style.display = '';
         <% $ge %>('<% $name %>__type_label0').style.visibility = '';
         <% $ge %>('<% $name %>__type').style.display = '';
         <% $ge %>('<% $name %>__type').style.visibility = '';
-%       #XXX retrieve previous visibility for amount, percent :/
+
+        <% $name %>__type_changed( <% $ge %>('<% $name %>__type') );
+
         <% $ge %>('<% $name %>_months_label0').style.display = '';
         <% $ge %>('<% $name %>_months_label0').style.visibility = '';
         <% $ge %>('<% $name %>_months').style.display = '';
         <% $ge %>('<% $name %>_months_label0').style.display = '';
         <% $ge %>('<% $name %>_months_label0').style.visibility = '';
         <% $ge %>('<% $name %>_months').style.display = '';
         <% $ge %>('<% $name %>__type').style.display = 'none';
         <% $ge %>('<% $name %>__type').style.visibility = 'hidden';
 
         <% $ge %>('<% $name %>__type').style.display = 'none';
         <% $ge %>('<% $name %>__type').style.visibility = 'hidden';
 
-%       #XXX save visibility settings for amount, percent :/
-        <% $ge %>('<% $name %>_amount_label0').style.display = 'none';
-        <% $ge %>('<% $name %>_amount_label0').style.visibility = 'hidden';
-        <% $ge %>('<% $name %>_amount_input0').style.display = 'none';
-        <% $ge %>('<% $name %>_amount_input0').style.visibility = 'hidden';
-        <% $ge %>('<% $name %>_amount_input0').style.display = 'none';
-        <% $ge %>('<% $name %>_amount_input0').style.visibility = 'hidden';
-        <% $ge %>('<% $name %>_percent_label0').style.display = 'none';
-        <% $ge %>('<% $name %>_percent_label0').style.visibility = 'hidden';
-        <% $ge %>('<% $name %>_percent_input0').style.display = 'none';
-        <% $ge %>('<% $name %>_percent_input0').style.visibility = 'hidden';
-        <% $ge %>('<% $name %>_percent_input0').style.display = 'none';
-        <% $ge %>('<% $name %>_percent_input0').style.visibility = 'hidden';
+        <% $name %>__type_changed( <% $ge %>('<% $name %>__type') );
 
         <% $ge %>('<% $name %>_months_label0').style.display = 'none';
         <% $ge %>('<% $name %>_months_label0').style.visibility = 'hidden';
 
         <% $ge %>('<% $name %>_months_label0').style.display = 'none';
         <% $ge %>('<% $name %>_months_label0').style.visibility = 'hidden';
     function <% $name %>__type_changed(what) {
       var <% $name %>__type = what.options[what.selectedIndex].value;
 
     function <% $name %>__type_changed(what) {
       var <% $name %>__type = what.options[what.selectedIndex].value;
 
-      if ( <% $name %>__type == '<% $select %>' ) {
+      if ( <% $name %>__type == '<% $select %>' || what.style.display == 'none' ) {
         <% $ge %>('<% $name %>_amount_label0').style.display = 'none';
         <% $ge %>('<% $name %>_amount_label0').style.visibility = 'hidden';
         <% $ge %>('<% $name %>_amount_label0').style.display = 'none';
         <% $ge %>('<% $name %>_amount_label0').style.visibility = 'hidden';
-        <% $ge %>('<% $name %>_amount').style.display = 'none';
-        <% $ge %>('<% $name %>_amount').style.visibility = 'hidden';
+        <% $ge %>('<% $name %>_amount_input0').style.display = 'none';
+        <% $ge %>('<% $name %>_amount_input0').style.visibility = 'hidden';
         <% $ge %>('<% $name %>_percent_label0').style.display = 'none';
         <% $ge %>('<% $name %>_percent_label0').style.visibility = 'hidden';
         <% $ge %>('<% $name %>_percent_label0').style.display = 'none';
         <% $ge %>('<% $name %>_percent_label0').style.visibility = 'hidden';
-        <% $ge %>('<% $name %>_percent').style.display = 'none';
-        <% $ge %>('<% $name %>_percent').style.visibility = 'hidden';
+        <% $ge %>('<% $name %>_percent_input0').style.display = 'none';
+        <% $ge %>('<% $name %>_percent_input0').style.visibility = 'hidden';
       } else if ( <% $name %>__type == 'Amount' ) {
         <% $ge %>('<% $name %>_amount_label0').style.display = '';
         <% $ge %>('<% $name %>_amount_label0').style.visibility = '';
       } else if ( <% $name %>__type == 'Amount' ) {
         <% $ge %>('<% $name %>_amount_label0').style.display = '';
         <% $ge %>('<% $name %>_amount_label0').style.visibility = '';
index 2939843..7bc5eef 100644 (file)
@@ -5,7 +5,7 @@
           'color'       => '#333399',
           'cust_main'   => $cust_main,
           'closetext'   => emt('Close'),
           'color'       => '#333399',
           'cust_main'   => $cust_main,
           'closetext'   => emt('Close'),
-          'width'       => 763,
+          'width'       => 960, #763,
           'height'      => $height,
           %optional,
 &>
           'height'      => $height,
           %optional,
 &>
@@ -17,6 +17,6 @@ my %optional = map { $_ => $opt{$_} }
                  grep $opt{$_},
                    qw( lock_pkgpart lock_locationnum qualnum svcpart );
 
                  grep $opt{$_},
                    qw( lock_pkgpart lock_locationnum qualnum svcpart );
 
-my $height = $opt{'lock_locationnum'} ? 296 : 538;
+my $height = $opt{'lock_locationnum'} ? 336 : 576;
 
 </%init>
 
 </%init>