package PatientTrial;
use Moose;
with qw(
Role::RebuildTables
);
use namespace::clean -except => 'meta';
has db => (is => 'ro', isa => 'HashRef', required => 1);
has sql => (is => 'ro', isa => 'HashRef', required => 1);
__PACKAGE__->meta->make_immutable;
use Data::Dumper;
my @tables = qw(
patient_trial
);
$|++;
sub convert {
my $self = shift; # warn Dumper $self;
my $dbix3 = $self->db->{dbix3};
my $dbix4 = $self->db->{dbix4};
$self->rebuild_tables(\@tables);
# get all hilis4 records with trial_name not unknown:
my $sql = q!select request_number, year, patient_id, trial_name, c.id
as 'trial_id' from requests r left join request_trial t on t.request_id
= r.id left join clinical_trials c on c.id = t.trial_id left join
patient_case pc on r.patient_case_id = pc.id where trial_name <> 'Unknown/other'!;
my $hilis4_trial_cases = $dbix4->query( $sql );
my $trial_case_sql = 'select trial_number,TrialName from Main m left join
TrialPatients p on p.patient_id = m.Pat_ID left join Trials t on p.trial_id
= t.id where HMDS= ? and year(Date) = ?';
TRIAL:
while ( my $vals = $hilis4_trial_cases->hash ) {
# get trial_number from hilis3 for same record if matching trial:
my $trial
= $dbix3->query( $trial_case_sql, $vals->{request_number}, $vals->{year} )->hash
|| next TRIAL;
next unless $trial->{trial_number};
next unless $vals->{trial_name} eq $trial->{trialname};
# OK, hili3 & hilis4 record have same trial name:
my %data = (
patient_id => $vals->{patient_id},
trial_id => $vals->{trial_id},
trial_number => $trial->{trial_number},
);
next if $dbix4->query( q!select 1 from patient_trial where patient_id = ?
and trial_id = ?!, $vals->{patient_id}, $vals->{trial_id} )->list;
$dbix4->insert( 'patient_trial', \%data );
# warn Dumper [$vals->{trial_name},$trial->{trial_number},$trial->{trialname}];
}
$self->convert_to_InnoDB($_) for @tables;
}
1;