X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FAP.pm;h=f03fb63e892b461085088eceb0363dab873c0e7d;hb=d4608fb4eff9392728d1287de4df3e865ebe7f6e;hp=ae75dc909d1137d0578379f2a15abcd74be4785a;hpb=800378d4dca02bfcf5537ee29307eb946a3dc73e;p=kivitendo-erp.git diff --git a/SL/AP.pm b/SL/AP.pm index ae75dc909..f03fb63e8 100644 --- a/SL/AP.pm +++ b/SL/AP.pm @@ -25,7 +25,8 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1335, USA. #====================================================================== # # Accounts Payables database backend routines @@ -39,6 +40,7 @@ use SL::DBUtils; use SL::IO; use SL::MoreCommon; use SL::DB::Default; +use SL::DB::Draft; use SL::Util qw(trim); use SL::DB; use Data::Dumper; @@ -65,8 +67,6 @@ sub _post_transaction { $form->{defaultcurrency} = $form->get_default_currency($myconfig); $form->{taxincluded} = 0 unless $form->{taxincluded}; - ($null, $form->{department_id}) = split(/--/, $form->{department}); - if ($form->{currency} eq $form->{defaultcurrency}) { $form->{exchangerate} = 1; } else { @@ -74,13 +74,8 @@ sub _post_transaction { $form->{exchangerate} = $exchangerate || $form->parse_amount($myconfig, $form->{exchangerate}); } - for my $i (1 .. $form->{rowcount}) { - $form->{AP_amounts}{"amount_$i"} = - (split(/--/, $form->{"AP_amount_$i"}))[0]; - } - - ($form->{AP_amounts}{payables}) = split(/--/, $form->{APselected}); - ($form->{AP_payables}) = split(/--/, $form->{APselected}); + # get the charts selected + $form->{AP_amounts}{"amount_$_"} = $form->{"AP_amount_chart_id_$_"} for (1 .. $form->{rowcount}); # calculate the totals while calculating and reformatting the $amount_$i and $tax_$i ($form->{netamount},$form->{total_tax},$form->{invtotal}) = $form->calculate_arap('buy',$form->{taxincluded}, $form->{exchangerate}); @@ -168,13 +163,11 @@ sub _post_transaction { $query = qq|INSERT INTO acc_trans | . qq| (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link)| . - qq|VALUES (?, (SELECT c.id FROM chart c WHERE c.accno = ?), | . - qq| ?, ?, ?, ?, ?,| . - qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|; - @values = ($form->{id}, $form->{AP_amounts}{"amount_$i"}, + qq|VALUES (?, ?, ?, ?, ?, ?, ?, (SELECT c.link FROM chart c WHERE c.id = ?))|; + @values = ($form->{id}, $form->{"AP_amount_chart_id_$i"}, $form->{"amount_$i"}, conv_date($form->{transdate}), $project_id, $form->{"taxkey_$i"}, conv_i($form->{"tax_id_$i"}), - $form->{AP_amounts}{"amount_$i"}); + $form->{"AP_amount_chart_id_$i"}); do_query($form, $dbh, $query, @values); if ($form->{"tax_$i"} != 0) { @@ -198,19 +191,17 @@ sub _post_transaction { # add payables $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id, chart_link) | . - qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, | . - qq| (SELECT taxkey_id FROM chart WHERE accno = ?),| . + qq|VALUES (?, ?, ?, ?, | . + qq| (SELECT taxkey_id FROM chart WHERE id = ?),| . qq| (SELECT tax_id| . qq| FROM taxkeys| . - qq| WHERE chart_id= (SELECT id | . - qq| FROM chart| . - qq| WHERE accno = ?)| . + qq| WHERE chart_id = ?| . qq| AND startdate <= ?| . qq| ORDER BY startdate DESC LIMIT 1),| . - qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|; - @values = ($form->{id}, $form->{AP_amounts}{payables}, $form->{payables}, - conv_date($form->{transdate}), $form->{AP_amounts}{payables}, $form->{AP_amounts}{payables}, conv_date($form->{transdate}), - $form->{AP_amounts}{payables}); + qq| (SELECT c.link FROM chart c WHERE c.id = ?))|; + @values = ($form->{id}, $form->{AP_chart_id}, $form->{payables}, + conv_date($form->{transdate}), $form->{AP_chart_id}, $form->{AP_chart_id}, conv_date($form->{transdate}), + $form->{AP_chart_id}); do_query($form, $dbh, $query, @values); } @@ -255,20 +246,18 @@ sub _post_transaction { if ($form->{payables}) { $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link) | . - qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, | . - qq| (SELECT taxkey_id FROM chart WHERE accno = ?),| . + qq|VALUES (?, ?, ?, ?, ?, | . + qq| (SELECT taxkey_id FROM chart WHERE id = ?),| . qq| (SELECT tax_id| . qq| FROM taxkeys| . - qq| WHERE chart_id= (SELECT id | . - qq| FROM chart| . - qq| WHERE accno = ?)| . + qq| WHERE chart_id = ?| . qq| AND startdate <= ?| . qq| ORDER BY startdate DESC LIMIT 1),| . - qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|; - @values = ($form->{id}, $form->{AP_payables}, $amount, + qq| (SELECT c.link FROM chart c WHERE c.id = ?))|; + @values = ($form->{id}, $form->{AP_chart_id}, $amount, conv_date($form->{"datepaid_$i"}), $project_id, - $form->{AP_payables}, $form->{AP_payables}, conv_date($form->{"datepaid_$i"}), - $form->{AP_payables}); + $form->{AP_chart_id}, $form->{AP_chart_id}, conv_date($form->{"datepaid_$i"}), + $form->{AP_chart_id}); do_query($form, $dbh, $query, @values); } $form->{payables} = $amount; @@ -373,19 +362,17 @@ sub _post_transaction { IO->set_datepaid(table => 'ap', id => $form->{id}, dbh => $dbh); + if ($form->{draft_id}) { + SL::DB::Manager::Draft->delete_all(where => [ id => delete($form->{draft_id}) ]); + } + # 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, trans_id => $form->{id}, ); - - $datev->export; + $datev->generate_datev_data; if ($datev->errors) { die join "\n", $::locale->text('DATEV check returned errors:'), $datev->errors; @@ -403,7 +390,8 @@ sub delete_transaction { SL::DB->client->with_transaction(sub { my $query = qq|DELETE FROM ap WHERE id = ?|; do_query($form, SL::DB->client->dbh, $query, $form->{id}); - }); + 1; + }) or do { die SL::DB->client->error }; $main::lxdebug->leave_sub(); @@ -450,10 +438,7 @@ sub ap_transactions { my @values; - if ($form->{vendor_id}) { - $where .= " AND a.vendor_id = ?"; - push(@values, $form->{vendor_id}); - } elsif ($form->{vendor}) { + if ($form->{vendor}) { $where .= " AND v.name ILIKE ?"; push(@values, like($form->{vendor})); } @@ -461,13 +446,9 @@ sub ap_transactions { $where .= " AND (cp.cp_name ILIKE ? OR cp.cp_givenname ILIKE ?)"; push(@values, (like($form->{"cp_name"}))x2); } - if ($form->{department}) { - # ähnlich wie commit 0bbfb33b6aa8e38bb6c81d1684ab7d08e5b5c5af abteilung - # wird so nicht mehr als zeichenkette zusammengebaut - # hätte zu ee9f9f9aa4c3b9d5d20ab10a45c12bcaa6aa78d0 auffallen können ;-) jan - #my ($null, $department_id) = split /--/, $form->{department}; + if ($form->{department_id}) { $where .= " AND a.department_id = ?"; - push(@values, $form->{department}); + push(@values, $form->{department_id}); } if ($form->{invnumber}) { $where .= " AND a.invnumber ILIKE ?"; @@ -564,7 +545,7 @@ sub get_transdate { my ($self, $myconfig, $form) = @_; # connect to database - my $dbh = $form->dbconnect($myconfig); + my $dbh = SL::DB->client->dbh; my $query = "SELECT COALESCE(" . @@ -573,8 +554,6 @@ sub get_transdate { " current_date)"; ($form->{transdate}) = $dbh->selectrow_array($query); - $dbh->disconnect; - $main::lxdebug->leave_sub(); } @@ -664,7 +643,7 @@ sub _post_payment { # Get the AP accno. $query = - qq|SELECT c.accno + qq|SELECT c.id FROM acc_trans at LEFT JOIN chart c ON (at.chart_id = c.id) WHERE (trans_id = ?) @@ -672,7 +651,7 @@ sub _post_payment { ORDER BY at.acc_trans_id LIMIT 1|; - ($form->{APselected}) = selectfirst_array_query($form, $dbh, $query, conv_i($form->{id})); + ($form->{AP_chart_id}) = selectfirst_array_query($form, $dbh, $query, conv_i($form->{id})); # Post the new payments. $self->post_transaction($myconfig, $form, $dbh, 1); @@ -765,26 +744,7 @@ sub setup_form { $form->{"projectnumber_$k"} = "$form->{acc_trans}{$key}->[$i-1]->{projectnumber}"; $form->{"oldprojectnumber_$k"} = $form->{"projectnumber_$k"}; $form->{"project_id_$k"} = "$form->{acc_trans}{$key}->[$i-1]->{project_id}"; - } - - $form->{"${key}_$k"} = "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}"; - - my $q_description = quotemeta($form->{acc_trans}{$key}->[$i-1]->{description}); - $form->{"select${key}"} =~ - m/