fee_rate.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  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.sourceType = ModuleNames.feeRate;
  10. proj.registerModule(ModuleNames.feeRate, this);
  11. };
  12. FeeRate.prototype.loadData = function (datas) {
  13. this.datas = datas;
  14. socketObject.connect();
  15. };
  16. FeeRate.prototype.getActivateFeeRate = function () {
  17. var feeRate={
  18. rates:[]
  19. };
  20. if(this.datas){
  21. feeRate = this.datas;
  22. }
  23. return feeRate;
  24. };
  25. FeeRate.prototype.getActivateFeeRateFileID = function(){
  26. var feeRate = this.getActivateFeeRate();
  27. if(feeRate){
  28. return feeRate.ID;
  29. }else {
  30. return 0;
  31. }
  32. };
  33. FeeRate.prototype.getActivateFeeRateID = function(){
  34. var feeRate = this.getActivateFeeRate();
  35. if(feeRate){
  36. return feeRate.feeRateID;
  37. }else {
  38. return 0;
  39. }
  40. };
  41. FeeRate.prototype.getFeeRateByID=function (ID) {
  42. var rates = this.getActivateFeeRate().rates;
  43. return _.find(rates,{'ID':ID})
  44. };
  45. FeeRate.prototype.getSubViewData= function(item) {
  46. var datas = [];
  47. if(item.hasOwnProperty('subFeeRate')&&item.subFeeRate!=undefined){
  48. datas = item.subFeeRate.recodes;
  49. }
  50. return datas;
  51. };
  52. FeeRate.prototype.getValueMap= function(item) {
  53. var valueMap = {};
  54. if(item.hasOwnProperty('subFeeRate')&&item.subFeeRate!=undefined){
  55. var recodes = item.subFeeRate.valueMaps;
  56. _.forEach(recodes,function (r) {
  57. valueMap[r.ID] = r.value;
  58. })
  59. return valueMap;
  60. }else {
  61. return null;
  62. }
  63. };
  64. FeeRate.prototype.getOptions=function (options,subRates,parentID,itemID) {
  65. var data = {};
  66. var list = _.filter(subRates, {'ParentID':parentID});
  67. if(list&&list.length>0){
  68. if(parentID==-1){
  69. data.ID = itemID+'_'+0;
  70. }else {
  71. data.ID = itemID+'_'+parentID;
  72. }
  73. data.name = list[0].type;
  74. data.optionList=[];
  75. }
  76. var nexParent = null;
  77. _.forEach(list,function (c) {
  78. var option={};
  79. option.name = c.name;
  80. option.value = c.ID;
  81. option.selected = c.selected;
  82. data.optionList.push(option);
  83. if(c.selected&&!c.isLeaf){
  84. nexParent = c.ID;
  85. }
  86. })
  87. options.push(data);
  88. if(nexParent!=null){
  89. this.getOptions(options,subRates,nexParent,itemID);
  90. }
  91. };
  92. FeeRate.prototype.getUpdateData=function(type,query,doc,callfunction){
  93. var updateData = [];
  94. var newobj = {
  95. 'updateType': type,
  96. 'query': query,
  97. }
  98. if(doc){
  99. newobj['doc']=doc;
  100. }
  101. if(callfunction){
  102. newobj['updateFunction']=callfunction;
  103. }
  104. updateData.push(newobj);
  105. return updateData;
  106. };
  107. FeeRate.prototype.updateFeeRateByEdit = function(params,feerate){
  108. var query={
  109. ID:feerate.feeRateID
  110. };
  111. var doc ={
  112. rateIndex:params.sourceIndex,
  113. rate:params.dataItem
  114. }
  115. doc.rate.rate =doc.rate.rate.toDecimal(feeRate_consts.decimal);
  116. this.updateFeeRate(query,doc);
  117. if(this.ifRateChange(params)){
  118. //this.synchronizeFeeRate();
  119. this.onFeeRateChange(params.dataItem.ID,params.dataItem.rate);
  120. }
  121. };
  122. FeeRate.prototype.batchUpdateFeeRate = function (items,feerate) {
  123. var query={
  124. ID:feerate.feeRateID
  125. };
  126. this.updateFeeRate(query,items);
  127. };
  128. FeeRate.prototype.updateFeeRate=function (query,doc) {
  129. var updateData = this.getUpdateData('ut_update',query,doc,'update_rates');
  130. project.pushNow('updateFeeRate',[this.sourceType],updateData);
  131. };
  132. FeeRate.prototype.updateStatusBySelected = function (updateTasks) {
  133. var updateData = [];
  134. var newobj = {
  135. 'updateType': 'ut_update',
  136. 'tasks': updateTasks,
  137. 'updateFunction':'updateStatusBySelected'
  138. }
  139. updateData.push(newobj);
  140. project.pushNow('updateFeeRate',[this.sourceType],updateData);
  141. };
  142. FeeRate.prototype.synchronizeFeeRate = function () {
  143. var node = project.mainTree.selected;
  144. if(node){
  145. if (node.sourceType==='ration' && calcProgramObj.sheet) {
  146. calcProgramObj.showData(node);
  147. }
  148. }
  149. };
  150. FeeRate.prototype.ifRateChange=function (params) {
  151. if(params.dataItem.memo==params.oldDataItem.memo){
  152. return true;
  153. }else {
  154. return false;
  155. }
  156. };
  157. FeeRate.prototype.onFeeRateChange=function (rateID,value) {
  158. var node = project.mainTree.selected;
  159. this.refreshCalProgramByRateID(rateID,value);
  160. this.refreshBillsByRateID(rateID,value);
  161. if(node){
  162. if (node.sourceType==='ration' && calcProgramObj.sheet) {
  163. calcProgramObj.showData(node);
  164. }
  165. }
  166. socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
  167. };
  168. FeeRate.prototype.refreshCalProgramByRateID=function (rateID,value) {
  169. var templates = project.calcProgram.datas.templates;
  170. for(var i =0;i<templates.length;i++){
  171. _.forEach(templates[i].calcItems,function (item) {
  172. if(item.feeRateID==rateID){
  173. item.feeRate = value;
  174. }
  175. })
  176. }
  177. project.calcProgram.compileAllTemps();
  178. rationPM.refreshDetailSheet();
  179. };
  180. FeeRate.prototype.refreshBillsByRateID=function(rateID,value){
  181. var nodes = _.filter(projectObj.project.mainTree.items,function (n) {
  182. if(n.sourceType==ModuleNames.bills&&n.data.feeRateID==rateID){
  183. n.data.feeRate=number_util.roundToString(value,feeRate_consts.decimal);
  184. return true;
  185. }else {
  186. return false;
  187. }
  188. })
  189. if(nodes.length>0){
  190. projectObj.mainController.refreshTreeNode(nodes)
  191. }
  192. };
  193. FeeRate.prototype.changeFeeRateStandard=function(newVal,callback){
  194. var me =this;
  195. var feeRate = this.getActivateFeeRate();
  196. var data={
  197. "newLibID": newVal,
  198. "feeRateFileID":feeRate.ID,
  199. "feeRateID":feeRate.feeRateID,
  200. "user_id":userID
  201. };
  202. CommonAjax.post('/feeRates/changeFeeRateStandard', data, function (data) {
  203. if (data) {
  204. me.datas.libID=data.libID;
  205. me.datas.libName=data.libName;
  206. me.datas.feeRateID=data.feeRateID;
  207. me.datas.rates=data.rates;
  208. socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
  209. callback();
  210. }
  211. });
  212. };
  213. FeeRate.prototype.checkFeeRateName = function(newVal,callback){
  214. var me =this;
  215. var feeRate = this.getActivateFeeRate();
  216. var data = {
  217. name:newVal,
  218. rootProjectID:feeRate.rootProjectID
  219. }
  220. CommonAjax.post('/feeRates/checkFeeRateName', data, function (data) {
  221. callback(data);
  222. });
  223. };
  224. FeeRate.prototype.feeRateFileSaveAs = function (newName) {
  225. this.datas.name = newName;
  226. this.datas.ID = uuid.v1();
  227. this.datas.feeRateID=uuid.v1();
  228. this.datas.usageProjects=[];
  229. this.datas.usageProjects.push({name:projectInfoObj.projectInfo.name,ID:projectInfoObj.projectInfo.ID});
  230. var updateData = this.getUpdateData('ut_update',{projectID:projectInfoObj.projectInfo.ID},this.datas,'feeRateFileSaveAs');
  231. project.pushNow('updateFeeRate',[this.sourceType],updateData);
  232. socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
  233. return this.datas;
  234. };
  235. FeeRate.prototype.getChangeInfo = function (callback) {
  236. // var projectID = projectInfoObj.projectInfo.ID;
  237. var feeRate = this.getActivateFeeRate();
  238. var rootProjectID= feeRate.rootProjectID;
  239. if(!rootProjectID){
  240. rootProjectID=projectInfoObj.projectInfo.property.rootProjectID;
  241. }
  242. var data={
  243. "user_id":userID,
  244. "rootProjectID":rootProjectID
  245. };
  246. CommonAjax.post('/feeRates/getChangeInfo', data, function (data) {
  247. callback(data);
  248. });
  249. };
  250. FeeRate.prototype.updateFeeRateFromBills=function(value,node){
  251. var me =this;
  252. if(node.sourceType === project.Bills.getSourceType()){
  253. var value= number_util.checkNumberValue(value,feeRate_consts.decimal);
  254. if(value){
  255. var bill = node.data;
  256. var rate =me.getFeeRateByID(bill.feeRateID);
  257. var data=me.getfbUpdateData(rate,bill,value);
  258. this.setFeeRateToBill(data,function (result) {
  259. if(data.hasOwnProperty('feeRate')){
  260. rate.rate=value;
  261. me.onFeeRateChange(rate.ID,value);
  262. }else {
  263. bill.feeRate=value;
  264. projectObj.mainController.refreshTreeNode([node])
  265. }
  266. });
  267. }else {
  268. projectObj.mainController.refreshTreeNode([node]);
  269. }
  270. }
  271. };
  272. FeeRate.prototype.updateFeeRateFromCalc=function (value,editInfo) {
  273. var value= number_util.checkNumberValue(value,feeRate_consts.decimal);
  274. if(value){
  275. if(editInfo.calcItem.feeRateID){
  276. var rate = projectObj.project.FeeRate.getFeeRateByID(editInfo.calcItem.feeRateID);
  277. if(rate!=undefined){
  278. this.updateFeeRateByCalc(rate,value);
  279. return;
  280. }
  281. }
  282. editInfo.calcItem.feeRate=value;
  283. editInfo.calcItem.feeRateID=null;
  284. var data={'projectID': projectObj.project.ID(),'templatesID': editInfo.template.ID,'calcItem': editInfo.calcItem};
  285. rationPM.saveCalcItem(data,function (result) {
  286. project.calcProgram.compileAllTemps();
  287. rationPM.refreshDetailSheet();
  288. })
  289. }else {
  290. rationPM.refreshDetailSheet();
  291. }
  292. };
  293. FeeRate.prototype.updateFeeRateByCalc=function (rate,value) {
  294. var me=this;
  295. var data={
  296. query:{
  297. 'ID':this.getActivateFeeRateID(),
  298. 'rates.ID':rate.ID
  299. },
  300. doc:{
  301. 'rates.$.rate':value
  302. }
  303. }
  304. CommonAjax.post('/feeRates/updateFeeRate', data, function (data) {
  305. rate.rate=value;
  306. me.onFeeRateChange(rate.ID,value);
  307. });
  308. }
  309. FeeRate.prototype.getfbUpdateData=function (rate,bill,value) {
  310. var data={};
  311. if(bill.feeRateID){
  312. data.feeRate={
  313. query:{
  314. 'ID':this.getActivateFeeRateID(),
  315. 'rates.ID':rate.ID
  316. },
  317. doc:{
  318. 'rates.$.rate':value
  319. }
  320. }
  321. }else {
  322. data.bills={
  323. query:{
  324. ID:bill.ID,
  325. projectID:bill.projectID,
  326. deleteInfo:null
  327. },
  328. doc:{
  329. feeRate:value
  330. }
  331. }
  332. }
  333. return data;
  334. };
  335. FeeRate.prototype.cleanFeeRateID=function (node) {
  336. var data ={
  337. bills:{
  338. query:{
  339. ID:node.data.ID,
  340. projectID:node.data.projectID,
  341. deleteInfo:null
  342. },
  343. doc:{
  344. feeRate:null,
  345. feeRateID:null
  346. }
  347. }
  348. }
  349. this.setFeeRateToBill(data,function (result) {
  350. node.data.feeRate=null;
  351. node.data.feeRateID=null;
  352. });
  353. };
  354. FeeRate.prototype.submitFeeRateFromBill=function (rate,bills,callback) {
  355. var data ={
  356. bills:{
  357. query:{
  358. ID:bills.ID,
  359. projectID:bills.projectID,
  360. deleteInfo:null
  361. },
  362. doc:{
  363. feeRate:null,
  364. feeRateID:rate.ID
  365. }
  366. }
  367. }
  368. this.setFeeRateToBill(data,callback);
  369. };
  370. FeeRate.prototype.setFeeRateToBill=function(data,callback){
  371. CommonAjax.post('/feeRates/setFeeRateToBill', data, function (data) {
  372. callback(data);
  373. });
  374. };
  375. FeeRate.prototype.loadFeeRateToBill=function (node) {
  376. if(node.data.feeRateID){
  377. var feeRate = this.getFeeRateByID(node.data.feeRateID);
  378. if(feeRate){
  379. node.data.feeRate=number_util.roundToString(feeRate.rate,feeRate_consts.decimal);// parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);
  380. }
  381. }
  382. };
  383. FeeRate.prototype.changeFeeRateFileFromCurrent = function (newFeeRateFile,callback){
  384. var me=this;
  385. var projectID = projectInfoObj.projectInfo.ID;
  386. var data={
  387. "projectID": projectID,
  388. "newFeeRateFile":newFeeRateFile
  389. };
  390. CommonAjax.post('/feeRates/changeFeeRateFileFromCurrent', data, function (data) {
  391. if (data) {
  392. me.datas=data;
  393. socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
  394. callback();
  395. }
  396. });
  397. };
  398. FeeRate.prototype.changeFeeRateFileFromOthers=function (feeRateFileID,name,callback) {
  399. var me = this;
  400. var projectID = projectInfoObj.projectInfo.ID;
  401. var data={
  402. "projectID": projectID,
  403. "feeRateFileID":feeRateFileID,
  404. "name":name,
  405. "rootProjectID":me.getActivateFeeRate().rootProjectID
  406. };
  407. CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {
  408. if (data) {
  409. me.datas=data;
  410. socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
  411. callback();
  412. }
  413. });
  414. };
  415. var feeRate = new FeeRate(project);
  416. return feeRate;
  417. },
  418. };