calculate-items
Version:
Items calculation template
3 lines (2 loc) • 8.52 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("currency.js"),require("mathjs"),require("lodash")):"function"==typeof define&&define.amd?define(["currency.js","mathjs","lodash"],t):(e="undefined"!=typeof globalThis?globalThis:e||self)["calculate-items"]=t(e.currency,e.mathjs,e.lodash)}(this,(function(e,t,r){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(e),o=function(){return o=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var a in t=arguments[r])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},o.apply(this,arguments)};function u(e,t,r){if(r||2===arguments.length)for(var n,a=0,o=t.length;a<o;a++)!n&&a in t||(n||(n=Array.prototype.slice.call(t,0,a)),n[a]=t[a]);return e.concat(n||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError;var s=function(){function e(){}return e.round=function(e,t){return void 0===t&&(t=2),a.default(e,{precision:t}).value},e.format=function(e,t,r,n,o){return void 0===t&&(t=2),void 0===r&&(r=" "),void 0===n&&(n="."),void 0===o&&(o=""),a.default(e,{separator:r,decimal:n,precision:t,symbol:o,pattern:"#!"}).format()},e.evaluateAndRound=function(r){return e.round(t.evaluate(r))},e}(),i=/\n/g,m=/-|--|---/g,l=/\[([\d,\s]+)\]/,c=/\[(\s*[@a-zA-Z_][@a-zA-Z'\d_\u0430-\u044f,\s]+)\]/,p=/[^\d.+\-*\/()]+/g,d=function(){function e(){}return e.getUsernames=function(t){var n=e.matchSecondUser(c,t);return(null==n?void 0:n.split(",").map(r.trim).filter(Boolean))||[]},e.getUserIndexes=function(t){var n=e.matchSecondUser(l,t);return(null==n?void 0:n.split(",").map(r.trim).filter(Boolean).map(Number))||[]},e.matchSecondUser=function(e,t){var n=null==t?void 0:t.match(e);if(r.gt(r.size(n),1))return r.nth(n,1)},e}(),f=function(e){if(!e||e.length<2)return[];var t,n,a=(t=e,n="-",Array.from(t).reduce((function(e,t,r){return t===n&&e.push(r),e}),[]));if(a.length>0){for(var o=a.pop(),u=o;a.length>0&&(u-=1,console.log("sepIndex = ",u,a,e,e[u],h(e[u])),h(e[u]));)u===a[a.length-1]&&(o=a.pop());return r.compact([r.trim(e.slice(0,o)),r.trim(e.slice(o+1))])}return r.compact(r.map(r.split(e,m),r.trim))};function h(e){return/^[0-9]$/.test(e)||/^[+\-*/()\s]$/.test(e)}var v=function(){function e(){}return e.getItemsResult=function(t){return e.calculateResultFromExpression(t)},e.getExpItems=function(t){return r.isEmpty(r.trim(t))?[]:e.getSplitItems(t).map(r.trim).filter((function(e){return e.match(/\d/g)})).map((function(t,n){var a=d.getUserIndexes(t),u=r.trim(r.replace(t,l,""));return o({name:"Item ".concat(n+1),order:n+1,members:a},e.getValueAndType(u,a))}))},e.getTemplateItems=function(t){return t&&!r.isEmpty(r.trim(t))?(t=t.replace(c,"")).match(/[a-zA-Z]/)?r.split(t,i).map(r.trim).map(f).filter((function(e){return r.gte(r.size(e),2)})).map((function(t,r){var n=t[0],a=t[1],u=e.getMembersFromName(n);return o(o({order:r+1},u),e.getValueAndType(a,u.members))})):e.getExpItems(t):[]},e.calculateResultFromExpression=function(t){var n=e.getTemplateItems(t),a=d.getUsernames(t),i={membersMap:{},membersCount:r.size(a)||0};return i.membersCount||(i.membersCount=n.reduce((function(e,t){return Math.max.apply(Math,u(u([e],t.members,!1),[1],!1))}),0),i.membersCount>20&&(i.membersCount=20)),n.map((function(e){return{product:e,pMembersCount:r.size(e.members)}})).filter((function(e){return"currency"===e.product.valueType&&r.gt(e.pMembersCount,0)})).forEach((function(e){e.product.members.forEach((function(t){var r,n,a,u=Object.keys(e.product.values||{}).length&&(null===(r=e.product.values)||void 0===r?void 0:r[t])||void 0,m=(null==u?void 0:u.total)||s.round(e.product.value/e.pMembersCount);i.membersMap[t]?null===(n=i.membersMap[t].items)||void 0===n||n.push(e.product):i.membersMap[t]={index:t,total:0,items:[o(o({},e.product),{value:m})],productNames:[],totalExpression:""},i.membersMap[t].total+=m,i.membersMap[t].totalExpression.length&&(i.membersMap[t].totalExpression+=" + "),i.membersMap[t].totalExpression+=m,null===(a=i.membersMap[t].productNames)||void 0===a||a.push(e.product.name),i.membersMap[t].totalExpression+=(null==u?void 0:u.total)?"(".concat(u.origin,")"):"(".concat(e.product.originValue,"/").concat(e.pMembersCount,")")}))})),n.filter((function(e){return"currency"===e.valueType&&r.lte(r.size(e.members),0)})).forEach((function(e){r.range(1,i.membersCount+1).forEach((function(t){var r,n;i.membersMap[t]||(i.membersMap[t]={index:t,total:0,items:[],productNames:[],totalExpression:""});var a=s.round(e.value/i.membersCount);null===(r=i.membersMap[t].items)||void 0===r||r.push(o(o({},e),{value:a})),i.membersMap[t].total+=a,i.membersMap[t].totalExpression.length&&(i.membersMap[t].totalExpression+=" + "),i.membersMap[t].totalExpression+=a,null===(n=i.membersMap[t].productNames)||void 0===n||n.push(e.name),i.membersMap[t].totalExpression+="(".concat(e.value,"/").concat(i.membersCount,")")}))})),n.filter((function(e){return"percentage"===e.valueType&&r.lte(r.size(e.members),0)})).forEach((function(e,t){var r=0;Object.keys(i.membersMap).forEach((function(t){var n,a,u=i.membersMap[t].total,m=s.round(u*e.value/100);null===(n=i.membersMap[t].items)||void 0===n||n.push(o(o({},e),{value:m})),i.membersMap[t].total+=m,r+=m,i.membersMap[t].totalExpression.length&&(i.membersMap[t].totalExpression+=" + "),i.membersMap[t].totalExpression+=m,null===(a=i.membersMap[t].productNames)||void 0===a||a.push(e.name),i.membersMap[t].totalExpression+="(".concat(u,"*").concat(e.value/100,")")})),e.value=r})),{items:n,summary:Object.keys(i.membersMap).map((function(e){return delete i.membersMap[e].items,i.membersMap[e]})).reduce((function(e,t){return e.total+=t.total,e.total=s.round(e.total),a.length>=t.index&&(t.username=a[t.index-1]),e.members.push(t),e}),{membersCount:i.membersCount,members:[],total:0,inputText:t})}},e.getValueAndType=function(e,t){var n;void 0===t&&(t=[]);var a=e.includes("%")?"percentage":"currency",o=s.evaluateAndRound(e.replace(p,"")),u=s.evaluateAndRound((null===(n=e.match(/([^*]+)\*.+/))||void 0===n?void 0:n[1])||"")||1,i=r.size(t),m={};if(i>0&&e.includes("(")){var l=e.split(/\)?\*/);if(l.length>1){var c=l[0].slice(1);if(c){var d=c.split("+");t.forEach((function(e,t){m[e]={total:s.evaluateAndRound(d[t])*s.evaluateAndRound(l[1]),origin:"".concat(s.evaluateAndRound(d[t]),"*").concat(s.evaluateAndRound(l[1]))}}))}}}return{value:o,quantity:u||1,unitValue:o/u,originValue:e,values:m,valueType:a}},e.getSplitItems=function(e){for(var t={bracketOpened:!1,arr:[]},n=0,a=e;n<a.length;n++){var o=a[n];"("===o?t.bracketOpened=!0:")"===o&&(t.bracketOpened=!1),t.bracketOpened||"+"!==o?0===t.arr.length?t.arr.push(o):t.arr[t.arr.length-1]+=o:t.arr.push("")}return r.compact(t.arr)},e.getMembersFromName=function(e){return{members:d.getUserIndexes(e),name:r.trim(r.replace(e,l,""))}},e}(),g=function(){function e(){}return e.isValidBrackets=function(e){for(var t=[],r={")":"(","]":"[","}":"{"},n=["(",")","[","]","{","}"],a=0,o=e;a<o.length;a++){var u=o[a];n.includes(u)&&(t.length>0&&r[u]===t[t.length-1]?t.pop():t.push(u))}return 0===t.length},e.isValidExpToParse=function(t){var n;if(r.isEmpty(r.trim(t))||(null===(n=r.trim(t))||void 0===n?void 0:n.length)<5)return!1;if(t.match(/[+\-*,\/]\s*$/g)||t.match(/^\s*[*\/]/g))return!1;if(t.match(/[*+\-/][+*\-/]/))return!1;if(t.match(/[a-zA-Z\u0430-\u044f]/)){if(!t.match(/[\w'`\\\/\u0430-\u044f\s.,\]\[]+\s*-\s*[\d()\]\[+\/*\-]+\s*\n*/g))return!1}else{if(t.match(/\s*[-,+]\s*$/))return!1;if(!t.match(/([\w)][*+-/][(\w])/g))return!1;if(t.replace(/\s*([+-/])\s*/g,"$1").match(/([^\d)][-*+/][^(\d])/g))return!1}if(!e.isValidBrackets(t))return!1;if(t.match(/\(/g)){if(!t.match(/(\([\d+\-*/]{3,}\))|(\[[\d,+\-*/]+])/g))return!1;if(t.match(/([^+\-/*\s]\s*\()|(\)\s*[^+\-/*\n\s])/g))return!1}else if(t.match(/\[/g)&&!t.match(/\[[\d,\s]+]/g))return!1;return!0},e.getInvalidMessage=function(e){if(r.isEmpty(r.trim(e))||e.match(/\s*\+\s*$/))return"Formatga mos matn kiritirsh zarur";if(!r.includes(e,"-"))return"Chiziqcha(-) belgisi bo'lishi shart";var t=r.split(e,"-"),n=r.nth(t,1);return!n||n&&!/\d+/g.test(n)?"Chiziqcha(-)ni o'ng tomonida raqam bo'lishi shart":void 0},e}(),b=function(){function e(){}return e.getItems=function(e){return v.getTemplateItems(e)},e.getResult=function(e){return v.getItemsResult(e)},e.isValidExpression=function(e){return g.isValidExpToParse(e)},e.formatNumber=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return s.format.apply(s,e)},e}();return b}));
//# sourceMappingURL=index.umd.js.map