X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/kivitendo-erp.git/blobdiff_plain/ec3a4636c1d58339915614120cd82759150d7641..8a5a3e9c4f991f278171843a6335bcb4724bd03f:/SL/Controller/Helper/GetModels/Sorted.pm diff --git a/SL/Controller/Helper/GetModels/Sorted.pm b/SL/Controller/Helper/GetModels/Sorted.pm index 9e133b8f6..14e733d45 100644 --- a/SL/Controller/Helper/GetModels/Sorted.pm +++ b/SL/Controller/Helper/GetModels/Sorted.pm @@ -7,7 +7,7 @@ use Carp; use List::MoreUtils qw(uniq); use Rose::Object::MakeMethods::Generic ( - scalar => [ qw(by dir specs) ], + scalar => [ qw(by dir specs form_data) ], 'scalar --get_set_init' => [ qw(form_params) ], ); @@ -37,22 +37,24 @@ sub init { $self->get_models->register_handlers( callback => sub { shift; $self->_callback_handler_for_sorted(@_) }, - get_models => sub { shift; $self->_get_models_handler_for_sorted(@_) }, ); # $::lxdebug->dump(0, "CONSPEC", \%specs); } -sub get_current_sort_params { +sub read_params { my ($self, %params) = @_; + return %{ $self->form_data } if $self->form_data; + my %sort_params; my ($by, $dir) = @{ $self->form_params }; + my $source = $self->get_models->source; - if ($::form->{ $by }) { + if ($source->{ $by }) { %sort_params = ( - sort_by => $::form->{$by}, - sort_dir => defined($::form->{$dir}) ? $::form->{$dir} * 1 : undef, + sort_by => $source->{$by}, + sort_dir => defined($source->{$dir}) ? $source->{$dir} * 1 : undef, ); } elsif (!$self->by) { %sort_params = %params; @@ -63,15 +65,28 @@ sub get_current_sort_params { ); } + $self->form_data(\%sort_params); + return %sort_params; } +sub finalize { + my ($self, %params) = @_; + + my %sort_params = $self->read_params; + my $sort_spec = $self->specs->{ $sort_params{sort_by} }; + + $params{sort_by} = "SL::DB::Manager::$sort_spec->{model}"->make_sort_string(sort_by => $sort_spec->{model_column}, sort_dir => $sort_params{sort_dir}); + + %params; +} + sub set_report_generator_sort_options { my ($self, %params) = @_; $params{$_} or croak("Missing parameter '$_'") for qw(report sortable_columns); - my %current_sort_params = $self->get_current_sort_params; + my %current_sort_params = $self->read_params; foreach my $col (@{ $params{sortable_columns} }) { $params{report}->{columns}->{$col}->{link} = $self->get_models->get_callback( @@ -96,7 +111,7 @@ sub set_report_generator_sort_options { sub _callback_handler_for_sorted { my ($self, %params) = @_; - my %spec = $self->get_current_sort_params; + my %spec = $self->read_params; if ($spec{sort_by}) { $params{ $self->form_params->[0] } = $spec{sort_by}; @@ -108,20 +123,6 @@ sub _callback_handler_for_sorted { return %params; } -sub _get_models_handler_for_sorted { - my ($self, %params) = @_; - - my %sort_params = $self->get_current_sort_params; - my $sort_spec = $self->specs->{ $sort_params{sort_by} }; - - $params{sort_by} = "SL::DB::Manager::$sort_spec->{model}"->make_sort_string(sort_by => $sort_spec->{model_column}, sort_dir => $sort_params{sort_dir}); - - # $::lxdebug->dump(0, "GM handler for sorted; params nach modif:", \%params); - - return %params; -} - - sub init_form_params { [ qw(sort_by sort_dir) ] } @@ -145,7 +146,7 @@ In a controller: use SL::Controller::Helper::GetModels; use SL::Controller::Helper::Sorted; - __PACKAGE__->make_sorted( + __PACKAGE__->make_sorted( # update this DEFAULT_BY => 'run_at', DEFAULT_DIR => 1, MODEL => 'BackgroundJobHistory', @@ -169,7 +170,7 @@ In said template:
[% L.sortable_table_header('package_name') %] | +[% L.sortable_table_header('package_name') %] | # models[% L.sortable_table_header('run_at') %] | [% L.sortable_table_header('error') %] |
---|