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
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();
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
$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) {
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
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
}
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";
$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 ...
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);
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 => $_}, (
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 };
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);
# 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";
# 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
# 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);
--- /dev/null
+-- @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();
+
+
+
-- @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.