TravelTotalPlugin.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package fi.em.formPlugin;
  2. import kd.bos.dataentity.entity.DynamicObject;
  3. import kd.bos.dataentity.entity.DynamicObjectCollection;
  4. import kd.bos.entity.operate.result.OperationResult;
  5. import kd.bos.form.control.EntryGrid;
  6. import kd.bos.form.events.AfterDoOperationEventArgs;
  7. import kd.bos.form.events.BeforeDoOperationEventArgs;
  8. import kd.bos.form.operate.AbstractOperate;
  9. import kd.bos.form.plugin.AbstractFormPlugin;
  10. import java.math.BigDecimal;
  11. import java.util.HashMap;
  12. import java.util.Iterator;
  13. import java.util.Map;
  14. /**
  15. * @author cjz
  16. * @date 2024/11/7 15:45
  17. * @description:差旅汇总分录计算,条线产品分摊明细分录复制
  18. */
  19. public class TravelTotalPlugin extends AbstractFormPlugin {
  20. private static String bar_save="save";//保存标识
  21. private static String entryentity="nckd_entryentity";//差旅汇总标识
  22. private static String invoiceandexpense="nckd_invoiceandexpense";//条线产品分摊明细分
  23. @Override
  24. public void beforeDoOperation(BeforeDoOperationEventArgs args) {
  25. super.beforeDoOperation(args);
  26. AbstractOperate op = (AbstractOperate)args.getSource();
  27. String operateKey = op.getOperateKey();
  28. //获取当前单据
  29. DynamicObject dynamicObject=this.getModel().getDataEntity(true);
  30. //差旅汇总分录
  31. DynamicObjectCollection nckd_entryentity=dynamicObject.getDynamicObjectCollection(entryentity);
  32. //汇总map
  33. Map<DynamicObject,BigDecimal> allMap=new HashMap<>();
  34. if (bar_save.equals(operateKey)) {
  35. //获取行程信息
  36. DynamicObjectCollection dynamicObjectCollection=dynamicObject.getDynamicObjectCollection("tripentry");
  37. //子卡片分录信息
  38. for (DynamicObject item:dynamicObjectCollection) {
  39. for (DynamicObject entry:item.getDynamicObjectCollection("entryentity")) {
  40. //差旅项目获取
  41. DynamicObject expenseitem=entry.getDynamicObject("expenseitem");
  42. //报销金额获取
  43. BigDecimal orientryamount=entry.getBigDecimal("orientryamount");
  44. //差旅项目不存在则加进map
  45. if (!allMap.containsKey(expenseitem)) {
  46. allMap.put(expenseitem,orientryamount);
  47. }else {
  48. //存在则对该项目进行累加
  49. BigDecimal account = allMap.get(expenseitem);
  50. account=account.add(orientryamount);
  51. allMap.put(expenseitem,account);
  52. }
  53. }
  54. }
  55. Iterator<Map.Entry<DynamicObject, BigDecimal>> iter = allMap.entrySet().iterator();
  56. //清空分录
  57. this.getModel().deleteEntryData(entryentity);
  58. //遍历汇总map
  59. while (iter.hasNext()) {
  60. Map.Entry<DynamicObject, BigDecimal> entry = iter.next();
  61. //新增动态单据分录行
  62. int rowIndex = this.getModel().createNewEntryRow(entryentity);
  63. this.getModel().setValue("nckd_travelitem",entry.getKey(),rowIndex);
  64. this.getModel().setValue("nckd_oriamount",entry.getValue(),rowIndex);
  65. this.getModel().setValue("nckd_triamount",entry.getValue(),rowIndex);
  66. }
  67. //刷新分录
  68. this.getView().updateView("nckd_entryentity");
  69. }
  70. }
  71. // @Override
  72. // public void afterDoOperation(AfterDoOperationEventArgs arg) {
  73. // super.afterDoOperation(arg);
  74. // AbstractOperate op = (AbstractOperate)arg.getSource();
  75. // OperationResult operationResult = arg.getOperationResult();
  76. // String key = op.getOperateKey();
  77. // //点击复制按钮,获取分录中选中的数据行
  78. // if ("copyentry".equals(key)) {
  79. // EntryGrid entryGrid = this.getControl(invoiceandexpense);
  80. // //这个是获取分录的选中行
  81. // int [] selectRows = entryGrid.getSelectRows();
  82. // //获取单据体数据集合
  83. // DynamicObjectCollection entity=this.getModel().getEntryEntity(invoiceandexpense);
  84. // if(selectRows != null){
  85. // for(int selectRow :selectRows){
  86. // DynamicObject dynamicObject=entity.get(selectRow); //获取选中行的单据体数据
  87. // //新增分录行
  88. // int rowIndex = this.getModel().createNewEntryRow(invoiceandexpense);
  89. // //条线
  90. // this.getModel().setValue("nckd_basedatafield",dynamicObject.getDynamicObject("nckd_basedatafield"),rowIndex);
  91. // //产品
  92. // this.getModel().setValue("nckd_basedatafield1",dynamicObject.getDynamicObject("nckd_basedatafield1"),rowIndex);
  93. // //分摊比例
  94. // this.getModel().setValue("nckd_decimalfield",dynamicObject.getBigDecimal("nckd_decimalfield"),rowIndex);
  95. // //分摊金额
  96. // this.getModel().setValue("nckd_amountfield3",dynamicObject.getBigDecimal("nckd_amountfield3"),rowIndex);
  97. //
  98. // }
  99. // }
  100. //
  101. //
  102. // }
  103. // }
  104. }