package LIMS::Model::Outreach; use Moose; with ( 'LIMS::Model::Roles::DBIxSimple', ); extends 'LIMS::Model::Base'; use namespace::clean -except => 'meta'; __PACKAGE__->meta->make_immutable; use Data::Dumper; sub get_all_data { my ($self, $request_id) = @_; # warn $request_id; my $dbix = $self->lims_dbix; my %data = (); { # first get list of all departments, lab_tests, defaults & ranges: my $sql = $self->sql_lib->retr('outreach_lab_params'); my $query = $dbix->query($sql); # get list of cols from defaults_and_ranges table: my $meta = $self->get_meta('outreach.defaults_and_ranges'); # warn Dumper $meta; my @cols = grep { $meta->{$_}->{key} ne 'PRI' # skip primary key } keys %$meta; # warn Dumper \@cols; while ( my $vars = $query->hash ) { my $param = $vars->{param_name}; my $dept = $vars->{description}; my %params = ( field_label => $vars->{field_label}, field_type => $vars->{field_type}, result => undef, # initialise placeholder ); $data{$dept}{$param} = \%params; # add any (optional) default & ranges cols: map { $data{$dept}{$param}{$_} = $vars->{$_}; } grep $vars->{$_}, @cols; } } { # add lab_test results: my $sql = $self->sql_lib->retr('outreach_lab_results'); my $query = $dbix->query($sql, $request_id); while ( my $vals = $query->hash ) { my $result = $vals->{result}; my $param = $vals->{param_name}; my $dept = $vals->{description}; $data{$dept}{$param}{result} = $result; } } { # add demographics data: my $sql = $self->sql_lib->retr('outreach_patient_demographics'); my $demographics = $dbix->query($sql, $request_id)->hash; $data{demographics} = $demographics; } # get GP's for practice: if ( my $practice_id = $data{demographics}{practice_id} ) { my $GPs = $self->_get_practitioners($practice_id); $data{demographics}{practitioners} = $GPs; # get unknown practitioner id: my $o = LIMS::DB::ReferralType->new(description => 'practitioner')->load; my $ref = LIMS::DB::Referrer->new(national_code => $o->default_unknown)->load; $data{demographics}{unknown_gp_id} = $ref->id; } { # get menu options: my $sql = $self->sql_lib->retr('outreach_menu_options'); my $query = $dbix->query($sql); my %opts; while ( my $vars = $query->array ) { my ($param_name, $detail) = @$vars; push @{ $opts{$param_name} }, $detail; } $data{menu_options} = \%opts; } return \%data; } sub get_diagnosis_ids { my $self = shift; my $dbix = $self->lims_dbix; my $ids = $dbix->query('select diagnosis_id from outreach.diagnoses')->flat; return $ids; } sub _get_practitioners { # from M::Referrer::get_referrers_by_source_id my ($self, $source_id) = @_; my @args = ( query => [ 'referral_sources.id' => $source_id ], require_objects => [ 'referrer', 'parent_organisation.referral_source' ], ); # use ReferrerDepartment - easier to retrieve data from object: my $referrers = LIMS::DB::ReferrerDepartment::Manager ->get_referrer_department(@args); my @data = map { # warn Dumper $_->as_tree; [ $_->referrer->id, $_->referrer->name ]; } sort { $a->referrer->name cmp $b->referrer->name } @$referrers; return \@data; } 1;