|
|
@@ -39,7 +39,34 @@ INTERFACE_EXPORT = (() => {
|
|
|
const isBidSubmission = exportKind === BID_SUBMISSION; // 是否是投标
|
|
|
const isControl = exportKind === CONTROL; // 是否是控制价
|
|
|
|
|
|
-// 节点定义------------------------------------------------------------------------------------------------------------
|
|
|
+ let serialNo;
|
|
|
+ let vTree;
|
|
|
+// ------------------------------------------------------------------------------------------------------------
|
|
|
+ // 提取字符串中的数字
|
|
|
+ function getNum(str) {
|
|
|
+ let num = str.replace(/[^0-9]/ig, "");
|
|
|
+ return num;
|
|
|
+ }
|
|
|
+
|
|
|
+ function CheckNull(Value) {
|
|
|
+ if (!Value)
|
|
|
+ return 0
|
|
|
+ else
|
|
|
+ return Value;
|
|
|
+ }
|
|
|
+
|
|
|
+ function GetRationDataType(ration){
|
|
|
+ let dt;
|
|
|
+ if (calcTools.isRationItem(ration))
|
|
|
+ dt = 3
|
|
|
+ else if (calcTools.isGljRation(ration))
|
|
|
+ dt = 1
|
|
|
+ else if (calcTools.isVolumePrice(ration))
|
|
|
+ dt = 4;
|
|
|
+ return dt;
|
|
|
+ }
|
|
|
+// ------------------------------------------------------------------------------------------------------------
|
|
|
+
|
|
|
function CreateNode(nodeName, attrArr = []) {
|
|
|
Element.call(this, nodeName, attrArr);
|
|
|
}
|
|
|
@@ -137,8 +164,188 @@ INTERFACE_EXPORT = (() => {
|
|
|
Element.call(this, '投标信息', attrs);
|
|
|
}
|
|
|
|
|
|
+ function addRationGLJs(rData, rationNode){
|
|
|
+ for (let i = 0; i < rData.rationGLJList.length; i++) {
|
|
|
+ let glj = rData.rationGLJList[i];
|
|
|
+ const attrs = [
|
|
|
+ { name: '人材机标识', value: glj.GLJID},
|
|
|
+ { name: '人材机含量', value: glj.tenderQuantity}
|
|
|
+ ];
|
|
|
+ let gljNode = new CreateNode('定额人材机含量明细', attrs);
|
|
|
+ rationNode.children.push(gljNode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function addRations(ABillItem, ABillNode){
|
|
|
+ for (let i = 0; i < ABillItem.children.length; i++) {
|
|
|
+ let r = ABillItem.children[i];
|
|
|
+ let rData = ABillItem.children[i].data;
|
|
|
+ const attrs = [
|
|
|
+ { name: '序号', value: r.row()},
|
|
|
+ { name: '定额编号', value: rData.code},
|
|
|
+ { name: '定额名称', value: rData.name},
|
|
|
+ { name: '单位', value: rData.unit},
|
|
|
+ { name: '数量', value: rData.tenderQuantity},
|
|
|
+ { name: '单价', value: rData.feesIndex && rData.feesIndex.common ? rData.feesIndex.common.tenderUnitFee : 0},
|
|
|
+ { name: '合价', value: rData.feesIndex && rData.feesIndex.common ? rData.feesIndex.common.tenderTotalFee : 0},
|
|
|
+ { name: '备注', value: ''},
|
|
|
+ { name: '数据类型', value: GetRationDataType(r)},
|
|
|
+ { name: '人工费', value: getFee(rData.fees, 'marketLabour.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ { name: '主材费', value: getFee(rData.fees, 'marketMaterial.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ { name: '辅材费', value: 0},
|
|
|
+ { name: '机械使用费', value: getFee(rData.fees, 'marketMachine.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ { name: '设备费', value: 0},
|
|
|
+ { name: '措施费1', value: getFee(rData.fees, 'measure.tenderTotalFee'), type: TYPE.DECIMAL}, // FQuery2.FieldByName('OtherDirectFee'},
|
|
|
+ { name: '措施费2', value: 0}, //getFee(r.fees, 'measure.tenderTotalFee'), type: TYPE.DECIMAL
|
|
|
+ { name: '企业管理费', value: getFee(rData.fees, 'manage.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ { name: '规费', value: getFee(rData.fees, 'force.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ { name: '利润', value: getFee(rData.fees, 'profit.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ { name: '税金', value: getFee(rData.fees, 'tax.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ ];
|
|
|
+ let rationNode = new CreateNode('定额信息表', attrs);
|
|
|
+ ABillNode.children.push(rationNode);
|
|
|
+
|
|
|
+ addRationGLJs(rData, rationNode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function recursiveAddBills(AItem, AXMLParent) {
|
|
|
+ if (AItem == undefined || !calcTools.isBill(AItem)) return;
|
|
|
+
|
|
|
+ let vBillNode;
|
|
|
+ function addBillNode () {
|
|
|
+ serialNo++;
|
|
|
+ let zmh = (AItem.parent == vTree.roots[0]) ? getNum(AItem.data.name) : AItem.data.code;
|
|
|
+ const attrs = [
|
|
|
+ {name: "序号", value: AItem.row()}, //AItem.data.ID
|
|
|
+ {name: "清单章节号", value: zmh},
|
|
|
+ {name: "子目号", value: zmh},
|
|
|
+ {name: "子目名称", value: AItem.data.name},
|
|
|
+ {name: "单位", value: AItem.data.unit},
|
|
|
+ {name: "数量", value: AItem.data.quantity, type: TYPE.DECIMAL}
|
|
|
+ ];
|
|
|
+
|
|
|
+ let dj = 0, hj = 0;
|
|
|
+ if ((isBidSubmission || isControl) || (AItem.data.specialProvisional == '专业工程')){
|
|
|
+ hj = CheckNull(AItem.data.feesIndex && AItem.data.feesIndex.common ? AItem.data.feesIndex.common.tenderTotalFee : 0);
|
|
|
+ dj = hj;
|
|
|
+ }
|
|
|
+ attrs.push({name: "单价", value: dj}, {name: "合价", value: hj});
|
|
|
+ attrs.push({name: "备注", value: isBidInvitation ? '' : AItem.data.remark});
|
|
|
+
|
|
|
+ let sjlx;
|
|
|
+ if (AItem.data.specialProvisional == '专业工程') // 专项暂定
|
|
|
+ sjlx = 21;
|
|
|
+ else {
|
|
|
+ if (calcTools.isLeafBill(AItem)) {
|
|
|
+ if (AItem.data.code == '102-3') // 安全生产费
|
|
|
+ sjlx = '22'
|
|
|
+ else if ((AItem.data.code == '-a') && (AItem.parent && (AItem.parent.data.code == '101-1'))) // 工程一切险
|
|
|
+ sjlx = '23'
|
|
|
+ else if ((AItem.data.code == '-b') && (AItem.parent && (AItem.parent.data.code == '101-1'))) // 第三者责任险
|
|
|
+ sjlx = '24'
|
|
|
+ else
|
|
|
+ sjlx = '20';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sjlx = '1'; // 父清单
|
|
|
+ attrs.find(function getE(e) {return e.name == '单位'}).value = '项';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ attrs.push({name: "数据类型", value: sjlx});
|
|
|
+
|
|
|
+ if (isBidSubmission || isControl){
|
|
|
+ attrs.push(
|
|
|
+ {name: "人工费", value: getFee(AItem.data.fees, 'marketLabour.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "主材费", value: getFee(AItem.data.fees, 'marketMaterial.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "辅材费", value: 0},
|
|
|
+ {name: "机械使用费", value: getFee(AItem.data.fees, 'marketMachine.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "设备费", value: 0},
|
|
|
+ {name: "措施费1", value: getFee(AItem.data.fees, 'measure.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "措施费2", value: 0}, // getFee(AItem.data.fees, 'measure.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "企业管理费", value: getFee(AItem.data.fees, 'manage.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "规费", value: getFee(AItem.data.fees, 'force.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "利润", value: getFee(AItem.data.fees, 'profit.tenderTotalFee'), type: TYPE.DECIMAL},
|
|
|
+ {name: "税金", value: getFee(AItem.data.fees, 'tax.tenderTotalFee'), type: TYPE.DECIMAL}
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ vBillNode = new CreateNode('工程量清单明细', attrs);
|
|
|
+ AXMLParent.children.push(vBillNode);
|
|
|
+
|
|
|
+ if (calcTools.isLeafBill(AItem))
|
|
|
+ addRations(AItem, vBillNode)
|
|
|
+ }
|
|
|
+ addBillNode();
|
|
|
+
|
|
|
+ recursiveAddBills(AItem.children[0], vBillNode);
|
|
|
+ recursiveAddBills(AItem.nextSibling, AXMLParent);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清单表
|
|
|
+ function createGCLQDB(tenderData, gongCLQDB){
|
|
|
+ vTree = tenderDetailMap[tenderData.ID].mainTree;
|
|
|
+ serialNo = 0;
|
|
|
+ recursiveAddBills(vTree.roots[0].children[0], gongCLQDB);
|
|
|
+ };
|
|
|
+
|
|
|
+ function createJiRGXXB(tenderData, jiRGXXB){
|
|
|
+ let vJRG, vKind, vChild;
|
|
|
+ let vJRGNode, vKindNode, vChildNode;
|
|
|
+
|
|
|
+ vJRG = vTree.roots.find(function getElement(e) {return e.getFlag() == fixedFlag.DAYWORK_LABOR});
|
|
|
+ let attrs = [
|
|
|
+ { name: '序号', value: vJRG.row() },
|
|
|
+ { name: '名称', value: vJRG.data.name },
|
|
|
+ { name: '数据类型', value: 0 },
|
|
|
+ { name: '合价', value: isBidInvitation ? 0 : ( vJRG.data.feesIndex && vJRG.data.feesIndex.common ? vJRG.data.feesIndex.common.tenderTotalFee : 0) },
|
|
|
+ ];
|
|
|
+ vJRGNode = new CreateNode('计日工信息标题', attrs);
|
|
|
+ jiRGXXB.children.push(vJRGNode);
|
|
|
+
|
|
|
+ function getDataType_JRG(name) {
|
|
|
+ if (name.includes('劳务'))
|
|
|
+ return 1
|
|
|
+ else if (name.includes('材料'))
|
|
|
+ return 2
|
|
|
+ else if (name.includes('机械'))
|
|
|
+ return 3
|
|
|
+ else
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (let i = 0; i < vJRG.children.length; i++) {
|
|
|
+ vKind = vJRG.children[i];
|
|
|
+ let attrs = [
|
|
|
+ { name: '序号', value: vKind.row() },
|
|
|
+ { name: '名称', value: vKind.data.name },
|
|
|
+ { name: '数据类型', value: getDataType_JRG(vKind.data.name) },
|
|
|
+ { name: '合价', value: isBidInvitation ? 0 : (vKind.data.feesIndex && vKind.data.feesIndex.common ? vKind.data.feesIndex.common.tenderTotalFee : 0) },
|
|
|
+ ];
|
|
|
+ vKindNode = new CreateNode('计日工信息标题', attrs);
|
|
|
+ jiRGXXB.children.push(vKindNode);
|
|
|
+
|
|
|
+ for (let j = 0; j < vKind.children.length; i++) {
|
|
|
+ vChild = vKind.children[j];
|
|
|
+
|
|
|
+ let attrs = [
|
|
|
+ { name: '编号', value: vChild.data.code },
|
|
|
+ { name: '名称', value: vChild.data.name },
|
|
|
+ { name: '数据类型', value: getDataType_JRG(vKind.data.name) + 3},
|
|
|
+ { name: '单位', value: vChild.data.unit },
|
|
|
+ { name: '暂定数量', value: vChild.data.quantity },
|
|
|
+ { name: '单价', value: isBidInvitation ? 0 : (vChild.data.feesIndex && vChild.data.feesIndex.common ? vChild.data.feesIndex.common.tenderUnitFee : 0) },
|
|
|
+ { name: '合价', value: isBidInvitation ? 0 : (vChild.data.feesIndex && vChild.data.feesIndex.common ? vChild.data.feesIndex.common.tenderTotalFee : 0) }
|
|
|
+ ];
|
|
|
+ vChildNode = new CreateNode('计日工信息明细', attrs);
|
|
|
+ vKindNode.children.push(vChildNode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
// 生成标段工程
|
|
|
- function CreateGLBDGC(tenderData, gongLGCSJ, gongLGCHZ, Num){
|
|
|
+ function createGLBDGC(tenderData, gongLGCSJ, gongLGCHZ, Num){
|
|
|
let attrs0 = [
|
|
|
{ name: '序号', value: Num },
|
|
|
{ name: '标段名称', value: tenderData.name },
|
|
|
@@ -154,6 +361,12 @@ INTERFACE_EXPORT = (() => {
|
|
|
const RenCJHZ = new CreateNode('人材机汇总');
|
|
|
gongLBDGC.children = [gongCLQDB, jiRGXXB, ZaoJHZB, RenCJHZ];
|
|
|
|
|
|
+ createGCLQDB(tenderData, gongCLQDB);
|
|
|
+ createJiRGXXB(tenderData, jiRGXXB);
|
|
|
+ // createZaoJHZB(tenderData, ZaoJHZB);
|
|
|
+ // createRenCJHZ(tenderData, RenCJHZ);
|
|
|
+
|
|
|
+ // 同步生成 公路工程汇总明细 数据
|
|
|
const attrs2 = [{ name: '备注', value: '' }];
|
|
|
const gongLGCHZMX = new CreateNode('公路工程汇总明细', attrs0.concat(attrs2));
|
|
|
gongLGCHZ.children.push(gongLGCHZMX);
|
|
|
@@ -183,7 +396,7 @@ INTERFACE_EXPORT = (() => {
|
|
|
let n = 0;
|
|
|
for (const tenderData of projectData.children) {
|
|
|
n++;
|
|
|
- CreateGLBDGC(tenderData, gongLGCSJ, gongLGCHZ, n);
|
|
|
+ createGLBDGC(tenderData, gongLGCSJ, gongLGCHZ, n);
|
|
|
}
|
|
|
gongLGCSJ.children.push(gongLGCSJ.children.shift());
|
|
|
|