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 });