Browse Source

bug fixed

zhangweicheng 7 years ago
parent
commit
7556e42599

+ 35 - 10
modules/ration_glj/facade/glj_calculate_facade.js

@@ -9,6 +9,7 @@ let ration_glj = mongoose.model('ration_glj');
 let ration = mongoose.model('ration');
 let ration_coe = mongoose.model('ration_coe');
 let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
+let std_glj_lib_gljList_model = mongoose.model('std_glj_lib_gljList');
 let glj_type_util = require('../../../public/cache/std_glj_type_util');
 const scMathUtil = require('../../../public/scMathUtil').getUtil();
 let decimal_facade = require('../../main/facade/decimal_facade');
@@ -26,7 +27,7 @@ let stateSeq ={
     cusQuantity:5,
     cusCoe:6,
     adjMak:7
-}
+};
 
 
 async function calculateQuantity(query,noNeedCal){
@@ -49,7 +50,7 @@ async function calculateQuantity(query,noNeedCal){
                  let times = calculateTimes(impactRation.rationAssList[i]);
                  if(times!=0){
                      assRation = await  std_ration_lib_ration_items.findOne({rationRepId:impactRation.libID,code:impactRation.rationAssList[i].assistCode});
-                     assList.push({times:times,assRation:assRation})
+                     assList.push({times:times,assRation:assRation});
                      adjustState.push({index:stateSeq.ass,content:impactRation.rationAssList[i].name+" "+impactRation.rationAssList[i].actualValue+" : +"+impactRation.rationAssList[i].assistCode+"x"+times});
                  }
              }
@@ -106,7 +107,7 @@ async function calculateQuantityPerGLJ(glj,index,coeList,assList,adjustState,noN
         if(noNeedCal==null){
             if(!glj._doc.hasOwnProperty('customQuantity')||glj.customQuantity==null||glj.customQuantity==""){
                 quantity =scMathUtil.roundTo(parseFloat(glj.rationItemQuantity),-decimal);
-                quantity =scMathUtil.roundTo(calculateAss(quantity,assList,glj),-decimal);
+                quantity =scMathUtil.roundTo(await calculateAss(quantity,assList,glj),-decimal);
                 quantity = calculateQuantityByCoes(quantity,coeList,glj);
             }else {
                 quantity = glj.customQuantity;
@@ -126,12 +127,22 @@ async function calculateQuantityPerGLJ(glj,index,coeList,assList,adjustState,noN
     }
 }
 
-function calculateAss(quantity,assList,glj) {
+async function calculateAss(quantity,assList,glj) {
     for(let i=0;i<assList.length;i++){
         if(assList[i].assRation){
-            let assglj = _.find(assList[i].assRation.rationGljList,function (aglj) {
-                return aglj.gljId == glj.GLJID
-            })
+            let assglj = null;
+            for(let aglj of assList[i].assRation.rationGljList){
+                if(glj.createType == 'replace'){//如果工料机是替换过的,要用原始的编码来匹配
+                    let std_glj = await std_glj_lib_gljList_model.findOne({'ID':aglj.gljId});
+                    if(glj.rcode == std_glj.code){
+                        assglj = aglj;
+                        break;
+                    }
+                }else if(aglj.gljId == glj.GLJID){
+                    assglj = aglj;
+                    break;
+                }
+            }
             if(assglj){
                 let calQuantity = assglj.consumeAmt*assList[i].times;
                 quantity += calQuantity
@@ -155,9 +166,9 @@ function generateAdjustState(glj,coeList,adjustState,index,quantity) {
         for(let i=0;i<coeList.length;i++){
             if(coeList[i].isAdjust==1){
                 if(i==coeList.length-1){
-                    adjustState.push({index:stateSeq.cusCoe,content:coeList[i].content});
+                    adjustState.push({index:stateSeq.cusCoe,content:getContent(coeList[i].coes)});//自定义乘系数要去掉倍数为1的
                 }else {
-                    adjustState.push({index:stateSeq.coe,content:"调 : "+coeList[i].content});
+                    adjustState.push({index:stateSeq.coe,content:"调 : "+coeList[i].content});//coeList[i].content
                 }
             }
         }
@@ -178,6 +189,20 @@ function generateAdjustState(glj,coeList,adjustState,index,quantity) {
     return adjustState;
 }
 
+function getContent(coes) {
+    let stringList=[];
+    for(let c of coes){
+        if( c.amount&&c.amount!=1){
+            let operator = c.operator;
+            if(c.operator =="*"){
+                operator = "X";
+            }
+            stringList.push(c.coeType+operator+c.amount);
+        }
+    }
+    return stringList.join(",");
+
+}
 
 function calculateTimes(ass){
     let times =(ass.actualValue-ass.stdValue)/ass.stepValue;
@@ -211,7 +236,7 @@ function everyCoe(quantity,coe,glj) {
     let coeQuantity = quantity;
     if(coe.isAdjust==1){
         for(let i=0;i<coe.coes.length;i++){
-            if(coe.coes[i].coeType=='单个'&&coe.coes[i].gljCode==glj.code){
+            if(coe.coes[i].gljCode==glj.code){//if(coe.coes[i].coeType=='单个工料机'&&coe.coes[i].gljCode==glj.code)
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
             } else if(coe.coes[i].coeType=='定额'){
                 coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);

+ 1 - 1
public/web/tree_sheet/tree_sheet_helper.js

@@ -156,7 +156,7 @@ var TREE_SHEET_HELPER = {
                 if (colSetting.data.cellType && Object.prototype.toString.apply(colSetting.data.cellType) !== "[object String]") {
                     cell.cellType(colSetting.data.cellType(node));
                 }
-                if(gljOprObj.isInstallationNode(node)){//如果是通过安装增加费自动生成的,都是只读类型
+                if(sheet.name()=='mainSheet'&&gljOprObj.isInstallationNode(node)){//如果是通过安装增加费自动生成的,都是只读类型
                     cell.locked(true);
                 }else if (colSetting.readOnly) {
                     if (Object.prototype.toString.apply(colSetting.readOnly) === "[object Function]") {

+ 122 - 0
web/building_saas/glj/html/project_glj.html

@@ -0,0 +1,122 @@
+<style type="text/css">
+    .copy,#save-as-tips{
+        display: none;
+    }
+</style>
+<div class="toolsbar px-1">
+    <div class="form-inline py-1">
+        <label class="mx-2">当前使用:<span id="used-name"></span>(<a href="#" id="pop-dj_2" data-original-title="" title=""><span id="used-count_2">0</span> 单位工程使用</a>)
+            <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#change-dj_2"><i class="fa fa-exchange"></i> 选择其他</a>
+            <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#file-save-as-dialog_2"><i class="fa fa-files-o"></i> 另存单独用</a></label>
+    </div>
+</div>
+<div class="container-fluid">
+    <div class="row">
+        <div class="col-lg-12 p-0" id="glj-main">
+            <div class="top-content">
+                <div class="main-data-top" id="project_glj_sheet">
+                    <p style="text-align: center; margin-top: 30px;">正在加载数据</p>
+                </div>
+            </div>
+            <div class="resize"></div>
+            <div class="bottom-content">
+                <ul class="nav nav-tabs" role="tablist">
+                    <li class="nav-item">
+                        <a class="nav-link active" data-toggle="tab" data-name="ration_sheet" id="ration_link" href="#glj_de_div" role="tab">相关定额</a>
+                    </li>
+                    <li class="nav-item">
+                        <a class="nav-link" data-toggle="tab" data-name="mix_ratio_sheet" id="mix_ratio_link" href="#ph_div" role="tab">配合比表</a>
+                    </li>
+                    <li class="nav-item">
+                        <a class="nav-link" data-toggle="tab" data-name="machine_sheet" id="machine_ratio_link" href="#jx_div" role="tab">机械单价</a>
+                    </li>
+                </ul>
+                <!-- Tab panes -->
+                <div class="tab-content">
+                    <div class="tab-pane active" id="glj_de_div" role="tabpanel">
+                        <div class="main-data-bottom ovf-hidden">
+                            相关定额
+                        </div>
+                    </div>
+                    <div class="tab-pane" id="ph_div" role="tabpanel">
+                        <div class="main-data-bottom" id="mix_ratio_sheet">
+                        </div>
+                    </div>
+                    <div class="tab-pane" id="jx_div" role="tabpanel">
+                        <div class="main-data-bottom" id="machine_sheet">
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!--弹出更换-->
+<!--<div class="modal fade" id="change-dj" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">更换单价文件</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div class="form-group">
+                    <label class="custom-control custom-radio">
+                        <input name="change-type" type="radio" class="custom-control-input" checked="checked" value="0">
+                        <span class="custom-control-indicator"></span>
+                        <span class="custom-control-description">从本建设项目中选择</span>
+                    </label>
+                    <label class="custom-control custom-radio">
+                        <input name="change-type" type="radio" class="custom-control-input" value="1">
+                        <span class="custom-control-indicator"></span>
+                        <span class="custom-control-description">从其他建设项目中复制</span>
+                    </label>
+                </div>
+                &lt;!&ndash;从本建设项目中选择&ndash;&gt;
+                <div class="form-group select option">
+                    <label id="current-project-name"></label>
+                    <select class="form-control" id="self-file"></select>
+                </div>
+                &lt;!&ndash;从其他建设项目中复制&ndash;&gt;
+                <div class="form-group copy option">
+                    <label>选择建设项目</label>
+                    <select class="form-control" id="other-project"></select>
+                </div>
+                <div class="form-group copy option">
+                    <select class="form-control" id="other-file"></select>
+                    <small class="form-text text-muted">你选择的单价文件将复制一份至新项目,不会影响原建设项目的单价文件。</small>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <a href="javascript:void(0);" class="btn btn-primary" id="change-file-confirm">确定</a>
+            </div>
+        </div>
+    </div>
+</div>
+&lt;!&ndash;弹出 另存新文件&ndash;&gt;
+<div class="modal fade" id="file-save-as-dialog" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">另存新费率文件</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div class="form-group">
+                    <label>单价文件名称</label>
+                    <input class="form-control" id="save-as-name" value="">
+                    <small class="form-text text-danger" id="save-as-tips">已存在同名单价文件。</small>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <a href="javascript:void(0);" class="btn btn-primary" id="save-as-confirm">确定</a>
+            </div>
+        </div>
+    </div>
+</div>-->

+ 4 - 0
web/building_saas/main/html/main.html

@@ -43,6 +43,7 @@
             <ul class="nav nav-tabs flex-column" role="tablist">
                 <li class="nav-item"><a class="active" data-toggle="tab" href="#zaojiashu" id="tab_zaojiashu" role="tab">造价书</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#gongliaoji" id="tab_gongliaoji" data-name="tab_gongliaoji" role="tab">工料机</a></li>
+               <!-- <li class="nav-item"><a data-toggle="tab" href="#project_glj" id="tab_project_glj" data-name="tab_project_glj" role="tab">工料机2</a></li>-->
                 <li class="nav-item"><a data-toggle="tab" href="#fee_rates" id="tab_fee_rate" role="tab" >费率</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#calc_program_manage" id="tab_calc_program_manage" role="tab">计算程序</a></li>
                 <li class="nav-item"><a data-toggle="tab" href="#reports" role="tab" id="tab_report" onclick="rptTplObj.iniPage();">报表</a></li>
@@ -272,6 +273,9 @@
             <div class="tab-pane" id="gongliaoji" role="tabpanel">
                 <%include ../../glj/html/glj_index.html %>
             </div>
+            <div class="tab-pane" id="project_glj" role="tabpanel">
+              <%include ../../glj/html/project_glj.html %>
+            </div>
             <div class="tab-pane" id="reports" role="tabpanel">
                 <%include ../../report/html/rpt_main.html %>
             </div>

+ 12 - 5
web/building_saas/main/js/models/project_glj.js

@@ -410,7 +410,9 @@ ProjectGLJ.prototype.getAdjustPrice = function (glj) {
                'unit': ratio.unit
            })
             if(tem){
-                p+=scMathUtil.roundForObj(this.getAdjustPrice(tem)*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),decimal);
+                let priceData={};
+                gljOprObj.setGLJPrice(priceData,tem);
+                p+=scMathUtil.roundForObj(priceData.adjustPrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),decimal);
             }
         }
         return scMathUtil.roundForObj(p,decimal);
@@ -422,7 +424,7 @@ ProjectGLJ.prototype.getAdjustPrice = function (glj) {
 ProjectGLJ.prototype.getBasePrice = function(glj){
     let price_decimal = getDecimal("glj.unitPrice");
     let quantity_decimal = getDecimal("glj.quantity");
-    if (notEditType.indexOf(glj.unit_price.type)>0&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
+    if (notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
         let p =0;
         for(let ratio of glj.ratio_data){
             let tem =  _.find( projectObj.project.projectGLJ.datas.gljList,{
@@ -433,7 +435,9 @@ ProjectGLJ.prototype.getBasePrice = function(glj){
                 'unit': ratio.unit
             });
             if(tem){
-                p+=scMathUtil.roundForObj(tem.unit_price.base_price*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),price_decimal);
+                let priceData={};
+                gljOprObj.setGLJPrice(priceData,tem);
+                p+=scMathUtil.roundForObj(priceData.basePrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),price_decimal);
             }
         }
         return scMathUtil.roundForObj(p,price_decimal);
@@ -442,10 +446,11 @@ ProjectGLJ.prototype.getBasePrice = function(glj){
     }
 };
 
+
 ProjectGLJ.prototype.getMarketPrice = function (glj) {
     let price_decimal = getDecimal("glj.unitPrice");
     let quantity_decimal = getDecimal("glj.quantity");
-    if (notEditType.indexOf(glj.unit_price.type)>0&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
+    if (notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
         let p =0;
         for(let ratio of glj.ratio_data){
             let tem =  _.find( projectObj.project.projectGLJ.datas.gljList,{
@@ -456,7 +461,9 @@ ProjectGLJ.prototype.getMarketPrice = function (glj) {
                 'unit': ratio.unit
             });
             if(tem){
-                p+=scMathUtil.roundForObj(tem.unit_price.market_price*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),price_decimal);
+                let priceData={};
+                gljOprObj.setGLJPrice(priceData,tem);
+                p+=scMathUtil.roundForObj(priceData.marketPrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),price_decimal);
             }
         }
         return scMathUtil.roundForObj(p,price_decimal);

+ 2 - 0
web/building_saas/main/js/models/ration_glj.js

@@ -148,6 +148,7 @@ var ration_glj = {
             datas = sortRationGLJ(datas);
             for (let data of datas) {
                 if (this.needShowToTree(data)) {
+                    gljOprObj.setGLJPrice(data);
                     this.transferToNodeData(data);
                     let parentNode = _.find(projectObj.project.mainTree.items, function (n) {//找父节点
                         return n.sourceType == ModuleNames.ration && n.data.ID == data.rationID;
@@ -712,6 +713,7 @@ var ration_glj = {
                     fieldName = "marketPrice";
                     projectObj.project.projectGLJ.updatePriceFromRG(node.data, fieldName, newval);
                     return;
+
                 }
             } else {
                 if(fieldName == "contain"){

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

@@ -1417,8 +1417,8 @@ var gljOprObj = {
                     //project.ration_glj.datas = project.ration_glj.datas.concat(result.newRecodes);//显示和缓存统一,这样的话就不用更新两个位置了
                     project.ration_glj.datas = project.ration_glj.datas.concat(result.showData);
                     gljOprObj.sheetData = gljOprObj.sheetData.concat(result.showData);
-                    project.ration_glj.addToMainTree(result.showData);
                     project.projectGLJ.loadData(function () {
+                        project.ration_glj.addToMainTree(result.showData);
                         gljOprObj.showRationGLJSheetData();
                         project.calcProgram.calcAndSave(selected);
                         projectObj.mainController.refreshTreeNode([selected]);

+ 29 - 0
web/building_saas/main/js/views/project_glj_view.js

@@ -0,0 +1,29 @@
+/**
+ * Created by zhang on 2018/3/13.
+ */
+projectGljObject={
+    projectGljSetting:{},
+    projectGljSpread:{},
+    projectGljSheet:{},
+    projectGljSheetData:{}
+
+
+
+};
+
+
+$(function () {
+
+
+    $('#tab_project_glj').on('show.bs.tab', function (e) {
+        $(e.relatedTarget.hash).removeClass('active');
+
+
+
+
+
+    });
+
+});
+
+

+ 7 - 6
web/building_saas/main/js/views/project_property_display_view.js

@@ -6,8 +6,8 @@ let projDisplayView = {
     init: function () {
         this.datas = projectInfoObj.projectInfo.property.displaySetting;
         this.datas = this.datas === undefined ? {autoHeight: true, disPlayMainMaterial: true} : this.datas;
-        $("#autoHeight").attr("checked", this.datas.autoHeight);
-        $("#disPlayMainMaterial").attr("checked", this.datas.disPlayMainMaterial);
+        $("#autoHeight").prop("checked", this.datas.autoHeight);
+        $("#disPlayMainMaterial").prop("checked", this.datas.disPlayMainMaterial);
         //$('#disPlayMainMateria').prop('checked')
     },
 
@@ -37,9 +37,9 @@ let calcOptions = {
     datas: null,//just for view
     init: function () {
         this.datas = projectInfoObj.projectInfo.property.calcOptions;
-        $("#calc_main").attr("checked", this.datas.calc_main);
-        $("#calc_add").attr("checked", this.datas.calc_add);
-        $("#calc_est").attr("checked", this.datas.calc_est);
+        $("#calc_main").prop("checked", this.datas.calc_main);
+        $("#calc_add").prop("checked", this.datas.calc_add);
+        $("#calc_est").prop("checked", this.datas.calc_est);
     },
     updateChecking: function (properties) {
         if (this.datas == null) {
@@ -60,6 +60,7 @@ let calcOptions = {
 }
 
 
+/*
 $(document).ready(function () {
     $('#tab_display_setting').on('shown.bs.tab', function () {
         projDisplayView.init();
@@ -67,4 +68,4 @@ $(document).ready(function () {
     $('#about-calc').on('shown.bs.tab', function () {
         calcOptions.init();
     });
-});
+});*/

+ 16 - 0
web/building_saas/main/js/views/project_view.js

@@ -437,6 +437,18 @@ var projectObj = {
             info.sheet.setValue(info.row, info.col, newV);
         }
     },
+    onCellDoubleClick: function (sender, info){
+        let project = projectObj.project;
+        let node = project.mainTree.items[info.row];
+        let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
+        if(fieldName == 'marketUnitFee'){
+            if(gljOprObj.hasComposition(node.data,true)){
+                alert("当前工料机的市场价由组成物计算得出,不可直接修改。");
+                return;
+            }
+        }
+
+    },
     mainSpreadEditEnded: function (sender, info) {
         let project = projectObj.project;
         let node = project.mainTree.items[info.row];
@@ -489,6 +501,7 @@ var projectObj = {
         if (!this.mainSpread) {
             this.mainSpread = SheetDataHelper.createNewSpread($('#billsSpread')[0]);
             this.mainSpread.getActiveSheet().selectionPolicy(GC.Spread.Sheets.SelectionPolicy.muliRange);
+            this.mainSpread.getActiveSheet().name('mainSheet');
         }
     },
     refreshMainSpread: function () {
@@ -573,6 +586,7 @@ var projectObj = {
                 that.mainSpread.bind(GC.Spread.Sheets.Events.RangeChanged, that.mainSpreadRangeChanged);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ClipboardChanged, that.msClipboardChanged);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, that.onButtonClick);
+                that.mainSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, that.onCellDoubleClick);
                 that.loadMainSpreadContextMenu();
                 that.loadFocusLocation();
                 let endTime = +new Date();
@@ -1264,6 +1278,8 @@ $('#poj-set').on('show.bs.modal', function () {
         let zg = projectObj.project.property.zanguCalcMode ? projectObj.project.property.zanguCalcMode : zanguCalcType.common;
         setCalcFlag($('#zangu_common'), zanguCalcType.common, zg);
         setCalcFlag($('#zangu_gatherMaterial'), zanguCalcType.gatherMaterial, zg);
+        projDisplayView.init();
+        calcOptions.init();
     }
 });
 $('#property_ok').click(function () {