epic-s6ts
[kivitendo-erp.git] / SL / Controller / GoBD.pm
index 463c6d7..182d8b2 100644 (file)
@@ -24,6 +24,7 @@ sub action_filter {
   $self->to(DateTime->today)                                     if !$self->to;
 
   $::request->layout->add_javascripts('kivi.GoBD.js');
+  $self->setup_filter_action_bar;
   $self->render('gobd/filter', current_year => DateTime->today->year, title => t8('GoBD Export'));
 }
 
@@ -35,6 +36,7 @@ sub action_export {
     return;
   }
 
+  my $filename;
   my $gobd = SL::GoBD->new(
     company    => $::instance_conf->get_company,
     location   => $::instance_conf->get_address,
@@ -42,7 +44,16 @@ sub action_export {
     to         => $self->to,
   );
 
-  my $filename = $gobd->generate_export;
+  eval {
+    $filename = $gobd->generate_export;
+  } or do {
+    my $errors = $@;
+    flash('error', t8('The export failed because of malformed transactions. Please fix those before exporting.'));
+    flash('error', $_) for @$errors;
+
+    $self->action_filter;
+    return;
+  };
 
   $self->send_file($filename, name => t8('gobd-#1-#2.zip', $self->from->ymd, $self->to->ymd), unlink => 1);
 }
@@ -92,4 +103,18 @@ sub available_years {
 sub init_from { DateTime->from_kivitendo($::form->{from}) }
 sub init_to { DateTime->from_kivitendo($::form->{to}) }
 
+sub setup_filter_action_bar {
+  my ($self) = @_;
+
+  for my $bar ($::request->layout->get('actionbar')) {
+    $bar->add(
+      action => [
+        t8('Export'),
+        submit    => [ '#filter_form', { action => 'GoBD/export' } ],
+        accesskey => 'enter',
+      ],
+    );
+  }
+}
+
 1;