Browse Source

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhongzewei 7 years ago
parent
commit
f056ee5b11

+ 7 - 4
public/web/gljUtil.js

@@ -183,6 +183,7 @@ let gljUtil = {
     },
     getMarketPrice:function (glj,projectGLJDatas,calcOptions,labourCoeDatas,decimalObj,isRadio,_,scMathUtil,tenderCoe) {
         let price_decimal = decimalObj.glj.unitPrice;
+        let price_hasM_decimal = decimalObj.glj.unitPriceHasMix?decimalObj.glj.unitPriceHasMix:decimalObj.glj.unitPrice;
         let quantity_decimal = decimalObj.glj.quantity;
         let process_decimal = decimalObj.process;
         let priceCoe = this.isDef(tenderCoe)?tenderCoe:1;
@@ -202,7 +203,7 @@ let gljUtil = {
                     p = scMathUtil.roundForObj(temP + p,process_decimal);
                 }
             }
-            return scMathUtil.roundForObj(p,price_decimal);
+            return scMathUtil.roundForObj(p,price_hasM_decimal);
         }else {
             let tem_decimal = isRadio==true?process_decimal:price_decimal;
             return scMathUtil.roundForObj(parseFloat(glj.unit_price.market_price)*priceCoe,tem_decimal);
@@ -210,6 +211,7 @@ let gljUtil = {
     },
     getBasePrice:function (glj,projectGLJDatas,calcOptions,labourCoeDatas,decimalObj,isRadio,_,scMathUtil) {
         let price_decimal = decimalObj.glj.unitPrice;
+        let price_hasM_decimal = decimalObj.glj.unitPriceHasMix?decimalObj.glj.unitPriceHasMix:decimalObj.glj.unitPrice;
         let quantity_decimal = decimalObj.glj.quantity;
         let process_decimal = decimalObj.process;
         if (this.notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
@@ -228,7 +230,7 @@ let gljUtil = {
                     p = scMathUtil.roundForObj(temP + p,process_decimal);
                 }
             }
-            return scMathUtil.roundForObj(p,price_decimal);
+            return scMathUtil.roundForObj(p,price_hasM_decimal);
         }else {
             let tem_decimal = isRadio==true?process_decimal:price_decimal;
             return scMathUtil.roundForObj(glj.unit_price.base_price,tem_decimal);
@@ -236,6 +238,7 @@ let gljUtil = {
     },
     getAdjustPrice:function (glj,projectGLJDatas,calcOptions,labourCoeDatas,decimalObj,isRadio,_,scMathUtil) {
         let decimal = decimalObj.glj.unitPrice;
+        let price_hasM_decimal = decimalObj.glj.unitPriceHasMix?decimalObj.glj.unitPriceHasMix:decimalObj.glj.unitPrice;
         let quantity_decimal =  decimalObj.glj.quantity;
         let process_decimal = decimalObj.process;
         let  tem_decimal = isRadio==true?process_decimal:decimal;
@@ -259,9 +262,9 @@ let gljUtil = {
                     p = scMathUtil.roundForObj(temP + p,process_decimal);
                 }
             }
-            return scMathUtil.roundForObj(p,decimal);
+            return scMathUtil.roundForObj(p,price_hasM_decimal);
         } else {//对于其他普通材料等,无调整系数,调整价=定额价。
-            return glj.unit_price.base_price
+            return  scMathUtil.roundForObj(glj.unit_price.base_price,tem_decimal)
         }
     },
     calcPriceDiff:function (glj,calcOptions) {

+ 2 - 2
web/building_saas/fee_rates/fee_rate.html

@@ -84,7 +84,7 @@
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title"><span id="set-lv-feeRateName">费率1</span>&nbsp;重选标准</h5>
+                <h5 class="modal-title"><span id="set-lv-feeRateName" style="display: none">费率1 &nbsp;</span>重选标准</h5>
                 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
@@ -96,7 +96,7 @@
                     <small class="form-text text-danger">重新选择费率标准将重置当前费率文件的所有费率,正在使用当前费率文件的其他单位工程也将受影响。</small>
                 </div>
                 <div class="form-group">
-                    <label>正在使用 <span id="set-use-feeRateName">费率1</span> 的单位工程</label>
+                    <label>正在使用当前费率文件的单位工程有:</label>
                     <ul class="list-unstyled" id="usageProjectList">
 
                     </ul>

+ 18 - 9
web/building_saas/main/js/models/calc_program.js

@@ -272,8 +272,8 @@ let calcTools = {
                     calcTools.calcGLJTenderQty(treeNode, glj);
                 };
                 let qty = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
-                let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"]) : me.uiGLJPrice(glj["marketPrice"]);
-                let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"]) : me.uiGLJPrice(glj["basePrice"]);
+                let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"], glj) : me.uiGLJPrice(glj["marketPrice"], glj);
+                let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"], glj) : me.uiGLJPrice(glj["basePrice"], glj);
 
                 if (priceType == priceTypes.ptDiffPrice){
                     if (aprice != mprice){
@@ -282,7 +282,7 @@ let calcTools = {
                     }
                 }
                 else {
-                    if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"]);}
+                    if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"], glj);}
                     else if (priceType == priceTypes.ptAdjustPrice){price = aprice;}
                     else if (priceType == priceTypes.ptMarketPrice){price = mprice;}
                     temp = (qty * price).toDecimal(decimalObj.process);
@@ -378,7 +378,7 @@ let calcTools = {
 
             let rst = 0;
             for (let obj of GLJObjs){
-                let tp = (me.uiGLJQty(obj.quantity) * me.uiGLJPrice(obj.marketPrice)).toDecimal(decimalObj.bills.totalPrice);
+                let tp = (me.uiGLJQty(obj.quantity) * me.uiGLJPrice(obj.marketPrice, obj)).toDecimal(decimalObj.bills.totalPrice);
                 rst = (rst + tp).toDecimal(decimalObj.bills.totalPrice);
             };
             return rst;
@@ -401,7 +401,7 @@ let calcTools = {
             for (let glj of treeNode.data.gljList) {
                 if (!allMaterialTypes.includes(glj.type)) continue;
                 if (glj.isEstimate){
-                    rst = rst + (me.uiGLJQty(glj.quantity) * me.uiGLJPrice(glj.marketPrice)).toDecimal(decimalObj.process);
+                    rst = rst + (me.uiGLJQty(glj.quantity) * me.uiGLJPrice(glj.marketPrice, glj)).toDecimal(decimalObj.process);
                     rst = rst.toDecimal(decimalObj.process);
                 }
                 else{   // 组成物
@@ -725,14 +725,17 @@ let calcTools = {
                 pCoe = projectObj.project.property.tenderSetting.gljPriceTenderCoe;
             glj.tenderPrice = (glj.marketPrice * pCoe).toDecimal(decimalObj.glj.unitPrice);
         }else{
-            let projGLJ = projectObj.project.projectGLJ.getDataByID(glj.projectGLJID);
+            let projGLJ = calcTools.getProjectGLJ(glj);
             glj.tenderPrice = projectObj.project.projectGLJ.getTenderMarketPrice(projGLJ);
         };
     },
     // 界面显示的工料机价格,包括定额价、市场价等。参数 price 传入一个普通的价格数值即可。
-    uiGLJPrice: function (price){
-        if (price)
-            return parseFloat(price).toDecimal(decimalObj.glj.unitPrice)
+    uiGLJPrice: function (price, glj){
+        if (price){
+            let projGLJ = glj ? calcTools.getProjectGLJ(glj) : null;
+            let d = (projGLJ&&projGLJ.ratio_data.length > 0) ? decimalObj.glj.unitPriceHasMix : decimalObj.glj.unitPrice;
+            return parseFloat(price).toDecimal(d);
+        }
         else return 0;
     },
     // 界面显示的工料机数量。参数 quantity 传入一个普通的数量数值即可。
@@ -780,6 +783,12 @@ let calcTools = {
                 discreteNodes.push(node);
         };
         return discreteNodes;
+    },
+    getProjectGLJ(glj){
+        if (glj.projectGLJID){
+            return projectObj.project.projectGLJ.getDataByID(glj.projectGLJID);
+        }
+        else return null;
     }
 };
 

+ 4 - 0
web/building_saas/main/js/models/quantity_detail.js

@@ -292,6 +292,10 @@ var quantity_detail = {
             var selected = selected?selected:projectObj.project.mainTree.selected;
             doc[dataCode]=args.editingText;
             if (dataCode == 'regex') {
+                if(!this.regexChecking(args.editingText)||!this.referenceChecking(args.editingText,args.row,doc)){
+                    gljOprObj.showQuantityDetailData();
+                    return;
+                }
                 if(recode.hasOwnProperty('rationID')){
                     query.rationID=recode.rationID;
                 }else {

+ 6 - 6
web/building_saas/main/js/views/glj_col.js

@@ -13,9 +13,9 @@ let gljCol = {
             {headerName: "自定消耗", headerWidth: 80, dataCode: "customQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
             {headerName: "消耗量", headerWidth: 80, dataCode: "quantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
             {headerName: "总消耗量", headerWidth: 80, dataCode: "totalQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
-            {headerName: "定额价", headerWidth: 80, dataCode: "basePrice", dataType: "Number", hAlign: "right", decimalField: "glj.unitPrice"},
-            {headerName: "调整价", headerWidth: 80, dataCode: "adjustPrice", dataType: "Number", hAlign: "right", decimalField: "glj.unitPrice"},
-            {headerName: "市场价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number", hAlign: "right", decimalField: "glj.unitPrice"},
+            {headerName: "定额价", headerWidth: 80, dataCode: "basePrice", dataType: "Number", hAlign: "right"},//, decimalField: "glj.unitPrice"
+            {headerName: "调整价", headerWidth: 80, dataCode: "adjustPrice", dataType: "Number", hAlign: "right"},//, decimalField: "glj.unitPrice"
+            {headerName: "市场价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number", hAlign: "right"},//, decimalField: "glj.unitPrice"
             {headerName: "暂估", headerWidth: 45, dataCode: "isEstimate", dataType: "String", hAlign: "center", vAlign: "center", cellType: "checkBox"
             }
         ],
@@ -58,9 +58,9 @@ let gljCol = {
             {headerName: "规格型号", headerWidth: 120, dataCode: "specs", dataType: "String"},
             {headerName: "单位", headerWidth: 120, dataCode: "unit", hAlign: "center", dataType: "String"},
             {headerName: "类型", headerWidth: 120, dataCode: "short_name", hAlign: "center", dataType: "String"},
-            {headerName: "定额价", headerWidth: 120, dataCode: "basePrice", hAlign: "right", dataType: "Number",decimalField:'glj.unitPrice',validator:"number"},
-            {headerName: "调整价", headerWidth: 120, dataCode: "adjustPrice", hAlign: "right", dataType: "Number",decimalField:"glj.unitPrice"},
-            {headerName: "市场价", headerWidth: 120, dataCode: "marketPrice", hAlign: "right", dataType: "Number",decimalField:"glj.unitPrice",validator:"number"},
+            {headerName: "定额价", headerWidth: 120, dataCode: "basePrice", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:'glj.unitPrice'
+            {headerName: "调整价", headerWidth: 120, dataCode: "adjustPrice", hAlign: "right", dataType: "Number"},//,decimalField:"glj.unitPrice"
+            {headerName: "市场价", headerWidth: 120, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:"glj.unitPrice"
             {headerName: "消耗量", headerWidth: 120, dataCode: "consumption", hAlign: "right", dataType: "Number",decimalField:"glj.quantity",validator:"number"}
         ],
         view: {

+ 76 - 52
web/building_saas/main/js/views/glj_view_contextMenu.js

@@ -142,12 +142,15 @@ var gljContextMenu = {
                     name: '插入行',
                     icon: 'fa-sign-in',
                     disabled: function () {
-                        var sheetData = gljOprObj.detailData;
-                        if(gljOprObj.detailSheetReadonly()){
-                            return true
-                        }else {
-                            return  gljContextMenu.selectedRow>sheetData.length;
+                        if(subSpread.getActiveSheet().name()=='quantity_detail'){
+                            var sheetData = gljOprObj.detailData;
+                            if(gljOprObj.detailSheetReadonly()){
+                                return true
+                            }else {
+                                return  gljContextMenu.selectedRow>sheetData.length;
+                            }
                         }
+                       return false
                     },
                     callback: function () {
                         projectObj.project.quantity_detail.insertQuantityDetail(gljContextMenu.selectedRow);
@@ -160,8 +163,11 @@ var gljContextMenu = {
                     name: '删除行',
                     icon: 'fa-remove',
                     disabled: function () {
-                        var sheetData = gljOprObj.detailData;
-                        return gljContextMenu.selectedRow>sheetData.length-1;
+                        if(subSpread.getActiveSheet().name()=='quantity_detail'){
+                            var sheetData = gljOprObj.detailData;
+                            return gljContextMenu.selectedRow>sheetData.length-1;
+                        }
+                       return false
                     },
                     callback:function () {
                         projectObj.project.quantity_detail.deleteQuantityDetail(gljContextMenu.selectedRow);
@@ -174,8 +180,11 @@ var gljContextMenu = {
                     name: '上移',
                     icon: 'fa-arrow-up',
                     disabled: function () {
-                        var sheetData = gljOprObj.detailData;
-                        return gljContextMenu.selectedRow==0||gljContextMenu.selectedRow>sheetData.length-1;
+                        if(subSpread.getActiveSheet().name()=='quantity_detail'){
+                            var sheetData = gljOprObj.detailData;
+                            return gljContextMenu.selectedRow==0||gljContextMenu.selectedRow>sheetData.length-1;
+                        }
+                       return false;
                     },
                     callback: function () {
                         projectObj.project.quantity_detail.moveUp(gljContextMenu.selectedRow);
@@ -188,8 +197,11 @@ var gljContextMenu = {
                     name: '下移',
                     icon: 'fa-arrow-down',
                     disabled: function () {
-                        var sheetData = gljOprObj.detailData;
-                        return gljContextMenu.selectedRow>sheetData.length-2;
+                        if(subSpread.getActiveSheet().name()=='quantity_detail'){
+                            var sheetData = gljOprObj.detailData;
+                            return gljContextMenu.selectedRow>sheetData.length-2;
+                        }
+                      return false;
                     },
                     callback: function () {
                         projectObj.project.quantity_detail.moveDown(gljContextMenu.selectedRow);
@@ -202,14 +214,16 @@ var gljContextMenu = {
                     name: '复制',
                     icon: 'fa-files-o',
                     disabled: function () {
-                        let sheet = subSpread.getActiveSheet();
-                        let sheetData = gljOprObj.detailData;
-                        let value = sheet.getCell(gljContextMenu.selectedRow,gljContextMenu.selectedCol).value();
-                        if(gljContextMenu.selectedRow>sheetData.length-1||value==null){
-                            return true;
-                        }
-                        if(gljOprObj.detailSetting.header[gljContextMenu.selectedCol].dataCode == 'isSummation'){//累加列恢显
-                            return true;
+                        if(subSpread.getActiveSheet().name()=='quantity_detail'){
+                            let sheet = subSpread.getActiveSheet();
+                            let sheetData = gljOprObj.detailData;
+                            let value = sheet.getCell(gljContextMenu.selectedRow,gljContextMenu.selectedCol).value();
+                            if(gljContextMenu.selectedRow>sheetData.length-1||value==null){
+                                return true;
+                            }
+                            if(gljOprObj.detailSetting.header[gljContextMenu.selectedCol].dataCode == 'isSummation'){//累加列恢显
+                                return true;
+                            }
                         }
                         return false;
                     },
@@ -227,14 +241,16 @@ var gljContextMenu = {
                     name: '粘贴',
                     icon: 'fa-clipboard',
                     disabled: function () {
-                        let sheetData = gljOprObj.detailData;
-                        let dataCode = gljOprObj.detailSetting.header[gljContextMenu.selectedCol].dataCode;
-                        if(gljContextMenu.selectedRow>sheetData.length||gljContextMenu.clipboard==null){
-                            return true;
-                        }
-                        //结果列和累加列灰显
-                        if(dataCode == 'result' || dataCode == 'isSummation'){
-                            return true;
+                        if(subSpread.getActiveSheet().name()=='quantity_detail'){
+                            let sheetData = gljOprObj.detailData;
+                            let dataCode = gljOprObj.detailSetting.header[gljContextMenu.selectedCol].dataCode;
+                            if(gljContextMenu.selectedRow>sheetData.length||gljContextMenu.clipboard==null){
+                                return true;
+                            }
+                            //结果列和累加列灰显
+                            if(dataCode == 'result' || dataCode == 'isSummation'){
+                                return true;
+                            }
                         }
                         return false;
                     },
@@ -257,13 +273,15 @@ var gljContextMenu = {
                     name: '修改规则',
                     icon: 'fa-sign-in',
                     disabled: function () {//当选中空行或者ruleID为空的情况下,灰显
-                        let sheetData = installationFeeObj.rationInstallData;
-                        if(gljContextMenu.selectedRow>sheetData.length-1){
-                            return true
-                        }
-                        let ri = sheetData[gljContextMenu.selectedRow];
-                        if(!ri.ruleId||ri.ruleId==''){
-                            return true;
+                        if(subSpread.getActiveSheet().name()=='rationInstallSheet'){
+                            let sheetData = installationFeeObj.rationInstallData;
+                            if(gljContextMenu.selectedRow>sheetData.length-1){
+                                return true
+                            }
+                            let ri = sheetData[gljContextMenu.selectedRow];
+                            if(!ri.ruleId||ri.ruleId==''){
+                                return true;
+                            }
                         }
                         return false;
                     },
@@ -278,12 +296,14 @@ var gljContextMenu = {
                     name: '应用到当前分项',
                     icon: 'fa-sign-in',
                     disabled: function () {
-                        let sheetData = installationFeeObj.rationInstallData;
-                        if(gljContextMenu.selectedRow>sheetData.length-1){
-                            return true;
-                        }
-                        if(sheetData[gljContextMenu.selectedRow].unifiedSetting == 1){
-                            return true;
+                        if(subSpread.getActiveSheet().name()=='rationInstallSheet'){
+                            let sheetData = installationFeeObj.rationInstallData;
+                            if(gljContextMenu.selectedRow>sheetData.length-1){
+                                return true;
+                            }
+                            if(sheetData[gljContextMenu.selectedRow].unifiedSetting == 1){
+                                return true;
+                            }
                         }
                         return false;
                     },
@@ -298,12 +318,14 @@ var gljContextMenu = {
                     name: '应用到当前分部',
                     icon: 'fa-sign-in',
                     disabled: function () {
-                        let sheetData = installationFeeObj.rationInstallData;
-                        if(gljContextMenu.selectedRow>sheetData.length-1){
-                            return true;
-                        }
-                        if(sheetData[gljContextMenu.selectedRow].unifiedSetting == 1){
-                            return true;
+                        if(subSpread.getActiveSheet().name()=='rationInstallSheet'){
+                            let sheetData = installationFeeObj.rationInstallData;
+                            if(gljContextMenu.selectedRow>sheetData.length-1){
+                                return true;
+                            }
+                            if(sheetData[gljContextMenu.selectedRow].unifiedSetting == 1){
+                                return true;
+                            }
                         }
                         return false;
                     },
@@ -318,12 +340,14 @@ var gljContextMenu = {
                     name: '应用到当前项目',
                     icon: 'fa-sign-in',
                     disabled: function () {
-                        let sheetData = installationFeeObj.rationInstallData;
-                        if(gljContextMenu.selectedRow>sheetData.length-1){
-                            return true;
-                        }
-                        if(sheetData[gljContextMenu.selectedRow].unifiedSetting == 1){
-                            return true;
+                        if(subSpread.getActiveSheet().name()=='rationInstallSheet'){
+                            let sheetData = installationFeeObj.rationInstallData;
+                            if(gljContextMenu.selectedRow>sheetData.length-1){
+                                return true;
+                            }
+                            if(sheetData[gljContextMenu.selectedRow].unifiedSetting == 1){
+                                return true;
+                            }
                         }
                         return false;
                     },

+ 2 - 2
web/building_saas/main/js/views/project_glj_view.js

@@ -27,8 +27,8 @@ projectGljObject={
             {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String"},
             {headerName: "规格型号", headerWidth: 120, dataCode: "specs", hAlign: "left", dataType: "String"},
             {headerName: "单位", headerWidth: 45, dataCode: "unit", hAlign: "center", dataType: "String"},
-            {headerName: "定额价", headerWidth: 70, dataCode: "basePrice", hAlign: "right", dataType: "Number",decimalField:'glj.unitPrice',validator:"number"},
-            {headerName: "市场价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",decimalField:"glj.unitPrice",validator:"number"},
+            {headerName: "定额价", headerWidth: 70, dataCode: "basePrice", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:'glj.unitPrice'
+            {headerName: "市场价", headerWidth: 70, dataCode: "marketPrice", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:"glj.unitPrice"
             {headerName: "总消耗量", headerWidth: 100, dataCode: "quantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},
             {headerName: "三材系数", headerWidth: 100, dataCode: "materialCoe", hAlign: "right", dataType: "Number",validator:"number"},//,decimalField:'material'
             {headerName: "三材量", headerWidth: 100, dataCode: "materialQuantity", hAlign: "right", dataType: "Number",decimalField:'glj.quantity'},