diff --git a/docs/Changelog.rst b/docs/Changelog.rst index d475656d..11f54fd0 100644 --- a/docs/Changelog.rst +++ b/docs/Changelog.rst @@ -2,6 +2,7 @@ ------------------ - #136 Change default browserlayer +- #135 Allow manual reordering of report samples - #134 Convert impress header table to senaite.app.listing - #133 Refactor publish view controls and content table to viewlets - #132 Add custom action provider for direct PDF sharing via email diff --git a/src/senaite/impress/ajax.py b/src/senaite/impress/ajax.py index 480a7218..3176d232 100644 --- a/src/senaite/impress/ajax.py +++ b/src/senaite/impress/ajax.py @@ -178,6 +178,7 @@ def ajax_config(self): "format": self.get_default_paperformat(), "orientation": self.get_default_orientation(), "template": self.get_default_template(), + "reload_after_reorder": self.get_reload_after_reorder(), "allow_save": self.get_allow_publish_save(), "allow_email": self.get_allow_publish_email(), "custom_actions": custom_actions, diff --git a/src/senaite/impress/browser/publish/content.py b/src/senaite/impress/browser/publish/content.py index 10a0776e..f550bf69 100644 --- a/src/senaite/impress/browser/publish/content.py +++ b/src/senaite/impress/browser/publish/content.py @@ -27,6 +27,7 @@ def __init__(self, context, request): self.show_workflow_action_buttons = False self.show_table_footer = False self.omit_form = True + self.allow_row_reorder = True # Show categories self.categories = [] @@ -49,6 +50,10 @@ def __init__(self, context, request): "title": _("Sample Type"), "sortable": False, "toggle": True}), + ("SamplePoint", { + "title": _("Sample Point"), + "sortable": False, + "toggle": True}), ("created", { "title": _("Registered"), "sortable": False, @@ -185,6 +190,16 @@ def _folder_item_sample(self, obj, item): return item["SampleType"] = obj.getSampleTypeTitle() + # sample point + sp = obj.getSamplePoint() + if sp: + sp_id = api.get_id(sp) + sp_title = api.get_title(sp) + sp_url = api.get_url(sp) + item["SamplePoint"] = api.get_title(sp) + item["replace"]["SamplePoint"] = get_link( + sp_url, value=sp_title or sp_id, target="_blank") + client = obj.getClient() client_url = api.get_url(client) client_id = client.getClientID() diff --git a/src/senaite/impress/browser/static/bundles/senaite.impress.js b/src/senaite/impress/browser/static/bundles/senaite.impress.js index aaf52c3d..f75cffaf 100644 --- a/src/senaite/impress/browser/static/bundles/senaite.impress.js +++ b/src/senaite/impress/browser/static/bundles/senaite.impress.js @@ -1 +1 @@ -(()=>{var t={142:(t,e,n)=>{var r,o,a=n(311);function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}o={settings:{barWidth:1,barHeight:50,moduleSize:5,showHRI:!0,addQuietZone:!0,marginHRI:5,bgColor:"#FFFFFF",color:"#000000",fontSize:10,output:"css",posX:0,posY:0},intval:function(t){var e=c(t);return"string"==e?(t=t.replace(/[^0-9-.]/g,""),t=parseInt(1*t,10),isNaN(t)||!isFinite(t)?0:t):"number"==e&&isFinite(t)?Math.floor(t):0},i25:{encoding:["NNWWN","WNNNW","NWNNW","WWNNN","NNWNW","WNWNN","NWWNN","NNNWW","WNNWN","NWNWN"],compute:function(t,e,n){if(e){"int25"==n&&t.length%2==0&&(t="0"+t);for(var r,i=!0,a=0,c=t.length-1;c>-1;c--){if(r=o.intval(t.charAt(c)),isNaN(r))return"";a+=i?3*r:r,i=!i}t+=((10-a%10)%10).toString()}else t.length%2!=0&&(t="0"+t);return t},getDigit:function(t,e,n){if(""==(t=this.compute(t,e,n)))return"";var r,o;if(result="","int25"==n){var i,a;for(result+="1010",r=0;r"9")return"";t=this.compute(t,e);var a="101";if("ean8"==e){for(i=0;i<4;i++)a+=this.encoding[o.intval(t.charAt(i))][0];for(a+="01010",i=4;i<8;i++)a+=this.encoding[o.intval(t.charAt(i))][2]}else{var c=this.first[o.intval(t.charAt(0))];for(i=1;i<7;i++)a+=this.encoding[o.intval(t.charAt(i))][o.intval(c.charAt(i-1))];for(a+="01010",i=7;i<13;i++)a+=this.encoding[o.intval(t.charAt(i))][2]}return a+"101"},compute:function(t,e){var n="ean13"==e?12:7;t=t.substring(0,n);var r=0,a=!0;for(i=t.length-1;i>-1;i--)r+=(a?3:1)*o.intval(t.charAt(i)),a=!a;return t+((10-r%10)%10).toString()}},msi:{encoding:["100100100100","100100100110","100100110100","100100110110","100110100100","100110100110","100110110100","100110110110","110100100100","110100100110"],compute:function(t,e){return"object"==c(e)?("mod10"==e.crc1?t=this.computeMod10(t):"mod11"==e.crc1&&(t=this.computeMod11(t)),"mod10"==e.crc2?t=this.computeMod10(t):"mod11"==e.crc2&&(t=this.computeMod11(t))):"boolean"==typeof e&&e&&(t=this.computeMod10(t)),t},computeMod10:function(t){var e,n=t.length%2,r=0,i=0;for(e=0;e=0;r--)e+=n*o.intval(t.charAt(r)),n=7==n?2:n+1;return t+((11-e%11)%11).toString()},getDigit:function(t,e){var n=0,r="";for(t=this.compute(t,!1),r="110",i=0;i=0;e--)c=10==c?1:c+1,a+=(i=10==i?1:i+1)*(n=r.indexOf(t.charAt(e))),u+=c*n;var s=a%11,l=(u+=s)%11;return o+=this.encoding[s]+"0",t.length>=10&&(o+=this.encoding[l]+"0"),o+"1011001"}},code39:{encoding:["101001101101","110100101011","101100101011","110110010101","101001101011","110100110101","101100110101","101001011011","110100101101","101100101101","110101001011","101101001011","110110100101","101011001011","110101100101","101101100101","101010011011","110101001101","101101001101","101011001101","110101010011","101101010011","110110101001","101011010011","110101101001","101101101001","101010110011","110101011001","101101011001","101011011001","110010101011","100110101011","110011010101","100101101011","110010110101","100110110101","100101011011","110010101101","100110101101","100100100101","100100101001","100101001001","101001001001","100101101101"],getDigit:function(t){var e,n,r="";if(t.indexOf("*")>=0)return"";for(t=("*"+t+"*").toUpperCase(),e=0;e0&&(r+="0"),r+=this.encoding[n]}return r}},code93:{encoding:["100010100","101001000","101000100","101000010","100101000","100100100","100100010","101010000","100010010","100001010","110101000","110100100","110100010","110010100","110010010","110001010","101101000","101100100","101100010","100110100","100011010","101011000","101001100","101000110","100101100","100010110","110110100","110110010","110101100","110100110","110010110","110011010","101101100","101100110","100110110","100111010","100101110","111010100","111010010","111001010","101101110","101110110","110101110","100100110","111011010","111010110","100110010","101011110"],getDigit:function(t,e){var n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%____*",r="";if(t.indexOf("*")>=0)return"";for(t=t.toUpperCase(),r+=this.encoding[47],i=0;i=0;i--)a=20==a?1:a+1,u=15==u?1:u+1,index=n.indexOf(t.charAt(i)),c+=a*index,s+=u*index;var l=(s+=o=c%47)%47;r+=this.encoding[o],r+=this.encoding[l]}return(r+=this.encoding[47])+"1"}},code128:{encoding:["11011001100","11001101100","11001100110","10010011000","10010001100","10001001100","10011001000","10011000100","10001100100","11001001000","11001000100","11000100100","10110011100","10011011100","10011001110","10111001100","10011101100","10011100110","11001110010","11001011100","11001001110","11011100100","11001110100","11101101110","11101001100","11100101100","11100100110","11101100100","11100110100","11100110010","11011011000","11011000110","11000110110","10100011000","10001011000","10001000110","10110001000","10001101000","10001100010","11010001000","11000101000","11000100010","10110111000","10110001110","10001101110","10111011000","10111000110","10001110110","11101110110","11010001110","11000101110","11011101000","11011100010","11011101110","11101011000","11101000110","11100010110","11101101000","11101100010","11100011010","11101111010","11001000010","11110001010","10100110000","10100001100","10010110000","10010000110","10000101100","10000100110","10110010000","10110000100","10011010000","10011000010","10000110100","10000110010","11000010010","11001010000","11110111010","11000010100","10001111010","10100111100","10010111100","10010011110","10111100100","10011110100","10011110010","11110100100","11110010100","11110010010","11011011110","11011110110","11110110110","10101111000","10100011110","10001011110","10111101000","10111100010","11110101000","11110100010","10111011110","10111101110","11101011110","11110101110","11010000100","11010010000","11010011100","11000111010"],getDigit:function(t){var e=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",n="",r=0,i=0,a=0,c=0,u=0;for(a=0;a1,l="";for(a=0;a<3&&a="0"&&l<="9";for(r=s?105:104,n=this.encoding[r],a=0;a"9"||t.charAt(a+1)<"0"||t.charAt(a+1)>"9")&&(s=!1,n+=this.encoding[100],r+=100*++i);else{for(c=0;a+c="0"&&t.charAt(a+c)<="9";)c++;(s=c>5||a+c-1==t.length&&c>3)&&(n+=this.encoding[99],r+=99*++i)}s?(u=o.intval(t.charAt(a)+t.charAt(a+1)),a+=2):(u=e.indexOf(t.charAt(a)),a+=1),n+=this.encoding[u],r+=++i*u}return n+=this.encoding[r%103],(n+=this.encoding[106])+"11"}},codabar:{encoding:["101010011","101011001","101001011","110010101","101101001","110101001","100101011","100101101","100110101","110100101","101001101","101100101","1101011011","1101101011","1101101101","1011011011","1011001001","1010010011","1001001011","1010011001"],getDigit:function(t){var e,n,r="";for(r+=this.encoding[16]+"0",e=0;e1558)&&!e)return-1;if((t<1||t>49)&&e)return-1;var n=0;for(e&&(n=24);this.dataCWCount[n]127?(r[o]=235,n-=127,o++):n>=48&&n<=57&&e+1=48&&t.charCodeAt(e+1)<=57?(n=10*(n-48)+(t.charCodeAt(e+1)-48),n+=130,e++):n++,r[o]=n,o++;return r},addPadCW:function(t,e,n){var r,o;if(!(e>=n))for(t[e]=129,o=e+1;o=0;n--)r[n]=this.champGaloisDoub(r[n],e),n>0&&(r[n]=this.champGaloisSum(r[n],r[n-1]));return r},addReedSolomonCW:function(t,e,n,r,o){var i,a,c,u=0,s=t/o,l=new Array;for(c=0;c=0;a--)l[a]=u?this.champGaloisMult(u,e[a]):0,a>0&&(l[a]=this.champGaloisSum(l[a-1],l[a]));for(a=n+c,i=s-1;i>=0;i--)r[a]=l[i],a+=o}return r},getBits:function(t){for(var e=new Array,n=0;n<8;n++)e[n]=t&128>>n?1:0;return e},next:function(t,e,n,r,o,i){var a=0,c=4,u=0;do{c==e&&0==u?(this.patternShapeSpecial1(o,i,r[a],e,n),a++):t<3&&c==e-2&&0==u&&n%4!=0?(this.patternShapeSpecial2(o,i,r[a],e,n),a++):c==e-2&&0==u&&n%8==4?(this.patternShapeSpecial3(o,i,r[a],e,n),a++):c==e+4&&2==u&&n%8==0&&(this.patternShapeSpecial4(o,i,r[a],e,n),a++);do{c=0&&1!=i[c][u]&&(this.patternShapeStandard(o,i,r[a],c,u,e,n),a++),c-=2,u+=2}while(c>=0&&u=0&&u=0);c+=3,u+=1}while(c>=8;return n},cRgb:function(t,e,n){return String.fromCharCode(n)+String.fromCharCode(e)+String.fromCharCode(t)},cHexColor:function(t){var e=parseInt("0x"+t.substr(1)),n=255&e,r=255&(e>>=8),o=e>>8;return this.cRgb(o,r,n)}},hexToRGB:function(t){var e=parseInt("0x"+t.substr(1)),n=255&e;return{r:(e>>=8)>>8,g:255&e,b:n}},isHexColor:function(t){var e=new RegExp("#[0-91-F]","gi");return t.match(e)},base64Encode:function(t){for(var e,n,r,o,i,a,c,u="",s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0;l>2,i=(3&e)<<4|(n=t.charCodeAt(l++))>>4,a=(15&n)<<2|(r=t.charCodeAt(l++))>>6,c=63&r,isNaN(n)?a=c=64:isNaN(r)&&(c=64),u+=s.charAt(o)+s.charAt(i)+s.charAt(a)+s.charAt(c);return u},bitStringTo2DArray:function(t){var e=[];e[0]=[];for(var n=0;n=0;b--){for(var v="",g=0;g',p='
',h=0;h0&&(l+=("0"==c?f:p).replace("&W",a*o))}e.showHRI&&(l+='
'+r+"
"),this.resize(t,o*s).html(l)},digitToCss:function(t,e,n,r){var i=o.intval(e.barWidth),a=o.intval(e.barHeight);this.digitToCssRenderer(t,e,this.bitStringTo2DArray(n),r,i,a)},digitToCss2D:function(t,e,n,r){var i=o.intval(e.moduleSize);this.digitToCssRenderer(t,e,n,r,i,i)},digitToSvgRenderer:function(t,e,n,r,i,a){var c=n.length,u=n[0].length,s=i*u,l=a*c;if(e.showHRI){var f=o.intval(e.fontSize);l+=o.intval(e.marginHRI)+f}var p='';p+='';for(var h,d,y='',m=0;m0&&"1"==d&&(p+=y.replace("&W",h*i).replace("&X",(u-h)*i).replace("&Y",m*a))}e.showHRI&&(p+='',p+=''+r+"",p+=""),p+="";var v=document.createElement("object");v.setAttribute("type","image/svg+xml"),v.setAttribute("data","data:image/svg+xml,"+p),this.resize(t,s).append(v)},digitToSvg:function(t,e,n,r){var i=o.intval(e.barWidth),a=o.intval(e.barHeight);this.digitToSvgRenderer(t,e,this.bitStringTo2DArray(n),r,i,a)},digitToSvg2D:function(t,e,n,r){var i=o.intval(e.moduleSize);this.digitToSvgRenderer(t,e,n,r,i,i)},digitToCanvasRenderer:function(t,e,n,r,o,i,a,c){var u=t.get(0);if(u&&u.getContext){var s=n.length,l=n[0].length,f=u.getContext("2d");f.lineWidth=1,f.lineCap="butt",f.fillStyle=e.bgColor,f.fillRect(o,i,l*a,s*c),f.fillStyle=e.color;for(var p=0;p0&&"1"==d&&f.fillRect(o+(l-h)*a,i+p*c,a*h,c)}if(e.showHRI){var m=f.measureText(r);f.fillText(r,o+Math.floor((l*a-m.width)/2),i+s*c+e.fontSize+e.marginHRI)}}},digitToCanvas:function(t,e,n,r){var i=o.intval(e.barWidth),a=o.intval(e.barHeight),c=o.intval(e.posX),u=o.intval(e.posY);this.digitToCanvasRenderer(t,e,this.bitStringTo2DArray(n),r,c,u,i,a)},digitToCanvas2D:function(t,e,n,r){var i=o.intval(e.moduleSize),a=o.intval(e.posX),c=o.intval(e.posY);this.digitToCanvasRenderer(t,e,n,r,a,c,i,i)}},(r=a).fn.extend({barcode:function(t,e,n){var i="",a="",u="",s=!0,l=!1,f=!1;if("string"==typeof t?u=t:"object"==c(t)&&(u="string"==typeof t.code?t.code:"",s=void 0===t.crc||t.crc,l=void 0!==t.rect&&t.rect),""==u)return!1;for(var p in void 0===n&&(n=[]),o.settings)null==n[p]&&(n[p]=o.settings[p]);switch(e){case"std25":case"int25":i=o.i25.getDigit(u,s,e),a=o.i25.compute(u,s,e);break;case"ean8":case"ean13":i=o.ean.getDigit(u,e),a=o.ean.compute(u,e);break;case"code11":i=o.code11.getDigit(u),a=u;break;case"code39":i=o.code39.getDigit(u),a=u;break;case"code93":i=o.code93.getDigit(u,s),a=u;break;case"code128":i=o.code128.getDigit(u),a=u;break;case"codabar":i=o.codabar.getDigit(u),a=u;break;case"msi":i=o.msi.getDigit(u,s),a=o.msi.compute(u,s);break;case"datamatrix":i=o.datamatrix.getDigit(u,l),a=u,f=!0}if(0==i.length)return r(this);!f&&n.addQuietZone&&(i="0000000000"+i+"0000000000");var h=r(this),d="digitTo"+n.output.charAt(0).toUpperCase()+n.output.substr(1)+(f?"2D":"");return"function"==typeof o[d]&&o[d](h,n,i,a),h}})},852:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(476),o=n.n(r)()((function(t){return t[1]}));o.push([t.id,".folding {\n margin: 20px auto;\n width: 40px;\n height: 40px;\n position: relative;\n transform: rotateZ(45deg);\n}\n\n.folding .sk-cube {\n float: left;\n width: 50%;\n height: 50%;\n position: relative;\n transform: scale(1.1);\n}\n\n.folding .sk-cube:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: #dc3545;\n animation: sk-foldCubeAngle 2.4s infinite linear both;\n transform-origin: 100% 100%;\n}\n\n.folding .sk-cube2 {\n transform: scale(1.1) rotateZ(90deg);\n}\n\n.folding .sk-cube3 {\n transform: scale(1.1) rotateZ(180deg);\n}\n\n.folding .sk-cube4 {\n transform: scale(1.1) rotateZ(270deg);\n}\n\n.folding .sk-cube2:before {\n animation-delay: 0.3s;\n}\n\n.folding .sk-cube3:before {\n animation-delay: 0.6s;\n}\n\n.folding .sk-cube4:before {\n animation-delay: 0.9s;\n}\n\n@keyframes sk-foldCubeAngle {\n 0%,\n 10% {\n transform: perspective(140px) rotateX(-180deg);\n opacity: 0;\n }\n 25%,\n 75% {\n transform: perspective(140px) rotateX(0deg);\n opacity: 1;\n }\n 90%,\n 100% {\n transform: perspective(140px) rotateY(180deg);\n opacity: 0;\n }\n}\n",""]);const i=o},476:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=t(e);return e[2]?"@media ".concat(e[2]," {").concat(n,"}"):n})).join("")},e.i=function(t,n,r){"string"==typeof t&&(t=[[null,t,""]]);var o={};if(r)for(var i=0;i{"use strict";var r,o=function(){var t={};return function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}t[e]=n}return t[e]}}(),i=[];function a(t){for(var e=-1,n=0;n{"use strict";t.exports=jQuery}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={id:r,exports:{}};return t[r](i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";const t=React;var e=n.n(t);const r=ReactDOM;var o,i=n.n(r),a=n(311),c=n.n(a),u=(n(142),n(311));function s(t,e){for(var n=0;n",c()(this).append(n)}))}},{key:"render_ranges",value:function(){return(new RangeGraph).load(),this.convert_svg_to_image()}},{key:"convert_svg_to_image",value:function(){return u("svg").each((function(){var t;return(t=document.createElement("img")).src="data:image/svg+xml;base64,"+btoa(c()(this).parent().html()),u(this).replaceWith(t)}))}},{key:"get_csrf_token",value:function(){return document.querySelector("#protect-script").dataset.token}}],n&&s(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();const l=o;function f(t){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f(t)}function p(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function h(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0){t=e.context.getElementsByTagName("input");for(var n=0,r=Object.entries(t);n{var t={142:(t,e,n)=>{var r,o,a=n(311);function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}o={settings:{barWidth:1,barHeight:50,moduleSize:5,showHRI:!0,addQuietZone:!0,marginHRI:5,bgColor:"#FFFFFF",color:"#000000",fontSize:10,output:"css",posX:0,posY:0},intval:function(t){var e=c(t);return"string"==e?(t=t.replace(/[^0-9-.]/g,""),t=parseInt(1*t,10),isNaN(t)||!isFinite(t)?0:t):"number"==e&&isFinite(t)?Math.floor(t):0},i25:{encoding:["NNWWN","WNNNW","NWNNW","WWNNN","NNWNW","WNWNN","NWWNN","NNNWW","WNNWN","NWNWN"],compute:function(t,e,n){if(e){"int25"==n&&t.length%2==0&&(t="0"+t);for(var r,i=!0,a=0,c=t.length-1;c>-1;c--){if(r=o.intval(t.charAt(c)),isNaN(r))return"";a+=i?3*r:r,i=!i}t+=((10-a%10)%10).toString()}else t.length%2!=0&&(t="0"+t);return t},getDigit:function(t,e,n){if(""==(t=this.compute(t,e,n)))return"";var r,o;if(result="","int25"==n){var i,a;for(result+="1010",r=0;r"9")return"";t=this.compute(t,e);var a="101";if("ean8"==e){for(i=0;i<4;i++)a+=this.encoding[o.intval(t.charAt(i))][0];for(a+="01010",i=4;i<8;i++)a+=this.encoding[o.intval(t.charAt(i))][2]}else{var c=this.first[o.intval(t.charAt(0))];for(i=1;i<7;i++)a+=this.encoding[o.intval(t.charAt(i))][o.intval(c.charAt(i-1))];for(a+="01010",i=7;i<13;i++)a+=this.encoding[o.intval(t.charAt(i))][2]}return a+"101"},compute:function(t,e){var n="ean13"==e?12:7;t=t.substring(0,n);var r=0,a=!0;for(i=t.length-1;i>-1;i--)r+=(a?3:1)*o.intval(t.charAt(i)),a=!a;return t+((10-r%10)%10).toString()}},msi:{encoding:["100100100100","100100100110","100100110100","100100110110","100110100100","100110100110","100110110100","100110110110","110100100100","110100100110"],compute:function(t,e){return"object"==c(e)?("mod10"==e.crc1?t=this.computeMod10(t):"mod11"==e.crc1&&(t=this.computeMod11(t)),"mod10"==e.crc2?t=this.computeMod10(t):"mod11"==e.crc2&&(t=this.computeMod11(t))):"boolean"==typeof e&&e&&(t=this.computeMod10(t)),t},computeMod10:function(t){var e,n=t.length%2,r=0,i=0;for(e=0;e=0;r--)e+=n*o.intval(t.charAt(r)),n=7==n?2:n+1;return t+((11-e%11)%11).toString()},getDigit:function(t,e){var n=0,r="";for(t=this.compute(t,!1),r="110",i=0;i=0;e--)c=10==c?1:c+1,a+=(i=10==i?1:i+1)*(n=r.indexOf(t.charAt(e))),s+=c*n;var u=a%11,l=(s+=u)%11;return o+=this.encoding[u]+"0",t.length>=10&&(o+=this.encoding[l]+"0"),o+"1011001"}},code39:{encoding:["101001101101","110100101011","101100101011","110110010101","101001101011","110100110101","101100110101","101001011011","110100101101","101100101101","110101001011","101101001011","110110100101","101011001011","110101100101","101101100101","101010011011","110101001101","101101001101","101011001101","110101010011","101101010011","110110101001","101011010011","110101101001","101101101001","101010110011","110101011001","101101011001","101011011001","110010101011","100110101011","110011010101","100101101011","110010110101","100110110101","100101011011","110010101101","100110101101","100100100101","100100101001","100101001001","101001001001","100101101101"],getDigit:function(t){var e,n,r="";if(t.indexOf("*")>=0)return"";for(t=("*"+t+"*").toUpperCase(),e=0;e0&&(r+="0"),r+=this.encoding[n]}return r}},code93:{encoding:["100010100","101001000","101000100","101000010","100101000","100100100","100100010","101010000","100010010","100001010","110101000","110100100","110100010","110010100","110010010","110001010","101101000","101100100","101100010","100110100","100011010","101011000","101001100","101000110","100101100","100010110","110110100","110110010","110101100","110100110","110010110","110011010","101101100","101100110","100110110","100111010","100101110","111010100","111010010","111001010","101101110","101110110","110101110","100100110","111011010","111010110","100110010","101011110"],getDigit:function(t,e){var n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%____*",r="";if(t.indexOf("*")>=0)return"";for(t=t.toUpperCase(),r+=this.encoding[47],i=0;i=0;i--)a=20==a?1:a+1,s=15==s?1:s+1,index=n.indexOf(t.charAt(i)),c+=a*index,u+=s*index;var l=(u+=o=c%47)%47;r+=this.encoding[o],r+=this.encoding[l]}return(r+=this.encoding[47])+"1"}},code128:{encoding:["11011001100","11001101100","11001100110","10010011000","10010001100","10001001100","10011001000","10011000100","10001100100","11001001000","11001000100","11000100100","10110011100","10011011100","10011001110","10111001100","10011101100","10011100110","11001110010","11001011100","11001001110","11011100100","11001110100","11101101110","11101001100","11100101100","11100100110","11101100100","11100110100","11100110010","11011011000","11011000110","11000110110","10100011000","10001011000","10001000110","10110001000","10001101000","10001100010","11010001000","11000101000","11000100010","10110111000","10110001110","10001101110","10111011000","10111000110","10001110110","11101110110","11010001110","11000101110","11011101000","11011100010","11011101110","11101011000","11101000110","11100010110","11101101000","11101100010","11100011010","11101111010","11001000010","11110001010","10100110000","10100001100","10010110000","10010000110","10000101100","10000100110","10110010000","10110000100","10011010000","10011000010","10000110100","10000110010","11000010010","11001010000","11110111010","11000010100","10001111010","10100111100","10010111100","10010011110","10111100100","10011110100","10011110010","11110100100","11110010100","11110010010","11011011110","11011110110","11110110110","10101111000","10100011110","10001011110","10111101000","10111100010","11110101000","11110100010","10111011110","10111101110","11101011110","11110101110","11010000100","11010010000","11010011100","11000111010"],getDigit:function(t){var e=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",n="",r=0,i=0,a=0,c=0,s=0;for(a=0;a1,l="";for(a=0;a<3&&a="0"&&l<="9";for(r=u?105:104,n=this.encoding[r],a=0;a"9"||t.charAt(a+1)<"0"||t.charAt(a+1)>"9")&&(u=!1,n+=this.encoding[100],r+=100*++i);else{for(c=0;a+c="0"&&t.charAt(a+c)<="9";)c++;(u=c>5||a+c-1==t.length&&c>3)&&(n+=this.encoding[99],r+=99*++i)}u?(s=o.intval(t.charAt(a)+t.charAt(a+1)),a+=2):(s=e.indexOf(t.charAt(a)),a+=1),n+=this.encoding[s],r+=++i*s}return n+=this.encoding[r%103],(n+=this.encoding[106])+"11"}},codabar:{encoding:["101010011","101011001","101001011","110010101","101101001","110101001","100101011","100101101","100110101","110100101","101001101","101100101","1101011011","1101101011","1101101101","1011011011","1011001001","1010010011","1001001011","1010011001"],getDigit:function(t){var e,n,r="";for(r+=this.encoding[16]+"0",e=0;e1558)&&!e)return-1;if((t<1||t>49)&&e)return-1;var n=0;for(e&&(n=24);this.dataCWCount[n]127?(r[o]=235,n-=127,o++):n>=48&&n<=57&&e+1=48&&t.charCodeAt(e+1)<=57?(n=10*(n-48)+(t.charCodeAt(e+1)-48),n+=130,e++):n++,r[o]=n,o++;return r},addPadCW:function(t,e,n){var r,o;if(!(e>=n))for(t[e]=129,o=e+1;o=0;n--)r[n]=this.champGaloisDoub(r[n],e),n>0&&(r[n]=this.champGaloisSum(r[n],r[n-1]));return r},addReedSolomonCW:function(t,e,n,r,o){var i,a,c,s=0,u=t/o,l=new Array;for(c=0;c=0;a--)l[a]=s?this.champGaloisMult(s,e[a]):0,a>0&&(l[a]=this.champGaloisSum(l[a-1],l[a]));for(a=n+c,i=u-1;i>=0;i--)r[a]=l[i],a+=o}return r},getBits:function(t){for(var e=new Array,n=0;n<8;n++)e[n]=t&128>>n?1:0;return e},next:function(t,e,n,r,o,i){var a=0,c=4,s=0;do{c==e&&0==s?(this.patternShapeSpecial1(o,i,r[a],e,n),a++):t<3&&c==e-2&&0==s&&n%4!=0?(this.patternShapeSpecial2(o,i,r[a],e,n),a++):c==e-2&&0==s&&n%8==4?(this.patternShapeSpecial3(o,i,r[a],e,n),a++):c==e+4&&2==s&&n%8==0&&(this.patternShapeSpecial4(o,i,r[a],e,n),a++);do{c=0&&1!=i[c][s]&&(this.patternShapeStandard(o,i,r[a],c,s,e,n),a++),c-=2,s+=2}while(c>=0&&s=0&&s=0);c+=3,s+=1}while(c>=8;return n},cRgb:function(t,e,n){return String.fromCharCode(n)+String.fromCharCode(e)+String.fromCharCode(t)},cHexColor:function(t){var e=parseInt("0x"+t.substr(1)),n=255&e,r=255&(e>>=8),o=e>>8;return this.cRgb(o,r,n)}},hexToRGB:function(t){var e=parseInt("0x"+t.substr(1)),n=255&e;return{r:(e>>=8)>>8,g:255&e,b:n}},isHexColor:function(t){var e=new RegExp("#[0-91-F]","gi");return t.match(e)},base64Encode:function(t){for(var e,n,r,o,i,a,c,s="",u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",l=0;l>2,i=(3&e)<<4|(n=t.charCodeAt(l++))>>4,a=(15&n)<<2|(r=t.charCodeAt(l++))>>6,c=63&r,isNaN(n)?a=c=64:isNaN(r)&&(c=64),s+=u.charAt(o)+u.charAt(i)+u.charAt(a)+u.charAt(c);return s},bitStringTo2DArray:function(t){var e=[];e[0]=[];for(var n=0;n=0;b--){for(var v="",g=0;g',p='
',h=0;h0&&(l+=("0"==c?f:p).replace("&W",a*o))}e.showHRI&&(l+='
'+r+"
"),this.resize(t,o*u).html(l)},digitToCss:function(t,e,n,r){var i=o.intval(e.barWidth),a=o.intval(e.barHeight);this.digitToCssRenderer(t,e,this.bitStringTo2DArray(n),r,i,a)},digitToCss2D:function(t,e,n,r){var i=o.intval(e.moduleSize);this.digitToCssRenderer(t,e,n,r,i,i)},digitToSvgRenderer:function(t,e,n,r,i,a){var c=n.length,s=n[0].length,u=i*s,l=a*c;if(e.showHRI){var f=o.intval(e.fontSize);l+=o.intval(e.marginHRI)+f}var p='';p+='';for(var h,d,y='',m=0;m0&&"1"==d&&(p+=y.replace("&W",h*i).replace("&X",(s-h)*i).replace("&Y",m*a))}e.showHRI&&(p+='',p+=''+r+"",p+=""),p+="";var v=document.createElement("object");v.setAttribute("type","image/svg+xml"),v.setAttribute("data","data:image/svg+xml,"+p),this.resize(t,u).append(v)},digitToSvg:function(t,e,n,r){var i=o.intval(e.barWidth),a=o.intval(e.barHeight);this.digitToSvgRenderer(t,e,this.bitStringTo2DArray(n),r,i,a)},digitToSvg2D:function(t,e,n,r){var i=o.intval(e.moduleSize);this.digitToSvgRenderer(t,e,n,r,i,i)},digitToCanvasRenderer:function(t,e,n,r,o,i,a,c){var s=t.get(0);if(s&&s.getContext){var u=n.length,l=n[0].length,f=s.getContext("2d");f.lineWidth=1,f.lineCap="butt",f.fillStyle=e.bgColor,f.fillRect(o,i,l*a,u*c),f.fillStyle=e.color;for(var p=0;p0&&"1"==d&&f.fillRect(o+(l-h)*a,i+p*c,a*h,c)}if(e.showHRI){var m=f.measureText(r);f.fillText(r,o+Math.floor((l*a-m.width)/2),i+u*c+e.fontSize+e.marginHRI)}}},digitToCanvas:function(t,e,n,r){var i=o.intval(e.barWidth),a=o.intval(e.barHeight),c=o.intval(e.posX),s=o.intval(e.posY);this.digitToCanvasRenderer(t,e,this.bitStringTo2DArray(n),r,c,s,i,a)},digitToCanvas2D:function(t,e,n,r){var i=o.intval(e.moduleSize),a=o.intval(e.posX),c=o.intval(e.posY);this.digitToCanvasRenderer(t,e,n,r,a,c,i,i)}},(r=a).fn.extend({barcode:function(t,e,n){var i="",a="",s="",u=!0,l=!1,f=!1;if("string"==typeof t?s=t:"object"==c(t)&&(s="string"==typeof t.code?t.code:"",u=void 0===t.crc||t.crc,l=void 0!==t.rect&&t.rect),""==s)return!1;for(var p in void 0===n&&(n=[]),o.settings)null==n[p]&&(n[p]=o.settings[p]);switch(e){case"std25":case"int25":i=o.i25.getDigit(s,u,e),a=o.i25.compute(s,u,e);break;case"ean8":case"ean13":i=o.ean.getDigit(s,e),a=o.ean.compute(s,e);break;case"code11":i=o.code11.getDigit(s),a=s;break;case"code39":i=o.code39.getDigit(s),a=s;break;case"code93":i=o.code93.getDigit(s,u),a=s;break;case"code128":i=o.code128.getDigit(s),a=s;break;case"codabar":i=o.codabar.getDigit(s),a=s;break;case"msi":i=o.msi.getDigit(s,u),a=o.msi.compute(s,u);break;case"datamatrix":i=o.datamatrix.getDigit(s,l),a=s,f=!0}if(0==i.length)return r(this);!f&&n.addQuietZone&&(i="0000000000"+i+"0000000000");var h=r(this),d="digitTo"+n.output.charAt(0).toUpperCase()+n.output.substr(1)+(f?"2D":"");return"function"==typeof o[d]&&o[d](h,n,i,a),h}})},852:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(476),o=n.n(r)()((function(t){return t[1]}));o.push([t.id,".folding {\n margin: 20px auto;\n width: 40px;\n height: 40px;\n position: relative;\n transform: rotateZ(45deg);\n}\n\n.folding .sk-cube {\n float: left;\n width: 50%;\n height: 50%;\n position: relative;\n transform: scale(1.1);\n}\n\n.folding .sk-cube:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: #dc3545;\n animation: sk-foldCubeAngle 2.4s infinite linear both;\n transform-origin: 100% 100%;\n}\n\n.folding .sk-cube2 {\n transform: scale(1.1) rotateZ(90deg);\n}\n\n.folding .sk-cube3 {\n transform: scale(1.1) rotateZ(180deg);\n}\n\n.folding .sk-cube4 {\n transform: scale(1.1) rotateZ(270deg);\n}\n\n.folding .sk-cube2:before {\n animation-delay: 0.3s;\n}\n\n.folding .sk-cube3:before {\n animation-delay: 0.6s;\n}\n\n.folding .sk-cube4:before {\n animation-delay: 0.9s;\n}\n\n@keyframes sk-foldCubeAngle {\n 0%,\n 10% {\n transform: perspective(140px) rotateX(-180deg);\n opacity: 0;\n }\n 25%,\n 75% {\n transform: perspective(140px) rotateX(0deg);\n opacity: 1;\n }\n 90%,\n 100% {\n transform: perspective(140px) rotateY(180deg);\n opacity: 0;\n }\n}\n",""]);const i=o},476:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=t(e);return e[2]?"@media ".concat(e[2]," {").concat(n,"}"):n})).join("")},e.i=function(t,n,r){"string"==typeof t&&(t=[[null,t,""]]);var o={};if(r)for(var i=0;i{"use strict";var r,o=function(){var t={};return function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}t[e]=n}return t[e]}}(),i=[];function a(t){for(var e=-1,n=0;n{"use strict";t.exports=jQuery}},e={};function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={id:r,exports:{}};return t[r](i,i.exports,n),i.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";const t=React;var e=n.n(t);const r=ReactDOM;var o,i=n.n(r),a=n(311),c=n.n(a),s=(n(142),n(311));function u(t,e){for(var n=0;n",c()(this).append(n)}))}},{key:"render_ranges",value:function(){return(new RangeGraph).load(),this.convert_svg_to_image()}},{key:"convert_svg_to_image",value:function(){return s("svg").each((function(){var t;return(t=document.createElement("img")).src="data:image/svg+xml;base64,"+btoa(c()(this).parent().html()),s(this).replaceWith(t)}))}},{key:"get_csrf_token",value:function(){return document.querySelector("#protect-script").dataset.token}}],n&&u(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();const l=o;function f(t){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f(t)}function p(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function h(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n0){t=e.context.getElementsByTagName("input");for(var n=0,r=Object.entries(t);n \ No newline at end of file + \ No newline at end of file diff --git a/src/senaite/impress/controlpanel.py b/src/senaite/impress/controlpanel.py index 124208c4..6ac6cfb4 100644 --- a/src/senaite/impress/controlpanel.py +++ b/src/senaite/impress/controlpanel.py @@ -115,6 +115,13 @@ class IImpressControlPanel(Interface): required=False, ) + reload_after_reorder = schema.Bool( + title=_(u"Reload after reorder"), + description=_(u"Reload report automatically when items order changed"), + default=False, + required=False, + ) + ### # Fieldsets ### @@ -132,6 +139,7 @@ class IImpressControlPanel(Interface): label=_(u"Advanced"), # description=_(""), fields=[ + "reload_after_reorder", "allow_pdf_download", "allow_pdf_email_share", "store_multireports_individually", diff --git a/src/senaite/impress/profiles/default/metadata.xml b/src/senaite/impress/profiles/default/metadata.xml index 49ef5c39..e4bfe8b1 100644 --- a/src/senaite/impress/profiles/default/metadata.xml +++ b/src/senaite/impress/profiles/default/metadata.xml @@ -1,3 +1,3 @@ - 2403 + 2404 diff --git a/src/senaite/impress/publishview.py b/src/senaite/impress/publishview.py index 789aaf1c..8fd32331 100644 --- a/src/senaite/impress/publishview.py +++ b/src/senaite/impress/publishview.py @@ -26,7 +26,6 @@ from six.moves.collections_abc import Iterable from bika.lims import api -from bika.lims.permissions import TransitionPublishResults from plone.resource.utils import iterDirectoriesOfType from Products.Five import BrowserView from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile @@ -407,6 +406,16 @@ def is_printview(self): return True return False + def get_reload_after_reorder(self, default=False): + """Check if auto reloading after reordering is enabled + """ + # lookup configuration settings + reload_after_reorder = api.get_registry_record( + "senaite.impress.reload_after_reorder") + if reload_after_reorder is None: + return default + return reload_after_reorder + def get_allow_pdf_download(self, default=False): """Check if direct PDF download is allowed """ diff --git a/src/senaite/impress/upgrades/v02_04_000.py b/src/senaite/impress/upgrades/v02_04_000.py index 8029caf4..7d736547 100644 --- a/src/senaite/impress/upgrades/v02_04_000.py +++ b/src/senaite/impress/upgrades/v02_04_000.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from plone.browserlayer.utils import unregister_layer from senaite.impress import logger PROFILE_ID = "profile-senaite.impress:default" @@ -32,5 +33,15 @@ def import_browserlayer(tool): :param tool: portal_setup tool """ logger.info("Import SENAITE IMPRESS browser layer ...") + + # ensure the old layer is removed first to make room for the new one + try: + unregister_layer("senaite.impress") + except KeyError: + # KeyError: 'No browser layer with name senaite.impress is registered + pass + + # reimport browser layer to register ISenaiteImpressLayer tool.runImportStepFromProfile(PROFILE_ID, "browserlayer") + logger.info("Import SENAITE IMPRESS browser layer [DONE]") diff --git a/src/senaite/impress/upgrades/v02_04_000.zcml b/src/senaite/impress/upgrades/v02_04_000.zcml index 19efe6e9..5c66d8eb 100644 --- a/src/senaite/impress/upgrades/v02_04_000.zcml +++ b/src/senaite/impress/upgrades/v02_04_000.zcml @@ -28,4 +28,12 @@ handler="senaite.impress.upgrades.v02_04_000.import_browserlayer" profile="senaite.impress:default"/> + + diff --git a/webpack/app/senaite.impress.coffee b/webpack/app/senaite.impress.coffee index 7f0ed4f5..8e25b3ae 100644 --- a/webpack/app/senaite.impress.coffee +++ b/webpack/app/senaite.impress.coffee @@ -43,6 +43,9 @@ class PublishController extends React.Component @handleModalSubmit = @handleModalSubmit.bind(this) @loadReports = @loadReports.bind(this) @saveReports = @saveReports.bind(this) + @on_row_order_change = @on_row_order_change.bind(this) + # Rendered by the listing viewlet + @listing_el = document.getElementById("impress-contents-table") @state = items: @api.get_items() @@ -59,6 +62,8 @@ class PublishController extends React.Component allow_save: yes allow_email: yes custom_actions: [] + reload_after_reorder: no + reload_required: no window.impress = @ @@ -80,6 +85,7 @@ class PublishController extends React.Component componentDidMount: -> console.debug "PublishController::componentDidMount" + @listing_el.addEventListener("listing:row_order_change", @on_row_order_change, false); @api.fetch_config().then ( (config) -> @@ -87,6 +93,10 @@ class PublishController extends React.Component ).bind(this) + componentWillUnmount: -> + @listing_el.removeEventListener("listing:row_order_change", @on_row_order_change, false); + + getRequestOptions: -> ### * Options to be sent to the server @@ -134,6 +144,7 @@ class PublishController extends React.Component error: "" loading: yes loadtext: "Loading Reports..." + reload_required: no # fetch the rendered reports via the API asynchronously promise = @api.render_reports @getRequestOptions() @@ -438,9 +449,30 @@ class PublishController extends React.Component return @postAction url + ### + * Event handler when the object order was changed in the listing table + * + * @param {CustomEvent} event: provides the current `folderitems` of the listing + ### + on_row_order_change: (event) -> + uids = event.detail.folderitems.map (item) => item.uid + + if @state.reload_after_reorder + @setState items: uids, @loadReports + else + @setState items: uids, reload_required: yes + + render: ->
+ {@state.reload_required and +
+

+ Reload is required +

+
}