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;
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;
}
$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;
}
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;
}
sub action_list {
my ($self, %params) = @_;
+ $self->setup_list_action_bar;
$self->make_filter_summary;
$self->prepare_report;
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',
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},
$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};
$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
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;
$::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() ],
options => { no_postscript => 1,
no_opendocument => 1,
no_html => 1,
- no_queue => 1 }),
+ no_queue => 1,
+ show_headers => 1,
+ }),
);
}
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,
return unless @$letter_drafts;
+ $self->setup_load_letter_draft_action_bar;
$self->render('letter/load_drafts',
title => t8('Letter Draft'),
LETTER_DRAFTS => $letter_drafts,
$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) = @_;
number => $self->letter->letternumber,
);
- my $webdav_path = $webdav->webdav_path;
my @all_objects = $webdav->get_all_objects;
return [ map {
}
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) = @_;
+
+ my $vc = $self->is_sales ? 'customer' : 'vendor'; # needed for show_email_dialog
+
+ 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', $vc, '#letter_' . $vc . '_id' ],
+ 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;