ecbca130067e81ab32fcd8f0ee732897396997dc
[kivitendo-erp.git] / SL / Controller / TopQuickSearch / OERecord.pm
1 package SL::Controller::TopQuickSearch::OERecord;
2
3 use strict;
4 use parent qw(Rose::Object);
5
6 use SL::Locale::String qw(t8);
7 use SL::DB::Order;
8 use SL::Controller::Helper::GetModels;
9 use SL::Controller::Base;
10
11 use Rose::Object::MakeMethods::Generic (
12   'scalar --get_set_init' => [ qw(models) ],
13 );
14
15 # nope. this is only for subclassing
16 sub auth { 'NOT ALLOWED' }
17
18 sub name { die 'must be overwritten' }
19
20 sub description_config { die 'must be overwritten' }
21
22 sub description_field { die 'must be overwritten' }
23
24 sub query_autocomplete {
25   my ($self) = @_;
26
27   my $objects = $self->models->get;
28
29   [
30     map {
31      value       => $_->digest,
32      label       => $_->digest,
33      id          => $_->id,
34     }, @$objects
35   ];
36 }
37
38 sub select_autocomplete {
39   $_[0]->redirect_to_object($::form->{id});
40 }
41
42 sub do_search {
43   my ($self) = @_;
44
45   my $objects = $self->models->get;
46
47   return !@$objects     ? ()
48        : @$objects == 1 ? $self->redirect_to_object($objects->[0]->id)
49        :                  $self->redirect_to_search($::form->{term});
50 }
51
52 sub redirect_to_search {
53   SL::Controller::Base->new->url_for(
54     controller => 'oe.pl',
55     action     => 'orders',
56     type       => $_[0]->type,
57     vc         => $_[0]->vc,
58     all        => $_[1],
59     open       => 1,
60     closed     => 1,
61     sortdir    => 0,
62     (map {; "l_$_" => 'Y' } $_[0]->number, qw(transdate cusordnumber reqdate name employee netamount)),
63   );
64 }
65
66 sub redirect_to_object {
67   if ($::instance_conf->get_feature_experimental) {
68     SL::Controller::Base->new->url_for(
69       controller => 'Order',
70       action     => 'edit',
71       type       => $_[0]->type,
72       id         => $_[1],
73     );
74   } else {
75     SL::Controller::Base->new->url_for(
76       controller => 'oe.pl',
77       action     => 'edit',
78       type       => $_[0]->type,
79       vc         => $_[0]->vc,
80       id         => $_[1],
81     );
82   }
83 }
84
85 sub type {
86   die 'must be overwritten'
87 }
88
89 sub cv {
90   die 'must be overwritten'
91 }
92
93 sub quotation {
94   $_[0]->type !~ /order/
95 }
96
97 sub number {
98   $_[0]->quotation ? 'quonumber' : 'ordnumber'
99 }
100
101 sub init_models {
102   my ($self) = @_;
103
104   SL::Controller::Helper::GetModels->new(
105     controller => $self,
106     model      => 'Order',
107     source     => {
108       filter => {
109         type => $self->type,
110         'all:substr:multi::ilike' => $::form->{term},
111       },
112     },
113     sorted     => {
114       _default   => {
115         by  => 'transdate',
116         dir => 0,
117       },
118       transdate => t8('Date'),
119     },
120     paginated  => {
121       per_page => 10,
122     },
123     with_objects => [ qw(customer vendor) ]
124   )
125 }
126
127 1;