From ce82eab49c55581756cdce23fdb47d2ec9d49409 Mon Sep 17 00:00:00 2001 From: Mark W <24956497+ndg63276@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:01:49 +0100 Subject: [PATCH] LIMS-121: Allow use of VMXm Gridboxes and Cartridges (#732) * LIMS-121: Allow use of VMXm Gridboxes and Cartridges * LIMS-121: Undo unnecessary change * Update client/src/js/modules/shipment/components/container-view-wrapper.vue Co-authored-by: Guilherme Francisco * LIMS-121: Pass container type name into the view --------- Co-authored-by: Mark Williams Co-authored-by: Guilherme Francisco --- api/src/Page/Sample.php | 6 ++- .../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 .../components/container-view-wrapper.vue | 3 +- .../modules/shipment/components/puck-view.vue | 42 +++++++++++++++--- .../mx/samples/valid-container-graphic.vue | 1 + .../mx/shipment/views/mx-container-add.vue | 4 +- 8 files changed, 45 insertions(+), 11 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/src/Page/Sample.php b/api/src/Page/Sample.php index 059eeb03b..43a032733 100644 --- a/api/src/Page/Sample.php +++ b/api/src/Page/Sample.php @@ -1342,8 +1342,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')) { 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/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/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'