X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FCP.pm;h=a2a247613943f1a95c32c634aff0b9be82ef56ac;hb=51264c4371793e3ac8990a54640f9e9b43e3f306;hp=56f579543ab5c9b60cc7a289987c705efa7ee458;hpb=61824c4571db7e870e7c9cdc03e4af408fd27702;p=kivitendo-erp.git diff --git a/SL/CP.pm b/SL/CP.pm index 56f579543..a2a247613 100644 --- a/SL/CP.pm +++ b/SL/CP.pm @@ -37,12 +37,14 @@ package CP; use SL::DBUtils; +use strict; + sub new { $main::lxdebug->enter_sub(); my ($type, $countrycode) = @_; - $self = {}; + my $self = {}; if ($countrycode) { if (-f "locale/$countrycode/Num2text") { @@ -74,13 +76,12 @@ sub paymentaccounts { qq|FROM chart | . qq|WHERE link LIKE ? |. qq|ORDER BY accno|; - my $sth = prepare_execute_query($form, $dbh, $query, - $form->{ARAP} eq "AR" ? "AR" : "AP" ); + my $sth = prepare_execute_query($form, $dbh, $query, '%' . $ARAP . '%'); $form->{PR}{ $form->{ARAP} } = (); $form->{PR}{"$form->{ARAP}_paid"} = (); - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { foreach my $item (split(/:/, $ref->{link})) { if ($item eq $form->{ARAP}) { push(@{ $form->{PR}{ $form->{ARAP} } }, $ref); @@ -92,10 +93,9 @@ sub paymentaccounts { } $sth->finish; - # get currencies and closedto - $query = qq|SELECT curr, closedto FROM defaults|; - ($form->{currencies}, $form->{closedto}) = - selectrow_query($form, $dbh, $query); + # get closedto + $query = qq|SELECT closedto FROM defaults|; + ($form->{closedto}) = selectrow_query($form, $dbh, $query); $dbh->disconnect; @@ -127,20 +127,9 @@ sub get_openvc { $form->{"all_$form->{vc}"} = selectall_hashref_query($form, $dbh, $query); } - if ($form->{ARAP} eq 'AR') { - $query = - qq|SELECT d.id, d.description | . - qq|FROM department d | . - qq|WHERE d.role = 'P' | . - qq|ORDER BY 2|; - } else { - $query = - qq|SELECT d.id, d.description | . - qq|FROM department d | . - qq|ORDER BY 2|; - } - $form->{all_departments} = selectall_hashref_query($form, $dbh, $query); - + # aufruf für all_deparments rausgenommen, da die abteilungen nur + # beim buchen der belege (rechnung, fibu) geändert werden und danach + # NICHT mehr überschrieben werden $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -159,17 +148,25 @@ sub get_openinvoices { my $buysell = $form->{vc} eq 'customer' ? "buy" : "sell"; my $arap = $form->{arap} eq "ar" ? "ar" : "ap"; + my @values = (conv_i($form->{"${vc}_id"}), "$form->{currency}"); + my $whereinvoice = ''; + if ($::form->{invnumber}) { + $whereinvoice = ' AND a.invnumber LIKE ? '; + push @values, $::form->{invnumber}; + } + my $query = - qq|SELECT a.id, a.invnumber, a.transdate, a.amount, a.paid, a.curr | . - qq|FROM $arap a | . - qq|WHERE (a.${vc}_id = ?) AND (a.curr = ?) AND NOT (a.amount = paid)|; - qq|ORDER BY a.id|; - my $sth = prepare_execute_query($form, $dbh, $query, - conv_i($form->{"${vc}_id"}), - $form->{currency}); + qq|SELECT a.id, a.invnumber, a.transdate, a.amount, a.paid, cu.name AS curr | . + qq|FROM $arap a | . + qq|LEFT JOIN currencies cu ON (cu.id=a.currency_id)| . + qq|WHERE (a.${vc}_id = ?) AND cu.name = ? AND NOT (a.amount = a.paid)| . + $whereinvoice . + qq|ORDER BY a.id|; + + my $sth = prepare_execute_query($form, $dbh, $query, @values); $form->{PR} = []; - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { # if this is a foreign currency transaction get exchangerate $ref->{exchangerate} = @@ -179,6 +176,16 @@ sub get_openinvoices { } $sth->finish; + + $query = < ?) + AND (amount <> paid) +SQL + ($form->{openinvoices_other_currencies}) = selectfirst_array_query($form, $dbh, $query, conv_i($form->{"${vc}_id"}), "$form->{currency}"); + $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -188,6 +195,7 @@ sub process_payment { $main::lxdebug->enter_sub(); my ($self, $myconfig, $form) = @_; + my $amount; # connect to database, turn AutoCommit off my $dbh = $form->dbconnect_noauto($myconfig); @@ -200,20 +208,16 @@ sub process_payment { $form->parse_amount($myconfig, $form->{exchangerate}); if ($form->{vc} eq 'customer') { - $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, - $form->{exchangerate}, 0); + $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, $form->{exchangerate}, 0); } else { - $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, 0, - $form->{exchangerate}); + $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, 0, $form->{exchangerate}); } } else { $form->{exchangerate} = 1; } - my $query = - qq|SELECT fxgain_accno_id, fxloss_accno_id FROM defaults|; - my ($fxgain_accno_id, $fxloss_accno_id) = - selectrow_query($form, $dbh, $query); + my $query = qq|SELECT fxgain_accno_id, fxloss_accno_id FROM defaults|; + my ($fxgain_accno_id, $fxloss_accno_id) = selectrow_query($form, $dbh, $query); my $buysell = $form->{vc} eq "customer" ? "buy" : "sell"; my $arap = $form->{arap} eq "ar" ? "ar" : "ap"; @@ -232,12 +236,6 @@ sub process_payment { qq| (c.link LIKE '%:AP:%')) |; } - $paymentamount = $form->{amount}; - - # $paymentamount = $form->{amount}; - my $null; - ($null, $form->{department_id}) = split(/--/, $form->{department}); - $form->{department_id} *= 1; # query to retrieve paid amount $query = @@ -253,15 +251,13 @@ sub process_payment { $form->{"due_$i"} = $form->parse_amount($myconfig, $form->{"due_$i"}); if ($form->{"checked_$i"} && $form->{"paid_$i"}) { - $paymentamount = - (($paymentamount * 1000) - ($form->{"paid_$i"} * 1000)) / 1000; # get exchangerate for original $query = qq|SELECT $buysell | . qq|FROM exchangerate e | . qq|JOIN ${arap} a ON (a.transdate = e.transdate) | . - qq|WHERE (e.curr = ?) AND (a.id = ?)|; + qq|WHERE (e.currency_id = (SELECT id FROM currencies WHERE name = ?)) AND (a.id = ?)|; my ($exchangerate) = selectrow_query($form, $dbh, $query, $form->{currency}, $form->{"id_$i"}); @@ -280,36 +276,35 @@ sub process_payment { # add AR/AP $query = - qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount) | . - qq|VALUES (?, ?, ?, ?)|; + qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount, chart_link, taxkey, tax_id) | . + qq|VALUES (?, ?, ?, ?, (SELECT link FROM chart WHERE id=?), 0, (SELECT id FROM tax WHERE taxkey=0 LIMIT 1))|; do_query($form, $dbh, $query, $form->{"id_$i"}, $id, - conv_date($form->{datepaid}), $amount * $ml); + conv_date($form->{datepaid}), $amount * $ml, $id); # add payment $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount, | . - qq| source, memo) | . - qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?)|; + qq| source, memo, chart_link, taxkey, tax_id) | . + qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?, (SELECT link FROM chart WHERE accno=?), 0, (SELECT id FROM tax WHERE taxkey=0 LIMIT 1))|; my @values = (conv_i($form->{"id_$i"}), $paymentaccno, conv_date($form->{datepaid}), $form->{"paid_$i"} * $ml * -1, $form->{source}, - $form->{memo}); + $form->{memo}, $paymentaccno); do_query($form, $dbh, $query, @values); # add exchangerate difference if currency ne defaultcurrency - $amount = - $form->round_amount($form->{"paid_$i"} * ($form->{exchangerate} - 1), + $amount = $form->round_amount($form->{"paid_$i"} * ($form->{exchangerate} - 1), 2); if ($amount != 0) { # exchangerate difference $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount, | . - qq| cleared, fx_transaction) | . - qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?)|; - @values = (conv_i($form->{"id_$i"}), $paymentaccno, + qq| cleared, fx_transaction, chart_link, taxkey, tax_id) | . + qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?, (SELECT link FROM chart WHERE accno = ?), 0, (SELECT id FROM tax WHERE taxkey=0 LIMIT 1))|; + @values = (conv_i($form->{"id_$i"}), $paymentaccno, conv_date($form->{datepaid}), ($amount * $ml * -1), '0', - '1'); + '1', $paymentaccno); do_query($form, $dbh, $query, @values); # gain/loss @@ -321,11 +316,11 @@ sub process_payment { my $accno_id = ($amount < 0) ? $fxgain_accno_id : $fxloss_accno_id; $query = qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, | . - qq| amount, cleared, fx_transaction) | . - qq|VALUES (?, ?, ?, ?, ?, ?)|; + qq| amount, cleared, fx_transaction, chart_link, taxkey, tax_id) | . + qq|VALUES (?, ?, ?, ?, ?, ?, (SELECT link FROM chart WHERE id=?), 0, (SELECT id FROM tax WHERE taxkey=0 LIMIT 1))|; @values = (conv_i($form->{"id_$i"}), $accno_id, conv_date($form->{datepaid}), $amount * $ml * -1, '0', - '1'); + '1', $accno_id); do_query($form, $dbh, $query, @values); } } @@ -338,6 +333,7 @@ sub process_payment { $amount += $form->{"paid_$i"}; + my $paid; # BUG 324 if ($form->{arap} eq 'ap') { $paid = "paid = paid + $amount"; @@ -347,32 +343,24 @@ sub process_payment { # update AR/AP transaction $query = qq|UPDATE $arap SET $paid, datepaid = ? WHERE id = ?|; - @values = (conv_date($form->{datepaid}), conv_i($form->{"id_$i"})); + @values = (conv_date($form->{datepaid}), conv_i($form->{"id_$i"})); do_query($form, $dbh, $query, @values); # saving the history $form->{id} = $form->{"id_$i"}; if(!exists $form->{addition}) { - $form->{snumbers} = qq|invnumber_| . $form->{"invnumber_$i"}; - $form->{addition} = "POSTED"; - $form->save_history($form->dbconnect($myconfig)); + $form->{snumbers} = qq|invnumber_| . $form->{"invnumber_$i"}; + $form->{what_done} = "invoice"; + $form->{addition} = "PAYMENT POSTED"; + $form->save_history; } - # /saving the history + # /saving the history } } - - # record a AR/AP with a payment - if ($form->round_amount($paymentamount, 2) > 0) { - $form->{invnumber} = ""; - OP::overpayment("", $myconfig, $form, $dbh, $paymentamount, $ml, 1); - } - - if ($form->round_amount($paymentamount, 2) < 0) { - $dbh->rollback; - $rc = 0; - } - if ($form->round_amount($paymentamount, 2) == 0) { + my $rc; + # Hier wurden negativen Zahlungseingänge abgefangen + # da Zahlungsein- und ausgänge immer positiv sind + # Besser: in Oberfläche schon prüfen erledigt jb 10.2010 $rc = $dbh->commit; - } $dbh->disconnect;