extensions/net.sf.basedb.reggie/trunk/resources/personal/import-inca.jsp

Code
Comments
Other
Rev Date Author Line
3786 17 Mar 16 olle 1 <%@ page
3786 17 Mar 16 olle 2   pageEncoding="UTF-8"
3786 17 Mar 16 olle 3   session="false"
3786 17 Mar 16 olle 4   import="net.sf.basedb.core.Application"
3786 17 Mar 16 olle 5   import="net.sf.basedb.core.User"
3786 17 Mar 16 olle 6   import="net.sf.basedb.core.DbControl"
3786 17 Mar 16 olle 7   import="net.sf.basedb.core.SessionControl"
3786 17 Mar 16 olle 8   import="net.sf.basedb.clients.web.Base"
3786 17 Mar 16 olle 9   import="net.sf.basedb.clients.web.util.HTML"
3786 17 Mar 16 olle 10   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
3786 17 Mar 16 olle 11   import="net.sf.basedb.util.Values"
3786 17 Mar 16 olle 12   import="net.sf.basedb.util.formatter.DateFormatter"
5270 29 Jan 19 nicklas 13   import="java.util.Date"
3786 17 Mar 16 olle 14 %>
3786 17 Mar 16 olle 15 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
3786 17 Mar 16 olle 16 <%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
3786 17 Mar 16 olle 17 <%
3976 26 May 16 nicklas 18 final SessionControl sc = Base.getExistingSessionControl(request, "net.sf.basedb.reggie", true);
3786 17 Mar 16 olle 19 final String ID = sc.getId();
3786 17 Mar 16 olle 20 final float scale = Base.getScale(sc);
3786 17 Mar 16 olle 21 final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
3786 17 Mar 16 olle 22
3786 17 Mar 16 olle 23 DbControl dc = null;
3786 17 Mar 16 olle 24 try
3786 17 Mar 16 olle 25 {
3786 17 Mar 16 olle 26   dc = sc.newDbControl();
3786 17 Mar 16 olle 27   final User user = User.getById(dc, sc.getLoggedInUserId());
5270 29 Jan 19 nicklas 28   DateFormatter dateFormat = new DateFormatter("yyyyMMdd");
3786 17 Mar 16 olle 29 %>
3786 17 Mar 16 olle 30 <base:page type="default" >
3786 17 Mar 16 olle 31 <base:head 
3786 17 Mar 16 olle 32   scripts="~../reggie-2.js,~import-inca.js" 
3786 17 Mar 16 olle 33   styles="path.css,~../css/reggie-2.css"
3786 17 Mar 16 olle 34 >
3786 17 Mar 16 olle 35 <style>
5270 29 Jan 19 nicklas 36
5270 29 Jan 19 nicklas 37 #importcheck td 
3786 17 Mar 16 olle 38 {
5270 29 Jan 19 nicklas 39   padding-top: 0.25em;
5270 29 Jan 19 nicklas 40   padding-bottom: 0.25em;
3786 17 Mar 16 olle 41 }
3786 17 Mar 16 olle 42
5270 29 Jan 19 nicklas 43 #importcheck td.subprompt
5270 29 Jan 19 nicklas 44 {
5270 29 Jan 19 nicklas 45   text-align: left;
5270 29 Jan 19 nicklas 46   padding-left: 4em;
5270 29 Jan 19 nicklas 47 }
3786 17 Mar 16 olle 48
3786 17 Mar 16 olle 49 </style>
3786 17 Mar 16 olle 50 </base:head>
3786 17 Mar 16 olle 51 <base:body>
3786 17 Mar 16 olle 52
3786 17 Mar 16 olle 53   <p:path><p:pathelement 
3786 17 Mar 16 olle 54     title="Reggie" href="<%="../index.jsp?ID="+ID%>" 
3786 17 Mar 16 olle 55     /><p:pathelement title="Update INCA data annotations" 
3786 17 Mar 16 olle 56     /></p:path>
3786 17 Mar 16 olle 57
3786 17 Mar 16 olle 58   <div class="content">
3786 17 Mar 16 olle 59   <form name="reggie" id="wizard" class="wizard">
3786 17 Mar 16 olle 60   
3786 17 Mar 16 olle 61   <div class="step" id="step-1">
3786 17 Mar 16 olle 62     <div class="step-no">1</div>
3786 17 Mar 16 olle 63     <div class="step-title">Select INCA file to import</div>
3786 17 Mar 16 olle 64     <div class="step-content">
3786 17 Mar 16 olle 65       
3786 17 Mar 16 olle 66       <table class="step-form">
3786 17 Mar 16 olle 67       <tr>
3786 17 Mar 16 olle 68         <td class="prompt">INCA export date</td>
3786 17 Mar 16 olle 69         <td class="input">
3786 17 Mar 16 olle 70           <input type="text" name="exportDate" id="exportDate"
5270 29 Jan 19 nicklas 71             value="<%=dateFormat.format(new Date()) %>"
5270 29 Jan 19 nicklas 72             class="required auto-init" data-auto-init="focus-on-enter" data-next-focus="importFile"
3786 17 Mar 16 olle 73             style="width: 8em;" maxlength="10">
3786 17 Mar 16 olle 74             <base:icon 
3786 17 Mar 16 olle 75               id="exportDateCalendar"
3786 17 Mar 16 olle 76               subclass="auto-init"
3786 17 Mar 16 olle 77               data-auto-init="calendar"
3786 17 Mar 16 olle 78               data-textarea-id="exportDate"
3786 17 Mar 16 olle 79               data-date-format="yyyyMMdd"
3786 17 Mar 16 olle 80               data-title="INCA export date"
3786 17 Mar 16 olle 81               image="calendar.png" 
3786 17 Mar 16 olle 82               tooltip="Select a date from a calendar" 
3786 17 Mar 16 olle 83               tabindex="-1"
3786 17 Mar 16 olle 84             />
3786 17 Mar 16 olle 85         </td>
3786 17 Mar 16 olle 86         <td class="status" id="exportDate.status"></td>
3786 17 Mar 16 olle 87         <td class="help">
3786 17 Mar 16 olle 88           <span id="exportDate.message" class="message" style="display: none;"></span>
3786 17 Mar 16 olle 89           (YYYYMMDD or MMDD) The INCA export date annotation for cases
3786 17 Mar 16 olle 90           found in the selected file will be updated to this value.
3786 17 Mar 16 olle 91         </td>
3786 17 Mar 16 olle 92       </tr>
3786 17 Mar 16 olle 93       <tr class="align-top">
3924 10 May 16 olle 94         <td class="prompt">INCA file</td>
3786 17 Mar 16 olle 95         <td class="input">
3786 17 Mar 16 olle 96           <table style="width: 100%;">
3786 17 Mar 16 olle 97           <tr>
3786 17 Mar 16 olle 98           <td>
3924 10 May 16 olle 99             <input type="file" name="importfile" id="importfile" class="required" style="width: 95%;" accept=".csv,.tsv">
3786 17 Mar 16 olle 100           </td>
3786 17 Mar 16 olle 101           </tr>
3786 17 Mar 16 olle 102           </table>
3786 17 Mar 16 olle 103         </td>
3786 17 Mar 16 olle 104         <td class="status" id="importfile.status"></td>
3786 17 Mar 16 olle 105         <td class="help"><span id="importfile.message" class="message"></span>
3924 10 May 16 olle 106           Select INCA file to be used for INCA import. The file should be a text file in tab-separated format, where the first line contains column names.
3786 17 Mar 16 olle 107         </td>
3786 17 Mar 16 olle 108       </tr>
3786 17 Mar 16 olle 109       </table>
3786 17 Mar 16 olle 110     </div>
3786 17 Mar 16 olle 111   </div>
3786 17 Mar 16 olle 112
3786 17 Mar 16 olle 113   <div class="step" id="step-2">
3786 17 Mar 16 olle 114     <div class="step-no">2</div>
3786 17 Mar 16 olle 115     <div class="step-title">INCA file check</div>
3786 17 Mar 16 olle 116     <div class="step-content">
3786 17 Mar 16 olle 117
5263 24 Jan 19 nicklas 118
5270 29 Jan 19 nicklas 119       <table class="step-form" id="importcheck">
5263 24 Jan 19 nicklas 120       <tbody>
5263 24 Jan 19 nicklas 121         <tr>
5263 24 Jan 19 nicklas 122           <td class="prompt">File</td>
5263 24 Jan 19 nicklas 123           <td class="input" id="filename"></td>
5263 24 Jan 19 nicklas 124           <td class="status" id="filename.status"></td>
5263 24 Jan 19 nicklas 125           <td class="help"></td>
5263 24 Jan 19 nicklas 126         </tr>
5263 24 Jan 19 nicklas 127         <tr>
5263 24 Jan 19 nicklas 128           <td class="prompt">Is follow-up file</td>
5263 24 Jan 19 nicklas 129           <td class="input" id="isFollowUp"></td>
5263 24 Jan 19 nicklas 130           <td class="status" id="isFollowUp.status"></td>
5263 24 Jan 19 nicklas 131           <td class="help">
5263 24 Jan 19 nicklas 132           </td>
5263 24 Jan 19 nicklas 133         </tr>
5263 24 Jan 19 nicklas 134         <tr>
5263 24 Jan 19 nicklas 135           <td class="prompt">Header columns</td>
5263 24 Jan 19 nicklas 136           <td class="input" id="headerCount"></td>
5263 24 Jan 19 nicklas 137           <td class="status" id="headerCount.status"></td>
5263 24 Jan 19 nicklas 138           <td class="help"></td>
5263 24 Jan 19 nicklas 139         </tr>
5263 24 Jan 19 nicklas 140       </tbody>
5263 24 Jan 19 nicklas 141       
5263 24 Jan 19 nicklas 142       <tbody class="info-section">
5263 24 Jan 19 nicklas 143         <tr>
5268 25 Jan 19 nicklas 144           <td class="prompt">Required but missing</td>
5263 24 Jan 19 nicklas 145           <td class="info" id="headerMissing"></td>
5263 24 Jan 19 nicklas 146           <td class="status" id="headerMissing.status"></td>
5263 24 Jan 19 nicklas 147           <td class="help"><span id="headerMissing.message"></span></td>
5263 24 Jan 19 nicklas 148         </tr>
5263 24 Jan 19 nicklas 149         <tr>
5263 24 Jan 19 nicklas 150           <td class="prompt">Duplicates</td>
5263 24 Jan 19 nicklas 151           <td class="info" id="headerDuplicates"></td>
5263 24 Jan 19 nicklas 152           <td class="status" id="headerDuplicates.status"></td>
5263 24 Jan 19 nicklas 153           <td class="help"><span id="headerDuplicates.message"></span></td>
5263 24 Jan 19 nicklas 154         </tr>
5263 24 Jan 19 nicklas 155         <tr>
5263 24 Jan 19 nicklas 156           <td class="prompt">Unknown</td>
5263 24 Jan 19 nicklas 157           <td class="info" id="headerUnknown"></td>
5263 24 Jan 19 nicklas 158           <td class="status" id="headerUnknown.status"></td>
5263 24 Jan 19 nicklas 159           <td class="help"><span id="headerUnknown.message"></span></td>
5263 24 Jan 19 nicklas 160         </tr>
5268 25 Jan 19 nicklas 161         <tr>
5274 31 Jan 19 nicklas 162           <td class="prompt">Mapped INCA annotations</td>
5274 31 Jan 19 nicklas 163           <td class="info" id="headerMapped"></td>
5274 31 Jan 19 nicklas 164           <td class="status" id="headerMapped.status"></td>
5274 31 Jan 19 nicklas 165           <td class="help"><span id="headerMapped.message"></span></td>
5274 31 Jan 19 nicklas 166         </tr>
5274 31 Jan 19 nicklas 167         <tr>
5274 31 Jan 19 nicklas 168           <td class="prompt">Unmapped INCA annotations</td>
5268 25 Jan 19 nicklas 169           <td class="info" id="headerUnmapped"></td>
5268 25 Jan 19 nicklas 170           <td class="status" id="headerUnmapped.status"></td>
5268 25 Jan 19 nicklas 171           <td class="help"><span id="headerUnmapped.message"></span></td>
5268 25 Jan 19 nicklas 172         </tr>
5263 24 Jan 19 nicklas 173       </tbody>
5263 24 Jan 19 nicklas 174       
5263 24 Jan 19 nicklas 175       <tbody>
5263 24 Jan 19 nicklas 176         <tr>
5263 24 Jan 19 nicklas 177           <td class="prompt">Data lines</td>
5263 24 Jan 19 nicklas 178           <td class="input" id="lineCount"></td>
5263 24 Jan 19 nicklas 179           <td class="status" id="lineCount.status"></td>
5263 24 Jan 19 nicklas 180           <td class="help"><span id="lineCount.message"></span></td>
5263 24 Jan 19 nicklas 181         </tr>
5263 24 Jan 19 nicklas 182       </tbody>
5263 24 Jan 19 nicklas 183       <tbody class="info-section">
5263 24 Jan 19 nicklas 184         <tr>
5270 29 Jan 19 nicklas 185           <td class="prompt">Lines that can be imported</td>
5270 29 Jan 19 nicklas 186           <td class="input" id="importLineCount"></td>
5270 29 Jan 19 nicklas 187           <td class="status" id="importLineCount.status"></td>
5270 29 Jan 19 nicklas 188           <td class="help"><span id="importLineCount.message"></span></td>
5270 29 Jan 19 nicklas 189         </tr>
5270 29 Jan 19 nicklas 190         <tr>
5270 29 Jan 19 nicklas 191           <td class="prompt">Excluded lines</td>
5263 24 Jan 19 nicklas 192           <td class="info" id="totalExcluded"></td>
5263 24 Jan 19 nicklas 193           <td class="status" id="totalExcluded.status"></td>
5263 24 Jan 19 nicklas 194           <td class="help"><span id="totalExcluded.message"></span></td>
5263 24 Jan 19 nicklas 195         </tr>
5270 29 Jan 19 nicklas 196         <tr id="tooManyColumns.row">
5263 24 Jan 19 nicklas 197           <td class="subprompt">- too many columns</td>
5263 24 Jan 19 nicklas 198           <td class="info" id="tooManyColumns"></td>
5263 24 Jan 19 nicklas 199           <td class="status" id="tooManyColumns.status"></td>
5263 24 Jan 19 nicklas 200           <td class="help"><span id="tooManyColumns.message"></span></td>
5263 24 Jan 19 nicklas 201         </tr>
5270 29 Jan 19 nicklas 202         <tr id="tooFewColumns.row">
5267 25 Jan 19 nicklas 203           <td class="subprompt">- too few columns</td>
5263 24 Jan 19 nicklas 204           <td class="info" id="tooFewColumns"></td>
5263 24 Jan 19 nicklas 205           <td class="status" id="tooFewColumns.status"></td>
5263 24 Jan 19 nicklas 206           <td class="help"><span id="tooFewColumns.message"></span></td>
5263 24 Jan 19 nicklas 207         </tr>
5270 29 Jan 19 nicklas 208         <tr id="missingPersonalNo.row">
5263 24 Jan 19 nicklas 209           <td class="subprompt">- missing personal number</td>
5263 24 Jan 19 nicklas 210           <td class="info" id="missingPersonalNo"></td>
5263 24 Jan 19 nicklas 211           <td class="status" id="missingPersonalNo.status"></td>
5263 24 Jan 19 nicklas 212           <td class="help"><span id="missingPersonalNo.message"></span></td>
5263 24 Jan 19 nicklas 213         </tr>
5270 29 Jan 19 nicklas 214         <tr id="missingLaterality.row">
5268 25 Jan 19 nicklas 215           <td class="subprompt">- missing or invalid laterality</td>
5263 24 Jan 19 nicklas 216           <td class="info" id="missingLaterality"></td>
5263 24 Jan 19 nicklas 217           <td class="status" id="missingLaterality.status"></td>
5263 24 Jan 19 nicklas 218           <td class="help"><span id="missingLaterality.message"></span></td>
5263 24 Jan 19 nicklas 219         </tr>
5270 29 Jan 19 nicklas 220         <tr id="duplicateLaterality.row">
5263 24 Jan 19 nicklas 221           <td class="subprompt">- duplicate laterality</td>
5263 24 Jan 19 nicklas 222           <td class="info" id="duplicateLaterality"></td>
5263 24 Jan 19 nicklas 223           <td class="status" id="duplicateLaterality.status"></td>
5263 24 Jan 19 nicklas 224           <td class="help"><span id="duplicateLaterality.message"></span></td>
5263 24 Jan 19 nicklas 225         </tr>
5270 29 Jan 19 nicklas 226         <tr id="missingFollowUpDate.row">
5270 29 Jan 19 nicklas 227           <td class="subprompt">- missing follow up date</td>
5270 29 Jan 19 nicklas 228           <td class="info" id="missingFollowUpDate"></td>
5270 29 Jan 19 nicklas 229           <td class="status" id="missingFollowUpDate.status"></td>
5270 29 Jan 19 nicklas 230           <td class="help"><span id="missingFollowUpDate.message"></span></td>
5270 29 Jan 19 nicklas 231         </tr>
5270 29 Jan 19 nicklas 232         <tr id="duplicateFollowUp.row">
5270 29 Jan 19 nicklas 233           <td class="subprompt">- duplicate follow up</td>
5270 29 Jan 19 nicklas 234           <td class="info" id="duplicateFollowUp"></td>
5270 29 Jan 19 nicklas 235           <td class="status" id="duplicateFollowUp.status"></td>
5270 29 Jan 19 nicklas 236           <td class="help"><span id="duplicateFollowUp.message"></span></td>
5270 29 Jan 19 nicklas 237         </tr>
5270 29 Jan 19 nicklas 238         <tr id="invalidDataValue.row">
5267 25 Jan 19 nicklas 239           <td class="subprompt">- invalid data value</td>
5267 25 Jan 19 nicklas 240           <td class="info" id="invalidDataValue"></td>
5267 25 Jan 19 nicklas 241           <td class="status" id="invalidDataValue.status"></td>
5267 25 Jan 19 nicklas 242           <td class="help"><span id="invalidDataValue.message"></span></td>
5267 25 Jan 19 nicklas 243         </tr>
5270 29 Jan 19 nicklas 244         <tr id="patientNotFound.row">
5267 25 Jan 19 nicklas 245           <td class="subprompt">- patient not found</td>
5267 25 Jan 19 nicklas 246           <td class="info" id="patientNotFound"></td>
5267 25 Jan 19 nicklas 247           <td class="status" id="patientNotFound.status"></td>
5267 25 Jan 19 nicklas 248           <td class="help"><span id="patientNotFound.message"></span></td>
5267 25 Jan 19 nicklas 249         </tr>
5270 29 Jan 19 nicklas 250         <tr id="caseNotFound.row">
5267 25 Jan 19 nicklas 251           <td class="subprompt">- case not found</td>
5267 25 Jan 19 nicklas 252           <td class="info" id="caseNotFound"></td>
5267 25 Jan 19 nicklas 253           <td class="status" id="caseNotFound.status"></td>
5267 25 Jan 19 nicklas 254           <td class="help"><span id="caseNotFound.message"></span></td>
5267 25 Jan 19 nicklas 255         </tr>
5263 24 Jan 19 nicklas 256       </tbody>
5263 24 Jan 19 nicklas 257     </table>
3786 17 Mar 16 olle 258     </div>
3786 17 Mar 16 olle 259   </div>
3786 17 Mar 16 olle 260
3786 17 Mar 16 olle 261   <div id="wizard-status"></div>
3920 03 May 16 olle 262   <div id="wizard-progress"></div>
3786 17 Mar 16 olle 263
5273 31 Jan 19 nicklas 264   <div id="reportfiles" style="margin-left: 2em; margin-top: 0.5em;">
5273 31 Jan 19 nicklas 265     <base:icon id="downloadreportfile" style="display: none;" 
5273 31 Jan 19 nicklas 266       image="<%=home+"/images/download.png"%>"
5273 31 Jan 19 nicklas 267       data-report-type="import"
5273 31 Jan 19 nicklas 268       >Download report file</base:icon>
5275 31 Jan 19 nicklas 269     <base:icon id="downloadoutputfile" style="display: none;" 
5275 31 Jan 19 nicklas 270       image="<%=home+"/images/download.png"%>"
5275 31 Jan 19 nicklas 271       data-report-type="import_output_csv"
5275 31 Jan 19 nicklas 272       >Download output CSV file</base:icon>
5273 31 Jan 19 nicklas 273   </div>
5273 31 Jan 19 nicklas 274
3786 17 Mar 16 olle 275   <table class="navigation" id="navigation">
3786 17 Mar 16 olle 276   <tr>
3786 17 Mar 16 olle 277     <td><base:button id="gocancel" title="Cancel" /></td>
3786 17 Mar 16 olle 278     <td><base:button id="simplecheck" title="Simple file check" image="<%=home+"/images/gonext.png"%>" /></td>
5270 29 Jan 19 nicklas 279     <td><base:button id="fullcheck" title="Full file check" image="<%=home+"/images/gonext.png"%>" /></td>
3786 17 Mar 16 olle 280     <td><base:button id="goimport" title="Import" image="<%=home+"/images/gonext.png"%>" /></td>
3786 17 Mar 16 olle 281     <td><base:button id="gorestart" title="Restart" image="<%=home+"/images/goback.png"%>" /></td>
3786 17 Mar 16 olle 282     <td id="gonext-message" class="message"></td>
3786 17 Mar 16 olle 283   </tr>
3786 17 Mar 16 olle 284   </table>
3786 17 Mar 16 olle 285   
5279 05 Feb 19 nicklas 286   <div id="explainFileCheck" class="messagecontainer note" style="margin-left: 2em; padding: 0.5em;width: 55em;">
5279 05 Feb 19 nicklas 287     <ul>
5279 05 Feb 19 nicklas 288     <li style="margin-bottom: 0.25em;"><b>Simple file check</b>: Checks that the INCA data file is well formed, 
5279 05 Feb 19 nicklas 289       that required information is present and that data values are valid. This check is typically very quick and 
5279 05 Feb 19 nicklas 290       should only take a few seconds to complete.
5279 05 Feb 19 nicklas 291     <li><b>Full file check</b>: Also checks that the data can be mapped to patient and case information in 
5279 05 Feb 19 nicklas 292       the database. This check may require several minutes to complete.
5279 05 Feb 19 nicklas 293     </ul>
5279 05 Feb 19 nicklas 294   </div>
5279 05 Feb 19 nicklas 295   
3786 17 Mar 16 olle 296   </form>
3786 17 Mar 16 olle 297   </div>
3786 17 Mar 16 olle 298   
3786 17 Mar 16 olle 299 </base:body>
3786 17 Mar 16 olle 300 </base:page>
3786 17 Mar 16 olle 301 <%
3786 17 Mar 16 olle 302 }
3786 17 Mar 16 olle 303 finally
3786 17 Mar 16 olle 304 {
3786 17 Mar 16 olle 305   if (dc != null) dc.close();
3786 17 Mar 16 olle 306 }
3786 17 Mar 16 olle 307 %>