ttk-app-core
Version:
@ttk/recat enterprise develop framework
200 lines (183 loc) • 6.54 kB
JavaScript
import { isNotEmpty } from "@/utils"
import { toFixed, toRMB, toFixedForce } from "@/utils/number"
import { slFloat, jeFloat, djFloat } from "@/apps/app-demo/invoice-manage/constant"
/**
* 普通征税金额计算
*
* 金额不能为空或等于0, 单价和数量可以都为空;当单价和数量有一者为空,单价通过金额/数量获得,数量=金额/单价;当三者都不为空,编辑单价/数量时,金额=编辑后的单价*数量,编辑金额不为0时,数量不变,单价=编辑后的金额/数量。
* 三者某一项为空,其他项不变
* */
export function calcPutongPrice(option) {
let { type, value, index, hsbz, spsl, dj, je, sl, se, tmpJe, tmpHsje, tmpDj, tmpHsdj, updateGoodsForm } = option
if (type == "spsl") {
// 数量改变
spsl = value
if (spsl == "") {
} else if (dj && spsl != 0) {
je = dj * spsl
} else if (je && spsl != 0) {
dj = je / spsl
}
} else if (type == "dj") {
// 单价改变
dj = value
if (dj == "") {
} else if (spsl) {
je = spsl * dj
} else if (je && dj != 0) {
spsl = je / dj
}
} else if (type == "je") {
// 总价改变
je = value
if (je == "") {
} else if (je == 0) {
dj = ""
updateGoodsForm && setTimeout(() => {
// 避免多次输入0时,je一直是"",会引起输入框内容不变
spsl = toFixed(spsl, slFloat)
dj = toFixed(dj, djFloat)
je = ""
se = ""
tmpJe = ""
tmpHsje = ""
updateGoodsForm({ spsl, dj, je, se, tmpJe, tmpHsje }, index);
}, 0)
} else if (spsl && spsl != 0) {
dj = je / spsl
} else if (dj && dj != 0) {
spsl = je / dj
}
}
// 计算不含税金额、含税金额、不含税单价、含税单价
if (hsbz) {
tmpJe = isNotEmpty(je) ? je / (1 + Number(sl)) : ''
tmpHsje = je
// 不含税单价
tmpDj = isNotEmpty(dj) ? dj / (1 + Number(sl)) : ''
// 含税单价
tmpHsdj = dj
// 税额=不含税金额*税率
// 含税情况下,税额根据界面显示的金额来换算,避免一些四舍五入的临界值导致误差大于或等于0.01
se = tmpJe * sl
} else {
tmpJe = je
tmpHsje = isNotEmpty(je) ? je * (1 + Number(sl)) : ''
// 不含税单价
tmpDj = dj
// 含税单价
tmpHsdj = isNotEmpty(dj) ? dj * (1 + Number(sl)) : ''
// 税额=不含税金额*税率
// 不含税情况下,税额根据界面显示的金额来换算,避免一些四舍五入的临界值导致误差大于或等于0.01
se = toFixedForce(tmpJe, jeFloat) * sl
}
// 取小数位并四舍五入
spsl = toFixed(spsl, slFloat)
je = toFixedForce(je, jeFloat)
dj = toFixed(dj, djFloat)
se = toFixedForce(se, jeFloat)
tmpJe = toFixedForce(tmpJe, jeFloat)
tmpHsje = toFixedForce(tmpHsje, jeFloat)
tmpDj = toFixed(tmpDj, djFloat)
tmpHsdj = toFixed(tmpHsdj, djFloat)
return { spsl, dj, je, se, tmpJe, tmpHsje, tmpDj, tmpHsdj }
}
/**
* 减按征税金额计算
*
* 金额不能为空或等于0, 单价和数量可以都为空;当单价和数量有一者为空,单价通过金额/数量获得,数量=金额/单价;当三者都不为空,编辑单价/数量时,金额=编辑后的单价*数量,编辑金额不为0时,数量不变,单价=编辑后的金额/数量。
* 三者某一项为空,其他项不变
* */
export function calcJiananPrice(option) {
let { type, index, value, spsl, dj, je, sl, se, tmpJe, tmpDj, updateGoodsForm } = option
if (type == "spsl") {
// 数量改变
spsl = value
if (spsl == "") {
} else if (dj && spsl != 0) {
je = dj * spsl
} else if (je && spsl != 0) {
dj = je / spsl
}
} else if (type == "dj") {
// 单价改变
dj = value
if (dj == "") {
} else if (spsl) {
je = spsl * dj
} else if (je && dj != 0) {
spsl = je / dj
}
} else if (type == "je") {
// 总价改变
je = value
if (je == "") {
} else if (je == 0 || je == "") {
dj = ""
updateGoodsForm && setTimeout(() => {
// 避免多次输入0时,je一直是"",会引起输入框内容不变
spsl = toFixed(spsl, slFloat)
dj = toFixed(dj, djFloat)
je = ""
se = ""
tmpJe = ""
updateGoodsForm({ spsl, dj, je, se, tmpJe }, index);
}, 0)
} else if (spsl && spsl != 0) {
dj = je / spsl
} else if (dj && dj != 0) {
spsl = je / dj
}
}
se = ""
tmpJe = ""
tmpDj = ""
if (je > 0) {
// 税额=含税金额*0.015/(1+5%)
// 税额根据界面显示的金额来换算,避免一些四舍五入的临界值导致误差大于或等于0.01
se = toFixedForce(je, jeFloat) * sl / 1.05
// 不含税金额=含税金额-税额 (减按征收的不含税金额都按含税金额算,提交时也是提交含税金额)
tmpJe = je - se
se = toFixedForce(se, jeFloat)
tmpJe = toFixedForce(tmpJe, jeFloat)
}
if (dj > 0) {
// 不含税单价 (减按征收的不含税金额都按含税金额算,提交时也是提交含税金额)
tmpDj = toFixedForce(tmpJe, jeFloat) / spsl
tmpDj = toFixed(tmpDj, djFloat)
}
// 取小数位并四舍五入
spsl = toFixed(spsl, slFloat)
je = toFixedForce(je, jeFloat)
dj = toFixed(dj, djFloat)
return { spsl, dj, je, se, tmpJe, tmpDj }
}
/**
* 差额征税 金额计算
*
* 先算税额,若(含税销售额-扣除额)>0,税额=(含税销售额-扣除额)*(税率或征收率)/(1+税率或征收率),若(含税销售额-扣除额)<=0,则税额=0,再算金额=含税销售额-税额,如果数量不为空,则不含税单价=金额/数量,若数量为空,则不含税单价也为空。
* 三者某一项为空,其他项不变
* */
export function calcChaePrice(option) {
let { type, value, spsl, dj, je, se, tmpJe, tmpDj } = option
if (type == "spsl") {
// 数量改变
spsl = value
if (spsl == "") {
} else if (je && spsl != 0) {
dj = je / spsl
}
} else if (type == "dj") {
// 单价改变
dj = value
if (dj == "") {
} else if (je && dj != 0) {
spsl = je / dj
}
}
// 取小数位并四舍五入
spsl = toFixed(spsl, slFloat)
dj = toFixed(dj, djFloat)
tmpDj = dj
return { spsl, dj, je, se, tmpJe, tmpDj }
}