Revision e6af833d
Von Tamino Steinert vor 12 Tagen hinzugefügt
- ID e6af833dc4ff65761a67a176c6ebfc04132bdaa6
- Vorgänger efc07572
SL/Controller/EmailJournal.pm | ||
---|---|---|
4 | 4 |
|
5 | 5 |
use parent qw(SL::Controller::Base); |
6 | 6 |
|
7 |
use SL::ReportGenerator; |
|
8 |
use SL::Controller::Helper::ReportGenerator; |
|
7 | 9 |
use SL::ZUGFeRD; |
8 | 10 |
use SL::Controller::ZUGFeRD; |
9 | 11 |
use SL::Controller::Helper::GetModels; |
... | ... | |
11 | 13 |
use SL::DB::EmailJournal; |
12 | 14 |
use SL::DB::EmailJournalAttachment; |
13 | 15 |
use SL::Presenter::EmailJournal; |
16 |
use SL::Presenter::Filter::EmailJournal; |
|
14 | 17 |
use SL::Presenter::Record qw(grouped_record_list); |
15 | 18 |
use SL::Presenter::Tag qw(html_tag div_tag button_tag); |
16 | 19 |
use SL::Helper::Flash; |
... | ... | |
222 | 225 |
my ($self) = @_; |
223 | 226 |
|
224 | 227 |
$::auth->assert('email_journal'); |
225 |
# default filter |
|
226 |
$::form->{filter} ||= {"obsolete:eq_ignore_empty" => 0}; |
|
227 | 228 |
|
228 | 229 |
if ( $::instance_conf->get_email_journal == 0 ) { |
229 |
flash('info', $::locale->text('Storing the emails in the journal is currently disabled in the client configuration.'));
|
|
230 |
flash('info', t8('Storing the emails in the journal is currently disabled in the client configuration.'));
|
|
230 | 231 |
} |
232 |
|
|
233 |
$::form->{filter} ||= { |
|
234 |
'obsolete:eq_ignore_empty' => 0, |
|
235 |
}; |
|
236 |
|
|
231 | 237 |
$self->setup_list_action_bar; |
232 |
my @record_types_with_info = $self->get_record_types_with_info(); |
|
233 |
my %record_types_to_text = $self->get_record_types_to_text(); |
|
234 |
$self->render('email_journal/list', |
|
235 |
title => $::locale->text('Email journal'), |
|
236 |
ENTRIES => $self->models->get, |
|
237 |
MODELS => $self->models, |
|
238 |
RECORD_TYPES_WITH_INFO => \@record_types_with_info, |
|
239 |
RECORD_TYPES_TO_TEXT => \%record_types_to_text, |
|
240 |
); |
|
238 |
my $report = $self->prepare_report; |
|
239 |
$self->report_generator_list_objects( |
|
240 |
report => $report, |
|
241 |
objects => $self->models->get, |
|
242 |
); |
|
241 | 243 |
} |
242 | 244 |
|
243 | 245 |
sub action_show { |
... | ... | |
778 | 780 |
return $customer_vendor; |
779 | 781 |
} |
780 | 782 |
|
783 |
sub prepare_report { |
|
784 |
my ($self) = @_; |
|
785 |
|
|
786 |
my %record_types_to_text = $self->get_record_types_to_text(); |
|
787 |
my @record_types_with_info = $self->get_record_types_with_info(); |
|
788 |
|
|
789 |
my $report = SL::ReportGenerator->new(\%::myconfig, $::form); |
|
790 |
|
|
791 |
my $callback = $self->models->get_callback; |
|
792 |
|
|
793 |
my @columns_order = qw( |
|
794 |
id |
|
795 |
sender |
|
796 |
from |
|
797 |
recipients |
|
798 |
subject |
|
799 |
sent_on |
|
800 |
attachment_names |
|
801 |
has_unprocessed_attachments |
|
802 |
unprocessed_attachment_names |
|
803 |
status |
|
804 |
extended_status |
|
805 |
record_type |
|
806 |
linked_to |
|
807 |
obsolete |
|
808 |
); |
|
809 |
|
|
810 |
my @default_columns = qw( |
|
811 |
from |
|
812 |
recipients |
|
813 |
subject |
|
814 |
sent_on |
|
815 |
); |
|
816 |
|
|
817 |
my %column_defs = ( |
|
818 |
id => { |
|
819 |
obj_link => sub {$self->url_for( |
|
820 |
action => 'show', id => $_[0]->id, callback => $callback |
|
821 |
)}, |
|
822 |
sub => sub { $_[0]->id }, |
|
823 |
}, |
|
824 |
sender => { |
|
825 |
sub => sub { $_[0]->sender ? $_[0]->sender->name : '' }, |
|
826 |
}, |
|
827 |
from => { |
|
828 |
obj_link => sub {$self->url_for( |
|
829 |
action => 'show', id => $_[0]->id, callback => $callback |
|
830 |
)}, |
|
831 |
sub => sub { $_[0]->from }, |
|
832 |
}, |
|
833 |
recipients => { |
|
834 |
obj_link => sub {$self->url_for( |
|
835 |
action => 'show', id => $_[0]->id, callback => $callback |
|
836 |
)}, |
|
837 |
sub => sub { $_[0]->recipients }, |
|
838 |
}, |
|
839 |
subject => { |
|
840 |
obj_link => sub {$self->url_for( |
|
841 |
action => 'show', id => $_[0]->id, callback => $callback |
|
842 |
)}, |
|
843 |
sub => sub { $_[0]->subject }, |
|
844 |
}, |
|
845 |
sent_on => { |
|
846 |
obj_link => sub {$self->url_for( |
|
847 |
action => 'show', id => $_[0]->id, callback => $callback |
|
848 |
)}, |
|
849 |
sub => sub { $_[0]->sent_on->to_kivitendo(precision => 'minute') }, |
|
850 |
}, |
|
851 |
attachment_names => { |
|
852 |
sub => sub {join(', ', |
|
853 |
map {$_->name} |
|
854 |
sort {$a->position <=> $b->position} |
|
855 |
@{$_[0]->attachments} |
|
856 |
)}, |
|
857 |
}, |
|
858 |
has_unprocessed_attachments => { |
|
859 |
sub => sub { $_[0]->has_unprocessed_attachments } |
|
860 |
}, |
|
861 |
unprocessed_attachment_names => { |
|
862 |
sub => sub {join(', ', |
|
863 |
map {$_->name} |
|
864 |
sort {$a->position <=> $b->position} |
|
865 |
grep {$_->processed == 0} |
|
866 |
@{$_[0]->attachments} |
|
867 |
)}, |
|
868 |
}, |
|
869 |
status => { |
|
870 |
sub => sub { SL::Presenter::EmailJournal::entry_status($_[0]) }, |
|
871 |
}, |
|
872 |
extended_status => { |
|
873 |
sub => sub { $_[0]->extended_status }, |
|
874 |
}, |
|
875 |
record_type => { |
|
876 |
sub => sub { $record_types_to_text{$_[0]->record_type} }, |
|
877 |
}, |
|
878 |
linked_to => { |
|
879 |
raw_data => sub { |
|
880 |
SL::Presenter::Record::simple_grouped_record_list($_[0]->linked_records) |
|
881 |
} |
|
882 |
}, |
|
883 |
obsolete => { |
|
884 |
sub => sub { $_[0]->obsolete_as_bool_yn } |
|
885 |
}, |
|
886 |
); |
|
887 |
$column_defs{$_}->{text} ||= |
|
888 |
t8( $self->models->get_sort_spec->{$_}->{title} || $_ ) |
|
889 |
for keys %column_defs; |
|
890 |
|
|
891 |
# make all sortable |
|
892 |
my @sortable = keys %column_defs; |
|
893 |
|
|
894 |
unless ($::form->{active_in_report}) { |
|
895 |
$::form->{active_in_report}->{$_} = 1 foreach @default_columns; |
|
896 |
} |
|
897 |
|
|
898 |
$column_defs{$_}->{visible} = $::form->{active_in_report}->{"$_"} || 0 |
|
899 |
foreach keys %column_defs; |
|
900 |
|
|
901 |
my $filter_html = SL::Presenter::Filter::EmailJournal::filter( |
|
902 |
$::form->{filter}, |
|
903 |
active_in_report => $::form->{active_in_report}, |
|
904 |
record_types_with_info => \@record_types_with_info, |
|
905 |
); |
|
906 |
|
|
907 |
$self->models->disable_plugin('paginated') |
|
908 |
if $report->{options}{output_format} =~ /^(pdf|csv)$/i; |
|
909 |
$self->models->add_additional_url_params( |
|
910 |
active_in_report => $::form->{active_in_report} |
|
911 |
); |
|
912 |
$self->models->finalize; # for filter laundering |
|
913 |
|
|
914 |
$report->set_options( |
|
915 |
std_column_visibility => 1, |
|
916 |
controller_class => 'EmailJournal', |
|
917 |
output_format => 'HTML', |
|
918 |
raw_top_info_text => $self->render( |
|
919 |
'email_journal/_report_top', |
|
920 |
{ output => 0 }, |
|
921 |
FILTER_HTML => $filter_html, |
|
922 |
), |
|
923 |
raw_bottom_info_text => $self->render( |
|
924 |
'email_journal/_report_bottom', |
|
925 |
{ output => 0 }, |
|
926 |
models => $self->models |
|
927 |
), |
|
928 |
title => t8('Email journal'), |
|
929 |
allow_pdf_export => 1, |
|
930 |
allow_csv_export => 1, |
|
931 |
); |
|
932 |
$report->set_columns(%column_defs); |
|
933 |
$report->set_column_order(@columns_order); |
|
934 |
$report->set_export_options('list', qw(filter active_in_report)); |
|
935 |
$report->set_options_from_form; |
|
936 |
|
|
937 |
$self->models->set_report_generator_sort_options( |
|
938 |
report => $report, |
|
939 |
sortable_columns => \@sortable |
|
940 |
); |
|
941 |
|
|
942 |
return $report; |
|
943 |
} |
|
944 |
|
|
781 | 945 |
sub add_js { |
782 | 946 |
$::request->{layout}->use_javascript("${_}.js") for qw( |
783 | 947 |
kivi.EmailJournal |
... | ... | |
797 | 961 |
query => \@where, |
798 | 962 |
with_objects => [ 'sender' ], |
799 | 963 |
sorted => { |
964 |
_default => { |
|
965 |
by => 'sent_on', |
|
966 |
dir => 0, |
|
967 |
}, |
|
800 | 968 |
sender => t8('Sender'), |
801 | 969 |
from => t8('From'), |
802 | 970 |
recipients => t8('Recipients'), |
803 | 971 |
subject => t8('Subject'), |
804 |
attachments => t8('Attachments'), |
|
972 |
attachment_names => t8('Attachments'), |
|
973 |
has_unprocessed_attachments => t8('Has unprocessed attachments'), |
|
974 |
unprocessed_attachment_names => t8('Unprocessed Attachments'), |
|
805 | 975 |
sent_on => t8('Sent on'), |
806 | 976 |
status => t8('Status'), |
807 | 977 |
extended_status => t8('Extended status'), |
808 | 978 |
record_type => t8('Record Type'), |
809 | 979 |
obsolete => t8('Obsolete'), |
810 | 980 |
linked_to => t8('Linked to'), |
811 |
has_unprocessed_attachments => t8('Has unprocessed attachments'), |
|
812 | 981 |
}, |
813 | 982 |
); |
814 | 983 |
} |
Auch abrufbar als: Unified diff
EmailJournal: Komplexer Bericht mit komplexen Filter