X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FFU.pm;h=ad6149d697b5bdfa721538319fb69c4ba10ff659;hb=e0d7849f5e65cf957bbec56d23336fd55e5cd987;hp=bd761913c2e5ca0b5dffe4f30bdc379e67cfeea7;hpb=7a7f33b5c1b3531ab761adba1cf19d4ad68cffcd;p=kivitendo-erp.git diff --git a/SL/FU.pm b/SL/FU.pm index bd761913c..ad6149d69 100644 --- a/SL/FU.pm +++ b/SL/FU.pm @@ -8,6 +8,8 @@ use SL::Common; use SL::DBUtils; use SL::Notes; +use strict; + sub save { $main::lxdebug->enter_sub(); @@ -36,7 +38,8 @@ sub save { 'trans_id' => $params{id}, 'trans_module' => 'fu', 'subject' => $params{subject}, - 'body' => $params{body}); + 'body' => $params{body}, + 'dbh' => $dbh,); $params{done} = 1 if (!defined $params{done}); @@ -44,7 +47,7 @@ sub save { do_query($form, $dbh, qq|DELETE FROM follow_up_links WHERE follow_up_id = ?|, conv_i($params{id})); - my $query = qq|INSERT INTO follow_up_links (follow_up_id, trans_id, trans_type, trans_info) VALUES (?, ?, ?, ?)|; + $query = qq|INSERT INTO follow_up_links (follow_up_id, trans_id, trans_type, trans_info) VALUES (?, ?, ?, ?)|; my $sth = prepare_query($form, $dbh, $query); foreach my $link (@{ $params{LINKS} }) { @@ -181,7 +184,8 @@ sub follow_ups { my ($query, $where, $where_user); my ($employee_id) = selectrow_query($form, $dbh, qq|SELECT id FROM employee WHERE login = ?|, $form->{login}); - my @values = ($employee_id, $employee_id); + my @values = (); + my @values_user = (); if ($params{trans_id}) { $where .= qq| AND EXISTS (SELECT * FROM follow_up_links ful @@ -238,7 +242,21 @@ sub follow_ups { if ($params{all_users}) { $where_user = qq|OR (fu.created_by IN (SELECT DISTINCT what FROM follow_up_access WHERE who = ?))|; - push @values, $employee_id; + push @values_user, $employee_id; + } + + my $order_by = ''; + + if ($form->{sort} ne 'title') { + my %sort_columns = ( + 'follow_up_date' => [ qw(fu.follow_up_date fu.id) ], + 'created_on' => [ qw(created_on fu.id) ], + 'subject' => [ qw(lower(n.subject)) ], + ); + + my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC'; + my $sortkey = $sort_columns{$form->{sort}} ? $form->{sort} : 'follow_up_date'; + $order_by = 'ORDER BY ' . join(', ', map { "$_ $sortdir" } @{ $sort_columns{$sortkey} }); } $query = qq|SELECT fu.*, n.subject, n.body, n.created_by, @@ -253,9 +271,9 @@ sub follow_ups { WHERE ((fu.created_by = ?) OR (fu.created_for_user = ?) $where_user) $where - ORDER BY fu.follow_up_date DESC, fu.id ASC|; + $order_by|; - my $follow_ups = selectall_hashref_query($form, $dbh, $query, @values); + my $follow_ups = selectall_hashref_query($form, $dbh, $query, $employee_id, $employee_id, @values_user, @values); if (!scalar @{ $follow_ups }) { $main::lxdebug->leave_sub(); @@ -266,6 +284,14 @@ sub follow_ups { $fu->{LINKS} = $self->retrieve_links(%{ $fu }); } + if ($form->{sort} eq 'title') { + my $dir_factor = !defined $form->{sortdir} ? 1 : $form->{sortdir} ? 1 : -1; + $follow_ups = [ map { $_->[1] } + sort { ($a->[0] cmp $b->[0]) * $dir_factor } + map { my $fu = $follow_ups->[$_]; [ @{ $fu->{LINKS} } ? lc($fu->{LINKS}->[0]->{title}) : '', $fu ] } + (0 .. scalar(@{ $follow_ups }) - 1) ]; + } + $main::lxdebug->leave_sub(); return $follow_ups;