UNPKG

tplus-pos

Version:

pos module

526 lines (436 loc) 19.1 kB
"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