package tqq9.lc123.cloud.app.plugin.form.pm; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.bill.BillShowParameter; import kd.bos.bill.OperationStatus; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.resource.ResManager; import kd.bos.dataentity.utils.ObjectUtils; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.datamodel.ListSelectedRow; import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.operate.result.OperationResult; import kd.bos.form.*; import kd.bos.form.control.Control; import kd.bos.form.control.EntryGrid; import kd.bos.form.control.events.BeforeClickEvent; import kd.bos.form.events.AfterDoOperationEventArgs; import kd.bos.form.events.ClosedCallBackEvent; import kd.bos.form.events.HyperLinkClickEvent; import kd.bos.form.events.HyperLinkClickListener; import kd.bos.form.field.ItemClassEdit; import kd.bos.form.field.RefBillEdit; import kd.bos.form.field.events.BeforeF7SelectEvent; import kd.bos.form.field.events.BeforeF7SelectListener; import kd.bos.list.ListFilterParameter; import kd.bos.list.ListShowParameter; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.plugin.sample.dynamicform.pcform.field.template.PropertyChanged; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.workflow.bpmn.model.basedata.BaseDataHelper; import kd.sdk.plugin.Plugin; import java.math.BigDecimal; import java.util.ArrayList; import java.util.EventObject; import java.util.List; /** * 采购订单界面插件 * 点击付款计划分录付款单,弹出与预付款选择界面进行预付 */ public class PurorderEntryIntroPaybillPlugin extends AbstractBillPlugIn implements HyperLinkClickListener { private final static Log logger = LogFactory.getLog(PurorderEntryIntroPaybillPlugin.class); @Override public void registerListener(EventObject e) { super.registerListener(e); this.addClickListeners(new String[]{"tqq9_paybillno"}); EntryGrid preEntry = (EntryGrid) this.getView().getControl("purbillentry_pay"); preEntry.addHyperClickListener(this); } /** * 点击付款单反写本次结算金额 */ @Override public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) { super.closedCallBack(closedCallBackEvent); IDataModel model = this.getModel(); IFormView view = this.getView(); String actionId = closedCallBackEvent.getActionId(); Object returnData = closedCallBackEvent.getReturnData(); if (returnData != null) { if ("paybill".equals(actionId)) { DynamicObjectCollection purbillentry_pay = this.getModel().getDataEntity(true).getDynamicObjectCollection("purbillentry_pay"); int seq = 0; for (DynamicObject dynamicObject : purbillentry_pay) { boolean isprepay = dynamicObject.getBoolean("isprepay"); if (isprepay) { seq = dynamicObject.getInt("seq") - 1; } } ListSelectedRow listSelectedRow = ((ListSelectedRowCollection) returnData).get(0); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(listSelectedRow.toString(), "cas_paybill"); BigDecimal unsettleamount = dynamicObject.getBigDecimal("unsettleamount"); model.setValue("tqq9_paybillno", dynamicObject.getString("billno"));//付款单 model.setValue("joinpayamount", unsettleamount, seq);//关联付款金额 model.setValue("paidamount", unsettleamount, seq);//已付金额 model.setValue("tqq9_settleamount", unsettleamount, seq);//本次结算金额 view.setVisible(true, "paidpreallamount,paidallamount,joinpayamount,paidamount,tqq9_settleamount"); } } this.getView().updateView(); } /** * 选择付款单前置条件校验:订货供应商不能为空,勾选是否预付,价税合计不能为空 */ @Override public void beforeClick(BeforeClickEvent evt) { super.beforeClick(evt); IDataModel model = this.getModel(); Control c = (Control) evt.getSource(); String key = c.getKey().toLowerCase(); if ("tqq9_paybillno".equals(key)) { EntryGrid entryGrid = this.getControl("purbillentry_pay"); int length = entryGrid.getSelectRows()[0];//获取点击分录序号从0开始 DynamicObject pm_purorderbill = model.getDataEntity(true);//采购订单 BigDecimal totalallamount = pm_purorderbill.getBigDecimal("totalallamount");//价税合计 if (totalallamount.compareTo(BigDecimal.ZERO)<0) { this.getView().showMessage("价税合计不能为空"); evt.setCancel(true); } DynamicObjectCollection entries = pm_purorderbill.getDynamicObjectCollection("purbillentry_pay");//付款计划分录 DynamicObject supplier = pm_purorderbill.getDynamicObject("supplier");//订货供应商 DynamicObject dynamicObject = entries.get(length); Boolean isprepay = dynamicObject.getBoolean("isprepay"); if (supplier == null) { this.getView().showMessage("订货供应商不能为空"); evt.setCancel(true); } if (isprepay.equals(false)) { this.getView().showMessage("请勾选是否预付"); evt.setCancel(true); } } } /** * 点击付款单字段选择付款单 */ @Override public void click(EventObject evt) { super.click(evt); Control c = (Control) evt.getSource(); String key = c.getKey().toLowerCase(); if ("tqq9_paybillno".equals(key)) { IDataModel model = this.getModel(); int entryRowCount = model.getEntryRowCount("purbillentry_pay"); List selectedNos = new ArrayList(entryRowCount); DynamicObject pm_purorderbill = model.getDataEntity(true);//采购订单 DynamicObjectCollection entries = pm_purorderbill.getDynamicObjectCollection("purbillentry_pay");//付款计划分录 DynamicObject supplier = pm_purorderbill.getDynamicObject("supplier");//订货供应商 if (entries != null) { for (DynamicObject entry : entries) { String tqq9_paybillno = entry.getString("tqq9_paybillno"); if (tqq9_paybillno != null) { selectedNos.add(tqq9_paybillno); } } } QFilter filter = new QFilter("billstatus", "=", "D");//已付款 if (!ObjectUtils.isEmpty(selectedNos)) { filter.and(new QFilter("billno", "not in", selectedNos)); } filter.and(new QFilter("itempayeetype", "=", "bd_supplier"));//收款人类型为供应商 filter.and(new QFilter("itempayee", "=", supplier.getLong("id")));//收款人为采购订单供应商 filter.and(new QFilter("paymenttype.number", "=", "202")); filter.and("unsettleamount", QCP.large_than, BigDecimal.ZERO); //组织一致 DynamicObject org = (DynamicObject) model.getValue("org"); filter.and(new QFilter("entry.settleorg", "=", org.getLong("id"))); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{filter}); showZbBillF7(this.getView(), this.getPluginName(), filter); } } /** * 校验付款比例不能大于100% */ @Override public void propertyChanged(PropertyChangedArgs e) { super.propertyChanged(e); String key = e.getProperty().getName(); ChangeData[] changeSet = e.getChangeSet(); if (StringUtils.equals("payrate", key)) { IDataModel model = this.getModel(); DynamicObject pm_purorderbill = model.getDataEntity(true);//采购订单 DynamicObjectCollection entries = pm_purorderbill.getDynamicObjectCollection("purbillentry_pay");//付款计划分录 BigDecimal zero = BigDecimal.ZERO; for (DynamicObject entry : entries) { BigDecimal payrate = entry.getBigDecimal("payrate"); zero=zero.add(payrate); } if (zero.compareTo(new BigDecimal(100)) > 0) { this.getView().showErrorNotification("付款计划付款比例总计大于100%,请修改"); } } } @Override public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) { int rowIndex = hyperLinkClickEvent.getRowIndex(); String tqq9_paybillno = (String) this.getModel().getValue("tqq9_paybillno", rowIndex); DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{new QFilter("billno", QCP.equals, tqq9_paybillno)}); Long id = paybill.getLong("id"); if (id != null) { BillShowParameter formshowParameter = new BillShowParameter(); formshowParameter.setFormId("cas_paybill"); formshowParameter.getOpenStyle().setInlineStyleCss(new StyleCss()); formshowParameter.setPkId(id); formshowParameter.getOpenStyle().setShowType(ShowType.Modal); formshowParameter.setStatus(OperationStatus.VIEW); this.getView().showForm(formshowParameter); } } public static void showZbBillF7(IFormView view, String pluginName, QFilter filter) { ListShowParameter lsp = ShowFormHelper.createShowListForm("cas_paybill", true, 2); ListFilterParameter lfp = new ListFilterParameter(); lfp.setFilter(filter); lsp.setCustomParam("ismergerows", Boolean.FALSE); lsp.setListFilterParameter(lfp); CloseCallBack closeCallBack = new CloseCallBack(pluginName, "paybill"); lsp.setCloseCallBack(closeCallBack); view.showForm(lsp); } @Override public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { super.afterDoOperation(afterDoOperationEventArgs); OperationResult operationResult = afterDoOperationEventArgs.getOperationResult(); } }