From ed7962d75356c56b2d6ba944bc9030f3bd36b822 Mon Sep 17 00:00:00 2001 From: Mark W <24956497+ndg63276@users.noreply.github.com> Date: Tue, 23 Jul 2024 10:50:10 +0100 Subject: [PATCH] Merge release 2024-R3.2 into master (#810) * LIMS-1319: Show dose for all data collection types (#791) * LIMS-954: Add ability to edit manufacturer serial no on dewars (#652) * LIMS-1276: Add printed date to shipping labels (#755) * LIMS-902: Clear sessionId from containers when requesting a dewar transfer (#673) * LIMS-277: Fix sample changer view scaling (#794) * LIMS-121: Allow use of VMXm Gridboxes and Cartridges (#732) * LIMS-1257: Allow population of source fields (#769) * LIMS-1382: Add message to users about using the shipping service (#801) --------- Co-authored-by: Mark Williams Co-authored-by: Guilherme Francisco --- api/assets/pdf/shipment_label.php | 25 ++++++--- api/assets/pdf/styles.css | 4 +- api/src/Page/PDF.php | 2 +- api/src/Page/Sample.php | 14 +++-- api/src/Page/Shipment.php | 53 +++++++++++------- .../src/images/block-4_no_labels_470x470.png | Bin 0 -> 6849 bytes .../images/cartridge_no_labels_470x470.png | Bin 0 -> 3106 bytes .../src/images/gridbox_no_labels_470x470.png | Bin 0 -> 7128 bytes .../src/js/modules/dc/views/samplechanger.js | 4 +- .../components/container-view-wrapper.vue | 3 +- .../modules/shipment/components/puck-view.vue | 42 +++++++++++--- .../modules/shipment/models/dewarregistry.js | 5 +- .../modules/shipment/views/dewarregistry.js | 2 + .../src/js/modules/shipment/views/dispatch.js | 4 ++ .../src/js/modules/shipment/views/regdewar.js | 1 + .../mx/samples/valid-container-graphic.vue | 1 + .../mx/shipment/views/mx-container-add.vue | 4 +- client/src/js/templates/dc/dc.html | 12 ++-- .../templates/shipment/dewarregistryadd.html | 4 ++ .../src/js/templates/shipment/dispatch.html | 2 + .../src/js/templates/shipment/regdewar.html | 6 +- 21 files changed, 130 insertions(+), 58 deletions(-) create mode 100644 client/src/images/block-4_no_labels_470x470.png create mode 100755 client/src/images/cartridge_no_labels_470x470.png create mode 100755 client/src/images/gridbox_no_labels_470x470.png diff --git a/api/assets/pdf/shipment_label.php b/api/assets/pdf/shipment_label.php index 4fb7a630a..0dcfba40d 100644 --- a/api/assets/pdf/shipment_label.php +++ b/api/assets/pdf/shipment_label.php @@ -8,12 +8,11 @@
  1. Dewar Label: affix this label to your dewar which ensures it can be identified at all times at the facility
  2. Outbound Address label: To be attached to the outside of your transport container for shipment to facility
  3. -
  4. Return Address Label: The return address for your shipment (Please include this in your shipment, e.g. put it behind the outward bound address or in the transport container)
  5. +
  6. Return Address Label: The return address for your shipment (Please include this in your shipment, e.g. put it behind the outbound label or in the transport container)
+ Please remove old paperwork immediately after you receive your dewar back from Diamond. - -

1. Dewar Tracking Label

@@ -49,10 +48,6 @@ Safety Level - - No. Parcels - - @@ -68,6 +63,10 @@ + + + +
Local Contact
Printed on
@@ -79,7 +78,7 @@
15 ? substr($bar_code,0,14).'+' : $bar_code ?>
- 10) { ?> + count(explode(',', $d['CONTAINERSBARCODE']))) { ?>
@@ -158,6 +157,10 @@ Local Contact + + Printed on + +
FROM:
@@ -250,6 +253,10 @@ Transport Value + + Printed on + +
FROM:
@@ -267,4 +274,4 @@ - \ No newline at end of file + diff --git a/api/assets/pdf/styles.css b/api/assets/pdf/styles.css index cd539c4a6..77b999a51 100644 --- a/api/assets/pdf/styles.css +++ b/api/assets/pdf/styles.css @@ -123,7 +123,7 @@ table { } ol { - margin-left: 25px; + margin-left: 10px; } .bold { @@ -185,4 +185,4 @@ ol { .float-left { float: left; -} \ No newline at end of file +} diff --git a/api/src/Page/PDF.php b/api/src/Page/PDF.php index 48d6944d3..19d70b90f 100644 --- a/api/src/Page/PDF.php +++ b/api/src/Page/PDF.php @@ -159,7 +159,7 @@ function _shipment_label() $this->ship = $ship; - $this->dewars = $this->db->pq("SELECT bl.beamlinename, bl.beamlineoperator, TO_CHAR(bl.startdate, 'DD-MM-YYYY') as st, d.transportvalue, d.customsvalue, d.code, d.barcode, count(cq.containerqueueid) as auto, count(c.containerid) as containers, GROUP_CONCAT(COALESCE(cr.barCode, c.code) LIMIT 10) as containersBarCode + $this->dewars = $this->db->pq("SELECT bl.beamlinename, bl.beamlineoperator, TO_CHAR(bl.startdate, 'DD-MM-YYYY') as st, d.transportvalue, d.customsvalue, d.code, d.barcode, count(cq.containerqueueid) as auto, count(c.containerid) as containers, GROUP_CONCAT(COALESCE(cr.barCode, c.code) LIMIT 8) as containersBarCode FROM dewar d LEFT OUTER JOIN blsession bl ON d.firstexperimentid = bl.sessionid LEFT OUTER JOIN container c ON c.dewarid = d.dewarid diff --git a/api/src/Page/Sample.php b/api/src/Page/Sample.php index 059eeb03b..946461582 100644 --- a/api/src/Page/Sample.php +++ b/api/src/Page/Sample.php @@ -116,6 +116,7 @@ class Sample extends Page 'MONOCHROMATOR' => '\w+', 'PRESET' => '\d', 'BEAMLINENAME' => '[\w\-]+', + 'SOURCE' => '[\w\-]+', 'queued' => '\d', 'UNQUEUE' => '\d', @@ -1342,8 +1343,10 @@ function _update_sample_components($initial, $final, $amounts, $crystalid) function _add_sample() { - if (!$this->has_arg('prop')) - $this->_error('No proposal specified'); + if (!$this->has_arg('prop')) { + $this->_output(array()); + return; + } // Register entire container if ($this->has_arg('collection')) { @@ -1465,7 +1468,8 @@ function _prepare_sample_args($s = null) 'SAMPLEGROUP', 'STRATEGYOPTION', 'MINIMUMRESOLUTION', - 'INITIALSAMPLEGROUP' + 'INITIALSAMPLEGROUP', + 'SOURCE' ) as $f) { if ($s) $a[$f] = array_key_exists($f, $s) ? $s[$f] : null; @@ -1516,8 +1520,8 @@ function _do_add_sample($s) } $this->db->pq( - "INSERT INTO blsample (blsampleid,crystalid,diffractionplanid,containerid,location,comments,name,code,blsubsampleid,screencomponentgroupid,volume,packingfraction,dimension1,dimension2,dimension3,shape,looptype) VALUES (s_blsample.nextval,:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16) RETURNING blsampleid INTO :id", - array($crysid, $did, $a['CONTAINERID'], $a['LOCATION'], $a['COMMENTS'], $a['NAME'], $a['CODE'], $a['BLSUBSAMPLEID'], $a['SCREENCOMPONENTGROUPID'], $a['VOLUME'], $a['PACKINGFRACTION'], $a['DIMENSION1'], $a['DIMENSION2'], $a['DIMENSION3'], $a['SHAPE'], $a['LOOPTYPE']) + "INSERT INTO blsample (blsampleid,crystalid,diffractionplanid,containerid,location,comments,name,code,blsubsampleid,screencomponentgroupid,volume,packingfraction,dimension1,dimension2,dimension3,shape,looptype,source) VALUES (s_blsample.nextval,:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,IFNULL(:17,CURRENT_USER)) RETURNING blsampleid INTO :id", + array($crysid, $did, $a['CONTAINERID'], $a['LOCATION'], $a['COMMENTS'], $a['NAME'], $a['CODE'], $a['BLSUBSAMPLEID'], $a['SCREENCOMPONENTGROUPID'], $a['VOLUME'], $a['PACKINGFRACTION'], $a['DIMENSION1'], $a['DIMENSION2'], $a['DIMENSION3'], $a['SHAPE'], $a['LOOPTYPE'], $a['SOURCE']) ); $sid = $this->db->id(); diff --git a/api/src/Page/Shipment.php b/api/src/Page/Shipment.php index 1b069a851..fd1b24b41 100644 --- a/api/src/Page/Shipment.php +++ b/api/src/Page/Shipment.php @@ -53,6 +53,7 @@ class Shipment extends Page 'STATUS' => '[\w|\s|\-]+', 'PURCHASEDATE' => '\d+-\d+-\d+', + 'MANUFACTURERSERIALNUMBER' => '.*', 'LABCONTACTID' => '\d+', 'REPORT' => '.*', @@ -126,6 +127,7 @@ class Shipment extends Page 'PUCK' => '\d', 'PROCESSINGPIPELINEID' => '\d+', 'OWNERID' => '\d+', + 'SOURCE' => '[\w\-]+', 'CONTAINERREGISTRYID' => '\d+', 'PROPOSALID' => '\d+', @@ -620,7 +622,7 @@ function _dewar_registry() $args = array($this->proposalid); $where = 'p.proposalid=:1'; - $fields = "r.dewarregistryid, max(CONCAT(p.proposalcode, p.proposalnumber)) as prop, r.facilitycode, TO_CHAR(r.purchasedate, 'DD-MM-YYYY') as purchasedate, ROUND(TIMESTAMPDIFF('DAY',r.purchasedate, CURRENT_TIMESTAMP)/30.42,1) as age, r.labcontactid, count(distinct d.dewarid) as dewars, GROUP_CONCAT(distinct CONCAT(p.proposalcode,p.proposalnumber) SEPARATOR ', ') as proposals, r.bltimestamp, TO_CHAR(max(d.bltimestamp),'DD-MM-YYYY') as lastuse, count(dr.dewarreportid) as reports"; + $fields = "r.dewarregistryid, max(CONCAT(p.proposalcode, p.proposalnumber)) as prop, r.facilitycode, TO_CHAR(r.purchasedate, 'DD-MM-YYYY') as purchasedate, ROUND(TIMESTAMPDIFF('DAY',r.purchasedate, CURRENT_TIMESTAMP)/30.42,1) as age, r.labcontactid, count(distinct d.dewarid) as dewars, GROUP_CONCAT(distinct CONCAT(p.proposalcode,p.proposalnumber) SEPARATOR ', ') as proposals, r.bltimestamp, TO_CHAR(max(d.bltimestamp),'DD-MM-YYYY') as lastuse, count(dr.dewarreportid) as reports, r.manufacturerserialnumber"; $group = "r.facilitycode"; if ($this->has_arg('all') && $this->staff) { @@ -712,7 +714,8 @@ function _add_dewar_registry() } $purchase = $this->has_arg('PURCHASEDATE') ? $this->arg('PURCHASEDATE') : ''; - $this->db->pq("INSERT INTO dewarregistry (facilitycode, purchasedate, bltimestamp) VALUES (:1, TO_DATE(:2, 'DD-MM-YYYY'), SYSDATE)", array($fc, $purchase)); + $serial = $this->has_arg('MANUFACTURERSERIALNUMBER') ? $this->arg('MANUFACTURERSERIALNUMBER') : ''; + $this->db->pq("INSERT INTO dewarregistry (facilitycode, purchasedate, bltimestamp, manufacturerserialnumber) VALUES (:1, TO_DATE(:2, 'DD-MM-YYYY'), SYSDATE, :3)", array($fc, $purchase, $serial)); $this->_output(array('FACILITYCODE' => $fc, 'DEWARREGISTRYID' => $this->db->id())); } @@ -734,7 +737,7 @@ function _update_dewar_registry() else $dew = $dew[0]; - $fields = array('PURCHASEDATE'); + $fields = array('PURCHASEDATE', 'MANUFACTURERSERIALNUMBER'); if ($this->staff) array_push($fields, 'NEWFACILITYCODE'); foreach ($fields as $f) { @@ -915,26 +918,25 @@ function _transfer_dewar() if (!$this->has_arg('LOCATION')) $this->_error('No location specified'); - $dew = $this->db->pq("SELECT d.dewarid,s.shippingid + $dew = $this->db->pq("SELECT d.dewarid,s.shippingid,c.containerid FROM dewar d INNER JOIN shipping s ON s.shippingid = d.shippingid INNER JOIN proposal p ON p.proposalid = s.proposalid + LEFT JOIN container c ON d.dewarid = c.dewarid WHERE d.dewarid=:1 and p.proposalid=:2", array($this->arg('DEWARID'), $this->proposalid)); if (!sizeof($dew)) $this->_error('No such dewar'); - else - $dew = $dew[0]; $this->db->pq( "INSERT INTO dewartransporthistory (dewartransporthistoryid,dewarid,dewarstatus,storagelocation,arrivaldate) VALUES (s_dewartransporthistory.nextval,:1,'transfer-requested',:2,CURRENT_TIMESTAMP) RETURNING dewartransporthistoryid INTO :id", - array($dew['DEWARID'], $this->arg('LOCATION')) + array($this->arg('DEWARID'), $this->arg('LOCATION')) ); // Update dewar status to transfer-requested to keep consistent with history - $this->db->pq("UPDATE dewar set dewarstatus='transfer-requested' WHERE dewarid=:1", array($dew['DEWARID'])); + $this->db->pq("UPDATE dewar set dewarstatus='transfer-requested' WHERE dewarid=:1", array($this->arg('DEWARID'))); if ($this->has_arg('NEXTVISIT')) { $sessions = $this->db->pq( @@ -947,7 +949,13 @@ function _transfer_dewar() $sessionId = !empty($sessions) ? $sessions[0]['SESSIONID'] : NULL; - $this->db->pq("UPDATE dewar SET firstexperimentid=:1 WHERE dewarid=:2", array($sessionId, $dew['DEWARID'])); + $this->db->pq("UPDATE dewar SET firstexperimentid=:1 WHERE dewarid=:2", array($sessionId, $this->arg('DEWARID'))); + + if (is_null($sessionId)) { + foreach ($dew as $container) { + $this->db->pq("UPDATE container SET sessionid=:1 WHERE containerid=:2", array($sessionId, $container['CONTAINERID'])); + } + } } $email = new Email('dewar-transfer', '*** Dewar ready for internal transfer ***'); @@ -1550,6 +1558,7 @@ function _add_dewar() $fc = $this->has_arg('FACILITYCODE') ? $this->arg('FACILITYCODE') : ''; $wg = $this->has_arg('WEIGHT') ? $this->arg('WEIGHT') : $dewar_weight; $exp = null; + $source = $this->has_arg('SOURCE') ? $this->arg('SOURCE') : null; if ($this->has_arg('FIRSTEXPERIMENTID')) { $experimentId = $this->arg('FIRSTEXPERIMENTID'); @@ -1557,9 +1566,9 @@ function _add_dewar() } $this->db->pq( - "INSERT INTO dewar (dewarid,code,trackingnumbertosynchrotron,trackingnumberfromsynchrotron,shippingid,bltimestamp,dewarstatus,firstexperimentid,facilitycode,weight) - VALUES (s_dewar.nextval,:1,:2,:3,:4,CURRENT_TIMESTAMP,'opened',:5,:6,:7) RETURNING dewarid INTO :id", - array($this->arg('CODE'), $to, $from, $this->arg('SHIPPINGID'), $exp, $fc, $wg) + "INSERT INTO dewar (dewarid,code,trackingnumbertosynchrotron,trackingnumberfromsynchrotron,shippingid,bltimestamp,dewarstatus,firstexperimentid,facilitycode,weight,source) + VALUES (s_dewar.nextval,:1,:2,:3,:4,CURRENT_TIMESTAMP,'opened',:5,:6,:7,IFNULL(:8,CURRENT_USER)) RETURNING dewarid INTO :id", + array($this->arg('CODE'), $to, $from, $this->arg('SHIPPINGID'), $exp, $fc, $wg, $source) ); $id = $this->db->id(); @@ -2185,11 +2194,12 @@ function _add_container() $crid = $this->has_arg('CONTAINERREGISTRYID') ? $this->arg('CONTAINERREGISTRYID') : null; $pipeline = $this->has_arg('PROCESSINGPIPELINEID') ? $this->arg('PROCESSINGPIPELINEID') : null; + $source = $this->has_arg('SOURCE') ? $this->arg('SOURCE') : null; $this->db->pq( - "INSERT INTO container (containerid,dewarid,code,bltimestamp,capacity,containertype,scheduleid,screenid,ownerid,requestedimagerid,comments,barcode,experimenttype,storagetemperature,containerregistryid,prioritypipelineid) - VALUES (s_container.nextval,:1,:2,CURRENT_TIMESTAMP,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14) RETURNING containerid INTO :id", - array($this->arg('DEWARID'), $this->arg('NAME'), $cap, $this->arg('CONTAINERTYPE'), $sch, $scr, $own, $rid, $com, $bar, $ext, $tem, $crid, $pipeline) + "INSERT INTO container (containerid,dewarid,code,bltimestamp,capacity,containertype,scheduleid,screenid,ownerid,requestedimagerid,comments,barcode,experimenttype,storagetemperature,containerregistryid,prioritypipelineid,source) + VALUES (s_container.nextval,:1,:2,CURRENT_TIMESTAMP,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,IFNULL(:15,CURRENT_USER)) RETURNING containerid INTO :id", + array($this->arg('DEWARID'), $this->arg('NAME'), $cap, $this->arg('CONTAINERTYPE'), $sch, $scr, $own, $rid, $com, $bar, $ext, $tem, $crid, $pipeline, $source) ); $cid = $this->db->id(); @@ -2665,6 +2675,7 @@ function _add_shipment() $rt = $this->has_arg('READYBYTIME') ? $this->arg('READYBYTIME') : null; $ct = $this->has_arg('CLOSETIME') ? $this->arg('CLOSETIME') : null; $loc = $this->has_arg('PHYSICALLOCATION') ? $this->arg('PHYSICALLOCATION') : null; + $source = $this->has_arg('SOURCE') ? $this->arg('SOURCE') : null; $hard_drive_enclosed = null; if ($this->has_arg('ENCLOSEDHARDDRIVE')) { @@ -2727,9 +2738,9 @@ function _add_shipment() $extra = json_encode($extra_array); $this->db->pq( - "INSERT INTO shipping (shippingid, proposalid, shippingname, deliveryagent_agentname, deliveryagent_agentcode, deliveryagent_shippingdate, deliveryagent_deliverydate, bltimestamp, creationdate, comments, sendinglabcontactid, returnlabcontactid, shippingstatus, safetylevel, readybytime, closetime, physicallocation) - VALUES (s_shipping.nextval,:1,:2,:3,:4,TO_DATE(:5,'DD-MM-YYYY'), TO_DATE(:6,'DD-MM-YYYY'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,:7,:8,:9,'opened',:10, :11, :12, :13) RETURNING shippingid INTO :id", - array($this->proposalid, $this->arg('SHIPPINGNAME'), $an, $ac, $sd, $dd, $com, $this->arg('SENDINGLABCONTACTID'), $this->arg('RETURNLABCONTACTID'), $this->arg('SAFETYLEVEL'), $rt, $ct, $loc) + "INSERT INTO shipping (shippingid, proposalid, shippingname, deliveryagent_agentname, deliveryagent_agentcode, deliveryagent_shippingdate, deliveryagent_deliverydate, bltimestamp, creationdate, comments, sendinglabcontactid, returnlabcontactid, shippingstatus, safetylevel, readybytime, closetime, physicallocation, source) + VALUES (s_shipping.nextval,:1,:2,:3,:4,TO_DATE(:5,'DD-MM-YYYY'), TO_DATE(:6,'DD-MM-YYYY'),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,:7,:8,:9,'opened',:10, :11, :12, :13, IFNULL(:14,CURRENT_USER)) RETURNING shippingid INTO :id", + array($this->proposalid, $this->arg('SHIPPINGNAME'), $an, $ac, $sd, $dd, $com, $this->arg('SENDINGLABCONTACTID'), $this->arg('RETURNLABCONTACTID'), $this->arg('SAFETYLEVEL'), $rt, $ct, $loc, $source) ); $sid = $this->db->id(); @@ -2756,9 +2767,9 @@ function _add_shipment() $n = $fc ? $fc : ('Dewar' . ($i + 1)); $this->db->pq( - "INSERT INTO dewar (dewarid,code,shippingid,bltimestamp,dewarstatus,firstexperimentid,facilitycode,weight) - VALUES (s_dewar.nextval,:1,:2,CURRENT_TIMESTAMP,'opened',:3,:4,$dewar_weight) RETURNING dewarid INTO :id", - array($n, $sid, $exp, $fc) + "INSERT INTO dewar (dewarid,code,shippingid,bltimestamp,dewarstatus,firstexperimentid,facilitycode,weight,source) + VALUES (s_dewar.nextval,:1,:2,CURRENT_TIMESTAMP,'opened',:3,:4,:5,IFNULL(:6,CURRENT_USER)) RETURNING dewarid INTO :id", + array($n, $sid, $exp, $fc, $dewar_weight, $source) ); $id = $this->db->id(); diff --git a/client/src/images/block-4_no_labels_470x470.png b/client/src/images/block-4_no_labels_470x470.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe5a381fbeeac72e2a66ae70cd4cd82685a2356 GIT binary patch literal 6849 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 G^Zx@lg~Fcz literal 0 HcmV?d00001 diff --git a/client/src/images/cartridge_no_labels_470x470.png b/client/src/images/cartridge_no_labels_470x470.png new file mode 100755 index 0000000000000000000000000000000000000000..90fd93df4808bbe07489e2979aacaf1ba1497794 GIT binary patch literal 3106 zcmZuz2~<LI{u;90-=#FXs96s5J?b}L6A|YQZ*4YU`5eZ zF(L)5G>riwgM}(BVG;+1S`n+Z(`bRT`P3Cx zuC4j8+ilr}VgLO6wtY|MJkH)(B0ZI~pndkV3&+yMU9Me?$B*=X^ts;^??Zw4tCl4W zl8R=u`kec#r*&N0?%Vl+kMC+XFNe$ibN*zXcJiK}X7a)pU2=Tt!z%yU?{u@pgWHF{ zV~eke8rFWfw8Zns!9W*}goT1&8;9zqlrPG92X}OI2K+kt!`(v{BS z^QWP^{`xFSr;o4B3d-^f2&)nje;yb+PT`C>I7Me~e=vUM8KE~k^74{)ojW_KW<2-6 zR=elVpFcjfYG*(>KkI8hM;lM*ibecNJ`ah){@axI)v#ifu_7uPL40OnA41-#fGx0S znG+HgY&k}>w^~3crFvPyl5~2 z4Kme3^;V&p_EUEfw~-huh59$N0ObuW+N~u%B+ja1YM7zd;hEJbbD0{>X<88rfFEp@ zX|dy^dA+{|i%Xj2SS(K-QWB&jL`ph*yczNh2Y%sJc+(6=3(#&TX9~6x{tpTkyXVQa zB7Z!+Q2lH9)^n2895KN#U`NxaIKM7_p7EC|62I~}Ry2G>kLBCncXGnNho)br!ehv+ zGQ9=>nO|_>V!O$D7$=gkxL3&$a}^p=0eWM>ifT#+rQ_~Ru9&+v)|brECaQR7|JFv* zK}U_k&m4v7^bi;k>@)J;A_QEq%teL@X`&?hjVryy?~z%G@%V&p`vP>5{mFr`;@M=@ zLATgShx%Ix;5UqawoU8pQKH_taC+W7mQ9slS>%qM;dkU(d0B;D;kU12Jghq?@ych; z*eq8*X(eK_w>D$x4wjP(uleO7SrOWjb3U|Q5>E92oj4}jJjGOQ zAnMyj^f;}XcV;%8E*L8RJ>7BK%0xf`gw5n|Fzo7P~Q!S*Vv((R2 z9WT<)B2VQgeQ%|_2)*Gasit^|*liSVGD|R1D~ArxB_4NhbZjiN7Gl5aaDM1XO+>1Nk>0ij6_HtYv+Yytj3<_+mT(@L%57-D zR3n@^AIy4gj;E`Y**`y&8`Oq(6kj!{DDUaEqBdir3mx2KZ`GSr^?SH#y~Mzs)+mq) zY%P&D0-I=VsZdBrb6K5J69F+Zl_({-H#pEllFQ5@=mPn0s-={ancD}PI8rq&!f&L{ zfwNBQF-j9cbzCh&g}N?EO(Yi@lwvLdomB-(d}p$10Di;1QgjVXr0--euVz(%4`t=Z zqR*$BnOJJ{LhL+KXw?co_3Q6*^e5^U76eYLec>FpoeZklHfsO!<>sO}Q1Ild8x=5< zQ#$TZuvy*S@ylebB#Ab3f7skhq`x|`pbeks!4Fia;PPxl!(4nId_n;gM)>N0dIm;=zRLlrFC|*l2sldLW z85o=7>-Xb1oI6GRO%M|k!l2T;>%G*$eT9cPRQFbzabv>%y;VH=X5g)&=n;@jl zb!7r9M(O;a0Hy8u-#^SaOW{28!(LLcnHx5_R))=}xW(-| zlxkBQ{auMswq*cmwkSN5Qe9%WQ3g_rZumL1$3|kYW6q6hhj!>Kl<8wN^KZM zleGYiFMtTRbfBBszhes&fN`tc&Fu7{lF$}hK7#kBrW^?m2TrWS9i>we+&PUza$3vNLQ=~5`eNcxv|6HelJ@`0)DFKV$fNk zgRBpCLV2&x2cl5mw_WF?qAm}t@#6QSl!Z4 z=h5PO(-X4osmN=~yROy^E>MtB|?U rW!>4-+XoeM^0pBE{>}ywhrW|A67PI#N6AI(EfWa|Ud5{ml*s=FN+fCY literal 0 HcmV?d00001 diff --git a/client/src/images/gridbox_no_labels_470x470.png b/client/src/images/gridbox_no_labels_470x470.png new file mode 100755 index 0000000000000000000000000000000000000000..ac8e4385b64e7ace65ddee5fe8edf19ae93f8f2c GIT binary patch literal 7128 zcmeHKc~n!^*1rLf5L7@L5VaEHKp|#iOiGv$se+6#qEB*@Tp$WbNW!Eb7-7j!MXe$r zlU5NSYA9O35ra@GSbQoLDk@H(7DbJ>Uh2nCs{lI}z+$oKYDL{ykk6%2fozi3F)k5-Ey72#RDWLO_y4 zkr0&h+m@ge;%366;l3}}$~wq(%8Jr!GhYsV*?7u+mu<(?TY^06N3UO}9LS>t&+p=_ zc~xx07gHt&9I$zFd8y;eZFZY~YEM~bF@Xceo3G+`X1b(o?GzXt9dU?ecK5_4?md2C zpnZ6@{(+I%Uto9kMY8T~n!bN(R!oa8;o|C6?XgXz!2?m@^CX429(w|9y6!BWL+a7? zyGLvuoPNyT^L94=Cr@Nkgn!gEo|klj6LC94=bCppc5|oU4yd{Js0Tvo!8C&JU{&GPlml z-{v`kD6|jsnQXrA*qZ$X7cOtmG`aN-UcJBL=P-l0Kj}RVoWtDk%x&=I;T1(&8~n~q zxcruX!)ls4&m!6>_RX8lA8%NvzqPEta$;nialxB;r@K0czKs_grExbq?z4MjhSO88 z%=ePbbMxODs&}jX;U1j(L-Xn3^7X&>-+PI<5VXA2sqx$#+KP()_`F1uSFc_T6b7WZ z75mES&OZs{fC5brfkNc^FJ%cNu@qP+;Uko!SShGb2y$^tlEQ+uh=RaJqC{dgap2@x zB0(f%6PG*q)BL4gNVI72IvEnOE+AB}ZmobRB)YlcT#{ITAQn-;grwLQv7D8}ChB-u zV2y55i3A-)v6fBb`UeucBr=3xPqC-a$UaG;1P0L+M{tn|BU!=Ti^eFxFE%k+p^&nu z)WpO@N}?S_B8#HZnM@{?#-K77WPl*clf?=+i7b}SMJYx(yb-xTCXy;d5-|bgg!z(q z1)E3&a>6_RVx|86@9D+zu_%CeP?KOOl}@2iV`Hh~HRKAP1VA$8(0|pChk|~l1|xDw zyi9=jBp_nN-0>7b!Fzpayevj{9HD@U#2~Q%DhF2SADQ&^^ACKlfrcPT6f4zffna}x zREQ!!1nVQ;P>Jq1;~fF&?|DB$zdO4Q3{d|5EN_V*9(B*pn@vRRvxE|XNXXJH5yXk% z$YAoxh$90b+uJ)jlKC_TCo;l}BNas7i_Cna1!PHR+1*}C9Su70FDT;-o5UNxhr4yh5XL$trv55={ z?ZZxB46KL*3ZMr>Vxc5a{y`KfibX;cFd9#~6V2Jq-r3HP&UCbQws-yj;vh0Ps6~{O zPNUd4>Lh4lSl~Dyv@lw!fIznoPQ&t&A+SOs3zbM>*hJJR0;>65><=1B2rFQ3Sb+di z8pEDNW3cGVP`Vw9&S2ToNi-UZHV!WliXxN$H#FKl1eejIFBZvx{bb$NXitS8aihOR zf5wP(%|syR+JXfOMvowe6A+=!Prx-Q5=6t|CwD^Q@iSP{M&OO?&X-XumN zXdXbw$TS9dT*!#jvBOf)iSh2VF4X^shl>s{Zo~k+(LFG_z$B!;ABAJ_0>1u}pRqjr zlO_m+&qh8ezMsSOIb5FXL3mQpojWq90wR!s zrLiWbT-it*gDG=$}E ztHAA~ffHwwTXIdZ4Lxnj!ulGQ zPrN2K>Kr_BewTF${@dNtw1%h+5A*yR`n~PvCcyX(BWkh1=AmiJ&kWjfLr+&0xP5H| z&wnVZ?V+XZ?5pNkH?26h;UK@QY|ojQq}4H0a&P-qPj2?o|%>r&J5FQJ6}Izcw3a~Dv;R!^IrUSgvHO5kc9`bNL;=@%Txlw(bSz7FL+4^AJ_ zhaZ$Yhy=0kF)7Mx6b)rRP3DiZMQrcuZOJj%h>EX`iWfu}tQXzxV28Ao4J~nJauW=tX6`Q>%)IN%G78fZJ(Vv zr+YSPk_Wss<#e9uX&jE*-qXNi(^r;Mal zZ#*l=Tov@MzXqUg?wr)Xo2%jP``><9jd(t&Txa#nHKwPUS6SQ4w&hE

6or`&Y>FOYJQ@oqLF5#wE z9z;PI_z#yUn)}5)FQN?J?b_B47kY3pK+(y)F3gl;x;$+WK)G|zZMhta&%mD#3-#b` z4Dno01)Mmt57!rMK4W3WX+!lBHuvtGAx(bcAI)!Fd1es?UbklMuT;(?)t|=MVo5Yg zMrxy*zA2~2hj20-IIP`dJmKE%-4L&wbH7jVn_<@8sJED#AN!t84&PhWA(^P(-$5GQ zCPr)4*$V+xeRNOQ3+r31rr z(gD7+OfUIL2iS}0%tQg`_%IwDA2CounR+~3PDGP~PB{%a<$keTcBT}J^w^Fq9j*P_FumYswwkP=+T3pLb4|;t39eCXWtAstG~dmizY|Tg^`g2|Fl0lv z1ONA1?#^hp&{|h%Y>!M@HQjY3fQs)`^JWD!4&P~c+oA&kKW7 zN4&$h%^ki_R+XA~B)yWTx{J%Q1?tegbraq;Oor-fP8`>(Ka3-R{f{6y^?LijEt*8A z!d8PNxRW0N%l`vRJseSAdbAuo5Rh_rSM^a*r8V1&3~JK>MRA?`rHn#%Zp~uyGC52E zof5R$mpFn2mQDt^?0*}mVpVrN_S+AAm`YZ+b#=6gN-M;34n=vErY8B>fw|v^4EiS=ag6<4qB$#Lp+d`-mq``9D*?#;yPW literal 0 HcmV?d00001 diff --git a/client/src/js/modules/dc/views/samplechanger.js b/client/src/js/modules/dc/views/samplechanger.js index 961451f98..a76a7c267 100644 --- a/client/src/js/modules/dc/views/samplechanger.js +++ b/client/src/js/modules/dc/views/samplechanger.js @@ -69,7 +69,7 @@ define(['marionette', 'utils/canvas', 'utils', this.rpad = 0 //pad - 25 var sw = 18 - this.aspectratio = (sw/this.positions) - (this.positions <= 10 ? 0.3 : 0) + this.aspectratio = (this.positions <= 10 ? 1.5 : 0.4) this.contwidth = (this.positions * sw) + this.pad + this.rpad + 15 console.log('sc width', this.contwidth, this.aspectratio) if (!this.getOption('fullScreen')) { @@ -230,4 +230,4 @@ define(['marionette', 'utils/canvas', 'utils', }) -}) \ No newline at end of file +}) diff --git a/client/src/js/modules/shipment/components/container-view-wrapper.vue b/client/src/js/modules/shipment/components/container-view-wrapper.vue index 0261f6e38..3f3424d07 100644 --- a/client/src/js/modules/shipment/components/container-view-wrapper.vue +++ b/client/src/js/modules/shipment/components/container-view-wrapper.vue @@ -123,7 +123,8 @@ export default { // This is the current logic to determine the plate type // Anything other than Box, Puck or PCRStrip // TODO - get container types from data base - let is_plate = ['box', 'puck', 'pcrstrip', 'block-4', null].indexOf(containerType) == -1 && containerType.indexOf('puck') == -1 + let puckTypes = ['cartridge', 'box', 'puck', 'pcrstrip', 'block-4'] + let is_plate = containerType !== null && (!puckTypes.some(v => containerType.includes(v))) return is_plate }, diff --git a/client/src/js/modules/shipment/components/puck-view.vue b/client/src/js/modules/shipment/components/puck-view.vue index c6b201ba9..c78a8ad86 100644 --- a/client/src/js/modules/shipment/components/puck-view.vue +++ b/client/src/js/modules/shipment/components/puck-view.vue @@ -50,16 +50,38 @@ export default { } }, data() { - let sampleCentres, sampleRadius, sampleHighlightRadius - if (this.container.capacity === "4") { + let sampleCentres, sampleRadius, sampleHighlightRadius, containerImage + if (this.container.containerType === "VMXm-Cartridge") { sampleCentres = [ - [200, 150], - [320, 150], - [200, 270], - [320, 270], + [235, 75], + [235, 155], + [235, 235], + [235, 315], + [235, 395], + ] + sampleRadius = 35 + sampleHighlightRadius = 30 + containerImage = '/assets/images/cartridge_no_labels_470x470.png' + } else if (this.container.containerType === "VMXm-GridBox") { + sampleCentres = [ + [315, 310], + [315, 160], + [155, 160], + [155, 310], ] sampleRadius = 50 + sampleHighlightRadius = 19 + containerImage = '/assets/images/gridbox_no_labels_470x470.png' + } else if (this.container.capacity === "4") { + sampleCentres = [ + [152.5, 152.5], + [317.5, 152.5], + [152.5, 317.5], + [317.5, 317.5], + ] + sampleRadius = 75 sampleHighlightRadius = 60 + containerImage = '/assets/images/block-4_no_labels_470x470.png' } else { sampleCentres = [ [235, 157], @@ -81,6 +103,7 @@ export default { ] sampleRadius = 44 sampleHighlightRadius = 35 + containerImage = '/assets/images/puck_no_labels_470x470.png' } return { // Define geometry of puck locations @@ -91,7 +114,7 @@ export default { // Centre coordinates of puck 470x470 pixels // Changing the background image would require changing the centres centres: sampleCentres, - puckImage: '/assets/images/puck_no_labels_470x470.png', + puckImage: containerImage, // Holders for svg elements used in updates graphic: null, // Holder for svg puck graphic labels: null, // Holder for text labels @@ -147,6 +170,11 @@ export default { .append('svg') .attr('viewBox', viewBox.join(',')) .attr('preserveAspectRatio', 'xMaxYMax meet') + // Add the background image + svg.append('image') + .attr('href', this.puckImage) + .attr('width', 470) + .attr('height', 470) // Chart area this.graphic = svg.append('g') this.labels = svg.append('g') diff --git a/client/src/js/modules/shipment/models/dewarregistry.js b/client/src/js/modules/shipment/models/dewarregistry.js index c95bd02b5..e7e92285c 100644 --- a/client/src/js/modules/shipment/models/dewarregistry.js +++ b/client/src/js/modules/shipment/models/dewarregistry.js @@ -23,6 +23,9 @@ define(['backbone'], function(Backbone) { required: false, pattern: 'edate' }, + MANUFACTURERSERIALNUMBER: { + required: false, + }, }, validateFacilityCode: function(value, attr, state) { @@ -59,4 +62,4 @@ define(['backbone'], function(Backbone) { // Model.prototype.validation.NEWFACILITYCODE = Model.prototype.validation.FACILITYCODE return Model -}) \ No newline at end of file +}) diff --git a/client/src/js/modules/shipment/views/dewarregistry.js b/client/src/js/modules/shipment/views/dewarregistry.js index 29355a334..a6bc25b77 100644 --- a/client/src/js/modules/shipment/views/dewarregistry.js +++ b/client/src/js/modules/shipment/views/dewarregistry.js @@ -33,6 +33,7 @@ define(['marionette', 'backgrid', ui: { fc: 'input[name=FACILITYCODE]', date: 'input[name=PURCHASEDATE]', + serial: 'input[name=MANUFACTURERSERIALNUMBER]', }, onRender: function() { @@ -47,6 +48,7 @@ define(['marionette', 'backgrid', app.alert({message: 'New dewar registered ' + this.model.get('FACILITYCODE'), notify: true}) this.ui.fc.val('') this.ui.date.val('') + this.ui.serial.val('') this.model.set({ DEWARS: 0, REPORTS: 0, BLTIMESTAMP: formatDate.default(new Date(), 'yyyy-MM-dd HH:mm:ss') }) this.trigger('model:saved', this.model) this.setupValidation() diff --git a/client/src/js/modules/shipment/views/dispatch.js b/client/src/js/modules/shipment/views/dispatch.js index 6e1d48f93..113415195 100644 --- a/client/src/js/modules/shipment/views/dispatch.js +++ b/client/src/js/modules/shipment/views/dispatch.js @@ -81,6 +81,7 @@ define(['marionette', 'views/form', lab: 'input[name=LABNAME]', submit: 'button[name=submit]', + shippingadvice: '.shippingadvice', facc: 'a.facc', accountNumber: 'input[NAME=DELIVERYAGENT_AGENTCODE]', @@ -294,8 +295,10 @@ define(['marionette', 'views/form', this.ui.dispatchDetails.hide() this.model.dispatchDetailsRequired = false this.ui.submit.text("Proceed") + this.ui.shippingadvice.html("On clicking 'Proceed' you will be redirected to the new Diamond shipping service to book the shipment. Please ensure all stages of the form are completed.

") } else { this.ui.submit.text("Request Dewar Dispatch") + this.ui.shippingadvice.html("") } }, @@ -332,6 +335,7 @@ define(['marionette', 'views/form', this.model.visitRequired = false this.ui.dispatchDetails.hide() this.ui.submit.text("Proceed") + this.ui.shippingadvice.html("On clicking 'Proceed' you will be redirected to the new Diamond shipping service to book the shipment. Please ensure all stages of the form are completed.

") } }, diff --git a/client/src/js/modules/shipment/views/regdewar.js b/client/src/js/modules/shipment/views/regdewar.js index 0dbb529f5..76252e088 100644 --- a/client/src/js/modules/shipment/views/regdewar.js +++ b/client/src/js/modules/shipment/views/regdewar.js @@ -181,6 +181,7 @@ define(['marionette', onRender: function() { var edit = new Editable({ model: this.model, el: this.$el }) edit.create('PURCHASEDATE', 'date') + edit.create('MANUFACTURERSERIALNUMBER', 'text') var self = this this.contacts = new LabContacts(null, { state: { pageSize: 9999 } }) diff --git a/client/src/js/modules/types/mx/samples/valid-container-graphic.vue b/client/src/js/modules/types/mx/samples/valid-container-graphic.vue index 714a6c095..f02d38be1 100644 --- a/client/src/js/modules/types/mx/samples/valid-container-graphic.vue +++ b/client/src/js/modules/types/mx/samples/valid-container-graphic.vue @@ -96,6 +96,7 @@ export default { geometry.drops.w = this.containerType.DROPWIDTH geometry.well = this.containerType.WELLDROP geometry.columns = this.containerType.WELLPERROW + geometry.containerType = this.containerType.NAME return geometry }, selectedDrops() { diff --git a/client/src/js/modules/types/mx/shipment/views/mx-container-add.vue b/client/src/js/modules/types/mx/shipment/views/mx-container-add.vue index 7d197980e..f08642bef 100644 --- a/client/src/js/modules/types/mx/shipment/views/mx-container-add.vue +++ b/client/src/js/modules/types/mx/shipment/views/mx-container-add.vue @@ -405,6 +405,7 @@ const INITIAL_CONTAINER_TYPE = { DROPPERWELLY: null, DROPHEIGHT: null, DROPWIDTH: null, + NAME: null, WELLDROP: -1, WELLPERROW: null, } @@ -517,8 +518,9 @@ export default { this.CONTAINERTYPE = type.get('NAME') const nameToLower = this.CONTAINERTYPE.toLowerCase() this.containerType = Object.assign(INITIAL_CONTAINER_TYPE, type.toJSON()) + const puckTypes = ['cartridge', 'box', 'puck', 'block-4'] - if (nameToLower.includes('puck') || nameToLower.includes('block')) { + if (puckTypes.some(v => nameToLower.includes(v))) { this.plateType = 'puck' } else if (nameToLower.includes('pcrstrip')) { this.plateType = 'pcr' diff --git a/client/src/js/templates/dc/dc.html b/client/src/js/templates/dc/dc.html index 069488215..4237f4515 100644 --- a/client/src/js/templates/dc/dc.html +++ b/client/src/js/templates/dc/dc.html @@ -26,13 +26,11 @@

  • Resolution: <%-RESOLUTION%>Å
  • Wavelength: <%-WAVELENGTH%>Å
  • Exposure: <%-EXPOSURETIME%>s
  • - <% if (DCT == 'SAD' || DCT == 'OSC' || DCT == 'Diamond Anvil High Pressure') { %> - <%if (TOTALABSDOSE) { %> - <%if (DCC > 1) { %> -
  • Total Dose: <%-TOTALDOSE%>MGy
  • - <% } else { %> -
  • Dose: <%-TOTALABSDOSE%>MGy
  • - <% } } }%> + <%if (DCC > 1 && TOTALDOSE) { %> +
  • Total Dose: <%-TOTALDOSE%>MGy
  • + <% } else if (DCC == 1 && TOTALABSDOSE) { %> +
  • Dose: <%-TOTALABSDOSE%>MGy
  • + <% } %>
  • Transmission: <%-TRANSMISSION%>%
  • Beamsize: <%-BSX%>x<%-BSY%>μm
  • Type: <% if (DCT) print(DCT) %>
  • diff --git a/client/src/js/templates/shipment/dewarregistryadd.html b/client/src/js/templates/shipment/dewarregistryadd.html index 750365dd8..09dd2cc81 100644 --- a/client/src/js/templates/shipment/dewarregistryadd.html +++ b/client/src/js/templates/shipment/dewarregistryadd.html @@ -12,6 +12,10 @@

    Add New Dewar

    +
  • + + +
  • diff --git a/client/src/js/templates/shipment/dispatch.html b/client/src/js/templates/shipment/dispatch.html index 292c952fe..74ed6e56f 100644 --- a/client/src/js/templates/shipment/dispatch.html +++ b/client/src/js/templates/shipment/dispatch.html @@ -186,6 +186,8 @@

    Request Dewar Dispatch

    +
    + diff --git a/client/src/js/templates/shipment/regdewar.html b/client/src/js/templates/shipment/regdewar.html index d4ee59889..ee15aeabe 100644 --- a/client/src/js/templates/shipment/regdewar.html +++ b/client/src/js/templates/shipment/regdewar.html @@ -8,6 +8,10 @@

    Dewar: <%-FACILITYCODE%>

    Purchase Date <%-PURCHASEDATE%> (Age: <%-AGE%> months) +
  • + Manufacturer Serial Number + <%-MANUFACTURERSERIALNUMBER%> +
  • @@ -21,4 +25,4 @@

    Location History

    Dewar Reports

    -
    \ No newline at end of file +