RT# 79284 Option to set discount at Change Package
[freeside.git] / httemplate / elements / select-discount.html
index b7f1fa5..4bbdc66 100644 (file)
@@ -4,8 +4,9 @@
                  'order_by'     => 'ORDER BY discountnum', #XXX weight
                  'value'        => $discountnum,
                  'empty_label'  => '(none)',
-                 'hashref'      => { 'disabled' => '' },
+                 'hashref'      => $hashref,
                  'post_options' => $post_options,
+                 'label_callback' => $label_callback,
                  %opt,
              )
 %>
@@ -19,10 +20,45 @@ $opt{'records'} = delete $opt{'discount'}
 
 my $curuser = $FS::CurrentUser::CurrentUser;
 
-#make an opt if we need to turn this off
-my $post_options = $curuser->access_right('Custom discount customer package')
-  ? [ -1 => 'Custom discount' ]
-  : [];
+my $hashref = $opt{hashref} || { 'disabled' => '' };
 
-</%init>
+my $post_options = [];
+
+# If a 'custom' discount is applied to existing cust_pkg,
+# also add that option to the selectbox
+my $pkgnum = $cgi ? $cgi->param('pkgnum') : undef;
+if ($pkgnum) {
+
+  # Does pkgnum have a custom discount?
+  my $cust_pkg_discount = qsearchs(cust_pkg_discount => {
+    disabled => '',
+    pkgnum   => $pkgnum,
+  });
+
+  if ($cust_pkg_discount) {
+    my $discount = qsearchs(discount => {
+      discountnum => $cust_pkg_discount->discountnum,
+      disabled    => 'Y',
+    });
+    if ($discount) {
+      my $descr = $opt{carry_value} eq $discount->discountnum
+        ? $discount->description.'  [Continue existing discount]'
+        : $discount->description;
+      push @$post_options, $discount->discountnum, $descr;
+    }
+  }
+}
 
+push @$post_options,  -1 => 'Custom discount'
+  if $curuser->access_right('Custom discount customer package')
+  && ! $opt{disable_custom_discount};
+
+my $label_callback = sub {
+  my $rec = shift;
+  if ( $opt{carry_value} eq $rec->discountnum ) {
+    return $rec->description.'  [Continue existing discount]';
+  }
+  return $rec->description;
+};
+
+</%init>