Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[kivitendo-erp.git] / SL / IC.pm
index 8d46c2d..0b8924b 100644 (file)
--- a/SL/IC.pm
+++ b/SL/IC.pm
@@ -156,20 +156,8 @@ SQL
   }
   $trq->finish;
 
-  # now get accno for taxes
-  $query =
-    qq|SELECT c.accno
-       FROM chart c, partstax pt
-       WHERE (pt.chart_id = c.id) AND (pt.parts_id = ?)|;
-  $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{id}));
-  while (my ($key) = $sth->fetchrow_array) {
-    $form->{amount}{$key} = $key;
-  }
-
-  $sth->finish;
-
   # is it an orphan
-  my @referencing_tables = qw(invoice orderitems inventory rmaitems);
+  my @referencing_tables = qw(invoice orderitems inventory);
   my %column_map         = ( );
   my $parts_id           = conv_i($form->{id});
 
@@ -295,9 +283,6 @@ sub save {
       do_query($form, $dbh, qq|DELETE FROM assembly WHERE id = ?|, conv_i($form->{id}));
     }
 
-    # delete tax records
-    do_query($form, $dbh, qq|DELETE FROM partstax WHERE parts_id = ?|, conv_i($form->{id}));
-
     # delete translations
     do_query($form, $dbh, qq|DELETE FROM translation WHERE parts_id = ?|, conv_i($form->{id}));
 
@@ -361,7 +346,8 @@ sub save {
          notes = ?,
          formel = ?,
          rop = ?,
-         bin = ?,
+         warehouse_id = ?,
+         bin_id = ?,
          buchungsgruppen_id = ?,
          payment_id = ?,
          inventory_accno_id = $subq_inventory,
@@ -393,7 +379,8 @@ sub save {
              $form->{notes},
              $form->{formel},
              $form->{rop},
-             $form->{bin},
+             conv_i($form->{warehouse_id}),
+             conv_i($form->{bin_id}),
              conv_i($form->{buchungsgruppen_id}),
              conv_i($form->{payment_id}),
              conv_i($form->{buchungsgruppen_id}),
@@ -470,17 +457,6 @@ sub save {
       }
     }
 
-  # insert taxes
-  foreach my $item (split(/ /, $form->{taxaccounts})) {
-    if ($form->{"IC_tax_$item"}) {
-      $query =
-        qq|INSERT INTO partstax (parts_id, chart_id)
-           VALUES (?, (SELECT id FROM chart WHERE accno = ?))|;
-      @values = (conv_i($form->{id}), $item);
-      do_query($form, $dbh, $query, @values);
-    }
-  }
-
   # add assembly records
   if ($form->{item} eq 'assembly') {
 
@@ -593,7 +569,7 @@ sub retrieve_assemblies {
   # retrieve assembly items
   my $query =
     qq|SELECT p.id, p.partnumber, p.description,
-         p.bin, p.onhand, p.rop,
+              p.onhand, p.rop,
          (SELECT sum(p2.inventory_accno_id)
           FROM parts p2, assembly a
           WHERE (p2.id = a.parts_id) AND (a.id = p.id)) AS inventory
@@ -617,7 +593,7 @@ sub delete {
 
   my %columns = ( "assembly" => "id", "parts" => "id" );
 
-  for my $table (qw(prices partstax makemodel inventory assembly translation parts)) {
+  for my $table (qw(prices makemodel inventory assembly translation parts)) {
     my $column = defined($columns{$table}) ? $columns{$table} : "parts_id";
     do_query($form, $dbh, qq|DELETE FROM $table WHERE $column = ?|, @values);
   }
@@ -697,7 +673,7 @@ sub assembly_item {
 #   partnumber ean description partsgroup microfiche drawing
 #
 # column flags:
-#   l_partnumber l_description l_listprice l_sellprice l_lastcost l_priceupdate l_weight l_unit l_bin l_rop l_image l_drawing l_microfiche l_partsgroup
+#   l_partnumber l_description l_listprice l_sellprice l_lastcost l_priceupdate l_weight l_unit l_rop l_image l_drawing l_microfiche l_partsgroup
 #
 # exclusives:
 #   itemstatus  = active | onhand | short | obsolete | orphaned
@@ -747,7 +723,7 @@ sub all_parts {
   my @apoe_filters         = qw(transdate);
   my @like_filters         = (@simple_filters, @invoice_oi_filters);
   my @all_columns          = (@simple_filters, @makemodel_filters, @apoe_filters, @project_filters, qw(serialnumber));
-  my @simple_l_switches    = (@all_columns, qw(notes listprice sellprice lastcost priceupdate weight unit bin rop image));
+  my @simple_l_switches    = (@all_columns, qw(notes listprice sellprice lastcost priceupdate weight unit rop image));
   my @oe_flags             = qw(bought sold onorder ordered rfq quoted);
   my @qsooqr_flags         = qw(invnumber ordnumber quonumber trans_id name module qty);
   my @deliverydate_flags   = qw(deliverydate);
@@ -990,7 +966,7 @@ sub all_parts {
 
   my $token_builder = $make_token_builder->(\%joins_needed);
 
-  my @sort_cols    = (@simple_filters, qw(id bin priceupdate onhand invnumber ordnumber quonumber name serialnumber soldtotal deliverydate));
+  my @sort_cols    = (@simple_filters, qw(id priceupdate onhand invnumber ordnumber quonumber name serialnumber soldtotal deliverydate));
      $form->{sort} = 'id' unless grep { $form->{"l_$_"} } grep { $form->{sort} eq $_ } @sort_cols; # sort by id if unknown or invisible column
   my $sort_order   = ($form->{revers} ? ' DESC' : ' ASC');
   my $order_clause = " ORDER BY " . $token_builder->($form->{sort}) . ($form->{revers} ? ' DESC' : ' ASC');
@@ -1048,7 +1024,7 @@ sub all_parts {
   if ($form->{searchitems} eq 'assembly' && $form->{bom}) {
     $query =
       qq|SELECT p.id, p.partnumber, p.description, a.qty AS onhand,
-           p.unit, p.bin, p.notes,
+           p.unit, p.notes,
            p.sellprice, p.listprice, p.lastcost,
            p.rop, p.weight, p.priceupdate,
            p.image, p.drawing, p.microfiche,
@@ -1513,8 +1489,22 @@ sub retrieve_accounts {
 
   # transdate madness.
   my $transdate = "";
-  if ($form->{type} eq "invoice") {
-    if (($form->{vc} eq "vendor") || !$form->{deliverydate}) {
+  if ($form->{type} eq "invoice" or $form->{type} eq "credit_note") {
+    # use deliverydate for sales and purchase invoice, if it exists
+    # also use deliverydate for credit notes
+    if (!$form->{deliverydate}) {
+      $transdate = $form->{invdate};
+    } else {
+      $transdate = $form->{deliverydate};
+    }
+  } elsif ($form->{script} eq 'ir.pl') {
+    # when a purchase invoice is opened from the report of purchase invoices
+    # $form->{type} isn't set, but $form->{script} is, not sure why this is or
+    # whether this distinction matters in some other scenario. Otherwise one
+    # could probably take out this elsif and add a
+    # " or $form->{script} eq 'ir.pl' "
+    # to the above if-statement
+    if (!$form->{deliverydate}) {
       $transdate = $form->{invdate};
     } else {
       $transdate = $form->{deliverydate};
@@ -1523,6 +1513,8 @@ sub retrieve_accounts {
     # if credit_note has a deliverydate, use this instead of invdate
     # useful for credit_notes of invoices from an old period with different tax
     # if there is no deliverydate then invdate is used, old default (see next elsif)
+    # Falls hier der Stichtag für Steuern anders bestimmt wird,
+    # entsprechend auch bei Taxkeys.pm anpassen
     $transdate = $form->{deliverydate};
   } elsif (($form->{type} eq "credit_note") || ($form->{script} eq 'ir.pl')) {
     $transdate = $form->{invdate};
@@ -1642,8 +1634,8 @@ sub prepare_parts_for_printing {
   my $self     = shift;
   my %params   = @_;
 
-  my $myconfig = \%main::myconfig;
-  my $form     = $main::form;
+  my $myconfig = $params{myconfig} || \%main::myconfig;
+  my $form     = $params{form}     || $main::form;
 
   my $dbh      = $params{dbh} || $form->get_standard_dbh($myconfig);