Artikelpreishistorie automatisch über Trigger speichern
[kivitendo-erp.git] / SL / IS.pm
index 49d3cca..6affa1d 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -591,6 +591,7 @@ sub customer_details {
       $ref->{street} = $customer->street;
       $ref->{zipcode} = $customer->zipcode;
       $ref->{country} = $customer->country;
+      $ref->{gln} = $customer->gln;
     }
     my $contact = SL::DB::Manager::Contact->find_by(cp_id => $::form->{cp_id});
     if ($contact) {
@@ -968,15 +969,20 @@ SQL
   }
 
   # Invoice Summary includes Rounding
+  my $grossamount = $netamount + $tax;
   my $rounding = $form->round_amount(
-    $form->round_amount($netamount + $tax, 2, 1) - $form->round_amount($netamount + $tax, 2), 2
+    $form->round_amount($grossamount, 2, 1) - $form->round_amount($grossamount, 2),
+    2
   );
   my $rnd_accno = $rounding == 0 ? 0
                 : $rounding > 0  ? $form->{rndgain_accno}
-                :                  $form->{rndloss_accno};
-  $form->{amount}{ $form->{id} }{ $form->{AR} } = $form->round_amount($netamount + $tax, 2, 1);
-  $form->{paid} =
-    $form->round_amount($form->{paid} * $form->{exchangerate} + $diff, 2);
+                :                  $form->{rndloss_accno}
+  ;
+  $form->{amount}{ $form->{id} }{ $form->{AR} } = $form->round_amount($grossamount, 2, 1);
+  $form->{paid} = $form->round_amount(
+    $form->{paid} * $form->{exchangerate} + $diff,
+    2
+  );
 
   # reverse AR
   $form->{amount}{ $form->{id} }{ $form->{AR} } *= -1;
@@ -1243,6 +1249,8 @@ SQL
     $query = qq|UPDATE ar SET paid = ? WHERE id = ?|;
     do_query($form, $dbh, $query,  $form->{paid}, conv_i($form->{id}));
 
+    $form->new_lastmtime('ar');
+
     $dbh->commit if !$provided_dbh;
 
     $main::lxdebug->leave_sub();
@@ -1298,6 +1306,8 @@ SQL
     do_query($form, $dbh, qq|UPDATE ar SET paid = amount WHERE id = ?|, conv_i($form->{"id"}));
   }
 
+  $form->new_lastmtime('ar');
+
   $form->{name} = $form->{customer};
   $form->{name} =~ s/--\Q$form->{customer_id}\E//;
 
@@ -1813,6 +1823,11 @@ sub reverse_invoice {
   # delete acc_trans
   my @values = (conv_i($form->{id}));
   do_query($form, $dbh, qq|DELETE FROM acc_trans WHERE trans_id = ?|, @values);
+
+  $query = qq|DELETE FROM custom_variables
+              WHERE (config_id IN (SELECT id        FROM custom_variable_configs WHERE (module = 'ShipTo')))
+                AND (trans_id  IN (SELECT shipto_id FROM shipto                  WHERE (module = 'AR') AND (trans_id = ?)))|;
+  do_query($form, $dbh, $query, @values);
   do_query($form, $dbh, qq|DELETE FROM shipto WHERE (trans_id = ?) AND (module = 'AR')|, @values);
 
   $main::lxdebug->leave_sub();
@@ -1906,7 +1921,7 @@ sub retrieve_invoice {
       qq|SELECT
            a.invnumber, a.ordnumber, a.quonumber, a.cusordnumber,
            a.orddate, a.quodate, a.globalproject_id,
-           a.transdate AS invdate, a.deliverydate, a.paid, a.storno, a.gldate,
+           a.transdate AS invdate, a.deliverydate, a.paid, a.storno, a.storno_id, a.gldate,
            a.shippingpoint, a.shipvia, a.notes, a.intnotes, a.taxzone_id,
            a.duedate, a.taxincluded, (SELECT cu.name FROM currencies cu WHERE cu.id=a.currency_id) AS currency, a.shipto_id, a.cp_id,
            a.employee_id, a.salesman_id, a.payment_id,
@@ -1932,6 +1947,12 @@ sub retrieve_invoice {
       ($form->{"delivery_${vc}_string"}) = selectrow_query($form, $dbh, qq|SELECT name FROM customer WHERE id = ?|, $id);
     }
 
+    # get shipto
+    $query = qq|SELECT * FROM shipto WHERE (trans_id = ?) AND (module = 'AR')|;
+    $ref = selectfirst_hashref_query($form, $dbh, $query, $id);
+    delete($ref->{id});
+    map { $form->{$_} = $ref->{$_} } keys %$ref;
+
     # get printed, emailed
     $query = qq|SELECT printed, emailed, spoolfile, formname FROM status WHERE trans_id = ?|;
     $sth = prepare_execute_query($form, $dbh, $query, $id);
@@ -2038,6 +2059,21 @@ sub retrieve_invoice {
     }
     $sth->finish;
 
+    # Fetch shipping address.
+    $query = qq|SELECT s.* FROM shipto s WHERE s.trans_id = ? AND s.module = 'AR'|;
+    $ref   = selectfirst_hashref_query($form, $dbh, $query, $form->{id});
+
+    $form->{$_} = $ref->{$_} for grep { $_ ne 'id' } keys %$ref;
+
+    if ($form->{shipto_id}) {
+      my $cvars = CVar->get_custom_variables(
+        dbh      => $dbh,
+        module   => 'ShipTo',
+        trans_id => $form->{shipto_id},
+      );
+      $form->{"shiptocvar_$_->{name}"} = $_->{value} for @{ $cvars };
+    }
+
     Common::webdav_folder($form);
   }
 
@@ -2196,7 +2232,7 @@ sub retrieve_item {
     my ($table, $field) = split m/\./, $column;
     next if !$form->{"${field}_${i}"};
     $where .= qq| AND lower(${column}) ILIKE ?|;
-    push @values, '%' . $form->{"${field}_${i}"} . '%';
+    push @values, like($form->{"${field}_${i}"});
   }
 
   my (%mm_by_id);
@@ -2208,7 +2244,7 @@ sub retrieve_item {
     my $mm_query = qq|
       SELECT parts_id, model FROM makemodel LEFT JOIN parts ON parts.id = parts_id WHERE NOT parts.obsolete AND model ILIKE ?;
     |;
-    my $mm_results = selectall_hashref_query($::form, $dbh, $mm_query, '%' . $form->{"partnumber_$i"} . '%');
+    my $mm_results = selectall_hashref_query($::form, $dbh, $mm_query, like($form->{"partnumber_$i"}));
     my @mm_ids     = map { $_->{parts_id} } @$mm_results;
     push @{$mm_by_id{ $_->{parts_id} } ||= []}, $_ for @$mm_results;
 
@@ -2310,7 +2346,7 @@ sub retrieve_item {
       push @{ $ref->{matches} ||= [] }, $::locale->text('Model') . ': ' . join ', ', map { $_->{model} } @{ $mm_by_id{$ref->{id}} };
     }
 
-    if ($ref->{ean} eq $::form->{"partnumber_$i"}) {
+    if (($::form->{"partnumber_$i"} ne '') && ($ref->{ean} eq $::form->{"partnumber_$i"})) {
       push @{ $ref->{matches} ||= [] }, $::locale->text('EAN') . ': ' . $ref->{ean};
     }