UNPKG

maycur-business

Version:

maycur business react components of web

430 lines (360 loc) 14.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _utils = _interopRequireDefault(require("./utils")); var _lodash = _interopRequireDefault(require("lodash")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var currencyPairRate = []; var exhangeRateFn; /* 报销单通过费用金额计算报销金额 */ function expenseSumAmount(_x, _x2) { return _expenseSumAmount.apply(this, arguments); } /* 费用转换目标单据币种金额转换 */ function _expenseSumAmount() { _expenseSumAmount = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee2(expenseList, reimCurrency) { var totlaAmount, entPayAmount; return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: totlaAmount = 0; entPayAmount = 0; _context2.next = 4; return _utils["default"].asyncForEach(expenseList, /*#__PURE__*/ function () { var _ref = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee(expense) { var targetDate, fromCurrency, toCurrency, consumeAmount, availAmount, rate; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: toCurrency = reimCurrency, consumeAmount = 0, availAmount = 0; if (expense.consumeTime) { if (expense.consumeTime.currentTime) { targetDate = expense.consumeTime.currentTime; } else if (expense.consumeTime.timeRange) { targetDate = expense.consumeTime.timeRange.startDate; } } if (expense.consumeAmount) { fromCurrency = expense.consumeAmount.currency; consumeAmount = expense.consumeAmount.amount || 0; } if (!(fromCurrency === toCurrency)) { _context.next = 7; break; } availAmount = consumeAmount; _context.next = 12; break; case 7: if (!(targetDate && fromCurrency && toCurrency)) { _context.next = 12; break; } _context.next = 10; return getExhangeRate({ targetDate: targetDate, fromCurrency: fromCurrency, toCurrency: toCurrency }); case 10: rate = _context.sent; availAmount = consumeAmount * rate; case 12: if (expense.extraTag && expense.extraTag.includes('ent_paid_order')) { entPayAmount += availAmount; } totlaAmount += availAmount; expense.approvedAmount = { currency: reimCurrency, amount: availAmount }; expense.amount = { currency: reimCurrency, amount: availAmount }; case 16: case "end": return _context.stop(); } } }, _callee); })); return function (_x3) { return _ref.apply(this, arguments); }; }()); case 4: return _context2.abrupt("return", { totlaAmount: totlaAmount, entPayAmount: entPayAmount }); case 5: case "end": return _context2.stop(); } } }, _callee2); })); return _expenseSumAmount.apply(this, arguments); } function expenseToReceipt(originCny, targetCny, rate) { var originAmount = originCny.amount; return { currency: targetCny.currency, amount: originAmount * rate }; } function setExhangeRateFn(fn) { exhangeRateFn = fn; } /* 获取币种对汇率 */ function getExhangeRate(params) { var targetDate = params.targetDate, fromCurrency = params.fromCurrency, toCurrency = params.toCurrency; var matchedPair = _lodash["default"].find(currencyPairRate, { fromCurrency: fromCurrency, toCurrency: toCurrency, targetDate: _utils["default"].dateRemoveTime(new Date(targetDate)) }); return new Promise(function (resolve, reject) { if (matchedPair) { resolve(matchedPair.exchangeRate); } else if (typeof exhangeRateFn === 'function') { var dto = { amount: 1, targetDate: targetDate, fromCurrency: fromCurrency, toCurrency: toCurrency }; exhangeRateFn(dto).then(function (resp) { if (resp.code === 'ACK' && resp.data) { var exchangeRate = resp.data.exchangeRate; currencyPairRate = currencyPairRate.concat([{ fromCurrency: fromCurrency, toCurrency: toCurrency, targetDate: _utils["default"].dateRemoveTime(new Date(targetDate)), exchangeRate: exchangeRate }]); resolve(exchangeRate); } else { resolve(0); } }, function () { resolve(0); }); } else { reject(); } }); } /* 报销单核销借款单 */ function reimburseWriteOffLoan() { return _reimburseWriteOffLoan.apply(this, arguments); } /* 分摊兼容无币种模式的数据格式转换函数 */ function _reimburseWriteOffLoan() { _reimburseWriteOffLoan = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee4() { var reimburseAmountSet, loanList, isAllowModifyDeuction, useTemp, reimCny, reimAmount, _args4 = arguments; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: reimburseAmountSet = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}; loanList = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : []; isAllowModifyDeuction = _args4.length > 2 ? _args4[2] : undefined; useTemp = _args4.length > 3 ? _args4[3] : undefined; reimCny = reimburseAmountSet.currency, reimAmount = reimburseAmountSet.amount; if (reimCny) { _context4.next = 7; break; } return _context4.abrupt("return", loanList); case 7: if (!(useTemp === 'REPAYMENT')) { _context4.next = 11; break; } _lodash["default"].forEach(loanList, function (d) { d.deductionAmount = isAllowModifyDeuction ? d.allowModifyAmount : d.owedAmount; }); _context4.next = 13; break; case 11: _context4.next = 13; return _utils["default"].asyncForEach(loanList, /*#__PURE__*/ function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee3(loan) { var targetDate, fromCurrency, toCurrency, writeOffAmount, availAmount, rate; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (!(reimAmount > 0)) { _context3.next = 19; break; } toCurrency = reimCny, writeOffAmount = 0, availAmount = 0, rate = 0; targetDate = loan.settledAt; fromCurrency = loan && loan.owedAmount && loan.owedAmount.currency; if (!(fromCurrency === toCurrency)) { _context3.next = 8; break; } rate = 1; _context3.next = 12; break; case 8: if (!(targetDate && fromCurrency && toCurrency)) { _context3.next = 12; break; } _context3.next = 11; return getExhangeRate({ targetDate: targetDate, fromCurrency: fromCurrency, toCurrency: toCurrency }); case 11: rate = _context3.sent; case 12: if (isAllowModifyDeuction) { availAmount = loan.allowModifyAmount ? loan.allowModifyAmount.amount : 0; } else { availAmount = loan.owedAmount ? loan.owedAmount.amount : 0; } writeOffAmount = availAmount * rate; if (writeOffAmount > reimAmount) { writeOffAmount = reimAmount; } reimAmount -= writeOffAmount; loan.deductionAmount = { currency: reimCny, amount: writeOffAmount }; _context3.next = 20; break; case 19: loan.deductionAmount = { currency: reimCny, amount: 0 }; case 20: if (isAllowModifyDeuction) { loan.allowModifyAmount = loan.deductionAmount; } case 21: case "end": return _context3.stop(); } } }, _callee3); })); return function (_x4) { return _ref2.apply(this, arguments); }; }()); case 13: return _context4.abrupt("return", loanList); case 14: case "end": return _context4.stop(); } } }, _callee4); })); return _reimburseWriteOffLoan.apply(this, arguments); } function allocationDataConvert(expenses, currency) { var direct = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'currency'; var data = _lodash["default"].cloneDeep(expenses); if (data && data.reimburseExpenseAllocations && data.reimburseExpenseAllocations.length > 0) { data.reimburseExpenseAllocations.forEach(function (allocation) { var allocationBase = allocation.allocationBase; if (direct === 'currency' && !_lodash["default"].isObject(allocationBase.amount)) { allocationBase.amount = { currency: currency, amount: allocationBase.amount }; } else if (direct === 'money' && _lodash["default"].isObject(allocationBase.amount)) { allocationBase.amount = allocationBase.amount.amount; } }); } return data; } function summaryExpense(expenses, isAllocation) { var selectedRows = expenses; var currencySummary = {}; _lodash["default"].forEach(selectedRows, function (expense) { var consumeAmount; //分摊总金额计算如果是对公费用要取receiptAmount if (expense.corpExpense && isAllocation) { consumeAmount = expense.receiptAmount; } else { consumeAmount = expense.consumeAmount; } if (_lodash["default"].has(currencySummary, consumeAmount.currency)) { currencySummary[consumeAmount.currency] += consumeAmount.amount; } else { currencySummary[consumeAmount.currency] = consumeAmount.amount; } }); return _lodash["default"].map(currencySummary, function (value, key) { return { currency: key, amount: _lodash["default"].round(value, 2) }; }); } function summaryApprovel(approvel) { var selectedRows = approvel; var currencySummary = {}; _lodash["default"].forEach(selectedRows, function (approvel) { var approvedAmount; approvedAmount = approvel.approvedAmount; if (_lodash["default"].has(currencySummary, approvedAmount.currency)) { currencySummary[approvedAmount.currency] += approvedAmount.amount; } else { currencySummary[approvedAmount.currency] = approvedAmount.amount; } }); return _lodash["default"].map(currencySummary, function (value, key) { return { currency: key, amount: _lodash["default"].round(value, 2) }; }); } var _default = { expenseToReceipt: expenseToReceipt, expenseSumAmount: expenseSumAmount, reimburseWriteOffLoan: reimburseWriteOffLoan, allocationDataConvert: allocationDataConvert, setExhangeRateFn: setExhangeRateFn, summaryExpense: summaryExpense, summaryApprovel: summaryApprovel }; exports["default"] = _default;