Revision dfdfb88c
Von Tamino Steinert vor 6 Monaten hinzugefügt
- ID dfdfb88c555d5b4f0be25b551e4bc2aa709b111b
- Vorgänger 6aa91d87
| SL/Controller/EmailJournal.pm | ||
|---|---|---|
|
|
||
|
use parent qw(SL::Controller::Base);
|
||
|
|
||
|
use SL::ReportGenerator;
|
||
|
use SL::Controller::Helper::ReportGenerator;
|
||
|
use SL::ZUGFeRD;
|
||
|
use SL::Controller::ZUGFeRD;
|
||
|
use SL::Controller::Helper::GetModels;
|
||
| ... | ... | |
|
use SL::DB::EmailJournal;
|
||
|
use SL::DB::EmailJournalAttachment;
|
||
|
use SL::Presenter::EmailJournal;
|
||
|
use SL::Presenter::Filter::EmailJournal;
|
||
|
use SL::Presenter::Record qw(grouped_record_list);
|
||
|
use SL::Presenter::Tag qw(html_tag div_tag button_tag);
|
||
|
use SL::Helper::Flash;
|
||
| ... | ... | |
|
my ($self) = @_;
|
||
|
|
||
|
$::auth->assert('email_journal');
|
||
|
# default filter
|
||
|
$::form->{filter} ||= {"obsolete:eq_ignore_empty" => 0};
|
||
|
|
||
|
if ( $::instance_conf->get_email_journal == 0 ) {
|
||
|
flash('info', $::locale->text('Storing the emails in the journal is currently disabled in the client configuration.'));
|
||
|
flash('info', t8('Storing the emails in the journal is currently disabled in the client configuration.'));
|
||
|
}
|
||
|
|
||
|
$::form->{filter} ||= {
|
||
|
'obsolete:eq_ignore_empty' => 0,
|
||
|
};
|
||
|
|
||
|
$self->setup_list_action_bar;
|
||
|
my @record_types_with_info = $self->get_record_types_with_info();
|
||
|
my %record_types_to_text = $self->get_record_types_to_text();
|
||
|
$self->render('email_journal/list',
|
||
|
title => $::locale->text('Email journal'),
|
||
|
ENTRIES => $self->models->get,
|
||
|
MODELS => $self->models,
|
||
|
RECORD_TYPES_WITH_INFO => \@record_types_with_info,
|
||
|
RECORD_TYPES_TO_TEXT => \%record_types_to_text,
|
||
|
);
|
||
|
my $report = $self->prepare_report;
|
||
|
$self->report_generator_list_objects(
|
||
|
report => $report,
|
||
|
objects => $self->models->get,
|
||
|
);
|
||
|
}
|
||
|
|
||
|
sub action_show {
|
||
| ... | ... | |
|
return $customer_vendor;
|
||
|
}
|
||
|
|
||
|
sub prepare_report {
|
||
|
my ($self) = @_;
|
||
|
|
||
|
my %record_types_to_text = $self->get_record_types_to_text();
|
||
|
my @record_types_with_info = $self->get_record_types_with_info();
|
||
|
|
||
|
my $report = SL::ReportGenerator->new(\%::myconfig, $::form);
|
||
|
|
||
|
my $callback = $self->models->get_callback;
|
||
|
|
||
|
my @columns_order = qw(
|
||
|
id
|
||
|
sender
|
||
|
from
|
||
|
recipients
|
||
|
subject
|
||
|
sent_on
|
||
|
attachment_names
|
||
|
has_unprocessed_attachments
|
||
|
unprocessed_attachment_names
|
||
|
status
|
||
|
extended_status
|
||
|
record_type
|
||
|
linked_to
|
||
|
obsolete
|
||
|
);
|
||
|
|
||
|
my @default_columns = qw(
|
||
|
from
|
||
|
recipients
|
||
|
subject
|
||
|
sent_on
|
||
|
);
|
||
|
|
||
|
my %column_defs = (
|
||
|
id => {
|
||
|
obj_link => sub {$self->url_for(
|
||
|
action => 'show', id => $_[0]->id, callback => $callback
|
||
|
)},
|
||
|
sub => sub { $_[0]->id },
|
||
|
},
|
||
|
sender => {
|
||
|
sub => sub { $_[0]->sender ? $_[0]->sender->name : '' },
|
||
|
},
|
||
|
from => {
|
||
|
obj_link => sub {$self->url_for(
|
||
|
action => 'show', id => $_[0]->id, callback => $callback
|
||
|
)},
|
||
|
sub => sub { $_[0]->from },
|
||
|
},
|
||
|
recipients => {
|
||
|
obj_link => sub {$self->url_for(
|
||
|
action => 'show', id => $_[0]->id, callback => $callback
|
||
|
)},
|
||
|
sub => sub { $_[0]->recipients },
|
||
|
},
|
||
|
subject => {
|
||
|
obj_link => sub {$self->url_for(
|
||
|
action => 'show', id => $_[0]->id, callback => $callback
|
||
|
)},
|
||
|
sub => sub { $_[0]->subject },
|
||
|
},
|
||
|
sent_on => {
|
||
|
obj_link => sub {$self->url_for(
|
||
|
action => 'show', id => $_[0]->id, callback => $callback
|
||
|
)},
|
||
|
sub => sub { $_[0]->sent_on->to_kivitendo(precision => 'minute') },
|
||
|
},
|
||
|
attachment_names => {
|
||
|
sub => sub {join(', ',
|
||
|
map {$_->name}
|
||
|
sort {$a->position <=> $b->position}
|
||
|
@{$_[0]->attachments}
|
||
|
)},
|
||
|
},
|
||
|
has_unprocessed_attachments => {
|
||
|
sub => sub { $_[0]->has_unprocessed_attachments }
|
||
|
},
|
||
|
unprocessed_attachment_names => {
|
||
|
sub => sub {join(', ',
|
||
|
map {$_->name}
|
||
|
sort {$a->position <=> $b->position}
|
||
|
grep {$_->processed == 0}
|
||
|
@{$_[0]->attachments}
|
||
|
)},
|
||
|
},
|
||
|
status => {
|
||
|
sub => sub { SL::Presenter::EmailJournal::entry_status($_[0]) },
|
||
|
},
|
||
|
extended_status => {
|
||
|
sub => sub { $_[0]->extended_status },
|
||
|
},
|
||
|
record_type => {
|
||
|
sub => sub { $record_types_to_text{$_[0]->record_type} },
|
||
|
},
|
||
|
linked_to => {
|
||
|
raw_data => sub {
|
||
|
SL::Presenter::Record::simple_grouped_record_list($_[0]->linked_records)
|
||
|
}
|
||
|
},
|
||
|
obsolete => {
|
||
|
sub => sub { $_[0]->obsolete_as_bool_yn }
|
||
|
},
|
||
|
);
|
||
|
$column_defs{$_}->{text} ||=
|
||
|
t8( $self->models->get_sort_spec->{$_}->{title} || $_ )
|
||
|
for keys %column_defs;
|
||
|
|
||
|
# make all sortable
|
||
|
my @sortable = keys %column_defs;
|
||
|
|
||
|
unless ($::form->{active_in_report}) {
|
||
|
$::form->{active_in_report}->{$_} = 1 foreach @default_columns;
|
||
|
}
|
||
|
|
||
|
$column_defs{$_}->{visible} = $::form->{active_in_report}->{"$_"} || 0
|
||
|
foreach keys %column_defs;
|
||
|
|
||
|
my $filter_html = SL::Presenter::Filter::EmailJournal::filter(
|
||
|
$::form->{filter},
|
||
|
active_in_report => $::form->{active_in_report},
|
||
|
record_types_with_info => \@record_types_with_info,
|
||
|
);
|
||
|
|
||
|
$self->models->disable_plugin('paginated')
|
||
|
if $report->{options}{output_format} =~ /^(pdf|csv)$/i;
|
||
|
$self->models->add_additional_url_params(
|
||
|
active_in_report => $::form->{active_in_report}
|
||
|
);
|
||
|
$self->models->finalize; # for filter laundering
|
||
|
|
||
|
$report->set_options(
|
||
|
std_column_visibility => 1,
|
||
|
controller_class => 'EmailJournal',
|
||
|
output_format => 'HTML',
|
||
|
raw_top_info_text => $self->render(
|
||
|
'email_journal/_report_top',
|
||
|
{ output => 0 },
|
||
|
FILTER_HTML => $filter_html,
|
||
|
),
|
||
|
raw_bottom_info_text => $self->render(
|
||
|
'email_journal/_report_bottom',
|
||
|
{ output => 0 },
|
||
|
models => $self->models
|
||
|
),
|
||
|
title => t8('Email journal'),
|
||
|
allow_pdf_export => 1,
|
||
|
allow_csv_export => 1,
|
||
|
);
|
||
|
$report->set_columns(%column_defs);
|
||
|
$report->set_column_order(@columns_order);
|
||
|
$report->set_export_options('list', qw(filter active_in_report));
|
||
|
$report->set_options_from_form;
|
||
|
|
||
|
$self->models->set_report_generator_sort_options(
|
||
|
report => $report,
|
||
|
sortable_columns => \@sortable
|
||
|
);
|
||
|
|
||
|
return $report;
|
||
|
}
|
||
|
|
||
|
sub add_js {
|
||
|
$::request->{layout}->use_javascript("${_}.js") for qw(
|
||
|
kivi.EmailJournal
|
||
| ... | ... | |
|
query => \@where,
|
||
|
with_objects => [ 'sender' ],
|
||
|
sorted => {
|
||
|
_default => {
|
||
|
by => 'sent_on',
|
||
|
dir => 0,
|
||
|
},
|
||
|
sender => t8('Sender'),
|
||
|
from => t8('From'),
|
||
|
recipients => t8('Recipients'),
|
||
|
subject => t8('Subject'),
|
||
|
attachments => t8('Attachments'),
|
||
|
attachment_names => t8('Attachments'),
|
||
|
has_unprocessed_attachments => t8('Has unprocessed attachments'),
|
||
|
unprocessed_attachment_names => t8('Unprocessed Attachments'),
|
||
|
sent_on => t8('Sent on'),
|
||
|
status => t8('Status'),
|
||
|
extended_status => t8('Extended status'),
|
||
|
record_type => t8('Record Type'),
|
||
|
obsolete => t8('Obsolete'),
|
||
|
linked_to => t8('Linked to'),
|
||
|
has_unprocessed_attachments => t8('Has unprocessed attachments'),
|
||
|
},
|
||
|
);
|
||
|
}
|
||
Auch abrufbar als: Unified diff
EmailJournal: Komplexer Bericht mit komplexen Filter