package Role::ReferralSource;
use Moose::Role;
use Data::Dumper;
has referral_source_practices => ( is => 'ro', isa => 'HashRef', lazy_build => 1 );
sub add_new_practices_to_referral_sources {
my ($self, $practices) = @_; # warn Dumper $practices;
my $dbix3 = $self->db->{dbix3};
my $dbix4 = $self->db->{dbix4};
my $ref_src_practices = $self->referral_source_practices; # warn Dumper $ref_src_practices;
PRACTICE:
for my $practice_code (@$practices) { # warn $practice_code;
$practice_code =~ s/\s//g; # trim blank spaces (for YHHN practices)
# skip existing practices:
next if $ref_src_practices->{$practice_code}; # warn $practice_code;
# get details from cm.gp_practices:
my $sql = qq!select * from community_monitoring.gp_practices where practice_id = ?!;
my $practice = $dbix3->query($sql, $practice_code)->hash; # warn Dumper $practice;
unless ($practice) {
warn "no practice found in community_monitoring.gp_practices for $practice_code";
next PRACTICE;
} # next PRACTICE;
my $parent_organisation_id = $dbix4->query(q!select id from parent_organisations
where parent_code = ?!, $practice_code)->array;
if (! $parent_organisation_id) { # add practice to parent_organisations & retrieve new id:
my @address = split ', ', $practice->{address};
my $description = join ', ', uc $address[0], $practice->{post_code};
my %data = (
parent_code => $practice_code,
description => $description,
referral_type_id => 5,
); # warn Dumper \%data; next PRACTICE;
$dbix4->insert('parent_organisations', \%data);
$parent_organisation_id
= $dbix4->last_insert_id(undef, undef, 'parent_organisations', 'id')
|| die "Cannot retrieve parent_organisation_id for $practice_code";
}
# warn Dumper ($practice_code, $parent_organisation_id);
my %data = (
organisation_code => $practice_code,
referral_type_id => 5, # practice
parent_organisation_id => $parent_organisation_id,
display_name => join ', ', @{$practice}{qw(address post_code)},
); # warn Dumper \%data; next PRACTICE;
$dbix4->insert('referral_sources', \%data);
# add new org_code entry to $ref_src_practices:
{
my $referral_sources_id
= $dbix4->last_insert_id(undef, undef, 'referral_sources', 'id')
|| die "Cannot retrieve referral_sources.id for $practice_code";
$ref_src_practices->{$practice_code} = $referral_sources_id;
}
}
}
sub _build_referral_source_practices {
my $self = shift;
my $sql = q!select organisation_code, id from referral_sources where
organisation_code like 'B_____' or
organisation_code like 'C_____' or
organisation_code like 'P_____' or
organisation_code like 'Y_____'!;
return $self->db->{dbix4}->query($sql)->map;
}
1;