AmountEditPlugin.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package fi.em.formPlugin;
  2. import com.kingdee.bos.qing.publish.model.BillModel;
  3. import fi.em.service.PayamountCalcExt;
  4. import kd.bos.dataentity.entity.DynamicObject;
  5. import kd.bos.dataentity.entity.DynamicObjectCollection;
  6. import kd.bos.entity.datamodel.events.ChangeData;
  7. import kd.bos.entity.datamodel.events.PropertyChangedArgs;
  8. import kd.bos.list.plugin.AbstractListPlugin;
  9. import kd.bos.orm.query.QCP;
  10. import kd.bos.orm.query.QFilter;
  11. import kd.bos.servicehelper.BusinessDataServiceHelper;
  12. import kd.bos.servicehelper.operation.SaveServiceHelper;
  13. import kd.fi.er.business.daily.reimburse.AmountObject;
  14. import kd.fi.er.mservice.ext.IErService4Ext;
  15. import kd.sdk.plugin.Plugin;
  16. import java.math.BigDecimal;
  17. /**
  18. * @author cjz
  19. * @date 2024/8/13 18:00
  20. * @description:计算收款金额
  21. */
  22. public class AmountEditPlugin extends AbstractListPlugin implements Plugin,IErService4Ext {
  23. public static String nckd_unexporiusedamount="nckd_unexporiusedamount";//冲销金额标识
  24. public static String nckd_er_tripreimburse_ext="nckd_er_tripreimburse_ext";//差旅报销单标识
  25. public static String orientryamount="orientryamount";//报销金额字段标识
  26. private static String er_prepaybill = "er_prepaybill";//预付借款单标识
  27. @Override
  28. public void propertyChanged(PropertyChangedArgs e)
  29. {
  30. super.beforePropertyChanged(e);
  31. String name = e.getProperty().getName();
  32. //重新出发付现金额计算
  33. if(nckd_unexporiusedamount.equals(name))
  34. {
  35. DynamicObject data=this.getModel().getDataEntity();//获取单据模型
  36. DynamicObjectCollection tripentry = data.getDynamicObjectCollection("tripentry");//获取形成信息分录
  37. //付现金额触发
  38. for (DynamicObject item:tripentry) {
  39. DynamicObjectCollection entryentity_cl=item.getDynamicObjectCollection("entryentity");//差旅明细分录
  40. for (int i=0;i< entryentity_cl.size();i++) {
  41. //判断报销金额是否有值
  42. if (entryentity_cl.get(i).getBigDecimal("orientryamount").compareTo(BigDecimal.ZERO)>0) {
  43. BigDecimal amount=entryentity_cl.get(i).getBigDecimal("orientryamount");
  44. this.getModel().setValue("orientryamount",0,i);
  45. this.getModel().setValue("orientryamount",amount,i);
  46. break;
  47. }
  48. }
  49. }
  50. }
  51. if (nckd_unexporiusedamount.equals(name)||orientryamount.equals(name))
  52. {
  53. DynamicObject data=this.getModel().getDataEntity();//获取单据模型
  54. //冲销金额总数
  55. BigDecimal orgiexpebalanceamount_sum = new BigDecimal("0");
  56. //费用合计
  57. BigDecimal amountfy=new BigDecimal("0");
  58. //行程信息
  59. DynamicObjectCollection tripentry = data.getDynamicObjectCollection("tripentry");//获取形成信息分录
  60. for (DynamicObject item:tripentry) {
  61. DynamicObjectCollection entryentity_cl=item.getDynamicObjectCollection("entryentity");//差旅明细分录
  62. for (int i=0;i< entryentity_cl.size();i++) {
  63. //报销金额总和
  64. amountfy=amountfy.add(entryentity_cl.get(i).getBigDecimal("orientryamount"));
  65. }
  66. }
  67. //amountfy报销金额总和
  68. DynamicObjectCollection nckd_clearloanentry = data.getDynamicObjectCollection("nckd_clearloanentry");//获取冲预付借款分录
  69. for (DynamicObject entryentity:nckd_clearloanentry)
  70. {
  71. //冲销金额
  72. BigDecimal orgiexpebalanceamount=entryentity.getBigDecimal("nckd_unexporiusedamount");
  73. //冲销金额累加计算
  74. orgiexpebalanceamount_sum=orgiexpebalanceamount_sum.add(orgiexpebalanceamount);
  75. }
  76. //计算收款金额
  77. this.getModel().setValue("orireceiveamount",amountfy.subtract(orgiexpebalanceamount_sum),0);
  78. //反写预付借款单未核销金额(借款余额)
  79. //获取冲预付借款分录
  80. nckd_clearloanentry=data.getDynamicObjectCollection("nckd_clearloanentry");
  81. //获取分录改变行号
  82. int number=e.getChangeSet()[0].getRowIndex();
  83. //数据id
  84. Long id=nckd_clearloanentry.get(number).getLong("nckd_bigintfield");
  85. //冲销金额
  86. BigDecimal nckd_unexporiusedamount=nckd_clearloanentry.get(number).getBigDecimal("nckd_unexporiusedamount");
  87. //借款余额
  88. BigDecimal nckd_exporiusedamount=nckd_clearloanentry.get(number).getBigDecimal("nckd_exporiusedamount");
  89. //获取改变行预付单借款编号
  90. String nckd_billno=nckd_clearloanentry.get(number).getString("nckd_billno");
  91. //根据行号查询预付借款单预付信息数据
  92. QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, nckd_billno);
  93. DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.
  94. load(er_prepaybill, "id,number", new QFilter[]{nckd_orgamountFilter});
  95. for (int i=0;i<nckd_orgamountaccount.length;i++) {
  96. DynamicObject dynamicObject = BusinessDataServiceHelper.
  97. loadSingle(nckd_orgamountaccount[i].getPkValue(), nckd_orgamountaccount[i].getDynamicObjectType().getName());
  98. //获取预付信息分录
  99. DynamicObjectCollection expenseentryentity=dynamicObject.getDynamicObjectCollection("expenseentryentity");
  100. for (DynamicObject list:expenseentryentity) {
  101. Long listid=list.getLong("id");
  102. if (listid.equals(id)) {
  103. //未核销金额(借款余额)=借款余额-冲销金额
  104. list.set("nckd_settleamount_et",nckd_exporiusedamount.subtract(nckd_unexporiusedamount));
  105. SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
  106. }
  107. }
  108. }
  109. }
  110. }
  111. }