[freeside-commits] branch master updated. 6a42226f7f1779974316111cb178a3c6a6d74931

Mark Wells mark at 420.am
Tue Mar 26 17:02:58 PDT 2013


The branch, master has been updated
       via  6a42226f7f1779974316111cb178a3c6a6d74931 (commit)
      from  092d75e50a900003904f8e400d6d102ba5bd16f9 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 6a42226f7f1779974316111cb178a3c6a6d74931
Author: Mark Wells <mark at freeside.biz>
Date:   Tue Mar 26 17:01:10 2013 -0700

    UI to change package quantities, #18330

diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm
index 87acf0e..374cf7a 100644
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@ -1931,6 +1931,24 @@ sub change {
 
 }
 
+=item set_quantity QUANTITY
+
+Change the package's quantity field.  This is the one package property
+that can safely be changed without canceling and reordering the package
+(because it doesn't affect tax eligibility).  Returns an error or an 
+empty string.
+
+=cut
+
+sub set_quantity {
+  my $self = shift;
+  $self = $self->replace_old; # just to make sure
+  my $qty = shift;
+  ($qty =~ /^\d+$/ and $qty > 0) or return "bad package quantity $qty";
+  $self->set('quantity' => $qty);
+  $self->replace;
+}
+
 use Storable 'thaw';
 use MIME::Base64;
 sub process_bulk_cust_pkg {
diff --git a/httemplate/edit/cust_pkg_quantity.html b/httemplate/edit/cust_pkg_quantity.html
new file mode 100755
index 0000000..ec47ed6
--- /dev/null
+++ b/httemplate/edit/cust_pkg_quantity.html
@@ -0,0 +1,49 @@
+<& /elements/header-popup.html, "Change Quantity" &>
+<& /elements/error.html &>
+
+<FORM ACTION="<% $p %>edit/process/cust_pkg_quantity.html" METHOD=POST>
+<INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
+<& /elements/table-grid.html, 'bgcolor' => '#cccccc', 'cellpadding' => 2 &>
+
+  <TR>
+    <TH ALIGN="right">Current package </TH>
+    <TD CLASS="grid">
+      <% $curuser->option('show_pkgnum') ? $cust_pkg->pkgnum.': ' : '' %><B><% $part_pkg->pkg |h %></B> - <% $part_pkg->comment |h %>
+    </TD>
+  </TR>
+
+<& /elements/tr-input-text.html,
+    'field'       => 'quantity',
+    'curr_value'  => $cust_pkg->quantity,
+    'label'       => emt('Quantity')
+&>
+
+</TABLE>
+
+<BR>
+<INPUT NAME="submit" TYPE="submit" VALUE="Change">
+
+</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('Change customer package');
+
+my $pkgnum = scalar($cgi->param('pkgnum'));
+$pkgnum =~ /^(\d+)$/ or die "illegal pkgnum $pkgnum";
+$pkgnum = $1;
+
+my $cust_pkg = FS::cust_pkg->by_key($pkgnum) or die "unknown pkgnum $pkgnum";
+
+my $part_pkg = $cust_pkg->part_pkg;
+
+</%init>
diff --git a/httemplate/edit/process/cust_pkg_quantity.html b/httemplate/edit/process/cust_pkg_quantity.html
new file mode 100644
index 0000000..fb26572
--- /dev/null
+++ b/httemplate/edit/process/cust_pkg_quantity.html
@@ -0,0 +1,33 @@
+% if ($error) {
+%   $cgi->param('error', $error);
+%   $cgi->redirect(popurl(3). 'edit/cust_pkg_quantity.html?'. $cgi->query_string );
+% } else {
+
+    <& /elements/header-popup.html, "Quantity changed" &>
+      <SCRIPT TYPE="text/javascript">
+        window.top.location.reload();
+      </SCRIPT>
+    </BODY>
+    </HTML>
+
+% }
+<%init>
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+die "access denied"
+  unless $curuser->access_right('Change customer package');
+
+my $cust_pkg = qsearchs({
+  '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;
+
+$cgi->param('quantity') =~ /^(\d+)$/;
+my $quantity = $1;
+my $error = $cust_pkg->set_quantity($1);
+
+</%init>
diff --git a/httemplate/view/cust_main/packages/package.html b/httemplate/view/cust_main/packages/package.html
index d0fc182..0b72d19 100644
--- a/httemplate/view/cust_main/packages/package.html
+++ b/httemplate/view/cust_main/packages/package.html
@@ -24,16 +24,19 @@
       <TD COLSPAN=2>
         <FONT SIZE=-1>
 
-%         unless ( $cust_pkg->get('cancel') ) { 
+%         unless ( $cust_pkg->get('cancel') ) {
 %
-%           if ( $supplemental ) {
-%             # then only show "Edit dates", "Add invoice details", and "Add
-%             # comments".
+%           if ( $supplemental or $part_pkg->freq eq '0' ) {
+%             # Supplemental packages can't be changed independently.
+%             # One-time charges don't need to be changed.
+%             # For both of those, we only show "Edit dates", "Add comments",
+%             # and "Add invoice details".
 %             if ( $curuser->access_right('Edit customer package dates') ) {
                 ( <%pkg_dates_link($cust_pkg)%> )
 %             }
 %           } else {
-%             # the usual case
+%             # the usual case: links to change package definition,
+%             # discount, and customization
 %             my $br = 0;
 %             if ( $curuser->access_right('Change customer package') ) {
 %               $br=1;
@@ -181,11 +184,18 @@
 %     if ( $curuser->access_right('Change customer package') and 
 %           !$cust_pkg->get('cancel') and
 %           !$supplemental and
-%           !$opt{'show_location'}) {
+%           $part_pkg->freq ne '0' ) {
       <TR>
+%       if ( !$opt{'show_location'} ) {
         <TD><FONT SIZE="-1">
           ( <% pkg_change_location_link($cust_pkg) %> )
         </FONT></TD>
+%       }
+%       if ( FS::Conf->new->exists('invoice-unitprice') ) {
+        <TD><FONT SIZE="-1">
+          ( <% pkg_change_quantity_link($cust_pkg) %> )
+        </FONT></TD>
+%       }
       </TR>
 %     }
 %   }
@@ -274,6 +284,17 @@ sub pkg_change_location_link {
   );
 }
 
+sub pkg_change_quantity_link {
+  include( '/elements/popup_link-cust_pkg.html',
+    'action'      => $p. 'edit/cust_pkg_quantity.html?',
+    'label'       => emt('Change quantity'),
+    'actionlabel' => emt('Change'),
+    'cust_pkg'    => shift,
+    'width'       => 390,
+    'height'      => 220,
+  );
+}
+
 sub pkg_dates_link { pkg_link('edit/REAL_cust_pkg', emt('Edit dates'), @_ ); }
 
 sub pkg_discount_link {

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cust_pkg.pm                               |   18 ++++++++
 httemplate/edit/cust_pkg_quantity.html          |   49 +++++++++++++++++++++++
 httemplate/edit/process/cust_pkg_quantity.html  |   33 +++++++++++++++
 httemplate/view/cust_main/packages/package.html |   33 ++++++++++++---
 4 files changed, 127 insertions(+), 6 deletions(-)
 create mode 100755 httemplate/edit/cust_pkg_quantity.html
 create mode 100644 httemplate/edit/process/cust_pkg_quantity.html




More information about the freeside-commits mailing list