| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726 |
- /**
- * 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;
- };
- 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.getChildrenByID = function (ID) {
- ID = parseInt(ID);
- let rates = this.getActivateFeeRate().rates;
- return _.filter(rates, {
- 'ParentID': ID
- });
- };
- FeeRate.prototype.getAllSubRates = function (trates) {
- let rates = trates ? trates : this.getActivateFeeRate().rates;
- let subRates = [],
- nameMap = {},
- temRates = [];
- for (let r of rates) {
- if (gljUtil.isDef(r.subFeeRate)) {
- for (let p of r.subFeeRate.recodes) {
- if (nameMap[p.name] == true) continue;
- nameMap[p.name] = true;
- subRates.push(p);
- if (p.subList && p.subList.length > 0) {
- for (let sub of p.subList) {
- sub.isSub = true;
- sub.ParentID = p.ID;
- subRates.push(sub);
- }
- }
- }
- }
- }
- return _.sortByAll(subRates, ['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();
- };
- $.bootstrapLoading.start();
- CommonAjax.post('/feeRates/updateRates', data, function (result) {
- _.forEach(items, function (t) {
- feeRateObject.mainFeeRateSheet.setValue(t.rateIndex, 1, t.rate.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.refreshCalcProgram(node, 3);
- }
- }
- };
- FeeRate.prototype.ifRateChange = function (params) {
- if (params.dataItem.memo == params.oldDataItem.memo) {
- return true;
- } else {
- return false;
- }
- };
- FeeRate.prototype.onFeeRateChange = function (rateID, value) {
- this.onFeeRatesChange([{
- rateID: rateID,
- value: value
- }]);
- };
- FeeRate.prototype.onFeeRatesChange = async function (infos) { //{rateID:'AAAA',value:23}
- let node = project.mainTree.selected;
- let me = this;
- let rateMap = {};
- for (let i of infos) {
- rateMap[i.rateID] = i.value;
- this.refreshBillsByRateID(i.rateID, i.value);
- }
- this.refreshCalProgramByRateID(rateMap);
- if (node) {
- if (node.sourceType === 'ration' && calcProgramObj.sheet) {
- calcProgramObj.refreshCalcProgram(node, 3);
- }
- }
- await project.projectGLJ.calcAllMaterialWhenChange();
- project.calcProgram.calcAllNodesAndSave(calcAllType.catAll, function () {
- $.bootstrapLoading.start();
- project.markUpdateProject({
- projectID: project.ID(),
- feeRateID: me.getActivateFeeRateFileID()
- }, "feeRate", function () {
- $.bootstrapLoading.end();
- socket.emit('feeRateChangeNotify', {
- projectID: project.ID(),
- feeRateID: me.getActivateFeeRateFileID(),
- userID: userID
- });
- });
- });
- };
- FeeRate.prototype.onFeeRateFileChange = function () { //整个费率文件换了,原费率文件内容不变
- this.refreshCalProgramWhenFeeFileChange();
- this.refreshBillsWhenFeeFileChange();
- let me = this;
- var node = project.mainTree.selected;
- if (node) {
- if (node.sourceType === 'ration' && calcProgramObj.sheet) {
- calcProgramObj.refreshCalcProgram(node, 3);
- }
- }
- project.calcProgram.calcAllNodesAndSave(calcAllType.catAll, function () {
- if (socketObject.roomInfo) {
- //判断费率文件ID是否改变了
- if (socketObject.roomInfo.feeRate == me.getActivateFeeRateFileID()) { //如果没变,则是重选了标准
- console.log(me.getActivateFeeRateFileID());;
- project.markUpdateProject({
- projectID: project.ID(),
- feeRateID: me.getActivateFeeRateFileID()
- }, "feeRate", function () {
- socket.emit('feeRateChangeNotify', {
- projectID: project.ID(),
- feeRateID: socketObject.roomInfo.feeRate,
- userID: userID
- });
- });
- } else {
- let data = {
- projectID: project.ID(),
- oldRoom: socketObject.roomInfo.feeRate,
- newRoom: me.getActivateFeeRateFileID(),
- userID: userID,
- name: 'feeRate'
- };
- socket.emit('changeNewRoom', data);
- socketObject.roomInfo.feeRate = me.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 (rateMap) {
- var templates = project.calcProgram.datas.templates;
- for (var i = 0; i < templates.length; i++) {
- _.forEach(templates[i].calcItems, function (item) {
- if (rateMap[item.feeRateID]) {
- item.feeRate = rateMap[item.feeRateID];
- }
- })
- }
- project.calcProgram.compileAllTemps();
- calcProgramManage.refreshDetailSheet();
- };
- FeeRate.prototype.refreshBillsByRateID = function (rateID, value) {
- let 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,
- "decimal": getDecimal("feeRate")
- };
- CommonAjax.post('/feeRates/changeFeeRateStandard', data, function (data) {
- if (data) {
- me.datas.libID = data.libID;
- me.datas.libName = data.libName;
- me.datas.feeRateID = data.feeRateID;
- if (newVal == feeRate.libID) { //如果是本身,则是恢复标准值,设置回旧的树节点折叠属性
- let oldRates = me.datas.rates;
- for (let i = 0; i < oldRates.length; i++) {
- if (data.rates[i] && data.rates[i].ID == oldRates[i].ID) data.rates[i].collapsed = oldRates[i].collapsed;
- }
- }
- 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: projectObj.project.projectInfo.name,
- ID: projectObj.project.projectInfo.ID
- });
- var data = {
- query: {
- projectID: projectObj.project.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 = projectObj.project.projectInfo.ID;
- var feeRate = this.getActivateFeeRate();
- var rootProjectID = feeRate.rootProjectID;
- if (!rootProjectID) {
- rootProjectID = projectObj.project.projectInfo.property.rootProjectID;
- }
- var data = {
- "user_id": userID,
- "projectID": projectObj.project.ID(),
- "rootProjectID": rootProjectID
- };
- CommonAjax.post('/feeRates/getChangeInfo', data, function (data) {
- let newDataOther = [];
- if (data.others.length > 0) {
- let fileHierarchyDatas = getFileHierarchyInfo(data.treeData);
- for (let fileHierarchyData of fileHierarchyDatas) {
- let projData = _.find(data.others, {
- ID: fileHierarchyData.ID
- });
- if (projData) {
- projData.name = fileHierarchyData.fileHierarchyName;
- newDataOther.push(projData);
- }
- }
- data.others = newDataOther;
- }
- callback(data);
- });
- };
- FeeRate.prototype.updateFeeRateFromBills = function (value, node) {
- var me = this;
- if (node.sourceType === project.Bills.getSourceType()) {
- if (value === '' || value === null || value === undefined) { //费费为空或空字符串时,请空对应的费率值和ID
- node.updateData.feeRateID = null;
- node.updateData.feeRate = null;
- node.changed = true;
- project.calcProgram.calcAndSave(node);
- } else {
- 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 {
- projectObj.mainController.refreshTreeNode([node]);
- }
- }
- }
- };
- FeeRate.prototype.updateFeeRateFromCalc = function (value, editInfo) {
- if (value != null) {
- value = number_util.checkNumberValue(value, getDecimal("feeRate"));
- if (value == null) {
- calcProgramManage.refreshDetailSheet();
- $.bootstrapLoading.end();
- }
- }
- /* if(editInfo.calcItem.feeRateID && value!= null){
- var rate = this.getFeeRateByID(editInfo.calcItem.feeRateID);
- if(rate!=undefined){
- this.updateFeeRateByCalc(rate,value);
- return;
- }
- }*/
- if (editInfo.calcItem.feeRateID) {
- var rate = this.getFeeRateByID(editInfo.calcItem.feeRateID);
- if (rate != undefined) {
- if (value == null) value = 0;
- 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();
- project.calcProgram.calcAllNodesAndSave();
- calcProgramManage.refreshDetailSheet();
- $.bootstrapLoading.end();
- })
- };
- FeeRate.prototype.updateFeeRateByCalc = function (rate, value) {
- var me = this;
- me.updateFeeRateByID(rate.ID, {
- 'rate': value
- }, function () {
- me.onFeeRateChange(rate.ID, value);
- })
- };
- FeeRate.prototype.updateFeeRateByID = function (rateID, doc, callback) {
- let me = this,
- preKey = 'rates.$.';
- /*let data = {
- query:{
- 'ID':me.getActivateFeeRateID(),
- 'rates.ID':rateID
- },
- doc:{}
- };
- for(let prop in doc){//做了个转换,加上前缀
- data.doc[preKey+prop] = doc[prop];
- }
- CommonAjax.post('/feeRates/updateFeeRate', data, function (data) {
- //更新缓存
- let rate = me.getFeeRateByID(rateID);
- for(let dkey in doc){
- rate[dkey] = doc[dkey];
- }
- if(callback){
- callback();
- }
- });*/
- me.updateFeeRatesByIDs([{
- rateID: rateID,
- doc: doc
- }], callback);
- };
- FeeRate.prototype.updateFeeRatesByIDs = function (datas, callback) {
- let me = this,
- preKey = 'rates.$.';
- let updateDatas = [];
- for (let d of datas) {
- let u = {
- query: {
- 'ID': me.getActivateFeeRateID(),
- 'rates.ID': d.rateID
- },
- doc: {}
- }
- for (let prop in d.doc) { //做了个转换,加上前缀
- u.doc[preKey + prop] = d.doc[prop];
- }
- updateDatas.push(u);
- }
- CommonAjax.post('/feeRates/updateFeeRates', updateDatas, function (result) {
- //更新缓存
- for (let d of datas) {
- let rate = me.getFeeRateByID(d.rateID);
- for (let dkey in d.doc) {
- rate[dkey] = d.doc[dkey];
- }
- }
- if (callback) {
- callback();
- }
- });
- };
- 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) {
- let me = this;
- let projectID = projectObj.project.projectInfo.ID;
- let 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) {
- let me = this;
- let projectID = projectObj.project.projectInfo.ID;
- let data = {
- "projectID": projectID,
- "feeRateFileID": feeRateFileID,
- "name": name,
- "userID": userID,
- "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;
- },
- };
|