package fi.er.opplugin; import com.alibaba.druid.util.StringUtils; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.form.field.RefBillEdit; import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectListener; import kd.bos.form.plugin.AbstractFormPlugin; import kd.bos.list.ListShowParameter; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; import java.util.EventObject; public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements BeforeF7SelectListener { private static String nckd_apfinapbill = "nckd_apfinapbill"; //应付挂账单字段 private static String nckd_real_card = "assetentry.nckd_real_card"; //应付挂账单字段 private static String nckd_ap_finapbill_gz = "ap_finapbill"; //应付挂账单标识 private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识 @Override public void registerListener(EventObject e) { //监听单据字段 super.registerListener(e); RefBillEdit bill = this.getView().getControl(nckd_apfinapbill); bill.addBeforeF7SelectListener(this); } @Override public void beforeF7Select(BeforeF7SelectEvent arg0) { String fieldKey = arg0.getProperty().getName(); if (StringUtils.equals(fieldKey, nckd_apfinapbill)){ // 生成过滤条件对象QFilter Object nckd_sourcebillid = this.getModel().getValue("nckd_sourcebillid"); if (nckd_sourcebillid != null) { //查询暂估报销单 String sourcebillid = String.valueOf(nckd_sourcebillid); QFilter filter = new QFilter("nckd_sourcebillid", QCP.equals,sourcebillid); filter.and("nckd_ywlx", QCP.equals, "2"); DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load(nckd_er_publicreimbur_ext,"id",new QFilter[] {filter}); if (bxDynamicObjects.length > 0) { DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[0].getPkValue(), bxDynamicObjects[0].getDynamicObjectType().getName()); Long id = bxInfo.getLong("id"); QFilter qFilter = new QFilter("sourcebillid", QCP.equals,id); // 表过滤条件 ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter(); showParameter.getListFilterParameter().setFilter(qFilter); } }else { //选取不到应付挂账单 QFilter qFilter = new QFilter("id", QCP.equals,null); // 表过滤条件 ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter(); showParameter.getListFilterParameter().setFilter(qFilter); } } } @Override public void propertyChanged(PropertyChangedArgs e) { String fieldKey = e.getProperty().getName(); if (StringUtils.equals("nckd_real_card", fieldKey)){ ChangeData changeData = e.getChangeSet()[0]; DynamicObjectCollection dynamicObjectCollection = (DynamicObjectCollection) changeData.getNewValue(); int parentIndex = changeData.getRowIndex(); this.getModel().deleteEntryData("nckd_realcard_list2"); for (int i = 0; i < dynamicObjectCollection.size(); i++) { DynamicObject object = dynamicObjectCollection.get(i); this.getModel().setValue("nckd_card_list_str","1"); //实物卡片清单分录赋值 DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(object.get(2), "nckd_fa_card_real_list"); int rowIndex = this.getModel().createNewEntryRow("nckd_realcard_list2"); this.getModel().setValue("nckd_card_code2",cardInfo,rowIndex,parentIndex); if (i == 0) { String name = cardInfo.getString("name");//资产名称 DynamicObject nckd_dept = cardInfo.getDynamicObject("nckd_dept");//归属部门 String nckd_use_name = cardInfo.getString("nckd_use_name");//使用人 String nckd_local = cardInfo.getString("nckd_local");//存放地点 String nckd_card_model = cardInfo.getString("nckd_card_model");//型号 //资产信息分录赋值 this.getModel().setValue("asset_name", name, parentIndex); //资产类别赋值 //规格型号 this.getModel().setValue("asset_model",nckd_card_model, parentIndex); //使用部门 this.getModel().setValue("asset_costdept",nckd_dept, parentIndex); //使用人 QFilter userFilter = new QFilter("number", QCP.equals,nckd_use_name); DynamicObject[] userDynamicObjects = BusinessDataServiceHelper.load("bos_user","id",new QFilter[] {userFilter}); for (int d=0;d 0) { BigDecimal expeapproveamount = BigDecimal.ZERO;//核定金额 BigDecimal orireceiveamount = BigDecimal.ZERO;//收款金额 //费用明细分录 DynamicObjectCollection expenseentryentity = this.getModel().getEntryEntity("expenseentryentity"); for (DynamicObject object : expenseentryentity) { expeapproveamount = expeapproveamount.add(object.getBigDecimal("expeapproveamount")); } //收款信息分录 DynamicObjectCollection accountentry = this.getModel().getEntryEntity("accountentry"); for (DynamicObject object : accountentry) { orireceiveamount = orireceiveamount.add(object.getBigDecimal("orireceiveamount")); } //冲销金额 BigDecimal nckd_accloanamount = expeapproveamount.subtract(orireceiveamount); //借款余额 BigDecimal nckd_loanamount = nckd_ap_finapbill_detail.get(0).getBigDecimal("nckd_loanamount"); //差额 BigDecimal nckd_sub_amount = nckd_loanamount.subtract(nckd_accloanamount); this.getModel().setValue("nckd_loanamount",nckd_loanamount,0); this.getModel().setValue("nckd_currloanamount",nckd_loanamount,0); this.getModel().setValue("nckd_accloanamount",nckd_accloanamount,0); this.getModel().setValue("nckd_curraccloanamount",nckd_accloanamount,0); this.getModel().setValue("nckd_sub_amount",nckd_sub_amount,0); //刷新冲预付借款分录 this.getView().updateView("nckd_ap_finapbill_detail"); } } } @Override public void afterCreateNewData(EventObject e) { //报账类型 String reimbursetype = (String) this.getModel().getValue("reimbursetype"); int rowIndex = this.getModel().createNewEntryRow("assetentry"); if("asset".equals(reimbursetype)){ //获取费用明细分录 DynamicObjectCollection assetentry = this.getModel().getEntryEntity("expenseentryentity"); //查询费用明细 QFilter filter = new QFilter("name", QCP.equals,"资产报账"); DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("er_expenseitemedit","id",new QFilter[] {filter}); DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[0].getPkValue(), dynamicObjects[0].getDynamicObjectType().getName()); this.getModel().setValue("expenseitem", info, 0); } } }