Merge pull request #5056 from solgenomics/topic/generic_seedlot_upload
[sgn.git] / mason / gem / template / probe_composition.mas
blob0a028e27743287c21094a51294357e42c77aa432
1 <%doc>
3 =head1 NAME 
4  
5  probe_composition.mas
6  Mason code to get probe composition data and show it in a web_page.
8 =cut
10 =head1 VERSION 
12 0.1
14 =cut 
16 =head1 DESCRIPTION
18  Mason code to get probe composition data and show it in a web_page.
20  Its controller is: template_design.pl
22 =cut
24 =head 1 AUTHOR
26  Aureliano Bombarely (ab782@cornell.edu)
28 =cut 
30 </%doc>
33 <%args>
34 $template
35 </%args>
37 <%perl>
38 use strict;
39 use warnings;
41 use CXGN::Page::FormattingHelpers  qw/ info_section_html info_table_html columnar_table_html page_title_html html_break_string /;
44 my $probe_comp_content;
45 my $probe_composition_html;
47 my $default_message = '<i><font color="gray">data not available</font></i>';
49 ## If there aren't any template_row that comes from template it will do nothing. The error message will returned by basic information
51 my @probe_list;
52 my $probe_n = 0;
54 if (defined $template->get_template_id() ) {
56     ## Get schema
57     
58     my $schema = $template->get_schema();
59     
60     ## Get the data from the row as hash
61      
62     my $template_id = $template->get_template_id();
63      
64     ## Search probe data, put into an array and use columnar table to give the html format. If don't exists any data, print message.
66      
67     my @probes_rows = $schema->resultset('GeProbe')
68                              ->search( { template_id => $template_id } );
70     $probe_n = scalar(@probes_rows);
72     if ($probe_n > 0) {
73         foreach my $probe_row (@probes_rows) {
74         
75             my %probe_data = $probe_row->get_columns();
76             my $probe_name = $probe_data{'probe_name'};
78             my $probe_link = '/sedm/probe.pl?id='.$probe_data{'probe_id'};   ## It will be used when the
79                                                                              ## when the code to get sequences
80                                                                              ## will be developed
82             my $probe_type = $probe_data{'probe_type'} || $default_message;
83             my $start_coord = $probe_data{'template_start'} || $default_message;
84             my $end_coord = $probe_data{'template_end'} || $default_message;
86             my @spots = $schema->resultset('GeProbeSpot')
87                                ->search( { probe_id => $probe_data{'probe_id'} } );
88             
89             my $spots_n = scalar(@spots) || $default_message;
91             push @probe_list, [ $probe_name, $probe_type, $start_coord, $end_coord, $spots_n];
92        }
94        $probe_composition_html = columnar_table_html( headings => [ 'Probe name', 
95                                                                    'Probe type', 
96                                                                    'Template start coord', 
97                                                                    'Template end coord',
98                                                                    'Spots' ],
99                                                        data     => \@probe_list,
100                                                        __align  => ['l', 'c', 'c', 'c', 'c'],
101                                                     );
102     } else {
103       $probe_composition_html = 'None probe was found associated to this template';
104    }
105    $probe_comp_content = info_section_html( title       => "Probe Composition (". $probe_n .")", 
106                                             contents    => $probe_composition_html,
107                                             collapsible =>1,
108                                             collapsed   =>1, );
113 </%perl>
115 <% $probe_comp_content %>
118 <& 
119    /util/import_javascript.mas, 
120    classes => 'CXGN.Effects'