X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fio.pl;h=4db8256c26c67b45e0662e11804c0613311d1538;hb=c1a8c6325abd3a4af242e9e6fd03b439d9b7c32f;hp=60a535f365ade56d88f40f4255a13aee43f697cb;hpb=bf32f143e97443f074c37772a052b861ad3492ff;p=kivitendo-erp.git diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index 60a535f36..4db8256c2 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -38,7 +38,7 @@ use Carp; use CGI; -use List::MoreUtils qw(uniq); +use List::MoreUtils qw(any uniq); use List::Util qw(min max first); use SL::CVar; @@ -571,7 +571,6 @@ sub item_selected { map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(sellprice listprice weight); - $form->{sellprice} += ($form->{"sellprice_$i"} * $form->{"qty_$i"}); $form->{weight} += ($form->{"weight_$i"} * $form->{"qty_$i"}); if ($form->{"not_discountable_$i"}) { @@ -1089,11 +1088,12 @@ sub print_options { opthash("inline", $form->{SM}{inline}, $locale->text('In-line')) if ($form->{media} eq 'email'); + my $printable_templates = any { $::lx_office_conf{print_templates}->{$_} } qw(latex opendocument); push @MEDIA, grep $_, opthash("screen", $form->{OP}{screen}, $locale->text('Screen')), - ($form->{printers} && scalar @{ $form->{printers} } && $::lx_office_conf{print_templates}->{latex}) ? + ($printable_templates && $form->{printers} && scalar @{ $form->{printers} }) ? opthash("printer", $form->{OP}{printer}, $locale->text('Printer')) : undef, - ($::lx_office_conf{print_templates}->{latex} && !$options{no_queue}) ? + ($printable_templates && !$options{no_queue}) ? opthash("queue", $form->{OP}{queue}, $locale->text('Queue')) : undef if ($form->{media} ne 'email'); @@ -1335,7 +1335,7 @@ sub print_form { call_sub($display_form); # saving the history if(!exists $form->{addition}) { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; + $form->{snumbers} = "${inv}number" . "_" . $form->{"${inv}number"}; $form->{addition} = "PRINTED"; $form->save_history; } @@ -1393,7 +1393,7 @@ sub print_form { # create the form variables if ($form->{type} =~ /_delivery_order$/) { - DO->order_details(); + DO->order_details(\%myconfig, \%$form); } elsif ($order) { OE->order_details(\%myconfig, \%$form); } else { @@ -1576,7 +1576,7 @@ sub print_form { # saving the history if(!exists $form->{addition}) { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; + $form->{snumbers} = "${inv}number" . "_" . $form->{"${inv}number"}; if($form->{media} =~ /printer/) { $form->{addition} = "PRINTED"; } @@ -1596,11 +1596,11 @@ sub print_form { # prepare meta information for template introspection $form->{template_meta} = { formname => $form->{formname}, - language => SL::DB::Manager::Language->find_by_or_create(id => $form->{language_id}), + language => SL::DB::Manager::Language->find_by_or_create(id => $form->{language_id} || undef), format => $form->{format}, media => $form->{media}, extension => $extension, - printer => SL::DB::Manager::Printer->find_by_or_create(id => $form->{printer_id}), + printer => SL::DB::Manager::Printer->find_by_or_create(id => $form->{printer_id} || undef), today => DateTime->today, }; @@ -1769,7 +1769,7 @@ sub set_duedate { my $invdate = $form->{invdate} eq 'undefined' ? undef : $form->{invdate}; my $duedate = $form->get_duedate(\%myconfig, $invdate); - print $form->ajax_response_header() . $duedate; + print $form->ajax_response_header() . ($duedate || $invdate); $main::lxdebug->leave_sub(); } @@ -1897,3 +1897,36 @@ sub _render_custom_variables_inputs { $main::lxdebug->leave_sub(2); } + +sub _remove_billed_or_delivered_rows { + my (%params) = @_; + + croak "Missing parameter 'quantities'" if !$params{quantities}; + + my @fields = map { s/_1$//; $_ } grep { m/_1$/ } keys %{ $::form }; + my @new_rows; + + my $removed_rows = 0; + my $row = 0; + while ($row < $::form->{rowcount}) { + $row++; + next unless $::form->{"id_$row"}; + + my $parts_id = $::form->{"id_$row"}; + my $base_qty = $::form->parse_amount(\%::myconfig, $::form->{"qty_$row"}) * SL::DB::Manager::Unit->find_by(name => $::form->{"unit_$row"})->base_factor; + + my $sub_qty = min($base_qty, $params{quantities}->{$parts_id}); + $params{quantities}->{$parts_id} -= $sub_qty; + + if (!$sub_qty || ($sub_qty != $base_qty)) { + $::form->{"qty_${row}"} = $::form->format_amount(\%::myconfig, ($base_qty - $sub_qty) / SL::DB::Manager::Unit->find_by(name => $::form->{"unit_$row"})->base_factor); + push @new_rows, { map { $_ => $::form->{"${_}_${row}"} } @fields }; + + } else { + $removed_rows++; + } + } + + $::form->redo_rows(\@fields, \@new_rows, scalar(@new_rows), $::form->{rowcount}); + $::form->{rowcount} -= $removed_rows; +}