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

Last change on this file since 74 was 74, checked in by robert@…, 8 years ago
  • Several bugfixes
  • Added an extra step in the worker process for importing data
File size: 11.4 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="editSampleDialog.js" />
12                <g:javascript src="enterTagsDialog.js" />
13
14                <g:javascript src="run.show.enterTagsDialog.js" />
15                <g:javascript src="run.show.assayDialog.js" />
16                <g:javascript src="run.show.runDialog.js" />
17                <g:javascript src="run.show.addSamplesDialog.js" />
18                <g:javascript src="showSampleDialogUniversal.js" />
19
20                <g:javascript src="assay.show.showRunDialog.js" />
21
22                <g:javascript src="fileuploads.new.js" />
23               
24                <script>
25                        var runId = ${run.id};
26                        var numOtherAssays = ${otherAssays.size()};
27
28                        // Create a variable with assay names to check for existing names
29                        var runNames = [];
30                        <g:each in="${allRuns}" var="currentrun">
31                                runNames[ runNames.length ] = {id: ${currentrun.id}, name: '${currentrun.name}', alreadyAdded: false };
32                        </g:each>
33
34                        // Initializefiles on load
35                        $(function() { initializeUploadedFiles(); });
36                </script>
37        </head>
38<body>
39        <h1>
40                Run ${run.name}
41        </h1>
42       
43        <div id="editRunDialog" class="dialog"></div>
44        <div id="editSampleDialog" class="dialog"></div>
45       
46        <div class="blok_data">
47                <label>Run</label>: ${run.name}<br />
48                <label>Date</label>: <g:formatDate format="dd-MM-yyyy" date="${run.date}"/><br />
49                <label>Supplier</label>: ${run.supplier}<br />
50                <label>Machine</label>: ${run.machine}<br />
51                <label>Parameters</label>: <g:uploadedFile value="${run.parameterFile}" /><br />
52        </div>
53        <div class="blok_data">
54                <%
55                        def numAssays = run.numAssays();
56                        def numReadableAssays = run.numReadableAssays( session.user );
57                        def numHiddenAssays = numAssays - numReadableAssays; 
58                %>
59                <label># assays</label>: ${numAssays}
60                <g:if test="${numHiddenAssays}">
61                        (${numHiddenAssays}
62                        <a href="#" onClick="alert( '${numHiddenAssays} assay(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
63                        hidden</a>)
64                </g:if>
65                <br />
66       
67                <%
68                        def numAssaySamples = run.numAssaySamples();
69                        def numReadableAssaySamples = run.numReadableAssaySamples( session.user );
70                        def numWritableAssaySamples = run.numWritableAssaySamples( session.user );
71                        def numHiddenAssaySamples = numAssaySamples - numReadableAssaySamples; 
72                %>
73                <label># samples</label>: ${numAssaySamples}
74                <g:if test="${numHiddenAssaySamples}">
75                        (${numHiddenAssaySamples}
76                        <a href="#" onClick="alert( '${numHiddenAssaySamples} sample(s) from this run are hidden because you don\'t have the right permissions to view them.' ); return false;">
77                        hidden</a>)
78                </g:if>
79                <br />
80                <label># sequences</label>: <g:formatNumber number="${run.numSequences()}" format="###,###,##0" /><br />
81                <label>% classified</label>: <g:if test="${run.numSequences() > 0}"><g:formatNumber number="${numClassified / run.numSequences()}" format="0.0%" /></g:if><g:else>-</g:else><br />
82        </div>
83        <p class="options">
84                <a class="edit" href="#" onClick="showEditRunDialog( ${run.id} ); return false;">Edit run</a>
85        </p>
86       
87        <!-- Samples -->
88        <h2>Samples</h2>
89        <g:if test="${numReadableAssaySamples == 0}">
90                <p>No samples found in run.</p>
91        </g:if>
92        <g:else>
93                <form id="sampleForm"><input type="hidden" name="runId" value="${run.id}" /><input type="hidden" name="entityType" value="run" /><input type="hidden" name="entityId" value="${run.id}" /></form>
94                <table class="paginate serverside" rel="<g:createLink controller="run" action="showSampleData" id="${run.id}" />" id="samples">
95                        <thead>
96                                <tr>
97                                        <th width="5" class="nonsortable"><input type="checkbox" id="checkAll" onClick="checkAllPaginated(this);" /></th>
98                                        <th nowrap>name</th>
99                                        <th nowrap>study</th>
100                                        <th nowrap>assay</th>
101                                        <th nowrap>Forward mid</th>
102                                        <th nowrap># sequences</th>
103                                        <th nowrap># qual</th>
104                                        <th class="nonsortable"></th>
105                                        <th class="nonsortable"></th>
106                                        <th class="nonsortable"></th>
107                                </tr>
108                        </thead>                       
109                        <tbody>
110                                <tr>
111                                        <td colspan="10" class="dataTables_empty">Loading data from server</td>
112                                </tr>
113                        </tbody>
114                </table>
115                <div id="showSampleDialog" class="dialog"></div>
116        </g:else>       
117        <g:if test="${editable}">
118                <p class="options multiple">
119                        <a class="addAssociation" onClick="showAddSamplesDialog(); return false;" href="#">Add samples</a><br />
120
121                        <g:if test="${numWritableAssaySamples > 0}">
122                                <a class="editAssociation" onClick="showEnterTagsDialog(); return false;" href="#">Edit amplicon details</a>
123                        </g:if>
124                        <g:else>
125                                <a class="editAssociation disabled" onClick="return false;" href="#">Edit amplicon details</a>
126                        </g:else>
127                       
128                        <br />
129
130                        <g:if test="${numWritableAssaySamples > 0}">
131                                <a class="removeAssociation" href="#" onClick="if( confirm( 'Are you sure you want to remove selected samples from this run?' ) ) { submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="run" action="removeSamples" />', '#samples', 'Please select one or more samples to remove from this run' ); } return false;">Remove selected samples</a>
132                        </g:if>
133                        <g:else>
134                                <a class="removeAssociation disabled" onClick="return false;" href="#">Remove selected samples</a>
135                        </g:else>
136                </p>
137                <p class="options multiple">
138                        <g:if test="${numWritableAssaySamples == 0 || numWritableAssays == 0 }">
139                                <a class="addSequences disabled" onClick="return false;" href="#">Import sequence/classification files</a>
140                        </g:if>
141                        <g:else>
142                                <a class="addSequences" onClick="showAddFilesDialog(); return false;" href="#">Import sequence/classification files</a>
143                        </g:else>
144                       
145                        <br />
146
147                        <g:if test="${numWritableAssaySamples > 0 && run.numFiles() > 0 }">
148                                <a class="removeSequences" href="#" onClick="if( confirm( 'Are you sure you want to remove all sequence data from this run? Only sequences are removed from samples you have write access to.' ) ) { submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="run" action="deleteSequenceData" />', '#samples', 'Please select one or more samples to remove sequences from.' ); } return false;">Delete selected sequences</a>
149                        </g:if>
150                        <g:else>
151                                <a class="removeSequences disabled" onClick="return false;" href="#">Delete selected sequences</a>
152                        </g:else>
153                </p>
154               
155                <p class="options multiple">
156                        <g:if test="${numReadableAssaySamples > 0}">
157                                <a class="fasta" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="assaySample" action="exportAsFasta" />', '#samples', 'Please select one or more samples to export' ); return false;">Export all data</a><br />
158                                <a class="excel" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="assaySample" action="exportMetaData" />', '#samples', 'Please select one or more samples to export' ); return false;">Export metadata</a><br />
159                                <a class="classification_export" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="classification" action="export" />', '#samples', 'Please select one or more samples to export' ); return false;">Export classification</a><br />
160                        </g:if>
161                        <g:else>
162                                <a class="fasta disabled" href="#" onClick="return false;">Export as fasta</a><br />
163                                <a class="excel disabled" href="#" onClick="return false;">Export metadata</a><br />
164                                <a class="classification_export disabled" href="#" onClick="return false;">Export classification</a><br />
165                        </g:else>
166                </p>
167                <p class="options multiple last">
168                        <g:if test="${numReadableAssaySamples > 0}">
169                                <a class="classification" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="classification" action="show" />', '#samples', 'Please select one or more samples to view classification' ); return false;">Show classification</a><br />
170                                <a class="classification_percentage" href="#" onClick="submitPaginatedForm( $( '#sampleForm' ), '<g:createLink controller="classification" action="percentageClassified" />', '#samples', 'Please select one or more samples to view classification' ); return false;">Percentage classified</a><br />
171                        </g:if>
172                        <g:else>
173                                <a class="classification disabled" href="#" onClick="return false;">Show classification</a><br />
174                                <a class="classification_percentage disabled" href="#" onClick="return false;">Percentage classified</a><br />
175                        </g:else>
176                </p>
177               
178                <div style="clear: both;"></div>
179                       
180                <g:if test="${numWritableAssaySamples > 0}">
181                        <g:render template="enterTagsDialog" model="[run: run, writableAssaySamples: writableAssaySamples]" />
182                        <g:render template="addFilesDialog" model="[run: run]" />
183                </g:if>
184               
185                <g:render template="addSamplesDialog" model="[run: run]" />
186               
187                </g:if>
188
189
190
191        <!-- Runs -->
192        <h2>Assays</h2>
193        <g:if test="${run.assays == null || numReadableAssays == 0}">
194                No assay found for this run
195        </g:if>
196        <g:else>
197                <table class="paginate">
198                        <thead>
199                                <tr>
200                                        <th nowrap>name</th>
201                                        <th nowrap>study</th>
202                                        <th nowrap># samples</th>
203                                        <th nowrap>other runs</th>
204                                        <th class="nonsortable"></th>
205                                </tr>
206                        </thead>                       
207                        <tbody>
208                                <% def assays = run.assays.findAll { it.study.canRead( session.user ) }.toList().sort { it.name }; %>
209                                <g:each in="${assays}" var="assay">
210                                        <tr>
211                                                <td><g:link title="Show assay" controller="assay" action="show" id="${assay.id}">${assay.name}</g:link></td>
212                                                <td>${assay.study?.name}</td>
213                                                <td>${assay.assaySamples?.size()}</td>
214                                                <td>
215                                                        <g:if test="${assay.runs?.size() == 1}">
216                                                                <% /* If only 1 run is found, then it is the current one */ %>
217                                                                -
218                                                        </g:if>
219                                                        <g:else>
220                                                                <g:each in="${assay.runs - run}" var="otherRun">
221                                                                        <g:link title="Show other run" action="show" id="${otherRun.id}">${otherRun.name}</g:link><br />
222                                                                </g:each>
223                                                        </g:else>
224                                                </td>
225                                                <td class="button">
226                                                        <g:if test="${run.samples(assay.id).size()}">
227                                                                <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." />
228                                                        </g:if>
229                                                        <g:else>
230                                                                <g:if test="${!assay.study.canWrite(session.user)}">
231                                                                        <img src="${fam.icon(name: 'application_delete')}" class="disabled" title="You can't remove this assay because you don't have sufficient privileges." />
232                                                                </g:if>
233                                                                <g:else>
234                                                                        <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]}" title="Remove assay from run" ><img src="${fam.icon(name: 'application_delete')}" title="Remove assay from run" /></g:link>
235                                                                </g:else>
236                                                        </g:else>
237                                                </td>
238                                        </tr>
239                                </g:each>
240                        </tbody>
241                </table>
242        </g:else>
243        <% def writableAssays = otherAssays.findAll { it.study.canWrite( session.user ) } %>
244        <g:if test="${editable}">
245                <p class="options">
246                        <g:if test="${writableAssays.size() > 0}">
247                                <a class="addAssociation" href="#" onClick="showAddAssayDialog(); return false;">Add assay</a>
248                        </g:if>
249                        <g:else>
250                                <a class="addAssociation disabled" href="#" onClick="return false;">Add assay</a>
251                        </g:else>
252                </p>
253                <g:if test="${writableAssays.size() > 0}">
254                        <g:render template="addAssayDialog" model="[run: run, writableAssays: writableAssays]" />
255                </g:if>
256        </g:if>
257        <div id="showRunDialog" class="dialog"></div>
258</body>
259</html>
Note: See TracBrowser for help on using the repository browser.