From: Jan Büren Date: Fri, 23 Jan 2015 14:03:10 +0000 (+0100) Subject: Merge branch 'master' of github.com:kivitendo/kivitendo-erp X-Git-Tag: release-3.2.0beta~43 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/38f974a2140303118c2241ba95bde1703be5a237?hp=4bd3d0f3af4c2398220755bbe9392ff89b4d2bcd Merge branch 'master' of github.com:kivitendo/kivitendo-erp --- diff --git a/SL/DO.pm b/SL/DO.pm index 8fad24ce0..7659ffe60 100644 --- 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 diff --git a/SL/IR.pm b/SL/IR.pm index 8ce3d0428..457c48162 100644 --- 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 diff --git a/SL/IS.pm b/SL/IS.pm index e09c08c31..e2358ea16 100644 --- 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 diff --git a/SL/OE.pm b/SL/OE.pm index a60b86c5a..d8c66f5ef 100644 --- 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 diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl index fd46ed745..d4fa8160f 100644 --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@ -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 ... diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index 0b0d7723d..6a5556049 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -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 }; diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index 904a4b9fe..a313fb3cf 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -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 index 000000000..4b753668f --- /dev/null +++ b/sql/Pg-upgrade2/record_links_orderitems_delete_triggers.sql @@ -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(); + + + diff --git a/sql/Pg-upgrade2/record_links_post_delete_triggers.sql b/sql/Pg-upgrade2/record_links_post_delete_triggers.sql index 888e6f83e..b4e656f2d 100644 --- a/sql/Pg-upgrade2/record_links_post_delete_triggers.sql +++ b/sql/Pg-upgrade2/record_links_post_delete_triggers.sql @@ -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.