123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- 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<DynamicObject,BigDecimal> 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<Map.Entry<DynamicObject, BigDecimal>> iter = allMap.entrySet().iterator();
- //清空分录
- this.getModel().deleteEntryData(entryentity);
- //遍历汇总map
- while (iter.hasNext()) {
- Map.Entry<DynamicObject, BigDecimal> 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);
- //
- // }
- // }
- //
- //
- // }
- // }
- }
|