Browse Source

update ass

zhangweicheng 8 years ago
parent
commit
232205d4c4

+ 2 - 0
modules/main/models/project.js

@@ -6,6 +6,7 @@ var rationData = require('./ration');
 var GLJData = require('./glj');
 var ration_glj_data = require('../../ration_glj/facade/ration_glj_facade');
 var ration_coe_data = require('../../ration_glj/facade/ration_coe_facade');
+var ration_ass_data = require('../../ration_glj/facade/ration_ass_facade');
 let projCounter = require('./proj_counter');
 var consts = require('./project_consts');
 var projectConsts = consts.projectConst;
@@ -18,6 +19,7 @@ moduleMap[projectConsts.RATION] = rationData;
 //moduleMap[projectConsts.GLJ] = GLJData;
 moduleMap[projectConsts.RATION_GLJ] = ration_glj_data;
 moduleMap[projectConsts.RATION_COE] = ration_coe_data;
+moduleMap[projectConsts.RATION_ASS] = ration_ass_data;
 moduleMap[projCounter.collectionName] = projCounter;
 
 

+ 1 - 0
modules/main/models/project_consts.js

@@ -7,6 +7,7 @@ var projectConst = {
     GLJ: 'GLJ',
     RATION_GLJ:'ration_glj',
     RATION_COE:'ration_coe',
+    RATION_ASS:'ration_ass',
     PROJECTGLJ: 'projectGLJ',
     GLJLIST: 'GLJList',
     UNITPRICEFILE: 'unitPriceFile',

+ 15 - 2
modules/main/models/ration.js

@@ -12,6 +12,19 @@ let consts = require('./project_consts');
 let projectConsts = consts.projectConst;
 let commonConsts = consts.commonConst;
 
+var rationAssItemSchema = mongoose.Schema({
+    name: String,
+    assistID: Number,
+    assistCode: String,
+    stdValue: Number,
+    actualValue:Number,
+    stepValue: String,
+    decimal: Number,
+    carryBit: String,
+    minValue: String,
+    maxValue: String
+}, { _id: false });
+
 let rationSchema = new Schema({
     ID: Number,
     projectID: Number,
@@ -32,7 +45,8 @@ let rationSchema = new Schema({
     fees: [subSchema.feesSchema],
     // 标记字段
     flags: [subSchema.flagsSchema],
-    deleteInfo: deleteSchema
+    deleteInfo: deleteSchema,
+    rationAssList: [rationAssItemSchema]
 });
 
 let ration = db.model("ration", rationSchema, "ration");
@@ -74,7 +88,6 @@ class rationModel extends baseModel {
             }
         }
 
-        functions
 
         for (let i = 0; i < datas.length; i++){
             data = datas[i];

+ 126 - 0
modules/ration_glj/facade/ration_ass_facade.js

@@ -0,0 +1,126 @@
+/**
+ * Created by chen on 2017/7/10.
+ */
+let mongoose = require('mongoose');
+let consts = require('../../main/models/project_consts');
+let commonConsts = consts.commonConst;
+let _=require("lodash");
+let async_n = require("async");
+let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
+let rationModel = mongoose.model('ration');
+let ration_glj = mongoose.model('ration_glj');
+
+module.exports={
+    save:save,
+    getData:getData
+}
+
+let operationMap={
+    'ut_create':create_ration_ass,
+    'ut_update':update_ration_ass,
+    'ut_delete':delete_ration_ass
+};
+
+function create_ration_ass(user_id,datas) {
+
+};
+
+function update_ration_ass(user_id,datas) {
+    return function (callback) {
+        let editAss = datas.query.editAss;
+        let times =calculateTimes(editAss);
+        doRationAssAdjust(datas.query.ration,editAss,times,datas.doc).then(function (result) {
+            console.log(result);
+            if(result.err){
+                callback(result.err,'')
+            }else {
+                let newObject = {
+                    moduleName:consts.projectConst.RATION_ASS,
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        doc:datas.doc,
+                        ration_glj_list:result.ration_glj_list,
+                        rationID:datas.query.ration.ID,
+                        editIndex:datas.query.editIndex,
+                        actualValue:editAss.actualValue
+                    }
+                };
+                callback(null,newObject);
+            }
+        })
+
+    }
+
+};
+
+async function doRationAssAdjust(ration,ass,times,doc) {
+    let result ={
+        err:null,
+        ration_glj_list:[]
+    }
+    try{
+        let assRation =await std_ration_lib_ration_items.findOne({rationRepId:ration.libID,code:ass.assistCode});
+        let gljList = assRation.rationGljList;
+        for(let i=0;i<gljList.length;i++){
+            let glj = gljList[i];
+            let calQuantity = glj.consumeAmt*times;
+            let update_ration_glj = await ration_glj.findOne({rationID:ration.ID,projectID:ration.projectID,GLJID:glj.gljId});
+            let newQuantity = update_ration_glj.rationItemQuantity+calQuantity;
+            await ration_glj.update({rationID:ration.ID,projectID:ration.projectID,GLJID:glj.gljId},{quantity:newQuantity});
+            result.ration_glj_list.push({ID:update_ration_glj.ID,quantity:newQuantity,rationID:ration.ID});
+        }
+        await rationModel.update({projectID:ration.projectID,ID:ration.ID},doc);
+        return result;
+    }catch (err){
+        result.err = err;
+        return result;
+    }
+}
+
+
+
+
+function delete_ration_ass(user_id,datas) {
+
+};
+
+function calculateTimes(ass){
+    let times =(ass.actualValue-ass.stdValue)/ass.stepValue;
+
+    if(ass.carryBit=='四舍五入'){
+        times = _.round(times,ass.decimal);
+    }else if (ass.carryBit=='进一'){
+        times =_.ceil(times,ass.decimal);
+    }
+    return times;
+}
+
+
+
+
+
+function getData(projectID, callback) {
+    callback(0, consts.projectConst.RATION_ASS, []);
+}
+
+function save (user_id, datas, callback) {
+    let operations=[];
+    if(_.isArray(datas)){
+        for(let i=0;i<datas.length;i++){
+            operations.push(operationMap[datas[i].updateType](user_id,datas[i]));
+        }
+    }else {
+        operations.push(operationMap[datas.updateType](user_id,datas));
+    }
+    async_n.parallel(operations,function (err,results) {
+        if(err){
+            callback(err,'');
+        }else {
+            if(results.length==1){
+                callback(null,results[0])
+            }else {
+                callback(null,results)
+            }
+        }
+    })
+}

+ 18 - 3
modules/ration_glj/facade/ration_coe_facade.js

@@ -52,8 +52,24 @@ function create_ration_coe(user_id,datas) {
 
     }
 }
-function update_ration_coe() {
-    
+function update_ration_coe(user_id,datas) {
+    return function(callback) {
+        ration_coe.update(datas.query,datas.doc,(err,result)=>{
+            if(err){
+                callback(err,'');
+            }else {
+                let returndata ={
+                    moduleName:'ration_coe',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        query:datas.query,
+                        doc:datas.doc
+                    }
+                }
+                callback(null,returndata)
+            }
+        })
+    }
 }
 function delete_ration_coe(data) {
     return function (callback) {
@@ -99,7 +115,6 @@ function getData(projectID, callback) {
             callback(0, consts.projectConst.RATION_COE, datas);
         }
     })
-
 }
 
 function save (user_id, datas, callback) {

+ 51 - 2
modules/ration_glj/models/ration_glj_temp.js

@@ -8,6 +8,20 @@ var mongoose = require('mongoose'),
     Schema = mongoose.Schema;
 //下面是临时代码,以后删除
 
+var rationAssItemSchema = mongoose.Schema({
+    name: String,
+    assistID: Number,
+    assistCode: String,
+    stdValue: Number,
+    actualValue:Number,
+    stepValue: String,
+    decimal: Number,
+    carryBit: String,
+    minValue: String,
+    maxValue: String
+}, { _id: false });
+
+
 var gljSchema =new Schema({
     repositoryId: Number,
     ID:Number,
@@ -43,7 +57,8 @@ let rationSchema = new Schema({
     fees: [subSchema.feesSchema],
     // 标记字段
     flags: [subSchema.flagsSchema],
-    deleteInfo: deleteSchema
+    deleteInfo: deleteSchema,
+    rationAssList: [rationAssItemSchema]
 });
 
 mongoose.model("ration", rationSchema, "ration");
@@ -65,4 +80,38 @@ var coeListSchema = mongoose.Schema({
     coes: [coeSchema]
 }, {versionKey: false});
 
- mongoose.model("std_ration_lib_coe_list",coeListSchema, "std_ration_lib_coe_list");
+ mongoose.model("std_ration_lib_coe_list",coeListSchema, "std_ration_lib_coe_list");
+
+var rationGljItemSchema = mongoose.Schema({
+    gljId: Number,
+    consumeAmt: Number,
+    proportion: Number //配合比,暂时无需使用,默认0
+}, { _id: false });
+
+var rationAssItemSchema = mongoose.Schema({
+    name: String,
+    assistID: Number,
+    assistCode: String,
+    stdValue: String,
+    stepValue: String,
+    decimal: Number,
+    carryBit: String,
+    minValue: String,
+    maxValue: String
+}, { _id: false });
+
+var rationItemSchema = mongoose.Schema({
+    ID:Number,
+    code: String,
+    name: String,
+    unit: String,
+    basePrice: Number,
+    sectionId: Number,
+    rationRepId: Number,
+    caption: String,
+    feeType: Number,
+    rationGljList: [rationGljItemSchema],
+    rationCoeList: Array,
+    rationAssList: [rationAssItemSchema]
+});
+mongoose.model("std_ration_lib_ration_items",rationItemSchema, "std_ration_lib_ration_items")

+ 1 - 0
public/web/sheet/sheet_common.js

@@ -129,6 +129,7 @@ var sheetCommonObj = {
                 sheet.setValue(row, col, val, ch);
             }
         }
+        this.lockCells(sheet,setting);
         sheet.resumeEvent();
         sheet.resumePaint();
         //me.shieldAllCells(sheet);

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

@@ -486,6 +486,7 @@
     <script type="text/javascript" src="/web/building_saas/main/js/models/fee_rate.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/ration_glj.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/ration_coe.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/ration_ass.js"></script>
 
     <script type="text/javascript" src="/public/web/id_tree.js"></script>
     <script type="text/javascript" src="/web/building_saas/main/js/models/cache_tree.js"></script>

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

@@ -8,5 +8,6 @@ const ModuleNames = {
     feeRate: 'feeRate',
     projectGLJ: 'projectGLJ',
     ration_glj:'ration_glj',
-    ration_coe:'ration_coe'
+    ration_coe:'ration_coe',
+    ration_ass:'ration_ass'
 };

+ 1 - 0
web/building_saas/main/js/models/project.js

@@ -60,6 +60,7 @@ var PROJECT = {
             this.GLJ = GLJ.createNew(this);
             this.ration_glj = ration_glj.createNew(this);
             this.ration_coe = ration_coe.createNew(this);
+            this.ration_ass = ration_ass.createNew(this);
             this.FeeRate = FeeRate.createNew(this);
 
             this.masterField = {ration: 'billsItemID'};

+ 3 - 1
web/building_saas/main/js/models/ration.js

@@ -54,7 +54,7 @@ var Ration = {
             this.maxRationID(ID);
         }
 
-        // 提交数据后的错误处理方法
+        // 提交数据后更新前端缓存
         ration.prototype.doAfterUpdate = function(err, data){
             // to do
         };
@@ -125,6 +125,8 @@ var Ration = {
                     data.updateData.code = std.code;
                     data.updateData.name = std.name;
                     data.updateData.unit = std.unit;
+                    data.updateData.libID = std.rationRepId;
+                    data.updateData.rationAssList =  projectObj.project.ration_ass.CreateNewAss(std);
                     newRation = data.updateData;
                 }
             });

+ 126 - 0
web/building_saas/main/js/models/ration_ass.js

@@ -0,0 +1,126 @@
+/**
+ * Created by Mai on 2017/4/1.
+ */
+var ration_ass = {
+    createNew: function (project) {
+        // 用户定义private方法
+        var tools = {};
+
+        // 所有通过this访问的属性,都不应在此单元外部进行写入操作
+        var ration_ass = function (proj) {
+            this.gljTree = cacheTree.createNew(this);
+           // this.project = proj;
+            this.datas = [];
+
+            var sourceType = ModuleNames.ration_ass;
+            this.getSourceType = function () {
+                return sourceType;
+            }
+            proj.registerModule(ModuleNames.ration_ass, this);
+        };
+
+        // prototype用于定义public方法
+        ration_ass.prototype.loadData = function (datas) {
+            this.datas = datas;
+        };
+
+        // 提交数据后返回数据处理
+        ration_ass.prototype.doAfterUpdate = function(err, data){
+            if(!err){
+                if(data.updateTpye=='ut_update'){
+                    this.refreshAfterUpdate(data);
+                }else if(data.updateTpye=='ut_delete'){
+                    this.refreshAfterDelete(data);
+                } else {
+                    this.refreshAfterSave(data);
+                }
+            }
+        };
+        ration_ass.prototype.refreshAfterSave=function(data){
+
+        };
+        ration_ass.prototype.refreshAfterUpdate=function(data){
+            console.log(data)
+            this.updateRation(data.rationID,data.doc);
+            this.updateRationGLJ(data.ration_glj_list);
+            gljOprObj.assSheetData[data.editIndex].actualValue = data.actualValue;
+            sheetCommonObj.showData(gljOprObj.assSheet,gljOprObj.assSetting,gljOprObj.assSheetData);
+        };
+
+        ration_ass.prototype.updateRation = function (rationID,doc) {
+            var index =  _.findIndex(projectObj.project.Ration.datas,(ration)=>{
+                return ration.ID==rationID;
+            })
+            projectObj.project.Ration.datas[index].rationAssList = doc.rationAssList
+        };
+
+        ration_ass.prototype.updateRationGLJ = function (updateList) {
+            for(var i=0;i<updateList.length;i++){
+                var index =  _.findIndex(projectObj.project.ration_glj.datas,(glj)=>{
+                    return glj.ID==updateList[i].ID;
+                })
+                projectObj.project.ration_glj.datas[index].quantity=updateList[i].quantity;
+
+                var showIndex =  _.findIndex(gljOprObj.sheetData,(shglj)=>{
+                    return shglj.ID==updateList[i].ID;
+                })
+                gljOprObj.sheetData[showIndex].quantity=updateList[i].quantity;
+            }
+            sheetCommonObj.showData(gljOprObj.sheet,gljOprObj.setting,gljOprObj.sheetData);
+        };
+
+        ration_ass.prototype.refreshAfterDelete=function(data){
+            var glj_list = projectObj.project.ration_coe.datas;
+            _.remove(glj_list,data.query);
+            _.remove(gljOprObj.sheetData,data.query);
+            sheetCommonObj.showData(gljOprObj.coeSheet,gljOprObj.coeSetting,gljOprObj.sheetData);
+        };
+        ration_ass.prototype.CreateNewAss = function (std) {
+            var newAssList = []
+            if(std.hasOwnProperty('rationAssList')&&std.rationAssList.length>0){
+                for(var i=0;i<std.rationAssList.length;i++){
+                    var ass = std.rationAssList[i];
+                    ass.actualValue = ass.stdValue;
+                    newAssList.push(ass);
+                }
+            }
+            return newAssList;
+        };
+        ration_ass.prototype.getUpdateData=function(type,query,doc,callfunction){
+            var updateData = [];
+            var newobj = {
+                'updateType': type,
+                'query': query,
+            }
+            if(doc){
+                newobj['doc']=doc;
+            }
+            if(callfunction){
+                newobj['updateFunction']=callfunction;
+            }
+            updateData.push(newobj);
+            return updateData;
+        };
+        ration_ass.prototype.updateActualValue=function(assList,index,newVal){
+            var selected = projectObj.project.mainTree.selected;
+            assList[index].actualValue=newVal;
+            var query = {
+                'ration':selected.data,
+                'editAss':assList[index],
+                'editIndex':index
+            };
+            var doc ={
+                rationAssList:assList,
+            };
+
+            var updateData = this.getUpdateData('ut_update',query,doc);
+
+            project.pushNow('updateRationAss',[this.getSourceType()],updateData);
+
+        };
+        return new ration_ass(project);
+    }
+
+
+
+};

+ 32 - 5
web/building_saas/main/js/models/ration_coe.js

@@ -47,15 +47,15 @@ var ration_coe = {
             // SheetDataHelper.loadSheetData(setting, rationLibObj.sectionRationsSpread.getActiveSheet(), datas);
         };
         ration_coe.prototype.refreshAfterUpdate=function(data){
-            var glj_list = projectObj.project.ration_coe.datas;
-            var glj_index= _.findIndex(glj_list,(glj)=>{
-                return glj.ID==data.query.ID&&glj.projectID==data.query.projectID;
+            var coe_list = projectObj.project.ration_coe.datas;
+            var coe_index= _.findIndex(coe_list,(coe)=>{
+                return coe.ID==data.query.ID&&coe.projectID==data.query.projectID;
             })
             _.forEach(data.doc, function(n, key) {
-                glj_list[glj_index][key] = n;
+                coe_list[coe_index][key] = n;
             });
 
-            var showList = _.filter(glj_list,{'projectID':data.query.projectID,'rationID':glj_list[glj_index].rationID});
+            var showList = _.filter(coe_list,{'projectID':data.query.projectID,'rationID':coe_list[coe_index].rationID});
             gljOprObj.coeSheetData=showList;
            sheetCommonObj.showData(gljOprObj.coeSheet,gljOprObj.coeSetting,showList);
         };
@@ -92,6 +92,33 @@ var ration_coe = {
             criteria.updateType = 'ut_create';
             return criteria;
         };
+        ration_coe.prototype.getUpdateData=function(type,query,doc,callfunction){
+            var updateData = [];
+            var newobj = {
+                'updateType': type,
+                'query': query,
+            }
+            if(doc){
+                newobj['doc']=doc;
+            }
+            if(callfunction){
+                newobj['updateFunction']=callfunction;
+            }
+            updateData.push(newobj);
+            return updateData;
+        };
+        ration_coe.prototype.adjustCoeClick = function(recode,newval){
+            var query = {
+                'ID':recode.ID,
+                'projectID': recode.projectID
+            };
+            var doc ={
+                isAdjust:newval,
+            };
+            var updateData = this.getUpdateData('ut_update',query,doc);
+            project.pushNow('updateRationCOE',[this.getSourceType()],updateData);
+        };
+
         ration_coe.prototype.deleteByRation = function(ration){
             var coe_list = projectObj.project.ration_coe.datas;
             var newList =_.filter(coe_list,(coe)=>{

File diff suppressed because it is too large
+ 206 - 15
web/building_saas/main/js/views/glj_view.js


+ 5 - 1
web/building_saas/main/js/views/sub_view.js

@@ -15,6 +15,10 @@ gljOprObj.initSheet(subSpread.getSheet(0));
 //附注条件
 gljOprObj.initCoeSheet(subSpread.getSheet(2));
 
+//辅助定额
+
+gljOprObj.initAssSheet(subSpread.getSheet(1));
+
 $("#linkGLJ").click(function(){
     subSpread.setActiveSheetIndex(0);
 
@@ -25,7 +29,7 @@ $("#linkGLJ").click(function(){
 $("#linkFZDE").click(function(){
     subSpread.setActiveSheetIndex(1);
     // for test
-    subSpread.getActiveSheet().setValue(0, 0, "辅助定额");
+  //  subSpread.getActiveSheet().setValue(0, 0, "辅助定额");
 });
 
 $("#linkFZTJ").click(function(){