tplus-pos
Version:
pos module
526 lines (436 loc) • 19.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require("babel-runtime/helpers/createClass");
var _createClass3 = _interopRequireDefault(_createClass2);
var _symbol = require("babel-runtime/core-js/symbol");
var _symbol2 = _interopRequireDefault(_symbol);
var _priceTaxFormula = require("./priceTaxFormula");
var _Format2 = require("./Format");
require("./Challenger");
var _tplusPoslogin = require("tplus-poslogin");
var _Enum = require("./Enum");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _TMath = (0, _symbol2.default)('TMath'); /* eslint-disable no-undef */
/*价税额算法 */
var _Format = (0, _symbol2.default)('Format');
/**
* 价税额算法
* Created by majianb on 2019/4/10
*/
var REAlgorithmAdapter = function () {
function REAlgorithmAdapter(dto) {
(0, _classCallCheck3.default)(this, REAlgorithmAdapter);
this[_TMath] = new $T.Bap.TMath.NormalCalculator();
this.isMember = false;
// 会员ID
if (dto.Idmember && dto.Idmember > 0) {
this.isMember = true;
}
// 报价是否含税
this.withTax = dto.withTax || (0, _tplusPoslogin.PosInitData)("isPriceWithTax");
// 单价小数位数
this.priceDecimalDigits = (0, _tplusPoslogin.PosInitData)("PricePrecision");
// 数量小数位数
this.quantityDecimalDigits = (0, _tplusPoslogin.PosInitData)("QuantityPrecision");
this[_Format] = new _Format2.Format();
}
/**
* 价税额参数设置
*/
(0, _createClass3.default)(REAlgorithmAdapter, [{
key: "InitPriceTaxFormula",
value: function InitPriceTaxFormula() {
var optPriceTaxFormula = {};
// 报价是否含税
optPriceTaxFormula.PriceWithTax = this.withTax;
// 税标
optPriceTaxFormula.taxFlag = this.taxFlag;
// 设置是否发票
optPriceTaxFormula.isInvoice = true;
// 币种折算方式
optPriceTaxFormula.currency = null;
// 是否启用多币种
optPriceTaxFormula.IsMultiCurrency = false;
// 单价小数位数
optPriceTaxFormula.UnitPriceDecimalDigits = this.priceDecimalDigits;
// 数量小数位数
optPriceTaxFormula.QuantityDecimalDigits = this.quantityDecimalDigits;
// 发票单价精度
optPriceTaxFormula.InvoiceDecimalDigits = this.priceDecimalDigits;
// 汇率
optPriceTaxFormula.ExchangeRate = 4;
var columns = {
Price: "RetailPrice", //报价原币 --零售价
DiscountPrice: "Price", //无税单价原币 --单价
Amount: "Amount", //金额原币 -- 金额
DiscountTaxPrice: "TaxPrice", //含税单价原币 --含税单价
AmountTax: "TaxAmount", //含税金额原币 --含税金额
TaxRate: "TaxRate", //税率
DiscountRate: "TotalDiscountRate", //折扣率 -- 综合折扣率
Quantity: "Quantity", //数量
Tax: "Tax", //税额原币 -- 税额
DiscountAmount: "DetailDiscountAmount" //折扣额原币 -- 折扣金额
};
// if (this.isMember) {
// // 报价原币
// columns["Price"]="MemberPrice";
// }
optPriceTaxFormula.Columns = columns;
return optPriceTaxFormula;
}
/**
* 数量改变事件
* @param {*} updateRetailDetail
*/
}, {
key: "QuantityChange",
value: function QuantityChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.QuantityChange();
// 计算非会员部分的折扣率
// this.CaculateDiscountRate(updateRetailDetail);
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 零售金额
updateRetailDetail.RetailAmount = this[_Format].FormatAmount(this[_TMath].Multiply(updateRetailDetail.Quantity, updateRetailDetail.RetailPrice));
}
/**
* 获取价税额算法
* @param {*} updateRetailDetail
*/
}, {
key: "GetFormulaBase",
value: function GetFormulaBase(updateRetailDetail) {
var opt = this.InitPriceTaxFormula();
this.initRetailDate(updateRetailDetail);
opt.CurrentRowData = updateRetailDetail;
var priceTaxFormula = _priceTaxFormula.FormulaFactory.GetFormula(opt);
return priceTaxFormula;
}
}, {
key: "initRetailDate",
value: function initRetailDate(retailDetail) {
// TaxPrice 含税单价
retailDetail.TaxPrice = retailDetail.TaxPrice || 0;
// RetailPrice 零售价
retailDetail.RetailPrice = retailDetail.RetailPrice || 0;
// MemberPrice 会员价
retailDetail.MemberPrice = retailDetail.MemberPrice || 0;
// MemberDiscountRate 会员折扣%
retailDetail.MemberDiscountRate = retailDetail.MemberDiscountRate || 0;
// DiscountRate 折扣%
retailDetail.DiscountRate = retailDetail.DiscountRate || 0;
// Price 单价
retailDetail.Price = retailDetail.Price || 0;
// RetailAmount 零售金额
retailDetail.RetailAmount = retailDetail.RetailAmount || 0;
// Amount 金额
retailDetail.Amount = retailDetail.Amount || 0;
// TaxRate 税率
retailDetail.TaxRate = retailDetail.TaxRate || 0;
// Tax 税额
retailDetail.Tax = retailDetail.Tax || 0;
// TaxAmount 含税金额
retailDetail.TaxAmount = retailDetail.TaxAmount || 0;
// 综合折扣
if (!retailDetail.TotalDiscountRate) {
var totalDiscountRate = Math.Multiply(retailDetail.MemberDiscountRate, retailDetail.DiscountRate);
retailDetail.TotalDiscountRate = this[_Format].Format(totalDiscountRate, 4);
}
}
/**
* 单价改变事件
* @param {*单据明细} updateRetailDetail
*/
}, {
key: "DiscountPriceChange",
value: function DiscountPriceChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.DiscountPriceChange();
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 计算非会员部分的折扣率
this.CaculateDiscountRate(updateRetailDetail);
}
/**
* 含税金额改变
* @param {*单据明细} updateRetailDetail
*/
}, {
key: "AmountTaxChange",
value: function AmountTaxChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.AmountTaxChange();
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 计算非会员部分的折扣率
this.CaculateDiscountRate(updateRetailDetail);
}
/**
* 含税单价改变
* @param {*} updateRetailDetail
*/
}, {
key: "DiscountTaxPriceChange",
value: function DiscountTaxPriceChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.DiscountTaxPriceChange();
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 计算非会员部分的折扣率
this.CaculateDiscountRate(updateRetailDetail);
}
/**
* 金额改变
*/
}, {
key: "AmountChange",
value: function AmountChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.AmountChange();
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 计算非会员部分的折扣率
this.CaculateDiscountRate(updateRetailDetail);
}
/**
* 税率改变事件
* @param {*} updateRetailDetail
*/
}, {
key: "TaxRateChange",
value: function TaxRateChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.TaxRateChange();
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 计算非会员部分的折扣率
this.CaculateDiscountRate(updateRetailDetail);
}
/**
* 税额改变事件
* @param {*} updateRetailDetail
*/
}, {
key: "TaxAmountChange",
value: function TaxAmountChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.TaxAmountChange();
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 计算非会员部分的折扣率
this.CaculateDiscountRate(updateRetailDetail);
}
/**
* 报价改变事件
* @param {*} updateRetailDetail
*/
}, {
key: "PriceChange",
value: function PriceChange(updateRetailDetail) {
$T.debugger();
if (this.isMember) {
this.MemberPriceChange(updateRetailDetail);
} else {
this.RetailPriceChange(updateRetailDetail);
}
}
/**
* 零售价改变事件
* @param {*} updateRetailDetail
*/
}, {
key: "RetailPriceChange",
value: function RetailPriceChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
priceTaxFormula.PriceChange();
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 零售金额
var retailAmount = this[_TMath].Multiply(updateRetailDetail.Quantity, updateRetailDetail.RetailPrice);
updateRetailDetail.RetailAmount = this[_Format].FormatAmount(retailAmount);
}
/**
* 会员价改变事件
* @param {*} updateRetailDetail
*/
}, {
key: "MemberPriceChange",
value: function MemberPriceChange(updateRetailDetail) {
$T.debugger();
if (this.withTax) {
// 含税的场合
/*含税单价=会员价×会员折扣×折扣
含税金额=含税单价×数量
金额=含税金额÷(1+税率)
税额=含税金额-金额
单价=金额÷数量
折扣金额=零售价×数量-含税金额*/
// 含税单价=会员价×会员折扣×折扣
updateRetailDetail.TaxPrice = this[_Format].FormatPrice(this[_TMath].Multiply(this[_TMath].Multiply(updateRetailDetail.MemberPrice, updateRetailDetail.MemberDiscountRate), updateRetailDetail.DiscountRate));
// 含税金额=含税单价×数量
updateRetailDetail.TaxAmount = this[_Format].FormatAmount(this[_TMath].Multiply(updateRetailDetail.TaxPrice, updateRetailDetail.Quantity));
// 金额=含税金额÷(1+税率)
updateRetailDetail.Amount = this[_Format].FormatAmount(this[_TMath].Divide(updateRetailDetail.TaxAmount, this[_TMath].Add(1, updateRetailDetail.TaxRate), true));
// 税额=含税金额-金额
updateRetailDetail.Tax = this[_Format].FormatAmount(this[_TMath].Minus(updateRetailDetail.TaxAmount, updateRetailDetail.Amount));
// 单价=金额÷数量
updateRetailDetail.Price = this[_Format].FormatPrice(this[_TMath].Divide(updateRetailDetail.Amount, updateRetailDetail.Quantity, true));
// 折扣金额=零售价×数量-含税金额
updateRetailDetail.DetailDiscountAmount = this[_Format].FormatAmount(this[_TMath].Minus(this[_TMath].Multiply(updateRetailDetail.RetailPrice, updateRetailDetail.Quantity), updateRetailDetail.TaxAmount));
// detailDto.TotalDiscountRate = SCMFormat.FormatDiscountRate((detailDto.Price * detailDto.Quantity * (1 + (detailDto.TaxRate ?? 0))) / (detailDto.RetailPrice * detailDto.Quantity));
var temp1 = this[_TMath].Multiply(updateRetailDetail.TaxPrice, updateRetailDetail.Quantity);
var temp3 = this[_TMath].Multiply(updateRetailDetail.RetailPrice, updateRetailDetail.Quantity);
if (temp3) {
// 综合折扣率
updateRetailDetail.TotalDiscountRate = this[_Format].Format(this[_TMath].Divide(temp1, temp3, true), 4);
}
} else {
// 不含税的场合
/*
单价=会员价×会员折扣×折扣
金额=单价×数量
税额=金额×税率
含税金额=金额+税额
含税单价=含税金额÷数量
折扣金额=零售价×数量×(1+税率)-含税金额
*/
// 单价=会员价×会员折扣×折扣
updateRetailDetail.Price = this[_Format].FormatPrice(this[_TMath].Multiply(this[_TMath].Multiply(updateRetailDetail.MemberPrice, updateRetailDetail.MemberDiscountRate), updateRetailDetail.DiscountRate));
// 金额=单价×数量
updateRetailDetail.Amount = this[_Format].FormatAmount(this[_TMath].Multiply(updateRetailDetail.Price, updateRetailDetail.Quantity));
// 税额=金额×税率
updateRetailDetail.Tax = this[_Format].FormatAmount(this[_TMath].Multiply(updateRetailDetail.Amount, updateRetailDetail.TaxRate));
// 含税金额=金额+税额
updateRetailDetail.TaxAmount = this[_Format].FormatAmount(this[_TMath].Add(updateRetailDetail.Amount, updateRetailDetail.Tax));
// 含税单价=含税金额÷数量
updateRetailDetail.TaxPrice = this[_Format].FormatPrice(this[_TMath].Divide(updateRetailDetail.TaxAmount, updateRetailDetail.Quantity, true));
// 折扣金额=零售价×数量×(1+税率)-含税金额
updateRetailDetail.DetailDiscountAmount = this[_Format].FormatAmount(this[_TMath].Minus(this[_TMath].Multiply(this[_TMath].Multiply(updateRetailDetail.RetailPrice, updateRetailDetail.Quantity), this[_TMath].Add(1, updateRetailDetail.TaxRate)), updateRetailDetail.TaxAmount));
// detailDto.TotalDiscountRate = SCMFormat.FormatDiscountRate((detailDto.Price * detailDto.Quantity) / (detailDto.RetailPrice * detailDto.Quantity));
var _temp = this[_TMath].Multiply(updateRetailDetail.Price, updateRetailDetail.Quantity);
// let temp2= this[_TMath].Add(detailDto.TaxRate||0,1);
var _temp2 = this[_TMath].Multiply(updateRetailDetail.RetailPrice, updateRetailDetail.Quantity);
if (_temp2) {
// 综合折扣率
updateRetailDetail.TotalDiscountRate = this[_Format].Format(this[_TMath].Divide(_temp, _temp2, true), 4);
}
}
// 零售金额
var retailAmount = this[_TMath].Multiply(updateRetailDetail.Quantity, updateRetailDetail.RetailPrice);
updateRetailDetail.RetailAmount = this[_Format].FormatAmount(retailAmount);
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
}
/**
* 计算非会员部分的折扣率
* @param {*单据明细} updateRetailDetail
*/
}, {
key: "CaculateDiscountRate",
value: function CaculateDiscountRate(updateRetailDetail) {
$T.debugger();
// 会员价
var memberPrice = updateRetailDetail["MemberPrice"] || 0;
// 会员折扣
var memberDiscountRate = updateRetailDetail["MemberDiscountRate"] || 0;
// 总折扣
var totalDiscountRate = updateRetailDetail["TotalDiscountRate"] || 0;
// 数量
var quantity = updateRetailDetail["Quantity"] || 0;
if (memberDiscountRate == 0 || totalDiscountRate == 0) {
updateRetailDetail["DiscountRate"] = 1;
return;
}
// else
// {
// let discountRate = this[_TMath].Divide(totalDiscountRate, memberDiscountRate, true);
// updateRetailDetail["DiscountRate"] =this[_Format].Format(discountRate,4);
// }
var amount = updateRetailDetail["Amount"] || 0;
// 含税
if (this.withTax) {
amount = updateRetailDetail["TaxAmount"] || 0;
}
var temp1 = this[_TMath].Multiply(memberPrice, memberDiscountRate);
var temp2 = this[_TMath].Multiply(temp1, quantity);
var discountRate = this[_TMath].Divide(amount, temp2, true);
updateRetailDetail["DiscountRate"] = this[_Format].Format(discountRate, 4);
}
/**
* 折扣率改变
* @param {*} updateRetailDetail
*/
}, {
key: "DiscountRateChange",
value: function DiscountRateChange(updateRetailDetail) {
$T.debugger();
if (!this.isMember) {
// 非会员的场合
// 会员折扣
var memberDiscountRate = updateRetailDetail["MemberDiscountRate"] || 0;
// 折扣%
var discountRate = updateRetailDetail["DiscountRate"];
// 总折扣率
var totalDiscountRate = this[_TMath].Multiply(memberDiscountRate, discountRate);
updateRetailDetail["TotalDiscountRate"] = this[_Format].Format(totalDiscountRate, 4);
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
// 折扣率改变
priceTaxFormula.DiscountRateChange();
} else {
// 调用会员价改变事件
this.MemberPriceChange(updateRetailDetail);
}
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
}
/**
* 折扣额改变
* @param {*} updateRetailDetail
*/
}, {
key: "DiscountAmountChange",
value: function DiscountAmountChange(updateRetailDetail) {
$T.debugger();
var priceTaxFormula = this.GetFormulaBase(updateRetailDetail);
// 折扣额改变
priceTaxFormula.DiscountAmountChange(updateRetailDetail);
// 按照金额配置计算实收金额
this._CalculateTaxAmountByAmountsetting(updateRetailDetail);
// 计算非会员部分的折扣率
this.CaculateDiscountRate(updateRetailDetail);
}
/**
* 按照金额配置计算实收金额
* @param {*} updateRetailDetail
*/
}, {
key: "_CalculateTaxAmountByAmountsetting",
value: function _CalculateTaxAmountByAmountsetting(updateRetailDetail) {
$T.debugger();
// var taxAmount = CalculateTaxAmountByAmountsetting(updateRetailDetail.TaxAmount, PosInitData("invAmountsetting"), InvAmountsetting);
// if (updateRetailDetail.TaxAmount != taxAmount) {
// // 抹零
// updateRetailDetail.WipeChange = Math.Minus(updateRetailDetail.TaxAmount, taxAmount);
// updateRetailDetail.TaxAmount = taxAmount;
// this.AmountTaxChange(updateRetailDetail);
// }
}
}]);
return REAlgorithmAdapter;
}();
exports.default = REAlgorithmAdapter;
//# sourceMappingURL=REAlgorithmAdapter.js.map