X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIS.pm;h=b47944bdcdda58ea9581a0228b14f4ed91ba9c43;hb=c9b8ad08645675a40f96bdeaa23b1d0e62d772e6;hp=86f4d97fc585a7dff2ddd02706e56f046bfbca61;hpb=548f4467739c9fea1addee0e0717a89e7be75429;p=kivitendo-erp.git diff --git a/SL/IS.pm b/SL/IS.pm index 86f4d97fc..b47944bdc 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -492,6 +492,8 @@ sub post_invoice { if (!$form->{employee_id}) { $form->get_employee($dbh); } + + $form->{defaultcurrency} = $form->get_default_currency($myconfig); ($null, $form->{department_id}) = split(/--/, $form->{department}); @@ -1050,34 +1052,31 @@ sub _delete_payments { my ($self, $form, $dbh) = @_; - my (@delete_oids, $delete_next, $sth, $ref); + my @delete_oids; # Delete old payment entries from acc_trans. my $query = - qq|SELECT at.oid, at.*, c.link - FROM acc_trans at - LEFT JOIN chart c ON (at.chart_id = c.id) - WHERE (trans_id = ?) - ORDER BY at.oid|; + qq|SELECT oid + FROM acc_trans + WHERE (trans_id = ?) AND fx_transaction - $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id})); - - while ($ref = $sth->fetchrow_hashref()) { - if ($delete_next) { - push @delete_oids, $ref->{oid}; - undef $delete_next; - next; - } + UNION - $ref->{LINKS} = { map { $_, 1 } split m/:/, $ref->{link} }; - - if ($ref->{fx_transaction} || ($ref->{LINKS}->{AR} && ($ref->{amount} >= 0))) { - push @delete_oids, $ref->{oid}; - $delete_next = $ref->{LINKS}->{AR}; - } - } + SELECT at.oid + FROM acc_trans at + LEFT JOIN chart c ON (at.chart_id = c.id) + WHERE (trans_id = ?) AND (c.link LIKE '%AR_paid%')|; + push @delete_oids, selectall_array_query($form, $dbh, $query, conv_i($form->{id}), conv_i($form->{id})); - $sth->finish(); + $query = + qq|SELECT at.oid + FROM acc_trans at + LEFT JOIN chart c ON (at.chart_id = c.id) + WHERE (trans_id = ?) + AND ((c.link = 'AR') OR (c.link LIKE '%:AR') OR (c.link LIKE 'AR:%')) + ORDER BY at.oid + OFFSET 1|; + push @delete_oids, selectall_array_query($form, $dbh, $query, conv_i($form->{id})); if (@delete_oids) { $query = qq|DELETE FROM acc_trans WHERE oid IN (| . join(", ", @delete_oids) . qq|)|; @@ -1097,18 +1096,11 @@ sub post_payment { my (%payments, $old_form, $row, $item, $query, %keep_vars); - my @prior; - push @prior, selectall_hashref_query($form, $dbh, qq|SELECT id, paid, datepaid FROM ar WHERE id = ?|, $form->{id}); - push @prior, selectall_hashref_query($form, $dbh, qq|SELECT * FROM acc_trans WHERE trans_id = ? ORDER BY oid|, $form->{id}); - $old_form = save_form(); # Delete all entries in acc_trans from prior payments. $self->_delete_payments($form, $dbh); - my @after_dp; - push @after_dp, selectall_hashref_query($form, $dbh, qq|SELECT * FROM acc_trans WHERE trans_id = ? ORDER BY oid|, $form->{id}); - # Save the new payments the user made before cleaning up $form. map { $payments{$_} = $form->{$_} } grep m/^datepaid_\d+$|^memo_\d+$|^source_\d+$|^exchangerate_\d+$|^paid_\d+$|^AR_paid_\d+$|^paidaccounts$/, keys %{ $form }; @@ -1119,7 +1111,7 @@ sub post_payment { # Retrieve the invoice from the database. $self->retrieve_invoice($myconfig, $form); - # Set up the content of $form in the way that IR::post_invoice() expects. + # Set up the content of $form in the way that IS::post_invoice() expects. $form->{exchangerate} = $form->format_amount($myconfig, $form->{exchangerate}); for $row (1 .. scalar @{ $form->{invoice_details} }) { @@ -1137,7 +1129,7 @@ sub post_payment { # Restore the payment options from the user input. map { $form->{$_} = $payments{$_} } keys %payments; - # Get the AP accno (which is normally done by Form::create_links()). + # Get the AR accno (which is normally done by Form::create_links()). $query = qq|SELECT c.accno FROM acc_trans at @@ -1154,20 +1146,7 @@ sub post_payment { restore_form($old_form); - my @after; - push @after, selectall_hashref_query($form, $dbh, qq|SELECT id, paid, datepaid FROM ar WHERE id = ?|, $form->{id}); - push @after, selectall_hashref_query($form, $dbh, qq|SELECT * FROM acc_trans WHERE trans_id = ? ORDER BY oid|, $form->{id}); - - foreach my $rows (@prior, @after_dp, @after) { - map { delete @{$_}{qw(itime mtime)} } @{ $rows }; - } - - map { $main::lxdebug->dump_sql_result(0, 'davor ', $_) } @prior; - map { $main::lxdebug->dump_sql_result(0, 'nachDP', $_) } @after_dp; - map { $main::lxdebug->dump_sql_result(0, 'danach', $_) } @after; - - my $rc = 1; -# my $rc = $dbh->commit(); + my $rc = $dbh->commit(); $dbh->disconnect(); $main::lxdebug->leave_sub(); @@ -1815,7 +1794,7 @@ sub retrieve_item { my $query = qq|SELECT p.id, p.partnumber, p.description, p.sellprice, - p.listprice, p.inventory_accno_id, + p.listprice, p.inventory_accno_id, p.lastcost, c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart,