extensions/net.sf.basedb.reggie/trunk/resources/sampleproc/move_protocol2.jsp

Code
Comments
Other
Rev Date Author Line
7173 17 May 23 nicklas 1 <%@ page
7173 17 May 23 nicklas 2   pageEncoding="UTF-8"
7173 17 May 23 nicklas 3   session="false"
7173 17 May 23 nicklas 4   import="net.sf.basedb.core.User"
7173 17 May 23 nicklas 5   import="net.sf.basedb.core.DbControl"
7173 17 May 23 nicklas 6   import="net.sf.basedb.core.SessionControl"
7173 17 May 23 nicklas 7   import="net.sf.basedb.core.Application"
7175 17 May 23 nicklas 8   import="net.sf.basedb.core.ItemSubtype"
7173 17 May 23 nicklas 9   import="net.sf.basedb.core.ItemList"
7173 17 May 23 nicklas 10   import="net.sf.basedb.core.BioPlate"
7173 17 May 23 nicklas 11   import="net.sf.basedb.util.Values"
7173 17 May 23 nicklas 12   import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
7173 17 May 23 nicklas 13   import="net.sf.basedb.util.extensions.Extension"
7173 17 May 23 nicklas 14   import="net.sf.basedb.clients.web.Base"  
7173 17 May 23 nicklas 15   import="net.sf.basedb.clients.web.util.HTML"
7173 17 May 23 nicklas 16   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
7173 17 May 23 nicklas 17   import="java.util.List"
7173 17 May 23 nicklas 18   import="java.util.ArrayList"
7173 17 May 23 nicklas 19 %>
7173 17 May 23 nicklas 20 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
7173 17 May 23 nicklas 21 <%
7173 17 May 23 nicklas 22 final SessionControl sc = Base.getExistingSessionControl(request, "net.sf.basedb.reggie", true);
7173 17 May 23 nicklas 23 final String ID = sc.getId();
7173 17 May 23 nicklas 24 final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
7173 17 May 23 nicklas 25 final String root = request.getContextPath();
7173 17 May 23 nicklas 26 DbControl dc = null;
7173 17 May 23 nicklas 27 try
7173 17 May 23 nicklas 28 {
7173 17 May 23 nicklas 29   dc = sc.newDbControl();
7173 17 May 23 nicklas 30   final Extension reggie = ExtensionsControl.get(dc).getExtension("net.sf.basedb.reggie");
7173 17 May 23 nicklas 31   final User user = User.getById(dc, sc.getLoggedInUserId());
7173 17 May 23 nicklas 32   int listId = Values.getInt(request.getParameter("transportBox"));
7173 17 May 23 nicklas 33   
7173 17 May 23 nicklas 34   ItemList transportBox = ItemList.getById(dc, listId);
7175 17 May 23 nicklas 35   ItemSubtype subtype = transportBox.getItemSubtype();
7173 17 May 23 nicklas 36   String view = Values.getString(request.getParameter("view"), "list");
7173 17 May 23 nicklas 37   String title = "Lab protocol for " + HTML.encodeTags(transportBox.getName()) + " - " + (view.equals("list") ? "list" : "box");
7173 17 May 23 nicklas 38
7173 17 May 23 nicklas 39   int columns = 9;
7173 17 May 23 nicklas 40   int rows = 9;
7173 17 May 23 nicklas 41 %>
7173 17 May 23 nicklas 42 <base:page id="protocol" type="iframe" favicon="<%=home+"/images/specimen.png"%>" title="<%=title%>" noskin="true">
7173 17 May 23 nicklas 43 <base:head
7173 17 May 23 nicklas 44   scripts="~../reggie-2.js,~storagebox.js,~move_protocol.js" 
7173 17 May 23 nicklas 45   styles="~../css/reggie-2.css,~../css/printable.css,~../css/plate.css"
7173 17 May 23 nicklas 46   >
7173 17 May 23 nicklas 47   <style>
7173 17 May 23 nicklas 48   table.protocolheader
7173 17 May 23 nicklas 49   {
7173 17 May 23 nicklas 50     width: 100%;
7173 17 May 23 nicklas 51     border: 1px solid #000000;
7173 17 May 23 nicklas 52     border-collapse: collapse;
7173 17 May 23 nicklas 53   }
7173 17 May 23 nicklas 54
7173 17 May 23 nicklas 55   table.protocolheader > tbody > tr
7173 17 May 23 nicklas 56   {
7173 17 May 23 nicklas 57     vertical-align: top;
7173 17 May 23 nicklas 58     height: 1.25em;
7173 17 May 23 nicklas 59   }
7173 17 May 23 nicklas 60
7173 17 May 23 nicklas 61   table.protocolheader > tbody > tr > th
7173 17 May 23 nicklas 62   {
7173 17 May 23 nicklas 63     text-align: left;
7173 17 May 23 nicklas 64     font-size: 1em;
7173 17 May 23 nicklas 65     background-color: #F0F0F0;
7173 17 May 23 nicklas 66     padding: 4px;
7175 17 May 23 nicklas 67     width: 25%;
7173 17 May 23 nicklas 68   }
7173 17 May 23 nicklas 69   
7173 17 May 23 nicklas 70   table.protocolheader > tbody > tr > td
7173 17 May 23 nicklas 71   {
7173 17 May 23 nicklas 72     text-align: left;
7173 17 May 23 nicklas 73     font-size: 1em;
7173 17 May 23 nicklas 74     padding: 4px;
7175 17 May 23 nicklas 75     width: 25%;
7173 17 May 23 nicklas 76   }
7173 17 May 23 nicklas 77   
7175 17 May 23 nicklas 78   .protocolNote
7175 17 May 23 nicklas 79   {
7175 17 May 23 nicklas 80     margin-top: 0.25em;
7175 17 May 23 nicklas 81     margin-bottom: 1em;
7175 17 May 23 nicklas 82   }
7175 17 May 23 nicklas 83   
7173 17 May 23 nicklas 84   #listview
7173 17 May 23 nicklas 85   {
7173 17 May 23 nicklas 86     width: 100%;
7173 17 May 23 nicklas 87     border-collapse: collapse;
7173 17 May 23 nicklas 88     border: 1px solid #000000;
7173 17 May 23 nicklas 89   }
7173 17 May 23 nicklas 90   
7173 17 May 23 nicklas 91   #listview thead
7173 17 May 23 nicklas 92   {
7173 17 May 23 nicklas 93     border: 1px solid #000000;
7173 17 May 23 nicklas 94     background-color: #E0E0E0;
7173 17 May 23 nicklas 95   }
7173 17 May 23 nicklas 96   
7173 17 May 23 nicklas 97   #listview tbody
7173 17 May 23 nicklas 98   {
7173 17 May 23 nicklas 99     border-top: 1px solid #000000;
7173 17 May 23 nicklas 100     border-bottom: 1px solid #000000;
7173 17 May 23 nicklas 101   }
7173 17 May 23 nicklas 102   
7173 17 May 23 nicklas 103   #listview th
7173 17 May 23 nicklas 104   {
7173 17 May 23 nicklas 105     border-left: 1px solid #000000;
7173 17 May 23 nicklas 106     padding: 0.25em;
7173 17 May 23 nicklas 107   }
7173 17 May 23 nicklas 108   
7173 17 May 23 nicklas 109   #listview td
7173 17 May 23 nicklas 110   {
7173 17 May 23 nicklas 111     border-left: 1px solid #000000;
7173 17 May 23 nicklas 112     border-top: 1px dotted #666666;
7173 17 May 23 nicklas 113     vertical-align: middle;
7173 17 May 23 nicklas 114     text-align: center;
7173 17 May 23 nicklas 115     padding: 1px;
7173 17 May 23 nicklas 116   }
7173 17 May 23 nicklas 117
7173 17 May 23 nicklas 118   #listview .odd-row
7173 17 May 23 nicklas 119   {
7173 17 May 23 nicklas 120     background-color: #E8E8E8;
7173 17 May 23 nicklas 121   }
7173 17 May 23 nicklas 122   
7173 17 May 23 nicklas 123   #listview .location
7173 17 May 23 nicklas 124   {
7173 17 May 23 nicklas 125     border-left: 0;
7173 17 May 23 nicklas 126   }
7208 26 May 23 nicklas 127   
7208 26 May 23 nicklas 128   #listview .comment
7208 26 May 23 nicklas 129   {
7208 26 May 23 nicklas 130     width: 30%;
7208 26 May 23 nicklas 131   }
7173 17 May 23 nicklas 132
7173 17 May 23 nicklas 133   /* Divide the 9 wells across the full page */
7173 17 May 23 nicklas 134   .storagebox .well
7173 17 May 23 nicklas 135   {
7173 17 May 23 nicklas 136     width: 11%;
7173 17 May 23 nicklas 137     max-width: 11%;
7173 17 May 23 nicklas 138     min-width: 11%;
7173 17 May 23 nicklas 139     font-size: 90%;
7173 17 May 23 nicklas 140     height: 3em;
7173 17 May 23 nicklas 141     background-color: #FFFFFF;
7173 17 May 23 nicklas 142     padding: 4px;
7173 17 May 23 nicklas 143     vertical-align: top;
7173 17 May 23 nicklas 144     text-align: center;
7173 17 May 23 nicklas 145     border-style: solid;
7173 17 May 23 nicklas 146   }
7173 17 May 23 nicklas 147   
7173 17 May 23 nicklas 148   .storagebox .well.not-empty
7173 17 May 23 nicklas 149   {
7173 17 May 23 nicklas 150     height: 9em;
7173 17 May 23 nicklas 151   }
7173 17 May 23 nicklas 152   
7173 17 May 23 nicklas 153   .storagebox .well.locked
7173 17 May 23 nicklas 154   {
7173 17 May 23 nicklas 155     color: #999999;
7173 17 May 23 nicklas 156     background-color: #F0F0F0;
7173 17 May 23 nicklas 157     vertical-align: middle;
7173 17 May 23 nicklas 158     text-align: center;
7173 17 May 23 nicklas 159     font-weight: bold;
7173 17 May 23 nicklas 160     font-size: 125%;
7173 17 May 23 nicklas 161     height: 2em;
7173 17 May 23 nicklas 162   }
7173 17 May 23 nicklas 163   
7173 17 May 23 nicklas 164   .storagebox .box-name
7173 17 May 23 nicklas 165   {
7173 17 May 23 nicklas 166     padding: 0.5em;
7173 17 May 23 nicklas 167   }
7173 17 May 23 nicklas 168   
7173 17 May 23 nicklas 169   .major-ref
7173 17 May 23 nicklas 170   {
7173 17 May 23 nicklas 171     font-weight: bold;
7173 17 May 23 nicklas 172     padding: 0.1em 0.5em;
7173 17 May 23 nicklas 173     margin: 0.25em;
7173 17 May 23 nicklas 174     display: inline-block;
7173 17 May 23 nicklas 175     border-width: 1px;
7173 17 May 23 nicklas 176     border-radius: 1em;
7173 17 May 23 nicklas 177   }
7173 17 May 23 nicklas 178   
7173 17 May 23 nicklas 179   .storagebox .major-ref
7173 17 May 23 nicklas 180   {
7173 17 May 23 nicklas 181     font-size: 115%;
7173 17 May 23 nicklas 182     padding: 0.5em 1em;
7173 17 May 23 nicklas 183   }
7173 17 May 23 nicklas 184   
7173 17 May 23 nicklas 185   .storagebox .well:hover
7173 17 May 23 nicklas 186   {
7173 17 May 23 nicklas 187     padding: 3px;
7173 17 May 23 nicklas 188   }
7173 17 May 23 nicklas 189     
7173 17 May 23 nicklas 190   .storagebox .rowheader
7173 17 May 23 nicklas 191   {
7173 17 May 23 nicklas 192     width: 2em;
7173 17 May 23 nicklas 193   }
7173 17 May 23 nicklas 194   
7173 17 May 23 nicklas 195   .more-boxes
7173 17 May 23 nicklas 196   {
7173 17 May 23 nicklas 197     font-weight: bold;
7173 17 May 23 nicklas 198     text-align: right;
7173 17 May 23 nicklas 199     page-break-after: always;
7173 17 May 23 nicklas 200   }
7173 17 May 23 nicklas 201   </style>
7173 17 May 23 nicklas 202 </base:head>
7173 17 May 23 nicklas 203 <base:body>
7173 17 May 23 nicklas 204
7173 17 May 23 nicklas 205   <div class="paper">
7173 17 May 23 nicklas 206
7173 17 May 23 nicklas 207   <form name="reggie" id="wizard">
7173 17 May 23 nicklas 208   
7173 17 May 23 nicklas 209   <div id="page-data" class="datacontainer"
7173 17 May 23 nicklas 210     data-view="<%=view%>"
7173 17 May 23 nicklas 211     data-transport-box="<%=listId %>"
7173 17 May 23 nicklas 212     data-home-url="<%=home%>"
7173 17 May 23 nicklas 213   ></div>
7173 17 May 23 nicklas 214   
7173 17 May 23 nicklas 215   <div id="wizard-status"></div>
7173 17 May 23 nicklas 216
7173 17 May 23 nicklas 217   <div id="all-protocol" style="display: none;">
7173 17 May 23 nicklas 218   <div id="print-instructions" class="noprint fullwidth">
7173 17 May 23 nicklas 219     <base:button id="print-button" image="<%=home+"/images/print.png"%>" title="Print&hellip;" />
7173 17 May 23 nicklas 220     <span id="printNote">
7173 17 May 23 nicklas 221     <b>Note!</b> 
7173 17 May 23 nicklas 222     <%
7173 17 May 23 nicklas 223     if (view.equals("list"))
7173 17 May 23 nicklas 224     {
7173 17 May 23 nicklas 225       %>
7173 17 May 23 nicklas 226       For better printing reduce margins to about <i>5mm</i> and set page orientation
7173 17 May 23 nicklas 227       to <i>portrait</i>. To fit everything on a single page, scale down to <i>60-70%</i>.
7173 17 May 23 nicklas 228       <%
7173 17 May 23 nicklas 229     }
7173 17 May 23 nicklas 230     else
7173 17 May 23 nicklas 231     {
7173 17 May 23 nicklas 232       %>
7173 17 May 23 nicklas 233       For better printing reduce margins to about <i>5mm</i> and set page orientation
7173 17 May 23 nicklas 234       to <i>portrait</i>. The recommended scale is <i>100%</i>.
7173 17 May 23 nicklas 235       <%
7173 17 May 23 nicklas 236     }
7173 17 May 23 nicklas 237     %>
7173 17 May 23 nicklas 238     </span>
7173 17 May 23 nicklas 239     <br clear="all">
7173 17 May 23 nicklas 240   </div>
7173 17 May 23 nicklas 241
7173 17 May 23 nicklas 242   
7173 17 May 23 nicklas 243   <h1>Lab protocol for moving samples to storage boxes <span class="reggie">Reggie <%=reggie.getAbout().getVersion() %></span></h1>
7173 17 May 23 nicklas 244
7173 17 May 23 nicklas 245   <table style="width: 100%;" class="protocolheader">
7173 17 May 23 nicklas 246   <tr>
7173 17 May 23 nicklas 247     <th>Transport box</th>
7175 17 May 23 nicklas 248     <td id="boxName"><%=HTML.encodeTags(transportBox.getName())%></td>
7208 26 May 23 nicklas 249     <th class="leftborder" style="width: 15%;">Date</th>
7208 26 May 23 nicklas 250     <td style="width: 25%;"></td>
7173 17 May 23 nicklas 251   </tr>
7173 17 May 23 nicklas 252   <tr class="topborder">
7175 17 May 23 nicklas 253     <th>Sample type</th>
7175 17 May 23 nicklas 254     <td><%=subtype!=null?HTML.encodeTags(subtype.getName()) : "<i>Unknown</i>"%></td>
7208 26 May 23 nicklas 255     <td rowspan="3" colspan="2" class="leftborder" style="width: 40%;">
7192 23 May 23 nicklas 256       <%=HTML.encodeTags(transportBox.getDescription())%>
7192 23 May 23 nicklas 257     </td>
7175 17 May 23 nicklas 258   </tr>
7175 17 May 23 nicklas 259   <tr class="topborder">
7173 17 May 23 nicklas 260     <th>Number of samples</th>
7173 17 May 23 nicklas 261     <td><%=transportBox.getSize()%></td>
7173 17 May 23 nicklas 262   </tr>
7173 17 May 23 nicklas 263   <tr class="topborder">
7189 22 May 23 nicklas 264     <th>SCAN-B box and freezer</th>
7173 17 May 23 nicklas 265     <td id="storageBoxes"></td>
7173 17 May 23 nicklas 266   </tr>
7208 26 May 23 nicklas 267   <tr class="topborder" style="height: 4em;">
7175 17 May 23 nicklas 268     <th>Clarity ID of extra tubes¹</th>
7175 17 May 23 nicklas 269     <td colspan="3"></td>
7173 17 May 23 nicklas 270   </tr>
7173 17 May 23 nicklas 271   </table>
7175 17 May 23 nicklas 272   <div class="protocolNote">
7175 17 May 23 nicklas 273   ¹ Please note the Clarity ID of all extra tubes (if there are any) 
7175 17 May 23 nicklas 274   in the box that are not mentioned in this protocol.
7175 17 May 23 nicklas 275   </div>
7173 17 May 23 nicklas 276   
7173 17 May 23 nicklas 277   <div id="transportMessages"></div>
7173 17 May 23 nicklas 278
7173 17 May 23 nicklas 279   <%
7173 17 May 23 nicklas 280   if (view.equals("list"))
7173 17 May 23 nicklas 281   {
7173 17 May 23 nicklas 282     %>
7173 17 May 23 nicklas 283     <table style="width: 100%;" id="listview">
7173 17 May 23 nicklas 284     <thead>
7173 17 May 23 nicklas 285       <tr class="toprow">
7173 17 May 23 nicklas 286         <th class="clarityId">Clarity ID</th>
7173 17 May 23 nicklas 287         <th class="specimen">SCAN-B Specimen</th>
7173 17 May 23 nicklas 288         <th class="box" colspan="2">Storage box</th>
7208 26 May 23 nicklas 289         <th class="remain">Remain</th>
7173 17 May 23 nicklas 290         <th>Comments</th>
7173 17 May 23 nicklas 291       </tr>
7173 17 May 23 nicklas 292     </thead>
7173 17 May 23 nicklas 293     <tbody id="listData"></tbody>
7173 17 May 23 nicklas 294     </table>
7173 17 May 23 nicklas 295     <%
7173 17 May 23 nicklas 296   }
7173 17 May 23 nicklas 297   else
7173 17 May 23 nicklas 298   {
7173 17 May 23 nicklas 299     // We create two storage boxes (hidden) The will be displayed
7173 17 May 23 nicklas 300     // by the script if needed
7173 17 May 23 nicklas 301     WellCoordinateFormatter rowF = new WellCoordinateFormatter(true);
7173 17 May 23 nicklas 302     WellCoordinateFormatter colF = new WellCoordinateFormatter(false);
7173 17 May 23 nicklas 303     for (int boxNo = 1; boxNo <=2; boxNo++)
7173 17 May 23 nicklas 304     {
7173 17 May 23 nicklas 305       %>
7173 17 May 23 nicklas 306       <table id="box.<%=boxNo%>" class="plate storagebox" style="margin: 1em 0; width: 100%; display: none;">
7173 17 May 23 nicklas 307       <tr class="header">
7173 17 May 23 nicklas 308         <th colspan="11" id="box.<%=boxNo%>.name" class="box-name"></th>
7173 17 May 23 nicklas 309       </tr>
7173 17 May 23 nicklas 310       <tr class="header">
7173 17 May 23 nicklas 311         <th></th>
7173 17 May 23 nicklas 312         <%
7173 17 May 23 nicklas 313         for (int c = 0; c < columns; ++c)
7173 17 May 23 nicklas 314         {
7173 17 May 23 nicklas 315           %>
7173 17 May 23 nicklas 316           <th id="box.<%=boxNo%>.col.<%=c%>"><%=colF.format(c)%></th>
7173 17 May 23 nicklas 317           <%
7173 17 May 23 nicklas 318         }
7173 17 May 23 nicklas 319         %>
7173 17 May 23 nicklas 320         <th style="border-bottom: 0;"></th>
7173 17 May 23 nicklas 321       </tr>
7173 17 May 23 nicklas 322       <tbody>
7173 17 May 23 nicklas 323       <%
7173 17 May 23 nicklas 324       for (int r = 0; r < rows; ++r)
7173 17 May 23 nicklas 325       {
7173 17 May 23 nicklas 326         String row = rowF.format(r);
7173 17 May 23 nicklas 327         %>
7173 17 May 23 nicklas 328         <tr class="row-<%=r%> empty-row" id="box.<%=boxNo%>.row.<%=r%>">
7173 17 May 23 nicklas 329           <th class="rowheader"><%=row%></th>
7173 17 May 23 nicklas 330           <%
7173 17 May 23 nicklas 331           for (int c = 0; c < columns; ++c)
7173 17 May 23 nicklas 332           {
7173 17 May 23 nicklas 333             %>
7173 17 May 23 nicklas 334             <td class="well col-<%=c%>" id="box.<%=boxNo%>.well.<%=r%>.<%=c%>"></td>
7173 17 May 23 nicklas 335             <%
7173 17 May 23 nicklas 336           }
7173 17 May 23 nicklas 337           %>
7173 17 May 23 nicklas 338           <th class="rowheader"><%=row%></th>
7173 17 May 23 nicklas 339         </tr>
7173 17 May 23 nicklas 340         <%
7173 17 May 23 nicklas 341       }
7173 17 May 23 nicklas 342       %>
7173 17 May 23 nicklas 343       </tbody>
7173 17 May 23 nicklas 344       <tr class="footer">
7173 17 May 23 nicklas 345         <th></th>
7173 17 May 23 nicklas 346         <%
7173 17 May 23 nicklas 347         for (int c = 0; c < columns; ++c)
7173 17 May 23 nicklas 348         {
7173 17 May 23 nicklas 349           %>
7173 17 May 23 nicklas 350           <th id="box.<%=boxNo%>.col.<%=c%>"><%=colF.format(c)%></th>
7173 17 May 23 nicklas 351           <%
7173 17 May 23 nicklas 352         }
7173 17 May 23 nicklas 353         %>
7173 17 May 23 nicklas 354         <th style="border-top: 0;"></th>
7173 17 May 23 nicklas 355       </tr>
7173 17 May 23 nicklas 356       </table>
7173 17 May 23 nicklas 357       <div id="box.<%=boxNo%>.more-boxes" class="more-boxes" style="display: none;">
7173 17 May 23 nicklas 358         Continued on next page...
7173 17 May 23 nicklas 359       </div>
7173 17 May 23 nicklas 360       <%
7173 17 May 23 nicklas 361     }
7173 17 May 23 nicklas 362   }
7173 17 May 23 nicklas 363   %>
7173 17 May 23 nicklas 364 </div>
7173 17 May 23 nicklas 365 </form>
7173 17 May 23 nicklas 366 </div>
7173 17 May 23 nicklas 367   
7173 17 May 23 nicklas 368 </base:body>
7173 17 May 23 nicklas 369 </base:page>
7173 17 May 23 nicklas 370 <%
7173 17 May 23 nicklas 371 }
7173 17 May 23 nicklas 372 finally
7173 17 May 23 nicklas 373 {
7173 17 May 23 nicklas 374   if (dc != null) dc.close();
7173 17 May 23 nicklas 375 }
7173 17 May 23 nicklas 376 %>