Merge pull request #5280 from solgenomics/5714_phenotype_genotype_data_check
[sgn.git] / lib / CXGN / BrAPI / v2 / Seasons.pm
blobbccca73142a055303292a1c3820f039665bb4cae
1 package CXGN::BrAPI::v2::Seasons;
3 use Moose;
4 use Data::Dumper;
5 use SGN::Model::Cvterm;
6 use CXGN::Trial;
7 use CXGN::Trial::Search;
8 use CXGN::Trial::TrialLayout;
9 use CXGN::Trait;
10 use CXGN::Stock;
11 use CXGN::Phenotypes::SearchFactory;
12 use CXGN::Phenotypes::PhenotypeMatrix;
13 use CXGN::BrAPI::Pagination;
14 use CXGN::BrAPI::FileResponse;
15 use CXGN::BrAPI::JSONResponse;
16 use JSON;
18 extends 'CXGN::BrAPI::v2::Common';
20 sub search {
21 my $self = shift;
22 my $params = shift;
23 my $page_size = $self->page_size;
24 my $page = $self->page;
25 my $status = $self->status;
26 my $year_filter = $params->{seasonDbId} || ($params->{year} || ());
28 my @data;
29 my $total_count = 0;
30 my $year_cvterm_id = SGN::Model::Cvterm->get_cvterm_row($self->bcs_schema,'project year', 'project_property')->cvterm_id();
31 my $project_years_rs = $self->bcs_schema()->resultset("Project::Project")->search_related('projectprops', {'projectprops.type_id'=>$year_cvterm_id});
32 my %unique_years;
33 while (my $p_year = $project_years_rs->next()) {
34 $unique_years{$p_year->value} = $p_year->projectprop_id;
36 my @sorted_years;
37 foreach (sort keys %unique_years){
38 my ($year, $season) = split '\|', $_;
39 if ( $year_filter && ! grep { $_ eq $year } @{$year_filter} ) { next;};
41 push @sorted_years, [$year, $season, $_];
44 my ($data_window, $pagination) = CXGN::BrAPI::Pagination->paginate_array(\@sorted_years, $page_size, $page);
45 foreach (@$data_window){
46 my $year = $_->[0] ? $_->[0] : '';
47 my $season = $_->[1] ? $_->[1] : '';
48 my $projectprop_id = $_->[2] ? $_->[2] : '';
49 push @data, {
50 seasonDbId=>qq|$projectprop_id|,
51 season=>$season,
52 year=>$year
55 my %result = (data=>\@data);
56 my @data_files;
57 return CXGN::BrAPI::JSONResponse->return_success(\%result, $pagination, \@data_files, $status, 'Seasons list result constructed');
60 sub detail {
61 my $self = shift;
62 my $year_filter = shift;
63 my $page_size = $self->page_size;
64 my $page = $self->page;
65 my $status = $self->status;
66 my @data;
67 my $total_count = 0;
68 my $year_cvterm_id = SGN::Model::Cvterm->get_cvterm_row($self->bcs_schema,'project year', 'project_property')->cvterm_id();
69 my $project_years_rs = $self->bcs_schema()->resultset("Project::Project")->search_related('projectprops', {'projectprops.type_id'=>$year_cvterm_id});
70 my %unique_years;
71 while (my $p_year = $project_years_rs->next()) {
72 $unique_years{$p_year->value} = $p_year->projectprop_id;
74 my @sorted_years;
75 foreach (sort keys %unique_years){
76 my ($year, $season) = split '\|', $_;
77 if ($year_filter){
78 if ($year eq $year_filter){
79 push @sorted_years, [$year, $season, $_];
81 } else {
82 push @sorted_years, [$year, $season, $_];
86 my ($data_window, $pagination) = CXGN::BrAPI::Pagination->paginate_array(\@sorted_years, $page_size, $page);
87 foreach (@$data_window){
88 my $year = $_->[0] ? $_->[0] : '';
89 my $season = $_->[1] ? $_->[1] : '';
90 my $projectprop_id = $_->[2] ? $_->[2] : '';
91 push @data, {
92 seasonDbId=>qq|$projectprop_id|,
93 seasonName=>$season,
94 year=>int($year)
98 my @data_files;
99 return CXGN::BrAPI::JSONResponse->return_success(@data, $pagination, \@data_files, $status, 'Seasons list result constructed');