import { IGood, InvoiceControllerState, LineAttributeType } from '..'; import { format15 } from '../../tools/calculate'; import { chain, bignumber } from 'mathjs'; import idGenerator from '../../tools/idGenerator'; export default async function mergeDiscount(state: InvoiceControllerState) { if (state.goodsListState.goodsList.length <= 1 || state.goodsListState.editGood) return; const goodsList = state.goodsListState.goodsList.slice(); for (let i = 0; i < goodsList.length; i++) { const good = goodsList[i]; if (good.lineAttribute * 1 === LineAttributeType.被折扣行) { const sum: IGood = { ...good, $index: idGenerator(), lineAttribute: LineAttributeType.正常, discountGroup: undefined }; const zk = goodsList[i + 1]; sum.lineAmountExcludeTax = chain(bignumber(good.lineAmountExcludeTax)).subtract(bignumber(Math.abs(zk.lineAmountExcludeTax || 0))).done().toNumber(); sum.lineAmountIncludeTax = chain(bignumber(good.lineAmountIncludeTax)).subtract(bignumber(Math.abs(zk.lineAmountIncludeTax || 0))).done().toNumber(); sum.taxAmount = chain(bignumber(sum.lineAmountIncludeTax)).subtract(bignumber(sum.lineAmountExcludeTax)).done().toNumber(); sum.quantity = good.quantity; if (sum.quantity) { const calculatingDigits = state.calculatingDigits; sum.priceExcludeTax = format15(chain(bignumber(sum.lineAmountExcludeTax)).divide(bignumber(sum.quantity)).done().toNumber(), calculatingDigits) || 0; sum.priceIncludeTax = format15(chain(bignumber(sum.lineAmountIncludeTax)).divide(bignumber(sum.quantity)).done().toNumber(), calculatingDigits) || 0; } if (sum.lineAmountIncludeTax === 0) { goodsList.splice(i, 2); i--; } else { goodsList.splice(i, 2, sum); } } } state.goodsListState.goodsList = goodsList; }