X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FOrder.pm;h=29ff0ac49e7f7d52a1383f27d8e81a751a7274a1;hb=982ea31671dc3073ee90ebf57f92578d95b70201;hp=bef36317eb30496680b4de5c39d9e54866d43bd6;hpb=17c2f7bdbd65623ae67d66b770dbf0cc14ad8770;p=kivitendo-erp.git diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index bef36317e..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)) { @@ -273,22 +274,20 @@ sub action_print { return $self->js->flash('error', t8('Media \'#1\' is not supported yet/anymore.', $media))->render; } - my $language; - $language = SL::DB::Language->new(id => $::form->{print_options}->{language_id})->load if $::form->{print_options}->{language_id}; - # create a form for generate_attachment_filename my $form = Form->new; $form->{$self->nr_key()} = $self->order->number; $form->{type} = $self->type; $form->{format} = $format; $form->{formname} = $formname; - $form->{language} = '_' . $language->template_code if $language; + $form->{language} = '_' . $self->order->language->template_code if $self->order->language; my $pdf_filename = $form->generate_attachment_filename(); my $pdf; my @errors = generate_pdf($self->order, \$pdf, { format => $format, formname => $formname, - language => $language, + 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; @@ -431,14 +430,12 @@ sub action_send_email { $::form->{media} = 'email'; if (($::form->{attachment_policy} // '') !~ m{^(?:old_file|no_file)$}) { - my $language; - $language = SL::DB::Language->new(id => $::form->{print_options}->{language_id})->load if $::form->{print_options}->{language_id}; - my $pdf; my @errors = generate_pdf($self->order, \$pdf, {media => $::form->{media}, format => $::form->{print_options}->{format}, formname => $::form->{print_options}->{formname}, - language => $language, + 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); @@ -708,7 +705,7 @@ sub action_customer_vendor_changed { ->val( '#order_payment_id', $self->order->payment_id) ->val( '#order_delivery_term_id', $self->order->delivery_term_id) ->val( '#order_intnotes', $self->order->intnotes) - ->val( '#language_id', $self->order->$cv_method->language_id) + ->val( '#order_language_id', $self->order->$cv_method->language_id) ->focus( '#order_' . $self->cv . '_id') ->run('kivi.Order.update_exchangerate'); @@ -1000,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 @@ -1042,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); @@ -1465,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; } @@ -1539,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; } @@ -1740,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', @@ -1760,6 +1747,7 @@ sub pre_render { $self->{all_taxzones} = SL::DB::Manager::TaxZone->get_all_sorted(); $self->{all_currencies} = SL::DB::Manager::Currency->get_all_sorted(); $self->{all_departments} = SL::DB::Manager::Department->get_all_sorted(); + $self->{all_languages} = SL::DB::Manager::Language->get_all_sorted(); $self->{all_employees} = SL::DB::Manager::Employee->get_all(where => [ or => [ id => $self->order->employee_id, deleted => 0 ] ], sort_by => 'name'); @@ -1777,8 +1765,6 @@ sub pre_render { my $print_form = Form->new(''); $print_form->{type} = $self->type; $print_form->{printers} = SL::DB::Manager::Printer->get_all_sorted; - $print_form->{languages} = SL::DB::Manager::Language->get_all_sorted; - $print_form->{language_id} = $self->order->language_id; $self->{print_options} = SL::Helper::PrintOptions->get_print_options( form => $print_form, options => {dialog_name_prefix => 'print_options.', @@ -1815,7 +1801,7 @@ sub pre_render { $self->get_item_cvpartnumber($_) for @{$self->order->items_sorted}; $::request->{layout}->use_javascript("${_}.js") for qw(kivi.SalesPurchase kivi.Order kivi.File ckeditor/ckeditor ckeditor/adapters/jquery - edit_periodic_invoices_config calculate_qty kivi.Validator); + edit_periodic_invoices_config calculate_qty kivi.Validator follow_up); $self->setup_edit_action_bar; } @@ -1907,6 +1893,18 @@ sub setup_edit_action_bar { disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, only_if => $deletion_allowed, ], + + combobox => [ + action => [ + t8('more') + ], + action => [ + t8('Follow-Up'), + call => [ 'kivi.Order.follow_up_window' ], + disabled => !$self->order->id ? t8('This object has not been saved yet.') : undef, + only_if => $::auth->assert('productivity', 1), + ], + ], # end of combobox "more" ); } } @@ -1922,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}); @@ -1940,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) { @@ -2064,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'; } @@ -2219,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 @@ -2284,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 *