采购申请添加合同物资逻辑和合同看板优化

This commit is contained in:
xuhaihui 2025-12-24 16:46:17 +08:00
parent 02301f9581
commit b4844b3dad
2 changed files with 161 additions and 4 deletions

View File

@ -16,6 +16,9 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* 合同看板二开重写系统部分代码
*/
public class DynamicContractViewUIExt extends DynamicContractViewUI {
/**
@ -98,4 +101,59 @@ public class DynamicContractViewUIExt extends DynamicContractViewUI {
}
}
protected void updateReceive(Long contractId, String payDirection) {
this.getModel().deleteEntryData("receiveentry");
String formId = "";
DynamicObject contract = BusinessDataServiceHelper.loadSingle(contractId, "ec_in_contract", "taxrate.taxRate");
if (PayDirectionEnum.IN.getValue().equals(payDirection)) {
formId = "ec_income_register";
} else {
formId = "ec_payment_register";
}
QFilter incomeFilter = new QFilter("entryentity.contract.id", "=", contractId);
incomeFilter.and(new QFilter("billStatus", "=", "C"));
DynamicObject[] incomeBillCols = BusinessDataServiceHelper.load(formId, "*", new QFilter[]{incomeFilter});
int rowIndex = 0;
for (int i = 0; i < incomeBillCols.length; ++i) {
DynamicObject incomeBillInfo = incomeBillCols[i];
incomeBillInfo = BusinessDataServiceHelper.loadSingle(incomeBillInfo.get("id"), formId);
DynamicObjectCollection incomeBillEntryCols = (DynamicObjectCollection) incomeBillInfo.get("entryentity");
for (int j = 0; j < incomeBillEntryCols.size(); ++j) {
DynamicObject incomeBillEntry = (DynamicObject) incomeBillEntryCols.get(j);
if (incomeBillEntry.get("contract.id") != null && contractId.toString().equals(incomeBillEntry.get("contract.id").toString())) {
this.getModel().createNewEntryRow("receiveentry");
BigDecimal ofTaxAmount = BigDecimal.ZERO;
if (PayDirectionEnum.IN.getValue().equals(payDirection)) {
ofTaxAmount = incomeBillEntry.getBigDecimal("receiptoftaxamount");
} else {
ofTaxAmount = incomeBillEntry.getBigDecimal("thispaymentoftaxamount");
}
BigDecimal taxRate = BigDecimal.ZERO;
if (contract.getDynamicObject("taxrate") != null) {
taxRate = contract.getDynamicObject("taxrate").getBigDecimal("taxRate").divide(BigDecimal.valueOf(100L), 4);
}
BigDecimal amount = ofTaxAmount.divide(BigDecimal.ONE.add(taxRate), 4);
BigDecimal tax = ofTaxAmount.subtract(amount);
this.getModel().setValue("incomebillno", incomeBillInfo.get("billno"), rowIndex);
this.getModel().setValue("incomebillname", incomeBillInfo.get("billname"), rowIndex);
this.getModel().setValue("incomeamount", amount, rowIndex);
this.getModel().setValue("incometaxamount", tax, rowIndex);
this.getModel().setValue("incomeoftaxamount", ofTaxAmount, rowIndex);
this.getModel().setValue("incomebizdate", incomeBillInfo.get("bizdate"), rowIndex);
this.getModel().setValue("incomecreator", incomeBillInfo.get("creator"), rowIndex);
this.getModel().setValue("createdate", incomeBillInfo.get("createtime"), rowIndex);
this.getModel().setValue("incomedesc", incomeBillEntry.get("description"), rowIndex);
this.getModel().setValue("zcgj_incomeapply", incomeBillEntry.get("incomeapply"), rowIndex);//请款单号--二开添加
++rowIndex;
}
}
}
}
}

View File

@ -2,19 +2,32 @@ package zcgj.zcdev.zcdev.pr.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.resource.ResManager;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.CloseCallBack;
import kd.bos.form.ShowFormHelper;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.form.operate.FormOperate;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;
import kd.ec.basedata.business.model.cont.OutTreeListingConstant;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 采购申请单表单插件
@ -22,6 +35,7 @@ import java.util.List;
* 2过滤项目项目的项目组织与财务记账组织一致才显示
* 3项目字段赋值
* 4申请人部门过滤赋值
* 5:添加合同物资按钮对应逻辑
*/
public class PurchaseAppBillPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener {
@Override
@ -97,7 +111,7 @@ public class PurchaseAppBillPlugin extends AbstractBillPlugIn implements BeforeF
DynamicObject fiaccountorg1 = (DynamicObject) fiaccountorg;
qFilters.add(new QFilter("projectorg.id", QCP.in, fiaccountorg1.get("id")));//项目组织
}
} else if ("zcgj_persondepart".equals(propertyName)){
} else if ("zcgj_persondepart".equals(propertyName)) {
// 申请人部门
Object applyer = this.getModel().getValue("applyer");//申请人
if (applyer == null) {
@ -114,4 +128,89 @@ public class PurchaseAppBillPlugin extends AbstractBillPlugIn implements BeforeF
}
formShowParameter.getListFilterParameter().setQFilters(qFilters);
}
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
FormOperate operate = (FormOperate) args.getSource();
if ("selcontlist".equals(operate.getOperateKey())) {
//添加合同物资
this.doSelContList();
}
}
private void doSelContList() {
DynamicObject contract = (DynamicObject) this.getModel().getValue("zcgj_contract");//物资采购合同
if (contract == null) {
this.getView().showTipNotification(ResManager.loadKDString("请先选择物资采购合同。", "MaterialInBillEditPlugin_1", "ec-ecma-formplugin", new Object[0]));
} else {
ListShowParameter parameter = ShowFormHelper.createShowListForm("ec_outtreelisting", true, 3, true);
parameter.getCustomParams().put("isFromMat", "true");
Long contId = contract.getLong("id");
parameter.getListFilterParameter().getQFilters().add(new QFilter("contractid", "=", contId));
parameter.getListFilterParameter().getQFilters().add(new QFilter("resourceitem", "!=", 0));
int rowCount = this.getModel().getEntryRowCount("purchaseentry");//采购明细单据体
List<Long> selIds = new ArrayList();
for (int i = 0; i < rowCount; ++i) {
String id = (String) this.getModel().getValue("zcgj_listingid", i);
if (StringUtils.isNotBlank(id)) {
selIds.add(Long.valueOf(id));
}
}
parameter.getListFilterParameter().getQFilters().add(new QFilter(OutTreeListingConstant.ID_ENTITY_PK, "not in", selIds.toArray()));
CloseCallBack callBack = new CloseCallBack(this, "selcontlist");
parameter.setCloseCallBack(callBack);
this.getView().showForm(parameter);
}
}
public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
super.closedCallBack(closedCallBackEvent);
if ("selcontlist".equals(closedCallBackEvent.getActionId())) {
ListSelectedRowCollection rows = (ListSelectedRowCollection) closedCallBackEvent.getReturnData();
if (rows != null && rows.size() > 0) {
List<Object> listIds = (List) rows.stream().map((obj) -> {
return obj.getPrimaryKeyValue();
}).collect(Collectors.toList());
DynamicObject[] listings = BusinessDataServiceHelper.load(listIds.toArray(new Long[listIds.size()]), EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
this.fillEntryByContListing(listings);
}
}
}
private void fillEntryByContListing(DynamicObject[] listings) {
int rowCount = this.getModel().getEntryRowCount("purchaseentry");
Set<String> listingIdSet = new HashSet();
int i;
for (i = 0; i < rowCount; ++i) {
String id = (String) this.getModel().getValue("zcgj_listingid", i);
if (id != null && id != " ") {
listingIdSet.add(id);
}
}
for (i = 0; i < listings.length; ++i) {
if (!listingIdSet.contains(listings[i].getString("id"))) {
int curIndex = this.getModel().createNewEntryRow("purchaseentry");
this.getModel().updateCache();
this.getModel().setValue("zcgj_listingid", listings[i].get(OutTreeListingConstant.ID_ENTITY_PK), curIndex);
DynamicObject resourceItem = listings[i].getDynamicObject("resourceitem");
this.getModel().setValue("material", resourceItem, curIndex);//资源编码
this.getModel().setValue("entrytaxrate", listings[i].get("rateobj"), curIndex);//税率
this.getModel().setValue("purchaseqty", listings[i].get("totalqty"), curIndex);//采购数量
this.getModel().setValue("price", listings[i].get("currentprice"), curIndex);//预估单价
Object pkValue = listings[i].getPkValue();
QFilter filter = new QFilter("listmodelentry.sublistentry.id", QCP.equals, pkValue);
DynamicObjectCollection ec_out_contract = QueryServiceHelper.query("ec_out_contract", "listmodelentry.sublistentry.zcgj_treeresitemmodel2", new QFilter[]{filter});
if (ec_out_contract.size() > 0) {
Object modelnum = ec_out_contract.get(0).get("listmodelentry.sublistentry.zcgj_treeresitemmodel2");
if (modelnum != null) {
this.getModel().setValue("zcgj_model", modelnum, curIndex);//规格型号
}
}
}
}
}
}