discounts, RT#6679
authorivan <ivan>
Sat, 30 Jan 2010 23:00:25 +0000 (23:00 +0000)
committerivan <ivan>
Sat, 30 Jan 2010 23:00:25 +0000 (23:00 +0000)
httemplate/edit/cust_pkg_discount.html [new file with mode: 0755]
httemplate/edit/process/cust_pkg_discount.html [new file with mode: 0644]
httemplate/misc/delete-cust_pkg_discount.html [new file with mode: 0644]
httemplate/view/cust_main/packages/package.html
httemplate/view/cust_main/packages/status.html

diff --git a/httemplate/edit/cust_pkg_discount.html b/httemplate/edit/cust_pkg_discount.html
new file mode 100755 (executable)
index 0000000..22d8c63
--- /dev/null
@@ -0,0 +1,75 @@
+<% include('/elements/header-popup.html', "Discount Package") %>
+
+<SCRIPT TYPE="text/javascript">
+
+  function enable_discount_pkg () {
+    if ( document.DiscountPkgForm.discountnum.selectedIndex > 0 ) {
+      document.DiscountPkgForm.submit.disabled = false;
+    } else {
+      document.DiscountPkgForm.submit.disabled = true;
+    }
+  }
+
+</SCRIPT>
+
+<% include('/elements/error.html') %>
+
+<FORM NAME="DiscountPkgForm" ACTION="<% $p %>edit/process/cust_pkg_discount.html" METHOD=POST>
+<INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
+
+<% ntable('#cccccc') %>
+
+  <TR>
+    <TH ALIGN="right">Current package&nbsp;</TH>
+    <TD COLSPAN=7>
+      <% $curuser->option('show_pkgnum') ? $cust_pkg->pkgnum.': ' : '' %><B><% $part_pkg->pkg |h %></B> - <% $part_pkg->comment |h %>
+    </TD>
+  </TR>
+
+<% include('/elements/tr-select-discount.html',
+             'empty_label' => ( $pkgdiscountnum ? '' : 'Select discount' ),
+             'onchange'    => 'enable_discount_pkg',
+          )
+%>
+
+</TABLE>
+
+<BR>
+<INPUT NAME="submit" TYPE="submit" VALUE="Discount package" <% $pkgdiscountnum ? '' : 'DISABLED' %>>
+
+</FORM>
+</BODY>
+</HTML>
+
+<%init>
+
+#some false laziness w/misc/change_pkg.cgi
+
+my $conf = new FS::Conf;
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+die "access denied"
+  unless $curuser->access_right('Discount customer package');
+
+my $pkgnum = scalar($cgi->param('pkgnum'));
+$pkgnum =~ /^(\d+)$/ or die "illegal pkgnum $pkgnum";
+$pkgnum = $1;
+
+my $pkgdiscountnum = '';
+
+my $cust_pkg =
+  qsearchs({
+    'table'     => 'cust_pkg',
+    'addl_from' => 'LEFT JOIN cust_main USING ( custnum )',
+    'hashref'   => { 'pkgnum' => $pkgnum },
+    'extra_sql' => ' AND '. $curuser->agentnums_sql,
+  }) or die "unknown pkgnum $pkgnum";
+
+#my $cust_main = $cust_pkg->cust_main
+#  or die "can't get cust_main record for custnum ". $cust_pkg->custnum.
+#         " ( pkgnum ". cust_pkg->pkgnum. ")";
+
+my $part_pkg = $cust_pkg->part_pkg;
+
+</%init>
diff --git a/httemplate/edit/process/cust_pkg_discount.html b/httemplate/edit/process/cust_pkg_discount.html
new file mode 100644 (file)
index 0000000..4a31b92
--- /dev/null
@@ -0,0 +1,51 @@
+% if ($error) {
+%   $cgi->param('error', $error);
+%   $cgi->redirect(popurl(3). 'edit/cust_pkg_discount.html?'. $cgi->query_string );
+% } else {
+
+    <% header("Discount applied") %>
+      <SCRIPT TYPE="text/javascript">
+        window.top.location.reload();
+      </SCRIPT>
+    </BODY>
+    </HTML>
+
+% }
+<%init>
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+die "access denied"
+  unless $curuser->access_right('Discount customer package');
+
+#this search is really for security wrt agent virt...
+#maybe move it to the cust_pkg_discount->insert call?
+my $cust_pkg = qsearchs({
+  #'select'    => 'cust_pkg.*',
+  'table'     => 'cust_pkg',
+  'addl_from' => 'LEFT JOIN cust_main USING ( custnum )',
+  'hashref'   => { 'pkgnum' => scalar($cgi->param('pkgnum')), },
+  'extra_sql' => ' AND '. $curuser->agentnums_sql,
+});
+die 'unknown pkgnum' unless $cust_pkg;
+
+#XXX something not unlike this for custom discounts
+#if ( $cgi->param('locationnum') == -1 ) {
+#  my $cust_location = new FS::cust_location {
+#    'custnum' => $cust_pkg->custnum,
+#    map { $_ => scalar($cgi->param($_)) }
+#        qw( address1 address2 city county state zip country )
+#  };
+#  $change{'cust_location'} = $cust_location;
+#}
+
+my $cust_pkg_discount = new FS::cust_pkg_discount {
+  'pkgnum'      => $cust_pkg->pkgnum,
+  'discountnum' => scalar($cgi->param('discountnum')),
+  'months_used' => 0,
+  'end_date'    => '', #XXX
+  'otaker'      => $curuser->username,
+};
+my $error = $cust_pkg_discount->insert;
+
+</%init>
diff --git a/httemplate/misc/delete-cust_pkg_discount.html b/httemplate/misc/delete-cust_pkg_discount.html
new file mode 100644 (file)
index 0000000..69168af
--- /dev/null
@@ -0,0 +1,30 @@
+% if ( $error ) {
+%   errorpage($error);
+% } else {
+%   my $frag = "cust_pkg". $cust_pkg->pkgnum;
+%   my $show = $curuser->default_customer_view =~ /^(jumbo|packages)$/
+%                ? ''
+%                : ';show=packages';
+<% $cgi->redirect($p. "view/cust_main.cgi?custnum=$custnum$show;fragment=$frag#$frag" ) %>
+% }
+<%init>
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+#XXX ACL to remove discounts
+#die "access denied"
+#  unless $curuser->access_right('Delete invoices');
+
+#untaint pkgdiscountnum
+my($query) = $cgi->keywords;
+$query =~ /^(\d+)$/ || die "Illegal crednum";
+my $pkgdiscountnum = $1;
+
+my $cust_pkg_discount =
+  qsearchs('cust_pkg_discount', {'pkgdiscountnum'=>$pkgdiscountnum});
+my $cust_pkg = $cust_pkg_discount->cust_pkg;
+my $custnum = $cust_pkg->custnum;
+
+my $error = $cust_pkg_discount->delete;
+
+</%init>
index 33bcd2a..3c486dd 100644 (file)
               (&nbsp;<%pkg_dates_link($cust_pkg)%>&nbsp;)
 %           } 
 %
               (&nbsp;<%pkg_dates_link($cust_pkg)%>&nbsp;)
 %           } 
 %
+%           if ( $curuser->access_right('Discount customer package')
+%                && $part_pkg->can_discount
+%                && ! scalar($cust_pkg->cust_pkg_discount_active)
+%              )
+%           {
+%             $br=1;
+              (&nbsp;<%pkg_discount_link($cust_pkg)%>&nbsp;)
+%           }
+%
 %           if ( $curuser->access_right('Customize customer package') ) {
 %             $br=1;
               (&nbsp;<%pkg_customize_link($cust_pkg,$part_pkg)%>&nbsp;)
 %           if ( $curuser->access_right('Customize customer package') ) {
 %             $br=1;
               (&nbsp;<%pkg_customize_link($cust_pkg,$part_pkg)%>&nbsp;)
@@ -196,6 +205,19 @@ sub pkg_change_link {
 
 sub pkg_dates_link { pkg_link('edit/REAL_cust_pkg', 'Edit&nbsp;dates', @_ ); }
 
 
 sub pkg_dates_link { pkg_link('edit/REAL_cust_pkg', 'Edit&nbsp;dates', @_ ); }
 
+sub pkg_discount_link {
+  my $cust_pkg = shift or return '';
+  #my $part_pkg = shift;
+  #my $custnum = $cust_pkg->custnum;
+  include( '/elements/popup_link-cust_pkg.html',
+    'action'      => $p.'edit/cust_pkg_discount.html',
+    'label'       => 'Discount',
+    'actionlabel' => 'Discount',
+    'cust_pkg'    => $cust_pkg,
+    'width'       => 616,
+  );
+}
+
 sub pkg_customize_link {
   my $cust_pkg = shift or return '';
   my $part_pkg = shift;
 sub pkg_customize_link {
   my $cust_pkg = shift or return '';
   my $part_pkg = shift;
index 40d6438..c65eb70 100644 (file)
@@ -304,6 +304,11 @@ sub pkg_status_row_discount {
               ' months remaining)'
       if $discount->months;
 
               ' months remaining)'
       if $discount->months;
 
+    $label .= ' <FONT SIZE="-1">('.
+                '<A HREF="../misc/delete-cust_pkg_discount.html?'.
+                  $cust_pkg_discount->pkgdiscountnum.
+                '">remove&nbsp;discount</A>)</FONT>';
+
     $html .= pkg_status_row_colspan( $cust_pkg, $label, '',
                                      'colspan' => $opt{'colspan'},
                                      #%opt,
     $html .= pkg_status_row_colspan( $cust_pkg, $label, '',
                                      'colspan' => $opt{'colspan'},
                                      #%opt,