change.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const RptMemBase = require('./base');
  10. const bindData = {};
  11. const changeConst = require('../const/change');
  12. class rptMemChange extends RptMemBase {
  13. constructor(ctx) {
  14. super(ctx, bindData);
  15. }
  16. async _anaylisChange(change) {
  17. const types = ctx.helper._.map(change.type.split(','), function (t) {
  18. return self._getChangeConstName(changeConst.type, ctx.helper._.toInteger(t));
  19. });
  20. change.type = types.join(';');
  21. change.class = this._getChangeConstName(changeConst.class, change.class);
  22. change.quality = this._getChangeConstName(changeConst.quality, change.quality);
  23. change.charge = this._getChangeConstName(changeConst.charge, change.charge);
  24. }
  25. async doCheckChange(changeId) {
  26. if (this.ctx.change) return;
  27. this.ctx.change = await this.ctx.service.change.getDataByCondition({ where: { cid: changeId }});
  28. this._anaylisChange(this.ctx.change);
  29. }
  30. async doCheckTender(tenderId) {
  31. if (this.ctx.tender) return;
  32. this.ctx.tender = { id: tenderId };
  33. this.ctx.tender.data = await this.ctx.service.getTender(tenderId);
  34. this.ctx.tender.info = await this.ctx.service.tenderInfo.getTenderInfo(tenderId);
  35. }
  36. async doBeforeLoadReport(params) {
  37. await this.doCheckChange(params.change_id);
  38. await this.doCheckTender(this.ctx.change.tid);
  39. }
  40. async _getChangeBills() {
  41. const changeBills = await this.ctx.service.changeAuditList.getAllDataByCondition({ where: { cid: this.ctx.change.cid} });
  42. for (const d of changeBills) {
  43. d.o_qty = d.oamount;
  44. d.o_tp = this.ctx.helper.mul(d.o_qty, d.unit_price, decimal.tp);
  45. d.c_qty = d.camount;
  46. d.c_tp = this.ctx.helper.mul(d.c_qty, d.unit_price, decimal.tp);
  47. d.s_qty = d.samount ? parseFloat(d.samount) : 0;
  48. d.s_tp = this.ctx.helper.mul(d.s_qty, d.unit_price, decimal.tp);
  49. d.sp_qty = d.spamount;
  50. d.sp_tp = this.ctx.helper.mul(d.sp_qty, d.unit_price, decimal.tp);
  51. const auditAmount = d.audit_amount ? d.audit_amount.split(',') : [];
  52. const relaChange = ctx.helper._.find(change, {cid: d.cid});
  53. for (const [i, aa] of auditAmount.entries()) {
  54. const amountField = 'qty_' + (i+1), tpField = 'tp_' + (i+1);
  55. d[amountField] = aa ? parseFloat(aa) : 0;
  56. d[tpField] = ctx.helper.mul(d[amountField], d.unit_price, decimal.tp);
  57. if (relaChange) {
  58. relaChange[tpField] = ctx.helper.add(relaChange[tpField], d[tpField]);
  59. }
  60. }
  61. }
  62. return changeBills;
  63. }
  64. getCommonData(params, tableName, fields, customDefine, customSelect) {
  65. switch (tableName) {
  66. case 'mem_change':
  67. return this.ctx.change;
  68. case 'mem_change_bills':
  69. return this._getChangeBills();
  70. case 'mem_change_audit':
  71. return this.ctx.service.changeAudit.getListGroupByTimes(this.ctx.change.cid, this.ctx.change.times);
  72. case 'mem_change_att':
  73. return this.ctx.service.changeAtt.getChangeAttachment(this.ctx.change.cid);
  74. case 'mem_project':
  75. return this.ctx.service.project.getDataByCondition({ id: this.ctx.session.sessionProject.id });
  76. case 'mem_tender':
  77. return this.ctx.tender.data;
  78. case 'mem_tender_info':
  79. return this.ctx.tender.info;
  80. default:
  81. return [];
  82. }
  83. }
  84. }
  85. module.exports = rptMemChange;