fee_rate.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. /**
  2. * Created by CSL on 2017-06-20.
  3. */
  4. //var ModuleNames = require('./main_consts.js');
  5. var FeeRate = {
  6. createNew: function (project) {
  7. function FeeRate(proj) {
  8. this.datas = null;
  9. this.datasBackup = null;
  10. this.sourceType = ModuleNames.feeRate;
  11. proj.registerModule(ModuleNames.feeRate, this);
  12. };
  13. FeeRate.prototype.loadData = function (datas) {
  14. this.datas = datas;
  15. };
  16. FeeRate.prototype.backupDatas = function () {
  17. this.datasBackup = _.cloneDeep(this.datas);
  18. };
  19. FeeRate.prototype.dataRecovery = function () {
  20. this.datas = this.datasBackup;
  21. feeRateObject.activateFeeRate = this.getActivateFeeRate();
  22. feeRateObject.datas = feeRateObject.activateFeeRate.rates;
  23. };
  24. FeeRate.prototype.getActivateFeeRate = function () {
  25. var feeRate = {
  26. rates: []
  27. };
  28. if (this.datas) {
  29. feeRate = this.datas;
  30. }
  31. return feeRate;
  32. };
  33. FeeRate.prototype.getActivateFeeRateFileID = function () {
  34. var feeRate = this.getActivateFeeRate();
  35. if (feeRate) {
  36. return feeRate.ID;
  37. } else {
  38. return 0;
  39. }
  40. };
  41. FeeRate.prototype.getActivateFeeRateID = function () {
  42. var feeRate = this.getActivateFeeRate();
  43. if (feeRate) {
  44. return feeRate.feeRateID;
  45. } else {
  46. return 0;
  47. }
  48. };
  49. FeeRate.prototype.getFeeRateByID = function (ID) {
  50. ID = parseInt(ID);
  51. var rates = this.getActivateFeeRate().rates;
  52. return _.find(rates, {
  53. 'ID': ID
  54. })
  55. };
  56. FeeRate.prototype.getChildrenByID = function (ID) {
  57. ID = parseInt(ID);
  58. let rates = this.getActivateFeeRate().rates;
  59. return _.filter(rates, {
  60. 'ParentID': ID
  61. });
  62. };
  63. FeeRate.prototype.getAllSubRates = function (trates) {
  64. let rates = trates ? trates : this.getActivateFeeRate().rates;
  65. let subRates = [],
  66. nameMap = {},
  67. temRates = [];
  68. for (let r of rates) {
  69. if (gljUtil.isDef(r.subFeeRate)) {
  70. for (let p of r.subFeeRate.recodes) {
  71. if (nameMap[p.name] == true) continue;
  72. nameMap[p.name] = true;
  73. subRates.push(p);
  74. if (p.subList && p.subList.length > 0) {
  75. for (let sub of p.subList) {
  76. sub.isSub = true;
  77. sub.ParentID = p.ID;
  78. subRates.push(sub);
  79. }
  80. }
  81. }
  82. }
  83. }
  84. return _.sortByAll(subRates, ['ID']) //要保证树节点的ID子项是紧跟着父项的,不然的话显示会有问题
  85. };
  86. FeeRate.prototype.getSubViewData = function (item) {
  87. var datas = [];
  88. if (item.hasOwnProperty('subFeeRate') && item.subFeeRate != undefined) {
  89. datas = item.subFeeRate.recodes;
  90. }
  91. return datas;
  92. };
  93. FeeRate.prototype.getValueMap = function (item) {
  94. var valueMap = {};
  95. if (item.hasOwnProperty('subFeeRate') && item.subFeeRate != undefined) {
  96. var recodes = item.subFeeRate.valueMaps;
  97. _.forEach(recodes, function (r) {
  98. valueMap[r.ID] = r.value;
  99. })
  100. return valueMap;
  101. } else {
  102. return null;
  103. }
  104. };
  105. FeeRate.prototype.getOptions = function (options, subRates, parentID, itemID) {
  106. var data = {};
  107. var list = _.filter(subRates, {
  108. 'ParentID': parentID
  109. });
  110. if (list && list.length > 0) {
  111. if (parentID == -1) {
  112. data.ID = itemID + '_' + 0;
  113. } else {
  114. data.ID = itemID + '_' + parentID;
  115. }
  116. data.name = list[0].type;
  117. data.optionList = [];
  118. }
  119. var nexParent = null;
  120. _.forEach(list, function (c) {
  121. var option = {};
  122. option.name = c.name;
  123. option.value = c.ID;
  124. option.selected = c.selected;
  125. data.optionList.push(option);
  126. if (c.selected && !c.isLeaf) {
  127. nexParent = c.ID;
  128. }
  129. })
  130. options.push(data);
  131. if (nexParent != null) {
  132. this.getOptions(options, subRates, nexParent, itemID);
  133. }
  134. };
  135. FeeRate.prototype.getUpdateData = function (type, query, doc, callfunction) {
  136. var updateData = [];
  137. var newobj = {
  138. 'updateType': type,
  139. 'query': query,
  140. }
  141. if (doc) {
  142. newobj['doc'] = doc;
  143. }
  144. if (callfunction) {
  145. newobj['updateFunction'] = callfunction;
  146. }
  147. updateData.push(newobj);
  148. return updateData;
  149. };
  150. FeeRate.prototype.updateFeeRateByEdit = function (params, feerate) {
  151. var query = {
  152. ID: feerate.feeRateID
  153. };
  154. var doc = {
  155. rateIndex: params.sourceIndex,
  156. rate: params.dataItem
  157. }
  158. doc.rate.rate = doc.rate.rate.toDecimal(getDecimal("feeRate"));
  159. this.updateFeeRate(query, doc);
  160. if (this.ifRateChange(params)) {
  161. //this.synchronizeFeeRate();
  162. this.onFeeRateChange(params.dataItem.ID, params.dataItem.rate);
  163. }
  164. $.bootstrapLoading.end();
  165. };
  166. FeeRate.prototype.batchUpdateFeeRate = function (items, feerate) {
  167. var me = this;
  168. var data = {
  169. query: {
  170. ID: feerate.feeRateID
  171. },
  172. doc: items,
  173. user_id: userID
  174. }
  175. var errCallBack = function () {
  176. me.dataRecovery();
  177. $.bootstrapLoading.end();
  178. };
  179. $.bootstrapLoading.start();
  180. CommonAjax.post('/feeRates/updateRates', data, function (result) {
  181. _.forEach(items, function (t) {
  182. feeRateObject.mainFeeRateSheet.setValue(t.rateIndex, 1, t.rate.rate);
  183. });
  184. me.onFeeRateFileChange();
  185. $.bootstrapLoading.end();
  186. }, errCallBack);
  187. };
  188. FeeRate.prototype.updateFeeRate = function (query, doc) {
  189. var updateData = this.getUpdateData('ut_update', query, doc, 'update_rates');
  190. project.pushNow('updateFeeRate', [this.sourceType], updateData);
  191. };
  192. FeeRate.prototype.updateStatusBySelected = function (updateTasks) {
  193. var updateData = [];
  194. var newobj = {
  195. 'updateType': 'ut_update',
  196. 'tasks': updateTasks,
  197. 'updateFunction': 'updateStatusBySelected'
  198. }
  199. updateData.push(newobj);
  200. project.pushNow('updateFeeRate', [this.sourceType], updateData);
  201. };
  202. FeeRate.prototype.synchronizeFeeRate = function () {
  203. var node = project.mainTree.selected;
  204. if (node) {
  205. if (node.sourceType === 'ration' && calcProgramObj.sheet) {
  206. calcProgramObj.refreshCalcProgram(node, 3);
  207. }
  208. }
  209. };
  210. FeeRate.prototype.ifRateChange = function (params) {
  211. if (params.dataItem.memo == params.oldDataItem.memo) {
  212. return true;
  213. } else {
  214. return false;
  215. }
  216. };
  217. FeeRate.prototype.onFeeRateChange = function (rateID, value) {
  218. this.onFeeRatesChange([{
  219. rateID: rateID,
  220. value: value
  221. }]);
  222. };
  223. FeeRate.prototype.onFeeRatesChange = async function (infos) { //{rateID:'AAAA',value:23}
  224. let node = project.mainTree.selected;
  225. let me = this;
  226. let rateMap = {};
  227. for (let i of infos) {
  228. rateMap[i.rateID] = i.value;
  229. this.refreshBillsByRateID(i.rateID, i.value);
  230. }
  231. this.refreshCalProgramByRateID(rateMap);
  232. if (node) {
  233. if (node.sourceType === 'ration' && calcProgramObj.sheet) {
  234. calcProgramObj.refreshCalcProgram(node, 3);
  235. }
  236. }
  237. await project.projectGLJ.calcAllMaterialWhenChange();
  238. project.calcProgram.calcAllNodesAndSave(calcAllType.catAll, function () {
  239. $.bootstrapLoading.start();
  240. project.markUpdateProject({
  241. projectID: project.ID(),
  242. feeRateID: me.getActivateFeeRateFileID()
  243. }, "feeRate", function () {
  244. $.bootstrapLoading.end();
  245. socket.emit('feeRateChangeNotify', {
  246. projectID: project.ID(),
  247. feeRateID: me.getActivateFeeRateFileID(),
  248. userID: userID
  249. });
  250. });
  251. });
  252. };
  253. FeeRate.prototype.onFeeRateFileChange = function () { //整个费率文件换了,原费率文件内容不变
  254. this.refreshCalProgramWhenFeeFileChange();
  255. this.refreshBillsWhenFeeFileChange();
  256. let me = this;
  257. var node = project.mainTree.selected;
  258. if (node) {
  259. if (node.sourceType === 'ration' && calcProgramObj.sheet) {
  260. calcProgramObj.refreshCalcProgram(node, 3);
  261. }
  262. }
  263. project.calcProgram.calcAllNodesAndSave(calcAllType.catAll, function () {
  264. if (socketObject.roomInfo) {
  265. //判断费率文件ID是否改变了
  266. if (socketObject.roomInfo.feeRate == me.getActivateFeeRateFileID()) { //如果没变,则是重选了标准
  267. console.log(me.getActivateFeeRateFileID());;
  268. project.markUpdateProject({
  269. projectID: project.ID(),
  270. feeRateID: me.getActivateFeeRateFileID()
  271. }, "feeRate", function () {
  272. socket.emit('feeRateChangeNotify', {
  273. projectID: project.ID(),
  274. feeRateID: socketObject.roomInfo.feeRate,
  275. userID: userID
  276. });
  277. });
  278. } else {
  279. let data = {
  280. projectID: project.ID(),
  281. oldRoom: socketObject.roomInfo.feeRate,
  282. newRoom: me.getActivateFeeRateFileID(),
  283. userID: userID,
  284. name: 'feeRate'
  285. };
  286. socket.emit('changeNewRoom', data);
  287. socketObject.roomInfo.feeRate = me.getActivateFeeRateFileID();
  288. }
  289. }
  290. });
  291. };
  292. FeeRate.prototype.refreshBillsWhenFeeFileChange = function () {
  293. var me = this;
  294. var nodes = _.filter(projectObj.project.mainTree.items, function (n) {
  295. if (n.sourceType == ModuleNames.bills && n.data.feeRateID) {
  296. if (n.data.hasOwnProperty("feeRateID") && n.data.feeRateID) {
  297. var rate = me.getFeeRateByID(n.data.feeRateID);
  298. if (rate) {
  299. n.data.feeRate = number_util.roundToString(rate.rate, getDecimal("feeRate"));
  300. return true;
  301. } else {
  302. n.data.feeRate = null;
  303. return true;
  304. }
  305. }
  306. }
  307. return false;
  308. })
  309. if (nodes.length > 0) {
  310. projectObj.mainController.refreshTreeNode(nodes)
  311. }
  312. };
  313. FeeRate.prototype.refreshCalProgramWhenFeeFileChange = function () {
  314. var me = this;
  315. var templates = project.calcProgram.datas.templates;
  316. for (var i = 0; i < templates.length; i++) {
  317. _.forEach(templates[i].calcItems, function (item) {
  318. if (item.hasOwnProperty("feeRateID") && item.feeRateID) {
  319. var rate = me.getFeeRateByID(item.feeRateID);
  320. if (rate) {
  321. item.feeRate = rate.rate;
  322. }
  323. }
  324. })
  325. }
  326. project.calcProgram.compileAllTemps();
  327. calcProgramManage.refreshDetailSheet();
  328. }
  329. FeeRate.prototype.refreshCalProgramByRateID = function (rateMap) {
  330. var templates = project.calcProgram.datas.templates;
  331. for (var i = 0; i < templates.length; i++) {
  332. _.forEach(templates[i].calcItems, function (item) {
  333. if (rateMap[item.feeRateID]) {
  334. item.feeRate = rateMap[item.feeRateID];
  335. }
  336. })
  337. }
  338. project.calcProgram.compileAllTemps();
  339. calcProgramManage.refreshDetailSheet();
  340. };
  341. FeeRate.prototype.refreshBillsByRateID = function (rateID, value) {
  342. let nodes = _.filter(projectObj.project.mainTree.items, function (n) {
  343. if (n.sourceType == ModuleNames.bills && n.data.feeRateID == rateID) {
  344. n.data.feeRate = number_util.roundToString(value, getDecimal("feeRate"));
  345. return true;
  346. } else {
  347. return false;
  348. }
  349. });
  350. if (nodes.length > 0) {
  351. projectObj.mainController.refreshTreeNode(nodes)
  352. }
  353. };
  354. FeeRate.prototype.changeFeeRateStandard = function (newVal, callback) {
  355. var me = this;
  356. var feeRate = this.getActivateFeeRate();
  357. var data = {
  358. "newLibID": newVal,
  359. "feeRateFileID": feeRate.ID,
  360. "feeRateID": feeRate.feeRateID,
  361. "user_id": userID,
  362. "decimal": getDecimal("feeRate")
  363. };
  364. CommonAjax.post('/feeRates/changeFeeRateStandard', data, function (data) {
  365. if (data) {
  366. me.datas.libID = data.libID;
  367. me.datas.libName = data.libName;
  368. me.datas.feeRateID = data.feeRateID;
  369. if (newVal == feeRate.libID) { //如果是本身,则是恢复标准值,设置回旧的树节点折叠属性
  370. let oldRates = me.datas.rates;
  371. for (let i = 0; i < oldRates.length; i++) {
  372. if (data.rates[i] && data.rates[i].ID == oldRates[i].ID) data.rates[i].collapsed = oldRates[i].collapsed;
  373. }
  374. }
  375. me.datas.rates = data.rates;
  376. me.onFeeRateFileChange();
  377. callback();
  378. }
  379. }, function () {
  380. $.bootstrapLoading.end();
  381. });
  382. };
  383. FeeRate.prototype.checkFeeRateName = function (newVal, callback) {
  384. var me = this;
  385. var feeRate = this.getActivateFeeRate();
  386. var data = {
  387. name: newVal,
  388. rootProjectID: feeRate.rootProjectID
  389. }
  390. CommonAjax.post('/feeRates/checkFeeRateName', data, function (data) {
  391. callback(data);
  392. });
  393. };
  394. FeeRate.prototype.feeRateFileSaveAs = function (newName, callback) {
  395. var me = this;
  396. $.bootstrapLoading.start();
  397. this.backupDatas();
  398. this.datas.name = newName;
  399. this.datas.ID = uuid.v1();
  400. this.datas.feeRateID = uuid.v1();
  401. this.datas.usageProjects = [];
  402. this.datas.usageProjects.push({
  403. name: projectObj.project.projectInfo.name,
  404. ID: projectObj.project.projectInfo.ID
  405. });
  406. var data = {
  407. query: {
  408. projectID: projectObj.project.projectInfo.ID
  409. },
  410. doc: this.datas,
  411. user_id: userID
  412. }
  413. CommonAjax.post('/feeRates/feeRateFileSaveAs', data, function (data) {
  414. callback(me.datas);
  415. }, function () {
  416. me.dataRecovery();
  417. $.bootstrapLoading.end();
  418. });
  419. };
  420. FeeRate.prototype.getChangeInfo = function (callback) {
  421. // var projectID = projectObj.project.projectInfo.ID;
  422. var feeRate = this.getActivateFeeRate();
  423. var rootProjectID = feeRate.rootProjectID;
  424. if (!rootProjectID) {
  425. rootProjectID = projectObj.project.projectInfo.property.rootProjectID;
  426. }
  427. var data = {
  428. "user_id": userID,
  429. "projectID": projectObj.project.ID(),
  430. "rootProjectID": rootProjectID
  431. };
  432. CommonAjax.post('/feeRates/getChangeInfo', data, function (data) {
  433. let newDataOther = [];
  434. if (data.others.length > 0) {
  435. let fileHierarchyDatas = getFileHierarchyInfo(data.treeData);
  436. for (let fileHierarchyData of fileHierarchyDatas) {
  437. let projData = _.find(data.others, {
  438. ID: fileHierarchyData.ID
  439. });
  440. if (projData) {
  441. projData.name = fileHierarchyData.fileHierarchyName;
  442. newDataOther.push(projData);
  443. }
  444. }
  445. data.others = newDataOther;
  446. }
  447. callback(data);
  448. });
  449. };
  450. FeeRate.prototype.updateFeeRateFromBills = function (value, node) {
  451. var me = this;
  452. if (node.sourceType === project.Bills.getSourceType()) {
  453. if (value === '' || value === null || value === undefined) { //费费为空或空字符串时,请空对应的费率值和ID
  454. node.updateData.feeRateID = null;
  455. node.updateData.feeRate = null;
  456. node.changed = true;
  457. project.calcProgram.calcAndSave(node);
  458. } else {
  459. var fee_value = number_util.checkNumberValue(value, getDecimal("feeRate"));
  460. if (fee_value != null) {
  461. var bill = node.data;
  462. var rate = me.getFeeRateByID(bill.feeRateID);
  463. var data = me.getfbUpdateData(rate, bill, fee_value, value);
  464. if (data == null) { //只更改清单的值的情况下,由计算程序更新
  465. project.calcProgram.calcAndSave(node);
  466. }
  467. this.setFeeRateToBill(data, function (result) {
  468. if (data.hasOwnProperty('feeRate')) {
  469. rate.rate = fee_value;
  470. me.onFeeRateChange(rate.ID, fee_value);
  471. }
  472. });
  473. } else {
  474. projectObj.mainController.refreshTreeNode([node]);
  475. }
  476. }
  477. }
  478. };
  479. FeeRate.prototype.updateFeeRateFromCalc = function (value, editInfo) {
  480. if (value != null) {
  481. value = number_util.checkNumberValue(value, getDecimal("feeRate"));
  482. if (value == null) {
  483. calcProgramManage.refreshDetailSheet();
  484. $.bootstrapLoading.end();
  485. }
  486. }
  487. /* if(editInfo.calcItem.feeRateID && value!= null){
  488. var rate = this.getFeeRateByID(editInfo.calcItem.feeRateID);
  489. if(rate!=undefined){
  490. this.updateFeeRateByCalc(rate,value);
  491. return;
  492. }
  493. }*/
  494. if (editInfo.calcItem.feeRateID) {
  495. var rate = this.getFeeRateByID(editInfo.calcItem.feeRateID);
  496. if (rate != undefined) {
  497. if (value == null) value = 0;
  498. this.updateFeeRateByCalc(rate, value);
  499. return;
  500. }
  501. }
  502. editInfo.calcItem.feeRate = value;
  503. editInfo.calcItem.feeRateID = null;
  504. var data = {
  505. 'projectID': projectObj.project.ID(),
  506. 'templatesID': editInfo.template.ID,
  507. 'calcItem': editInfo.calcItem
  508. };
  509. calcProgramManage.saveCalcItem(data, function (result) {
  510. project.calcProgram.compileAllTemps();
  511. project.calcProgram.calcAllNodesAndSave();
  512. calcProgramManage.refreshDetailSheet();
  513. $.bootstrapLoading.end();
  514. })
  515. };
  516. FeeRate.prototype.updateFeeRateByCalc = function (rate, value) {
  517. var me = this;
  518. me.updateFeeRateByID(rate.ID, {
  519. 'rate': value
  520. }, function () {
  521. me.onFeeRateChange(rate.ID, value);
  522. })
  523. };
  524. FeeRate.prototype.updateFeeRateByID = function (rateID, doc, callback) {
  525. let me = this,
  526. preKey = 'rates.$.';
  527. /*let data = {
  528. query:{
  529. 'ID':me.getActivateFeeRateID(),
  530. 'rates.ID':rateID
  531. },
  532. doc:{}
  533. };
  534. for(let prop in doc){//做了个转换,加上前缀
  535. data.doc[preKey+prop] = doc[prop];
  536. }
  537. CommonAjax.post('/feeRates/updateFeeRate', data, function (data) {
  538. //更新缓存
  539. let rate = me.getFeeRateByID(rateID);
  540. for(let dkey in doc){
  541. rate[dkey] = doc[dkey];
  542. }
  543. if(callback){
  544. callback();
  545. }
  546. });*/
  547. me.updateFeeRatesByIDs([{
  548. rateID: rateID,
  549. doc: doc
  550. }], callback);
  551. };
  552. FeeRate.prototype.updateFeeRatesByIDs = function (datas, callback) {
  553. let me = this,
  554. preKey = 'rates.$.';
  555. let updateDatas = [];
  556. for (let d of datas) {
  557. let u = {
  558. query: {
  559. 'ID': me.getActivateFeeRateID(),
  560. 'rates.ID': d.rateID
  561. },
  562. doc: {}
  563. }
  564. for (let prop in d.doc) { //做了个转换,加上前缀
  565. u.doc[preKey + prop] = d.doc[prop];
  566. }
  567. updateDatas.push(u);
  568. }
  569. CommonAjax.post('/feeRates/updateFeeRates', updateDatas, function (result) {
  570. //更新缓存
  571. for (let d of datas) {
  572. let rate = me.getFeeRateByID(d.rateID);
  573. for (let dkey in d.doc) {
  574. rate[dkey] = d.doc[dkey];
  575. }
  576. }
  577. if (callback) {
  578. callback();
  579. }
  580. });
  581. };
  582. FeeRate.prototype.getfbUpdateData = function (rate, bill, value, editText) {
  583. var data = null;
  584. if (bill.feeRateID && editText != null) {
  585. data = {};
  586. data.feeRate = {
  587. query: {
  588. 'ID': this.getActivateFeeRateID(),
  589. 'rates.ID': rate.ID
  590. },
  591. doc: {
  592. 'rates.$.rate': value
  593. }
  594. }
  595. } else if (editText == null) {
  596. bill.feeRateID = null;
  597. bill.feeRate = null;
  598. } else { //这里只改变当前清单的费率值,不在这里提交后台,交给计算程序处理。
  599. bill["feeRate"] = value
  600. /* data.bills={
  601. query:{
  602. ID:bill.ID,
  603. projectID:bill.projectID,
  604. deleteInfo:null
  605. },
  606. doc:{
  607. feeRate:value
  608. }
  609. }*/
  610. }
  611. return data;
  612. };
  613. FeeRate.prototype.cleanFeeRateID = function (node) {
  614. var data = {
  615. bills: {
  616. query: {
  617. ID: node.data.ID,
  618. projectID: node.data.projectID,
  619. deleteInfo: null
  620. },
  621. doc: {
  622. feeRate: null,
  623. feeRateID: null
  624. }
  625. }
  626. }
  627. this.setFeeRateToBill(data, function (result) {
  628. node.data.feeRate = null;
  629. node.data.feeRateID = null;
  630. });
  631. };
  632. FeeRate.prototype.submitFeeRateFromBill = function (rate, bills, callback) {
  633. var data = {
  634. bills: {
  635. query: {
  636. ID: bills.ID,
  637. projectID: bills.projectID,
  638. deleteInfo: null
  639. },
  640. doc: {
  641. feeRate: null,
  642. feeRateID: rate.ID
  643. }
  644. }
  645. };
  646. this.setFeeRateToBill(data, callback);
  647. };
  648. FeeRate.prototype.setFeeRateToBill = function (data, callback) {
  649. if (data) {
  650. CommonAjax.post('/feeRates/setFeeRateToBill', data, function (data) {
  651. callback(data);
  652. });
  653. }
  654. };
  655. FeeRate.prototype.loadFeeRateToBill = function (node) {
  656. if (node.data.feeRateID) {
  657. var feeRate = this.getFeeRateByID(node.data.feeRateID);
  658. if (feeRate) {
  659. node.data.feeRate = number_util.roundToString(feeRate.rate, getDecimal("feeRate")); // parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);
  660. }
  661. }
  662. };
  663. FeeRate.prototype.changeFeeRateFileFromCurrent = function (newFeeRateFile, callback) {
  664. let me = this;
  665. let projectID = projectObj.project.projectInfo.ID;
  666. let data = {
  667. "projectID": projectID,
  668. "newFeeRateFile": newFeeRateFile
  669. };
  670. CommonAjax.post('/feeRates/changeFeeRateFileFromCurrent', data, function (data) {
  671. if (data) {
  672. me.datas = data;
  673. callback();
  674. }
  675. }, function () {
  676. $.bootstrapLoading.end();
  677. });
  678. };
  679. FeeRate.prototype.changeFeeRateFileFromOthers = function (feeRateFileID, name, callback) {
  680. let me = this;
  681. let projectID = projectObj.project.projectInfo.ID;
  682. let data = {
  683. "projectID": projectID,
  684. "feeRateFileID": feeRateFileID,
  685. "name": name,
  686. "userID": userID,
  687. "rootProjectID": me.getActivateFeeRate().rootProjectID
  688. };
  689. CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {
  690. if (data) {
  691. me.datas = data;
  692. callback();
  693. }
  694. }, function () {
  695. $.bootstrapLoading.end();
  696. });
  697. };
  698. var feeRate = new FeeRate(project);
  699. return feeRate;
  700. },
  701. };