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 $self->render('part/ajax_autocomplete', { layout => 0, type => 'json' });
57 sub action_test_page {
58 $::request->{layout}->add_javascripts('autocomplete_part.js');
60 $_[0]->render('part/test_page');
63 sub action_part_picker_search {
64 $_[0]->render('part/part_picker_search', { layout => 0 }, parts => $_[0]->parts);
67 sub action_part_picker_result {
68 $_[0]->render('part/_part_picker_result', { layout => 0 });