source: trunk/grails-app/views/run/show.gsp @ 43

Last change on this file since 43 was 43, checked in by robert@…, 8 years ago

Improved sample editing

File size: 8.9 KB
Line 
1<html>
2        <head>
3                <meta name="layout" content="main" />
4                <title>Show run ${run.name} | Mass Sequencing | dbNP</title>
5               
6                <link rel="stylesheet" href="<g:resource dir="css" file="showAssay.css" />" type="text/css"/>
7                <link rel="stylesheet" href="<g:resource dir="css" file="fileuploader.new.css" />" type="text/css"/>
8               
9                <g:javascript src="jquery.ui.tabbeddialog.js" />
10                <g:javascript src="addFilesDialog.js" />
11                <g:javascript src="enterTagsDialog.js" />
12
13                <g:javascript src="run.show.enterTagsDialog.js" />
14                <g:javascript src="run.show.assayDialog.js" />
15                <g:javascript src="run.show.runDialog.js" />
16                <g:javascript src="run.show.addSamplesDialog.js" />
17                <g:javascript src="showSampleDialogUniversal.js" />
18
19                <g:javascript src="assay.show.showRunDialog.js" />
20
21                <g:javascript src="fileuploads.new.js" />
22               
23                <script>
24                        var runId = ${run.id};
25                        var numOtherAssays = ${otherAssays.size()};
26
27                        // Create a variable with assay names to check for existing names
28                        var runNames = [];
29                        <g:each in="${allRuns}" var="currentrun">
30                                runNames[ runNames.length ] = {id: ${currentrun.id}, name: '${currentrun.name}', alreadyAdded: false };
31                        </g:each>
32                       
33                        function initializeUploadedFiles( selector ) {
34                                if( selector == undefined )
35                                        selector = "";
36                               
37                                $( selector + ' .uploadedFile').each( function( idx, el ) {
38                                        $(el).html( createFileHTML( $(el).text(), 'getPermanent' ) );
39                                });
40                        }
41
42                        // Initializefiles on load
43                        $(function() { initializeUploadedFiles(); });
44                </script>
45        </head>
46<body>
47        <h1>
48                Run ${run.name}
49        </h1>
50       
51        <div id="editRunDialog" class="dialog"></div>
52        <div class="blok_data">
53                <label>Run</label>: ${run.name}<br />
54                <label>Date</label>: <g:formatDate format="dd-MM-yyyy" date="${run.date}"/><br />
55                <label>Supplier</label>: ${run.supplier}<br />
56                <label>Machine</label>: ${run.machine}<br />
57                <label>Parameters</label>: <g:uploadedFile value="${run.parameterFile}" /><br />
58        </div>
59        <div class="blok_data">
60                <label># assays</label>: ${run.assays?.size()}
61                <% def numHidden = run.assays?.findAll { !it.study.canRead( session.user ) }.size() ; %>
62                <g:if test="${numHidden}">
63                        (${numHidden}
64                        <a href="#" onClick="alert( '${numHidden} assay(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
65                        hidden</a>)
66                </g:if>
67                <br />
68       
69                <label># samples</label>: ${run.assaySamples?.size()}
70                <% numHidden = run.assaySamples?.findAll { !it.assay?.study.canRead( session.user ) }.size() ; %>
71                <g:if test="${numHidden}">
72                        (${numHidden}
73                        <a href="#" onClick="alert( '${numHidden} sample(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
74                        hidden</a>)
75                </g:if>
76                <br />
77                <label># sequences</label>: ${run.numSequences()}<br />
78                <label># files</label>: ${run.numFiles()}<br />
79        </div>
80        <p class="options">
81                <a class="edit" href="#" onClick="showEditRunDialog( ${run.id} ); return false;">Edit run</a>
82        </p>
83       
84        <!-- Samples -->
85        <h2>Samples</h2>
86        <% def assaySamples = run.assaySamples ? run.assaySamples.findAll { it.assay?.study.canRead( session.user ) }.toList().sort { it.sample.name } : []; %>
87        <g:if test="${assaySamples.size() == 0}">
88                No samples found in run.
89        </g:if>
90        <g:else>
91                <table class="paginate">
92                        <thead>
93                                <tr>
94                                        <th nowrap>name</th>
95                                        <th nowrap>study</th>
96                                        <th nowrap>assay</th>
97                                        <th nowrap>Forward mid</th>
98                                        <th nowrap># sequences</th>
99                                        <th nowrap># qual</th>
100                                        <th class="nonsortable"></th>
101                                        <th class="nonsortable"></th>
102                                </tr>
103                        </thead>                       
104                        <tbody>
105                                <g:each in="${assaySamples}" var="assaySample">
106                                        <tr>
107                                                <td><a href="#" onClick="showSample(${assaySample.id}, 'run'); return false;">${assaySample.sample.name}</a></td>
108                                                <td>${assaySample.assay.study.name}</td>
109                                                <td>${assaySample.assay.name}</td>
110                                                <td>${assaySample.fwMidName}</td>
111                                                <td>
112                                                        <g:if test="${assaySample.numSequenceFiles() > 0}">
113                                                                ${assaySample.numSequences()}
114                                                        </g:if>
115                                                        <g:else>
116                                                                -
117                                                        </g:else>
118                                                </td>
119                                                <td>
120                                                        <g:if test="${assaySample.numQualityFiles() > 0}">
121                                                                ${assaySample.numQualScores()}
122                                                        </g:if>
123                                                        <g:else>
124                                                                -
125                                                        </g:else>
126                                                </td>
127                                                <td class="button">
128                                                        <g:if test="${!assaySample.assay.study.canWrite(session.user)}">
129                                                                <img src="${fam.icon(name: 'pencil')}" class="disabled" title="You can't edit this sample because you don't have sufficient privileges." />
130                                                        </g:if>
131                                                        <g:else>
132                                                                <a onClick="openEditSampleDialog(${assaySample.id});" href="#"><img src="${fam.icon(name: 'pencil')}" /></a>
133                                                        </g:else>
134                                                </td>
135                                                <td class="button">
136                                                        <g:if test="${!assaySample.assay.study.canWrite(session.user)}">
137                                                                <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this sample because you don't have sufficient privileges." />
138                                                        </g:if>
139                                                        <g:else>
140                                                                <g:link onClick="return confirm( 'Are you sure you want to remove the selected sample from this run?' );" controller="run" action="removeSample" id="${run.id}" params="${[assaySampleId: assaySample.id]}" ><img src="${fam.icon(name: 'application_delete')}" /></g:link>
141                                                        </g:else>
142                                                </td>
143                                        </tr>
144                                </g:each>
145                        </tbody>
146                </table>
147                <div id="showSampleDialog" class="dialog"></div>
148        </g:else>       
149        <g:if test="${editable}">
150                <p class="options">
151                        <% def writableAssaySamples = assaySamples.findAll { it.assay.study.canWrite( session.user ) } %>
152                        <a class="addAssociation" onClick="showAddSamplesDialog();" href="#">Add samples</a>
153
154                        <g:if test="${writableAssaySamples.size() > 0}">
155                                <a class="editAssociation" onClick="showEnterTagsDialog();" href="#">Edit sample data</a>
156                        </g:if>
157                        <g:else>
158                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit sample data</a>
159                        </g:else>
160
161                        <g:if test="${writableAssaySamples.size() == 0 || !run.assays?.size()}">
162                                <a class="addSequences disabled" onClick="return false;" href="#">Add sequence files</a>
163                        </g:if>
164                        <g:else>
165                                <a class="addSequences" onClick="showAddFilesDialog();" href="#">Add sequence files</a>
166                        </g:else>
167
168                </p>
169                <g:if test="${writableAssaySamples.size() > 0}">
170                        <g:render template="enterTagsDialog" model="[run: run, writableAssaySamples: writableAssaySamples]" />
171                        <g:render template="addFilesDialog" model="[run: run]" />
172                </g:if>
173               
174                <g:render template="addSamplesDialog" model="[run: run]" />
175               
176                </g:if>
177
178
179
180        <!-- Runs -->
181        <h2>Assays</h2>
182        <g:if test="${run.assays == null || run.assays.size() == 0}">
183                No assay found for this run
184        </g:if>
185        <g:else>
186                <table class="paginate">
187                        <thead>
188                                <tr>
189                                        <th nowrap>name</th>
190                                        <th nowrap>study</th>
191                                        <th nowrap># samples</th>
192                                        <th nowrap>other runs</th>
193                                        <th class="nonsortable"></th>
194                                </tr>
195                        </thead>                       
196                        <tbody>
197                                <% def assays = run.assays.findAll { it.study.canRead( session.user ) }.toList().sort { it.name }; %>
198                                <g:each in="${assays}" var="assay">
199                                        <tr>
200                                                <td><g:link controller="assay" action="show" id="${assay.id}">${assay.name}</g:link></td>
201                                                <td>${assay.study?.name}</td>
202                                                <td>${assay.assaySamples?.size()}</td>
203                                                <td>
204                                                        <g:if test="${assay.runs?.size() == 1}">
205                                                                <% /* If only 1 run is found, then it is the current one */ %>
206                                                                -
207                                                        </g:if>
208                                                        <g:else>
209                                                                <g:each in="${assay.runs - run}" var="otherRun">
210                                                                        <g:link action="show" id="${otherRun.id}">${otherRun.name}</g:link><br />
211                                                                </g:each>
212                                                        </g:else>
213                                                </td>
214                                                <td class="button">
215                                                        <g:if test="${run.samples(assay.id).size()}">
216                                                                <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this assay because sequences from this assay are coupled to this run." />
217                                                        </g:if>
218                                                        <g:else>
219                                                                <g:if test="${!assay.study.canWrite(session.user)}">
220                                                                        <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this assay because you don't have sufficient privileges." />
221                                                                </g:if>
222                                                                <g:else>
223                                                                        <g:link onClick="return confirm( 'Are you sure you want to remove the selected assay from this run?' );" controller="run" action="removeAssay" id="${run.id}" params="${[assay_id: assay.id]}" ><img src="${fam.icon(name: 'application_delete')}" /></g:link>
224                                                                </g:else>
225                                                        </g:else>
226                                                </td>
227                                        </tr>
228                                </g:each>
229                        </tbody>
230                </table>
231        </g:else>
232        <% def writableAssays = otherAssays.findAll { it.study.canWrite( session.user ) } %>
233        <g:if test="${editable}">
234                <p class="options">
235                        <g:if test="${writableAssays.size() > 0}">
236                                <a class="addAssociation" href="#" onClick="showAddAssayDialog();">Add assay</a>
237                        </g:if>
238                        <g:else>
239                                <a class="addAssociation disabled" href="#" onClick="return false;">Add assay</a>
240                        </g:else>
241                </p>
242                <g:if test="${writableAssays.size() > 0}">
243                        <g:render template="addAssayDialog" model="[run: run, writableAssays: writableAssays]" />
244                </g:if>
245        </g:if>
246        <div id="showRunDialog" class="dialog"></div>
247</body>
248</html>
Note: See TracBrowser for help on using the repository browser.