package LIMS::Controller::Roles::LocationSearch; use strict; use Moose::Role; #------------------------------------------------------------------------------- sub referral_source_search { my $self = shift; my $dfv = $self->check_rm('default', $self->validate('referral_source_search') ) || return $self->dfv_error_page; my $data = $dfv->valid || return $self->forward('default'); # eg if empty param my $search_terms = $self->generate_search_constraints($data) || return $self->forward('default'); # protect against submission of empty form my $total_count = $self->model('ReferralSource') ->get_referral_sources_count($search_terms); # $self->debug($total_count); # zero hits, or too many to handle: if (! $total_count || $total_count > 1000 ) { $self->stash->{status_msg} = $total_count ? sprintf $self->messages('search')->{too_many_records}, $total_count : $self->messages('search')->{no_records_found}; my $html = $self->forward('default'); return $self->fill_form($html); } my %args_for_search = ( sort_by => $self->query->param('sort_by') || 'display_name', ); if ( $total_count > $self->cfg('settings')->{entries_per_page} ) { # invoke pager for template and add limit & offset params to \%args: $self->pager({ query => \%args_for_search, total => $total_count }); } my $sources = $self->model('ReferralSource') ->get_referral_sources($search_terms, \%args_for_search); $self->tt_params( sources => $sources ); return $self->tt_process; } #------------------------------------------------------------------------------- sub parent_organisation_search { my $self = shift; my $dfv = $self->check_rm('default', $self->validate('parent_organisation_search') ) || return $self->dfv_error_page; my $data = $dfv->valid || return $self->forward('default'); # eg if empty param my $search_terms = $self->generate_search_constraints($data) || return $self->forward('default'); # protect against submission of empty form my $total_count = $self->model('ReferralSource') ->get_parent_organisations_count($search_terms); # $self->debug($total_count); # zero hits, or too many to handle: if (! $total_count || $total_count > 1000 ) { $self->stash->{status_msg} = $total_count ? sprintf $self->messages('search')->{too_many_records}, $total_count : $self->messages('search')->{no_records_found}; my $html = $self->forward('default'); return $self->fill_form($html); } my %args_for_search = ( sort_by => $self->query->param('sort_by') || 'description', ); if ( $total_count > $self->cfg('settings')->{entries_per_page} ) { # invoke pager for template and add limit & offset params to \%args: $self->pager({ query => \%args_for_search, total => $total_count }); } my $parents = $self->model('ReferralSource') ->get_parent_organisations($search_terms, \%args_for_search); $self->tt_params( parents => $parents ); return $self->tt_process; } =begin # using referrer_department.parent_organisation rel in model now sub _get_address_map { my $self = shift; my $referrers = shift; # get list of referrer.id's from referrers object: my @referrer_ids = map { $_->id } @$referrers; # DEBUG \@request_ids; my $referrer_departments = $self->model('Referrer')->get_practice_addresses(\@referrer_ids); # create address_map of keys = referrer_id, vals = parent_org.description my %address_map; foreach my $r( @{ $referrer_departments } ) { my $referrer_id = $r->referrer_id; my $address = $r->parent_organisation->description; $address_map{$referrer_id} = $address; } return \%address_map; } =cut 1;