RT# 31208 Docs $FS::Record::qsearch_qualify_columns
[freeside.git] / httemplate / edit / REAL_cust_pkg.cgi
index 77e5da1..606cf87 100755 (executable)
@@ -9,9 +9,37 @@
 <SCRIPT TYPE="text/javascript" SRC="../elements/calendar-en.js"></SCRIPT>
 <SCRIPT TYPE="text/javascript" SRC="../elements/calendar-setup.js"></SCRIPT>
 
+<SCRIPT TYPE="text/javascript">
+var submit_fields = [];
+function confirm_changes() {
+  var i;
+  var querystring = 'pkgnum=<%$pkgnum%>';
+  var f = document.forms.formname;
+  for(i = 0; i < submit_fields.length; i++) {
+    querystring += ';'
+                + submit_fields[i]
+                + '='
+                + encodeURIComponent(f.elements[submit_fields[i] + '_text'].value);
+  }
+  overlib(
+    OLiframeContent(
+      '<%$p%>/misc/confirm-cust_pkg-edit_dates.html?' + querystring,
+      576, 576, 'confirm_popup'
+    ),
+    CAPTION, 'Package date changes', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', 
+    MIDX, 0, MIDY, 0, DRAGGABLE, BGCOLOR, '#333399', CGCOLOR, '#333399', 
+    TEXTSIZE, 3
+  );
+}
+</SCRIPT>
 <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>
     <TD BGCOLOR="#ffffff"><% $part_pkg->pkg %></TD>
   </TR>
 
+% if ( $cust_pkg->main_pkgnum ) {
+%   my $main_pkg = $cust_pkg->main_pkg;
+  <TR>
+    <TD ALIGN="right">Supplemental to</TD>
+    <TD BGCOLOR="#ffffff">Package #<% $cust_pkg->main_pkgnum%>:&nbsp;\
+    <% $main_pkg->part_pkg->pkg %></TD>
+  </TR>
+
+% }
   <TR>
     <TD ALIGN="right">Custom</TD>
     <TD BGCOLOR="#ffffff"><% $part_pkg->custom %></TD>
@@ -38,7 +75,7 @@
 
   <TR>
     <TD ALIGN="right">Comment</TD>
-    <TD BGCOLOR="#ffffff"><% $part_pkg->comment %></TD>
+    <TD BGCOLOR="#ffffff"><% $part_pkg->comment |h %></TD>
   </TR>
 
   <TR>
     <TD BGCOLOR="#ffffff"><% $cust_pkg->otaker %></TD>
   </TR>
 
+  <& .row_display, cust_pkg=>$cust_pkg, column=>'order_date',     label=>'Order' &>
 % if ( $cust_pkg->setup && ! $cust_pkg->start_date ) {
   <& .row_display, cust_pkg=>$cust_pkg, column=>'start_date',   label=>'Start' &>
 % } else {
-  <& .row_edit, cust_pkg=>$cust_pkg, column=>'start_date', label=>'Start' &>
+  <& .row_edit, cust_pkg=>$cust_pkg, column=>'start_date', label=>'Start', if_primary=>1 &>
 % }
 
-  <& .row_edit, cust_pkg=>$cust_pkg, column=>'setup',     label=>'Setup' &>
+  <& .row_edit, cust_pkg=>$cust_pkg, column=>'setup',     label=>'Setup', if_primary=>1 &>
   <& .row_edit, cust_pkg=>$cust_pkg, column=>'last_bill', label=>$last_bill_or_renewed &>
   <& .row_edit, cust_pkg=>$cust_pkg, column=>'bill',      label=>$next_bill_or_prepaid_until &>
-  <& .row_display, cust_pkg=>$cust_pkg, column=>'adjourn',   label=>'Adjournment', note=>'(will <b>suspend</b> this package when the date is reached)' &>
-  <& .row_display, cust_pkg=>$cust_pkg, column=>'susp',   label=>'Suspension' &>
-
+%#if ( $cust_pkg->contract_end or $part_pkg->option('contract_end_months',1) ) {
+    <& .row_edit, cust_pkg=>$cust_pkg, column=>'contract_end',label=>'Contract end', if_primary=>1 &>
+%#}
+  <& .row_display, cust_pkg=>$cust_pkg, column=>'adjourn',  label=>'Adjournment', note=>'(will <b>suspend</b> this package when the date is reached)' &>
+  <& .row_display, cust_pkg=>$cust_pkg, column=>'susp',     label=>'Suspension' &>
+  <& .row_display, cust_pkg=>$cust_pkg, column=>'resume',   label=>'Resumption', note=> '(will <b>unsuspend</b> this package when the date is reached' &>
+
+% if ( $cust_pkg->change_to_pkgnum ) {
+%   my $change_to_pkg = FS::cust_pkg->by_key($cust_pkg->change_to_pkgnum);
+%   my $desc;
+%   if ( $change_to_pkg->pkgpart != $cust_pkg->pkgpart ) {
+%     $desc = '<b>change package</b> to '.$change_to_pkg->part_pkg->pkg;
+%   }
+%   if ( $change_to_pkg->locationnum != $cust_pkg->locationnum ) {
+%     $desc .= ' and ' if $desc;
+%     $desc .= '<b>change location</b> to "'.
+%                 $change_to_pkg->cust_location->line . '"';
+%   }
+  <& .row_display, cust_pkg=>$cust_pkg, column=>'expire',   label=>'Change package', note=>"(will $desc when the date is reached)" &>
+% } else {
   <& .row_display, cust_pkg=>$cust_pkg, column=>'expire',   label=>'Expiration', note=>'(will <b>cancel</b> this package when the date is reached)' &>
+% }
   <& .row_display, cust_pkg=>$cust_pkg, column=>'cancel',   label=>'Cancellation' &>
 
+
 <%def .row_edit>
 <%args>
   $cust_pkg
   $column
   $label
   $note => ''
+  $if_primary => 0
 </%args>
 % 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
+% } 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 &>
+% } else {
   <TR>
     <TD ALIGN="right"><% $label %> date</TD>
     <TD>
       button:     "<% $column %>_button",
       align:      "BR"
     });
-  </SCRIPT>
 
+    submit_fields.push('<%$column%>');
+
+  </SCRIPT>
+% }
 </%def>
 
 <%def .row_display>
   $column
   $label
   $note => ''
+  $is_primary => 0 #ignored
 </%args>
 % if ( $cust_pkg->get($column) ) { 
     <TR>
 </TABLE>
 
 <BR>
-<INPUT TYPE="submit" VALUE="Apply Changes">
+<INPUT TYPE="button" VALUE="<% mt('Apply changes') |h %>" onclick="confirm_changes()">
 </FORM>
 
 <% include('/elements/footer.html') %>
@@ -135,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 );
@@ -154,31 +227,6 @@ if ( $cgi->param('error') ) {
     my @errors = ();
     my %errors = map { $_=>1 } split(',', $cgi->param('error'));
     $cgi->param('error', '');
-
-    if ( $errors{'_bill_areyousure'} ) {
-      if ( $cgi->param('bill') =~ /^([\s\d\/\:\-\(\w\)]*)$/ ) {
-        my $bill = $1;
-        push @errors,
-          "You are attempting to set the next bill date to $bill, which is
-           in the past.  This will charge the customer for the interval
-           from $bill until now.  Are you sure you want to do this? ".
-          '<INPUT TYPE="checkbox" NAME="bill_areyousure" VALUE="1">';
-      }
-    }
-
-    if ( $errors{'_setup_areyousure'} ) {
-      push @errors,
-        "You are attempting to remove the setup date.  This will re-charge the
-         customer for the setup fee. Are you sure you want to do this? ".
-        '<INPUT TYPE="checkbox" NAME="setup_areyousure" VALUE="1">';
-    }
-
-    if ( $errors{'_start'} ) {
-      push @errors,
-        "You are attempting to add a start date to a package that has already
-         started billing.";
-    }
-
     $error = join('<BR><BR>', @errors );
 
   }
@@ -187,7 +235,7 @@ if ( $cgi->param('error') ) {
   $cust_pkg = qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
   die "No package!" unless $cust_pkg;
 
-  foreach my $col (qw( start_date setup last_bill bill adjourn expire )) {
+  foreach my $col (qw( start_date setup last_bill bill )) {
     my $value = $cgi->param($col);
     $cust_pkg->set( $col, $value ? parse_datetime($value) : '' );
   }