source: trunk/grails-app/views/study/show_subjects.gsp @ 1430

Last change on this file since 1430 was 1430, checked in by work@…, 10 years ago
  • set keyword expansion
  • Property svn:keywords set to Rev Author Date
File size: 3.0 KB
Line 
1  <g:if test="${studyList*.subjects?.flatten()?.size()==0}">
2        No subjects 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                  <g:each in="${new dbnp.studycapturing.Subject().giveDomainFields()}" var="field">
12                        <th>${field}</th>
13                  </g:each>
14
15                  <%
16                        // Determine a union of the fields for all different
17                        // subjects in all studies. In order to show a proper list.
18                        // We want every field to appear just once, so the list is filtered
19                        // for unique names. This ensures that different template fields with
20                        // the same name, show up in the same column. This might happen when
21                        // both humans and mice are shown, where humans have a weight in kgs
22                        // and mice have a weight in grams.
23                        subjectTemplates = studyList*.giveSubjectTemplates()?.flatten().unique()
24                        if( !subjectTemplates ) {
25                          subjectTemplates = [];
26                          subjectFields = [];
27                        } else {
28                          subjectFields = subjectTemplates*.fields?.flatten().name.unique()
29                          if( !subjectFields ) {
30                                subjectFields = [];
31                          }
32                        }
33
34                        /*
35                         * These lines are rewritten because
36                         * performance sucked
37                         *
38                         *   // These took about 9 seconds (for 31 subjects and
39                         *   allSubjects = studyList*.subjects?.flatten()
40                         *
41                         *   subjectFields = subjectFields.findAll { subjectField ->
42                         *     ( true in allSubjects.collect { subject -> subject.fieldExists( subjectField.name ) && subject.getFieldValue( subjectField.name ) != null }.flatten() )
43                         *   }
44                         */
45
46                        // Filter out all fields that are left blank for all subjects
47                        allSubjects = studyList*.subjects?.flatten()
48
49                        showSubjectFields = []
50                        subjectFields.each { subjectField ->
51                          for( subject in allSubjects )
52                          {
53                                // If the field is filled for this subject, we have to
54                                // show the field and should not check any other
55                                // subjects (hence the break)
56                                if( subject.fieldExists( subjectField ) && subject.getFieldValue( subjectField ) ) {
57                                  showSubjectFields << subjectField;
58                                  break;
59                                }
60                          }
61                        }
62                  %>
63
64                  <g:each in="${showSubjectFields}" var="field">
65                        <th>${field}</th>
66                  </g:each>
67
68                </tr>
69          </thead>
70
71          <g:set var="i" value="${1}" />
72
73          <g:each in="${studyList}" var="studyInstance">
74                <g:each in="${studyInstance.subjects}" var="subject" status="j">
75                  <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
76                        <g:if test="${multipleStudies && j==0}">
77                          <td class="studytitle" rowspan="${studyInstance.subjects?.size()}">
78                                ${studyInstance.title}
79                          </td>
80                        </g:if>
81                        <g:each in="${subject.giveDomainFields()}" var="field">
82                          <td><wizard:showTemplateField field="${field}" entity="${subject}" /></td>
83                        </g:each>
84
85                        <g:each in="${showSubjectFields}" var="fieldname">
86                          <td>
87                                <g:if test="${subject.fieldExists(fieldname)}">
88                                        <g:set var="field" value="${subject.getField(fieldname)}" />
89                                        <wizard:showTemplateField field="${field}" entity="${subject}" />
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        </table>
102  </g:else>
Note: See TracBrowser for help on using the repository browser.