X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/890e057f52343ca24bbc74becb2bd715ac2ba3da..7647d46:/SL/AP.pm?ds=inline diff --git a/SL/AP.pm b/SL/AP.pm index 2f52c6253..44ddc110c 100644 --- a/SL/AP.pm +++ b/SL/AP.pm @@ -34,10 +34,11 @@ package AP; +use SL::DATEV qw(:CONSTANTS); use SL::DBUtils; use SL::IO; use SL::MoreCommon; - +use SL::DB::Default; use Data::Dumper; use strict; @@ -57,7 +58,6 @@ sub post_transaction { delete $form->{currency} unless $form->{defaultcurrency}; ($null, $form->{department_id}) = split(/--/, $form->{department}); - $form->{department_id} *= 1; if ($form->{currency} eq $form->{defaultcurrency}) { $form->{exchangerate} = 1; @@ -250,7 +250,7 @@ sub post_transaction { # add paid transactions for my $i (1 .. $form->{paidaccounts}) { - if ($form->{"acc_trans_id_$i"} && $payments_only && ($::lx_office_conf{features}->{payments_changeable} == 0)) { + if ($form->{"acc_trans_id_$i"} && $payments_only && (SL::DB::Default->get->payments_changeable == 0)) { next; } @@ -353,6 +353,27 @@ sub post_transaction { IO->set_datepaid(table => 'ap', id => $form->{id}, dbh => $dbh); + # safety check datev export + if ($::instance_conf->get_datev_check_on_ap_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; + } + } + if (!$provided_dbh) { $dbh->commit(); $dbh->disconnect(); @@ -373,13 +394,10 @@ sub delete_transaction { # connect to database my $dbh = $form->dbconnect_noauto($myconfig); + # acc_trans entries are deleted by database triggers. my $query = qq|DELETE FROM ap WHERE id = ?|; do_query($form, $dbh, $query, $form->{id}); - $query = qq|DELETE FROM acc_trans WHERE trans_id = ?|; - do_query($form, $dbh, $query, $form->{id}); - - # commit and redirect my $rc = $dbh->commit; $dbh->disconnect; @@ -571,7 +589,7 @@ sub post_payment { $old_form = save_form(); # Delete all entries in acc_trans from prior payments. - if ($::lx_office_conf{features}->{payments_changeable} != 0) { + if (SL::DB::Default->get->payments_changeable != 0) { $self->_delete_payments($form, $dbh); } @@ -591,7 +609,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); @@ -625,7 +643,7 @@ sub post_payment { sub setup_form { $main::lxdebug->enter_sub(); - my ($self, $form) = @_; + my ($self, $form, $for_post_payments) = @_; my ($exchangerate, $i, $j, $k, $key, $akey, $ref, $index, $taxamount, $totalamount, $totaltax, $totalwithholding, $withholdingrate, $taxincluded, $tax, $diff); @@ -645,11 +663,16 @@ sub setup_form { $form->{$key} = $form->{"select$key"}; - # 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 "AP_paid"; + for $i (1 .. scalar @{ $form->{acc_trans}{$key} }) { if ($key eq "AP_paid") {