Der letzte Einkauspreis wurde nicht geladen und daher auch keine MArgenberechnung
[kivitendo-erp.git] / SL / IS.pm
index 86f4d97..b47944b 100644 (file)
--- 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,