Brieffunktion: beim Drucken im WebDAV speichern
[kivitendo-erp.git] / SL / Controller / Letter.pm
index 994b3c0..9ca6bc7 100644 (file)
@@ -3,14 +3,18 @@ package SL::Controller::Letter;
 use strict;
 use parent qw(SL::Controller::Base);
 
+use Carp;
+use File::Basename;
 use POSIX qw(strftime);
 use SL::Controller::Helper::GetModels;
 use SL::Controller::Helper::ReportGenerator;
+use SL::CT;
 use SL::DB::Letter;
 use SL::DB::LetterDraft;
 use SL::DB::Employee;
 use SL::Helper::Flash qw(flash);
 use SL::Helper::CreatePDF;
+use SL::Helper::PrintOptions;
 use SL::Locale::String qw(t8);
 use SL::IS;
 use SL::ReportGenerator;
@@ -173,12 +177,14 @@ sub action_print_letter {
 
   $self->export_letter_to_form($letter);
   $::form->{formname} = "letter";
-  $::form->{format} = "pdf";
+  $::form->{type}     = "letter";
+  $::form->{format}   = "pdf";
 
   my $language_saved      = $::form->{language_id};
   my $greeting_saved      = $::form->{greeting};
   my $cp_id_saved         = $::form->{cp_id};
 
+  $::form->{customer_id} = $self->letter->vc_id;
   IS->customer_details(\%::myconfig, $::form);
 
   if (!$cp_id_saved) {
@@ -216,6 +222,9 @@ sub action_print_letter {
     template  => $template_file,
     variables => $::form,
     return    => 'file_name',
+    variable_content_types => {
+      body                 => 'html',
+    },
   );
 
   my $pdf_file_name;
@@ -239,11 +248,20 @@ sub action_print_letter {
       return !$err;
     }
 
+    my $webdav_copy_args   = Form->new('');
+    %{ $webdav_copy_args } = (
+      %{ $::form },
+      tmpdir  => dirname($pdf_file_name),
+      tmpfile => basename($pdf_file_name),
+      cwd     => POSIX::getcwd(),
+    );
+
     if (!$::form->{printer_id} || $::form->{media} eq 'screen') {
 
       my $file = IO::File->new($pdf_file_name, 'r') || croak("Cannot open file '$pdf_file_name'");
       my $size = -s $pdf_file_name;
       my $content_type    =  'application/pdf';
+      $::form->{letternumber} = $self->letter->letternumber;
       my $attachment_name =  $::form->generate_attachment_filename;
       $attachment_name    =~ s:.*//::g;
 
@@ -254,7 +272,7 @@ sub action_print_letter {
       $::locale->with_raw_io(\*STDOUT, sub { print while <$file> });
       $file->close;
 
-      Common::copy_file_to_webdav_folder($::form) if $::instance_conf->get_webdav_documents;
+      Common::copy_file_to_webdav_folder($webdav_copy_args) if $::instance_conf->get_webdav_documents;
       unlink $pdf_file_name;
       return 1;
     }
@@ -266,7 +284,7 @@ sub action_print_letter {
     binmode $out;
     print $out scalar(read_file($pdf_file_name));
     close $out;
-    Common::copy_file_to_webdav_folder($::form) if $::instance_conf->get_webdav_documents;
+    Common::copy_file_to_webdav_folder($webdav_copy_args) if $::instance_conf->get_webdav_documents;
 
     flash_later('info', t8('The documents have been sent to the printer \'#1\'.', $printer->printer_description));
     $self->redirect_to(action => 'edit', id => $letter->{id}, 'printer_id' => $::form->{printer_id});
@@ -300,9 +318,9 @@ sub action_delete_drafts {
 sub _display {
   my ($self, %params) = @_;
 
-  my $letter = $self->letter;
+  $::request->{layout}->use_javascript("${_}.js") for qw(ckeditor/ckeditor ckeditor/adapters/jquery);
 
-  require 'bin/mozilla/io.pl';
+  my $letter = $self->letter;
 
  $params{title} ||= t8('Edit Letter');
 
@@ -320,7 +338,12 @@ sub _display {
     PCF           => [ map { key => $_, value => t8(ucfirst $_) }, PAGE_CREATED_FOR_VALUES() ],
     letter        => $letter,
     employees     => $self->all_employees,
-    print_options => print_options(inline => 1),
+    print_options => SL::Helper::PrintOptions->get_print_options (
+      options => { no_postscript   => 1,
+                   no_opendocument => 1,
+                   no_html         => 1,
+                   no_queue        => 1 }),
+
   );
 }
 
@@ -350,7 +373,7 @@ sub prepare_report {
                                obj_link => sub { $self->url_for(action => 'edit', 'letter.id' => $_[0]->id, callback => $self->models->get_callback) }  },
     letternumber          => { text => t8('Letternumber'), sub => sub { $_[0]->letternumber },
                                obj_link => sub { $self->url_for(action => 'edit', 'letter.id' => $_[0]->id, callback => $self->models->get_callback) }  },
-    vc_id                 => { text => t8('Customer'),      sub => sub { $_[0]->customer->displayable_name } },
+    vc_id                 => { text => t8('Customer'),      sub => sub { SL::DB::Manager::Customer->find_by_or_create(id => $_[0]->vc_id)->displayable_name } },
     contact               => { text => t8('Contact'),       sub => sub { $_[0]->contact ? $_[0]->contact->full_name : '' } },
   );
 
@@ -538,13 +561,7 @@ sub init_models {
   SL::Controller::Helper::GetModels->new(
     controller   => $self,
     model        => 'Letter',
-    sorted       => {
-      _default     => {
-        by           => 'letternumber',
-        dir          => 1,
-      },
-      %sort_columns,
-    },
+    sorted       => \%sort_columns,
     with_objects => [ 'contact', 'salesman', 'employee' ],
   );
 }