1 package CXGN
::TrialStatus
;
6 CXGN::TrialStatus - a class to record trial status
10 The projectprop of type "trial_status_json" is stored as JSON.
14 my $trial_status = CXGN::TrialStatus->new( { schema => $schema});
18 Titima Tantikanjana <tt15@cornell.edu>
25 extends
'CXGN::JSONProp';
29 use SGN
::Model
::Cvterm
;
31 has
'trial_activities' => (isa
=> 'HashRef', is
=> 'rw');
33 has
'activity_list' => (isa
=> 'ArrayRef', is
=> 'rw');
39 $self->prop_table('projectprop');
40 $self->prop_namespace('Project::Projectprop');
41 $self->prop_primary_key('projectprop_id');
42 $self->prop_type('trial_status_json');
43 $self->cv_name('project_property');
44 $self->allowed_fields([ qw
| trial_activities
| ]);
45 $self->parent_table('project');
46 $self->parent_primary_key('project_id');
51 sub get_trial_activities
{
53 my $schema = $self->bcs_schema();
54 my $people_schema = $self->people_schema();
55 my $project_id = $self->parent_id();
56 my $type = $self->prop_type();
57 my $type_id = $self->_prop_type_id();
58 my $activity_list = $self->activity_list();
59 my @activities = @
$activity_list;
60 my $key_ref = $self->allowed_fields();
61 my @fields = @
$key_ref;
63 my $trial_activities_rs = $schema->resultset("Project::Projectprop")->find({ project_id
=> $project_id, type_id
=> $type_id });
64 my @all_trial_activities;
65 if ($trial_activities_rs) {
70 my $activities_json = $trial_activities_rs->value();
71 my $activities_hash = JSON
::Any
->jsonToObj($activities_json);
72 my $all_activities = $activities_hash->{'trial_activities'};
73 my %activities_hash = %{$all_activities};
74 if ($activities_hash{'Trial Created'}) {
75 $user_id = $activities_hash{'Trial Created'}{'user_id'};
76 $activity_date = $activities_hash{'Trial Created'}{'activity_date'};
77 $person = $people_schema->resultset("SpPerson")->find( { sp_person_id
=> $user_id } );
78 $person_name = $person->first_name." ".$person->last_name();
79 push @all_trial_activities, ['Trial Created', $activity_date, $person_name];
80 } elsif ($activities_hash{'Trial Uploaded'}) {
81 $user_id = $activities_hash{'Trial Uploaded'}{'user_id'};
82 $activity_date = $activities_hash{'Trial Uploaded'}{'activity_date'};
83 $person = $people_schema->resultset("SpPerson")->find( { sp_person_id
=> $user_id } );
84 $person_name = $person->first_name." ".$person->last_name();
85 push @all_trial_activities, ['Trial Uploaded', $activity_date, $person_name];
88 foreach my $activity_type (@activities) {
89 if ($activities_hash{$activity_type}) {
90 $user_id = $activities_hash{$activity_type}{'user_id'};
91 $activity_date = $activities_hash{$activity_type}{'activity_date'};
92 $person = $people_schema->resultset("SpPerson")->find( { sp_person_id
=> $user_id } );
93 $person_name = $person->first_name." ".$person->last_name();
94 push @all_trial_activities, [$activity_type, $activity_date, $person_name];
96 push @all_trial_activities, [$activity_type, 'NA', 'NA']
101 return \
@all_trial_activities;
105 sub get_latest_activity
{
108 my $schema = $self->bcs_schema();
109 my $project_id = $self->parent_id();
110 my $type = $self->prop_type();
111 my $type_id = $self->_prop_type_id();
113 my $row = $self->bcs_schema->resultset('Project::Projectprop')->find({
114 project_id
=> $project_id,
118 my $activity_list = $self->activity_list();
119 my @activity_array = @
$activity_list;
120 my @reverse_activities = reverse@activity_array;
121 push @reverse_activities, ("Trial Created", "Trial Uploaded");
122 my $latest_trial_activity;
125 my $trial_activity_json = $row->value();
126 my $activity_hash_ref = JSON
::Any
->jsonToObj($trial_activity_json);
127 my $all_activities = $activity_hash_ref->{'trial_activities'};
128 my %activities_hash = %{$all_activities};
130 foreach my $activity_type (@reverse_activities) {
131 if ($activities_hash{$activity_type}) {
132 my $activity_date = $activities_hash{$activity_type}{'activity_date'};
133 $latest_trial_activity = $activity_type." : ".$activity_date;
139 return $latest_trial_activity