Skip to content

Commit e7f8435

Browse files
authored
Merge pull request #5199 from solgenomics/topic/tracking_transformation
Tracking transformation workflow
2 parents ab33802 + 9a4a369 commit e7f8435

65 files changed

Lines changed: 4610 additions & 418 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/usr/bin/env perl
2+
3+
=head1 NAME
4+
5+
AddTransformationAndTrackingCvterms.pm
6+
7+
=head1 SYNOPSIS
8+
9+
mx-run ThisPackageName [options] -H hostname -D dbname -u username [-F]
10+
11+
this is a subclass of L<CXGN::Metadata::Dbpatch>
12+
see the perldoc of parent class for more details.
13+
14+
=head1 DESCRIPTION
15+
This patch adds autogenerated_name_metadata, autogenerated_name_format, default_plant_material project_property cvterms, progress_of project_relationship cvterm, tracking_transformation_json, completed_metadata stock_property cvterms.
16+
This subclass uses L<Moose>. The parent class uses L<MooseX::Runnable>
17+
18+
=head1 AUTHOR
19+
20+
Titima Tantikanjana<[email protected]>
21+
22+
=head1 COPYRIGHT & LICENSE
23+
24+
Copyright 2010 Boyce Thompson Institute for Plant Research
25+
26+
This program is free software; you can redistribute it and/or modify
27+
it under the same terms as Perl itself.
28+
29+
=cut
30+
31+
32+
package AddTransformationAndTrackingCvterms;
33+
34+
use Moose;
35+
use Bio::Chado::Schema;
36+
use Try::Tiny;
37+
extends 'CXGN::Metadata::Dbpatch';
38+
39+
40+
has '+description' => ( default => <<'' );
41+
Description of this patch goes here
42+
43+
has '+prereq' => (
44+
default => sub {
45+
[],
46+
},
47+
48+
);
49+
50+
sub patch {
51+
my $self=shift;
52+
53+
print STDOUT "Executing the patch:\n " . $self->name . ".\n\nDescription:\n ". $self->description . ".\n\nExecuted by:\n " . $self->username . " .";
54+
55+
print STDOUT "\nChecking if this db_patch was executed before or if previous db_patches have been executed.\n";
56+
57+
print STDOUT "\nExecuting the SQL commands.\n";
58+
my $schema = Bio::Chado::Schema->connect( sub { $self->dbh->clone } );
59+
60+
61+
print STDERR "INSERTING CV TERMS...\n";
62+
63+
my $terms = {
64+
'project_property' => [
65+
'autogenerated_name_metadata',
66+
'autogenerated_name_format',
67+
'default_plant_material',
68+
],
69+
'project_relationship' => [
70+
'progress_of',
71+
],
72+
'stock_property' => [
73+
'tracking_transformation_json',
74+
'completed_metadata',
75+
]
76+
};
77+
78+
foreach my $t (keys %$terms){
79+
foreach (@{$terms->{$t}}){
80+
$schema->resultset("Cv::Cvterm")->create_with({
81+
name => $_,
82+
cv => $t
83+
});
84+
}
85+
}
86+
87+
print "You're done!\n";
88+
89+
}
90+
91+
92+
####
93+
1; #
94+
####

lib/CXGN/BreedersToolbox/Projects.pm

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ sub get_trials_by_breeding_program {
253253
my @sorted_by_year_keys = sort { $project_year{$a} cmp $project_year{$b} } keys(%project_year);
254254

255255
foreach my $id_key (@sorted_by_year_keys) {
256-
if (!$projects_that_are_crosses{$id_key} && !$projects_that_are_genotyping_trials{$id_key} && !$projects_that_are_genotyping_trials{$id_key} && !$projects_that_are_treatment_trials{$id_key} && !$projects_that_are_genotyping_data_projects{$id_key} && !$projects_that_are_drone_run_projects{$id_key} && !$projects_that_are_drone_run_band_projects{$id_key} && !$projects_that_are_analyses{$id_key} && !$projects_that_are_sampling_trials{$id_key} && !$projects_that_are_tracking_projects{$id_key}) {
256+
if (!$projects_that_are_crosses{$id_key} && !$projects_that_are_genotyping_trials{$id_key} && !$projects_that_are_genotyping_trials{$id_key} && !$projects_that_are_treatment_trials{$id_key} && !$projects_that_are_genotyping_data_projects{$id_key} && !$projects_that_are_drone_run_projects{$id_key} && !$projects_that_are_drone_run_band_projects{$id_key} && !$projects_that_are_analyses{$id_key} && !$projects_that_are_sampling_trials{$id_key} && !$projects_that_are_tracking_projects{$id_key} && !$projects_that_are_transformation_projects{$id_key}) {
257257
push @$field_trials, [ $id_key, $project_name{$id_key}, $project_description{$id_key}];
258258
} elsif ($projects_that_are_crosses{$id_key}) {
259259
push @$cross_trials, [ $id_key, $project_name{$id_key}, $project_description{$id_key}];
@@ -852,4 +852,26 @@ sub get_related_treatments {
852852
}
853853

854854

855+
sub get_autogenerated_name_metadata_by_breeding_program {
856+
my $self = shift;
857+
my $schema = $self->schema;
858+
my $breeding_program_id = shift;
859+
860+
my $autogenerated_name_metadata_cvterm = SGN::Model::Cvterm->get_cvterm_row($schema, 'autogenerated_name_metadata', 'project_property');
861+
my $program = $schema->resultset('Project::Project')->find({ project_id => $breeding_program_id});
862+
863+
my $name_metadata_hashes;
864+
my $name_metadata_projectprop_rs = $program->projectprops({type_id => $autogenerated_name_metadata_cvterm->cvterm_id});
865+
if ($name_metadata_projectprop_rs->count == 1){
866+
my $name_metadata_string = $name_metadata_projectprop_rs->first->value();
867+
$name_metadata_hashes = decode_json $name_metadata_string;
868+
} else {
869+
return {error => "Error retrieving autogenerated name metadata!\n"};
870+
}
871+
872+
return {name_metadata => $name_metadata_hashes};
873+
874+
}
875+
876+
855877
1;

lib/CXGN/Project.pm

Lines changed: 80 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ sub get_year {
265265
my $rs = $self->bcs_schema->resultset('Project::Project')->search( { 'me.project_id' => $self->get_trial_id() })->search_related('projectprops', { 'projectprops.type_id' => $type_id } );
266266

267267
if ($rs->count() == 0) {
268-
return undef;
268+
return;
269269
}
270270
else {
271271
return $rs->first()->value();
@@ -944,7 +944,7 @@ sub get_project_type {
944944
}
945945
}
946946
}
947-
return undef;
947+
return;
948948

949949
}
950950

@@ -1029,21 +1029,21 @@ sub get_breeding_program {
10291029
my $self = shift;
10301030

10311031
my $rs = $self->bcs_schema()->resultset("Project::ProjectRelationship")->search({
1032-
subject_project_id => $self->get_trial_id(),
1033-
type_id => $self->get_breeding_program_trial_relationship_cvterm_id(),
1034-
});
1032+
subject_project_id => $self->get_trial_id(),
1033+
type_id => $self->get_breeding_program_trial_relationship_cvterm_id(),
1034+
});
10351035
if ($rs->count() == 0) {
1036-
return undef;
1036+
return;
10371037
}
10381038

10391039
my $bp_rs = $self->bcs_schema()->resultset("Project::Project")->search({
1040-
project_id => $rs->first()->object_project_id()
1041-
});
1040+
project_id => $rs->first()->object_project_id()
1041+
});
10421042
if ($bp_rs->count > 0) {
1043-
return $bp_rs->first()->name();
1043+
return $bp_rs->first()->name();
10441044
}
10451045

1046-
return undef;
1046+
return;
10471047
}
10481048

10491049
sub set_breeding_program {
@@ -1344,7 +1344,7 @@ sub get_transplanting_date {
13441344
if ($row){
13451345
my $harvest_date = $calendar_funcs->display_start_date($row->value());
13461346
return $harvest_date;
1347-
}
1347+
}
13481348
else {
13491349
return;
13501350
}
@@ -1363,7 +1363,7 @@ sub set_transplanting_date {
13631363
});
13641364
$row->value($transplanting_event);
13651365
$row->update();
1366-
}
1366+
}
13671367
else{
13681368
print STDERR "date format did not pass check while preparing to set transplanting date: $transplanting_date \n";
13691369
}
@@ -1377,14 +1377,14 @@ sub remove_transplanting_date {
13771377
my $transplanting_date_cvterm_id = $self->get_transplanting_date_cvterm_id();
13781378
my $row = $self->bcs_schema->resultset('Project::Projectprop')->find_or_create({
13791379
project_id => $self->get_trial_id(),
1380-
type_id => $transplanting_date_cvterm_id,
1380+
type_id => $transplanting_date_cvterm_id,
13811381
value => $transplanting_event,
13821382
});
13831383
if ($row){
13841384
print STDERR "Removing transplanting date $transplanting_event from trial ".$self->get_trial_id()."\n";
13851385
$row->delete();
1386-
}
1387-
}
1386+
}
1387+
}
13881388
else {
13891389
print STDERR "date format did not pass check while preparing to delete transplanting date: $transplanting_date \n";
13901390
}
@@ -5385,6 +5385,71 @@ sub genotyping_protocol_count {
53855385
}
53865386

53875387

5388+
=head2 function delete_empty_transformation_project()
5389+
5390+
Usage:
5391+
Desc:
5392+
Ret:
5393+
Args:
5394+
Side Effects:
5395+
Example:
5396+
5397+
=cut
5398+
5399+
sub delete_empty_transformation_project {
5400+
my $self = shift;
5401+
my $project_id = $self->get_trial_id();
5402+
5403+
if ($self->transformation_id_count() > 0) {
5404+
return 'Cannot delete transformation project with associated transformation IDs.';
5405+
}
5406+
5407+
my $project_owner_schema = CXGN::Phenome::Schema->connect( sub {$self->bcs_schema->storage->dbh()},{on_connect_do => ['SET search_path TO public,phenome;']});
5408+
my $project_owner_row = $project_owner_schema->resultset('ProjectOwner')->find( { project_id=> $project_id });
5409+
if ($project_owner_row) {
5410+
$project_owner_row->delete();
5411+
}
5412+
5413+
eval {
5414+
my $row = $self->bcs_schema->resultset("Project::Project")->find( { project_id=> $project_id });
5415+
$row->delete();
5416+
print STDERR "deleted project ".$project_id."\n";
5417+
};
5418+
if ($@) {
5419+
print STDERR "An error occurred during deletion: $@\n";
5420+
return $@;
5421+
}
5422+
}
5423+
5424+
=head2 function transformation_id_count()
5425+
5426+
Usage:
5427+
Desc: The number of transformation ids associated with this transformation project
5428+
Ret:
5429+
Args:
5430+
Side Effects:
5431+
Example:
5432+
5433+
=cut
5434+
5435+
sub transformation_id_count {
5436+
my $self = shift;
5437+
my $schema = $self->bcs_schema;
5438+
my $project_id = $self->get_trial_id();
5439+
my $transformation_experiment_type_id = SGN::Model::Cvterm->get_cvterm_row($schema, "transformation_experiment", "experiment_type")->cvterm_id();
5440+
5441+
my $q = "SELECT count(nd_experiment_project.nd_experiment_id)
5442+
FROM nd_experiment_project
5443+
JOIN nd_experiment on (nd_experiment_project.nd_experiment_id = nd_experiment.nd_experiment_id)
5444+
WHERE nd_experiment.type_id = ?
5445+
AND nd_experiment_project.project_id = ?";
5446+
my $h = $self->bcs_schema->storage->dbh()->prepare($q);
5447+
$h->execute($transformation_experiment_type_id, $project_id);
5448+
my ($count) = $h->fetchrow_array();
5449+
return $count;
5450+
}
5451+
5452+
53885453

53895454

53905455
1;

0 commit comments

Comments
 (0)