2 package SGN
::Controller
::ActivityInfo
;
5 use URI
::FromHash
'uri';
7 use CXGN
::TrackingActivity
::TrackingIdentifier
;
8 use CXGN
::Stock
::Status
;
9 use CXGN
::People
::Person
;
10 use CXGN
::Transformation
::Transformation
;
13 BEGIN { extends
'Catalyst::Controller'; }
15 sub activity_details
:Path
('/activity/details') : Args
(1) {
18 my $identifier_id = shift;
19 my $schema = $c->dbic_schema('Bio::Chado::Schema', 'sgn_chado');
20 my $dbh = $c->dbc->dbh;
24 $c->res->redirect( uri
( path
=> '/user/login', query
=> { goto_url
=> $c->req->uri->path_query } ) );
28 if ($c->user() && $c->user()->check_roles("curator")) {
29 $user_role = "curator";
32 my $tracking_identifier_obj = CXGN
::TrackingActivity
::TrackingIdentifier
->new({schema
=>$schema, dbh
=>$dbh, tracking_identifier_stock_id
=>$identifier_id});
33 my $tracking_info = $tracking_identifier_obj->get_tracking_identifier_info();
35 my $identifier_name = $tracking_info->[0]->[1];
36 my $material_id = $tracking_info->[0]->[2];
37 my $material_name = $tracking_info->[0]->[3];
38 my $material_type = $tracking_info->[0]->[4];
40 my $updated_status_type = $tracking_info->[0]->[7];
41 my $completed_metadata;
42 my $terminated_metadata;
44 if ($updated_status_type eq 'terminated_metadata') {
45 $status_display = '<span style="color:red">'.'TERMINATED'.'</span>';
46 $terminated_metadata = 1;
47 } elsif ($updated_status_type eq 'completed_metadata') {
48 $status_display = '<span style="color:red">'.'COMPLETED'.'</span>';
49 $completed_metadata = 1;
52 my $associated_projects = $tracking_identifier_obj->get_associated_project_program();
53 my $tracking_project_id = $associated_projects->[0]->[0];
54 my $program_name = $associated_projects->[0]->[3];
55 my $tracking_project = CXGN
::TrackingActivity
::ActivityProject
->new(bcs_schema
=> $schema, trial_id
=> $tracking_project_id);
56 my $activity_type = $tracking_project->get_project_activity_type();
59 my $activity_type_header;
60 if ($activity_type eq 'tissue_culture') {
61 $types = $c->config->{tracking_tissue_culture_info
};
62 $activity_type_header = $c->config->{tracking_tissue_culture_info_header
};
63 } elsif ($activity_type eq 'transformation') {
64 $types = $c->config->{tracking_transformation_info
};
65 $activity_type_header = $c->config->{tracking_transformation_info_header
};
68 my @type_select_options = split ',',$types;
69 my @activity_headers = split ',',$activity_type_header;
72 for my $i (0 .. $#type_select_options) {
73 push @options, [$type_select_options[$i], $activity_headers[$i]];
76 my $updated_status_string;
77 if ($updated_status_type) {
78 my $updated_status = CXGN
::Stock
::Status
->new({ bcs_schema
=> $schema, parent_id
=> $identifier_id, completed_metadata
=> $completed_metadata, terminated_metadata
=> $terminated_metadata});
79 my $updated_status_info = $updated_status->get_status_details();
80 my $person_id = $updated_status_info->[0];
81 my $person= CXGN
::People
::Person
->new($dbh, $person_id);
82 my $person_name=$person->get_first_name()." ".$person->get_last_name();
83 my $operator_info = "Updated by". ":"."".$person_name;
84 my $date_info = "Updated Date". ":"."".$updated_status_info->[1];
85 my $reason_info = "Comments". ":"."".$updated_status_info->[2];
86 my @all_info = ($operator_info, $date_info, $reason_info);
87 my $all_info_string = join("<br>", @all_info);
88 $updated_status_string = '<span style="color:red">'.$all_info_string.'</span>';
91 my $time = DateTime
->now();
92 my $timestamp = $time->ymd()."_".$time->hms();
93 my $date = $time->ymd();
95 my $source_info_string;
96 if ($material_type eq 'transformation') {
97 my $transformation_obj = CXGN
::Transformation
::Transformation
->new({schema
=>$schema, dbh
=>$dbh, transformation_stock_id
=>$material_id});
98 my $info = $transformation_obj->get_transformation_info();
99 my $plant_material_name = $info->[0]->[1];
100 my $vector_name = $info->[0]->[3];
101 my $transformation_project_name = $associated_projects->[0]->[5];
102 my $source_info_hash = {};
103 $source_info_hash->{'breedingProgram'} = $program_name;
104 $source_info_hash->{'transformationProject'} = $transformation_project_name;
105 $source_info_hash->{'transformationID'} = $material_name;
106 $source_info_hash->{'vectorConstruct'} = $vector_name;
107 $source_info_hash->{'plantMaterial'} = $plant_material_name;
108 $source_info_string = encode_json
$source_info_hash;
111 $c->stash->{identifier_id
} = $identifier_id;
112 $c->stash->{identifier_name
} = $identifier_name;
113 $c->stash->{type_select_options
} = \
@options;
114 $c->stash->{activity_headers
} = \
@activity_headers;
115 $c->stash->{material_name
} = $material_name;
116 $c->stash->{material_id
} = $material_id;
117 $c->stash->{material_type
} = $material_type;
118 $c->stash->{updated_status_type
} = $updated_status_type;
119 $c->stash->{updated_status_string
} = $updated_status_string;
120 $c->stash->{status_display
} = $status_display;
121 $c->stash->{timestamp
} = $timestamp;
122 $c->stash->{date
} = $date;
123 $c->stash->{user_role
} = $user_role;
124 $c->stash->{project_id
} = $tracking_project_id;
125 $c->stash->{activity_type
} = $activity_type;
126 $c->stash->{program_name
} = $program_name;
127 $c->stash->{source_info
} = $source_info_string;
128 $c->stash->{template
} = '/tracking_activities/activity_info_details.mas';
133 sub record_activity
:Path
('/activity/record') :Args
(0) {
136 my $schema = $c->dbic_schema('Bio::Chado::Schema', 'sgn_chado');
137 my $dbh = $c->dbc->dbh;
139 my $identifier_name = $c->req->param("identifier_name");
142 $c->res->redirect( uri
( path
=> '/user/login', query
=> { goto_url
=> $c->req->uri->path_query } ) );
147 my $check_vendor_role = $c->user->check_roles('vendor');
148 $c->stash->{check_vendor_role
} = $check_vendor_role;
153 my @activity_headers = ();
154 my $material_stock_id;
157 my $tracking_project_id;
160 my $source_info_string;
162 if ($identifier_name) {
163 my $identifier_rs = $schema->resultset("Stock::Stock")->find({uniquename
=> $identifier_name});
164 if (!$identifier_rs) {
165 $c->stash->{message
} = "The tracking identifier does not exist or has been deleted.";
166 $c->stash->{template
} = 'generic_message.mas';
169 $identifier_id = $identifier_rs->stock_id();
172 my $tracking_identifier_obj = CXGN
::TrackingActivity
::TrackingIdentifier
->new({schema
=>$schema, dbh
=>$dbh, tracking_identifier_stock_id
=>$identifier_id});
173 my $associated_projects = $tracking_identifier_obj->get_associated_project_program();
174 $program_name = $associated_projects->[0]->[3];
175 my $material_info = $tracking_identifier_obj->get_tracking_identifier_info();
176 $material_stock_id = $material_info->[0]->[2];
177 $material_name = $material_info->[0]->[3];
178 $material_type = $material_info->[0]->[4];
180 if ($material_type eq 'transformation') {
181 my $transformation_obj = CXGN
::Transformation
::Transformation
->new({schema
=>$schema, dbh
=>$dbh, transformation_stock_id
=>$material_stock_id});
182 my $info = $transformation_obj->get_transformation_info();
183 my $plant_material_name = $info->[0]->[1];
184 my $vector_name = $info->[0]->[3];
185 my $transformation_project_name = $associated_projects->[0]->[5];
186 my $source_info_hash = {};
187 $source_info_hash->{'breedingProgram'} = $program_name;
188 $source_info_hash->{'transformationProject'} = $transformation_project_name;
189 $source_info_hash->{'transformationID'} = $material_name;
190 $source_info_hash->{'vectorConstruct'} = $vector_name;
191 $source_info_hash->{'plantMaterial'} = $plant_material_name;
192 $source_info_string = encode_json
$source_info_hash;
195 $tracking_project_id = $associated_projects->[0]->[0];
196 my $tracking_project = CXGN
::TrackingActivity
::ActivityProject
->new(bcs_schema
=> $schema, trial_id
=> $tracking_project_id);
197 $activity_type = $tracking_project->get_project_activity_type();
200 my $activity_type_header;
201 if ($activity_type eq 'tissue_culture') {
202 $types = $c->config->{tracking_tissue_culture_info
};
203 $activity_type_header = $c->config->{tracking_tissue_culture_info_header
};
204 } elsif ($activity_type eq 'transformation') {
205 $types = $c->config->{tracking_transformation_info
};
206 $activity_type_header = $c->config->{tracking_transformation_info_header
};
209 my @type_select_options = split ',',$types;
210 @activity_headers = split ',',$activity_type_header;
212 for my $i (0 .. $#type_select_options) {
213 push @options, [$type_select_options[$i], $activity_headers[$i]];
217 my $time = DateTime
->now();
218 my $timestamp = $time->ymd()."_".$time->hms();
219 my $date = $time->ymd();
221 $c->stash->{identifier_id
} = $identifier_id;
222 $c->stash->{type_select_options
} = \
@options;
223 $c->stash->{activity_headers
} = \
@activity_headers;
224 $c->stash->{material_stock_id
} = $material_stock_id;
225 $c->stash->{material_name
} = $material_name;
226 $c->stash->{material_type
} = $material_type;
227 $c->stash->{timestamp
} = $timestamp;
228 $c->stash->{date
} = $date;
229 $c->stash->{project_id
} = $tracking_project_id;
230 $c->stash->{activity_type
} = $activity_type;
231 $c->stash->{program_name
} = $program_name;
232 $c->stash->{source_info
} = $source_info_string;
233 $c->stash->{template
} = '/tracking_activities/record_activity.mas';