package fi.em.formPlugin; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.operate.result.OperationResult; import kd.bos.form.control.EntryGrid; import kd.bos.form.events.AfterDoOperationEventArgs; import kd.bos.form.events.BeforeDoOperationEventArgs; import kd.bos.form.operate.AbstractOperate; import kd.bos.form.plugin.AbstractFormPlugin; import java.math.BigDecimal; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * @author cjz * @date 2024/11/7 15:45 * @description:差旅汇总分录计算,条线产品分摊明细分录复制 */ public class TravelTotalPlugin extends AbstractFormPlugin { private static String bar_save="save";//保存标识 private static String entryentity="nckd_entryentity";//差旅汇总标识 private static String invoiceandexpense="nckd_invoiceandexpense";//条线产品分摊明细分 @Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { super.beforeDoOperation(args); AbstractOperate op = (AbstractOperate)args.getSource(); String operateKey = op.getOperateKey(); //获取当前单据 DynamicObject dynamicObject=this.getModel().getDataEntity(true); //差旅汇总分录 DynamicObjectCollection nckd_entryentity=dynamicObject.getDynamicObjectCollection(entryentity); //汇总map Map allMap=new HashMap<>(); if (bar_save.equals(operateKey)) { //获取行程信息 DynamicObjectCollection dynamicObjectCollection=dynamicObject.getDynamicObjectCollection("tripentry"); //子卡片分录信息 for (DynamicObject item:dynamicObjectCollection) { for (DynamicObject entry:item.getDynamicObjectCollection("entryentity")) { //差旅项目获取 DynamicObject expenseitem=entry.getDynamicObject("expenseitem"); //报销金额获取 BigDecimal orientryamount=entry.getBigDecimal("orientryamount"); //差旅项目不存在则加进map if (!allMap.containsKey(expenseitem)) { allMap.put(expenseitem,orientryamount); }else { //存在则对该项目进行累加 BigDecimal account = allMap.get(expenseitem); account=account.add(orientryamount); allMap.put(expenseitem,account); } } } Iterator> iter = allMap.entrySet().iterator(); //清空分录 this.getModel().deleteEntryData(entryentity); //遍历汇总map while (iter.hasNext()) { Map.Entry entry = iter.next(); //新增动态单据分录行 int rowIndex = this.getModel().createNewEntryRow(entryentity); this.getModel().setValue("nckd_travelitem",entry.getKey(),rowIndex); this.getModel().setValue("nckd_oriamount",entry.getValue(),rowIndex); this.getModel().setValue("nckd_triamount",entry.getValue(),rowIndex); } //刷新分录 this.getView().updateView("nckd_entryentity"); } } // @Override // public void afterDoOperation(AfterDoOperationEventArgs arg) { // super.afterDoOperation(arg); // AbstractOperate op = (AbstractOperate)arg.getSource(); // OperationResult operationResult = arg.getOperationResult(); // String key = op.getOperateKey(); // //点击复制按钮,获取分录中选中的数据行 // if ("copyentry".equals(key)) { // EntryGrid entryGrid = this.getControl(invoiceandexpense); // //这个是获取分录的选中行 // int [] selectRows = entryGrid.getSelectRows(); // //获取单据体数据集合 // DynamicObjectCollection entity=this.getModel().getEntryEntity(invoiceandexpense); // if(selectRows != null){ // for(int selectRow :selectRows){ // DynamicObject dynamicObject=entity.get(selectRow); //获取选中行的单据体数据 // //新增分录行 // int rowIndex = this.getModel().createNewEntryRow(invoiceandexpense); // //条线 // this.getModel().setValue("nckd_basedatafield",dynamicObject.getDynamicObject("nckd_basedatafield"),rowIndex); // //产品 // this.getModel().setValue("nckd_basedatafield1",dynamicObject.getDynamicObject("nckd_basedatafield1"),rowIndex); // //分摊比例 // this.getModel().setValue("nckd_decimalfield",dynamicObject.getBigDecimal("nckd_decimalfield"),rowIndex); // //分摊金额 // this.getModel().setValue("nckd_amountfield3",dynamicObject.getBigDecimal("nckd_amountfield3"),rowIndex); // // } // } // // // } // } }