RT# 79284 Updated discounts UI for Change Package screen
authorMitch Jackson <mitch@freeside.biz>
Wed, 14 Feb 2018 00:11:03 +0000 (18:11 -0600)
committerMitch Jackson <mitch@freeside.biz>
Fri, 23 Feb 2018 23:39:45 +0000 (23:39 +0000)
httemplate/elements/select-table.html
httemplate/elements/tr-select-pkg-discount.html
httemplate/misc/change_pkg.cgi

index 6fb6b38..a52fdfa 100644 (file)
@@ -195,13 +195,22 @@ if ( ref( $value ) eq 'ARRAY' ) {
   $value = { map { $_ => 1 } @$value };
 }
 
-unless (    !ref($value) && $value < 1 # !$value #ignore negatives too
-         or ! exists( $opt{hashref}->{disabled} ) #??
-         #or grep { $value == $_->$key() } @records
-       ) {
+
+if (
+     (ref $value && $value)
+  or (ref $opt{hashref} && exists $opt{hashref}->{disabled})
+  or $opt{also_show_option}
+) {
+
   delete $opt{hashref}->{disabled};
 
-  foreach my $v ( ref($value) ? keys %$value : ($value) ) {
+  # also_show_option: (hack for change_pkg form):
+  #   Include an absent select option, without selecting it
+  #   as the curr_value
+  my @also_show = ref($value) ? keys %$value : ($value);
+  push @also_show, $opt{also_show_option} if $opt{also_show_option};
+
+  foreach my $v ( @also_show ) {
     next if grep { $v == $_->$key() } @records;
 
     $opt{hashref}->{$key} = $v;
index 39b0ff3..810e462 100644 (file)
@@ -7,7 +7,9 @@ In order_pkg.html or similar:
   curr_value_recur    => ($cgi->param('recur_discountnum') || ''),
   disable_setup       => 0,
   disable_recur       => 0,
-  disable_waive_setup => 0
+  disable_waive_setup => 0,
+  carry_value_setup   => $carry_setup_discountnum,
+  carry_value_recur   => $carry_recur_discountnum,
 &>
 
 This provides the following:
@@ -20,6 +22,8 @@ This provides the following:
   checkbox to waive setup fee.
 - Same for recurring fee, but without the "waive setup fee" stuff, obviously.
 - Custom recurring discounts also have an option for a duration in months.
+- When changing a package, the original package's discount option is
+  labeled in the select options
 
 "disable_setup" locks the setup discount, but will still show a static
 description if curr_value_setup is set. Likewise "disable_recur".
@@ -47,6 +51,8 @@ description if curr_value_setup is set. Likewise "disable_recur".
       curr_value  => $opt{'curr_value_setup'},
       disable_empty => 1,
       pre_options => $pre_options,
+      also_show_option => $opt{carry_value_setup},
+      label_callback   => $opt{carry_value_setup} ? $carry_setup_sub : undef,
     &>
   </td>
 </tr>
@@ -107,6 +113,8 @@ description if curr_value_setup is set. Likewise "disable_recur".
       id          => 'recur_discountnum',
       hashref     =>  { disabled => '' },
       curr_value  => $opt{'curr_value_recur'},
+      also_show_option => $opt{carry_value_recur},
+      label_callback   => $opt{carry_value_recur} ? $carry_recur_sub : undef,
     &>
 
   </td>
@@ -196,4 +204,18 @@ my %opt = (
 my $curuser = $FS::CurrentUser::CurrentUser;
 my $money_char = FS::Conf->new->config('money_char') || '$';
 
+# Change the label for the select-option when it matches the carryover
+# discountnum
+my $carry_recur_sub =  sub {
+  my ($rec) = @_;
+  $rec->discountnum eq $opt{carry_value_recur}
+    ? $rec->description() . ' [Continues existing discount]'
+    : $rec->description();
+};
+my $carry_setup_sub =  sub {
+  my ($rec) = @_;
+  $rec->discountnum eq $opt{carry_value_setup}
+    ? $rec->description() . ' [Continues existing discount]'
+    : $rec->description();
+};
 </%init>
index 2470ee1..c588c9e 100755 (executable)
   <FONT CLASS="fsinnerbox-title"><% mt('Discounting') |h %></FONT>
   <TABLE CLASS="fsinnerbox">
     <& /elements/tr-select-pkg-discount.html,
-      curr_value_setup    => $discount{setup},
-      curr_value_recur    => $discount{recur},
+      curr_value_setup    => $discount{setup},
+      curr_value_recur    => $discount{recur},
       disable_setup       => 0,
       disable_recur       => 0,
-      disable_waive_setup => 0
+      disable_waive_setup => 0,
+      carry_value_setup   => $discount{setup},
+      carry_value_recur   => $discount{recur},
     &>
   </TABLE><BR>