UNPKG

calculate-items

Version:

Items calculation template

3 lines (2 loc) 6.18 kB
"use strict";var e=require("currency.js"),t=require("mathjs"),r=require("lodash");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 m=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}(),s=/\n/g,i=/-|--|---/g,c=/\[([\d,\s]+)\]/,l=/\[(\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(l,t);return(null==n?void 0:n.split(",").map(r.trim).filter(Boolean))||[]},e.getUserIndexes=function(t){var n=e.matchSecondUser(c,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(){function e(){}return e.getItemsSummary=function(t){var r=e.getTemplateItems(t);return{items:r,summary:e.getSummaryByMembers(r,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,c,""));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(l,"")).match(/[a-zA-Z]/)?r.split(t,s).map(r.trim).map((function(e){return r.compact(r.map(r.split(e,i),r.trim))})).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.getSummaryByMembers=function(e,t){var n=d.getUsernames(t),a={membersMap:{},membersCount:r.size(n)||0};return a.membersCount||(a.membersCount=e.reduce((function(e,t){return Math.max.apply(Math,u(u([e],t.members,!1),[1],!1))}),0),a.membersCount>20&&(a.membersCount=20)),e.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,u,s=Object.keys(e.product.values||{}).length&&(null===(r=e.product.values)||void 0===r?void 0:r[t])||void 0,i=(null==s?void 0:s.total)||m.round(e.product.value/e.pMembersCount);a.membersMap[t]?null===(n=a.membersMap[t].items)||void 0===n||n.push(e.product):a.membersMap[t]={index:t,total:0,items:[o(o({},e.product),{value:i})],productNames:[],totalExpression:""},a.membersMap[t].total+=i,a.membersMap[t].totalExpression.length&&(a.membersMap[t].totalExpression+=" + "),a.membersMap[t].totalExpression+=i,null===(u=a.membersMap[t].productNames)||void 0===u||u.push(e.product.name),a.membersMap[t].totalExpression+=(null==s?void 0:s.total)?"(".concat(s.origin,")"):"(".concat(e.product.originValue,"/").concat(e.pMembersCount,")")}))})),e.filter((function(e){return"currency"===e.valueType&&r.lte(r.size(e.members),0)})).forEach((function(e){r.range(1,a.membersCount+1).forEach((function(t){var r,n;a.membersMap[t]||(a.membersMap[t]={index:t,total:0,items:[],productNames:[],totalExpression:""});var u=m.round(e.value/a.membersCount);null===(r=a.membersMap[t].items)||void 0===r||r.push(o(o({},e),{value:u})),a.membersMap[t].total+=u,a.membersMap[t].totalExpression.length&&(a.membersMap[t].totalExpression+=" + "),a.membersMap[t].totalExpression+=u,null===(n=a.membersMap[t].productNames)||void 0===n||n.push(e.name),a.membersMap[t].totalExpression+="(".concat(e.value,"/").concat(a.membersCount,")")}))})),e.filter((function(e){return"percentage"===e.valueType&&r.lte(r.size(e.members),0)})).forEach((function(e){Object.keys(a.membersMap).forEach((function(t){var r,n,u=a.membersMap[t].total,s=m.round(u*e.value/100);null===(r=a.membersMap[t].items)||void 0===r||r.push(o(o({},e),{value:s})),a.membersMap[t].total+=s,a.membersMap[t].totalExpression.length&&(a.membersMap[t].totalExpression+=" + "),a.membersMap[t].totalExpression+=s,null===(n=a.membersMap[t].productNames)||void 0===n||n.push(e.name),a.membersMap[t].totalExpression+="(".concat(u,"*").concat(e.value/100,")")}))})),Object.keys(a.membersMap).map((function(e){return delete a.membersMap[e].items,a.membersMap[e]})).reduce((function(e,t){return e.total+=t.total,e.total=m.round(e.total),n.length>=t.index&&(t.username=n[t.index-1]),e.members.push(t),e}),{membersCount:a.membersCount,members:[],total:0,inputText:t})},e.getValueAndType=function(e,t){void 0===t&&(t=[]);var n=e.includes("%")?"percentage":"currency",a=m.evaluateAndRound(e.replace(p,"")),o=r.size(t),u={};if(o>0&&e.includes("(")){var s=e.split(/\)?\*/);if(s.length>1){var i=s[0].slice(1);if(i){var c=i.split("+");t.forEach((function(e,t){u[e]={total:m.evaluateAndRound(c[t])*m.evaluateAndRound(s[1]),origin:"".concat(m.evaluateAndRound(c[t]),"*").concat(m.evaluateAndRound(s[1]))}}))}}}return{value:a,originValue:e,values:u,valueType:n}},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,c,""))}},e}(),b=function(){function e(){}return e.getItems=function(e){return f.getTemplateItems(e)},e.getSummary=function(e){return f.getItemsSummary(e)},e}();module.exports=b; //# sourceMappingURL=index.js.map