X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FOrder.pm;h=29ff0ac49e7f7d52a1383f27d8e81a751a7274a1;hb=661febc70d58eb13923455512e8d76f1ef29ae60;hp=9f1ca0ec5bb565a4c9188d835e36903e4bfdc392;hpb=a5038d8dfae7d3a5ad27f1fb4f219b347bb2c91c;p=kivitendo-erp.git diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index 9f1ca0ec5..29ff0ac49 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -22,6 +22,7 @@ use SL::DB::Printer; use SL::DB::Language; use SL::DB::RecordLink; use SL::DB::Shipto; +use SL::DB::Translation; use SL::Helper::CreatePDF qw(:all); use SL::Helper::PrintOptions; @@ -93,11 +94,10 @@ sub action_edit { foreach my $item (@{$self->order->items_sorted}) { $item->{new_fake_id} = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000); } - # trigger rendering values for second row/longdescription as hidden, - # because they are loaded only on demand. So we need to keep the values - # from the source. - $_->{render_second_row} = 1 for @{ $self->order->items_sorted }; - $_->{render_longdescription} = 1 for @{ $self->order->items_sorted }; + # trigger rendering values for second row as hidden, because they + # are loaded only on demand. So we need to keep the values from + # the source. + $_->{render_second_row} = 1 for @{ $self->order->items_sorted }; } $self->recalc(); @@ -262,6 +262,7 @@ sub action_print { my $formname = $::form->{print_options}->{formname}; my $copies = $::form->{print_options}->{copies}; my $groupitems = $::form->{print_options}->{groupitems}; + my $printer_id = $::form->{print_options}->{printer_id}; # only pdf and opendocument by now if (none { $format eq $_ } qw(pdf opendocument opendocument_pdf)) { @@ -286,6 +287,7 @@ sub action_print { my @errors = generate_pdf($self->order, \$pdf, { format => $format, formname => $formname, language => $self->order->language, + printer_id => $printer_id, groupitems => $groupitems }); if (scalar @errors) { return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render; @@ -433,6 +435,7 @@ sub action_send_email { format => $::form->{print_options}->{format}, formname => $::form->{print_options}->{formname}, language => $self->order->language, + printer_id => $::form->{print_options}->{printer_id}, groupitems => $::form->{print_options}->{groupitems}}); if (scalar @errors) { return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render($self); @@ -994,22 +997,6 @@ sub action_price_popup { $self->render_price_dialog($item); } -# get the longdescription for an item if the dialog to enter/change the -# longdescription was opened and the longdescription is empty -# -# If this item is new, get the longdescription from Part. -# Otherwise get it from OrderItem. -sub action_get_item_longdescription { - my $longdescription; - - if ($::form->{item_id}) { - $longdescription = SL::DB::OrderItem->new(id => $::form->{item_id})->load->longdescription; - } elsif ($::form->{parts_id}) { - $longdescription = SL::DB::Part->new(id => $::form->{parts_id})->load->notes; - } - $_[0]->render(\ $longdescription, { type => 'text' }); -} - # load the second row for one or more items # # This action gets the html code for all items second rows by rendering a template for @@ -1036,11 +1023,12 @@ sub action_update_row_from_master_data { my ($self) = @_; foreach my $item_id (@{ $::form->{item_ids} }) { - my $idx = first_index { $_ eq $item_id } @{ $::form->{orderitem_ids} }; - my $item = $self->order->items_sorted->[$idx]; + my $idx = first_index { $_ eq $item_id } @{ $::form->{orderitem_ids} }; + my $item = $self->order->items_sorted->[$idx]; + my $texts = get_part_texts($item->part, $self->order->language_id); - $item->description($item->part->description); - $item->longdescription($item->part->notes); + $item->description($texts->{description}); + $item->longdescription($texts->{longdescription}); my $price_source = SL::PriceSource->new(record_item => $item, record => $self->order); @@ -1459,9 +1447,13 @@ sub make_item { $item ||= SL::DB::OrderItem->new(custom_variables => []); $item->assign_attributes(%$attr); - $item->longdescription($item->part->notes) if $is_new && !defined $attr->{longdescription}; - $item->project_id($record->globalproject_id) if $is_new && !defined $attr->{project_id}; - $item->lastcost($record->is_sales ? $item->part->lastcost : 0) if $is_new && !defined $attr->{lastcost_as_number}; + + if ($is_new) { + my $texts = get_part_texts($item->part, $record->language_id); + $item->longdescription($texts->{longdescription}) if !defined $attr->{longdescription}; + $item->project_id($record->globalproject_id) if !defined $attr->{project_id}; + $item->lastcost($record->is_sales ? $item->part->lastcost : 0) if !defined $attr->{lastcost_as_number}; + } return $item; } @@ -1533,7 +1525,9 @@ sub new_item { # saved. Adding empty custom_variables to new orderitem here solves this problem. $new_attr{custom_variables} = []; - $item->assign_attributes(%new_attr); + my $texts = get_part_texts($part, $record->language_id, description => $new_attr{description}, longdescription => $new_attr{longdescription}); + + $item->assign_attributes(%new_attr, %{ $texts }); return $item; } @@ -1734,11 +1728,10 @@ sub workflow_sales_or_purchase_order { $self->get_unalterable_data(); $self->pre_render(); - # trigger rendering values for second row/longdescription as hidden, - # because they are loaded only on demand. So we need to keep the values - # from the source. - $_->{render_second_row} = 1 for @{ $self->order->items_sorted }; - $_->{render_longdescription} = 1 for @{ $self->order->items_sorted }; + # trigger rendering values for second row as hidden, because they + # are loaded only on demand. So we need to keep the values from the + # source. + $_->{render_second_row} = 1 for @{ $self->order->items_sorted }; $self->render( 'order/form', @@ -1927,6 +1920,7 @@ sub generate_pdf { $print_form->{format} = $params->{format} || 'pdf'; $print_form->{media} = $params->{media} || 'file'; $print_form->{groupitems} = $params->{groupitems}; + $print_form->{printer_id} = $params->{printer_id}; $print_form->{media} = 'file' if $print_form->{media} eq 'screen'; $order->language($params->{language}); @@ -1945,7 +1939,7 @@ sub generate_pdf { extension => $template_ext, email => $print_form->{media} eq 'email', language => $params->{language}, - printer_id => $print_form->{printer_id}, # todo + printer_id => $print_form->{printer_id}, ); if (!defined $template_file) { @@ -2069,6 +2063,30 @@ sub get_item_cvpartnumber { } } +sub get_part_texts { + my ($part_or_id, $language_or_id, %defaults) = @_; + + my $part = ref($part_or_id) ? $part_or_id : SL::DB::Part->load_cached($part_or_id); + my $language_id = ref($language_or_id) ? $language_or_id->id : $language_or_id; + my $texts = { + description => $defaults{description} // $part->description, + longdescription => $defaults{longdescription} // $part->notes, + }; + + return $texts unless $language_id; + + my $translation = SL::DB::Manager::Translation->get_first( + where => [ + parts_id => $part->id, + language_id => $language_id, + ]); + + $texts->{description} = $translation->translation if $translation && $translation->translation; + $texts->{longdescription} = $translation->longdescription if $translation && $translation->longdescription; + + return $texts; +} + sub sales_order_type { 'sales_order'; } @@ -2224,8 +2242,6 @@ java script functions =item * check for direct delivery (workflow sales order -> purchase order) -=item * language / part translations - =item * access rights =item * display weights @@ -2289,10 +2305,6 @@ How to expand/collapse second row. Now it can be done clicking the icon or =item * -Possibility to change longdescription in input row? - -=item * - Possibility to select PriceSources in input row? =item *