1 package SL::Controller::Part;
4 use parent qw(SL::Controller::Base);
8 use SL::Controller::Helper::GetModels;
9 use SL::Controller::Helper::Filtered;
10 use SL::Controller::Helper::Sorted;
11 use SL::Controller::Helper::Paginated;
12 use SL::Controller::Helper::Filtered;
13 use SL::Locale::String qw(t8);
15 use Rose::Object::MakeMethods::Generic (
16 'scalar --get_set_init' => [ qw(parts) ],
20 __PACKAGE__->run_before(sub { $::auth->assert('part_service_assembly_edit') });
22 __PACKAGE__->make_filtered(
23 ONLY => [ qw(part_picker_search part_picker_result) ],
24 LAUNDER_TO => 'filter',
26 __PACKAGE__->make_paginated(
27 ONLY => [ qw(part_picker_search part_picker_result) ],
30 __PACKAGE__->make_sorted(
31 ONLY => [ qw(part_picker_search part_picker_result) ],
33 DEFAULT_BY => 'partnumber',
36 partnumber => t8('Partnumber'),
39 sub action_ajax_autocomplete {
40 my ($self, %params) = @_;
42 my $limit = $::form->{limit} || 20;
43 my $type = $::form->{type} || {};
44 my $query = { ilike => "%$::form->{term}%" };
46 push @filter, SL::DB::Manager::Part->type_filter($type);
47 push @filter, ($::form->{column})
48 ? ($::form->{column} => $query)
49 : (or => [ partnumber => $query, description => $query ]);
51 $self->{parts} = SL::DB::Manager::Part->get_all(query => [ @filter ], limit => $limit);
52 $self->{value} = $::form->{column} || 'description';
54 # if someone types something, and hits enter, assume he entered the full name.
55 # if something matches, treat that as sole match
56 if ($::form->{prefer_exact}) {
57 for my $part (@{ $self->{parts} }) {
58 if ( lc $part->description eq lc $::form->{term}
59 || lc $part->partnumber eq lc $::form->{term}) {
60 $self->{parts} = [ $part ];
66 $self->render('part/ajax_autocomplete', { layout => 0, type => 'json' });
69 sub action_test_page {
70 $::request->{layout}->add_javascripts('autocomplete_part.js');
72 $_[0]->render('part/test_page');
75 sub action_part_picker_search {
76 $_[0]->render('part/part_picker_search', { layout => 0 }, parts => $_[0]->parts);
79 sub action_part_picker_result {
80 $_[0]->render('part/_part_picker_result', { layout => 0 });