| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532 | /** * Created by CSL on 2017-06-20. *///var ModuleNames = require('./main_consts.js');var FeeRate = {    createNew: function (project) {        function FeeRate(proj){            this.datas = null;            this.datasBackup = null;            this.sourceType = ModuleNames.feeRate;            proj.registerModule(ModuleNames.feeRate, this);        };        FeeRate.prototype.loadData = function (datas) {            this.datas = datas;            socketObject.connect();        };        FeeRate.prototype.backupDatas=function () {          this.datasBackup = _.cloneDeep(this.datas);        };        FeeRate.prototype.dataRecovery=function () {            this.datas = this.datasBackup;            feeRateObject.activateFeeRate = this.getActivateFeeRate();            feeRateObject.datas = feeRateObject.activateFeeRate.rates;        };        FeeRate.prototype.getActivateFeeRate = function () {            var feeRate={                rates:[]            };            if(this.datas){                feeRate = this.datas;            }            return feeRate;        };        FeeRate.prototype.getActivateFeeRateFileID = function(){            var feeRate = this.getActivateFeeRate();            if(feeRate){                return feeRate.ID;            }else {                return 0;            }        };        FeeRate.prototype.getActivateFeeRateID = function(){            var feeRate = this.getActivateFeeRate();            if(feeRate){                return feeRate.feeRateID;            }else {                return 0;            }        };        FeeRate.prototype.getFeeRateByID=function (ID) {            ID=parseInt(ID);            var rates = this.getActivateFeeRate().rates;            return _.find(rates,{'ID':ID})        };        FeeRate.prototype.getSubViewData= function(item) {            var datas = [];            if(item.hasOwnProperty('subFeeRate')&&item.subFeeRate!=undefined){                datas = item.subFeeRate.recodes;            }            return datas;        };        FeeRate.prototype.getValueMap= function(item) {            var valueMap = {};            if(item.hasOwnProperty('subFeeRate')&&item.subFeeRate!=undefined){                var recodes = item.subFeeRate.valueMaps;                _.forEach(recodes,function (r) {                    valueMap[r.ID] = r.value;                })                return valueMap;            }else {                return null;            }        };        FeeRate.prototype.getOptions=function (options,subRates,parentID,itemID) {            var data = {};            var list = _.filter(subRates, {'ParentID':parentID});            if(list&&list.length>0){                if(parentID==-1){                    data.ID = itemID+'_'+0;                }else {                    data.ID = itemID+'_'+parentID;                }                data.name = list[0].type;                data.optionList=[];            }            var nexParent = null;            _.forEach(list,function (c) {                var option={};                option.name = c.name;                option.value = c.ID;                option.selected = c.selected;                data.optionList.push(option);                if(c.selected&&!c.isLeaf){                    nexParent = c.ID;                }            })            options.push(data);            if(nexParent!=null){                this.getOptions(options,subRates,nexParent,itemID);            }        };        FeeRate.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;        };        FeeRate.prototype.updateFeeRateByEdit = function(params,feerate){            var query={                ID:feerate.feeRateID            };            var doc ={                rateIndex:params.sourceIndex,                rate:params.dataItem            }            doc.rate.rate =doc.rate.rate.toDecimal(getDecimal("feeRate"));            this.updateFeeRate(query,doc);            if(this.ifRateChange(params)){                //this.synchronizeFeeRate();                this.onFeeRateChange(params.dataItem.ID,params.dataItem.rate);            }            $.bootstrapLoading.end();        };        FeeRate.prototype.batchUpdateFeeRate = function (items,feerate) {            var me = this;            var data={                query:{                    ID:feerate.feeRateID                },                doc:items,                user_id:userID            }            var errCallBack=function () {                me.dataRecovery();                $.bootstrapLoading.end();            }            CommonAjax.post('/feeRates/updateRates', data, function (result) {                _.forEach(items,function (t) {                     feeRateObject.mainViews.data.updateItem(t.rateIndex,t.rate);                 })                 me.onFeeRateFileChange();                $.bootstrapLoading.end();            },errCallBack);        };        FeeRate.prototype.updateFeeRate=function (query,doc) {          var updateData = this.getUpdateData('ut_update',query,doc,'update_rates');            project.pushNow('updateFeeRate',[this.sourceType],updateData);        };        FeeRate.prototype.updateStatusBySelected = function (updateTasks) {            var updateData = [];            var newobj = {                'updateType': 'ut_update',                'tasks': updateTasks,                'updateFunction':'updateStatusBySelected'            }            updateData.push(newobj);            project.pushNow('updateFeeRate',[this.sourceType],updateData);        };        FeeRate.prototype.synchronizeFeeRate = function () {            var node = project.mainTree.selected;            if(node){                if (node.sourceType==='ration' && calcProgramObj.sheet) {                    calcProgramObj.showData(node);                }            }        };        FeeRate.prototype.ifRateChange=function (params) {            if(params.dataItem.memo==params.oldDataItem.memo){                return true;            }else {                return false;            }        };        FeeRate.prototype.onFeeRateChange=function (rateID,value) {            var node = project.mainTree.selected;            this.refreshCalProgramByRateID(rateID,value);            this.refreshBillsByRateID(rateID,value);            if(node){                if (node.sourceType==='ration' && calcProgramObj.sheet) {                    calcProgramObj.showData(node);                }            }            project.calcProgram.calcAllNodes(calcAllType.catBills);            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());        };        FeeRate.prototype.onFeeRateFileChange=function () {            this.refreshCalProgramWhenFeeFileChange();            this.refreshBillsWhenFeeFileChange();            var node = project.mainTree.selected;            if(node){                if (node.sourceType==='ration' && calcProgramObj.sheet) {                    calcProgramObj.showData(node);                }            }            project.calcProgram.calcAllNodes(calcAllType.catBills);            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());        };        FeeRate.prototype.refreshBillsWhenFeeFileChange=function(){            var me = this;            var nodes = _.filter(projectObj.project.mainTree.items,function (n) {                if(n.sourceType==ModuleNames.bills&&n.data.feeRateID){                    if(n.data.hasOwnProperty("feeRateID")&&n.data.feeRateID){                        var rate = me.getFeeRateByID(n.data.feeRateID);                        if(rate){                            n.data.feeRate=number_util.roundToString(rate.rate,getDecimal("feeRate"));                            return true;                        }else {                            n.data.feeRate=null;                            return true;                        }                    }                }                return false;            })            if(nodes.length>0){                projectObj.mainController.refreshTreeNode(nodes)            }        };        FeeRate.prototype.refreshCalProgramWhenFeeFileChange=function () {            var me = this;            var templates = project.calcProgram.datas.templates;            for(var i =0;i<templates.length;i++){                _.forEach(templates[i].calcItems,function (item) {                    if(item.hasOwnProperty("feeRateID")&&item.feeRateID){                        var rate = me.getFeeRateByID(item.feeRateID);                        if(rate){                            item.feeRate = rate.rate;                        }                    }                })            }            project.calcProgram.compileAllTemps();            calcProgramManage.refreshDetailSheet();        }        FeeRate.prototype.refreshCalProgramByRateID=function (rateID,value) {            var templates = project.calcProgram.datas.templates;            for(var i =0;i<templates.length;i++){                _.forEach(templates[i].calcItems,function (item) {                    if(item.feeRateID==rateID){                        item.feeRate = value;                    }                })            }            project.calcProgram.compileAllTemps();            calcProgramManage.refreshDetailSheet();        };        FeeRate.prototype.refreshBillsByRateID=function(rateID,value){            var nodes = _.filter(projectObj.project.mainTree.items,function (n) {                if(n.sourceType==ModuleNames.bills&&n.data.feeRateID==rateID){                    n.data.feeRate=number_util.roundToString(value,getDecimal("feeRate"));                    return true;                }else {                    return false;                }            })            if(nodes.length>0){                projectObj.mainController.refreshTreeNode(nodes)            }        };        FeeRate.prototype.changeFeeRateStandard=function(newVal,callback){            var me =this;            var feeRate = this.getActivateFeeRate();            var data={                "newLibID": newVal,                "feeRateFileID":feeRate.ID,                "feeRateID":feeRate.feeRateID,                "user_id":userID            };            CommonAjax.post('/feeRates/changeFeeRateStandard', data, function (data) {                if (data) {                    me.datas.libID=data.libID;                    me.datas.libName=data.libName;                    me.datas.feeRateID=data.feeRateID;                    me.datas.rates=data.rates;                    me.onFeeRateFileChange();                    callback();                }            },function () {                $.bootstrapLoading.end();            });        };        FeeRate.prototype.checkFeeRateName = function(newVal,callback){            var me =this;            var feeRate = this.getActivateFeeRate();            var data = {                name:newVal,                rootProjectID:feeRate.rootProjectID            }            CommonAjax.post('/feeRates/checkFeeRateName', data, function (data) {                callback(data);            });        };        FeeRate.prototype.feeRateFileSaveAs = function (newName,callback) {            var me = this;            $.bootstrapLoading.start();            this.backupDatas();            this.datas.name = newName;            this.datas.ID = uuid.v1();            this.datas.feeRateID=uuid.v1();            this.datas.usageProjects=[];            this.datas.usageProjects.push({name:projectInfoObj.projectInfo.name,ID:projectInfoObj.projectInfo.ID});            var data={                query:{projectID:projectInfoObj.projectInfo.ID},                doc:this.datas,                user_id:userID            }            CommonAjax.post('/feeRates/feeRateFileSaveAs', data, function (data) {                callback(me.datas);            },function () {                me.dataRecovery();                $.bootstrapLoading.end();            });        };        FeeRate.prototype.getChangeInfo = function (callback) {           // var projectID = projectInfoObj.projectInfo.ID;            var feeRate = this.getActivateFeeRate();            var  rootProjectID= feeRate.rootProjectID;            if(!rootProjectID){                rootProjectID=projectInfoObj.projectInfo.property.rootProjectID;            }            var data={                "user_id":userID,                "rootProjectID":rootProjectID            };            CommonAjax.post('/feeRates/getChangeInfo', data, function (data) {                callback(data);            });        };        FeeRate.prototype.updateFeeRateFromBills=function(value,node){            var me =this;            if(node.sourceType === project.Bills.getSourceType()){                var fee_value= number_util.checkNumberValue(value,getDecimal("feeRate"));                if(fee_value!=null){                    var bill = node.data;                    var rate =me.getFeeRateByID(bill.feeRateID);                    var data=me.getfbUpdateData(rate,bill,fee_value,value);                    if(data==null){//只更改清单的值的情况下,由计算程序更新                        project.calcProgram.calcAndSave(node);                    }                    this.setFeeRateToBill(data,function (result) {                        if(data.hasOwnProperty('feeRate')){                            rate.rate=fee_value;                            me.onFeeRateChange(rate.ID,fee_value);                        }/*else {                            bill.feeRate=value;                            projectObj.mainController.refreshTreeNode([node])                        }*/                    });                }else {                    projectObj.mainController.refreshTreeNode([node]);                }            }        };        FeeRate.prototype.updateFeeRateFromCalc=function (value,editInfo) {            var value= number_util.checkNumberValue(value,getDecimal("feeRate"));            if(value){                if(editInfo.calcItem.feeRateID){                    var rate = projectObj.project.FeeRate.getFeeRateByID(editInfo.calcItem.feeRateID);                    if(rate!=undefined){                        this.updateFeeRateByCalc(rate,value);                        return;                    }                }                editInfo.calcItem.feeRate=value;                editInfo.calcItem.feeRateID=null;                var data={'projectID': projectObj.project.ID(),'templatesID': editInfo.template.ID,'calcItem': editInfo.calcItem};                calcProgramManage.saveCalcItem(data,function (result) {                    project.calcProgram.compileAllTemps();                    calcProgramManage.refreshDetailSheet();                })            }else {                calcProgramManage.refreshDetailSheet();            }        };        FeeRate.prototype.updateFeeRateByCalc=function (rate,value) {            var me=this;            var data={                query:{                    'ID':this.getActivateFeeRateID(),                    'rates.ID':rate.ID                },                doc:{                    'rates.$.rate':value                }            }            CommonAjax.post('/feeRates/updateFeeRate', data, function (data) {                rate.rate=value;                me.onFeeRateChange(rate.ID,value);            });        }        FeeRate.prototype.getfbUpdateData=function (rate,bill,value,editText) {            var data=null;            if(bill.feeRateID&&editText!=null){                data = {};                data.feeRate={                    query:{                        'ID':this.getActivateFeeRateID(),                        'rates.ID':rate.ID                    },                    doc:{                        'rates.$.rate':value                    }                }            }else  if(editText==null){                bill.feeRateID = null;                bill.feeRate =null;            }else { //这里只改变当前清单的费率值,不在这里提交后台,交给计算程序处理。                bill["feeRate"]=value              /*  data.bills={                    query:{                        ID:bill.ID,                        projectID:bill.projectID,                        deleteInfo:null                    },                    doc:{                        feeRate:value                    }                }*/            }            return data;        };        FeeRate.prototype.cleanFeeRateID=function (node) {            var data ={                bills:{                    query:{                        ID:node.data.ID,                        projectID:node.data.projectID,                        deleteInfo:null                    },                    doc:{                        feeRate:null,                        feeRateID:null                    }                }            }            this.setFeeRateToBill(data,function (result) {                node.data.feeRate=null;                node.data.feeRateID=null;            });        };        FeeRate.prototype.submitFeeRateFromBill=function (rate,bills,callback) {            var data ={                    bills:{                        query:{                            ID:bills.ID,                            projectID:bills.projectID,                            deleteInfo:null                        },                        doc:{                            feeRate:null,                            feeRateID:rate.ID                        }                    }                }            this.setFeeRateToBill(data,callback);        };               FeeRate.prototype.setFeeRateToBill=function(data,callback){            if(data){                CommonAjax.post('/feeRates/setFeeRateToBill', data, function (data) {                    callback(data);                });            }        };        FeeRate.prototype.loadFeeRateToBill=function (node) {            if(node.data.feeRateID){                var feeRate = this.getFeeRateByID(node.data.feeRateID);                if(feeRate){                    node.data.feeRate=number_util.roundToString(feeRate.rate,getDecimal("feeRate"));// parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);                }            }        };        FeeRate.prototype.changeFeeRateFileFromCurrent = function (newFeeRateFile,callback){            var me=this;            var projectID = projectInfoObj.projectInfo.ID;            var data={                "projectID": projectID,                "newFeeRateFile":newFeeRateFile            };            CommonAjax.post('/feeRates/changeFeeRateFileFromCurrent', data, function (data) {                if (data) {                    me.datas=data;                    callback();                }            },function () {                $.bootstrapLoading.end();            });        };        FeeRate.prototype.changeFeeRateFileFromOthers=function (feeRateFileID,name,callback) {            var me = this;            var projectID = projectInfoObj.projectInfo.ID;            var data={                "projectID": projectID,                "feeRateFileID":feeRateFileID,                "name":name,                "rootProjectID":me.getActivateFeeRate().rootProjectID            };            CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {                if (data) {                    me.datas=data;                    callback();                }            },function () {                $.bootstrapLoading.end();            });        };        var feeRate = new FeeRate(project);        return feeRate;    },};
 |