123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- /**
- * Created by Mai on 2017/7/5.
- */
- // const rationContent = 0, rationPrice = 1, rationPriceConverse = 2, billsPrice = 3;
- // sumTotalFeeFlag: sum(child.totalFee), totalFeeFlag: bills.quantity × bills.unitFee
- // const sumTotalFeeFlag = 0, totalFeeFlag = 1;
- // rationContentUnitFeeFlag: sum(child.unitFee * child.quantity / bills.quantity)
- // averageQtyUnitFeeFlag: sum(child.totalFee/bills.quantity)
- // billsPriceUnitFeeFlag: 根据定额计算程序
- // converseUnitFeeFalg: bills.totalFee / bills.quantity
- // const rationContentUnitFeeFlag = 0, averageQtyUnitFeeFlag = 1, billsPriceUnitFeeFlag = 2, converseUnitFeeFlag = 3;
- /*let rationContentCalcFields = [
- {'type': 'common', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': totalFeeFlag},
- {'type': 'labour', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'material', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'machine', 'unitFeeFlag': rationContentUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
- ];
- let rationPriceCalcFields = [
- {'type': 'common', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': totalFeeFlag},
- {'type': 'labour', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'material', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'machine', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
- ];
- let rationPriceConverseCalcFields = [
- {'type': 'common', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'labour', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'material', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'machine', 'unitFeeFlag': averageQtyUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
- ];
- let billsPriceCalcFields = [
- {'type': 'common', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': totalFeeFlag},
- {'type': 'labour', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'material', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag},
- {'type': 'machine', 'unitFeeFlag': billsPriceUnitFeeFlag, 'totalFeeFlag': sumTotalFeeFlag}
- ];*/
- /*let nodeCalcObj = {
- node: null,
- digit: 2,
- field: null,
- getFee: calcFees.getFee,
- sumTotalFee: function() {
- let result = 0, child;
- for (child of this.node.children) {
- let value = this.getFee(child.data, this.field.totalFee);
- if (Object.prototype.toString.apply(value) === "[object String]") {
- value = parseFloat(value);
- }
- result += value;
- }
- return result;
- },
- averageQty: function() {
- let result = 0, child, qty;
- result = this.sumTotalFee(this.field);
- qty = this.getFee(this.node.data, 'quantity');
- if (Object.prototype.toString.apply(qty) === "[object String]") {
- qty = parseFloat(qty);
- }
- if (qty !== 0) {
- result = result / qty;
- }
- return result;
- },
- totalFee: function () {
- return this.getFee(this.node.data, this.field.unitFee) * this.getFee(this.node.data, 'quantity');
- },
- rationContentUnitFee: function () {
- let result = 0, child, qty = this.getFee(this.node.data, 'quantity');
- if (Object.prototype.toString.apply(qty) === "[object String]") {
- qty = parseFloat(qty);
- }
- if (qty === 0) {
- qty = 1;
- }
- for (child of this.node.children) {
- let childUnitFee = this.getFee(child.data, this.field.unitFee);
- if (Object.prototype.toString.apply(childUnitFee) === "[object String]") {
- childUnitFee = parseFloat(childUnitFee);
- }
- let childQuantity = this.getFee(child.data, 'quantity');
- if (Object.prototype.toString.apply(childQuantity) === "[object String]") {
- childQuantity = parseFloat(childQuantity);
- }
- result += (childUnitFee * childQuantity / qty).toDecimal(this.digit);
- }
- return result;
- },
- converseUnitFee: function (digit) {
- let totalFee = this.sumTotalFee().toDecimal(digit);
- let qty = this.getFee(this.node.data, 'quantity');
- if (qty !== 0){
- return totalFee / qty;
- } else {
- return 0;
- }
- }
- };*/
- /*let baseCalcField = [
- {
- ID: 1,
- // 序号
- serialNo: '一',
- // 费用代号
- code: "A",
- // 名称
- name: "定额直接费",
- // 计算基数
- dispExpr: "A1+A2+A3",
- // 基数说明
- statement: "人工费+材料费+机械费",
- // 费率
- feeRate: null,
- // 费用类别
- type: 'RationDirect',
- // 备注
- memo: ''
- }, {
- ID: 2,
- // 序号
- serialNo: '1',
- // 费用代号
- code: "A1",
- // 名称
- name: "人工费",
- // 计算基数
- dispExpr: "H_J",
- // 基数说明
- statement: "合计",
- // 费率
- feeRate: 0,
- // 费用类别
- type: 'labour',
- // 备注
- memo: ''
- }, {
- ID: 3,
- // 序号
- serialNo: '2',
- // 费用代号
- code: "A2",
- // 名称
- name: "材料费",
- // 计算基数
- dispExpr: "H_J",
- // 基数说明
- statement: "合计",
- // 费率
- feeRate: 100,
- // 费用类别
- type: 'material',
- // 备注
- memo: ''
- }, {
- ID: 4,
- // 序号
- serialNo: '3',
- // 费用代号
- code: "A3",
- // 名称
- name: "机械费",
- // 计算基数
- dispExpr: "H_J",
- // 基数说明
- statement: "合计",
- // 费率
- feeRate: 0,
- // 费用类别
- type: 'machine',
- // 备注
- memo: ''
- }, {
- ID: 5,
- // 序号
- serialNo: '二',
- // 费用代号
- code: "A4",
- // 名称
- name: "管理费",
- // 计算基数
- dispExpr: "A",
- // 基数说明
- statement: "定额直接费",
- // 费率
- feeRate: 0,
- // 费用类别
- type: 'management',
- // 备注
- memo: ''
- }, {
- ID: 6,
- // 序号
- serialNo: '三',
- // 费用代号
- code: "B",
- // 名称
- name: "利润",
- // 计算基数
- dispExpr: "A",
- // 基数说明
- statement: "定额直接费",
- // 费率
- feeRate: 0,
- // 费用类别
- type: 'profit',
- // 备注
- memo: ''
- }, {
- ID: 7,
- // 序号
- serialNo: '四',
- // 费用代号
- code: "C",
- // 名称
- name: "风险费用",
- // 计算基数
- dispExpr: "",
- // 基数说明
- statement: "",
- // 费率
- feeRate: null,
- // 费用类别
- type: 'risk',
- // 备注
- memo: ''
- }, {
- ID: 8,
- // 序号
- serialNo: '',
- // 费用代号
- code: "",
- // 名称
- name: "综合单价",
- // 计算基数
- dispExpr: "A+B",
- // 基数说明
- statement: "定额直接费+利润",
- // 费率
- feeRate: NaN,
- // 费用类别
- type: 'common',
- // 备注
- memo: ''
- }
- ];*/
- /*class BillsCalcHelper {
- constructor (project, calcFlag) {
- this.project = project;
- this.InitFields(project.calcFields);
- };
- getBillsGLjs (node) {
- let rations = this.project.Ration.getBillsSortRation(node.source.getID());
- let gljs = this.project.ration_glj.getGatherGljArrByRations(rations);
- for (let glj of gljs) {
- glj.quantity = (glj.quantity / calcFees.getFee(node.data, 'quantity')).toDecimal(4);
- }
- return gljs;
- };
- calcRationLeaf (node, fields, isIncre) {
- nodeCalcObj.node = node;
- nodeCalcObj.digit = this.project.Decimal.common.unitFee;
- calcFees.checkFields(node.data, fields);
- let nodeCalc = nodeCalcObj, virData= null, decimal = this.project.Decimal;
- // 清单单价:套用定额计算程序
- // if (this.project.projSetting.billsCalcMode === billsPrice) {
- /!* if (this.project.property.billsCalcMode === leafBillGetFeeType.billsPrice) {
- rationCalcObj.calcGljs = this.getBillsGLjs(node);
- console.log(rationCalcObj.calcGljs);
- rationCalcObj.calcFields = rationCalcFields;
- virData = rationCalcObj.calculate();
- }*!/
- for (let field of fields) {
- nodeCalcObj.field = field;
- switch (field.unitFeeFlag) {
- case rationContentUnitFeeFlag:
- node.data.feesIndex[field.type].unitFee = nodeCalcObj.rationContentUnitFee().toDecimal(decimal.common.unitFee);
- break;
- case averageQtyUnitFeeFlag:
- node.data.feesIndex[field.type].unitFee = nodeCalcObj.averageQty().toDecimal(decimal.common.unitFee);
- break;
- case billsPriceUnitFeeFlag:
- node.data.feesIndex[field.type].unitFee = virData[field.type];
- break;
- case converseUnitFeeFlag:
- node.data.feesIndex[field.type].unitFee = nodeCalcObj.converseUnitFee(decimal.common.totalFee).toDecimal(decimal.common.unitFee);
- break;
- default:
- node.data.feesIndex[field.type].unitFee = 0;
- }
- let value = 0;
- switch (field.totalFeeFlag) {
- case sumTotalFeeFlag:
- value = nodeCalcObj.sumTotalFee().toDecimal(decimal.common.totalFee);
- break;
- case totalFeeFlag:
- value = nodeCalcObj.totalFee().toDecimal(decimal.common.totalFee);
- break;
- default:
- value = 0;
- }
- this.setTotalFee(node, field, value, isIncre);
- }
- };
- calcVolumePriceLeaf (node, fields, isIncre) {
- let total = 0;
- for (let child of node.children) {
- total += calcFees.getFee(child.data, 'feesIndex.common.totalFee');
- }
- };
- calcParent (node, fields, isIncre) {
- nodeCalcObj.node = node;
- calcFees.checkFields(node.data, fields);
- for (let field of fields) {
- nodeCalcObj.field = field;
- let value = nodeCalcObj.sumTotalFee().toDecimal(this.project.Decimal.common.totalFee);
- this.setTotalFee(node, field, value, isIncre);
- }
- };
- clearFeeFields(node, fields, isIncre) {
- for (let field of fields) {
- node.data.feesIndex[field.type].unitFee = 0;
- this.setTotalFee(node, field, 0, isIncre);
- }
- }
- calcNode(node, isIncre) {
- if (node.source.children.length > 0) {
- this.calcParent(node, this.project.calcFields, isIncre);
- } else {
- if (node.children.length > 0) {
- if (node.firstChild().sourceType === this.project.Ration.getSourceType()) {
- this.calcRationLeaf(node, this.project.calcFields, isIncre);
- } else {
- this.calcVolumePriceLeaf(node, this.project.calcFields, isIncre);
- }
- } else {
- this.clearFeeFields(node, this.project.calcFields, isIncre);
- }
- }
- };
- calcNodes (nodes) {
- for (let node of nodes) {
- if (node.sourceType !== this.project.Bills.getSourceType()) {
- return;
- }
- if (node.source.children.length > 0) {
- this.calcNodes(node.children);
- }
- this.calcNode(node);
- }
- };
- updateParent (parent, field, Incre) {
- if (parent && parent.sourceType === this.project.Bills.getSourceType()) {
- calcFees.checkFields(parent.data, [field]);
- parent.data.feesIndex[field.type].totalFee = (parent.data.feesIndex[field.type].totalFee + Incre).toDecimal(this.project.Decimal.common.totalFee);
- parent.data.feesIndex[field.type].unitFee = 0; // AAAAA 临时补上,使存储 unitFee.toFixed(2) 时不出错
- this.updateParent(parent.parent, field, Incre);
- }
- };
- setTotalFee (node, field, value, isIncre) {
- if (isIncre) {
- let incre = value - node.data.feesIndex[field.type].totalFee;
- node.data.feesIndex[field.type].totalFee = value;
- node.data.feesIndex[field.type].unitFee = 0; // AAAAA 临时补上,使存储 unitFee.toFixed(2) 时不出错
- this.updateParent(node.parent, field, incre);
- } else {
- node.data.feesIndex[field.type].totalFee = value;
- node.data.feesIndex[field.type].unitFee = 0; // AAAAA 临时补上,使存储 unitFee.toFixed(2) 时不出错
- }
- };
- converseCalc (node) {
- if (node && node.sourceType === this.project.Bills.getSourceType()) {
- this.calcNode(node);
- this.converseCalc(node.parent);
- }
- };
- calcAll () {
- this.calcNodes(this.project.mainTree.roots);
- };
- InitFields (fields) {
- for (let field of fields) {
- if (field.unitFee) return;
- field.unitFee = 'feesIndex.' + field.type + '.unitFee';
- field.unitFeeSplit = field.unitFee.split('.');
- field.totalFee = 'feesIndex.' + field.type + '.totalFee';
- field.totalFeeSplit = field.totalFee.split('.');
- field.tenderUnitFee = 'feesIndex.'+ field.type + '.tenderUnitFee';
- field.tenderUnitFeeSplit = field.tenderUnitFee.split('.');
- field.tenderTotalFee = 'feesIndex.' + field.type + '.tenderTotalFee';
- field.tenderTotalFeeSplit = field.tenderTotalFee.split('.');
- }
- };
- }*/
|