|
|
@@ -294,6 +294,7 @@ let calcTools = {
|
|
|
machineDetailFee: function (treeNode, gljArr, masterTypeFilter, detailType, isTender) {
|
|
|
if (!gljArr) return 0;
|
|
|
let result = 0;
|
|
|
+ let nodeQ = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 0;
|
|
|
for (let glj of gljArr) {
|
|
|
if (baseMachineMasterTypes.includes(glj.type)){
|
|
|
// 机型不符
|
|
|
@@ -318,7 +319,7 @@ let calcTools = {
|
|
|
mdSum = (mdSum).toDecimal(decimalObj.glj.unitPriceHasMix);
|
|
|
}
|
|
|
}
|
|
|
- result = (result + (gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process)
|
|
|
+ result = (result + (nodeQ * gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process)
|
|
|
}
|
|
|
}
|
|
|
result = (result).toDecimal(decimalObj.ration.totalPrice);
|
|
|
@@ -467,13 +468,16 @@ let calcTools = {
|
|
|
let rcj = (treeNode.data.subType === gljType.LABOUR && calcTools.inBase(baseName, 'RGF')) ||
|
|
|
(baseMaterialTypes.includes(treeNode.data.subType) && calcTools.inBase(baseName, 'CLF')) ||
|
|
|
(treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'JXF')) ||
|
|
|
+ (treeNode.data.subType === gljType.EQUIPMENT && calcTools.inBase(baseName, 'SBF')) ||
|
|
|
+
|
|
|
(treeNode.data.subType === gljType.LABOUR && calcTools.inBase(baseName, 'SC_RGF')) ||
|
|
|
(baseMaterialTypes.includes(treeNode.data.subType) && calcTools.inBase(baseName, 'SC_CLF')) ||
|
|
|
- (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'SC_JXF'));
|
|
|
+ (treeNode.data.subType === gljType.GENERAL_MACHINE && calcTools.inBase(baseName, 'SC_JXF')) ||
|
|
|
+ (treeNode.data.subType === gljType.EQUIPMENT && calcTools.inBase(baseName, 'SC_SBF'));
|
|
|
|
|
|
if (rcj ||
|
|
|
- (treeNode.data.subType === gljType.MAIN_MATERIAL && calcTools.inBase(baseName, 'ZCF')) ||
|
|
|
- (treeNode.data.subType === gljType.EQUIPMENT && calcTools.inBase(baseName, 'SBF'))) {
|
|
|
+ (treeNode.data.subType === gljType.MAIN_MATERIAL && calcTools.inBase(baseName, 'ZCF'))
|
|
|
+ ) {
|
|
|
if (treeNode.data.type == rationType.volumePrice){
|
|
|
let nodeQ = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 0;
|
|
|
result = treeNode.data.marketUnitFee ? (parseFloat(treeNode.data.marketUnitFee) * nodeQ).toDecimal(decimalObj.ration.unitPrice) : 0
|
|
|
@@ -827,7 +831,7 @@ let rationCalcBasesNameKinds = {
|
|
|
JXF: ['定额基价机械费', '定额机械费', '定额施工机具使用费', '定额施工机械使用费'],
|
|
|
JSRGF: ['定额基价机上人工费', '定额施工机械人工费'],
|
|
|
ZCF: ['主材费', '市场价主材费'],
|
|
|
- SBF: ['设备费', '市场价设备费'],
|
|
|
+ SBF: ['定额设备费'],
|
|
|
RGGR: ['人工工日'],
|
|
|
ZGCLF: ['暂估材料费'],
|
|
|
|
|
|
@@ -836,6 +840,7 @@ let rationCalcBasesNameKinds = {
|
|
|
SC_CLF: ['材料费'],
|
|
|
SC_JXF: ['机械费', '施工机具使用费', '施工机械使用费'],
|
|
|
SC_JSRGF: ['施工机械人工费'],
|
|
|
+ SC_SBF: ['设备费', '市场价设备费', '设备购置费'],
|
|
|
|
|
|
JC_RGF: ['人工费价差'],
|
|
|
JC_CLF: ['材料费价差'],
|
|
|
@@ -876,8 +881,14 @@ let rationCalcBases = {
|
|
|
'施工机械人工费': function (node, isTender) {
|
|
|
return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.MACHINE_LABOUR, isTender);
|
|
|
},
|
|
|
- '商品砼费': function (node, isTender) {
|
|
|
- return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptMarketPrice, isTender);
|
|
|
+ '定额商品砼费': function (node, isTender) {
|
|
|
+ return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptBasePrice, isTender);
|
|
|
+ },
|
|
|
+ '定额外购砼构件费': function (node, isTender) {
|
|
|
+ return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptBasePrice, isTender);
|
|
|
+ },
|
|
|
+ '定额绿化苗木费': function (node, isTender) {
|
|
|
+ return calcTools.rationBaseFee(node, [gljType.GREEN_SEEDLING], priceTypes.ptBasePrice, isTender);
|
|
|
},
|
|
|
'设备购置费': function (node, isTender) {
|
|
|
return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender);
|
|
|
@@ -1570,26 +1581,26 @@ class CalcProgram {
|
|
|
fieldNameArr 值取自:遍历treeNode的计算规则,取有绑定的字段名。这些字段名以外的fee是因旧计算多出来的,需要删除。 */
|
|
|
function deleteUselessFees(treeNode, fieldNameArr){
|
|
|
if (fieldNameArr){ // 用于计算程序没有绑定的费用类别,不要同步到清单,而清单因为以前计算过该类别又有值,需删除。如切换取费类别,旧费要清掉。
|
|
|
- for (var i = 0; i < treeNode.data.fees.length; i++) {
|
|
|
- let fee = treeNode.data.fees[i];
|
|
|
- if ((fee.fieldName != 'estimate') && !fieldNameArr.includes(fee.fieldName)){
|
|
|
- treeNode.data.fees.splice(i, 1);
|
|
|
- delete treeNode.data.feesIndex[fee.fieldName];
|
|
|
+ treeNode.data.fees = _.filter(treeNode.data.fees, function (item) {
|
|
|
+ if(!fieldNameArr.includes(item.fieldName)){
|
|
|
+ delete treeNode.data.feesIndex[item.fieldName];
|
|
|
treeNode.changed = true;
|
|
|
+ return false;
|
|
|
}
|
|
|
- }
|
|
|
+ return true;
|
|
|
+ });
|
|
|
}
|
|
|
else{ // 总造价清单只留common, estimate两个费用类别。其它公式清单只留common。
|
|
|
let reserveArr = calcTools.isTotalCostBill(treeNode)? ['common', 'estimate']:['common'];
|
|
|
if (treeNode.data.fees && treeNode.data.fees.length > 0){
|
|
|
- let feesArr = treeNode.data.fees;
|
|
|
- for (let i = 0; i < feesArr.length; i++) {
|
|
|
- if (!reserveArr.includes(feesArr[i].fieldName)) {
|
|
|
- delete treeNode.data.feesIndex[feesArr[i].fieldName];
|
|
|
- feesArr.splice(i, 1);
|
|
|
+ treeNode.data.fees = _.filter(treeNode.data.fees, function (item) {
|
|
|
+ if(!reserveArr.includes(item.fieldName)){
|
|
|
+ delete treeNode.data.feesIndex[item.fieldName];
|
|
|
treeNode.changed = true;
|
|
|
+ return false;
|
|
|
}
|
|
|
- }
|
|
|
+ return true;
|
|
|
+ });
|
|
|
};
|
|
|
};
|
|
|
};
|