CostAllocationEditPlugin.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package fi.em.formPlugin;
  2. import kd.bos.dataentity.entity.DynamicObjectCollection;
  3. import kd.bos.entity.datamodel.events.ChangeData;
  4. import kd.bos.entity.datamodel.events.PropertyChangedArgs;
  5. import kd.bos.exception.KDBizException;
  6. import kd.bos.form.CloseCallBack;
  7. import kd.bos.form.FormShowParameter;
  8. import kd.bos.form.ShowType;
  9. import kd.bos.form.events.AfterDoOperationEventArgs;
  10. import kd.bos.form.events.ClosedCallBackEvent;
  11. import kd.bos.list.plugin.AbstractListPlugin;
  12. import kd.bos.orm.query.QCP;
  13. import kd.bos.orm.query.QFilter;
  14. import kd.sdk.plugin.Plugin;
  15. import com.alibaba.fastjson.JSONArray;
  16. import com.alibaba.fastjson.JSONObject;
  17. import kd.bos.dataentity.entity.DynamicObject;
  18. import kd.bos.servicehelper.BusinessDataServiceHelper;
  19. import org.apache.commons.lang3.StringUtils;
  20. import java.math.BigDecimal;
  21. import java.util.HashMap;
  22. public class CostAllocationEditPlugin extends AbstractListPlugin implements Plugin {
  23. public static String btn_NOTICE = "donothing"; //操作
  24. public static String btn_NOTICES = "bxddyz"; //操作
  25. public static String nckd_agentparameterf7 = "nckd_agentparameterf7";//动因参数动态列表
  26. private static String bos_org = "bos_org"; //组织
  27. @Override
  28. public void afterDoOperation(AfterDoOperationEventArgs e) {
  29. String operateKey = e.getOperateKey();
  30. if (btn_NOTICE.equals(e.getOperateKey())) { //切换付款方
  31. Object value = this.getModel().getValue("costcompany");//获取当前单据费用公司
  32. DynamicObjectCollection expenseentryentityWait = this.getModel().getEntryEntity("expenseentryentity_wait");
  33. DynamicObject dynamicObject = expenseentryentityWait.get(0);
  34. DynamicObject entrycostcompanyWait = dynamicObject.getDynamicObject("entrycostcompany_wait");
  35. if(entrycostcompanyWait==null){
  36. throw new KDBizException("待摊明细分录为空!");
  37. }
  38. String orgnumber = entrycostcompanyWait.getString("number");//公司编码
  39. String orgid = entrycostcompanyWait.getString("id");//公司id
  40. if (orgnumber == null){
  41. throw new KDBizException("付费承担公司为空!");
  42. }
  43. showParameter(nckd_agentparameterf7, btn_NOTICE,orgnumber,orgid);//调用弹出页面
  44. }else if (btn_NOTICES.equals(e.getOperateKey())) { //切换收款方
  45. Object value = this.getModel().getValue("costcompany");//获取当前单据费用公司
  46. DynamicObject expenseentryentityWait = (DynamicObject)value;
  47. // DynamicObject dynamicObject = expenseentryentityWait.get(0);
  48. // DynamicObject entrycostcompanyWait = dynamicObject.getDynamicObject("entrycostcompany_wait");
  49. if(expenseentryentityWait==null){
  50. throw new KDBizException("承担公司为空!");
  51. }
  52. String orgnumber = expenseentryentityWait.getString("number");//公司编码
  53. String orgid = expenseentryentityWait.getString("id");//公司id
  54. if (orgnumber == null){
  55. throw new KDBizException("付费承担公司为空!");
  56. }
  57. showParameter(nckd_agentparameterf7, btn_NOTICE,orgnumber,orgid);//调用弹出页面
  58. }
  59. }
  60. @Override
  61. public void closedCallBack(ClosedCallBackEvent e) {
  62. super.closedCallBack(e);
  63. if (StringUtils.equals(btn_NOTICE, e.getActionId()) && null != e.getReturnData()) {
  64. //父页面返回参数
  65. HashMap<String, String> returnData = (HashMap<String, String>) e.getReturnData();
  66. String reJaStr = returnData.get("reJaStr");
  67. //判断空
  68. if (StringUtils.isNotBlank(reJaStr)) {
  69. //删除分录信息
  70. this.getModel().deleteEntryData("expenseentryentity_rule");
  71. JSONArray reJa = JSONArray.parseArray(reJaStr);//返回信息数组
  72. BigDecimal sum = new BigDecimal(0);//动因参数总和
  73. //循环计算sum
  74. for(int a =0;a<reJa.size();a++){
  75. JSONObject reJo = reJa.getJSONObject(a);
  76. BigDecimal nckdAgentvalue = reJo.getBigDecimal("nckd_agentvalue");
  77. sum=sum.add(nckdAgentvalue);
  78. }
  79. BigDecimal max = new BigDecimal(0);
  80. BigDecimal zonghe = new BigDecimal(0);
  81. int count = 0;
  82. //循环返回数组插入分录
  83. for(int i =0;i<reJa.size();i++){
  84. //当前循环行
  85. JSONObject reJo = reJa.getJSONObject(i);
  86. //获取组织
  87. String nckd_shareorg = reJo.getString("nckd_shareorg");
  88. QFilter nckd_orgamountFilter = new QFilter("number", QCP.equals,nckd_shareorg);
  89. nckd_orgamountFilter.and("enable", QCP.equals,"1");
  90. //组织实体
  91. DynamicObject nckd_orgamountaccount = BusinessDataServiceHelper.loadSingle(bos_org,"id,nckd_orgfield,nckd_combofield",new QFilter[] {nckd_orgamountFilter});
  92. BigDecimal nckdAgentvalue = reJo.getBigDecimal("nckd_agentvalue");
  93. //计算当前动因值比例
  94. nckdAgentvalue = nckdAgentvalue.divide(sum,4,BigDecimal.ROUND_HALF_UP).setScale(4);
  95. nckdAgentvalue = nckdAgentvalue.multiply(new BigDecimal(100));
  96. //新增分录行
  97. int rowIndex = this.getModel().createNewEntryRow("expenseentryentity_rule");
  98. zonghe=zonghe.add(nckdAgentvalue);
  99. if(nckdAgentvalue.compareTo(max) == 1){
  100. max=nckdAgentvalue;
  101. count=count=rowIndex;
  102. }
  103. //set分录字段
  104. this.getModel().setValue("entrycostcompany_orgrule", nckd_orgamountaccount, rowIndex);
  105. this.getModel().setValue("sharerate_comrule", nckdAgentvalue, rowIndex);
  106. if(i+1==reJa.size()){
  107. zonghe=zonghe.subtract(new BigDecimal(100));
  108. this.getModel().setValue("sharerate_comrule", max.subtract(zonghe), count);
  109. }
  110. }
  111. //刷新分录
  112. this.getView().updateView("expenseentryentity_rule");
  113. }
  114. }
  115. }
  116. public void showParameter(String formId, String actionId,String orgnumber,String orgid) {
  117. //创建弹出页面对象,FormShowParameter表示弹出页面为动态表单
  118. FormShowParameter ShowParameter = new FormShowParameter();
  119. //ListShowParameter ShowParameter = new ListShowParameter();
  120. ShowParameter.setCustomParam("orgnumber", orgnumber);
  121. ShowParameter.setCustomParam("orgid", orgid);
  122. //设置弹出页面的编码
  123. ShowParameter.setFormId(formId);
  124. // ShowParameter.setCaption();
  125. //设置弹出页面标题
  126. ShowParameter.setCaption("动因参数选择");
  127. //设置页面关闭回调方法
  128. //CloseCallBack参数:回调插件,回调标识 btnok
  129. ShowParameter.setCloseCallBack(new CloseCallBack(this, actionId));
  130. //设置弹出页面打开方式,支持模态,新标签等
  131. ShowParameter.getOpenStyle().setShowType(ShowType.Modal);
  132. //弹出页面对象赋值给父页面
  133. this.getView().showForm(ShowParameter);
  134. }
  135. @Override
  136. public void propertyChanged(PropertyChangedArgs e) {
  137. super.beforePropertyChanged(e);
  138. String name = e.getProperty().getName();//获取字段标识
  139. if ("nckd_textfield2".equals(name)) {
  140. ChangeData[] changeSet = e.getChangeSet();//获取值
  141. for (ChangeData changeData : changeSet) {
  142. int rowIndex = changeData.getRowIndex();
  143. Object newValue = changeData.getNewValue();
  144. Object oldValue = changeData.getOldValue();
  145. String nckdTextfield2 = this.getModel().getValue("nckd_textfield2", rowIndex).toString();
  146. QFilter nckd_orgamountFilter = new QFilter("im_purinbill.billentry.lotnumber", QCP.equals,nckdTextfield2);
  147. //组织实体
  148. DynamicObject im_purinbill = BusinessDataServiceHelper.loadSingle("im_purinbill","id,billentry.price",new QFilter[] {nckd_orgamountFilter});
  149. BigDecimal price = im_purinbill.getBigDecimal("price");
  150. this.getModel().setValue("nckd_pricefield1", price, rowIndex);
  151. }
  152. }
  153. }
  154. }