1.入库单下推支出合同结算单工作流插件
This commit is contained in:
parent
1955726e15
commit
11479d90fb
|
@ -0,0 +1,268 @@
|
||||||
|
package zcgj.zcdev.zcdev.pr.plugin.workflow;
|
||||||
|
|
||||||
|
|
||||||
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||||
|
import kd.bos.dataentity.utils.StringUtils;
|
||||||
|
import kd.bos.entity.datamodel.IDataModel;
|
||||||
|
import kd.bos.orm.query.QCP;
|
||||||
|
import kd.bos.orm.query.QFilter;
|
||||||
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||||
|
import kd.bos.servicehelper.botp.BFTrackerServiceHelper;
|
||||||
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||||
|
import kd.bos.workflow.api.AgentExecution;
|
||||||
|
import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
|
||||||
|
import kd.ec.contract.common.enums.DirectionEnum;
|
||||||
|
import kd.ec.contract.common.enums.PayDirectionEnum;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库单计算支出合同结算单金额插件
|
||||||
|
*/
|
||||||
|
public class MaterialInAmountToItemEntryWorkFlowPlugin implements IWorkflowPlugin {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notify(AgentExecution execution) {
|
||||||
|
String eventName = execution.getEventName();
|
||||||
|
String businessKey = execution.getBusinessKey();
|
||||||
|
String entityNumber = execution.getEntityNumber();
|
||||||
|
//入库单
|
||||||
|
DynamicObject materialBill = BusinessDataServiceHelper.loadSingle(businessKey, entityNumber);
|
||||||
|
|
||||||
|
Map<String, HashSet<Long>> sourceBills = BFTrackerServiceHelper.findTargetBills(entityNumber, new Long[]{Long.valueOf(businessKey)});
|
||||||
|
HashSet<Long> outContractSettleMap = sourceBills.get("ec_out_contract_settle");
|
||||||
|
if(outContractSettleMap != null && !outContractSettleMap.isEmpty()) {
|
||||||
|
Long dataId = (Long) outContractSettleMap.toArray()[0];
|
||||||
|
DynamicObject outContractSettle = BusinessDataServiceHelper.loadSingle(dataId, "ec_out_contract_settle");
|
||||||
|
sumMaterialInAmountToItemEntry(outContractSettle);
|
||||||
|
calAllTypeAmount(outContractSettle);
|
||||||
|
SaveServiceHelper.save(new DynamicObject[]{outContractSettle});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void sumMaterialInAmountToItemEntry(DynamicObject outContractSettle) {
|
||||||
|
DynamicObjectCollection materialInEntry = outContractSettle.getDynamicObjectCollection("materialinentry");
|
||||||
|
if (materialInEntry != null && materialInEntry.size() != 0) {
|
||||||
|
BigDecimal amount = BigDecimal.ZERO;
|
||||||
|
BigDecimal ofTaxAmount = BigDecimal.ZERO;
|
||||||
|
boolean isSettleTrans = false;
|
||||||
|
BigDecimal transAmount = BigDecimal.ZERO;
|
||||||
|
BigDecimal transOfTaxAmount = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
for(DynamicObject materialInData : materialInEntry) {
|
||||||
|
BigDecimal materialTaxAmount = materialInData.getBigDecimal("mattaxamount");
|
||||||
|
BigDecimal materialNoTaxAmount = materialInData.getBigDecimal("matnotaxamount");
|
||||||
|
amount = amount.add(materialNoTaxAmount);
|
||||||
|
ofTaxAmount = ofTaxAmount.add(materialTaxAmount);
|
||||||
|
boolean settleTrans = materialInData.getBoolean("istranssettle");
|
||||||
|
if (settleTrans) {
|
||||||
|
BigDecimal transTaxAmount = materialInData.getBigDecimal("transtaxamount");
|
||||||
|
BigDecimal transNoTaxAmount = materialInData.getBigDecimal("transnotaxamount");
|
||||||
|
transAmount = transAmount.add(transNoTaxAmount);
|
||||||
|
transOfTaxAmount = transOfTaxAmount.add(transTaxAmount);
|
||||||
|
isSettleTrans = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry");
|
||||||
|
DynamicObject dynamicObject = itementry.get(0);
|
||||||
|
|
||||||
|
dynamicObject.set("oftaxamount", ofTaxAmount);
|
||||||
|
dynamicObject.set("amount", amount);
|
||||||
|
|
||||||
|
if (BigDecimal.ZERO.compareTo(amount) != 0) {
|
||||||
|
//this.getPageCache().put("ignoreRateChanged", "1");
|
||||||
|
dynamicObject.set("rate", ofTaxAmount.subtract(amount).divide(amount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamicObject.set("taxamt", ofTaxAmount.subtract(amount));
|
||||||
|
|
||||||
|
//int entryRowCount = this.getModel().getEntryRowCount("itementry");
|
||||||
|
if (itementry.size() <= 1) {
|
||||||
|
if (isSettleTrans) {
|
||||||
|
DynamicObject dynamicObject1 = itementry.addNew();
|
||||||
|
//this.getModel().insertEntryRow("itementry", 1);
|
||||||
|
dynamicObject1.set("seq",2);
|
||||||
|
DynamicObject payitem = BusinessDataServiceHelper.loadSingle("ec_payitem",
|
||||||
|
"id,direction", new QFilter[]{new QFilter("id", QCP.equals,760004250343646208L)});//
|
||||||
|
dynamicObject1.set("payitem", payitem);
|
||||||
|
this.fillItemEntryCbs(1,outContractSettle, itementry );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DynamicObject transSettleItem = itementry.get(1);
|
||||||
|
//DynamicObject transSettleItem = this.getModel().getEntryRowEntity("itementry", 1);
|
||||||
|
DynamicObject payItem = transSettleItem.getDynamicObject("payitem");
|
||||||
|
boolean hasSettleTrans = false;
|
||||||
|
if(payItem!=null){
|
||||||
|
hasSettleTrans = "YFJS".equals(payItem.getString("number"));
|
||||||
|
}
|
||||||
|
if (isSettleTrans && !hasSettleTrans) {
|
||||||
|
DynamicObject dynamicObject1 = itementry.addNew();
|
||||||
|
dynamicObject1.set("seq",2);
|
||||||
|
//this.getModel().insertEntryRow("itementry", 1);
|
||||||
|
DynamicObject payitem = BusinessDataServiceHelper.loadSingle("ec_payitem",
|
||||||
|
"id,direction", new QFilter[]{new QFilter("id", QCP.equals,760004250343646208L)});//
|
||||||
|
dynamicObject1.set("payitem", payitem);
|
||||||
|
this.fillItemEntryCbs(1,outContractSettle, itementry);
|
||||||
|
} else if (!isSettleTrans && hasSettleTrans) {
|
||||||
|
transSettleItem.set("oftaxamount", transOfTaxAmount);
|
||||||
|
transSettleItem.set("amount", transAmount);
|
||||||
|
itementry.remove(1);
|
||||||
|
//this.getModel().deleteEntryRow("itementry", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSettleTrans) {
|
||||||
|
DynamicObject transSettleItem = itementry.get(1);
|
||||||
|
transSettleItem.set("oftaxamount", transOfTaxAmount);
|
||||||
|
transSettleItem.set("amount", transAmount);
|
||||||
|
if (BigDecimal.ZERO.compareTo(transAmount) != 0) {
|
||||||
|
transSettleItem.set("rate", transOfTaxAmount.subtract(transAmount).divide(transAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)));
|
||||||
|
}
|
||||||
|
|
||||||
|
transSettleItem.set("taxamt", transOfTaxAmount.subtract(transAmount));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry");
|
||||||
|
//int entryRowCount = this.getModel().getEntryRowCount("itementry");
|
||||||
|
if (itementry.size() > 1) {
|
||||||
|
DynamicObject transSettleItem = itementry.get(1);
|
||||||
|
//DynamicObject transSettleItem = this.getModel().getEntryRowEntity("itementry", 1);
|
||||||
|
DynamicObject payItem = transSettleItem.getDynamicObject("payitem");
|
||||||
|
if (payItem != null && "YFJS".equals(payItem.getString("number"))) {
|
||||||
|
itementry.remove(1);
|
||||||
|
//this.getModel().deleteEntryRow("itementry", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
itementry.get(0).set("oftaxamount", 0);
|
||||||
|
//this.getModel().setValue("oftaxamount", 0, 0);
|
||||||
|
DynamicObject taxRate =outContractSettle.getDynamicObject("taxrate");
|
||||||
|
// DynamicObject taxRate = this.getModel().getDataEntity().getDynamicObject("taxrate");
|
||||||
|
if (taxRate != null) {
|
||||||
|
itementry.get(0).set("rate", taxRate.getBigDecimal("taxrate"));
|
||||||
|
// this.getModel().setValue("rate", taxRate.getBigDecimal("taxrate"), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
itementry.get(0).set("taxamt", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void fillItemEntryCbs(int row,DynamicObject outContractSettle,DynamicObjectCollection itementry) {
|
||||||
|
DynamicObject cbs = this.getNeedFillCbs(outContractSettle);
|
||||||
|
if (cbs != null && !(Boolean)outContractSettle.getBoolean("isonlist")) {
|
||||||
|
itementry.get(row).set("itementry", cbs.getPkValue());
|
||||||
|
//this.getModel().setValue("itemcbs", cbs.getPkValue(), row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected DynamicObject getNeedFillCbs(DynamicObject outContractSettle) {
|
||||||
|
DynamicObject project = outContractSettle.getDynamicObject("project");
|
||||||
|
DynamicObject contract = outContractSettle.getDynamicObject("contract");
|
||||||
|
if (project != null && contract != null) {
|
||||||
|
boolean isBudgetControl = project.getBoolean("budgetcontrol");
|
||||||
|
String controlModel = project.getString("costcontrolmodel");
|
||||||
|
if (isBudgetControl && controlModel.contains("1")) {
|
||||||
|
return contract.getDynamicObject("cbs");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void calAllTypeAmount(DynamicObject outContractSettle) {
|
||||||
|
//DynamicObject thisSettleObj = thisModel.getDataEntity();
|
||||||
|
DynamicObject contract = outContractSettle.getDynamicObject("contract");
|
||||||
|
if (contract != null) {
|
||||||
|
contract = BusinessDataServiceHelper.loadSingle(contract.getPkValue(), "ec_out_contract");
|
||||||
|
BigDecimal calOfTaxAmt = BigDecimal.ZERO;
|
||||||
|
BigDecimal notCalOfTaxAmt = BigDecimal.ZERO;
|
||||||
|
BigDecimal settleOfTaxAmount = outContractSettle.getBigDecimal("settleoftaxamount");
|
||||||
|
BigDecimal totalCalOfTaxAmt = contract.getBigDecimal("totalcaloftaxamt");
|
||||||
|
BigDecimal totalNotCalOfTaxAmt = contract.getBigDecimal("totalnotcaloftaxamt");
|
||||||
|
BigDecimal totalPlanPayOfTaxAmt = contract.getBigDecimal("totalapplyoftaxamount");
|
||||||
|
BigDecimal totalRealPayOfTaxAmt = contract.getBigDecimal("totalrealoftaxamount");
|
||||||
|
BigDecimal totalSettleOfTaxAmount = contract.getBigDecimal("totalsettleoftaxamount");
|
||||||
|
BigDecimal calOfAmt = BigDecimal.ZERO;
|
||||||
|
BigDecimal notCalOfAmt = BigDecimal.ZERO;
|
||||||
|
BigDecimal settleAmount = outContractSettle.getBigDecimal("settleamount");
|
||||||
|
BigDecimal totalCalOfAmt = contract.getBigDecimal("totalcalofamt");
|
||||||
|
BigDecimal totalNotCalOfAmt = contract.getBigDecimal("totalnotcalofamt");
|
||||||
|
BigDecimal totalPlanPayOfAmt = contract.getBigDecimal("totalapplyamount");
|
||||||
|
BigDecimal totalRealPayOfAmt = contract.getBigDecimal("totalrealamount");
|
||||||
|
BigDecimal totalSettleOfAmount = contract.getBigDecimal("totalsettleamount");
|
||||||
|
//thisModel.updateCache();
|
||||||
|
for(DynamicObject itemEntry : outContractSettle.getDynamicObjectCollection("itementry")) {
|
||||||
|
//for(DynamicObject itemEntry : thisModel.getEntryEntity("itementry")) {
|
||||||
|
DynamicObject payItem = itemEntry.getDynamicObject("payitem");
|
||||||
|
if (payItem != null) {
|
||||||
|
String direction = payItem.getString("direction");
|
||||||
|
String paydirection = contract.getString("paydirection");
|
||||||
|
if (direction != null) {
|
||||||
|
if (StringUtils.equals("506427748873442304", String.valueOf(payItem.getPkValue()))) {
|
||||||
|
if (direction.equals(DirectionEnum.ADD.getValue())) {
|
||||||
|
calOfTaxAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.add(itemEntry.getBigDecimal("oftaxamount")) : itemEntry.getBigDecimal("oftaxamount");
|
||||||
|
calOfAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfAmt.add(itemEntry.getBigDecimal("amount")) : itemEntry.getBigDecimal("amount");
|
||||||
|
} else if (direction.equals(DirectionEnum.SUB.getValue())) {
|
||||||
|
calOfTaxAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.subtract(itemEntry.getBigDecimal("oftaxamount")) : BigDecimal.ZERO.subtract(itemEntry.getBigDecimal("oftaxamount"));
|
||||||
|
calOfAmt = paydirection.equals(PayDirectionEnum.IN.getValue()) ? calOfTaxAmt.subtract(itemEntry.getBigDecimal("amount")) : BigDecimal.ZERO.subtract(itemEntry.getBigDecimal("amount"));
|
||||||
|
}
|
||||||
|
} else if (direction.equals(DirectionEnum.ADD.getValue())) {
|
||||||
|
notCalOfTaxAmt = notCalOfTaxAmt.add(itemEntry.getBigDecimal("oftaxamount"));
|
||||||
|
notCalOfAmt = notCalOfAmt.add(itemEntry.getBigDecimal("amount"));
|
||||||
|
} else if (direction.equals(DirectionEnum.SUB.getValue())) {
|
||||||
|
notCalOfTaxAmt = notCalOfTaxAmt.subtract(itemEntry.getBigDecimal("oftaxamount"));
|
||||||
|
notCalOfAmt = notCalOfAmt.subtract(itemEntry.getBigDecimal("amount"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
settleOfTaxAmount = calOfTaxAmt.add(notCalOfTaxAmt);
|
||||||
|
settleAmount = calOfAmt.add(notCalOfAmt);
|
||||||
|
totalCalOfTaxAmt = totalCalOfTaxAmt.add(calOfTaxAmt);
|
||||||
|
totalCalOfAmt = totalCalOfAmt.add(calOfAmt);
|
||||||
|
totalNotCalOfTaxAmt = totalNotCalOfTaxAmt.add(notCalOfTaxAmt);
|
||||||
|
totalNotCalOfAmt = totalNotCalOfAmt.add(notCalOfAmt);
|
||||||
|
totalSettleOfTaxAmount = totalSettleOfTaxAmount.add(settleOfTaxAmount);
|
||||||
|
totalSettleOfAmount = totalSettleOfAmount.add(settleAmount);
|
||||||
|
BigDecimal calTaxAmt = calOfTaxAmt.subtract(calOfAmt);
|
||||||
|
BigDecimal notCalTaxAmt = notCalOfTaxAmt.subtract(notCalOfAmt);
|
||||||
|
BigDecimal taxAmount = settleOfTaxAmount.subtract(settleAmount);
|
||||||
|
BigDecimal totalCalTaxAmt = totalCalOfTaxAmt.subtract(totalCalOfAmt);
|
||||||
|
BigDecimal totalNotCalTaxAmt = totalNotCalOfTaxAmt.subtract(totalNotCalOfAmt);
|
||||||
|
BigDecimal totalSettleTaxAmount = totalSettleOfTaxAmount.subtract(totalSettleOfAmount);
|
||||||
|
BigDecimal totalPlanPayTaxAmt = totalPlanPayOfTaxAmt.subtract(totalPlanPayOfAmt);
|
||||||
|
BigDecimal totalRealPayTaxAmt = totalRealPayOfTaxAmt.subtract(totalRealPayOfAmt);
|
||||||
|
outContractSettle.set("caloftaxamt", calOfTaxAmt);
|
||||||
|
outContractSettle.set("notcaloftaxamt", notCalOfTaxAmt);
|
||||||
|
outContractSettle.set("settleoftaxamount", settleOfTaxAmount);
|
||||||
|
outContractSettle.set("totalcaloftaxamt", totalCalOfTaxAmt);
|
||||||
|
outContractSettle.set("totalnotcaloftaxamt", totalNotCalOfTaxAmt);
|
||||||
|
outContractSettle.set("totalsettleoftaxamount", totalSettleOfTaxAmount);
|
||||||
|
outContractSettle.set("totalplanpayoftaxamt", totalPlanPayOfTaxAmt);
|
||||||
|
outContractSettle.set("totalrealpayoftaxamt", totalRealPayOfTaxAmt);
|
||||||
|
outContractSettle.set("calofamt", calOfAmt);
|
||||||
|
outContractSettle.set("notcalofamt", notCalOfAmt);
|
||||||
|
outContractSettle.set("settleamount", settleAmount);
|
||||||
|
outContractSettle.set("totalcalofamt", totalCalOfAmt);
|
||||||
|
outContractSettle.set("totalnotcalofamt", totalNotCalOfAmt);
|
||||||
|
outContractSettle.set("totalsettleofamount", totalSettleOfAmount);
|
||||||
|
outContractSettle.set("totalplanpayofamt", totalPlanPayOfAmt);
|
||||||
|
outContractSettle.set("totalrealpayofamt", totalRealPayOfAmt);
|
||||||
|
outContractSettle.set("caltaxamt", calTaxAmt);
|
||||||
|
outContractSettle.set("notcaltaxamt", notCalTaxAmt);
|
||||||
|
outContractSettle.set("taxamount", taxAmount);
|
||||||
|
outContractSettle.set("totalcaltaxamt", totalCalTaxAmt);
|
||||||
|
outContractSettle.set("totalnotcaltaxamt", totalNotCalTaxAmt);
|
||||||
|
outContractSettle.set("totalsettletaxamount", totalSettleTaxAmount);
|
||||||
|
outContractSettle.set("totalplanpaytaxamt", totalPlanPayTaxAmt);
|
||||||
|
outContractSettle.set("totalrealpaytaxamt", totalRealPayTaxAmt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue