Browse Source

清单计算基数计算逻辑,去掉默认清单计算程序。计算后使用户不能再编辑综合单价。

Chenshilong 7 năm trước cách đây
mục cha
commit
3e9db41950

+ 1 - 2
modules/main/models/schemas/proj_setting.js

@@ -7,7 +7,7 @@ let Schema = mongoose.Schema;
 let collectionName = 'proj_setting';
 let settingConst = {
     billsCalcMode: {
-        rationContent: 0, rationPrice: 1, rationPriceConverse: 2, billsPrice: 3
+        rationContent: 0, rationPriceConverse: 1, rationPrice: 2, billsPrice: 3
     },
     zanguCalcMode: {
         common: 0, gatherMaterial: 1
@@ -26,7 +26,6 @@ let projSettingSchema = {
     billsCalcMode: {
         type: Number,
         default: settingConst.billsCalcMode.rationContent
-        // rationContent = 0, rationPrice = 1, rationPriceConverse = 2, billsPrice = 3
     },
     zanguCalcMode: {
         type: Number,

+ 2 - 2
web/building_saas/main/html/main.html

@@ -266,13 +266,13 @@
                                             </div>
                                             <div class="form-check">
                                                 <label class="form-check-label">
-                                                    <input class="form-check-input" name="calcFlag" id="rationPrice" value="1" type="radio">
+                                                    <input class="form-check-input" name="calcFlag" id="rationPriceConverse" value="1" type="radio">
                                                     子目单价取费(反算):清单综合合价=清单综合单价*清单工程量
                                                 </label>
                                             </div>
                                             <div class="form-check">
                                                 <label class="form-check-label">
-                                                    <input class="form-check-input" name="calcFlag" id="rationPriceConverse" value="2" type="radio">
+                                                    <input class="form-check-input" name="calcFlag" id="rationPrice" value="2" type="radio">
                                                     子目单价取费(正算):清单综合合价=∑子目综合合价
                                                 </label>
                                             </div>

+ 30 - 13
web/building_saas/main/js/models/calc_program.js

@@ -711,11 +711,11 @@ class CalcProgram {
                         sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
                     };
 
-                    if (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPrice || me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPriceConverse) {
+                    if (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPriceConverse || me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPrice) {
                         buf = (sum_rtf / bq).toDecimal(decimalObj.process);
                         btuf = (sum_rttf / bq).toDecimal(decimalObj.process);
                     };
-                    if (isBaseFeeType(ft.type) || (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPriceConverse && ft.type == "common")){
+                    if (isBaseFeeType(ft.type) || (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")){
                         btf = sum_rtf;
                         bttf = sum_rttf;
                     }
@@ -735,6 +735,7 @@ class CalcProgram {
             };
             treeNode.data.calcTemplate = {"calcItems": rst};
         }
+        // 叶子清单的手工综合单价计算
         else if (treeNode.calcType == treeNodeCalcType.ctCommonUnitFee){
             delete treeNode.data.gljList;
             if (treeNode.data.calcBase) treeNode.data.calcBase = null;  // 不能直接删除该属性,否则无法冲掉库中已存储的值
@@ -743,8 +744,31 @@ class CalcProgram {
             let uf = (treeNode.data.feesIndex && treeNode.data.feesIndex.common && treeNode.data.feesIndex.common.unitFee) ? treeNode.data.feesIndex.common.unitFee : 0;
             let tuf = (treeNode.data.feesIndex && treeNode.data.feesIndex.common && treeNode.data.feesIndex.common.tenderUnitFee) ? treeNode.data.feesIndex.common.tenderUnitFee : 0;
             let q = treeNode.data.quantity ? treeNode.data.quantity : 0;
-            let tf = (uf * q).toDecimal(decimalObj.decimal('totalPrice', treeNode));
-            let ttf = (tuf * q).toDecimal(decimalObj.decimal('totalPrice', treeNode));
+            let tf = (uf * q).toDecimal(decimalObj.bills.totalPrice);
+            let ttf = (tuf * q).toDecimal(decimalObj.bills.totalPrice);
+
+            delete treeNode.data.fees;    // 直接删掉再新增,不用一个个费判断更新,效率更高。
+            delete treeNode.data.feesIndex;
+            me.initFeeField(treeNode, 'common');
+            treeNode.data.feesIndex.common.unitFee = uf.toDecimal(decimalObj.bills.unitPrice);
+            treeNode.data.feesIndex.common.totalFee = tf.toDecimal(decimalObj.bills.totalPrice);
+            treeNode.data.feesIndex.common.tenderUnitFee = tuf.toDecimal(decimalObj.bills.unitPrice);
+            treeNode.data.feesIndex.common.tenderTotalFee = ttf.toDecimal(decimalObj.bills.totalPrice);
+
+            treeNode.data.calcTemplate = {"calcItems": []};
+        }
+        // 叶子清单的计算基数计算
+        else if (treeNode.calcType == treeNodeCalcType.ctCalcBaseValue){
+            delete treeNode.data.gljList;
+            if (treeNode.data.programID) treeNode.data.programID = null;
+
+            let f = treeNode.data.feeRate ? treeNode.data.feeRate : 100;
+            let q = treeNode.data.quantity ? treeNode.data.quantity : 0;
+            let b = treeNode.data.calcBase;
+            let uf = (b * f * q / 100).toDecimal(decimalObj.bills.unitPrice);
+            let tuf = uf;
+            let tf = (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPrice) ? (b * f / 100).toDecimal(decimalObj.bills.totalPrice) : (uf * q).toDecimal(decimalObj.bills.totalPrice);
+            let ttf = tf;
 
             delete treeNode.data.fees;    // 直接删掉再新增,不用一个个费判断更新,效率更高。
             delete treeNode.data.feesIndex;
@@ -756,16 +780,9 @@ class CalcProgram {
 
             treeNode.data.calcTemplate = {"calcItems": []};
         }
+        // 定额或清单自己的计算程序计算
         else{
-            // 叶子清单的公式计算:使用缺省清单计算程序。需要提供总金额作为计算基数(不需要工料机),然后每条按比例(费率)计算,不需要工料机明细。
-            if (treeNode.calcType == treeNodeCalcType.ctCalcBaseValue){
-                delete treeNode.data.gljList;
-
-/*                if (treeNode.data.programID == undefined){
-                    treeNode.data.programID = defaultBillTemplate.ID;
-                };*/
-            }
-            else if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) {
+            if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) {
                 if (treeNode.data.type == rationType.volumePrice){
                     delete treeNode.data.gljList;
                     let muf = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0;

+ 2 - 2
web/building_saas/main/js/models/main_consts.js

@@ -120,8 +120,8 @@ const rationType = {
 
 const leafBillGetFeeType = {
     rationContent: 0,
-    rationPrice: 1,
-    rationPriceConverse: 2,
+    rationPriceConverse: 1,
+    rationPrice: 2,
     billsPrice: 3
 };
 

+ 1 - 1
web/building_saas/main/js/views/project_view.js

@@ -616,8 +616,8 @@ $('#poj-set').on('show.bs.modal', function () {
         let mode = projectObj.project.projSetting.billsCalcMode;
         let settingConst = projectObj.project.projSetting.settingConst;
         setCalcFlag($('#rationContent'), settingConst.billsCalcMode.rationContent, mode);
-        setCalcFlag($('#rationPrice'), settingConst.billsCalcMode.rationPrice, mode);
         setCalcFlag($('#rationPriceConverse'), settingConst.billsCalcMode.rationPriceConverse, mode);
+        setCalcFlag($('#rationPrice'), settingConst.billsCalcMode.rationPrice, mode);
         setCalcFlag($('#billsPrice'), settingConst.billsCalcMode.billsPrice, mode);
 
         mode = projectObj.project.projSetting.zanguCalcMode;