Überschriften in <h1> anstelle von <div class="listtop"> packen
[kivitendo-erp.git] / SL / AR.pm
index 7aa709d..002041e 100644 (file)
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -35,6 +35,7 @@
 package AR;
 
 use Data::Dumper;
+use SL::DATEV qw(:CONSTANTS);
 use SL::DBUtils;
 use SL::IO;
 use SL::MoreCommon;
@@ -273,6 +274,27 @@ sub post_transaction {
 
   IO->set_datepaid(table => 'ar', id => $form->{id}, dbh => $dbh);
 
+  # safety check datev export
+  if ($::lx_office_conf{datev_check}{check_on_ar_transaction}) {
+    my $transdate = $::form->{transdate} ? DateTime->from_lxoffice($::form->{transdate}) : undef;
+    $transdate  ||= DateTime->today;
+
+    my $datev = SL::DATEV->new(
+      exporttype => DATEV_ET_BUCHUNGEN,
+      format     => DATEV_FORMAT_KNE,
+      dbh        => $dbh,
+      from       => $transdate,
+      to         => $transdate,
+    );
+
+    $datev->export;
+
+    if ($datev->errors) {
+      $dbh->rollback;
+      die join "\n", $::locale->text('DATEV check returned errors:'), $datev->errors;
+    }
+  }
+
   my $rc = 1;
   if (!$provided_dbh) {
     $rc = $dbh->commit();
@@ -354,7 +376,7 @@ sub post_payment {
 
   # Set up the content of $form in the way that AR::post_transaction() expects.
 
-  $self->setup_form($form);
+  $self->setup_form($form, 1);
 
   $form->{exchangerate}    = $form->format_amount($myconfig, $form->{exchangerate});
   $form->{defaultcurrency} = $form->get_default_currency($myconfig);
@@ -427,6 +449,7 @@ sub ar_transactions {
     qq|  a.transaction_description, | .
     qq|  pr.projectnumber AS globalprojectnumber, | .
     qq|  c.name, c.customernumber, c.country, c.ustid, b.description as customertype, | .
+    qq|  c.id as customer_id, | .
     qq|  e.name AS employee, | .
     qq|  e2.name AS salesman, | .
     qq|  tz.description AS taxzone, | .
@@ -560,7 +583,7 @@ sub get_transdate {
 sub setup_form {
   $main::lxdebug->enter_sub();
 
-  my ($self, $form) = @_;
+  my ($self, $form, $for_post_payments) = @_;
 
   my ($exchangerate, $akey, $j, $k, $index, $taxamount, $totaltax, $taxrate, $diff, $totalwithholding, $withholdingrate,
       $totalamount, $taxincluded, $tax);
@@ -570,12 +593,16 @@ sub setup_form {
   $exchangerate  = $form->{exchangerate} ? $form->{exchangerate} : 1;
 
   foreach my $key (keys %{ $form->{AR_links} }) {
-    # if there is a value we have an old entry
     $j = 0;
     $k = 0;
 
+    # if there is a value we have an old entry
     next unless $form->{acc_trans}{$key};
 
+    # do not use old entries for payments. They come from the form
+    # even if they are not changeable (then they are in hiddens)
+    next if $for_post_payments && $key eq "AR_paid";
+
     for my $i (1 .. scalar @{ $form->{acc_trans}{$key} }) {
       if ($key eq "AR_paid") {
         $j++;