X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/7e601869345e7cbdb958a1295ea25f7e2b354a13..72f19f83681b222d1606d75c90ceedc43bb545f9:/SL/Controller/EmailJournal.pm diff --git a/SL/Controller/EmailJournal.pm b/SL/Controller/EmailJournal.pm new file mode 100644 index 000000000..7c40a0de7 --- /dev/null +++ b/SL/Controller/EmailJournal.pm @@ -0,0 +1,124 @@ +package SL::Controller::EmailJournal; + +use strict; + +use parent qw(SL::Controller::Base); + +use SL::Controller::Helper::GetModels; +use SL::DB::Employee; +use SL::DB::EmailJournal; +use SL::DB::EmailJournalAttachment; +use SL::Helper::Flash; +use SL::Locale::String; +use SL::System::TaskServer; + +use Rose::Object::MakeMethods::Generic +( + scalar => [ qw(entry) ], + 'scalar --get_set_init' => [ qw(models can_view_all filter_summary) ], +); + +__PACKAGE__->run_before('add_stylesheet'); + +# +# actions +# + +sub action_list { + my ($self) = @_; + + $self->render('email_journal/list', + title => $::locale->text('Email journal'), + ENTRIES => $self->models->get, + MODELS => $self->models); +} + +sub action_show { + my ($self) = @_; + + my $back_to = $::form->{back_to} || $self->url_for(action => 'list'); + + $self->entry(SL::DB::EmailJournal->new(id => $::form->{id})->load); + + if (!$self->can_view_all && ($self->entry->sender_id != SL::DB::Manager::Emplyee->current->id)) { + $::form->error(t8('You do not have permission to access this entry.')); + } + + $self->render('email_journal/show', + title => $::locale->text('View sent email'), + back_to => $back_to); +} + +sub action_download_attachment { + my ($self) = @_; + + my $attachment = SL::DB::EmailJournalAttachment->new(id => $::form->{id})->load; + + if (!$self->can_view_all && ($attachment->email_journal->sender_id != SL::DB::Manager::Emplyee->current->id)) { + $::form->error(t8('You do not have permission to access this entry.')); + } + + $self->send_file(\$attachment->content, name => $attachment->name, type => $attachment->mime_type); +} + +# +# filters +# + +sub add_stylesheet { + $::request->{layout}->use_stylesheet('email_journal.css'); +} + +# +# helpers +# + +sub init_can_view_all { $::auth->assert('admin', 1) } + +sub init_models { + my ($self) = @_; + + my @where; + push @where, (sender_id => SL::DB::Manager::Employee->current->id) if !$self->can_view_all; + + SL::Controller::Helper::GetModels->new( + controller => $self, + query => \@where, + with_objects => [ 'sender' ], + sorted => { + sender => t8('Sender'), + from => t8('From'), + recipients => t8('Recipients'), + subject => t8('Subject'), + sent_on => t8('Sent on'), + status => t8('Status'), + extended_status => t8('Extended status'), + }, + ); +} + +sub init_filter_summary { + my ($self) = @_; + + my $filter = $::form->{filter} || {}; + my @filters = ( + [ "from:substr::ilike", $::locale->text('From') ], + [ "recipients:substr::ilike", $::locale->text('Recipients') ], + [ "sent_on:date::ge", $::locale->text('Sent on') . " " . $::locale->text('From Date') ], + [ "sent_on:date::le", $::locale->text('Sent on') . " " . $::locale->text('To Date') ], + ); + + my @filter_strings = grep { $_ } + map { $filter->{ $_->[0] } ? $_->[1] . ' ' . $filter->{ $_->[0] } : undef } + @filters; + + my %status = ( + failed => $::locale->text('failed'), + ok => $::locale->text('succeeded'), + ); + push @filter_strings, $status{ $filter->{'status:eq_ignore_empty'} } if $filter->{'status:eq_ignore_empty'}; + + return join ', ', @filter_strings; +} + +1;