root/trunk/grails-app/views/study/show_samples.gsp @ 1213

Revision 1213, 2.7 KB (checked in by robert@…, 3 years ago)

Improved the study overview page such that the different tabs are loaded when needed. Also rewritten parts of the code. See ticket #155

Line 
1<g:if test="${studyList*.samples.flatten()?.size()==0}">
2  No samples in the selected studies
3</g:if>
4<g:else>
5  <table>
6        <thead>
7          <tr>
8                <g:if test="${multipleStudies}">
9                  <th></th>
10                </g:if>
11
12                  <th>Parent Subject</th>
13                  <th>Parent Sampling Event</th>
14
15
16                <g:each in="${new dbnp.studycapturing.Sample().giveDomainFields()}" var="field">
17                  <th>${field}</th>
18                </g:each>
19
20                <%
21                  // Determine a union of the fields for all different
22                  // samples in all studies. In order to show a proper list.
23                  // We want every field to appear just once,
24                  // so the list is filtered for unique values
25                  sampleTemplates = studyList*.giveSampleTemplates().flatten().unique()
26
27                  if( !sampleTemplates ) {
28                        sampleTemplates = [];
29                        sampleFields = [];
30                        showSampleFields = [];
31                  } else {
32                        sampleFields = sampleTemplates*.fields.flatten().unique()
33                        if( !sampleFields ) {
34                          sampleFields = [];
35                          showSampleFields = [];
36                        } else {
37                          // Filter out all fields that are left blank for all samples
38                          allSamples = studyList*.samples.flatten()
39
40                          showSampleFields = [];
41                          sampleFields.each { sampleField ->
42                                for( sample in allSamples )
43                                {
44                                  // If the field is filled for this subject, we have to
45                                  // show the field and should not check any other
46                                  // samples (hence the break)
47                                  if( sample.fieldExists( sampleField.name ) && sample.getFieldValue( sampleField.name ) ) {
48                                        showSampleFields << sampleField;
49                                        break;
50                                  }
51                                }
52                          }
53                        }
54                  }
55                %>
56
57                <g:each in="${showSampleFields}" var="field">
58                  <th>${field}</th>
59                </g:each>
60
61          </tr>
62        </thead>
63
64        <g:set var="i" value="${1}" />
65
66        <g:each in="${studyList}" var="studyInstance">
67          <%
68                // Sort samples by name
69                samples = studyInstance.samples;
70                sortedSamples = samples.sort( { a, b -> a.name <=> b.name } as Comparator )
71          %>
72
73          <g:each in="${sortedSamples}" var="sample" status="j">
74                <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
75                  <g:if test="${multipleStudies && j==0}">
76                        <td class="studytitle" rowspan="${sortedSamples?.size()}">
77                          ${studyInstance.title}
78                        </td>
79                  </g:if>
80                        <td>${sample.parentSubject?.name}</td>
81                        <td>${sample.parentEvent?.template?.name} at ${sample.parentEvent?.getStartTimeString()}</td>
82                  <g:each in="${sample.giveDomainFields()}" var="field">
83                        <td><wizard:showTemplateField field="${field}" entity="${sample}" /></td>
84                  </g:each>
85
86                  <g:each in="${showSampleFields}" var="field">
87                        <td>
88                          <g:if test="${sample.fieldExists(field.name)}">
89                                <wizard:showTemplateField field="${field}" entity="${sample}" />
90                          </g:if>
91                          <g:else>
92                                N/A
93                          </g:else>
94                        </td>
95                  </g:each>
96
97                </tr>
98                <g:set var="i" value="${i + 1}" />
99          </g:each>
100        </g:each>
101
102  </table>
103</g:else>
Note: See TracBrowser for help on using the browser.