[freeside-commits] branch FREESIDE_3_BRANCH updated. 50fc1d226ec89bf5fb66622ee913ec9e470b8d6c

Jonathan Prykop jonathan at 420.am
Mon May 23 18:35:32 PDT 2016


The branch, FREESIDE_3_BRANCH has been updated
       via  50fc1d226ec89bf5fb66622ee913ec9e470b8d6c (commit)
      from  e86b3578afbb298529e773506217cfc10e0257c4 (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 50fc1d226ec89bf5fb66622ee913ec9e470b8d6c
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Mon May 23 16:55:57 2016 -0500

    RT#40215: OFM - Separate permissions for edit dates and contract dates [v3 only]

diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm
index 8879500..a162cf0 100644
--- a/FS/FS/AccessRight.pm
+++ b/FS/FS/AccessRight.pm
@@ -154,6 +154,7 @@ tie my %rights, 'Tie::IxHash',
     'View appointments', #NEWNEW
     'Make appointment',
     'View package definition costs', #NEWNEW
+    'Change package contract end date',
   ],
   
   ###
diff --git a/httemplate/edit/REAL_cust_pkg.cgi b/httemplate/edit/REAL_cust_pkg.cgi
index ac8aa40..606cf87 100755
--- a/httemplate/edit/REAL_cust_pkg.cgi
+++ b/httemplate/edit/REAL_cust_pkg.cgi
@@ -35,6 +35,11 @@ function confirm_changes() {
 <FORM NAME="formname" ACTION="process/REAL_cust_pkg.cgi" METHOD="POST">
 <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
 
+% if ($contract_only) {
+  <INPUT TYPE="hidden" ID="contract_only_text" NAME="contract_only" VALUE="1">
+  <SCRIPT>submit_fields.push('contract_only');</SCRIPT>
+% }
+
 % # raw error from below
 % if ( $error ) { 
   <FONT SIZE="+1" COLOR="#ff0000">Error: <% $error %></FONT>
@@ -124,8 +129,10 @@ function confirm_changes() {
 % my $value = $cust_pkg->get($column);
 % $value = $value ? time2str($format, $value) : "";
 %
+% if ($contract_only and $column ne 'contract_end') {
+  <& .row_display, %ARGS &>
 % # if_primary for the dates that can't be edited on supplemental packages
-% if ($if_primary and $cust_pkg->main_pkgnum) {
+% } elsif ($if_primary and $cust_pkg->main_pkgnum) {
   <INPUT TYPE="hidden" ID="<%$column%>_text" VALUE="<% $cust_pkg->get($column) %>">
   <SCRIPT>submit_fields.push('<%$column%>');</SCRIPT>
   <& .row_display, %ARGS &>
@@ -198,12 +205,15 @@ my $date_format = $conf->config('date_format') || '%m/%d/%Y';
 
 my $format = $date_format. ' %T'; # %z (%Z)';
 
+my $contract_only = $FS::CurrentUser::CurrentUser->access_right('Edit customer package dates') ? 0 : 1;
+
 </%shared>
 <%init>
 
+# see $contract_only in shared block above
 die "access denied"
-  unless $FS::CurrentUser::CurrentUser->access_right('Edit customer package dates');
-
+  unless $FS::CurrentUser::CurrentUser->access_right('Edit customer package dates')
+      or $FS::CurrentUser::CurrentUser->access_right('Change package contract end date');
 
 my $error = '';
 my( $pkgnum, $cust_pkg );
diff --git a/httemplate/edit/process/REAL_cust_pkg.cgi b/httemplate/edit/process/REAL_cust_pkg.cgi
index fd28934..0757c76 100755
--- a/httemplate/edit/process/REAL_cust_pkg.cgi
+++ b/httemplate/edit/process/REAL_cust_pkg.cgi
@@ -14,12 +14,16 @@
 my $curuser = $FS::CurrentUser::CurrentUser;
 
 die "access denied"
-  unless $curuser->access_right('Edit customer package dates');
+  unless $curuser->access_right('Edit customer package dates')
+      or $curuser->access_right('Change package contract end date');
+
+my $contract_only = $curuser->access_right('Edit customer package dates') ? 0 : 1;
+$contract_only = 1 if $cgi->param('contract_only');
 
 my $pkgnum = $cgi->param('pkgnum') or die;
 my $old = qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
 my %hash = $old->hash;
-foreach ( qw( start_date setup bill last_bill contract_end ) ) {
+foreach ( $contract_only ? qw( contract_end ) : qw( start_date setup bill last_bill contract_end ) ) {
   if ( $cgi->param($_) =~ /^(\d+)$/ ) {
     $hash{$_} = $1;
   } else {
@@ -36,11 +40,11 @@ $error = $new->replace($old);
 if (!$error) {
   my @supp_pkgs = $old->supplemental_pkgs;
   foreach $new (@supp_pkgs) {
-    foreach ( qw( start_date setup contract_end ) ) {
+    foreach ( $contract_only ? qw( contract_end ) : qw( start_date setup contract_end ) ) {
       # propagate these to supplementals
       $new->set($_, $hash{$_});
     }
-    if ( $hash{'bill'} ne $old->get('bill') ) {
+    if (( $hash{'bill'} ne $old->get('bill') ) && !$contract_only ) {
       if ( $hash{'bill'} and $old->get('bill') ) {
         # adjust by the same interval
         my $diff = $hash{'bill'} - $old->get('bill');
diff --git a/httemplate/misc/confirm-cust_pkg-edit_dates.html b/httemplate/misc/confirm-cust_pkg-edit_dates.html
index 8e54852..a0f79cd 100755
--- a/httemplate/misc/confirm-cust_pkg-edit_dates.html
+++ b/httemplate/misc/confirm-cust_pkg-edit_dates.html
@@ -2,15 +2,19 @@
 my $curuser = $FS::CurrentUser::CurrentUser;
 
 die "access denied"
-  unless $curuser->access_right('Edit customer package dates');
+  unless $curuser->access_right('Edit customer package dates')
+      or $curuser->access_right('Change package contract end date');
 
 my %arg = $cgi->Vars;
 
+my $contract_only = $curuser->access_right('Edit customer package dates') ? 0 : 1;
+$contract_only = 1 if $arg{'contract_only'};
+
 my $pkgnum = $arg{'pkgnum'};
 $pkgnum =~ /^\d+$/ or die "bad pkgnum '$pkgnum'";
 my $cust_pkg = qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
 my %hash = $cust_pkg->hash;
-foreach (qw( start_date setup bill last_bill contract_end )) {
+foreach ( $contract_only ? qw( contract_end ) : qw( start_date setup bill last_bill contract_end )) {
   # adjourn, expire, resume not editable this way
   if( $arg{$_} =~ /^\d+$/ ) {
     $hash{$_} = $arg{$_};
@@ -262,6 +266,9 @@ if ( @errors ) {
 % foreach (keys %hash) {
 <INPUT TYPE="hidden" NAME="<%$_%>" VALUE="<% $hash{$_} |h%>">
 % }
+% if ($contract_only) {
+<INPUT TYPE="hidden" NAME="contract_only" VALUE="1">
+% }
 </FORM>
 <SCRIPT>
 function submit_ready() {
diff --git a/httemplate/view/cust_main/packages/package.html b/httemplate/view/cust_main/packages/package.html
index a7facee..c7abd46 100644
--- a/httemplate/view/cust_main/packages/package.html
+++ b/httemplate/view/cust_main/packages/package.html
@@ -82,7 +82,7 @@
                 ( <%pkg_change_link($cust_pkg)%> )
 %             } 
 %
-%             if ( $curuser->access_right('Edit customer package dates') ) {
+%             if ( $curuser->access_right('Edit customer package dates') or $curuser->access_right('Change package contract end date') ) {
 %               $br=1;
                 ( <%pkg_dates_link($cust_pkg)%> )
 %             } 

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

Summary of changes:
 FS/FS/AccessRight.pm                             |    1 +
 httemplate/edit/REAL_cust_pkg.cgi                |   16 +++++++++++++---
 httemplate/edit/process/REAL_cust_pkg.cgi        |   12 ++++++++----
 httemplate/misc/confirm-cust_pkg-edit_dates.html |   11 +++++++++--
 httemplate/view/cust_main/packages/package.html  |    2 +-
 5 files changed, 32 insertions(+), 10 deletions(-)




More information about the freeside-commits mailing list