1 package CXGN
::TrackingActivity
::AddTrackingIdentifier
;
5 CXGN::TrackingActivity::AddTrackingIdentifier - a module to add tracking identifier.
14 Titima Tantikanjana (tt15@cornell.edu)
19 use MooseX
::FollowPBP
;
20 use Moose
::Util
::TypeConstraints
;
22 use SGN
::Model
::Cvterm
;
27 isa
=> 'DBIx::Class::Schema',
31 has
'phenome_schema' => (
33 isa
=> 'DBIx::Class::Schema',
37 has
'tracking_identifier' => (
63 my $schema = $self->get_schema();
64 my $phenome_schema = $self->get_phenome_schema();
65 my $tracking_identifier = $self->get_tracking_identifier();
66 my $material_name = $self->get_material();
67 my $project_id = $self->get_project_id();
68 my $user_id = $self->get_user_id();
71 my $tracking_identifier_cvterm_id = SGN
::Model
::Cvterm
->get_cvterm_row($schema, 'tracking_identifier', 'stock_type')->cvterm_id();
72 my $material_of_cvterm_id = SGN
::Model
::Cvterm
->get_cvterm_row($schema, 'material_of', 'stock_relationship')->cvterm_id();
73 my $experiment_type_cvterm_id = SGN
::Model
::Cvterm
->get_cvterm_row($schema, 'tracking_activity', 'experiment_type')->cvterm_id();
74 my $project_location_cvterm_id = SGN
::Model
::Cvterm
->get_cvterm_row($schema, 'project location', 'project_property')->cvterm_id();
75 my $geolocation_rs = $schema->resultset("Project::Projectprop")->find({project_id
=> $project_id, type_id
=> $project_location_cvterm_id});
79 my $check_id_rs = $schema->resultset("Stock::Stock")->search({
80 uniquename
=> $tracking_identifier,
82 if ($check_id_rs->count() > 0){
83 return { error
=> "$tracking_identifier already used in the database! " };
87 my $tracking_id_rs = $schema->resultset("Stock::Stock")->create({
88 name
=> $tracking_identifier,
89 uniquename
=> $tracking_identifier,
90 type_id
=> $tracking_identifier_cvterm_id,
92 $tracking_id = $tracking_id_rs->stock_id();
94 my $material_rs = $schema->resultset("Stock::Stock")->find({ uniquename
=> $material_name});
95 my $tracking_material = $schema->resultset("Stock::StockRelationship")->find_or_create({
96 subject_id
=> $material_rs->stock_id,
97 object_id
=> $tracking_id,
98 type_id
=> $material_of_cvterm_id,
101 my $experiment = $schema->resultset('NaturalDiversity::NdExperiment')->create({
102 nd_geolocation_id
=> $geolocation_rs->value,
103 type_id
=> $experiment_type_cvterm_id,
106 $experiment->find_or_create_related('nd_experiment_stocks' , {
107 stock_id
=> $tracking_id,
108 type_id
=> $experiment_type_cvterm_id,
111 $experiment->find_or_create_related('nd_experiment_projects', {
112 project_id
=> $project_id,
119 $schema->txn_do($coderef);
125 return { error
=> "Error creating a tracking identifier: $error\n" };
128 $phenome_schema->resultset("StockOwner")->find_or_create({
129 stock_id
=> $tracking_id,
130 sp_person_id
=> $user_id,
133 return {tracking_id
=> $tracking_id};