From cb25314000db992f8b413d10a0d20f0e80b4b677 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Thu, 16 Jun 2011 12:11:15 +0200 Subject: [PATCH] Bei Artikelauswahl nur ID als Hidden mitschleifen, nicht alle Artikeldetails MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fix für Bug 1670. --- SL/IC.pm | 5 ++ SL/IR.pm | 9 +++- SL/IS.pm | 5 ++ bin/mozilla/do.pl | 5 +- bin/mozilla/ic.pl | 2 +- bin/mozilla/io.pl | 114 +++++++++++++++++++--------------------------- bin/mozilla/ir.pl | 4 +- bin/mozilla/is.pl | 2 +- bin/mozilla/oe.pl | 5 +- 9 files changed, 76 insertions(+), 75 deletions(-) diff --git a/SL/IC.pm b/SL/IC.pm index 8dc673bca..bad463e5a 100644 --- a/SL/IC.pm +++ b/SL/IC.pm @@ -703,6 +703,11 @@ sub assembly_item { push(@values, '%' . $form->{"${column}_$i"} . '%'); } + if ($form->{"id_${i}"}) { + $where .= qq| AND p.id = ?|; + push @values, $form->{"id_${i}"}; + } + if ($form->{id}) { $where .= qq| AND NOT (p.id = ?)|; push(@values, conv_i($form->{id})); diff --git a/SL/IR.pm b/SL/IR.pm index 86b1323fd..f87cdf8d1 100644 --- a/SL/IR.pm +++ b/SL/IR.pm @@ -158,7 +158,7 @@ sub post_invoice { $linetotal = $form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"} / $price_factor, 2); if ($form->{taxincluded}) { - + $taxamount = $linetotal * ($taxrate / (1 + $taxrate)); $form->{"sellprice_$i"} = $form->{"sellprice_$i"} * (1 / (1 + $taxrate)); @@ -388,7 +388,7 @@ sub post_invoice { # income accounts, it is enough to add the total rounding error to one of # the income accounts, with the one assigned to the last row being used # (lastinventoryaccno) - + # in the purchase invoice case rounding errors may be split between # inventory accounts and expense accounts. After rounding, an error of 1 # cent is introduced if the total rounding error exceeds 0.005. The total @@ -1067,6 +1067,11 @@ sub retrieve_item { push @values, $form->{"partnumber_$i"}; } + if ($form->{"id_${i}"}) { + $where .= qq| AND p.id = ?|; + push @values, $form->{"id_${i}"}; + } + if ($form->{"description_$i"}) { $where .= " ORDER BY p.description"; } else { diff --git a/SL/IS.pm b/SL/IS.pm index 689c779be..3210b1292 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -1778,6 +1778,11 @@ sub retrieve_item { push @values, $form->{"partnumber_$i"}; } + if ($form->{"id_${i}"}) { + $where .= qq| AND p.id = ?|; + push @values, $form->{"id_${i}"}; + } + if ($form->{"description_$i"}) { $where .= qq| ORDER BY p.description|; } else { diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl index e95aaf82c..54c650c31 100644 --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@ -364,10 +364,13 @@ sub update_delivery_order { } else { + my $mode; if ($form->{type} eq 'purchase_delivery_order') { IR->retrieve_item(\%myconfig, $form); + $mode = 'IR'; } else { IS->retrieve_item(\%myconfig, $form); + $mode = 'IS'; } my $rows = scalar @{ $form->{item_list} }; @@ -377,7 +380,7 @@ sub update_delivery_order { if ($rows > 1) { - select_item(); + select_item(mode => $mode); ::end_of_request(); } else { diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index 2976a4985..28bc105e2 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -1728,7 +1728,7 @@ sub update { if ($rows > 1) { $form->{makemodel_rows}--; - &select_item; + select_item(mode => 'IC'); ::end_of_request(); } else { map { $form->{item_list}[$i]{$_} =~ s/\"/"/g } diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index 866e5ec32..c65d742da 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -36,6 +36,7 @@ # ####################################################################### +use Carp; use CGI; use CGI::Ajax; use List::Util qw(min max first); @@ -437,13 +438,16 @@ sub set_pricegroup { sub select_item { $main::lxdebug->enter_sub(); + my %params = @_; + my $form = $main::form; my %myconfig = %main::myconfig; my $locale = $main::locale; my $cgi = $main::cgi; -# diese variable kommt schon in der methode display_row vor, kann man die besser wiederverwenden? @mb fragen. ich check das jetzt erstmal so ein - my $is_purchase = (first { $_ eq $form->{type} } qw(request_quotation purchase_order purchase_delivery_order)) || ($form->{script} eq 'ir.pl'); + my $mode = $params{mode} || croak "Missing parameter 'mode'"; + my $is_purchase = $mode eq 'IS'; + _check_io_auth(); my @column_index = qw(ndx partnumber description rop onhand unit sellprice); @@ -455,10 +459,10 @@ sub select_item { qq|| . $locale->text('Part Description') . qq||; $column_data{sellprice} = qq|| . $locale->text('Price') . qq||; - if ($is_purchase){ - $column_data{rop} = - qq|| . $locale->text('ROP') . qq||; - }# ende if $is_purchase -> Überschrift Mindestlagerbestand - ähnliche Prüfung weiter unten + if ($is_purchase){ + $column_data{rop} = + qq|| . $locale->text('ROP') . qq||; + }# ende if $is_purchase -> Überschrift Mindestlagerbestand - ähnliche Prüfung weiter unten $column_data{onhand} = qq|| . $locale->text('Qty') . qq||; $column_data{unit} = @@ -485,13 +489,6 @@ sub select_item { print qq||; - my @new_fields = - qw(bin listprice inventory_accno income_accno expense_accno unit weight - assembly taxaccounts partsgroup formel longdescription not_discountable - part_payment_id partnotes id lastcost price_factor_id price_factor); - push @new_fields, "lizenzen" if $::lx_office_conf{features}->{lizenzen}; - push @new_fields, grep { m/^ic_cvar_/ } keys %{ $form->{item_list}->[0] }; - my $i = 0; my $j; foreach my $ref (@{ $form->{item_list} }) { @@ -509,34 +506,24 @@ sub select_item { } } - map { $ref->{$_} =~ s/\"/"/g } qw(partnumber description unit); - my $display_sellprice = $ref->{sellprice} * (1 - $form->{tradediscount}); $display_sellprice /= $ref->{price_factor} if ($ref->{price_factor}); $display_sellprice = $form->format_amount(\%myconfig, $display_sellprice, 2); + my $new_id = $ref->{id}; + + map { $ref->{$_} = H($ref->{$_}) } qw(id partnumber description unit); + + $column_data{ndx} = qq||; + $column_data{partnumber} = qq|$ref->{partnumber}|; + $column_data{description} = qq|$ref->{description}|; + $column_data{sellprice} = qq|${display_sellprice}|; + $column_data{onhand} = qq|| . $form->format_amount(\%myconfig, $ref->{onhand}, '', " ") . qq||; + $column_data{unit} = qq|$ref->{unit}|; - $column_data{ndx} = - qq||; - $column_data{partnumber} = - qq|$ref->{partnumber}|; - $column_data{description} = - qq|$ref->{description}|; - $column_data{sellprice} = - qq|| - . $display_sellprice - . qq||; - $column_data{onhand} = - qq|| - . $form->format_amount(\%myconfig, $ref->{onhand}, '', " ") - . qq||; if ($is_purchase){ - $column_data{rop} = - qq|| - . $form->format_amount(\%myconfig, $ref->{rop}, '', " ") - . qq||; + $column_data{rop} = qq|| . $form->format_amount(\%myconfig, $ref->{rop}, '', " ") . qq||; }# ende if $is_purchase -> Falls der Aufruf über eine Einkaufsmaske kam, handelt es sich um einen Lieferantenauftrag und uns interessiert auch die Mindestbestandsmenge - $column_data{unit} = - qq|$ref->{unit}|; + $j++; $j %= 2; print qq| @@ -545,30 +532,21 @@ sub select_item { map { print "\n$column_data{$_}" } @column_index; print("\n"); - - print join "\n", map { $cgi->hidden("-name" => "new_${_}_$i", "-value" => $ref->{$_}) } @new_fields; - print "\n"; } print qq|
- - - |; # delete action variable map { delete $form->{$_} } qw(action item_list header); - # save all other form variables - foreach my $key (keys %${form}) { - next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key})); - $form->{$key} =~ s/\"/"/g; - print qq|\n|; - } + my $previous_form = $::auth->save_form_in_session(form => $form); print qq| + +
@@ -591,16 +569,25 @@ sub item_selected { _check_io_auth(); - # replace the last row with the checked row - my $i = $form->{rowcount}; - $i = $form->{assembly_rows} if ($form->{item} eq 'assembly'); + $::auth->restore_form_from_session($form->{select_item_previous_form} || croak('Missing previous form ID'), form => $form); - # index for new item - my $j = $form->{ndx}; + my $mode = delete($form->{select_item_mode}) || croak 'Missing item selection mode'; + my $id = delete($form->{select_item_id}) || croak 'Missing item selection ID'; + my $i = $form->{ $mode eq 'IC' ? 'assembly_rows' : 'rowcount' }; - #sk - #($form->{"sellprice_$i"},$form->{"$pricegroup_old_$i"}) = split /--/, $form->{"sellprice_$i"}; - #$form->{"sellprice_$i"} = $form->{"sellprice_$i"}; + $form->{"id_${i}"} = $id; + + if ($mode eq 'IS') { + IS->retrieve_item(\%myconfig, \%$form); + } elsif ($mode eq 'IR') { + IR->retrieve_item(\%myconfig, \%$form); + } elsif ($mode eq 'IC') { + IC->assembly_item(\%myconfig, \%$form); + } else { + croak "Invalid item selection mode '${mode}'"; + } + + my $new_item = $form->{item_list}->[0] || croak "No item found for mode '${mode}' and ID '${id}'"; # if there was a price entered, override it my $sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"}); @@ -611,21 +598,19 @@ sub item_selected { partsgroup formel longdescription not_discountable partnotes lastcost price_factor_id price_factor); + push @new_fields, 'lizenzen' if $::lx_office_conf{features}->{lizenzen}; + my $ic_cvar_configs = CVar->get_configs(module => 'IC'); push @new_fields, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs }; - map { $form->{"${_}_$i"} = $form->{"new_${_}_$j"} } @new_fields; + map { $form->{"${_}_$i"} = $new_item->{$_} } @new_fields; - $form->{"marge_price_factor_$i"} = $form->{"new_price_factor_$j"}; + $form->{"marge_price_factor_$i"} = $new_item->{price_factor}; if ($form->{"part_payment_id_$i"} ne "") { $form->{payment_id} = $form->{"part_payment_id_$i"}; } - if ($::lx_office_conf{features}->{lizenzen}) { - map { $form->{"${_}_$i"} = $form->{"new_${_}_$j"} } qw(lizenzen); - } - my ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); $dec = length $dec; my $decimalplaces = ($dec > 2) ? $dec : 2; @@ -665,12 +650,7 @@ sub item_selected { $form->{"runningnumber_$i"} = $i; - # delete all the new_ variables - for $i (1 .. $form->{lastndx}) { - map { delete $form->{"new_${_}_$i"} } @new_fields; - } - - map { delete $form->{$_} } qw(ndx lastndx nextsub); + delete $form->{nextsub}; # format amounts map { diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index 1f18c1fc3..fab18f722 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -229,7 +229,7 @@ sub prepare_invoice { # übernommen aus is.pl Fix für Bug 1642. Nebenwirkungen? jb 12.5.2011 # getestet: Lieferantenauftrag -> Rechnung i.O. # Lieferantenauftrag -> Lieferschein -> Rechnung i.O. - # Werte: 20% (Lieferantenrabatt), 12,4% individuell und 0,4 individuell s.a. + # Werte: 20% (Lieferantenrabatt), 12,4% individuell und 0,4 individuell s.a. # Screenshot zu Bug 1642 $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{"discount_$i"} * 100); @@ -481,7 +481,7 @@ sub update { if ($rows > 1) { - &select_item; + select_item(mode => 'IR'); ::end_of_request(); } else { diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 2d833b6b7..3945d7f9d 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -523,7 +523,7 @@ sub update { if ($rows > 1) { - &select_item; + select_item(mode => 'IS'); ::end_of_request(); } else { diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index 5b1bc51d0..a7e95a662 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -550,10 +550,13 @@ sub update { &check_form; } else { + my $mode; if ($form->{type} =~ /^sales/) { IS->retrieve_item(\%myconfig, \%$form); + $mode = 'IS'; } else { IR->retrieve_item(\%myconfig, \%$form); + $mode = 'IR'; } my $rows = scalar @{ $form->{item_list} }; @@ -571,7 +574,7 @@ sub update { if ($rows > 1) { - &select_item; + select_item(mode => $mode); ::end_of_request(); } else { -- 2.20.1