kivitendo/SL/Controller/TopQuickSearch/Contact.pm @ 7b1da9c3
6c630204 | Sven Schöling | package SL::Controller::TopQuickSearch::Contact;
|
||
use strict;
|
||||
use parent qw(SL::Controller::TopQuickSearch::Base);
|
||||
use SL::Controller::CustomerVendor;
|
||||
use SL::DB::Vendor;
|
||||
bc40bcab | Moritz Bunkus | use SL::DBUtils qw(selectfirst_array_query like);
|
||
6c630204 | Sven Schöling | use SL::Locale::String qw(t8);
|
||
3bb4190a | Moritz Bunkus | sub auth { undef }
|
||
6c630204 | Sven Schöling | |||
sub name { 'contact' }
|
||||
sub description_config { t8('Contact') }
|
||||
sub description_field { t8('Contacts') }
|
||||
sub query_autocomplete {
|
||||
my ($self) = @_;
|
||||
4cdfbd75 | Moritz Bunkus | my $cv_query = <<SQL;
|
||
SELECT id FROM customer
|
||||
WHERE (obsolete IS NULL)
|
||||
OR (obsolete = FALSE)
|
||||
UNION
|
||||
SELECT id FROM vendor
|
||||
WHERE (obsolete IS NULL)
|
||||
OR (obsolete = FALSE)
|
||||
SQL
|
||||
6c630204 | Sven Schöling | my $result = SL::DB::Manager::Contact->get_all(
|
||
query => [
|
||||
or => [
|
||||
bc40bcab | Moritz Bunkus | cp_name => { ilike => like($::form->{term}) },
|
||
cp_givenname => { ilike => like($::form->{term}) },
|
||||
cp_email => { ilike => like($::form->{term}) },
|
||||
6c630204 | Sven Schöling | ],
|
||
4cdfbd75 | Moritz Bunkus | cp_cv_id => [ \$cv_query ],
|
||
6c630204 | Sven Schöling | ],
|
||
limit => 10,
|
||||
sort_by => 'cp_name',
|
||||
);
|
||||
return [
|
||||
map {
|
||||
value => $_->full_name,
|
||||
label => $_->full_name,
|
||||
id => $_->cp_id,
|
||||
}, @$result
|
||||
];
|
||||
}
|
||||
sub select_autocomplete {
|
||||
my ($self) = @_;
|
||||
my $contact = SL::DB::Manager::Contact->find_by(cp_id => $::form->{id});
|
||||
fc9548f8 | Sven Schöling | SL::Controller::CustomerVendor->new->url_for(action => 'edit', id => $contact->cp_cv_id, contact_id => $contact->cp_id, db => db_for_contact($contact), fragment => 'contacts');
|
||
6c630204 | Sven Schöling | }
|
||
sub do_search {
|
||||
my ($self) = @_;
|
||||
my $results = $self->query_autocomplete;
|
||||
if (@$results != 1) {
|
||||
return SL::Controller::CustomerVendor->new->url_for(
|
||||
controller => 'ct.pl',
|
||||
action => 'list_contacts',
|
||||
'filter.status' => 'active',
|
||||
search_term => $::form->{term},
|
||||
);
|
||||
} else {
|
||||
$::form->{id} = $results->[0]{id};
|
||||
return $self->select_autocomplete;
|
||||
}
|
||||
}
|
||||
sub db_for_contact {
|
||||
my ($contact) = @_;
|
||||
my ($customer, $vendor) = selectfirst_array_query($::form, $::form->get_standard_dbh, <<SQL, ($contact->cp_cv_id)x2);
|
||||
SELECT (SELECT COUNT(id) FROM customer WHERE id = ?), (SELECT COUNT(id) FROM vendor WHERE id = ?);
|
||||
SQL
|
||||
die 'Contact is orphaned, cannot link to it' if !$customer && !$vendor;
|
||||
$customer ? 'customer' : 'vendor';
|
||||
}
|
||||
# TODO: multi search
|
||||
1;
|