X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/15b67fd51a4e9d274205f59a9f50c4ce86b5e176..6c63020409f486043d63c3a324db96a4a162ff67:/SL/Controller/TopQuickSearch/Contact.pm diff --git a/SL/Controller/TopQuickSearch/Contact.pm b/SL/Controller/TopQuickSearch/Contact.pm new file mode 100644 index 000000000..5607a5b82 --- /dev/null +++ b/SL/Controller/TopQuickSearch/Contact.pm @@ -0,0 +1,85 @@ +package SL::Controller::TopQuickSearch::Contact; + +use strict; +use parent qw(SL::Controller::TopQuickSearch::Base); + +use SL::Controller::CustomerVendor; +use SL::DB::Vendor; +use SL::DBUtils qw(selectfirst_array_query); +use SL::Locale::String qw(t8); + +sub auth { 'customer_vendor_edit' } + +sub name { 'contact' } + +sub description_config { t8('Contact') } + +sub description_field { t8('Contacts') } + +sub query_autocomplete { + my ($self) = @_; + + my $result = SL::DB::Manager::Contact->get_all( + query => [ + or => [ + cp_name => { ilike => "%$::form->{term}%" }, + cp_givenname => { ilike => "%$::form->{term}%" }, + cp_email => { ilike => "%$::form->{term}%" }, + ], + cp_cv_id => [ \'SELECT id FROM customer UNION SELECT id FROM vendor' ], + ], + 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}); + + SL::Controller::CustomerVendor->new->url_for(action => 'edit', id => $contact->cp_cv_id, db => db_for_contact($contact)); +} + +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, <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;