# print the order
#
# This is called if "print" is pressed in the print dialog.
-# If PDF creation was requested and succeeded, the pdf is stored in a session
-# file and the filename is stored as session value with an unique key. A
-# javascript function with this key is then called. This function calls the
-# download action below (action_download_pdf), which offers the file for
-# download.
+# If PDF creation was requested and succeeded, the pdf is offered for download
+# via send_file (which uses ajax in this case).
sub action_print {
my ($self) = @_;
if ($media eq 'screen') {
# screen/download
- my $sfile = SL::SessionFile::Random->new(mode => "w");
- $sfile->fh->print($pdf);
- $sfile->fh->close;
-
- my $key = join('_', Time::HiRes::gettimeofday(), int rand 1000000000000);
- $::auth->set_session_value("Order::print-${key}" => $sfile->file_name);
-
- $self->js
- ->run('kivi.Order.download_pdf', $pdf_filename, $key)
- ->flash('info', t8('The PDF has been created'));
+ $self->js->flash('info', t8('The PDF has been created'));
+ $self->send_file(
+ \$pdf,
+ type => SL::MIME->mime_type_from_ext($pdf_filename),
+ name => $pdf_filename,
+ js_no_render => 1,
+ );
} elsif ($media eq 'printer') {
# printer
$self->js->render;
}
-# offer pdf for download
-#
-# It needs to get the key for the session value to get the pdf file.
-sub action_download_pdf {
- my ($self) = @_;
-
- my $key = $::form->{key};
- my $tmp_filename = $::auth->get_session_value("Order::print-${key}");
- return $self->send_file(
- $tmp_filename,
- type => SL::MIME->mime_type_from_ext($::form->{pdf_filename}),
- name => $::form->{pdf_filename},
- );
-}
-
# open the email dialog
sub action_show_email_dialog {
my ($self) = @_;
$self->js
->run('kivi.Order.update_sellprice', $item_id, $item->sellprice_as_number)
- ->val('.row_entry:has(#item_' . $item_id . ') [name = "order.orderitems[].description"]', $item->description)
- ->val('.row_entry:has(#item_' . $item_id . ') [name = "order.orderitems[].longdescription"]', $item->longdescription);
+ ->html('.row_entry:has(#item_' . $item_id . ') [name = "partnumber"] a', $item->part->partnumber)
+ ->val ('.row_entry:has(#item_' . $item_id . ') [name = "order.orderitems[].description"]', $item->description)
+ ->val ('.row_entry:has(#item_' . $item_id . ') [name = "order.orderitems[].longdescription"]', $item->longdescription);
+
+ if ($self->search_cvpartnumber) {
+ $self->get_item_cvpartnumber($item);
+ $self->js->html('.row_entry:has(#item_' . $item_id . ') [name = "cvpartnumber"]', $item->{cvpartnumber});
+ }
}
$self->recalc();
$self->{positions_scrollbar_height} = SL::Helper::UserPreferences::PositionsScrollbar->new()->get_height();
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;
- $self->{print_options} = SL::Helper::PrintOptions->get_print_options(
+ $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.',
show_headers => 1,
sub get_item_cvpartnumber {
my ($self, $item) = @_;
+ return if !$self->search_cvpartnumber;
+ return if !$self->order->customervendor;
+
if ($self->cv eq 'vendor') {
my @mms = grep { $_->make eq $self->order->customervendor->id } @{$item->part->makemodels};
$item->{cvpartnumber} = $mms[0]->model if scalar @mms;
C<show_multi_items_dialog> does not use the currently inserted string for
filtering.
-=item *
-
-The language selected in print or email dialog is not saved when the order is saved.
-
=back
=head1 To discuss / Nice to have