X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FLetter.pm;h=4da3e1918dfac81e6020a27ea78c63b0e8503bb8;hb=a27846ef2756ed0f59c29d256a5d43d6caaf0b58;hp=cfc1f6867176bca26cb973e0cae59ec499d7dcae;hpb=359506e56c71e419ac82c2adf0de22cfd6d59cfa;p=kivitendo-erp.git diff --git a/SL/Controller/Letter.pm b/SL/Controller/Letter.pm index cfc1f6867..4da3e1918 100644 --- a/SL/Controller/Letter.pm +++ b/SL/Controller/Letter.pm @@ -14,12 +14,14 @@ use SL::DB::Language; use SL::DB::Letter; use SL::DB::LetterDraft; use SL::DB::Printer; +use SL::File; use SL::Helper::Flash qw(flash flash_later); use SL::Helper::CreatePDF; use SL::Helper::PrintOptions; use SL::Locale::String qw(t8); use SL::Mailer; use SL::IS; +use SL::Presenter::Tag qw(select_tag); use SL::ReportGenerator; use SL::Webdav; use SL::Webdav::File; @@ -105,7 +107,7 @@ sub action_update_contacts { return $self->js ->replaceWith( '#letter_cp_id', - SL::Presenter->get->select_tag('letter.cp_id', [], value_key => 'cp_id', title_key => 'full_name') + select_tag('letter.cp_id', [], value_key => 'cp_id', title_key => 'full_name') ) ->render; } @@ -124,7 +126,7 @@ sub action_update_contacts { $self->js ->replaceWith( '#letter_cp_id', - SL::Presenter->get->select_tag('letter.cp_id', $contacts, default => $default, value_key => 'cp_id', title_key => 'full_name') + select_tag('letter.cp_id', $contacts, default => $default, value_key => 'cp_id', title_key => 'full_name') ) ->render; } @@ -150,7 +152,7 @@ sub action_delete { my ($self, %params) = @_; if (!$self->letter->delete) { - flash('error', t8('An error occured. Letter could not be deleted.')); + flash('error', t8('An error occurred. Letter could not be deleted.')); return $self->action_update; } @@ -171,6 +173,7 @@ sub action_delete_letter_drafts { sub action_list { my ($self, %params) = @_; + $self->setup_list_action_bar; $self->make_filter_summary; $self->prepare_report; @@ -182,8 +185,7 @@ sub action_list { sub action_print_letter { my ($self, %params) = @_; - my $display_form = $::form->{display_form} || "display_form"; - my $letter = $self->_update; + my $letter = $self->_update; my ($template_file, @template_files) = SL::Helper::CreatePDF->find_template( name => 'letter', @@ -206,7 +208,7 @@ sub action_print_letter { letter => $letter, template_meta => { formname => 'letter', - language => SL::DB::Language->new, + language => SL::DB::Manager::Language->find_by_or_create(id => $::form->{language_id}*1), extension => 'pdf', format => $::form->{format}, media => $::form->{media}, @@ -234,17 +236,28 @@ sub action_print_letter { $webdav_file->store(file => $result{file_name}); } + if ($::instance_conf->get_doc_storage) { + my %save_params = (object_id => $letter->id, + object_type => 'letter', + mime_type => 'application/pdf', + source => 'created', + file_type => 'document', + file_name => $attachment_name, + file_path => $result{file_name}); + SL::File->save(%save_params); + } + # set some form defaults for printing webdav copy variables if ( $::form->{media} eq 'email') { my $mail = Mailer->new; my $signature = $::myconfig{signature}; $mail->{$_} = $params{email}->{$_} for qw(to cc subject message bcc); $mail->{from} = qq|"$::myconfig{name}" <$::myconfig{email}>|; - $mail->{attachments} = [{ filename => $result{file_name}, - name => $params{email}->{attachment_filename} }]; + $mail->{attachments} = [{ path => $result{file_name}, + name => $params{email}->{attachment_filename} }]; $mail->{message} .= "\n-- \n$signature"; $mail->{message} =~ s/\r//g; - + $mail->{record_id} = $letter->id; $mail->send; unlink $result{file_name}; @@ -300,47 +313,11 @@ sub action_delete_drafts { $self->action_add(skip_drafts => 1); } -sub action_edit_email { - my ($self) = @_; - - my $letter = $self->_update; - $self->export_letter_to_form($letter); - - $::form->{formname} = "letter"; - $::form->{type} = "letter"; - $::form->{letternumber} = $self->letter->letternumber; - - my @hiddens = map { - my $value = $letter->$_; - $value = $value->to_kivitendo if ref($_) =~ m{Date}; - - { name => "letter.$_", value => $value } - } ($letter->meta->columns); - - my %vars = ( - script => 'controller.pl', - title => t8('Send letter via e-mail'), - email => $letter->contact ? $letter->contact->cp_email : '', - subject => $::form->generate_email_subject, - a_filename => $::form->generate_attachment_filename, - action => 'Letter/send_email', - HIDDEN => \@hiddens, - SHOW_BCC => $::auth->assert('email_bcc', 'may fail'), - ); - - $self->render('generic/edit_email', %vars); -} - sub action_send_email { my ($self) = @_; $::form->{media} = 'email'; - $self->action_print_letter( - email => { - to => $::form->{email}, - map { ($_ => $::form->{$_}) } qw(cc bcc subject attachment_filename message) - } - ); + $self->action_print_letter(email => $::form->{email_form}); } ### internal methods @@ -348,7 +325,7 @@ sub action_send_email { sub _display { my ($self, %params) = @_; - $::request->{layout}->use_javascript("${_}.js") for qw(ckeditor/ckeditor ckeditor/adapters/jquery); + $::request->{layout}->use_javascript("${_}.js") for qw(ckeditor/ckeditor ckeditor/adapters/jquery kivi.Letter kivi.SalesPurchase kivi.File); my $letter = $self->letter; @@ -357,13 +334,11 @@ sub _display { $::form->{type} = 'letter'; # needed for print_options $::form->{vc} = $letter->is_sales ? 'customer' : 'vendor'; # needs to be for _get_contacts... - $::request->layout->add_javascripts('customer_or_vendor_selection.js'); - $::request->layout->add_javascripts('edit_part_window.js'); - $::form->{language_id} ||= $params{language_id}; $::form->{languages} ||= SL::DB::Manager::Language->get_all_sorted; $::form->{printers} = SL::DB::Manager::Printer->get_all_sorted; + $self->setup_display_action_bar; $self->render('letter/edit', %params, TCF => [ map { key => $_, value => t8(ucfirst $_) }, TEXT_CREATED_FOR_VALUES() ], @@ -374,7 +349,9 @@ sub _display { options => { no_postscript => 1, no_opendocument => 1, no_html => 1, - no_queue => 1 }), + no_queue => 1, + show_headers => 1, + }), ); } @@ -416,7 +393,6 @@ sub prepare_report { std_column_visibility => 1, controller_class => 'Letter', output_format => 'HTML', - top_info_text => t8('Letters'), title => t8('Letters'), allow_pdf_export => 1, allow_csv_export => 1, @@ -485,6 +461,7 @@ sub load_letter_draft { return unless @$letter_drafts; + $self->setup_load_letter_draft_action_bar; $self->render('letter/load_drafts', title => t8('Letter Draft'), LETTER_DRAFTS => $letter_drafts, @@ -546,21 +523,6 @@ sub set_greetings { $letter->greeting(t8('Dear Sir or Madam,')); } -sub export_letter_to_form { - my ($self, $letter) = @_; - # nope, not pretty. - - $letter ||= $self->letter; - - for ($letter->meta->columns) { - if ((ref $_) =~ /Date/i) { - $::form->{$_->name} = $letter->$_->to_kivitendo; - } else { - $::form->{$_->name} = $letter->$_; - } - } -} - sub init_letter { my ($self) = @_; @@ -610,7 +572,6 @@ sub init_webdav_objects { number => $self->letter->letternumber, ); - my $webdav_path = $webdav->webdav_path; my @all_objects = $webdav->get_all_objects; return [ map { @@ -627,11 +588,93 @@ sub init_is_sales { } sub check_auth_edit { - $::auth->assert('sales_letter_edit'); + $::form->{is_sales} ? $::auth->assert('sales_letter_edit') + : $::auth->assert('purchase_letter_edit'); } sub check_auth_report { - $::auth->assert('sales_letter_report'); + $::form->{is_sales} ? $::auth->assert('sales_letter_report') + : $::auth->assert('purchase_letter_report'); +} + +sub setup_load_letter_draft_action_bar { + my ($self, %params) = @_; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + link => [ + t8('Skip'), + link => $self->url_for(action => 'skip_draft', is_sales => $self->is_sales), + accesskey => 'enter', + ], + action => [ + t8('Delete'), + submit => [ '#form', { action => 'delete_drafts' } ], + checks => [ [ 'kivi.check_if_entries_selected', '[name="ids[+]"]' ] ], + confirm => t8('Do you really want to delete this draft?'), + ], + ); + } +} + +sub setup_display_action_bar { + my ($self, %params) = @_; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Update'), + submit => [ '#form', { action => 'Letter/update' } ], + accesskey => 'enter', + ], + + combobox => [ + action => [ + t8('Save'), + submit => [ '#form', { action => 'Letter/save' } ], + ], + action => [ + t8('Save Draft'), + submit => [ '#form', { action => 'Letter/save_letter_draft' } ], + ], + ], # end of combobox "Save" + + action => [ + t8('Delete'), + submit => [ '#form', { action => 'Letter/delete' } ], + confirm => t8('Are you sure you want to delete this letter?'), + disabled => !$self->letter->id ? t8('The object has not been saved yet.') : undef, + ], + + combobox => [ + action => [ t8('Export') ], + action => [ + t8('Print'), + call => [ 'kivi.SalesPurchase.show_print_dialog', 'Letter/print_letter' ], + disabled => !$self->letter->id ? t8('The object has not been saved yet.') : undef, + ], + action => [ + t8('E-mail'), + call => [ 'kivi.SalesPurchase.show_email_dialog', 'Letter/send_email' ], + disabled => !$self->letter->id ? t8('The object has not been saved yet.') : undef, + ], + ], + ); + } +} + +sub setup_list_action_bar { + my ($self, %params) = @_; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Update'), + submit => [ '#search_form', { action => 'Letter/list' } ], + accesskey => 'enter', + ], + ); + } } 1;