UNPKG

tplus-pos

Version:

pos module

1,436 lines (1,295 loc) 56.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FormulaFactory = undefined; require("./Challenger"); /************************** Formula.js begin*******************/ /** * 价税额基础算法 */ // eslint-disable-next-line no-undef var FormulaBase = $T.Object.extend({ init: function init(opt) { try { this.currentRowData = opt.CurrentRowData; //报价是否含税 this.withTax = opt.PriceWithTax || false; this.taxFlag; //含税标识 this.isInvoice = opt.Invoice || false; this.AlreadyRunMethod = false; this.pattern = /{(\w*)}/; this.currency = opt.CalDirection ? opt.CalDirection : ""; this.F_Price; this.isMultiCurrency = opt.IsMultiCurrency; this.unitPriceDecimalDigits = opt.UnitPriceDecimalDigits; this.quantityDecimalDigits = opt.QuantityDecimalDigits; this.invoiceDecimalDigits = opt.InvoiceDecimalDigits; this.exchangeRate = opt.ExchangeRate; this.Columns = { Price: "OrigPrice", //报价原币 DiscountPrice: "OrigDiscountPrice", //无税单价原币 Amount: "OrigDiscountAmount", //金额原币 DiscountTaxPrice: "OrigTaxPrice", //含税单价原币 AmountTax: "OrigTaxAmount", //含税金额原币 TaxRate: "TaxRate", //税率 DiscountRate: "DiscountRate", //折扣率 Quantity: "Quantity", //数量 Tax: "OrigTax", //税额原币 DiscountAmount: "OrigDiscount", //折扣额原币 F_Price: "F_Price", //报价本币 F_DiscountPrice: "DiscountPrice", //无税单价本币 F_Amount: "DiscountAmount", //无税金额本币 F_DiscountTaxPrice: "TaxPrice", //含税单价本币 F_AmountTax: "TaxAmount", //含税金额本币 F_DiscountAmount: "Discount", //折扣额本币 F_Tax: "Tax" //本币税额 }; if (opt.Columns) { this.Columns = opt.Columns; } this.precision = { Price: this.unitPriceDecimalDigits, //报价原币 DiscountPrice: this.unitPriceDecimalDigits, //无税单价原币 Amount: 2, //金额原币 DiscountTaxPrice: this.unitPriceDecimalDigits, //含税单价原币 AmountTax: 2, //含税金额原币 TaxRate: 4, //税率 DiscountRate: 4, //折扣率 Quantity: this.quantityDecimalDigits, //数量 Tax: 2, //税额原币 DiscountAmount: 2, //折扣额原币 F_Price: this.unitPriceDecimalDigits, //报价本币 F_DiscountPrice: this.unitPriceDecimalDigits, //无税单价本币 F_Amount: 2, //无税金额本币 F_DiscountTaxPrice: this.unitPriceDecimalDigits, //含税单价本币 F_AmountTax: 2, //含税金额本币 F_DiscountAmount: 2, //折扣额本币 F_Tax: 2 //本币税额 }; this.invoicePrecision = { Price: this.invoiceDecimalDigits, //报价原币 DiscountPrice: this.invoiceDecimalDigits, //无税单价原币 Amount: 2, //金额原币 DiscountTaxPrice: this.invoiceDecimalDigits, //含税单价原币 AmountTax: 2, //含税金额原币 TaxRate: 4, //税率 DiscountRate: 4, //折扣率 Quantity: this.quantityDecimalDigits, //数量 Tax: 2, //税额原币 DiscountAmount: 2, //折扣额原币 F_Price: this.invoiceDecimalDigits, //报价本币 F_DiscountPrice: this.invoiceDecimalDigits, //无税单价本币 F_Amount: 2, //无税金额本币 F_DiscountTaxPrice: this.invoiceDecimalDigits, //含税单价本币 F_AmountTax: 2, //含税金额本币 F_DiscountAmount: 2, //折扣额本币 F_Tax: 2 //本币税额 }; this.Post_Run = null; this.formulaList = []; var func = ["PriceChange", "DiscountPriceChange", "DiscountTaxPriceChange", "AmountChange", "AmountTaxChange", "TaxRateChange", "QuantityChange", "DiscountAmountChange", "DiscountRateChange", "TaxAmountChange"]; for (var i = 0, len = func.length; i < len; ++i) { this[func[i]].FunctionName = func[i]; this[func[i]] = this[func[i]].wrap(function (proc) { this.CheckData(); this.formulaList = []; // (function(funcName) { // 进入方法前的初始化字段的方法 // if (funcName == 'TaxAmountChange') { // this.SetLastModifiedField(this.Columns['Tax']); // } else { // this.SetLastModifiedField(''); // } // }).bind(this)(arguments.callee.__method.FunctionName); proc(); if (this.AlreadyRunMethod == true) { this.AlreadyRunMethod = false; return; } this.Run(); if (this.isMultiCurrency) { this.formulaList = []; this.CalculateFunctionalCurrency(); } else { this.CopyNativeToFunction(); //复制原币到本币 } //处理税额为0的情况 this.CalculateWithTaxIsNull(); if (this.Post_Run && typeof this.Post_Run == "function") { this.Post_Run(); } }); } } catch (eex1) { console.error(eex1); } }, InitArgs: function InitArgs(opt) { //初始化 if (opt) { this.init(opt); } }, GetExchangeRate: function GetExchangeRate() { if (this.currentRowData["ExchangeRate"]) { var v = this.currentRowData["ExchangeRate"]; if (v == null || v == "") return 1; return v; } return 1; }, CheckData: function CheckData() { //检查实例参数是否正确 if (this.currentRowData == null) { throw new Error("data is null"); } if (typeof this.withTax != "boolean") { throw new Error("PriceWithTax is not bool"); } }, SetCurrentRowData: function SetCurrentRowData(g) { //设置明细对象 this.currentRowData = g; }, SetPriceWithTax: function SetPriceWithTax(b) { //设置报价是否含税 this.withTax = b; }, SetInvoice: function SetInvoice(b) { //设置是否发票 this.isInvoice = b; }, /** * 获取当前列的内容 * @param {*} colName */ getCellValue: function getCellValue(colName) { if (colName) { return this.currentRowData[colName]; } return null; }, /** * 设置当前列的内容 * @param {*} colName * @param {*} val */ setCellValue: function setCellValue(colName, val) { if (colName) { this.currentRowData[colName] = val; } }, GetFlag: function GetFlag() { //获取含税标识 this.taxFlag = this.getCellValue("TaxFlag") || true; //<朱金伟 2008/10/15 修改代码,this.taxFlag首字符有大写,有小写,统一改成小写 if (this.taxFlag && (this.taxFlag == true || this.taxFlag.toLowerCase() == "true")) { return true; } return false; }, SetFlag: function SetFlag(val) { //设置含税标识 this.setCellValue("TaxFlag", val); this.taxFlag = val; }, GetLastModifiedField: function GetLastModifiedField() { //获取最后修改字段的值 return this.getCellValue("LastModifiedField"); }, SetLastModifiedField: function SetLastModifiedField(val) { //设置最后修改字段的值 this.setCellValue("LastModifiedField", val); }, ConvertFunctionalCurrency: function ConvertFunctionalCurrency(src, dest) { var val = this.getCellValue(this.Columns[src]); var pre = this.precision[src]; if (pre) { val = val.Round(pre); } var ret; if (typeof val == "string" || typeof val == "number") { if (val === "" || val === undefined || val === null || isNaN(val)) { ret = ""; } else { ret = $T.ToFunction(val, this.currency, this.GetExchangeRate(), true); } if (src == "Price") { this.F_Price = ret; } else { this.setCellValue(this.Columns[dest], ret); } } }, Run: function Run() { // 运行 try { var list = this.formulaList; if (list.length <= 0) return; var _formulaBase = new $T.Bap.TMath.FormulaBase(this.currentRowData); _formulaBase.BeforeSetValue = function (colName, value) { if (colName == "F_Price") { this.F_Price = value; return false; } if (colName == this.Columns["DiscountRate"]) { if (value === "") { this.setCellValue(colName, 1); return false; } } }.bind(this); _formulaBase.BeforeGetValue = function (colName) { if (colName == "F_Price") { return this.F_Price; } }.bind(this); for (var i = 0, len = list.length; i < len; ++i) { _formulaBase.SetExpression(list.pop()); } _formulaBase.SetMapColumns(this.Columns); if (this.isInvoice) { _formulaBase.SetPrecision(this.invoicePrecision); } else { _formulaBase.SetPrecision(this.precision); } _formulaBase.RunParse(); } catch (exc11) { alert("我们的程序发生了问题,请关闭此单据后,重新打开!"); } }, CalculateDiscount: function CalculateDiscount(ff1, ff2, ff3, ff4) { //计算原币折扣额和折扣率 /* 报价不为0或不为空时: 报价含税: 折扣金额=报价×数量-含税金额 折扣=含税金额/(报价×数量); 报价不含税: 折扣金额=报价×数量×(1+税率)-含税金额 折扣=金额/(报价×数量) */ var f1, f2; var price = this.getCellValue(this.Columns["Price"]); if (!Number(price)) return; if (this.withTax) { if (ff1 || ff2) { f1 = ff1; f2 = ff2; } else { /* 报价含税: 折扣金额=报价×数量-含税金额 折扣=含税金额/(报价×数量); */ //折扣金额=报价×数量-含税金额 f1 = "{DiscountAmount} = {Price}*{Quantity}-{AmountTax}"; //折扣=含税金额/(报价×数量) f2 = "{DiscountRate}= {AmountTax}/({Price}*{Quantity})"; } } else { if (ff3 || ff4) { f1 = ff3; f2 = ff4; } else { /* 报价不含税: 折扣金额=报价×数量×(1+税率)-含税金额 折扣=金额/(报价×数量) */ //折扣金额=报价×数量×(1+税率)-含税金额 f1 = "{DiscountAmount} = ({Price}*{Quantity}*(1+{TaxRate}))@2-{AmountTax}"; //折扣=金额/(报价×数量) f2 = "{DiscountRate} = {Amount}/({Price}*{Quantity})"; } } if (f1) this.formulaList.unshift(f1); if (f2) this.formulaList.unshift(f2); }, CalculateFunctionDiscount: function CalculateFunctionDiscount() { //计算本币折扣额和折扣率 var f2 = void 0; var price = this.getCellValue(this.Columns["Price"]); if (!Number(price)) return; this.ConvertFunctionalCurrency("Price", "F_Price"); //f1 = '{F_Price} = {Price}*'+this.exchangeRate.RoundExchangeRate(); if (this.withTax) { /* 报价含税: 折扣金额=报价×数量-含税金额 折扣=含税金额/(报价×数量); */ //折扣金额=报价×数量-含税金额 f2 = "{F_DiscountAmount} = {F_Price}*{Quantity}-{F_AmountTax}"; //折扣=含税金额/(报价×数量) //f3 = '{DiscountRate} = {F_AmountTax}/({F_Price}*{Quantity})'; } else { /* 报价不含税: 折扣金额=报价×数量×(1+税率)-含税金额 折扣=金额/(报价×数量) */ //折扣金额=报价×数量×(1+税率)-含税金额 f2 = "{F_DiscountAmount} = ({F_Price}*{Quantity}*(1+{TaxRate}))@2-{F_AmountTax}"; //折扣=金额/(报价×数量) //f3 = '{DiscountRate} = {F_Amount}/({F_Price}*{Quantity})'; } //this.formulaList.unshift(f1); this.formulaList.unshift(f2); //this.formulaList.unshift(f3); }, CalculateFunctionalCurrency: function CalculateFunctionalCurrency() { // 计算本币 /* 1. 汇率为1时,原币与本币价税额对应的字段值相等 2. 汇率不为1时:计算本币价税额 1) 标识为含税: 在原币价税额计算完成的基础上,先根据汇率计算本币含税金额,再以本币含税金额为准,进行推算: 本币含税金额=原币含税金额*汇率(折算方式:原币*汇率=本位币) 本币含税金额=原币含税金额/汇率(折算方式:原币/汇率=本位币) 判断为“应税外加”时:遵照“应税外加”算法中E规则计算。 判断为“应税内含”时:遵照“应税内含”算法中C规则计算。取不到本币报价的,按报价*汇率计算 如果修改的是税额,在按规则计算基础上还要重新计算: 本币税额=税额*汇率(折算方式:原币*汇率=本位币) 本币税额=税额/汇率(折算方式:原币/汇率=本位币) 本币金额=本币含税金额-本币税额 本币单价=本币金额÷数量 2) 标识为无税: 在原币价税额计算完成的基础上,先根据汇率计算本币金额,再以本币金额为准,遵照“应税外加”算法中D规则进行推算。(内含算法金额不能直接输入、修改) 本币金额=原币金额*汇率(折算方式:原币*汇率=本位币) 本币金额=原币金额/汇率(折算方式:原币/汇率=本位币) 如果修改的是税额,在按规则计算基础上还要重新计算: 本币税额=税额*汇率(折算方式:原币*汇率=本位币) 本币税额=税额/汇率(折算方式:原币/汇率=本位币) 本币含税金额=本币金额+本币税额 本币含税单价=本币含税金额÷数量 3. 原币价税额不变,依据(1)、(2)规则和汇率推算本币价税额。 */ if (!this.isMultiCurrency) return; if (Number(this.GetExchangeRate()) == 1) { this.CopyNativeToFunction(); //复制原币到本币 } else { this.RealCalculateFunction(); this.Run(); //如果最后一次修改的字段是税额,则重新计算本币金额和本币单价 if (this.GetLastModifiedField() == this.Columns["Tax"]) { this.CalculateFunctionTaxAmount(); } } }, CopyNativeToFunction: function CopyNativeToFunction() { //复制原币到本币 for (var name in this.Columns) { if (typeof this.Columns[name] == "string" && name.indexOf("F_") < 0) { try { var o = this.getCellValue(this.Columns[name]); this.setCellValue(this.Columns["F_" + name], o); } catch (exc) { console.error(exc); } } } }, RealCalculateFunction: function RealCalculateFunction() { if (this.GetFlag()) { // 含税 /* 1) 输入、修改原币含税金额或标识为含税: 在原币价税额计算完成的基础上,先根据汇率计算本币含税金额,再以本币含税金额为准,进行推算: 本币含税金额=原币含税金额*汇率(折算方式:原币*汇率=本位币) 本币含税金额=原币含税金额/汇率(折算方式:原币/汇率=本位币) 判断为“应税外加”时:遵照“应税外加”算法中E规则计算。 判断为“应税内含”时:遵照“应税内含”算法中C规则计算。取不到本币报价的,按报价*汇率计算 2) 如果修改的是税额,在按规则计算基础上还要重新计算: 本币税额=税额*汇率(折算方式:原币*汇率=本位币) 本币税额=税额/汇率(折算方式:原币/汇率=本位币) 本币金额=本币含税金额-本币税额 本币单价=本币金额÷数量 */ this.CalculateFunctionWithTax(); } else { //无税 /* 1) 输入、修改原币金额或标识为无税: 在原币价税额计算完成的基础上,先根据汇率计算本币金额,再以本币金额为准,遵照“应税外加”算法中D规则进行推算。(内含算法金额不能直接输入、修改) 本币金额=原币金额*汇率(折算方式:原币*汇率=本位币) 本币金额=原币金额/汇率(折算方式:原币/汇率=本位币) 2) 如果修改的是税额,在按规则计算基础上还要重新计算: 本币税额=税额*汇率(折算方式:原币*汇率=本位币) 本币税额=税额/汇率(折算方式:原币/汇率=本位币) 本币含税金额=本币金额+本币税额 本币含税单价=本币含税金额÷数量 */ this.CalculateFunctionWithoutTax(); } //判断报价是否为空 var price = this.getCellValue(this.Columns["Price"]); if (!Number(price)) { var discountAmount = this.getCellValue(this.Columns["DiscountAmount"]); if (!Number(discountAmount)) this.setCellValue(this.Columns["F_DiscountAmount"], "");else this.setCellValue(this.Columns["F_DiscountAmount"], $T.ToFunction(discountAmount, this.currency, this.GetExchangeRate(), true)); } }, CalculateFunctionWithTax: function CalculateFunctionWithTax() { //计算含税本币 this.ConvertFunctionalCurrency("AmountTax", "F_AmountTax"); }, CalculateFunctionWithoutTax: function CalculateFunctionWithoutTax() { //计算无税本币 /* 本币税额=本币金额×税率 本币含税金额=本币金额+本币税额 本币含税单价=本币含税金额÷数量 本币单价=本币金额÷数量 报价不为0或不为空时: 报价含税: 本币折扣金额=本币报价×数量-本币含税金额 折扣=含税金额/(报价×数量); 报价不含税: 本币折扣金额=本币报价×数量×(1+税率)-本币含税金额 折扣=金额/(报价×数量) */ var f1, f2, f3, f4; this.ConvertFunctionalCurrency("Amount", "F_Amount"); //本币税额=本币金额×税率 f1 = "{F_Tax}={F_Amount}*{TaxRate}"; //本币含税金额=本币金额+本币税额 f2 = "{F_AmountTax} = {F_Amount}+{F_Tax}"; //本币含税单价=本币含税金额÷数量 f3 = "{F_DiscountTaxPrice} = {F_AmountTax}/{Quantity}"; //本币单价=本币金额÷数量 f4 = "{F_DiscountPrice} = {F_Amount}/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); this.CalculateFunctionDiscount(); }, CalculateFunctionTaxAmount: function CalculateFunctionTaxAmount() { //计算税额 /* 本币税额=税额*汇率(折算方式:原币*汇率=本位币) 本币税额=税额/汇率(折算方式:原币/汇率=本位币) */ var f1, f2; this.formulaList = []; this.ConvertFunctionalCurrency("Tax", "F_Tax"); if (this.GetFlag()) { // 含税 /* 本币金额=本币含税金额-本币税额 本币单价=本币金额÷数量 */ f1 = "{F_Amount} = {F_AmountTax}-{F_Tax}"; f2 = "{F_DiscountPrice} = {F_Amount}/{Quantity}"; // 发票 } else { // 无税 /* 本币含税金额=本币金额+本币税额 本币含税单价=本币含税金额÷数量 */ f1 = "{F_AmountTax} = {F_Amount}+{F_Tax}"; f2 = "{F_DiscountTaxPrice} = {F_AmountTax}/{Quantity}"; // 发票 } this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.Run(); }, PriceChange: function PriceChange() { //报价改变 /* 当报价改为0或为空的时候: 折扣=100% 含税单价、含税金额、金额、税额、单价、数量、税率、折扣金额不发生变化。 */ var price = this.getCellValue(this.Columns["Price"]); if (!Number(price)) { this.setCellValue(this.Columns["DiscountRate"], 1); return false; } return true; }, DiscountPriceChange: function DiscountPriceChange() {}, //单价改变 DiscountTaxPriceChange: function DiscountTaxPriceChange() {}, //含税单价改变 AmountChange: function AmountChange() {}, //金额改变 AmountTaxChange: function AmountTaxChange() {}, //含税金额改变 TaxRateChange: function TaxRateChange() {}, //税率改变 QuantityChange: function QuantityChange() {}, //数量 DiscountAmountChange: function DiscountAmountChange() { //折扣金额 /* 当报价为0或为空的时候: 含税金额=原含税金额-折扣金额 然后套用含税金额发生变化的算法进行计算 */ var price = this.getCellValue(this.Columns["Price"]); if (Number(price) == 0) { var amount = this.getCellValue(this.Columns["AmountTax"]); var discountAmount = this.getCellValue(this.Columns["DiscountAmount"]); amount = amount.Round() - discountAmount.Round(); this.setCellValue(this.Columns["AmountTax"], amount.Round()); this.AmountTaxChange(); this.AlreadyRunMethod = true; return false; } return true; }, DiscountRateChange: function DiscountRateChange() { //折扣率 /* 当报价为0或为空的时候: 折扣可以修改,但是含税单价、含税金额、金额、税额、单价、数量、税率、折扣金额不发生变化。 */ var price = this.getCellValue(this.Columns["Price"]); if (Number(price) == 0) { return false; } return true; }, TaxAmountChange: function TaxAmountChange() {}, //税额 CalculateWithTaxIsNull: function CalculateWithTaxIsNull() { //处理税额为0的情况 var tax = this.getCellValue(this.Columns["Tax"]); if (Number(tax) == 0) { //含税 if (this.GetFlag()) { //单价=含税单价 this.setCellValue(this.Columns["DiscountPrice"], this.getCellValue(this.Columns["DiscountTaxPrice"])); } else { //含税单价=单价 this.setCellValue(this.Columns["DiscountTaxPrice"], this.getCellValue(this.Columns["DiscountPrice"])); } } //处理本币情况 var ftax = this.getCellValue(this.Columns["F_Tax"]); if (Number(ftax) == 0) { //含税 if (this.GetFlag()) { //单价=含税单价 this.setCellValue(this.Columns["F_DiscountPrice"], this.getCellValue(this.Columns["F_DiscountTaxPrice"])); } else { //含税单价=单价 this.setCellValue(this.Columns["F_DiscountTaxPrice"], this.getCellValue(this.Columns["F_DiscountPrice"])); } } } }); /************************** Formula.js end *******************/ /*-----------------------------应税外含算法 begin----------------------------------------------------*/ /* eslint-disable no-undef */ /** * Created by majianb on 2019/4/10. * 价税额算法 */ var FormulaExcludingTax = FormulaBase.extend({ init: function init(opt) { this.base(opt); }, PriceChange: function PriceChange() { //报价改变 /* A.录入、修改报价(报价不为0) 数量、税率、折扣不变,并依次计算: A1.报价含税、标识置为含税: 含税单价=报价×折扣 含税金额=含税单价×数量 金额=含税金额÷(1+税率) 税额=含税金额-金额 单价=含税金额÷(1+税率)÷数量 (zhangt依据王莹2012-9-4提出问题进行的修改) //折扣金额=报价×数量-含税金额 折扣金额=报价×数量-含税单价×数量(折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27) A2.报价不含税、标识置为无税: 单价=报价×折扣 金额=单价×数量huuuuu 税额=金额×税率 含税金额=金额+税额 含税单价=含税金额÷数量 //折扣金额=报价×数量×(1+税率)-含税金额 折扣金额=报价×数量×(1+税率)-(单价×数量×(1+税率))(折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27) */ if (!this.base()) return; var f1, f2, f3, f4, f5, f6; if (this.withTax) { //含税 this.SetFlag(true); //含税单价=报价×折扣 f1 = "{DiscountTaxPrice} = {Price}*{DiscountRate}"; //含税金额=含税单价×数量 f2 = "{AmountTax}={DiscountTaxPrice}*{Quantity}"; //金额=含税金额÷(1+税率) f3 = "{Amount} = {AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f4 = "{Tax} = {AmountTax}-{Amount}"; //单价=金额÷数量 f5 = "{DiscountPrice} = {AmountTax}/(1+{TaxRate})/{Quantity}"; //折扣金额=报价×数量-含税金额 //f6 = '{DiscountAmount} = {Price}*{Quantity}-{AmountTax}'; // 折扣金额=报价×数量-含税单价×数量(折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27) f6 = "{DiscountAmount} = {Price}*{Quantity}-{DiscountTaxPrice}*{Quantity}"; } else { this.SetFlag(false); //单价=报价×折扣 f1 = "{DiscountPrice} = {Price}*{DiscountRate}"; //金额=单价×数量 f2 = "{Amount}={DiscountPrice}*{Quantity}"; //税额=金额×税率 f3 = "{Tax} = {Amount}*{TaxRate}"; //含税金额=金额+税额 f4 = "{AmountTax} = {Amount} + {Tax}"; //含税单价=含税金额÷数量 f5 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; //折扣金额=报价×数量×(1+税率)-含税金额 //f6 = '{DiscountAmount} = ({Price}*{Quantity}*(1+{TaxRate}))@2-{AmountTax}'; //折扣金额=报价×数量×(1+税率)-(单价×数量×(1+税率))(折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27) f6 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-({DiscountPrice}*{Quantity}*(1+{TaxRate}))"; } this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); this.formulaList.unshift(f5); this.formulaList.unshift(f6); }, DiscountPriceChange: function DiscountPriceChange() { //单价改变 /* B.录入、修改单价 则数量、税率、报价不变,标识置为无税,并依次计算: 金额=单价×数量 税额=金额×税率 含税金额=金额+税额 含税单价=含税金额÷数量 报价不为0或不为空时: 报价含税: 折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税金额 //折扣=含税金额/(报价×数量); 折扣金额=报价×数量-(单价×数量×(1+税率)) 折扣=单价×数量×(1+税率)/(报价×数量) 报价不含税: //折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣金额=报价×数量×(1+税率)-(单价×数量×(1+税率)) 折扣=单价×数量/(报价×数量) */ var f1, f2, f3, f4; this.SetFlag(false); //金额=单价×数量 f1 = "{Amount} = {DiscountPrice}*{Quantity}"; //税额=金额×税率 f2 = "{Tax}={Amount}*{TaxRate}"; //含税金额=金额+税额 f3 = "{AmountTax}={Amount}+{Tax}"; //含税单价=含税金额÷数量 f4 = "{DiscountTaxPrice}={AmountTax}/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); var ff1, ff2, ff3, ff4; //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-(单价×数量×(1+税率)) ff1 = "{DiscountAmount} = {Price}*{Quantity}-({DiscountPrice}*{Quantity}*(1+{TaxRate}))"; //折扣=单价×数量×(1+税率)/(报价×数量) //ff2 = '{DiscountRate}= ({DiscountPrice}*{Quantity}*(1+{TaxRate}))/({Price}*{Quantity})'; //折扣=单价×(1+税率)/报价 ff2 = "{DiscountRate}= ({DiscountPrice}*(1+{TaxRate}))/{Price}"; //折扣金额=报价×数量×(1+税率)-(单价×数量×(1+税率)) ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-({DiscountPrice}*{Quantity}*(1+{TaxRate}))"; //折扣=单价×数量/(报价×数量) //ff4 = '{DiscountRate}= ({DiscountPrice}*{Quantity})/({Price}*{Quantity})'; //折扣=单价/报价 ff4 = "{DiscountRate}= {DiscountPrice}/{Price}"; this.CalculateDiscount(ff1, ff2, ff3, ff4); }, DiscountTaxPriceChange: function DiscountTaxPriceChange() { //含税单价改变 /* C.录入、修改含税单价 则数量、税率、报价不变,标识置为含税,并依次计算: 含税金额=含税单价×数量 金额=含税金额÷(1+税率) 税额=含税金额-金额 单价=含税金额÷(1+税率)÷数量 (zhangt依据王莹2012-9-4提出问题进行的修改) 报价不为0或不为空时: 报价含税: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税金额 //折扣=含税金额/(报价×数量); 折扣金额=报价×数量-含税单价×数量 折扣=含税单价×数量/(报价×数量) 报价不含税: //折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣金额=报价×数量×(1+税率)-含税单价×数量 折扣=含税单价×数量/(1+税率)/(报价×数量) */ var f1, f2, f3, f4; this.SetFlag(true); //含税金额=含税单价×数量 f1 = "{AmountTax}={DiscountTaxPrice}*{Quantity}"; //金额=含税金额÷(1+税率) f2 = "{Amount} = {AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f3 = "{Tax} = {AmountTax}-{Amount}"; //单价=金额÷数量 f4 = "{DiscountPrice} = {AmountTax}/(1+{TaxRate})/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); var ff1, ff2, ff3, ff4; //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税单价×数量 ff1 = "{DiscountAmount} = {Price}*{Quantity}-({DiscountTaxPrice}*{Quantity})"; //折扣=含税单价×数量/(报价×数量) //ff2 = '{DiscountRate}= {DiscountTaxPrice}*{Quantity}/({Price}*{Quantity})'; //折扣=含税单价/报价 ff2 = "{DiscountRate}= {DiscountTaxPrice}/{Price}"; // 折扣金额=报价×数量×(1+税率)-含税单价×数量 ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-({DiscountTaxPrice}*{Quantity})"; //折扣=含税单价×数量/(1+税率)/(报价×数量) //ff4 = '{DiscountRate}= {DiscountTaxPrice}*{Quantity}/(1+{TaxRate})/({Price}*{Quantity})'; //折扣=含税单价/(1+税率)/报价 ff4 = "{DiscountRate}= {DiscountTaxPrice}/(1+{TaxRate})/{Price}"; this.CalculateDiscount(ff1, ff2, ff3, ff4); }, AmountChange: function AmountChange() { //金额改变 /* D.录入、修改金额 则数量、税率、报价不变,标识置为无税,并依次计算: 税额=金额×税率 含税金额=金额+税额 含税单价=含税金额÷数量 单价=金额÷数量 报价不为0或不为空时: 报价含税: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税金额 折扣金额=报价×数量-(金额×(1+税率)) 折扣=金额×(1+税率)÷(报价×数量) //折扣=含税金额/(报价×数量); 报价不含税: //折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣金额=报价×数量×(1+税率)-(金额×(1+税率)) 折扣=金额/(报价×数量) */ var f1, f2, f3, f4; //标识置为无税 this.SetFlag(false); //税额=金额×税率 f1 = "{Tax}={Amount}*{TaxRate}"; //含税金额=金额+税额 f2 = "{AmountTax} = {Amount}+{Tax}"; //含税单价=含税金额÷数量 f3 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; //单价=金额÷数量 f4 = "{DiscountPrice} = {Amount}/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); var ff1, ff2, ff3, ff4; //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-(金额×(1+税率)) ff1 = "{DiscountAmount} = {Price}*{Quantity}-({Amount}*(1+{TaxRate}))"; //折扣=金额×(1+税率)÷(报价×数量) ff2 = "{DiscountRate}= {Amount}*(1+{TaxRate})/({Price}*{Quantity})"; //折扣金额=报价×数量×(1+税率)-(金额×(1+税率)) ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-({Amount}*(1+{TaxRate}))"; //折扣=金额/(报价×数量) ff4 = "{DiscountRate}= {Amount}/({Price}*{Quantity})"; this.CalculateDiscount(ff1, ff2, ff3, ff4); }, AmountTaxChange: function AmountTaxChange() { //含税金额改变 /* E.录入、修改含税金额 则数量、税率、报价不变,标识置为含税,并依次计算: 金额=含税金额÷(1+税率) 税额=含税金额-金额 含税单价=含税金额÷数量 单价=金额÷数量 报价不为0或不为空时: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 报价含税: 折扣金额=报价×数量-含税金额 折扣=含税金额/(报价×数量); 报价不含税: 折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣=含税金额÷(1+税率)÷(报价×数量) */ var f1, f2, f3, f4; this.SetFlag(true); //金额=含税金额÷(1+税率) f1 = "{Amount}={AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f2 = "{Tax} = {AmountTax} - {Amount}"; //含税单价=含税金额÷数量 f3 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; //单价=金额÷数量 f4 = "{DiscountPrice} = {AmountTax}/(1+{TaxRate})/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); var ff1, ff2, ff3, ff4; //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税金额 ff1 = "{DiscountAmount} = {Price}*{Quantity}-{AmountTax}"; // 折扣=含税金额/(报价×数量) ff2 = "{DiscountRate}= {AmountTax}/({Price}*{Quantity})"; // 折扣金额=报价×数量×(1+税率)-含税金额 ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-{AmountTax}"; // 折扣=含税金额÷(1+税率)÷(报价×数量) ff4 = "{DiscountRate}={AmountTax}/(1+{TaxRate})/({Price}*{Quantity})"; this.CalculateDiscount(ff1, ff2, ff3, ff4); }, TaxRateChange: function TaxRateChange() { //税率改变 /* F.录入、修改税率 F1.标识含税: 则数量、含税单价、含税金额、报价不变,并依次计算: 金额=含税金额÷(1+税率) 税额=含税金额-金额 单价=含税金额÷(1+税率)÷数量 (zhangt依据王莹2012-9-4提出问题进行的修改) 报价不为0或不为空时: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 报价含税: 折扣金额=报价×数量-含税金额 折扣=含税金额/(报价×数量); 报价不含税: 折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣=含税金额÷(1+税率)÷(报价×数量) F2.标识不含税: 则数量、单价、金额、报价不变,并依次计算: 税额=金额×税率 含税金额=金额+税额 含税单价=含税金额÷数量 报价不为0或不为空时: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 报价含税: //折扣金额=报价×数量-含税金额 //折扣=含税金额/(报价×数量); 折扣金额=报价×数量-金额×(1+税率) 折扣=金额×(1+税率)÷(报价×数量) 报价不含税: //折扣金额=报价×数量×(1+税率)-含税金额 折扣金额=报价×数量×(1+税率)-金额×(1+税率) 折扣=金额/(报价×数量) */ var f1, f2, f3; var ff1, ff2, ff3, ff4; if (this.GetFlag()) { //金额=含税金额÷(1+税率) f1 = "{Amount} = {AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f2 = "{Tax} = {AmountTax}-{Amount}"; //if (this.isInvoice) { //单价=金额÷数量 // f3 = '{DiscountPrice} = {Amount}/{Quantity}'; //} //else { //单价=金额÷数量 f3 = "{DiscountPrice} = {AmountTax}/(1+{TaxRate})/{Quantity}"; //} //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税金额 ff1 = "{DiscountAmount} = {Price}*{Quantity}-{AmountTax}"; //折扣=含税金额/(报价×数量) ff2 = "{DiscountRate}= {AmountTax}/({Price}*{Quantity})"; // 折扣金额=报价×数量×(1+税率)-含税金额 ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-{AmountTax}"; // 折扣=含税金额÷(1+税率)÷(报价×数量) ff4 = "{DiscountRate}={AmountTax}/(1+{TaxRate})/({Price}*{Quantity})"; } else { //税额=金额×税率 f1 = "{Tax} = {Amount}*{TaxRate}"; //含税金额=金额+税额 f2 = "{AmountTax} = {Amount} + {Tax}"; if (this.isInvoice) { //含税单价=含税金额÷数量 f3 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; } else { //含税单价=含税金额÷数量 f3 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; } //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-金额×(1+税率) ff1 = "{DiscountAmount} = {Price}*{Quantity}-({Amount}*(1+{TaxRate}))"; //折扣=金额×(1+税率)÷(报价×数量) ff2 = "{DiscountRate}= {Amount}*(1+{TaxRate})/({Price}*{Quantity})"; // 折扣金额=报价×数量×(1+税率)-金额×(1+税率) ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-{Amount}*(1+{TaxRate})"; // 折扣=金额/(报价×数量) ff4 = "{DiscountRate}={Amount}/({Price}*{Quantity})"; } this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.CalculateDiscount(ff1, ff2, ff3, ff4); }, QuantityChange: function QuantityChange() { //数量 /* G.录入、修改数量 G1.标识含税: 则税率、含税单价、报价不变,并依次计算: 含税金额=含税单价×数量 金额=含税金额÷(1+税率) 税额=含税金额-金额 单价=含税金额÷(1+税率)÷数量 (zhangt依据王莹2012-9-4提出问题进行的修改) 报价不为0或不为空时: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 报价含税: //折扣金额=报价×数量-含税金额 //折扣=含税金额/(报价×数量); 折扣金额=报价×数量-含税单价×数量 折扣不变 报价不含税: //折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣金额=报价×数量×(1+税率)-含税单价×数量 折扣不变 G2.标识不含税: 则税率、单价、报价不变,并依次计算: 金额=单价×数量 税额=金额×税率 含税金额=金额+税额 含税单价=含税金额÷数量 报价不为0或不为空时: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 报价含税: //折扣金额=报价×数量-含税金额 //折扣=含税金额/(报价×数量); 折扣金额=报价×数量-单价×数量×(1+税率) 折扣不变 报价不含税: //折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣金额=报价×数量×(1+税率)-单价×数量×(1+税率) 折扣不变 */ var f1, f2, f3, f4; var ff1, ff2, ff3, ff4; if (this.GetFlag()) { //含税金额=含税单价×数量 f1 = "{AmountTax} = {DiscountTaxPrice}*{Quantity}"; //金额=含税金额÷(1+税率) f2 = "{Amount} = {AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f3 = "{Tax} = {AmountTax}-{Amount}"; //单价=金额÷数量 f4 = "{DiscountPrice}={AmountTax}/(1+{TaxRate})/{Quantity}"; //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税单价×数量 ff1 = "{DiscountAmount} = {Price}*{Quantity}-({DiscountTaxPrice}*{Quantity})"; //折扣不变 ff2 = null; //折扣金额=报价×数量×(1+税率)-含税单价×数量 ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-({DiscountTaxPrice}*{Quantity})"; //折扣不变 ff4 = null; } else { //金额=单价×数量 f1 = "{Amount} = {DiscountPrice}*{Quantity}"; //税额=金额×税率 f2 = "{Tax} = {Amount}*{TaxRate}"; //含税金额=金额+税额 f3 = "{AmountTax} = {Amount}+{Tax}"; //含税单价=含税金额÷数量 f4 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-单价×数量×(1+税率) ff1 = "{DiscountAmount} = {Price}*{Quantity}-({DiscountPrice}*{Quantity}*(1+{TaxRate}))"; //折扣不变 ff2 = null; //折扣金额=报价×数量×(1+税率)-单价×数量×(1+税率) ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-({DiscountPrice}*{Quantity}*(1+{TaxRate}))"; //折扣不变 ff4 = null; } this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); this.CalculateDiscount(ff1, ff2, ff3, ff4); }, DiscountAmountChange: function DiscountAmountChange() { //折扣金额 /* H.录入、修改折扣金额 则数量、税率、报价(报价不为0或不为空)不变,标识置为含税,并依次计算: H1.报价含税: 含税金额=报价×数量-折扣金额 含税单价=含税金额÷数量 金额=含税金额÷(1+税率) 税额=含税金额-金额 单价=含税金额÷(1+税率)÷数量 (zhangt依据王莹2012-9-4提出问题进行的修改) 折扣=含税金额/(报价×数量) H2.报价不含税: 含税金额=报价×数量×(1+税率)-折扣金额 含税单价=含税金额÷数量 金额=含税金额÷(1+税率) 税额=含税金额-金额 单价=含税金额÷(1+税率)÷数量 (zhangt依据王莹2012-9-4提出问题进行的修改) 折扣=金额/(报价×数量) */ if (!this.base()) return; var f1, f2, f3, f4, f5, f6; this.SetFlag(true); if (this.withTax) { //含税金额=报价×数量-折扣金额 f1 = "{AmountTax} = {Price}*{Quantity} - {DiscountAmount}"; //含税单价=含税金额÷数量 f2 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; //金额=含税金额÷(1+税率) f3 = "{Amount} = {AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f4 = "{Tax} = {AmountTax} - {Amount}"; //单价=金额÷数量 f5 = "{DiscountPrice} = {AmountTax}/(1+{TaxRate})/{Quantity}"; //折扣=含税金额/(报价×数量) f6 = "{DiscountRate} = {AmountTax}/({Price}*{Quantity})"; } else { //含税金额=报价×数量×(1+税率)-折扣金额 f1 = "{AmountTax} = ({Price}*{Quantity}*(1+{TaxRate}))@2 - {DiscountAmount}"; //含税单价=含税金额÷数量 f2 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; //金额=含税金额÷(1+税率) f3 = "{Amount} = {AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f4 = "{Tax} = {AmountTax}-{Amount}"; //单价=金额÷数量 f5 = "{DiscountPrice} = {AmountTax}/(1+{TaxRate})/{Quantity}"; //折扣=金额/(报价×数量) f6 = "{DiscountRate} = {Amount}/({Price}*{Quantity})"; } this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); this.formulaList.unshift(f5); this.formulaList.unshift(f6); }, DiscountRateChange: function DiscountRateChange() { //折扣率 /* I.录入、修改折扣 则数量、税率、报价(报价不为0或不为空)不变,并依次计算: I1.报价含税、标识置为含税: 含税单价=报价×折扣 含税金额=含税单价×数量 金额=含税金额÷(1+税率) 税额=含税金额-金额 单价=含税金额÷(1+税率)÷数量 (zhangt依据王莹2012-9-4提出问题进行的修改) //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量-含税金额 折扣金额=报价×数量-报价×折扣×数量 I2.报价不含税、标识置为无税: 单价=报价×折扣 金额=单价×数量 税额=金额×税率 含税金额=金额+税额 含税单价=含税金额÷数量 //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量×(1+税率)-含税金额 折扣金额=报价×数量×(1+税率)-报价×折扣×数量×(1+税率) */ if (!this.base()) return; var f1, f2, f3, f4, f5, f6; if (this.withTax) { this.SetFlag(true); //含税单价=报价×折扣 f1 = "{DiscountTaxPrice} = {Price}*{DiscountRate}"; //含税金额=含税单价×数量 f2 = "{AmountTax} = {DiscountTaxPrice}*{Quantity}"; //金额=含税金额÷(1+税率) f3 = "{Amount} = {AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f4 = "{Tax} = {AmountTax}-{Amount}"; //单价=金额÷数量 f5 = "{DiscountPrice} = {AmountTax}/(1+{TaxRate})/{Quantity}"; //折扣金额=报价×数量-含税金额 //f6 = '{DiscountAmount} = {Price}*{Quantity} - {AmountTax}'; //折扣金额=报价×数量-报价×折扣×数量 f6 = "{DiscountAmount} = {Price}*{Quantity} - {Price}*{DiscountRate}*{Quantity}"; } else { this.SetFlag(false); if (this.isInvoice) { //单价=报价×折扣 f1 = "{DiscountPrice} = {Price}*{DiscountRate}"; //金额=单价×数量 f2 = "{Amount} = {DiscountPrice}*{Quantity}"; } else { //单价=报价×折扣 f1 = "{DiscountPrice} = {Price}*{DiscountRate}"; //金额=单价×数量 f2 = "{Amount} = {DiscountPrice}*{Quantity}"; } //税额=金额×税率 f3 = "{Tax} = {Amount}*{TaxRate}"; //含税金额=金额+税额 f4 = "{AmountTax} = {Amount}+{Tax}"; //含税单价=含税金额÷数量 f5 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; //折扣金额=报价×数量×(1+税率)-含税金额 //f6 = '{DiscountAmount} = ({Price}*{Quantity}*(1+{TaxRate}))@2 - {AmountTax}'; // 折扣金额=报价×数量×(1+税率)-报价×折扣×数量×(1+税率) f6 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate}) - ({Price}*{DiscountRate}*{Quantity}*(1+{TaxRate}))"; } this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); this.formulaList.unshift(f5); this.formulaList.unshift(f6); }, TaxAmountChange: function TaxAmountChange() { //税额 /* J1.标识含税: 则数量、含税单价、含税金额、税率、折扣、折扣金额、报价不变,并依次计算: 金额=含税金额-税额 单价=金额÷数量 J2.标识不含税: 则数量、单价、金额、税率、报价不变,并依次计算: 含税金额=金额+税额 含税单价=含税金额÷数量 报价不为0或不为空时: 报价含税: 折扣金额=报价×数量-含税金额 折扣=含税金额/(报价×数量); 报价不含税: //折扣金额避免尾差修改,XXdp202253738,zlj修改 2013-8-27 //折扣金额=报价×数量×(1+税率)-含税金额 //折扣=金额/(报价×数量) 折扣金额=报价×数量×(1+税率)-单价×数量×(1+税率) 折扣不变 */ var f1, f2; if (this.GetFlag()) { //金额=含税金额-税额 f1 = "{Amount} = {AmountTax} - {Tax}"; //单价=金额÷数量 f2 = "{DiscountPrice} = {Amount}/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); } else { //含税金额=金额+税额 f1 = "{AmountTax} = {Amount}+{Tax}"; //含税单价=含税金额÷数量 f2 = "{DiscountTaxPrice} = {AmountTax}/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); var ff1, ff2, ff3, ff4; ff1 = null; ff2 = null; //折扣金额=报价×数量×(1+税率)-单价×数量×(1+税率) ff3 = "{DiscountAmount} = {Price}*{Quantity}*(1+{TaxRate})-({DiscountPrice}*{Quantity}*(1+{TaxRate}))"; ff4 = null; this.CalculateDiscount(ff1, ff2, ff3, ff4); } }, CalculateFunctionWithTax: function CalculateFunctionWithTax() { //应税外加计算含税本币 /* 本币金额=本币含税金额÷(1+税率) 本币税额=本币含税金额-本币金额 本币含税单价=本币含税金额÷数量 本币单价=本币金额÷数量 报价不为0或不为空时: 报价含税:本币折扣金额=本币报价×数量-本币含税金额 折扣=本币含税金额/(本币报价×数量); 报价不含税:本币折扣金额=本币报价×数量×(1+税率)-本币含税金额 折扣=本币金额/(本币报价×数量) */ this.base(); var f1, f2, f3, f4; //金额=含税金额÷(1+税率) f1 = "{F_Amount}={F_AmountTax}/(1+{TaxRate})"; //税额=含税金额-金额 f2 = "{F_Tax} = {F_AmountTax} - {F_Amount}"; //含税单价=含税金额÷数量 f3 = "{F_DiscountTaxPrice} = {F_AmountTax}/{Quantity}"; //单价=金额÷数量 //f4 = '{F_DiscountPrice} = {F_Amount}/{Quantity}'; //单价=含税金额÷(1+税率)÷数量 f4 = "{F_DiscountPrice} = {F_AmountTax}/(1+{TaxRate})/{Quantity}"; this.formulaList.unshift(f1); this.formulaList.unshift(f2); this.formulaList.unshift(f3); this.formulaList.unshift(f4); this.CalculateFunctionDiscount(); }, CalculateFunctionDiscount: function CalculateFunctionDiscount() { var f2 = void 0; var price = this.getCellValue(this.Columns["Price"]); if (!Number(price)) return; this.ConvertFunctionalCurrency("Price", "F_Price"); /* 标志含税 报价含税 折扣金额=折扣金额=报价×数量-含税金额 报价不含税 折扣金额=报价×数量×(1+税率)-含税金额 标志不含税 报价含税 折扣金额=报价×数量-金额×(1+税率) 报价不含税 折扣金额=报价×数量×(1+税率)-金额×(1+税率) */ if (this.GetFlag()) { if (this.withTax) { f2 = "{F_DiscountAmount} = {F_Price}*{Quantity}-{F_AmountTax}"; } else { f2 = "{F_DiscountAmount} = ({F_Price}*{Quantity}*(1+{TaxRate}))-{F_AmountTax}"; } } else { if (this.withTax) { f2 = "{F_DiscountAmount} = {F_Price}*{Quantity}-{F_Amount}*(1+{TaxRate})"; } else { f2 = "{F_DiscountAmount} = ({F_Price}*{Quantity}*(1+{TaxRate}))-{F_Amount}*(1+{TaxRate})"; } } //if (this.withTax) { /* 报价含税: 折扣金额=报价×数量-含税金额 折扣=含税金额/(报价×数量); */ //折扣金额=报价×数量-含税金额 // f2 = '{F_DiscountAmount} = {F_Price}*{Quantity}-{F_AmountTax}'; //折扣=含税金额/(报价×数量) //f3 = '{DiscountRate} = {F_AmountTax}/({F_Price}*{Quantity})'; // } //else { /* 报价不含税: 折扣金额=报价×数量×(1+税率)-含税金额 折扣=金额/(报价×数量) */ //折扣金额=报价×数量×(1+税率)-含税金额 // f2 = '{F_DiscountAmount} = ({F_Price}*{Quantity}*(1+{TaxRate}))@2-{F_AmountTax}'; //折扣=金额/(报价×数量) //f3 = '{DiscountRate} = {F_Amount}/({F_Price}*{Quantity})'; // } //this.formulaList.unshift(f1); this.formulaList.unshift(f2); //this.formulaList.unshift(f3); } }); /*-----------------------------应税外含算法 end----------------------------------------------------*/ /******************************************公式工厂类 begin*******************************************************/ var FormulaFactory = { GetFormula: function GetFormula(opt) { return new FormulaExcludingTax(opt); } }; /******************************************公式工厂类 end*******************************************************/ exports.FormulaFactory = FormulaFactory; //# sourceMappingURL=priceTaxFormula.js.map