Merge branch 'master' of github.com:kivitendo/kivitendo-erp
authorJan Büren <jan@kivitendo-premium.de>
Fri, 23 Jan 2015 14:03:10 +0000 (15:03 +0100)
committerJan Büren <jan@kivitendo-premium.de>
Fri, 23 Jan 2015 14:03:10 +0000 (15:03 +0100)
SL/DO.pm
SL/IR.pm
SL/IS.pm
SL/OE.pm
bin/mozilla/do.pl
bin/mozilla/io.pl
bin/mozilla/oe.pl
sql/Pg-upgrade2/record_links_orderitems_delete_triggers.sql [new file with mode: 0644]
sql/Pg-upgrade2/record_links_post_delete_triggers.sql

index 8fad24c..7659ffe 100644 (file)
--- a/SL/DO.pm
+++ b/SL/DO.pm
@@ -403,6 +403,17 @@ SQL
                                 name_prefix  => 'ic_',
                                 name_postfix => "_$i",
                                 dbh          => $dbh);
+    # link order items with doi
+    if ($form->{"converted_from_orderitems_id_$i"}) {
+      RecordLinks->create_links('dbh'        => $dbh,
+                                'mode'       => 'ids',
+                                'from_table' => 'orderitems',
+                                'from_ids'   => $form->{"converted_from_orderitems_id_$i"},
+                                'to_table'   => 'delivery_order_items',
+                                'to_id'      =>  $form->{"delivery_order_items_id_$i"},
+      );
+      delete $form->{"converted_from_orderitems_id_$i"};
+    }
   }
 
   # 1. search for orphaned dois; processed_dois may be empty (no transfer) TODO: be supersafe and alter same statement for doi and oi
index 8ce3d04..457c481 100644 (file)
--- a/SL/IR.pm
+++ b/SL/IR.pm
@@ -407,6 +407,28 @@ SQL
                                 name_prefix  => 'ic_',
                                 name_postfix => "_$i",
                                 dbh          => $dbh);
+    # link oe items with invoice
+    if ($form->{"converted_from_orderitems_id_$i"}) {
+      RecordLinks->create_links('dbh'        => $dbh,
+                                'mode'       => 'ids',
+                                'from_table' => 'orderitems',
+                                'from_ids'   => $form->{"converted_from_orderitems_id_$i"},
+                                'to_table'   => 'invoice',
+                                'to_id'      => $form->{"invoice_id_$i"},
+      );
+      delete $form->{"converted_from_orderitems_id_$i"};
+    }
+    # link doi items with invoice
+    if ($form->{"converted_from_delivery_order_items_id_$i"}) {
+      RecordLinks->create_links('dbh'        => $dbh,
+                                'mode'       => 'ids',
+                                'from_table' => 'delivery_order_items',
+                                'from_ids'   => $form->{"converted_from_delivery_order_items_id_$i"},
+                                'to_table'   => 'invoice',
+                                'to_id'      => $form->{"invoice_id_$i"},
+      );
+      delete $form->{"converted_from_delivery_order_items_id_$i"};
+    }
   }
 
   $h_item_unit->finish();
@@ -683,13 +705,6 @@ SQL
   my $taxzone_id         = $form->{taxzone_id} * 1;
   $taxzone_id = SL::DB::Manager::TaxZone->get_default->id unless SL::DB::Manager::TaxZone->find_by(id => $taxzone_id);
 
-  # Seit neuestem wird die department_id schon übergeben UND $form->department nicht mehr
-  # korrekt zusammengebaut. Sehr wahrscheinlich beim Umstieg auf T8 kaputt gegangen
-  # Ich lass den Code von 2005 erstmal noch stehen ;-) jb 03-2011
-  # copy & paste von IS.pm
-  if (!$form->{department_id}){
-    $form->{department_id} = (split /--/, $form->{department})[1];
-  }
   $form->{invnumber}     = $form->{id} unless $form->{invnumber};
 
   # save AP record
index e09c08c..e2358ea 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -578,13 +578,6 @@ sub post_invoice {
   $form->{defaultcurrency} = $form->get_default_currency($myconfig);
   my $defaultcurrency = $form->{defaultcurrency};
 
-  # Seit neuestem wird die department_id schon übergeben UND $form->department nicht mehr
-  # korrekt zusammengebaut. Sehr wahrscheinlich beim Umstieg auf T8 kaputt gegangen
-  # Ich lass den Code von 2005 erstmal noch stehen ;-) jb 03-2011
-  if (!$form->{department_id}){
-    ($null, $form->{department_id}) = split(/--/, $form->{department});
-  }
-
   my $all_units = AM->retrieve_units($myconfig, $form);
 
   if (!$payments_only) {
@@ -803,6 +796,28 @@ SQL
                                   name_postfix => "_$i",
                                   dbh          => $dbh);
     }
+    # link oe items with invoice
+    if ($form->{"converted_from_orderitems_id_$i"}) {
+      RecordLinks->create_links('dbh'        => $dbh,
+                                'mode'       => 'ids',
+                                'from_table' => 'orderitems',
+                                'from_ids'   => $form->{"converted_from_orderitems_id_$i"},
+                                'to_table'   => 'invoice',
+                                'to_id'      => $form->{"invoice_id_$i"},
+      );
+      delete $form->{"converted_from_orderitems_id_$i"};
+    }
+    # link doi items with invoice
+    if ($form->{"converted_from_delivery_order_items_id_$i"}) {
+      RecordLinks->create_links('dbh'        => $dbh,
+                                'mode'       => 'ids',
+                                'from_table' => 'delivery_order_items',
+                                'from_ids'   => $form->{"converted_from_delivery_order_items_id_$i"},
+                                'to_table'   => 'invoice',
+                                'to_id'      => $form->{"invoice_id_$i"},
+      );
+      delete $form->{"converted_from_delivery_order_items_id_$i"};
+    }
   }
 
   # total payments, don't move we need it here
index a60b86c..d8c66f5 100644 (file)
--- a/SL/OE.pm
+++ b/SL/OE.pm
@@ -578,6 +578,17 @@ SQL
                                   name_prefix  => 'ic_',
                                   name_postfix => "_$i",
                                   dbh          => $dbh);
+      # link quotation items with order items and delete entry (just one link)
+      if ($form->{"converted_from_quotation_orderitems_id_$i"}) {
+        RecordLinks->create_links('dbh'        => $dbh,
+                                  'mode'       => 'ids',
+                                  'from_table' => 'orderitems',
+                                  'from_ids'   => $form->{"converted_from_quotation_orderitems_id_$i"},
+                                  'to_table'   => 'orderitems',
+                                  'to_id'      => $orderitems_id,
+        );
+        delete $form->{"converted_from_quotation_orderitems_id_$i"};
+      }
     }
   }
   # search for orphaned ids
index fd46ed7..d4fa816 100644 (file)
@@ -785,6 +785,7 @@ sub invoice {
     }
     map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if $form->{"${_}_${i}"} } qw(ship qty sellprice listprice lastcost basefactor);
     $form->{"donumber_$i"} = $form->{donumber};
+    $form->{"converted_from_delivery_order_items_id_$i"} = delete $form->{"delivery_order_items_id_$i"};
   }
 
   $form->{type} = "invoice";
@@ -922,6 +923,7 @@ sub invoice_multi {
     $ref->{reqdate} ||= $ref->{dord_transdate}; # copy transdates into each invoice row
     map { $form->{"${_}_$form->{rowcount}"} = $ref->{$_} } keys %{ $ref };
     map { $form->{"${_}_$form->{rowcount}"} = $form->format_amount(\%myconfig, $ref->{$_}) } qw(qty sellprice lastcost);
+    $form->{"converted_from_delivery_order_items_id_$form->{rowcount}"} = delete $form->{"delivery_order_items_id_$form->{rowcount}"};
 
     if ($vc_discount){ # falls wir einen Lieferanten/Kundenrabatt haben
       # und keinen anderen discount wert an $i ...
index 0b0d772..6a55560 100644 (file)
@@ -442,8 +442,7 @@ sub display_row {
       push @hidden_vars, qw(orderitems_id converted_from_quotation_orderitems_id);
     }
     if ($is_invoice) {
-      push @hidden_vars, qw(invoice_id converted_from_quotation_orderitems_id converted_from_order_orderitems_id
-                            converted_from_delivery_order_items_id);
+      push @hidden_vars, qw(invoice_id converted_from_orderitems_id converted_from_delivery_order_items_id);
     }
     if ($::form->{type} =~ /credit_note/) {
       push @hidden_vars, qw(invoice_id converted_from_invoice_id);
@@ -452,7 +451,7 @@ sub display_row {
       map { $form->{"${_}_${i}"} = $form->format_amount(\%myconfig, $form->{"${_}_${i}"}) } qw(sellprice discount lastcost);
       push @hidden_vars, grep { defined $form->{"${_}_${i}"} } qw(sellprice discount not_discountable price_factor_id lastcost);
       push @hidden_vars, "stock_${stock_in_out}_sum_qty", "stock_${stock_in_out}";
-      push @hidden_vars, qw(delivery_order_items_id converted_from_order_orderitems_id);
+      push @hidden_vars, qw(delivery_order_items_id converted_from_orderitems_id);
     }
 
     my @HIDDENS = map { value => $_}, (
@@ -744,7 +743,7 @@ sub remove_emptied_rows {
                 stock_out stock_in has_sernumber reqdate orderitems_id
                 active_price_source active_discount_source delivery_order_items_id
                 invoice_id converted_from_quotation_orderitems_id
-                converted_from_order_orderitems_id converted_from_delivery_order_items_id);
+                converted_from_orderitems_id converted_from_delivery_order_items_id);
 
   my $ic_cvar_configs = CVar->get_configs(module => 'IC');
   push @flds, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs };
index 904a4b9..a313fb3 100644 (file)
@@ -1423,6 +1423,7 @@ sub invoice {
     for (qw(ship qty sellprice listprice basefactor)) {
       $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if $form->{"${_}_${i}"};
     }
+    $form->{"converted_from_orderitems_id_$i"} = delete $form->{"orderitems_id_$i"};
   }
 
   my ($buysell, $orddate, $exchangerate);
@@ -1472,7 +1473,6 @@ sub invoice {
 
   # bo creates the id, reset it
   map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued);
-  delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};
   $form->{ $form->{vc} } =~ s/--.*//g;
   $form->{type} = "invoice";
 
@@ -1820,6 +1820,7 @@ sub poso {
 
   # reset
   map { delete $form->{$_} } qw(id subject message cc bcc printed emailed queued customer vendor creditlimit creditremaining discount tradediscount oldinvtotal delivered ordnumber);
+  $form->{"converted_from_quotation_orderitems_id_$_"} = $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};  # always reset orderitems_id
   delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};  # always reset orderitems_id
 
   # if purchase_order was generated from sales_order, use  lastcost_$i as sellprice_$i
@@ -1892,10 +1893,10 @@ sub delivery_order {
 
   # reset
   delete @{$form}{qw(id subject message cc bcc printed emailed queued creditlimit creditremaining discount tradediscount oldinvtotal closed delivered)};
-  delete $form->{"orderitems_id_$_"} for 1 .. $form->{"rowcount"};
 
   for my $i (1 .. $form->{rowcount}) {
     map { $form->{"${_}_${i}"} = $form->parse_amount(\%myconfig, $form->{"${_}_${i}"}) if ($form->{"${_}_${i}"}) } qw(ship qty sellprice listprice lastcost basefactor discount);
+    $form->{"converted_from_orderitems_id_$i"} = delete $form->{"orderitems_id_$i"};
   }
 
   my %old_values = map { $_ => $form->{$_} } qw(customer_id oldcustomer customer vendor_id oldvendor vendor shipto_id);
diff --git a/sql/Pg-upgrade2/record_links_orderitems_delete_triggers.sql b/sql/Pg-upgrade2/record_links_orderitems_delete_triggers.sql
new file mode 100644 (file)
index 0000000..4b75366
--- /dev/null
@@ -0,0 +1,46 @@
+-- @tag: record_links_orderitems_delete_triggers
+-- @description: delete trigger für verknüpfte invoice(items), orderitems und delivery_order_items
+-- @depends: record_links_post_delete_triggers2 release_3_1_0
+CREATE OR REPLACE FUNCTION clean_up_record_links_before_orderitems_delete() RETURNS trigger AS $$
+  BEGIN
+    DELETE FROM record_links
+      WHERE (from_table = 'orderitems' AND from_id = OLD.id)
+         OR (to_table   = 'orderitems' AND to_id   = OLD.id);
+    RETURN OLD;
+  END;
+$$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION clean_up_record_links_before_delivery_order_items_delete() RETURNS trigger AS $$
+  BEGIN
+    DELETE FROM record_links
+      WHERE (from_table = 'delivery_order_items' AND from_id = OLD.id)
+         OR (to_table   = 'delivery_order_items' AND to_id   = OLD.id);
+    RETURN OLD;
+  END;
+$$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION clean_up_record_links_before_invoice_delete() RETURNS trigger AS $$
+  BEGIN
+    DELETE FROM record_links
+      WHERE (from_table = 'invoice' AND from_id = OLD.id)
+         OR (to_table   = 'invoice' AND to_id   = OLD.id);
+    RETURN OLD;
+  END;
+$$ LANGUAGE plpgsql;
+
+
+
+CREATE TRIGGER before_delete_orderitems_trigger
+BEFORE DELETE ON orderitems FOR EACH ROW EXECUTE
+PROCEDURE clean_up_record_links_before_orderitems_delete();
+
+CREATE TRIGGER before_delete_delivery_order_items_trigger
+BEFORE DELETE ON delivery_order_items FOR EACH ROW EXECUTE
+PROCEDURE clean_up_record_links_before_delivery_order_items_delete();
+
+CREATE TRIGGER before_delete_invoice_trigger
+BEFORE DELETE ON invoice FOR EACH ROW EXECUTE
+PROCEDURE clean_up_record_links_before_invoice_delete();
+
+
+
index 888e6f8..b4e656f 100644 (file)
@@ -3,7 +3,7 @@
 -- @depends: release_2_7_0
 
 -- When deleting records record_links weren't cleaned up until now
--- This wasn't rally a problem apart from the fact that record_links slowly grew
+-- This wasn't really a problem apart from the fact that record_links slowly grew
 -- but deleting records was seldom enough to not matter
 -- Unfortunately delivery_plan decides if an order need to be displayed by the
 -- number of record_links, which generates false negatives.