RT# 83211 - Added service export error test report
[freeside.git] / httemplate / edit / process / elements / process.html
index eba0304..1b93187 100644 (file)
@@ -34,6 +34,11 @@ Example:
 
    'clear_on_error' => [ 'form_field1', 'form_field2', ... ],
 
+   ## message will be returned to redirect page as cookie and read by header.html
+   ## append =status, =warning, =error to change color of message box.  Default is status
+   ## status is green, warning is yellow, and error is red
+   'message'        => [ 'My message=status', 'Please restart=warning' ],
+
                   #pass an arrayref of hashrefs for multiple m2ms or m2names
                   #be certain you incorporate m2m_Common if you see error: param
 
@@ -62,6 +67,8 @@ Example:
                       'fields' => [qw( fieldname fieldname2 )],
                     },
 
+   'process_locale' => 'fieldname', # update entries in the _msgcat table
+
    'process_upload' => {
                          'process'  => 'misc/mytable-import.html',
                           # fields to pass to the back end job, besides the 
@@ -78,8 +85,12 @@ Example:
    'precheck_callback' => sub { my( $cgi ) = @_; },
 
    #after the new object is created
+   #return an error string or empty for no error
    'post_new_object_callback' => sub { my( $cgi, $object ) = @_; },
 
+   #run right before replacing (not run for inserts)
+   'edit_callback' => sub { my( $new, $old ) = @_; },
+
    #after everything's inserted
    'noerror_callback' => sub { my( $cgi, $object ) = @_; },
 
@@ -87,6 +98,9 @@ Example:
    # for use with tables that are FS::option_Common (among other things)
    'args_callback' => sub { my( $cgi, $object ) = @_; },
 
+   # if no errors after package insert or replace will update services attached to package.
+   'update_svc' => sub { my( $cgi, $object ) = @_; },
+
    'debug' => 1, #turns on debugging output
 
    #agent virtualization
@@ -100,6 +114,12 @@ Example:
 
 </%doc>
 %if ( $error ) {
+%  ## flatten any array refs so multi selects are sticky on error
+%  for my $param ($cgi->param) {
+%    if (ref($cgi->param($param)) eq "ARRAY") {
+%      $cgi->param($param, (join ",", @{$cgi->param($param)}));
+%    }
+%  }
 %
 %  #my $query = $m->scomp('/elements/create_uri_query');
 %  #$cgi->redirect("$url?$query");
@@ -160,19 +180,49 @@ process();
 </script>
 <& /elements/footer.html &>
 
-%} elsif ( $opt{'popup_reload'} ) {
+% } elsif ( $opt{'progress_init'} ) {
+%   # some false laziness with the above
+%   my ($form_name, $job_fields) = @{ $opt{'progress_init'} };
+<form name="<% $form_name %>">
+  <input type="hidden" name="<% $pkey %>" value="<% $new->get($pkey) %>">
+%   foreach my $field (@$job_fields) {
+%     next if $field eq $pkey;
+  <input type="hidden" name="<% $field %>" value="<% $cgi->param($field) |h %>">
+%   }
+<& /elements/progress-init.html,
+  @{ $opt{'progress_init'} }
+&>
+<input type="submit" style="display:none">
+</form>
+<script>
+<&| /elements/onload.js &>
+process();
+</&>
+</script>
+<& /elements/footer.html &>
+
+% } elsif ( $opt{'popup_reload'} ) {
 
   <% include('/elements/header-popup.html', $opt{'popup_reload'} ) %>
 
   <SCRIPT TYPE="text/javascript">
-    window.top.location.reload();
+    topreload();
   </SCRIPT>
 
   </BODY>
   </HTML>
 
 %} else {
-<% $cgi->redirect($redirect) %>
+%  my $cookie;
+%  $cookie = CGI::Cookie->new(
+%                        -name    => 'freeside_status',
+%                        -value   => $messages,
+%                        -expires => '+5m',
+%                      ) if $messages;
+   <% $cgi->redirect( -uri    => $redirect,
+                      -cookie => $cookie,
+      )
+   %>
 %}
 <%init>
 
@@ -250,7 +300,7 @@ foreach my $value ( @values ) {
     }
 
     if ( $opt{'post_new_object_callback'} ) {
-      &{ $opt{'post_new_object_callback'} }( $cgi, $new );
+      $error ||= &{ $opt{'post_new_object_callback'} }( $cgi, $new );
     }
 
     if ( $opt{'agent_virt'} ) {
@@ -315,7 +365,7 @@ foreach my $value ( @values ) {
       warn "$me processing m2m:\n". Dumper( %$process_m2m )
         if $opt{'debug'};
 
-      $error = $new->process_m2m( %$process_m2m );
+      $error ||= $new->process_m2m( %$process_m2m );
     }
 
   }
@@ -342,12 +392,21 @@ foreach my $value ( @values ) {
 
   }
 
-  if ( !$error && $opt{'process_o2m'} ) {
-
-    my @process_o2m = ref($opt{'process_o2m'}) eq 'ARRAY'
-                           ? @{ $opt{'process_o2m'} }
-                           :  ( $opt{'process_o2m'} );
+  my @process_o2m;
+  if ( $opt{'process_o2m'} ) {
+    @process_o2m = ref($opt{'process_o2m'}) eq 'ARRAY'
+                        ? @{ $opt{'process_o2m'} }
+                        :  ( $opt{'process_o2m'} );
+  }
+  if ( $opt{'process_locale'} ) {
+    push @process_o2m,
+    {
+      'table'  => $table . '_msgcat',
+      'fields' => [ 'locale', $opt{'process_locale'} ],
+    };
+  }
 
+  if ( !$error ) {
 
     foreach my $process_o2m (@process_o2m) {
 
@@ -357,7 +416,7 @@ foreach my $value ( @values ) {
                                                );
       }
 
-      $error = $new->process_o2m( %{ $process_o2m },
+      $error ||= $new->process_o2m( %{ $process_o2m },
                                      'params' => scalar($cgi->Vars),
                                    );
     }
@@ -406,9 +465,21 @@ foreach my $value ( @values ) {
     }
   }
 
+  if ( !$error and $opt{'update_svc'} ) {
+    my @args = ();
+    @args = &{ $opt{'args_callback'} }( $cgi, $new ) if $opt{'args_callback'};
+   $error = &{ $opt{'update_svc'} }( $cgi, $new, @args );
+  }
+
   if ( $error ) {
 
-    $cgi->param('error', $error);
+    if ($opt{'update_svc'}) {
+      my $encoded_error = encode_base64($error);
+      $cgi->param('error_link', $encoded_error);
+    } else {
+      $cgi->param('error', $error);
+    }
+
     if ( $opt{'clear_on_error'} && scalar(@{$opt{'clear_on_error'}}) ) {
       foreach my $field (@{$opt{'clear_on_error'}}) {
         $cgi->param($field, '')
@@ -427,6 +498,20 @@ foreach my $value ( @values ) {
 
 }
 
+if ($class eq "FS::tower" && !$error) {
+  foreach my $part_svc_broadband_export ( FS::tower_sector->part_export_svc_broadband ) {
+    if ($part_svc_broadband_export and $part_svc_broadband_export->can('export_tower_sector')) {
+      my $export_tower = $part_svc_broadband_export->export_tower_sector($new);
+      $error = $export_tower->{'error'} if $export_tower;
+    }
+  }
+  if ($error) {
+    my $encoded_error = encode_base64($error);
+    $cgi->param('error_link', $encoded_error) if $error;
+
+  }
+}
+
 # set up redirect URLs
 
 my $redirect;
@@ -449,6 +534,8 @@ if ( !$error ) {
   }
 }
 
+my $messages = $opt{'message'} ? $opt{'message'} : '';
+
 my $edit_ext = $opt{'edit_ext'} || 'html';
 my $error_redirect = $opt{'error_redirect'}
                      || popurl(2)."$table.$edit_ext";