UNPKG

kpiplus

Version:

KPI+

1 lines 3.29 kB
var _=require("underscore"),stp=require("stp-utils"),writtenNumber=require("written-number");function numberToWord(r,n){if(void 0===r||null===r)return"";let e;if(n&&n.lang&&"vn"!==n.lang)return(e=writtenNumber(r,{lang:n.lang})).length>0?e.substring(0,1).toUpperCase()+e.substring(1):"";var t="";r<0&&(t="âm ",r=-r),n=_.extend({thousand:"ngàn",decimal:"phẩy"},n),r=Number(r.toFixed(2));var u=Math.floor(r),i=r%1,o="";i&&(o=convertFractionPart(i),o=" "+n.decimal+" "+o);var a=breakDownNumber(u).reverse();return(e=t+_.chain(a).map(function(r,e){var t=convertGroup(r,e!==a.length-1),u=unitAt(e,n.thousand);return t||e%3==0||(u=""),t&&u&&(u=" "+u),t+u}).compact().reverse().join(" ")+o).length>0?e.substring(0,1).toUpperCase()+e.substring(1):""}function unitAt(r,n){if(0===r)return"";switch(r%3){case 0:return"tỉ";case 1:return n;case 2:return"triệu"}}function convertGroup(r,n){var e=["không","một","hai","ba","bốn","năm","sáu","bảy","tám","chín"],t=_.map(e,function(r){return r+" trăm"}),u="",i="",o="";return!n||r.hundred||r.ten||r.digit?((n||r.hundred)&&(u=t[r.hundred]),n||r.ten||r.hundred?((r.ten||r.digit)&&(i=["linh","mười","hai mươi","ba mươi","bốn mươi","năm mươi","sáu mươi","bảy mươi","tám mươi","chín mươi"][r.ten]),o=1!==r.ten&&r.ten||!r.digit?["","mốt","hai","ba","bốn","lăm","sáu","bảy","tám","chín"][r.digit]:e[r.digit]):o=e[r.digit],u&&i&&(u+=" "),i&&o&&(i+=" "),[u,i,o].join("")):""}function breakDownNumber(r){var n=r.toString().split("");return n=_.map(_.range(0,(3-n.length%3)%3),function(){return 0}).concat(n),_.chain(n).map(Number).groupBy(function(r,n){return Math.floor(n/3)}).toArray().map(function(r){return _.object(["hundred","ten","digit"],r)}).value()}function convertFractionPart(r){result=convertGroup(breakDownNumber(100*r)[0]);var n={"mười":"một","hai mươi":"hai","ba mươi":"ba","bốn mươi":"bốn","năm mươi":"năm","sáu mươi":"sáu","bảy mươi":"bảy","tám mươi":"tám","chín mươi":"chín","một":"không một",hai:"không hai",ba:"không ba","bốn":"không bốn","năm":"không năm","sáu":"không sáu","bảy":"không bảy","tám":"không tám","chín":"không chín"};return result in n&&(result=n[result]),result}function round(r,n){n||(n=0);var e=Math.pow(10,n),t=r*e;return Math.round(t)/e}function getInfoFromQuery(r,n,e){try{if(!(n=n.trim()))return e();try{"{"===n.substring(0,1)?query=stp.parse(n):query=stp.parse("{"+n+"}")}catch(r){console.log("error when parse json",n)}if(!query)return e("Query is invalid: "+n);if(!query.collection||!query.field)return e();"dmkh"==query.collection&&(query.collection="customer"),"dmtk"==query.collection&&(query.collection="account");let t=query.condition;if(t){t=JSON.stringify(t);for(let n in r)t=t.replace(new RegExp("m."+n,"g"),r[n]);t=stp.parse(t)}else t={};let u=require("../models/"+query.collection),i={};i[query.field]=1,r.id_app&&(t.id_app=r.id_app),u.findOne(t,i).lean().exec(function(r,n){if(r)return e(r);n?e(null,n[query.field]):e()})}catch(r){console.error(r),e("error execute query: "+n)}}module.exports={numberToWord:numberToWord,round:round,getInfoFromQuery:getInfoFromQuery},"test"===process.env.NODE_ENV&&(module.exports._private={breakDownNumber:breakDownNumber,convertGroup:convertGroup});