package Role::Main;
use Moose::Role;
has trial_id_map => ( is => 'ro', isa => 'HashRef', lazy_build => 1 );
has options_map => ( is => 'ro', isa => 'HashRef', lazy_build => 1 );
sub do_clinical_trials {
my $self = shift;
my $vals = shift;
my $hilis3_trial_id = $vals->{study} || return;
my $trial_id_map = $self->trial_id_map;
my $hilis4_trial_id = $trial_id_map->{$hilis3_trial_id}
|| die "No hilis4 clinical_trial.id available for $hilis3_trial_id";
my %data = (
request_id => $vals->{_request_id},
trial_id => $hilis4_trial_id,
);
$self->db->{dbix4}->insert('request_trial', \%data);
}
sub do_additional_options {
my $self = shift;
my $vals = shift;
# urgent, private, copy_to, doi, teaching:
my $options = $self->options_map;
foreach ( keys %$options ) {
my $option = $_;
next unless $vals->{$option};
my %data = (
request_id => $vals->{_request_id},
option_id => $options->{$_},
);
$self->db->{dbix4}->insert('request_option', \%data);
}
}
sub _build_options_map {
my $self = shift;
my $dbh4 = $self->db->{dbix4};
my $options = $dbh4->query( 'select option_name, id from additional_options')->map;
{ # 'CopyTo' => 'copy_to'
my $cc_id = $options->{copy_to};
delete $options->{copy_to};
$options->{copyto} = $cc_id;
}
return $options;
}
sub _build_trial_id_map {
my $self = shift;
my $dbh3 = $self->db->{dbix3};
my $dbh4 = $self->db->{dbix4};
my $hilis3_trials = $dbh3->query('select TrialName, id from Trials')->map;
my $hilis4_trials = $dbh4->query('select trial_name, id from clinical_trials')->map;
{ # 'Community monitoring' changed to 'HMDS outreach'
my $cmp_id = $hilis3_trials->{'Community monitoring'};
delete $hilis3_trials->{'Community monitoring'};
$hilis3_trials->{'HMDS outreach'} = $cmp_id;
}
# map hilis3 Trials.id => hilis4 clinical_trials.id
my %map = map {
my $hilis3_trial_name = $_; # warn $hilis3_trial_name;
my $hilis3_trial_id = $hilis3_trials->{$hilis3_trial_name};
my $hilis4_trial_id = $hilis4_trials->{$hilis3_trial_name};
$hilis3_trial_id => $hilis4_trial_id;
} keys %$hilis3_trials;
return \%map;
}
1;