Merge pull request #5290 from solgenomics/topic/fix_upload_pehno
[sgn.git] / lib / SGN / Controller / ActivityInfo.pm
blobedbd55b248a2f63bb39c96121b9913c7e167247e
2 package SGN::Controller::ActivityInfo;
4 use Moose;
5 use URI::FromHash 'uri';
6 use Data::Dumper;
7 use CXGN::TrackingActivity::TrackingIdentifier;
8 use CXGN::Stock::Status;
9 use CXGN::People::Person;
10 use CXGN::Transformation::Transformation;
11 use JSON;
13 BEGIN { extends 'Catalyst::Controller'; }
15 sub activity_details :Path('/activity/details') : Args(1) {
16 my $self = shift;
17 my $c = shift;
18 my $identifier_id = shift;
19 my $schema = $c->dbic_schema('Bio::Chado::Schema', 'sgn_chado');
20 my $dbh = $c->dbc->dbh;
21 my $user_role;
23 if (! $c->user()) {
24 $c->res->redirect( uri( path => '/user/login', query => { goto_url => $c->req->uri->path_query } ) );
25 return;
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;
43 my $status_display;
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();
58 my $types;
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;
71 my @options = ();
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) {
134 my $self = shift;
135 my $c = shift;
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");
141 if (! $c->user()) {
142 $c->res->redirect( uri( path => '/user/login', query => { goto_url => $c->req->uri->path_query } ) );
143 return;
146 if ($c->user) {
147 my $check_vendor_role = $c->user->check_roles('vendor');
148 $c->stash->{check_vendor_role} = $check_vendor_role;
151 my $identifier_id;
152 my @options = ();
153 my @activity_headers = ();
154 my $material_stock_id;
155 my $material_name;
156 my $material_type;
157 my $tracking_project_id;
158 my $activity_type;
159 my $program_name;
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';
167 return;
168 } else {
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();
199 my $types;
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';