sichuan_2021.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. /**
  2. * Created by CSL on 2021/08/19. 四川养护(2021)。
  3. */
  4. let isSC2021 = true;
  5. function overwriteRationCalcBases() {
  6. if (typeof rationCalcBases == 'undefined') return;
  7. for (let key in rationCalcBases) delete rationCalcBases[key];
  8. rationCalcBases['人工费'] = function (node, isTender) {
  9. return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptMarketPrice, isTender);
  10. };
  11. rationCalcBases['材料费'] = function (node, isTender) {
  12. return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptMarketPrice, isTender);
  13. };
  14. rationCalcBases['施工机械使用费'] = function (node, isTender) {
  15. return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptMarketPrice, isTender);
  16. };
  17. rationCalcBases['施工机械人工费'] = function (node, isTender) {
  18. return calcTools.machineDetailFee(node, node.data.gljList, [], gljType.MACHINE_LABOUR, isTender);
  19. };
  20. rationCalcBases['设备购置费'] = function (node, isTender) {
  21. return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptMarketPrice, isTender);
  22. };
  23. rationCalcBases['定额人工费'] = function (node, isTender) {
  24. return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
  25. };
  26. rationCalcBases['定额材料费'] = function (node, isTender) {
  27. return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender);
  28. };
  29. rationCalcBases['定额施工机械使用费'] = function (node, isTender) {
  30. return calcTools.rationBaseFee(node, baseMachineTypes, priceTypes.ptBasePrice, isTender);
  31. };
  32. rationCalcBases['定额商品砼费'] = function (node, isTender) {
  33. return calcTools.rationBaseFee(node, [gljType.COMMERCIAL_CONCRETE, gljType.COMMERCIAL_MORTAR], priceTypes.ptBasePrice, isTender);
  34. };
  35. rationCalcBases['定额设备购置费'] = function (node, isTender) {
  36. return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender);
  37. };
  38. rationCalcBases['定额外购砼构件费'] = function (node, isTender) {
  39. return calcTools.rationBaseFee(node, [gljType.PURCHASE_COMPONENT], priceTypes.ptBasePrice, isTender);
  40. };
  41. rationCalcBases['定额绿化苗木费'] = function (node, isTender) {
  42. return calcTools.rationBaseFee(node, [gljType.GREEN_SEEDLING], priceTypes.ptBasePrice, isTender);
  43. };
  44. };
  45. (function overwriteFeeTypes() {
  46. if (typeof cpFeeTypes == 'undefined') return;
  47. cpFeeTypes = [
  48. { type: 'marketDirect', name: '直接费' },
  49. { type: 'marketLabour', name: '人工费' },
  50. { type: 'marketMaterial', name: '材料费' },
  51. { type: 'marketMachine', name: '施工机械使用费' },
  52. { type: 'marketMachineLabour', name: '施工机械人工费' },
  53. { type: 'marketEquipment', name: '设备购置费' },
  54. { type: 'labour', name: '定额人工费' },
  55. { type: 'material', name: '定额材料费' },
  56. { type: 'machine', name: '定额施工机械使用费' },
  57. { type: 'equipment', name: '定额设备购置费' },
  58. { type: 'direct', name: '定额直接费' },
  59. { type: 'measure', name: '措施费' },
  60. { type: 'manage', name: '企业管理费' },
  61. { type: 'force', name: '规费' },
  62. { type: 'profit', name: '利润' },
  63. { type: 'tax', name: '税金' },
  64. { type: 'common', name: '建安费' },
  65. { type: 'rationCommon', name: '定额建安费' }
  66. ];
  67. })();
  68. // 清单基数
  69. const progression = [
  70. '施工场地建设费', '养护管理单位项目管理费', '养护项目信息化费', '工程监理费', '设计文件审查费(一阶段)', '设计文件审查费(二阶段)',
  71. '采用一阶段设计的工程设计费、招标费', '采用二阶段设计的工程设计费、招标费', '独立立项进行维修、加固的桥梁工程设计费、招标费',
  72. '独立立项进行维修、加固的隧道工程设计费、招标费', '独立立项进行维修、加固的机电工程设计费、招标费'
  73. ];
  74. const deficiency = {
  75. '设计文件审查费(一阶段)': 2000, '设计文件审查费(二阶段)': 2000, '采用一阶段设计的工程设计费、招标费': 5000, '采用二阶段设计的工程设计费、招标费': 5000,
  76. '独立立项进行维修、加固的桥梁工程设计费、招标费': 5000, '独立立项进行维修、加固的隧道工程设计费、招标费': 5000, '独立立项进行维修、加固的机电工程设计费、招标费': 5000
  77. };
  78. if (typeof baseFigureMap !== 'undefined') {
  79. const { fixedFlag } = commonConstants;
  80. const budgetMap = {
  81. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
  82. '建筑安装工程费': {
  83. base: 'JZAZGCF',
  84. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  85. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  86. pick: false,
  87. },
  88. // 显示:仅清单固定类别是“安全生产费”可显示。
  89. '建筑安装工程费(不含安全生产费)': {
  90. base: 'JZAZGCFBHSC',
  91. fixedFlag: null,
  92. filter: [fixedFlag.SAFE_COST],
  93. pick: true
  94. },
  95. // 显示:仅清单固定类别是“施工环保费”可显示。
  96. '建筑安装工程费(不含施工环保费)': {
  97. base: 'JZAZGCFBHSGHBF',
  98. fixedFlag: null,
  99. filter: [fixedFlag.CONSTRUCTION_ENVIROMENTAL_PROTECTION_FEE],
  100. pick: true
  101. },
  102. // 显示:除“建筑安装工程费”以外部分可显示
  103. '建筑安装工程费(不含设备费)': {
  104. base: 'JZAZGCFBHSB',
  105. fixedFlag: null,
  106. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  107. pick: false,
  108. },
  109. // 显示:除清单固定类别是“建筑安装工程费”的以外部分可显示。
  110. '定额建筑安装工程费': {
  111. base: 'DEJZAZGCF',
  112. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  113. filter: [fixedFlag.CONSTRUCTION_INSTALL_FEE],
  114. pick: false
  115. },
  116. // 显示:仅清单固定类别是“专项费用”可显示。
  117. '定额建筑安装工程费(不含专项费用)': {
  118. base: 'DEJZAZGCFBHZXFY',
  119. fixedFlag: fixedFlag.CONSTRUCTION_INSTALL_FEE,
  120. filter: [fixedFlag.SPECIAL_COST],
  121. pick: true,
  122. },
  123. // 显示:仅清单固定类别是“专项费用”可显示
  124. '施工场地建设费': {
  125. isProgressive: true,
  126. base: 'SGCDJSF',
  127. fixedFlag: null,
  128. filter: [fixedFlag.SPECIAL_COST],
  129. pick: true,
  130. },
  131. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  132. '养护管理单位项目管理费': {
  133. isProgressive: true,
  134. base: 'YHDWGLF',
  135. fixedFlag: null,
  136. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  137. pick: true,
  138. },
  139. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  140. '养护项目信息化费': {
  141. isProgressive: true,
  142. base: 'YHXMXXHF',
  143. fixedFlag: null,
  144. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  145. pick: true,
  146. },
  147. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  148. '工程监理费': {
  149. isProgressive: true,
  150. base: 'GCJLF',
  151. fixedFlag: null,
  152. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  153. pick: true,
  154. },
  155. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  156. '设计文件审查费(一阶段)': {
  157. isProgressive: true,
  158. deficiency: 2000,
  159. base: 'SJWJSCFYJD',
  160. fixedFlag: null,
  161. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  162. pick: true,
  163. },
  164. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  165. '设计文件审查费(二阶段)': {
  166. isProgressive: true,
  167. deficiency: 2000,
  168. base: 'SJWJSCFEJD',
  169. fixedFlag: null,
  170. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  171. pick: true,
  172. },
  173. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  174. '采用一阶段设计的工程设计费、招标费': {
  175. isProgressive: true,
  176. deficiency: 5000,
  177. base: 'CYYJDSJDGCSJFZBF',
  178. fixedFlag: null,
  179. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  180. pick: true,
  181. },
  182. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  183. '采用二阶段设计的工程设计费、招标费': {
  184. isProgressive: true,
  185. deficiency: 5000,
  186. base: 'CYEJDSJDGCSJFZBF',
  187. fixedFlag: null,
  188. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  189. pick: true,
  190. },
  191. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  192. '独立立项进行维修、加固的桥梁工程设计费、招标费': {
  193. isProgressive: true,
  194. deficiency: 5000,
  195. base: 'DLLXJXWXJGDQLGCSJFZBF',
  196. fixedFlag: null,
  197. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  198. pick: true,
  199. },
  200. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  201. '独立立项进行维修、加固的隧道工程设计费、招标费': {
  202. isProgressive: true,
  203. deficiency: 5000,
  204. base: 'DLLXJXWXJGDSDGCSJFZBF',
  205. fixedFlag: null,
  206. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  207. pick: true,
  208. },
  209. // 显示:仅清单固定类别是“养护工程其他费用”部分可显示。
  210. '独立立项进行维修、加固的机电工程设计费、招标费': {
  211. isProgressive: true,
  212. deficiency: 5000,
  213. base: 'DLLXJXWXJGDJDGCSJFZBF',
  214. fixedFlag: null,
  215. filter: [fixedFlag.MAINTENANCE_EXPENSES],
  216. pick: true,
  217. },
  218. // 显示:仅“价差预备费”可显示
  219. '价差预备费': {
  220. base: 'JCYBF',
  221. fixedFlag: null,
  222. filter: [fixedFlag.SPREAD_BUDGET_FEE],
  223. pick: true,
  224. },
  225. };
  226. const boqMap = {
  227. //仅允许用于固定类别是“第100章至700章清单”以外的清单
  228. '各章清单合计': {
  229. base: 'GZQDHJ',
  230. fixedFlag: fixedFlag.ONE_SEVEN_BILLS,
  231. filter: [fixedFlag.ONE_SEVEN_BILLS],
  232. pick: false
  233. },
  234. //仅允许用于固定类别是“第100章至700章清单”以外的清单
  235. '专项暂定合计': {
  236. base: 'ZXZDHJ',
  237. fixedFlag: null,
  238. filter: [fixedFlag.ONE_SEVEN_BILLS],
  239. pick: false
  240. },
  241. /*
  242. * 清单固定行[第100章至700章清单]下的[第100章清单]需要允许清单可使用基数{100章以外合计}
  243. * 因此{100章以外合计}不设置关联的清单固定行
  244. * */
  245. //仅允许用于固定类别为“100章清单”引用
  246. '100章以外清单合计': {
  247. base: 'YBZYHQDHJ',
  248. fixedFlag: null,
  249. filter: [fixedFlag.ONE_HUNDRED_BILLS],
  250. pick: true
  251. }
  252. };
  253. baseFigureMap.budget = budgetMap;
  254. baseFigureMap.boq = boqMap;
  255. }
  256. if (typeof baseFigureTemplate !== 'undefined') {
  257. const { fixedFlag } = commonConstants;
  258. baseFigureTemplate.budget = {
  259. // 建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的金额。
  260. JZAZGCF(tender) {
  261. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'common');
  262. },
  263. // 建筑安装工程费(不含安全生产费) 算法:取清单固定类别是“建筑安装工程费”的金额,扣除“安全生产费”的金额。
  264. JZAZGCFBHSC(tender) {
  265. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SAFE_COST], tender, 'common');
  266. },
  267. // 建筑安装工程费(不含施工环保费)算法:取清单固定类别是“建筑安装工程费”的金额,扣除“施工环保费”行的金额。
  268. JZAZGCFBHSGHBF(tender) {
  269. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.CONSTRUCTION_ENVIROMENTAL_PROTECTION_FEE], tender, 'common');
  270. },
  271. // 建筑安装工程费(不含设备费) 算法:取清单固定类别是“建筑安装工程费”的金额,扣除设备的金额。
  272. JZAZGCFBHSB(tender) {
  273. const baseFee = this['JZAZGCF'](tender);
  274. const fixedNode = projectObj.project.mainTree.roots.find(node => node.getFlag() === fixedFlag.CONSTRUCTION_INSTALL_FEE);
  275. const equipmentFee = cbTools.getEquipmentFee(fixedNode, tender);
  276. return (baseFee - equipmentFee).toDecimal(decimalObj.bills.totalPrice);
  277. },
  278. // 定额建筑安装工程费 算法:取清单固定类别是“建筑安装工程费”的定额建安费。
  279. DEJZAZGCF(tender) {
  280. return cbTools.getBaseFee(fixedFlag.CONSTRUCTION_INSTALL_FEE, tender, 'rationCommon');
  281. },
  282. // 定额建筑安装工程费(不含专项费) 算法:取清单固定类别是“建筑安装工程费”的“定额建安费”,扣除“专项费用”的“定额建安费”。
  283. DEJZAZGCFBHZXFY(tender) {
  284. //建安费扣除设备费
  285. return cbTools.getFeeWithDeduction(fixedFlag.CONSTRUCTION_INSTALL_FEE, [fixedFlag.SPECIAL_COST], tender, 'rationCommon');
  286. },
  287. // 施工场地建设费 算法:以{定额建筑安装工程费(不含专项费用) }为基数,采用累进办法计算。
  288. SGCDJSF(tender) {
  289. const baseFee = this['DEJZAZGCFBHZXFY'](tender);
  290. if (!tender) {
  291. calcBase.baseProgressiveFee = baseFee;
  292. }
  293. return calculateUtil.getProgressiveFee(baseFee, '施工场地建设费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  294. },
  295. // 养护管理单位项目管理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
  296. YHDWGLF(tender) {
  297. const baseFee = this['DEJZAZGCF'](tender);
  298. if (!tender) {
  299. calcBase.baseProgressiveFee = baseFee;
  300. }
  301. return calculateUtil.getProgressiveFee(baseFee, '养护管理单位项目管理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  302. },
  303. // 养护项目信息化费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
  304. YHXMXXHF(tender) {
  305. const baseFee = this['DEJZAZGCF'](tender);
  306. if (!tender) {
  307. calcBase.baseProgressiveFee = baseFee;
  308. }
  309. return calculateUtil.getProgressiveFee(baseFee, '养护项目信息化费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  310. },
  311. // 工程监理费 算法:以{定额建筑安装工程费}为基数,采用累进办法计算。
  312. GCJLF(tender) {
  313. const baseFee = this['DEJZAZGCF'](tender);
  314. if (!tender) {
  315. calcBase.baseProgressiveFee = baseFee;
  316. }
  317. return calculateUtil.getProgressiveFee(baseFee, '工程监理费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  318. },
  319. // 设计文件审查费(一阶段) 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
  320. SJWJSCFYJD(tender) {
  321. const baseFee = this['DEJZAZGCF'](tender);
  322. if (!tender) {
  323. calcBase.baseProgressiveFee = baseFee;
  324. }
  325. return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费(一阶段)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  326. },
  327. // 设计文件审查费(二阶段) 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
  328. SJWJSCFEJD(tender) {
  329. const baseFee = this['DEJZAZGCF'](tender);
  330. if (!tender) {
  331. calcBase.baseProgressiveFee = baseFee;
  332. }
  333. return calculateUtil.getProgressiveFee(baseFee, '设计文件审查费(二阶段)', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  334. },
  335. // 采用一阶段设计的工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
  336. CYYJDSJDGCSJFZBF(tender) {
  337. const baseFee = this['DEJZAZGCF'](tender);
  338. if (!tender) {
  339. calcBase.baseProgressiveFee = baseFee;
  340. }
  341. return calculateUtil.getProgressiveFee(baseFee, '采用一阶段设计的工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  342. },
  343. // 采用二阶段设计的工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
  344. CYEJDSJDGCSJFZBF(tender) {
  345. const baseFee = this['DEJZAZGCF'](tender);
  346. if (!tender) {
  347. calcBase.baseProgressiveFee = baseFee;
  348. }
  349. return calculateUtil.getProgressiveFee(baseFee, '采用二阶段设计的工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  350. },
  351. // 独立立项进行维修、加固的桥梁工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
  352. DLLXJXWXJGDQLGCSJFZBF(tender) {
  353. const baseFee = this['DEJZAZGCF'](tender);
  354. if (!tender) {
  355. calcBase.baseProgressiveFee = baseFee;
  356. }
  357. return calculateUtil.getProgressiveFee(baseFee, '独立立项进行维修、加固的桥梁工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  358. },
  359. // 独立立项进行维修、加固的隧道工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
  360. DLLXJXWXJGDSDGCSJFZBF(tender) {
  361. const baseFee = this['DEJZAZGCF'](tender);
  362. if (!tender) {
  363. calcBase.baseProgressiveFee = baseFee;
  364. }
  365. return calculateUtil.getProgressiveFee(baseFee, '独立立项进行维修、加固的隧道工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  366. },
  367. // 独立立项进行维修、加固的机电工程设计费、招标费 算法:以{定额建筑安装工程费 }为基数,采用累进办法计算。
  368. DLLXJXWXJGDJDGCSJFZBF(tender) {
  369. const baseFee = this['DEJZAZGCF'](tender);
  370. if (!tender) {
  371. calcBase.baseProgressiveFee = baseFee;
  372. }
  373. return calculateUtil.getProgressiveFee(baseFee, '独立立项进行维修、加固的机电工程设计费、招标费', projectObj.project.property.progressiveInterval, decimalObj.bills.totalPrice, deficiency);
  374. },
  375. /* 价差预备费 算法:以建筑安装工程费为基数,按设计文件编制年始至养护项目工程竣工年终的年数和年工程造价增涨率计算。
  376. 价差预备费 P * [(1+i)^(n-1) -1]
  377. P——建筑安装工程费总额(元);
  378. i——年工程造价增涨率(%);
  379. n——设计文件编制年至养护项目开工年+养护项目建设期限(年)。
  380. */
  381. JCYBF(tender) {
  382. //建筑安装工程费作为基数
  383. const installFee = this['JZAZGCF'](tender);
  384. //年造价增涨
  385. const costGrowthRate = calcBase.project.property.costGrowthRate
  386. ? calcBase.project.property.costGrowthRate
  387. : 0;
  388. //增涨计费年限
  389. const growthPeriod = projectObj.project.property.growthPeriod
  390. ? calcBase.project.property.growthPeriod
  391. : 0;
  392. //= P * [(1+i)^(n-1) -1]
  393. return (installFee * (Math.pow(1 + costGrowthRate, growthPeriod - 1) - 1)).toDecimal(decimalObj.bills.totalPrice);
  394. }
  395. };
  396. baseFigureTemplate.boq = {
  397. //{各章清单合计}
  398. // 取清单固定类别是“第100章至700章清单”的金额
  399. 'GZQDHJ': function (tender) {
  400. return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'common');
  401. },
  402. //{专项暂定合计}
  403. // 第100章至700章清单行的暂估合价
  404. 'ZXZDHJ': function (tender) {
  405. return cbTools.getBaseFee(calcBase.fixedFlag.ONE_SEVEN_BILLS, tender, 'estimate');
  406. },
  407. //{100章以外清单合计}
  408. // 取清单固定清单[第100章至700章清单]的金额,但扣除清单100章下的金额。
  409. // 如果是固定清单[第100章至700章清单]下100章以外清单引用此基数,要排除自身(目前只允许100章的清单使用,所以暂时不需要此判断)
  410. 'YBZYHQDHJ': function (tender) {
  411. let oneToSeven = cbTools.findNodeByFlag(fixedFlag.ONE_SEVEN_BILLS);
  412. if (!oneToSeven) {
  413. return 0;
  414. }
  415. //100-700章固定节点的所有子节点
  416. let allChildren = [];
  417. function getChildren(nodes) {
  418. allChildren = allChildren.concat(nodes);
  419. for (let node of nodes) {
  420. if (node.children.length > 0) {
  421. getChildren(node.children);
  422. }
  423. }
  424. }
  425. getChildren(oneToSeven.children);
  426. //扣除的节点:100章的节点[100-200)
  427. let deductNodes = allChildren.filter(cbTools.withingOneHundred);
  428. //计算金额
  429. let fullFeeField = tender ? 'common.tenderTotalFee' : 'common.totalFee';
  430. return projectObj.project.calcProgram.getTotalFee([oneToSeven], deductNodes, fullFeeField).toDecimal(decimalObj.bills.totalPrice);
  431. }
  432. };
  433. }
  434. if (typeof projectObj !== 'undefined') {
  435. projectObj.isInsertEquipmentVisable = function (selected) {
  436. return true; //四川养护2021不管是预算或者工程量清单,都是显示
  437. }
  438. }
  439. if (typeof feeRateObject !== 'undefined') {
  440. feeRateObject.feeRateSpecialHandle = function (subRate, value) {
  441. let result = {};
  442. if (subRate.name == "施工进出场(km)" && value && value < 5) {//施工进出场5km以内按5km算
  443. result.valueKey = "5";
  444. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
  445. }
  446. if (subRate.name == "工地转移(km)" && value && value < 50) {//工地转移50km以内按50km算
  447. result.valueKey = "50";
  448. result.value = scMathUtil.roundForObj(value, getDecimal("feeRate"));//设置显示的节点值
  449. }
  450. return result;
  451. }
  452. }
  453. if (typeof module !== 'undefined') {
  454. module.exports = {
  455. progression,
  456. deficiency,
  457. };
  458. }