X-Git-Url: http://wagnertech.de/git?p=kivitendo-erp.git;a=blobdiff_plain;f=SL%2FController%2FTopQuickSearch%2FArticle.pm;fp=SL%2FController%2FTopQuickSearch%2FArticle.pm;h=e689bbe81db14512c111130e96d283012909e9ce;hp=0000000000000000000000000000000000000000;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hpb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44 diff --git a/SL/Controller/TopQuickSearch/Article.pm b/SL/Controller/TopQuickSearch/Article.pm new file mode 100644 index 000000000..e689bbe81 --- /dev/null +++ b/SL/Controller/TopQuickSearch/Article.pm @@ -0,0 +1,103 @@ +package SL::Controller::TopQuickSearch::Article; + +use strict; +use parent qw(Rose::Object); + +use SL::Locale::String qw(t8); +use SL::DB::Part; +use SL::Controller::Helper::GetModels; +use SL::Controller::Base; + +use Rose::Object::MakeMethods::Generic ( + 'scalar --get_set_init' => [ qw(parts models part) ], +); + +sub auth { 'part_service_assembly_edit' } + +sub name { 'article' } + +sub description_config { t8('Articles') } + +sub description_field { t8('Articles') } + +sub query_autocomplete { + my ($self) = @_; + + my $objects = $self->models->get; + + [ + map { + value => $_->displayable_name, + label => $_->displayable_name, + id => $_->id, + }, @$objects + ]; +} + +sub select_autocomplete { + my ($self) = @_; + $self->redirect_to_part($::form->{id}); +} + +sub do_search { + my ($self) = @_; + + my $objects = $self->models->get; + + return !@$objects ? () + : @$objects == 1 ? $self->redirect_to_part($objects->[0]->id) + : $self->redirect_to_search($::form->{term}); +} + +sub redirect_to_search { + my ($self, $term) = @_; + + SL::Controller::Base->new->url_for( + controller => 'ic.pl', + action => 'generate_report', + all => $term, + (searchitems => $self->part_type) x!!$self->part_type, + ); +} + +sub redirect_to_part { + my ($self, $term) = @_; + + SL::Controller::Base->new->url_for( + controller => 'controller.pl', + action => 'Part/edit', + 'part.id' => $term, + ); +} + +sub part_type { + () +} + +sub init_models { + my ($self) = @_; + + SL::Controller::Helper::GetModels->new( + controller => $self, + model => 'Part', + source => { + filter => { + (part_type => $self->part_type) x!!$self->part_type, + or => [ obsolete => undef, obsolete => 0 ], + 'all:substr:multi::ilike' => $::form->{term}, + }, + }, + sorted => { + _default => { + by => 'partnumber', + dir => 1, + }, + partnumber => t8('Partnumber'), + }, + paginated => { + per_page => 10, + }, + ) +} + +1;