+sub action_create_pdf {
+ my ($self) = @_;
+
+ my $pdf;
+ my @errors = _create_pdf($self->order, \$pdf);
+ if (scalar @errors) {
+ return $self->js->flash('error', t8('Conversion to PDF failed: #1', $errors[0]))->render($self);
+ }
+
+ 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::create_pdf-${key}" => $sfile->file_name);
+
+ my $form = Form->new;
+ $form->{ordnumber} = $self->order->ordnumber;
+ $form->{formname} = $self->type;
+ $form->{type} = $self->type;
+ $form->{language} = 'de';
+ $form->{format} = 'pdf';
+
+ my $pdf_filename = $form->generate_attachment_filename();
+
+ # copy file to webdav folder
+ if ($self->order->ordnumber && $::instance_conf->get_webdav_documents) {
+ my $webdav = SL::Webdav->new(
+ type => $self->type,
+ number => $self->order->ordnumber,
+ );
+ my $webdav_file = SL::Webdav::File->new(
+ webdav => $webdav,
+ filename => $pdf_filename,
+ );
+ eval {
+ $webdav_file->store(data => \$pdf);
+ 1;
+ } or do {
+ $self->js->flash('error', t8('Storing PDF to webdav folder failed: #1', $@));
+ }
+ }
+
+ $self->js
+ ->run('download_pdf', $pdf_filename, $key)
+ ->flash('info', t8('The PDF has been created'))->render($self);
+}
+
+sub action_download_pdf {
+ my ($self) = @_;
+
+ my $key = $::form->{key};
+ my $tmp_filename = $::auth->get_session_value("Order::create_pdf-${key}");
+ return $self->send_file(
+ $tmp_filename,
+ type => 'application/pdf',
+ name => $::form->{pdf_filename},
+ );
+}
+
+sub action_show_email_dialog {
+ my ($self) = @_;
+
+ my $cv_method = $self->cv;
+
+ if (!$self->order->$cv_method) {
+ return $self->js->flash('error', t8('Cannot send E-mail without ' . $self->cv))
+ ->render($self);
+ }
+
+ $self->{email}->{to} = $self->order->contact->cp_email if $self->order->contact;
+ $self->{email}->{to} ||= $self->order->$cv_method->email;
+ $self->{email}->{cc} = $self->order->$cv_method->cc;
+ $self->{email}->{bcc} = join ', ', grep $_, $self->order->$cv_method->bcc, SL::DB::Default->get->global_bcc;
+ # Todo: get addresses from shipto, if any
+
+ my $form = Form->new;
+ $form->{ordnumber} = $self->order->ordnumber;
+ $form->{formname} = $self->type;
+ $form->{type} = $self->type;
+ $form->{language} = 'de';
+ $form->{format} = 'pdf';
+
+ $self->{email}->{subject} = $form->generate_email_subject();
+ $self->{email}->{attachment_filename} = $form->generate_attachment_filename();
+ $self->{email}->{message} = $form->create_email_signature();
+
+ my $dialog_html = $self->render('order/tabs/_email_dialog', { output => 0 });
+ $self->js
+ ->run('show_email_dialog', $dialog_html)
+ ->reinit_widgets
+ ->render($self);
+}
+
+# Todo: handling error messages: flash is not displayed in dialog, but in the main form
+sub action_send_email {