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;
}
$self->prepare_report;
my $letters = $self->models->get;
- $self->report_generator_list_objects(report => $self->{report}, objects => $letters, action_bar => 1);
+ $self->report_generator_list_objects(report => $self->{report}, objects => $letters);
}
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,
- HIDDEN => \@hiddens,
- SHOW_BCC => $::auth->assert('email_bcc', 'may fail'),
- );
-
- $::request->layout->use_javascript("kivi.SalesPurchase.js");
- $self->setup_edit_email_action_bar;
- $self->render('letter/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 kivi.Letter);
+ $::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;
options => { no_postscript => 1,
no_opendocument => 1,
no_html => 1,
- no_queue => 1 }),
+ no_queue => 1,
+ show_headers => 1,
+ }),
);
}
$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 {
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 => [
action => [ t8('Export') ],
action => [
t8('Print'),
- submit => [ '#form', { action => 'Letter/print_letter' } ],
+ 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'),
- submit => [ '#form', { action => 'Letter/edit_email' } ],
+ 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_edit_email_action_bar {
- my ($self, %params) = @_;
-
- for my $bar ($::request->layout->get('actionbar')) {
- $bar->add(
- action => [
- t8('Continue'),
- submit => [ '#form', { action => 'Letter/send_email' } ],
- checks => [ 'kivi.SalesPurchase.check_required_email_fields' ],
- accesskey => 'enter',
- ],
- );
- }
-}
-
sub setup_list_action_bar {
my ($self, %params) = @_;
for my $bar ($::request->layout->get('actionbar')) {
$bar->add(
action => [
- t8('Search'),
- submit => [ '#form', { action => 'Letter/list' } ],
- checks => [ 'kivi.SalesPurchase.check_required_email_fields' ],
+ t8('Update'),
+ submit => [ '#search_form', { action => 'Letter/list' } ],
accesskey => 'enter',
],
- action => [
- t8('Reset'),
- call => [ 'kivi.call_jquery', '#form', 'resetForm' ],
- ],
);
}
}