E-Mail-Journal: Journal anzeigen, Eintrag anzeigen, Anhänge herunterladen
[kivitendo-erp.git] / SL / Controller / EmailJournal.pm
diff --git a/SL/Controller/EmailJournal.pm b/SL/Controller/EmailJournal.pm
new file mode 100644 (file)
index 0000000..7c40a0d
--- /dev/null
@@ -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;