Auftrags-Controller: save via ajax, damit Eingaben bei Fehlern erhalten bleiben.
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 19 Aug 2015 13:59:25 +0000 (15:59 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Mon, 16 Nov 2015 15:15:56 +0000 (16:15 +0100)
SL/Controller/Order.pm
templates/webpages/order/form.html

index c462407..c532740 100644 (file)
@@ -82,8 +82,14 @@ sub action_update {
 sub action_save {
   my ($self) = @_;
 
-  $self->_save();
+  my $errors = $self->_save();
 
+  if (scalar @{ $errors }) {
+    $self->js->flash('error', $_) foreach @{ $errors };
+    return $self->js->render($self);
+  }
+
+  flash_later('info', 'The order has been saved');
   my @redirect_params = (
     action => 'edit',
     type   => $self->type,
@@ -308,12 +314,15 @@ sub _recalc {
 sub _save {
   my ($self) = @_;
 
+  my $errors = [];
   my $db = $self->order->db;
 
   $db->do_transaction(
     sub {
       $self->order->save();
-  }) || die($db->error);
+  }) || push(@{$errors}, $db->error);
+
+  return $errors;
 }
 
 
index b2e68a5..1693555 100644 (file)
 
   [% L.hidden_tag('action', 'Order/dispatch') %]
 
-  [% L.submit_tag('action_update', LxERP.t8('Update')) %]
-  [% L.submit_tag('action_save', LxERP.t8('Save')) %]
+  [% L.button_tag('save()', LxERP.t8('Save')) %]</td>
 
 </form>
+
+
+<script type='text/javascript'>
+
+function save() {
+  var data = $('#order_form').serialize();
+  data += '&action=Order/save';
+
+  $.post("controller.pl", data, kivi.eval_json_result);
+}
+
+</script>