maycur-business
Version:
maycur business react components of web
430 lines (360 loc) • 14.5 kB
JavaScript
;
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;